[DRE-commits] [SCM] ruby-merb-core.git branch, master, updated. upstream/1.1.3-14-gf9f2d4d

Tollef Fog Heen tfheen at debian.org
Thu May 10 08:38:34 UTC 2012


The following commit has been merged in the master branch:
commit 73f520a9395d95a678956d77000976aca6f0acbb
Author: Tollef Fog Heen <tfheen at debian.org>
Date:   Wed May 9 16:58:10 2012 +0200

    Drop spec directories with non-free bits

diff --git a/spec/Gemfile b/spec/Gemfile
deleted file mode 100644
index e69de29..0000000
diff --git a/spec/private/core_ext/kernel_spec.rb b/spec/private/core_ext/kernel_spec.rb
deleted file mode 100644
index d35e710..0000000
--- a/spec/private/core_ext/kernel_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "Kernel#caller" do
-  it "should be able to determine caller info" do
-    __caller_info__.should be_kind_of(Array)
-  end
-
-  it "should be able to get caller lines" do
-    i = 0
-    __caller_lines__(__caller_info__[0], __caller_info__[1], 4) { i += 1 }
-    i.should == 9
-  end
-end
-
-
-describe "Kernel#extract_options_from_args!" do
-  it "should extract options from args" do
-    args = ["foo", "bar", {:baz => :bar}]
-    Kernel.extract_options_from_args!(args).should == {:baz => :bar}
-    args.should == ["foo", "bar"]
-  end
-end
-
-describe "Kernel#dependencies" do
-  it "should warn that dependency() is deprecated" do
-    warning = 'DEPRECATED: Use bundler to setup and load dependency hpricot.'
-    Kernel.should_receive(:warn).with(warning)
-    Kernel.dependency("hpricot")
-  end
-
-  it "should warn that dependencies() is deprecated" do
-    Kernel.should_receive(:warn).twice
-    Kernel.dependencies("hpricot", "extlib")
-  end
-end
diff --git a/spec/private/dispatch/bootloader_spec.rb b/spec/private/dispatch/bootloader_spec.rb
deleted file mode 100644
index 789cd27..0000000
--- a/spec/private/dispatch/bootloader_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe Merb::BootLoader::RackUpApplication do
-
-  it "should default to rack config (rack.rb)" do
-    options = {:merb_root => File.dirname(__FILE__) / 'fixture'}
-    Merb::Config.setup(options)
-    Merb::BootLoader::default_framework
-    Merb::BootLoader::RackUpApplication.run
-    app = Merb::Config[:app]
-    app.class.should == Merb::Rack::Static
-  end
-
-  it "should use rackup config that we specified" do
-    options = {:rackup => File.dirname(__FILE__) / 'fixture' / 'config' / 'black_hole.rb'}
-    Merb::Config.setup(options)
-    Merb::BootLoader::RackUpApplication.run
-    app = Merb::Config[:app]
-
-    # 1.9 returns "#<Class:0xa716858>::Rack::Adapter::BlackHole"
-    app.class.name.should include("Rack::Adapter::BlackHole")
-
-    env = Rack::MockRequest.env_for("/black_hole")
-    status, header, body = app.call(env)
-    status.should == 200
-    header.should == { "Content-Type" => "text/plain" }
-    body.should == ""
-  end
-  
-end
diff --git a/spec/private/dispatch/fixture/app/controllers/application.rb b/spec/private/dispatch/fixture/app/controllers/application.rb
deleted file mode 100644
index 99141ac..0000000
--- a/spec/private/dispatch/fixture/app/controllers/application.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-class Application < Merb::Controller
-end
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/app/controllers/exceptions.rb b/spec/private/dispatch/fixture/app/controllers/exceptions.rb
deleted file mode 100644
index f5c5a9b..0000000
--- a/spec/private/dispatch/fixture/app/controllers/exceptions.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-class Exceptions < Merb::Controller
-
-  attr_reader :handler 
-  
-  # handle NotFound exceptions (404)
-  
-   def not_found
-     @handler = :not_found
-     render :format => :html
-   end
- 
-   # handle NotAcceptable exceptions (406)
-   
-   def not_acceptable
-     @handler = :not_acceptable
-     render "Handled by: not_acceptable"
-   end
- 
-  # # Any client error (400 series)
-  def client_error
-    @handler = :client_error
-    render "Handled by: client_error"
-  end
-
-end
diff --git a/spec/private/dispatch/fixture/app/controllers/foo.rb b/spec/private/dispatch/fixture/app/controllers/foo.rb
deleted file mode 100644
index 683bc2a..0000000
--- a/spec/private/dispatch/fixture/app/controllers/foo.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class Foo < Application
-
-  def index
-    "index"
-  end
-
-  def bar
-    render
-  end
-
-  def raise_conflict
-    raise Conflict
-  end
-  
-  def raise_not_acceptable
-    raise NotAcceptable
-  end
-  
-end  
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/app/helpers/global_helpers.rb b/spec/private/dispatch/fixture/app/helpers/global_helpers.rb
deleted file mode 100644
index 6cbdf14..0000000
--- a/spec/private/dispatch/fixture/app/helpers/global_helpers.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-module Merb
-
-  module GlobalHelper
-    # helpers defined here available to all views.  
-  end
-end
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/app/views/foo/bar.html.erb b/spec/private/dispatch/fixture/app/views/foo/bar.html.erb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec/private/dispatch/fixture/app/views/layout/application.html.erb b/spec/private/dispatch/fixture/app/views/layout/application.html.erb
deleted file mode 100644
index 21c795c..0000000
--- a/spec/private/dispatch/fixture/app/views/layout/application.html.erb
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
-  <head>
-    <title>Fresh Merb App</title>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <link rel="stylesheet" href="/stylesheets/master.css" type="text/css" media="screen" charset="utf-8">
-  </head>
-  <body>
-    <%= catch_content :for_layout %>
-  </body>
-</html>
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/config/black_hole.rb b/spec/private/dispatch/fixture/config/black_hole.rb
deleted file mode 100644
index 6b639ae..0000000
--- a/spec/private/dispatch/fixture/config/black_hole.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# Alternate rackup config
-module Rack
-  module Adapter
-    class BlackHole
-      def call(env)
-        [ 200, { "Content-Type" => "text/plain" }, "" ]
-      end
-    end
-  end
-end
-
-run Rack::Adapter::BlackHole.new
diff --git a/spec/private/dispatch/fixture/config/environments/development.rb b/spec/private/dispatch/fixture/config/environments/development.rb
deleted file mode 100644
index 01db9a0..0000000
--- a/spec/private/dispatch/fixture/config/environments/development.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Merb.logger.info("Loaded DEVELOPMENT Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_classes] = true
-  c[:reload_time] = 0.5
-}
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/config/environments/production.rb b/spec/private/dispatch/fixture/config/environments/production.rb
deleted file mode 100644
index e6d99e6..0000000
--- a/spec/private/dispatch/fixture/config/environments/production.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-Merb.logger.info("Loaded PRODUCTION Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = false
-  c[:reload_classes] = false
-}
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/config/environments/test.rb b/spec/private/dispatch/fixture/config/environments/test.rb
deleted file mode 100644
index 0ea51d1..0000000
--- a/spec/private/dispatch/fixture/config/environments/test.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Merb.logger.info("Loaded TEST Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_classes] = true
-  c[:reload_time] = 0.5
-}
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/config/init.rb b/spec/private/dispatch/fixture/config/init.rb
deleted file mode 100644
index b9f9185..0000000
--- a/spec/private/dispatch/fixture/config/init.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# Make the app's "gems" directory a place where gems are loaded from
-Gem.clear_paths
-Gem.path.unshift(Merb.root / "gems")
-
-# Make the app's "lib" directory a place where ruby files get "require"d from
-$LOAD_PATH.unshift(Merb.root / "lib")
-
-Merb::Config.use { |c|
-  c[:session_store]      = 'cookie'
-  c[:session_secret_key] = "2c24532b38b8c46d8acf1b5ed71bdd5426dadd9b"
-}
-
-### Merb doesn't come with database support by default.  You need
-### an ORM plugin.  Install one, and uncomment one of the following lines,
-### if you need a database.
-
-### Uncomment for DataMapper ORM
-# use_orm :datamapper
-
-### Uncomment for ActiveRecord ORM
-# use_orm :activerecord
-
-### Uncomment for Sequel ORM
-# use_orm :sequel
-
-### This defines which test framework the generators will use
-### rspec is turned on by default
-# use_test :test_unit
-# use_test :rspec
-
-### Add your other dependencies here
-
-# These are some examples of how you might specify dependencies.
-# 
-# dependencies "RedCloth", "merb_helpers"
-# OR
-# dependency "RedCloth", "> 3.0"
-# OR
-# dependencies "RedCloth" => "> 3.0", "ruby-aes-cext" => "= 1.0"
-
-Merb::BootLoader.after_app_loads do
-  ### Add dependencies here that must load after the application loads:
-
-  # dependency "magic_admin" # this gem uses the app's model classes
-end
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/config/rack.rb b/spec/private/dispatch/fixture/config/rack.rb
deleted file mode 100644
index 494c687..0000000
--- a/spec/private/dispatch/fixture/config/rack.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# use PathPrefix Middleware if :path_prefix is set in Merb::Config
-if prefix = ::Merb::Config[:path_prefix]
-  use Merb::Rack::PathPrefix, prefix
-end
-
-# comment this out if you are running merb behind a load balancer
-# that serves static files
-use Merb::Rack::Static, Merb.dir_for(:public)
-
-# this is our main merb application
-run Merb::Rack::Application.new
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/config/router.rb b/spec/private/dispatch/fixture/config/router.rb
deleted file mode 100644
index c60d454..0000000
--- a/spec/private/dispatch/fixture/config/router.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# Merb::Router is the request routing mapper for the merb framework.
-#
-# You can route a specific URL to a controller / action pair:
-#
-#   r.match("/contact").
-#     to(:controller => "info", :action => "contact")
-#
-# You can define placeholder parts of the url with the :symbol notation. These
-# placeholders will be available in the params hash of your controllers. For example:
-#
-#   r.match("/books/:book_id/:action").
-#     to(:controller => "books")
-#   
-# Or, use placeholders in the "to" results for more complicated routing, e.g.:
-#
-#   r.match("/admin/:module/:controller/:action/:id").
-#     to(:controller => ":module/:controller")
-#
-# You can also use regular expressions, deferred routes, and many other options.
-# See merb/specs/merb/router.rb for a fairly complete usage sample.
-
-Merb.logger.info("Compiling routes...")
-Merb::Router.prepare do |r|
-  # RESTful routes
-  # r.resources :posts
-
-  # This is the default route for /:controller/:action/:id
-  # This is fine for most cases.  If you're heavily using resource-based
-  # routes, you may want to comment/remove this line to prevent
-  # clients from calling your create or destroy actions with a GET
-  r.default_routes
-  
-  # Change this for your home page to be available at /
-  # r.match('/').to(:controller => 'whatever', :action =>'index')
-end
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/public/images/merb.jpg b/spec/private/dispatch/fixture/public/images/merb.jpg
deleted file mode 100644
index 4fe7ce7..0000000
Binary files a/spec/private/dispatch/fixture/public/images/merb.jpg and /dev/null differ
diff --git a/spec/private/dispatch/fixture/public/merb.fcgi b/spec/private/dispatch/fixture/public/merb.fcgi
deleted file mode 100644
index f8218e6..0000000
--- a/spec/private/dispatch/fixture/public/merb.fcgi
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env ruby
-
-argv = ARGV + %w[-a fcgi]
-Merb.start(argv)
\ No newline at end of file
diff --git a/spec/private/dispatch/fixture/public/stylesheets/master.css b/spec/private/dispatch/fixture/public/stylesheets/master.css
deleted file mode 100644
index c4fa676..0000000
--- a/spec/private/dispatch/fixture/public/stylesheets/master.css
+++ /dev/null
@@ -1,119 +0,0 @@
-body {
-  font-family: Arial, Verdana, sans-serif;
-  font-size: 12px;
-  background-color: #fff;
-}
-* {
-  margin: 0px;
-  padding: 0px;
-  text-decoration: none;
-}
-html {
-  height: 100%;
-  margin-bottom: 1px;
-}
-#container {
-  width: 80%;
-  text-align: left;
-  background-color: #fff;
-  margin-right: auto;
-  margin-left: auto;
-}
-#header-container {
-  width: 100%;
-  padding-top: 15px;
-}
-#header-container h1, #header-container h2 {
-  margin-left: 6px;
-  margin-bottom: 6px;
-}
-.spacer {
-  width: 100%;
-  height: 15px;
-}
-hr {
-  border: 0px;
-  color: #ccc;
-  background-color: #cdcdcd;
-  height: 1px;
-  width: 100%;
-  text-align: left;
-}
-h1 {
-  font-size: 28px;
-  color: #c55;
-  background-color: #fff;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-}
-h2 {
-  font-size: 15px;
-  color: #999;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-  background-color: #fff;
-}
-h3 {
-  color: #4d9b12;
-  font-size: 15px;
-  text-align: left;
-  font-weight: 300;
-  padding: 5px;
-  margin-top: 5px;
-}
-
-#left-container {
-  float: left;
-  width: 250px;
-  background-color: #FFFFFF;
-  color: black;
-}
-
-#left-container h3 {
-  color: #c55;
-}
-
-#main-container {
-  margin: 5px 5px 5px 260px;
-  padding: 15px;
-  border-left: 1px solid silver;
-  min-height: 400px;
-}
-p {
-  color: #000;
-  background-color: #fff;
-  line-height: 20px;
-  padding: 5px;
-}
-a {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: none;
-}
-a:hover {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: underline;
-}
-#footer-container {
-  clear: both;
-  font-size: 12px;
-  font-family: Verdana, Arial, sans-serif;
-}
-.right {
-  float: right;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-.left {
-  float: left;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-#main-container ul {
-  margin-left: 3.0em;
-}
\ No newline at end of file
diff --git a/spec/private/dispatch/spec_helper.rb b/spec/private/dispatch/spec_helper.rb
deleted file mode 100644
index f4a904e..0000000
--- a/spec/private/dispatch/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
\ No newline at end of file
diff --git a/spec/public/DEFINITIONS b/spec/public/DEFINITIONS
deleted file mode 100644
index c787e99..0000000
--- a/spec/public/DEFINITIONS
+++ /dev/null
@@ -1,11 +0,0 @@
-==== Public API
-This is the API that is available in your app itself. Anything not in the public API is subject to change.
-
-==== Semipublic API
-This is the API that is guaranteed to be available between components of Merb. If something in the semipublic
-API changes, this will likely require changes in other parts of Merb. Additionally, items in the semipublic
-API can be relied upon for introspection, for testing purposes.
-
-For instance, AbstractController#_body should not be used in Merb apps themselves, as it may change, but
-it may be used in other components of Merb and in the Merb tests themselves. Including it in the semipublic
-API is designed to alert Merb's maintainers that changing it will have framework-wide repercussions. 
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/layout/application.erb b/spec/public/abstract_controller/controllers/alt_views/layout/application.erb
deleted file mode 100644
index 0946f7a..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/layout/application.erb
+++ /dev/null
@@ -1 +0,0 @@
-App: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb b/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb
deleted file mode 100644
index a275312..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb
+++ /dev/null
@@ -1 +0,0 @@
-Controller: <%= catch_content :for_layout %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb b/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb
deleted file mode 100644
index a275312..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb
+++ /dev/null
@@ -1 +0,0 @@
-Controller: <%= catch_content :for_layout %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb b/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb
deleted file mode 100644
index 5ed1ab6..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-new index
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb b/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb
deleted file mode 100644
index 4de7ee1..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb
+++ /dev/null
@@ -1 +0,0 @@
-new show
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb b/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb
deleted file mode 100644
index 2072bf0..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Multiple
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb b/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb
deleted file mode 100644
index b99ef60..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-Alt Partial
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb b/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb
deleted file mode 100644
index ab350dc..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Woot.
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb b/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb
deleted file mode 100644
index 989dfa3..0000000
--- a/spec/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Good.
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/cousins.rb b/spec/public/abstract_controller/controllers/cousins.rb
deleted file mode 100644
index b3ff445..0000000
--- a/spec/public/abstract_controller/controllers/cousins.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-module Merb::Test::Fixtures
-  
-  module Abstract
-    
-    class Testing < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-    
-    class FilterParent < Testing
-      before :print_before_filter
-      
-      def print_before_filter
-        @before_string = "Before"
-      end
-    end
-    
-    class FilterChild1 < FilterParent
-      before :print_before_filter, :only => :limited
-      
-      def index
-        @before_string.to_s + " Index"
-      end
-      
-      def limited
-        @before_string.to_s + " Limited"
-      end
-    end
-
-    class FilterChild2 < FilterParent
-      
-      def index
-        @before_string.to_s + " Index"
-      end
-      
-      def limited
-        @before_string.to_s + " Limited"
-      end
-    end
-    
-    # #611 in merb-core tracker
-    class HasFiltersWithSimilarNames < Testing
-      before :befilter
-      before :bef
-
-      def index
-        @before_string.to_s + " Index"
-      end
-
-      protected
-
-      def befilter
-        @before_string = "Befilter"
-      end
-
-      def bef
-        @before_string << " Bef"
-      end
-    end # HasFiltersWithSimilarNames
-  end # Abstract
-end
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/display.rb b/spec/public/abstract_controller/controllers/display.rb
deleted file mode 100644
index 1a6158f..0000000
--- a/spec/public/abstract_controller/controllers/display.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-module Merb::Test::Fixtures
-
-  module Abstract
-    
-    class SomeModel; end
-    
-    class Testing < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-    
-    class DisplayObject < Testing
-      def index
-        @obj = SomeModel.new
-        display @obj
-      end
-    end
-    
-    class DisplayObjectWithAction < Testing
-      def create
-        @obj = SomeModel.new
-        display @obj, :new
-      end
-    end
-    
-    class DisplayObjectWithPath < Testing
-      def index
-        @obj = SomeModel.new
-        display @obj, "test_display/foo.html"
-      end
-    end
-
-    class DisplayObjectWithPathViaOpts < Testing
-      def index
-        @obj = SomeModel.new
-        display @obj, :template => "test_display/foo.html"
-      end
-    end
-    
-    class DisplayObjectWithMultipleRoots < DisplayObject
-      self._template_roots << [File.dirname(__FILE__) / "alt_views", :_template_location]
-      
-      def show
-        @obj = SomeModel.new
-        display @obj, nil, :layout=>"alt"
-      end
-      
-      def another
-        @obj = SomeModel.new
-        display @obj, "test_display/foo.html", :layout=>false
-      end
-      
-      def wonderful
-        true
-      end
-    end
-  end
-
-end
diff --git a/spec/public/abstract_controller/controllers/filters.rb b/spec/public/abstract_controller/controllers/filters.rb
deleted file mode 100644
index 70a5eff..0000000
--- a/spec/public/abstract_controller/controllers/filters.rb
+++ /dev/null
@@ -1,277 +0,0 @@
-# ==== Methodology
-# Each of the controllers tested here tests a discrete, single case. This
-# is to ensure that each test is actually testing exactly what we want,
-# and that other features (or lack thereof), are not causing tests to fail
-# that would otherwise pass.
-module Merb::Test::Fixtures
-  
-  module Abstract
-    
-    class Testing < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    class TestBeforeFilter < Testing
-      before :foo
-
-      def index
-        "#{@x}"
-      end
-      
-      private
-      
-      def foo
-        @x = "foo filter"
-      end    
-    end
-
-    class TestAfterFilter < Testing
-      after :foo
-
-      def index
-        "index action"
-      end
-      
-      private
-      
-      def foo
-        @body = "foo filter"
-      end        
-    end
-
-    class TestSkipFilter < TestBeforeFilter
-      skip_before :foo
-    end
-
-    class TestBeforeFilterOrder < TestBeforeFilter
-      before :bar
-
-      def index
-        "#{@x}"
-      end
-    
-      private
-      
-      def bar
-        @x = "bar filter"
-      end
-    end
-
-    class TestAfterFilterOrder < TestAfterFilter
-      after :bar
-
-      def index
-        "index action"
-      end
-    
-      private
-      
-      def bar
-        @body = "bar filter"
-      end
-    end
-
-    class TestProcFilter < Testing
-      before { @x = "proc filter1" }
-      before Proc.new { @y = "proc filter2" }
-
-      def index
-        "#{@x} #{@y}"
-      end
-    end
-    
-    class TestProcFilterViaMethod < Testing
-      def self.my_before(data)
-        before proc { add_string(data) }
-      end
-      
-      my_before("one")
-      my_before("two")
-
-      def index
-        @text
-      end
-      protected
-        def add_string(str)
-          @text ||= ""
-          @text << str
-        end
-    end
-
-    class TestExcludeFilter < Testing
-      before :foo, :exclude => :index
-      before :bar, :exclude => [:index]
-
-      def index
-        "#{@x} #{@y}"
-      end
-
-      def show
-        "#{@x} #{@y}"
-      end
-    
-      private
-      
-      def foo
-        @x = "foo filter"
-      end
-
-      def bar
-        @y = "bar filter"
-      end
-    end
-
-    class TestOnlyFilter < Testing
-      before :foo, :only => :index
-      before :bar, :only => [:index]
-
-      def index
-        "#{@x} #{@y}"
-      end
-
-      def show
-        "#{@x} #{@y}"
-      end
-    
-      private
-      
-      def foo
-        @x = "foo filter"
-      end
-
-      def bar
-        @y = "bar filter"
-      end
-    end
-    
-    class TestConditionalFilterWithMethod < Testing
-      before  :foo, :if => :bar
-      
-      attr_accessor :bar
-      
-      def index
-        "#{@x}"
-      end
-      
-      private
-      def foo
-        @x = "foo filter"
-      end
-    end
-    
-    class TestConditionalFilterWithProc < Testing
-      after   :foo, :unless => proc { self.bar == "bar" }
-      
-      attr_accessor :bar
-      
-      def index
-        "index action"
-      end
-      
-      private
-      def foo
-        @body = "foo filter"
-      end
-    end
-    
-    class TestConditionalFilterWithNoProcOrSymbol < Testing
-      after   :foo, :unless => true
-      
-      def index
-        "index action"
-      end
-    end
-    
-    class TestBeforeFilterWithArgument < Testing
-      before :foo, :with => "bar"
-      
-      def index
-        "index action"
-      end
-      
-      private
-      def foo(bar)
-        bar == "bar"
-      end
-    end
-    
-    class TestBeforeFilterWithArguments < Testing
-      before :foo, :with => ["bar", "baz"]
-      
-      def index
-        "index action"
-      end
-      
-      private
-      def foo(bar,baz)
-        bar == "bar" && baz == "baz"
-      end
-    end
-    
-    class BeforeFilterWithThrowHalt < Testing
-      before do
-        throw :halt, "Halt thrown"
-      end
-      
-      def index
-        "Halt not thrown"
-      end      
-    end
-    
-    class ActionWithThrowHalt < Testing
-      def index
-        throw :halt, "Halt thrown"
-      end      
-    end
-    
-    class ActionWithHaltInMethod < Testing
-      def index
-        get_user
-        "Halt not thrown"
-      end
-      private
-      def get_user
-        throw :halt, "Halt thrown"
-      end
-    end
-    
-    class BeforeFilterWithThrowProc < Testing
-      before do
-        throw :halt, Proc.new { "Proc thrown" }
-      end
-      
-      def index
-        "Proc not thrown"
-      end
-    end
-    
-    class ThrowNil < Testing
-      before do
-        throw :halt, nil
-      end
-      
-      def index
-        "Awesome"
-      end
-    end
-    
-    class FilterChainError < Testing
-      before do
-        throw :halt, Merb
-      end
-      
-      def index
-        "Awesome"
-      end
-    end
-    
-    class Benchmarking < Testing
-      before {}
-      after {}
-      
-      def index
-        "Awesome"
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/helpers.rb b/spec/public/abstract_controller/controllers/helpers.rb
deleted file mode 100644
index 3ad19aa..0000000
--- a/spec/public/abstract_controller/controllers/helpers.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-module Merb::Test::Fixtures
-  module Abstract
-  
-    class HelperTesting < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-      
-      def _template_location(context, type = nil, controller = controller_name)
-        "helpers/#{File.basename(controller)}/#{context}"
-      end
-      
-      def index
-        render
-      end
-    end
-    
-    class Capture < HelperTesting
-    end
-    
-    class CaptureWithArgs < HelperTesting
-    end
-    
-    class CaptureReturnValue < HelperTesting
-    end
-
-    class CaptureNonStringReturnValue < HelperTesting
-    end
-
-    class CaptureEq < HelperTesting
-      def helper_using_capture(&blk)
-        "Beginning... #{capture(&blk)}... Done"
-      end
-    end
-
-    module ConcatHelper
-      def concatter(&blk)
-        concat("Concat", blk.binding)
-      end
-    end
-    
-    class Concat < HelperTesting
-      def index
-        render
-      end
-    end
-       
-  end
-end
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/partial.rb b/spec/public/abstract_controller/controllers/partial.rb
deleted file mode 100644
index f6cb7d3..0000000
--- a/spec/public/abstract_controller/controllers/partial.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-module Merb::Test::Fixtures
-
-  module Abstract
-
-    class RenderIt < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-
-      def _template_location(context, type = nil, controller = controller_name)
-        "partial/#{File.basename(controller)}/#{context}"
-      end
-    end
-    
-    class BasicPartial < RenderIt
-
-      def index
-        render
-      end
-    end
-
-    class WithAbsolutePartial < RenderIt
-      
-      def index
-        @absolute_partial_path = File.expand_path(File.dirname(__FILE__)) / 'views' / 'partial' / 'with_absolute_partial' / 'partial'
-        render 
-      end
-    end
-
-    class WithPartial < RenderIt
-
-      def index
-        @foo = "With"
-        render
-      end
-    end
-
-    class WithNilPartial < RenderIt
-
-      def index
-        render
-      end
-    end
-
-    class WithAsPartial < RenderIt
-
-      def index
-        @foo = "With and As"
-        render
-      end
-    end
-
-    class PartialWithCollections < RenderIt
-
-      def index
-        @foo = %w{ c o l l e c t i o n }
-        render
-      end
-    end
-
-    class PartialWithCollectionsAndAs < RenderIt
-
-      def index
-        @foo = %w{ c o l l e c t i o n }
-        render
-      end
-    end
-    
-   class PartialWithCollectionsAndCounter < RenderIt
-      def index
-        @foo = %w(1 2 3 4 5)
-        render
-      end
-    end
-
-    class PartialWithLocals < RenderIt
-
-      def index
-        @foo, @bar = %w{ local variables }
-        render
-      end
-    end
-
-    class PartialWithLocalsOverridingHelpers < RenderIt
-
-      def index
-        @foo = %w{ local }
-        render
-      end
-      
-      def value
-        "helper"
-      end
-    end
-
-    class PartialWithDifferentSetsOfLocals < RenderIt
-
-      def index
-        render
-      end
-    end
-
-    class PartialWithBoth < RenderIt
-
-      def index
-        @foo = %w{ c o l l e c t i o n }
-        @delimiter = "-"
-        render
-      end
-    end
-
-    class PartialWithWithAndLocals < RenderIt
-
-      def index
-        @foo, @bar = "with", "and locals"
-        render
-      end
-    end
-
-    class PartialInAnotherDirectory < RenderIt
-
-      def index
-        render
-      end
-    end
-
-    class NestedPartial < RenderIt
-      def index
-        render
-      end
-    end
-
-    class BasicPartialWithMultipleRoots < RenderIt
-      self._template_roots << [File.dirname(__FILE__) / "alt_views", :_template_location]
-      def index
-        render
-      end
-    end
-    
-    class PartialWithMultipleLocals < RenderIt
-      def first
-        partial :foo, :bar => "baz"
-      end
-      
-      def second
-        partial :foo, :baz => "bat"
-      end
-      
-      def third
-        partial :foo, :bar => "bat"
-      end
-    end
-    
-    class PartialWithAbsolutePath < RenderIt
-      def index
-        partial "#{File.expand_path(File.dirname(__FILE__))}/views/partial/basic_partial/partial2",
-          :with => "Hello world"
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/render.rb b/spec/public/abstract_controller/controllers/render.rb
deleted file mode 100644
index 8342311..0000000
--- a/spec/public/abstract_controller/controllers/render.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
-module Merb::Test::Fixtures
-
-  module Abstract
-    
-    class Testing < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-		class RenderTwoAppendContents < Testing
-			
-			def index
-				render
-			end
-		end
-
-    class RenderString < Testing
-      
-      def index
-        render "the index"
-      end
-    end
-
-    class RenderStringCustomLayout < RenderString
-      layout :custom
-    end
-
-    class RenderStringAppLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"      
-    end
-
-    class RenderStringControllerLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"
-    end
-    
-    class RenderStringDynamicLayout < RenderString
-      layout :determine_layout
-      
-      def alt_index
-        render "the alt index"
-      end
-      
-      def determine_layout
-        action_name.index('alt') == 0 ? 'alt' : 'custom'
-      end
-    end
-
-    class RenderTemplate < Testing
-      
-      def index
-        render
-      end      
-    end
-
-    class RenderTemplateCustomLayout < RenderString
-      layout :custom
-    end
-
-    class RenderTemplateAppLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"      
-    end
-
-    class RenderTemplateControllerLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"      
-    end  
-    
-    class RenderNoDefaultAppLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"
-      self.layout false
-    end
-    
-    class RenderNoDefaultAppLayoutInherited < RenderNoDefaultAppLayout
-    end
-    
-    class RenderDefaultAppLayoutInheritedOverride < RenderNoDefaultAppLayout
-      self.default_layout
-    end
-    
-    class RenderTemplateCustomLocation < RenderTemplate      
-      def _template_location(context, type = nil, controller = controller_name)  
-        "wonderful/#{context}"
-      end
-    end
-    
-    class RenderTemplateAbsolutePath < RenderTemplate
-      
-      def index
-        render :template => File.expand_path(self._template_root) / 'wonderful' / 'index'
-      end
-      
-    end
-    
-    class RenderTemplateMultipleRoots < RenderTemplate
-      self._template_roots << [File.dirname(__FILE__) / "alt_views", :_template_location]
-      
-      def show
-        render :layout => false
-      end
-    end
-
-    class RenderTemplateMultipleRootsAndCustomLocation < RenderTemplate
-      self._template_roots = [[File.dirname(__FILE__) / "alt_views", :_custom_template_location]]
-      
-      def _custom_template_location(context, type = nil, controller = controller_name)
-        "#{self.class.name.split('::')[-1].to_const_path}/#{context}"
-      end
-    end
-    
-    class RenderTemplateMultipleRootsInherited < RenderTemplateMultipleRootsAndCustomLocation
-    end
-  end
-end
diff --git a/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb b/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb
deleted file mode 100644
index 0970a92..0000000
--- a/spec/public/abstract_controller/controllers/views/helpers/capture/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% x = capture do -%>Capture<% end -%><%= x %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb b/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb
deleted file mode 100644
index c20537a..0000000
--- a/spec/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Pre. <%= helper_using_capture do %>Capturing<% end =%>. Post.
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/helpers/capture_non_string_return_value/index.erb b/spec/public/abstract_controller/controllers/views/helpers/capture_non_string_return_value/index.erb
deleted file mode 100644
index 2fa59e0..0000000
--- a/spec/public/abstract_controller/controllers/views/helpers/capture_non_string_return_value/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% x = "Captured '" << capture{ nil } << "'" %><%= x %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/helpers/capture_return_value/index.erb b/spec/public/abstract_controller/controllers/views/helpers/capture_return_value/index.erb
deleted file mode 100644
index 88c3a22..0000000
--- a/spec/public/abstract_controller/controllers/views/helpers/capture_return_value/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% x = capture do "Capture" end -%><%= x %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb b/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb
deleted file mode 100644
index d4dabe7..0000000
--- a/spec/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% x = capture('one', 'two') do |one, two| -%>Capture: <%= one %>, <%= two %><% end -%><%= x %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb b/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb
deleted file mode 100644
index 6f66205..0000000
--- a/spec/public/abstract_controller/controllers/views/helpers/concat/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% concatter do -%>Hello<% end -%>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/layout/alt.erb b/spec/public/abstract_controller/controllers/views/layout/alt.erb
deleted file mode 100644
index 6003f10..0000000
--- a/spec/public/abstract_controller/controllers/views/layout/alt.erb
+++ /dev/null
@@ -1 +0,0 @@
-Alt: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/layout/custom.erb b/spec/public/abstract_controller/controllers/views/layout/custom.erb
deleted file mode 100644
index 95aecf9..0000000
--- a/spec/public/abstract_controller/controllers/views/layout/custom.erb
+++ /dev/null
@@ -1 +0,0 @@
-Custom: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb b/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb
deleted file mode 100644
index 5bec4c8..0000000
--- a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-the index
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb b/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb
deleted file mode 100644
index 6ccefea..0000000
--- a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb
+++ /dev/null
@@ -1 +0,0 @@
-new action
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb b/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb
deleted file mode 100644
index 5bec4c8..0000000
--- a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-the index
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb b/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb b/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb
deleted file mode 100644
index 5bec4c8..0000000
--- a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-the index
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb b/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb
deleted file mode 100644
index efa11ff..0000000
--- a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-This is overriden by the custom template root
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb b/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb
deleted file mode 100644
index 28eca30..0000000
--- a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb
+++ /dev/null
@@ -1 +0,0 @@
-default show
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_append_contents/index.erb b/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_append_contents/index.erb
deleted file mode 100644
index 725f833..0000000
--- a/spec/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_append_contents/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% append_content(:foo, "Foo") %><% append_content(:foo, "Bar") %><%= catch_content(:foo) =%>
diff --git a/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb b/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb
deleted file mode 100644
index ba0f9ef..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial in another directory
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb b/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb
deleted file mode 100644
index 8bfc4e8..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial2.erb b/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial2.erb
deleted file mode 100644
index d039fe7..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/basic_partial/_partial2.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= partial2 %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb b/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb
deleted file mode 100644
index 0f23025..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/basic_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Index <%= partial :partial %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb b/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb
deleted file mode 100644
index 512967a..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Base Index: <%= partial :partial %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb b/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb
deleted file mode 100644
index ce0a0e8..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= msg %> <%= partial 'second', :another => 'second' %> <%= msg %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb b/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb
deleted file mode 100644
index be40ea4..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= another %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb b/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb
deleted file mode 100644
index b62d70d..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/nested_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= partial 'first', :msg => 'first' %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb
deleted file mode 100644
index 12b070e..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Index <%= partial 'another_directory/partial' %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb
deleted file mode 100644
index 9a526e0..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= letter %><%= delimiter %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb
deleted file mode 100644
index 964482b..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :collection, :with => @foo, :as => :letter, :delimiter => @delimiter %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb
deleted file mode 100644
index bcfe958..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= collection %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb
deleted file mode 100644
index f0f45d6..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :collection, :with => @foo %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb
deleted file mode 100644
index ce8c7c7..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= letter %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb
deleted file mode 100644
index 6c774ce..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :collection, :with => @foo, :as => :letter %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb
deleted file mode 100644
index 5f5dfa6..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= collection_index %>/<%= collection_size %> 
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb
deleted file mode 100644
index 94b982d..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial counting: <%= partial :collection, :with => @foo %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/_ab.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/_ab.erb
deleted file mode 100644
index 09a07ab..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/_ab.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= a if defined?(a) && a%><%= b if defined?(b) && b %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/index.erb
deleted file mode 100644
index 8e906ee..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= partial(:ab, :a => "a")%><%= partial(:ab, :b => "b") %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb
deleted file mode 100644
index c9fdb22..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= local %> <%= variables %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb
deleted file mode 100644
index f10591c..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :variables, :local => @foo, :variables => @bar %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/_variable.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/_variable.erb
deleted file mode 100644
index 4ba5932..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/_variable.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= value.inspect %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/index.erb
deleted file mode 100644
index e5e4067..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :variable, :value => @foo %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_multiple_locals/_foo.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_multiple_locals/_foo.erb
deleted file mode 100644
index 70b7635..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_multiple_locals/_foo.erb
+++ /dev/null
@@ -1 +0,0 @@
-Bar: "<%= bar if defined?(bar) %>"; Baz: "<%= baz if defined?(baz) %>"
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb
deleted file mode 100644
index 0d2fd59..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= first %> <%= second %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb b/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb
deleted file mode 100644
index 8b8c1a0..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :both, :with => @foo, :as => :first, :second => @bar %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb b/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb
deleted file mode 100644
index 982f0ed..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-Absolute Partial
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb b/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb
deleted file mode 100644
index 21d7bcb..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Index <%= partial @absolute_partial_path %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb b/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb
deleted file mode 100644
index 9cdafe7..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= w00t %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb b/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb
deleted file mode 100644
index e1d8b75..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :with_partial, :with => @foo, :as => :w00t %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb b/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb
deleted file mode 100644
index 16de2de..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= with_partial || "nil local" %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb b/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb
deleted file mode 100644
index 669d1b6..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :with_partial, :with => nil %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb b/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb
deleted file mode 100644
index 16de2de..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= with_partial || "nil local" %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb b/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb
deleted file mode 100644
index 22c9304..0000000
--- a/spec/public/abstract_controller/controllers/views/partial/with_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :with_partial, :with => @foo %>
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb b/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb
deleted file mode 100644
index 5159d33..0000000
--- a/spec/public/abstract_controller/controllers/views/test_display/foo.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-fooness
\ No newline at end of file
diff --git a/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb b/spec/public/abstract_controller/controllers/views/test_render/foo.html.erb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec/public/abstract_controller/controllers/views/wonderful/index.erb b/spec/public/abstract_controller/controllers/views/wonderful/index.erb
deleted file mode 100644
index 1601e9f..0000000
--- a/spec/public/abstract_controller/controllers/views/wonderful/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Wonderful
\ No newline at end of file
diff --git a/spec/public/abstract_controller/display_spec.rb b/spec/public/abstract_controller/display_spec.rb
deleted file mode 100644
index 4f988f6..0000000
--- a/spec/public/abstract_controller/display_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb::AbstractController, " displaying objects with templates" do
-
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
-  end
-  
-  it "should allow you to pass an object" do
-    dispatch_should_make_body("DisplayObject", "the index")
-  end
-  
-  it "should allow you to pass an object with an action specified" do
-    dispatch_should_make_body("DisplayObjectWithAction", "new action", :create)
-  end
-  
-  it "should allow you to pass an object with a path specified for the template" do
-    dispatch_should_make_body("DisplayObjectWithPath", "fooness")
-  end
- 
-  it "should allow you to pass an object with a path specified for the template via opts" do
-    dispatch_should_make_body("DisplayObjectWithPathViaOpts", "fooness")
-  end
-
-  it "should allow you to pass an object using multiple template root" do
-    dispatch_should_make_body("DisplayObjectWithMultipleRoots", "App: new index")
-  end
-
-  it "should allow you to pass an object using multiple template root, with layout" do
-    dispatch_should_make_body("DisplayObjectWithMultipleRoots", "Alt: new show", "show")
-  end
-
-  it "should allow you to pass an object using multiple template root, without layout" do
-    dispatch_should_make_body("DisplayObjectWithMultipleRoots", "fooness", "another")
-  end
-
-end
diff --git a/spec/public/abstract_controller/filter_spec.rb b/spec/public/abstract_controller/filter_spec.rb
deleted file mode 100644
index c26daef..0000000
--- a/spec/public/abstract_controller/filter_spec.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-# ==== Public API
-# Merb::AbstractController.before(filter<Symbol, Proc>, opts<Hash>)
-# Merb::AbstractController.after(filter<Symbol, Proc>, opts<Hash>)
-# Merb::AbstractController.skip_before(filter<Symbol>)
-# Merb::AbstractController.skip_after(filter<Symbol>)
-#
-# ==== Semipublic API
-# Merb::AbstractController#_body
-# Merb::AbstractController#_dispatch(action<~to_s>)
-
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-AbstractControllers = Merb::Test::Fixtures::Abstract
-
-describe Merb::AbstractController, " should support before and after filters" do
-    
-  it "should support before filters" do
-    dispatch_should_make_body("TestBeforeFilter", "foo filter")
-  end
-  
-  it "should support after filters" do
-    dispatch_should_make_body("TestAfterFilter", "foo filter")
-  end
-  
-  it "should support skipping filters that were defined in a superclass" do
-    dispatch_should_make_body("TestSkipFilter", "")
-  end
-  
-  it "should append before filters when added" do
-    dispatch_should_make_body("TestBeforeFilterOrder", "bar filter")
-  end
-
-  it "should append after filters when added" do
-    dispatch_should_make_body("TestAfterFilterOrder", "bar filter")
-  end
-  
-  it "should support proc arguments to filters evaluated in the controller's instance" do
-    dispatch_should_make_body("TestProcFilter", "proc filter1 proc filter2")
-  end
-  
-  it "should support proc arguments to filters when called inside a class method" do
-    dispatch_should_make_body("TestProcFilterViaMethod", "onetwo")
-  end
-  
-  it "should support filters that skip specific actions via :exclude" do
-    dispatch_should_make_body("TestExcludeFilter", " ", :index)
-    dispatch_should_make_body("TestExcludeFilter", "foo filter bar filter", :show)    
-  end
-  
-  it "should support filters that work only on specific actions via :only" do
-    dispatch_should_make_body("TestOnlyFilter", "foo filter bar filter", :index)        
-    dispatch_should_make_body("TestOnlyFilter", " ", :show)
-  end
-  
-  it "should throw an error if both :exclude and :only are passed to a filter" do
-    running { Merb::Test::Fixtures::Abstract.class_eval do
-      
-      class TestErrorFilter < Merb::Test::Fixtures::Abstract::Testing
-        before :foo, :only => :index, :exclude => :show
-      end 
-    end }.should raise_error(ArgumentError, /either :only or :exclude/)
-  end
-
-  it "should support filters that work only when a condition is met via :if" do
-    dispatch_should_make_body("TestConditionalFilterWithMethod", "foo filter", :index, :presets => {:bar= => true})
-    dispatch_should_make_body("TestConditionalFilterWithMethod", "", :index, :presets => {:bar= => false})
-  end
-  
-  it "should support filters that work only when a condition is met via :unless" do
-    dispatch_should_make_body("TestConditionalFilterWithProc", "foo filter", :index, :presets => {:bar= => 'baz'})
-    dispatch_should_make_body("TestConditionalFilterWithProc", "index action", :index, :presets => {:bar= => 'bar'})
-  end
-  
-  it "should throw an error if both :if and :unless are passed to a filter" do
-    running { Merb::Test::Fixtures::Abstract.class_eval do
-      
-      class TestErrorFilter < Merb::Test::Fixtures::Abstract::Testing
-        before :foo, :if => :index, :unless => :show
-      end 
-    end }.should raise_error(ArgumentError, /either :if or :unless/)
-  end
-  
-  it "should throw an error" do
-    running { dispatch_should_make_body("TestConditionalFilterWithNoProcOrSymbol", "") }.should raise_error(ArgumentError, /a Symbol or a Proc/)
-  end
-  
-  it "should throw an error if an unknown option is passed to a filter" do
-    running { Merb::Test::Fixtures::Abstract.class_eval do
-        
-      class TestErrorFilter < Merb::Test::Fixtures::Abstract::Testing
-        before :foo, :except => :index
-      end 
-    end }.should raise_error(ArgumentError, /known filter options/)
-  end
-  
-  it "should support passing an argument to a before filter method" do
-    dispatch_should_make_body("TestBeforeFilterWithArgument", "index action")
-  end
-  
-  it "should support passing arguments to a before filter method" do
-    dispatch_should_make_body("TestBeforeFilterWithArguments", "index action")
-  end
-  
-  it "should support throwing :halt to block a filter chain" do
-    dispatch_should_make_body("BeforeFilterWithThrowHalt", "Halt thrown")
-  end
-  
-  it "should support throwing :halt to block an action" do
-    dispatch_should_make_body("ActionWithThrowHalt", "Halt thrown")
-  end
-  
-  it "should support throwing :halt in an action method" do
-    dispatch_should_make_body("ActionWithHaltInMethod", "Halt thrown")
-  end
-
-  it "should support throwing a proc in filters" do
-    dispatch_should_make_body("BeforeFilterWithThrowProc", "Proc thrown")    
-  end
-  
-  it "should raise an InternalServerError if :halt is thrown with unexpected type" do
-    calling { dispatch_to(AbstractControllers::FilterChainError, :index) }.should(
-      raise_error(ArgumentError, /Threw :halt, Merb. Expected String/))
-  end
-  
-  it "should print useful HTML if throw :halt is called with nil" do
-    dispatch_should_make_body("ThrowNil", 
-      "<html><body><h1>Filter Chain Halted!</h1></body></html>")
-  end
-  
-  it "should inherit before filters" do
-    dispatch_should_make_body("FilterChild2", "Before Limited", :limited)
-  end
-    
-  it "should provide benchmarks" do
-    controller = dispatch_to(AbstractControllers::Benchmarking, :index)
-    controller._benchmarks[:before_filters_time].should be_kind_of(Numeric)
-    controller._benchmarks[:after_filters_time].should be_kind_of(Numeric)
-  end
-  
-  it "should not get contaminated by cousins" do
-    dispatch_should_make_body("FilterChild2", "Before Index")
-    dispatch_should_make_body("FilterChild1", "Before Limited", :limited)
-    dispatch_should_make_body("FilterChild1", " Index")
-  end
-
-  # #611 in merb-core
-  it "doesn't override existing filters by filters with similar names" do
-    dispatch_should_make_body("HasFiltersWithSimilarNames", "Befilter Bef Index")
-  end
-end
diff --git a/spec/public/abstract_controller/helper_spec.rb b/spec/public/abstract_controller/helper_spec.rb
deleted file mode 100644
index 9be4902..0000000
--- a/spec/public/abstract_controller/helper_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb::AbstractController, " with capture and concat" do
-  
-  it "should support capture" do
-    dispatch_should_make_body("Capture", "Capture")
-  end
-  
-  it "should support capture with arguments" do
-    dispatch_should_make_body("CaptureWithArgs", "Capture: one, two")
-  end
-
-  it "should support capturing the return value of a non-template block" do
-    dispatch_should_make_body("CaptureReturnValue", "Capture")
-  end
-
-  it "should support capturing the return value of a non-template block" do
-    dispatch_should_make_body("CaptureNonStringReturnValue", "Captured ''")
-  end
-
-  it "should support basic helpers that use capture with <%=" do
-    dispatch_should_make_body("CaptureEq", "Pre. Beginning... Capturing... Done. Post.")
-  end
-  
-  it "should support concat" do
-    dispatch_should_make_body("Concat", "Concat")
-  end
-    
-end
diff --git a/spec/public/abstract_controller/partial_spec.rb b/spec/public/abstract_controller/partial_spec.rb
deleted file mode 100644
index 810dd09..0000000
--- a/spec/public/abstract_controller/partial_spec.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb::AbstractController, " Partials" do
-  
-  def dispatch(klass, *args)
-    k = Merb::Test::Fixtures::Abstract.const_get(klass)
-    dispatch(k, *args)
-  end
-  
-  it "should work with no options" do
-    dispatch_should_make_body("BasicPartial", "Index Partial")
-  end
-  
-  it "should work with :with" do
-    dispatch_should_make_body("WithPartial", "Partial with With")
-  end
-
-  it "should work with nil :with" do
-    dispatch_should_make_body("WithNilPartial", "Partial with nil local")
-  end
-  
-  it "should work with :with and :as" do
-    dispatch_should_make_body("WithAsPartial", "Partial with With and As")
-  end
-  
-  it "should work with collections" do
-    dispatch_should_make_body("PartialWithCollections", "Partial with collection")
-  end
-  
-  it "should work with collections and :as" do
-    dispatch_should_make_body("PartialWithCollectionsAndAs", "Partial with collection")
-  end
-  
-  it "should work with key/value pairs of locals" do
-    dispatch_should_make_body("PartialWithLocals", "Partial with local variables")
-  end
-  
-  it "should work with key/value pairs of locals that override helpers" do
-    dispatch_should_make_body("PartialWithLocalsOverridingHelpers", "Partial with [\"local\"]")
-  end
-  
-  it "should work with different calls to the same partial having different sets of locals" do
-    dispatch_should_make_body("PartialWithDifferentSetsOfLocals", "ab")
-  end
-  
-  it "should work with both collections and locals" do
-    dispatch_should_make_body("PartialWithBoth", "Partial with c-o-l-l-e-c-t-i-o-n-")    
-  end
-  
-  it "should work with both :with/:as and regular locals" do
-    dispatch_should_make_body("PartialWithWithAndLocals", "Partial with with and locals")    
-  end
-  
-  it "should work with a partial in another directory" do
-    dispatch_should_make_body("PartialInAnotherDirectory", "Index Partial in another directory")
-  end
-
-  it "should work with nested partials with locals" do
-    dispatch_should_make_body("NestedPartial", "first second first")
-  end
-  
-  it "should work with multiple template roots" do
-    dispatch_should_make_body("BasicPartialWithMultipleRoots", "Base Index: Alt Partial")
-  end
-  
-  it "should be able to count collections" do
-    dispatch_should_make_body("PartialWithCollectionsAndCounter", "Partial counting: 0/5 1/5 2/5 3/5 4/5 ")
-  end
-  
-  it "should render a partial using an absolute path" do
-    dispatch_should_make_body("WithAbsolutePartial", "Index Absolute Partial")
-  end
-  
-  it "should handle partials compiled with different locals" do
-    dispatch_should_make_body("PartialWithMultipleLocals", "Bar: \"baz\"; Baz: \"\"", :first)
-    dispatch_should_make_body("PartialWithMultipleLocals", "Bar: \"\"; Baz: \"bat\"", :second)
-    dispatch_should_make_body("PartialWithMultipleLocals", "Bar: \"bat\"; Baz: \"\"", :third)
-  end
-  
-  it "should handle partials with absolute paths" do
-    dispatch_should_make_body("PartialWithAbsolutePath", "Hello world", :index)
-  end
-    
-end
\ No newline at end of file
diff --git a/spec/public/abstract_controller/render_spec.rb b/spec/public/abstract_controller/render_spec.rb
deleted file mode 100644
index 6ad4f76..0000000
--- a/spec/public/abstract_controller/render_spec.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb::AbstractController, " rendering plain strings" do
-
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
-  end
-
-	it "should render two append_contents into same object" do
-    dispatch_should_make_body("RenderTwoAppendContents", "FooBar")		
-	end
-
-  it "should support rendering plain strings with no layout" do
-    dispatch_should_make_body("RenderString", "the index")
-  end
-
-  it "should support rendering plain strings with custom layouts" do
-    dispatch_should_make_body("RenderStringCustomLayout", "Custom: the index")
-  end
-
-  it "should support rendering plain strings with the application layout" do
-    dispatch_should_make_body("RenderStringAppLayout", "App: the index")
-  end
-  
-  it "should support rendering plain strings with the controller layout" do
-    dispatch_should_make_body("RenderStringControllerLayout", "Controller: the index")
-  end
-
-  it "should support rendering plain strings with dynamic layouts" do
-    dispatch_should_make_body("RenderStringDynamicLayout", "Custom: the index", :index)
-    dispatch_should_make_body("RenderStringDynamicLayout", "Alt: the alt index", :alt_index)
-  end
-  
-end
-
-describe Merb::AbstractController, " rendering templates" do
-
-  it "should support rendering templates with no layout" do
-    dispatch_should_make_body("RenderTemplate", "the index")
-  end
-
-  it "should support rendering templates with custom layouts" do
-    dispatch_should_make_body("RenderStringCustomLayout", "Custom: the index")
-  end
-  
-  it "should support rendering templates with the application layout" do
-    dispatch_should_make_body("RenderTemplateAppLayout", "App: the index")
-  end
-  
-  it "should support rendering plain strings with the controller layout" do
-    dispatch_should_make_body("RenderTemplateControllerLayout", "Controller: the index")
-  end
-  
-  it "should support rendering templates without any layout (even if the default layout exists)" do
-    dispatch_should_make_body("RenderNoDefaultAppLayout", "the index")
-  end
-  
-  it "should inherit the layout setting from a parent controller class" do
-    dispatch_should_make_body("RenderNoDefaultAppLayoutInherited", "the index")
-  end
-
-  it "should support reverting to the default layout" do
-    dispatch_should_make_body("RenderDefaultAppLayoutInheritedOverride", "App: the index")
-  end  
-
-  it "should support rendering templates with a custom location" do
-    dispatch_should_make_body("RenderTemplateCustomLocation", "Wonderful")
-  end
-  
-  it "should support rendering templates from an absolute path location" do
-    dispatch_should_make_body("RenderTemplateAbsolutePath", "Wonderful")
-  end
-
-  it "should support rendering templates with multiple roots" do
-    dispatch_should_make_body("RenderTemplateMultipleRoots", "App: Multiple")
-  end
-
-  it "should support rendering templates with multiple roots, first root" do
-    dispatch_should_make_body("RenderTemplateMultipleRoots", "default show", "show")
-  end
-
-  it "should support rendering templates with multiple roots and custom location" do
-    dispatch_should_make_body("RenderTemplateMultipleRootsAndCustomLocation", "Woot.")
-  end 
-
-  it "should support rendering templates with multiple roots and custom location from an inherited controller" do
-    dispatch_should_make_body("RenderTemplateMultipleRootsInherited", "Good.")
-  end 
-
-end
diff --git a/spec/public/abstract_controller/spec_helper.rb b/spec/public/abstract_controller/spec_helper.rb
deleted file mode 100644
index 3620f54..0000000
--- a/spec/public/abstract_controller/spec_helper.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-__DIR__ = File.dirname(__FILE__)
-require File.expand_path(File.join(__DIR__, "..", "..", "spec_helper"))
-
-require File.expand_path(File.join(__DIR__, "controllers", "filters"))
-require File.expand_path(File.join(__DIR__, "controllers", "cousins"))
-require File.expand_path(File.join(__DIR__, "controllers", "render"))
-require File.expand_path(File.join(__DIR__, "controllers", "partial"))
-require File.expand_path(File.join(__DIR__, "controllers", "display"))
-require File.expand_path(File.join(__DIR__, "controllers", "helpers"))
-
-module Merb::Test::Behaviors
-  include Merb::Test::RequestHelper
-  
-  def dispatch_should_make_body(klass, body, action = :index, opts = {}, env = {}, &blk)
-    klass = Merb::Test::Fixtures::Abstract.const_get(klass)
-    if opts.key?(:presets)
-      controller = klass.new
-      opts[:presets].each { |attr, value| controller.send(attr, value)}
-      controller._dispatch(action.to_s)
-    else
-      controller = dispatch_to(klass, action, opts, env, &blk)
-    end
-    controller.body.should == body
-  end
-end
-
-Spec::Runner.configure do |config|
-  config.include Merb::Test::Behaviors
-end
diff --git a/spec/public/boot_loader/boot_loader_spec.rb b/spec/public/boot_loader/boot_loader_spec.rb
deleted file mode 100644
index aea2228..0000000
--- a/spec/public/boot_loader/boot_loader_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# The before/after filters in BootLoaders are considered public API.
-#
-# However, Merb::BootLoader.subclasses is not considered public API and should not be used in plugins.
-
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-class Merb::BootLoader::AfterTest < Merb::BootLoader
-  after Merb::BootLoader::BeforeAppLoads
-  
-  def self.run
-  end
-end
-
-class Merb::BootLoader::BeforeTest < Merb::BootLoader
-  before Merb::BootLoader::Templates
-  
-  def self.run
-  end
-end
-
-describe "The BootLoader" do
-  
-  it "should support adding a BootLoader after another" do
-    idx = Merb::BootLoader.subclasses.index("Merb::BootLoader::BeforeAppLoads")
-    Merb::BootLoader.subclasses.index("Merb::BootLoader::AfterTest").should == idx + 1
-  end
-
-  it "should support adding a BootLoader before another" do
-    idx = Merb::BootLoader.subclasses.index("Merb::BootLoader::Templates")
-    Merb::BootLoader.subclasses.index("Merb::BootLoader::BeforeTest").should == idx - 1
-  end
-  
-  describe Merb::BootLoader::ChooseAdapter do
-    it "should check if we're running irb and if so set irb as adapter" do
-      Merb.stub!(:running_irb?).and_return(true)
-      Merb::BootLoader::ChooseAdapter.run
-      Merb::Config[:adapter].should eql 'irb'
-    end
-  end
-end
diff --git a/spec/public/boot_loader/spec_helper.rb b/spec/public/boot_loader/spec_helper.rb
deleted file mode 100644
index f4a904e..0000000
--- a/spec/public/boot_loader/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
\ No newline at end of file
diff --git a/spec/public/controller/authentication_spec.rb b/spec/public/controller/authentication_spec.rb
deleted file mode 100644
index ae79e3d..0000000
--- a/spec/public/controller/authentication_spec.rb
+++ /dev/null
@@ -1,174 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "basic_authentication in general", :shared => true do
-
-  it "should halt the filter chain and return a 401 status code if no authentication is sent" do
-    response = dispatch_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index)
-    response.body.should == "HTTP Basic: Access denied.\n"
-    response.status.should == 401
-  end
-
-  it "should halt the filter chain and return a 401 status code on invalid username and password" do
-    u, p = "John", "password"
-    response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
-    response.body.should == "HTTP Basic: Access denied.\n"
-    response.status.should == 401
-  end
-
-  it "should halt the filter chain and return a 401 status code on invalid username and valid password" do
-    u, p = "John", "secret"
-    response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
-    response.body.should == "HTTP Basic: Access denied.\n"
-    response.status.should == 401
-  end
-
-  it "should halt the filter chain and return a 401 status code on valid username and invalid password" do
-    u, p = "Fred", "password"
-    response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
-    response.body.should == "HTTP Basic: Access denied.\n"
-    response.status.should == 401
-  end
-
-  it "should call the action on valid username and password" do
-    u, p = "Fred", "secret"
-    response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
-    response.body.should == "authenticated"
-    response.status.should == 200
-  end
-
-end
-
-describe Merb::Controller do
-  MTFC = Merb::Test::Fixtures::Controllers
-  
-  describe "#basic_authentication with no realm" do
-    it_should_behave_like "basic_authentication in general"
-
-    it "should have a default WWW-Authenticate realm of 'Application' if no authentication is sent" do
-      response = dispatch_to(MTFC::BasicAuthentication, :index)
-      response.headers['WWW-Authenticate'] = 'Basic realm="Application"'
-    end
-
-    it "should have a default WWW-Authenticate realm of 'Application' if incorrect authentication is sent" do
-      u, p = "John", "password"
-      response = dispatch_with_basic_authentication_to(MTFC::BasicAuthentication, :index, u, p)
-      response.headers['WWW-Authenticate'] = 'Basic realm="Application"'
-    end
-  end
-
-  describe "#basic_authentication with realm" do
-
-    it_should_behave_like "basic_authentication in general"
-
-    it "should set the WWW-Authenticate realm if no authentication is sent" do
-      response = dispatch_to(MTFC::BasicAuthenticationWithRealm, :index)
-      response.headers['WWW-Authenticate'] = 'Basic realm="My SuperApp"'
-    end
-
-    it "should set the WWW-Authenticate realm if incorrect authentication is sent" do
-      u, p = "John", "password"
-      response = dispatch_with_basic_authentication_to(MTFC::BasicAuthenticationWithRealm, :index, u, p)
-      response.headers['WWW-Authenticate'] = 'Basic realm="My SuperApp"'
-    end
-
-  end
-
-  describe  "#basic_authentication.authenticate" do
-
-    it "should pass in the username and password and return the result of the block" do
-      u, p = "Fred", "secret"
-      response = dispatch_with_basic_authentication_to(MTFC::AuthenticateBasicAuthentication, :index, u, p)
-      response.body.should == "Fred:secret"
-    end
-
-  end
-  
-  describe "#basic_authentication.request" do
-
-    it "should halt the filter chain and return a 401 status code" do
-      response = dispatch_to(MTFC::RequestBasicAuthentication, :index)
-      response.body.should == "HTTP Basic: Access denied.\n"
-      response.status.should == 401
-    end
-
-    it "should have a default WWW-Authenticate realm of 'Application'" do
-      response = dispatch_to(MTFC::RequestBasicAuthentication, :index)
-      response.headers['WWW-Authenticate'].should == 'Basic realm="Application"'
-    end
-
-    it "should set the WWW-Authenticate realm" do
-      response = dispatch_to(MTFC::RequestBasicAuthenticationWithRealm, :index)
-      response.headers['WWW-Authenticate'].should == 'Basic realm="My SuperApp"'
-    end
-
-  end
-
-  describe "#basic_authentication.request!" do
-    
-    it "should not halt the filter chain and provide a 401 status code" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.status = 401
-    end
-    
-    it "should have a default WWW=Authentication realm of 'Application'" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.headers['WWW-Authenticate'].should == 'Basic realm="Application"'
-    end
-    
-    it "should set the WWW-Authenticate realm" do
-      response = dispatch_to(MTFC::PassiveBasicAuthenticationWithRealm, :index)
-      response.headers['WWW-Authenticate'].should == 'Basic realm="My Super App"'
-    end
-    
-    it "should allow the action to render it's output" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.body.should == "My Output"
-    end
-
-    it "should be callable from within an action" do
-      response = dispatch_to(MTFC::PassiveBasicAuthenticationInAction, :index)
-      response.body.should == "In Action"
-      response.status.should == 401
-    end
-
-  end
-  
-  describe "basic_authentication.provided?" do
-    
-    it "should return true when basic authentication credentials have been supplied" do
-      u, p = "Fred", "secret"
-      response = dispatch_with_basic_authentication_to(MTFC::PassiveBasicAuthentication, :index, u, p)
-      response.basic_authentication.provided?.should be_true
-    end
-    
-    it "should return false when basic authentication credentials have not been supplied" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.basic_authentication.provided?.should be_false
-    end
-  end
-  
-  describe "basic_authentication.username and password" do
-    it "return username if set" do
-      u, p = "Fred", "secret"
-      response = dispatch_with_basic_authentication_to(MTFC::PassiveBasicAuthentication, :index, u, p)
-      response.basic_authentication.username.should == "Fred"
-    end
-    
-    it "should return nil if the username is not set" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.basic_authentication.username.should be_nil
-    end
-    
-    it "should return password if set" do
-      u, p = "Fred", "secret"
-      response = dispatch_with_basic_authentication_to(MTFC::PassiveBasicAuthentication, :index, u, p)
-      response.basic_authentication.password.should == "secret"
-    end
-    
-    it "shoudl return nil for the password if not set" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.basic_authentication.password.should be_nil
-    end
-  end
-
-end
diff --git a/spec/public/controller/base_spec.rb b/spec/public/controller/base_spec.rb
deleted file mode 100644
index 467a7dc..0000000
--- a/spec/public/controller/base_spec.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-Controllers = Merb::Test::Fixtures::Controllers
-
-describe Merb::Controller, "callable actions" do
-  
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")    
-    Merb::Router.prepare do
-      default_routes
-    end
-  end
-  
-  it "has no any callable actions by default" do
-    Merb::Controller.callable_actions.should be_empty
-  end
-  
-  it "sets body on dispatch to callable action" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::Base, :index)
-    controller.body.should == "index"
-  end
-
-  it "sets status on dispatch to callable action" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::Base, :index)
-    controller.status.should == 200
-  end
-
-  it "should not dispatch to hidden actions" do
-    calling { dispatch_to(Merb::Test::Fixtures::Controllers::Base, :hidden) }.
-      should raise_error(Merb::ControllerExceptions::ActionNotFound)
-  end
-  
-  it "should dispatch to included methods with show_action called" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::Base, :baz).body.should == "baz"
-  end
-
-  it "should not dispatch to included methods with show_action not called" do
-    calling { dispatch_to(Merb::Test::Fixtures::Controllers::Base, :bat) }.
-      should raise_error(Merb::ControllerExceptions::ActionNotFound)
-  end
- 
-end
-
-describe Merb::Controller, "filtered params" do  
-  it "removes filtered parameters from the log" do
-    out = with_level(:info) do
-      dispatch_to(Controllers::FilteredParams, :index, :username => "Awesome", :password => "sekrit")
-    end
-    out.should include_log(/Params:.*"username"\s*=>\s*"Awesome"/)
-    out.should_not include_log(/"password"/)
-  end
-  
-  it "doesn't put the parameters in the log in levels higher than info" do
-    out = with_level(:warn) do
-      dispatch_to(Controllers::FilteredParams, :index, :username => "Awesome", :password => "sekrit")
-    end
-    out.should_not include_log(/Params/)
-  end
-end
-
-describe Merb::Controller, "records benchmarks" do
-  it "collects benchmarks for the amount of time the action took" do
-    controller = dispatch_to(Controllers::Base, :index)
-    controller._benchmarks[:action_time].should be_kind_of(Numeric)
-  end
-end
-
-describe Merb::Controller, "handles invalid actions" do
-  it "raises if an action was not found" do
-    calling { controller = dispatch_to(Controllers::Base, :awesome) }.
-      should raise_error(Merb::ControllerExceptions::ActionNotFound,
-      /Action.*awesome.*was not found in.*Base/)
-  end
-end
-
-describe Merb::Controller, "handles invalid status codes" do
-  it "raises if an invalid status is set" do
-    calling { dispatch_to(Controllers::SetStatus, :index) }.
-      should raise_error(ArgumentError, /was.*String/)
-  end
-end
-
-describe Merb::Controller, "before/after dispatch callbacks" do
-  it "are used for internal purposes" do
-    controller = dispatch_to(Controllers::DispatchCallbacks, :index)
-    controller.called_before.should be_true
-    controller.called_after.should be_true
-  end
-
-  it 'has access to action name' do
-    controller = dispatch_to(Controllers::DispatchCallbacks, :index)
-    controller.called_before.should be_true
-    controller.called_after.should be_true
-    controller.observed_action.should == 'index'
-  end
-end
diff --git a/spec/public/controller/conditional_get_spec.rb b/spec/public/controller/conditional_get_spec.rb
deleted file mode 100644
index fc00a0e..0000000
--- a/spec/public/controller/conditional_get_spec.rb
+++ /dev/null
@@ -1,166 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-Controllers = Merb::Test::Fixtures::Controllers
-
-describe Merb::Controller, "#etag=" do
-
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
-    Merb::Router.prepare do
-      default_routes
-    end
-  end
-
-  it 'sets ETag header' do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet, :sets_etag)
-    controller.headers['ETag'].should == '"39791e6fb09"'
-  end
-end
-
-
-
-describe Merb::Controller, "#last_modified=" do
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
-    Merb::Router.prepare do
-      default_routes
-    end
-  end
-
-  it 'sets Last-Modified header' do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet, :sets_last_modified)
-    controller.headers['Last-Modified'].should == Time.at(7000).httpdate
-  end
-end
-
-
-describe Merb::Controller, "#etag_matches?" do
-  it 'returns true when response ETag header equals to request If-None-Match header' do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet, :sets_etag, {}, { Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' } )
-    controller.etag_matches?('"39791e6fb09"').should be(true)
-  end
-
-  it 'returns false when response ETag header DOES NOT equal to request If-None-Match header' do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet, :sets_etag, {}, { Merb::Const::HTTP_IF_NONE_MATCH => '"6fb91e09793"' } )
-    controller.etag_matches?('"55789a6fb09"').should be(false)
-  end
-end
-
-
-
-describe Merb::Controller, "#modified_since?" do
-  before(:each) do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_last_modified, {}, { Merb::Const::HTTP_IF_MODIFIED_SINCE => Time.at(7000).httpdate })
-  end
-
-  it 'return true when response Last-Modified header value <= request If-Modified-Since header' do
-    @controller.not_modified?(Time.at(5000)).should be(true)
-    @controller.not_modified?(Time.at(6999)).should be(true)
-  end
-
-  it 'return false when response Last-Modified header value > request If-Modified-Since header' do
-    @controller.not_modified?(Time.at(7003)).should be(false)
-    @controller.not_modified?(Time.at(16999)).should be(false)
-  end
-end
-
-
-describe Merb::Controller, "#request_fresh?" do
-  it "returns false if no headers are supplied" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :superfresh, {}, {})
-    @controller.request_fresh?.should be(false)
-  end
-
-  it "returns false if no validation information is supplied by the action and no headers are sent" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_nothing, {}, {})
-    @controller.request_fresh?.should be(false)
-  end
-
-  it "returns false if no validation information is supplied by the action and an ETag header is sent" do
-    env = { Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_nothing, {}, env)
-    @controller.request_fresh?.should be(false)
-  end
-
-  it "returns false if no validation information is supplied by the action and an If-Modified-Since header is sent" do
-    env = { Merb::Const::HTTP_IF_MODIFIED_SINCE => Time.at(7000).httpdate }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_nothing, {}, env)
-    @controller.request_fresh?.should be(false)
-  end
-
-  it "returns false if no validation information is supplied by the action and both headers are sent" do
-    env = { 'HTTP_IF_MODIFIED_SINCE' => Time.at(7000).httpdate, Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_nothing, {}, env)
-
-    @controller.request_fresh?.should be(false)
-  end
-
-
-  it 'return true when ETag matches' do
-    env = { Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_etag, {}, env)
-
-    @controller.request_fresh?.should be(true)
-  end
-
-  it 'return false when no If-None-Match is sent, but an ETag is set' do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_etag, {}, {})
-
-    @controller.request_fresh?.should be(false)
-  end
-
-  it 'return true when entity is not modified since date given in request header' do
-    env = { Merb::Const::HTTP_IF_MODIFIED_SINCE => Time.at(7000).httpdate }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_last_modified, {}, env)
-
-    @controller.request_fresh?.should be(true)
-  end
-
-  it 'return false when a Last-Modified is set, but no header is sent' do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_last_modified, {}, {})
-
-    @controller.request_fresh?.should be(false)
-  end
-
-  it 'return true when both etag and last modification date satisfy request freshness' do
-    env = { 'HTTP_IF_MODIFIED_SINCE' => Time.at(7000).httpdate, Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :superfresh, {}, env)
-
-    @controller.request_fresh?.should be(true)
-  end
-
-  it 'return false if etag satisfies but the last modification date does not satisfy request freshness' do
-    env = { 'HTTP_IF_MODIFIED_SINCE' => Time.at(6999).httpdate, Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :superfresh, {}, env)
-
-    @controller.request_fresh?.should be(false)
-  end
-
-  it 'return false if etag does not satisfy but the last modification date does satisfy request freshness' do
-    env = { 'HTTP_IF_MODIFIED_SINCE' => Time.at(7000).httpdate, Merb::Const::HTTP_IF_NONE_MATCH => '"wrong"' }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :superfresh, {}, env)
-
-    @controller.request_fresh?.should be(false)
-  end
-
-  it 'return false when neither etag nor last modification date satisfy request freshness' do
-    env = { 'HTTP_IF_MODIFIED_SINCE' => Time.at(7000).httpdate, Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :stale, {}, env)
-
-    @controller.request_fresh?.should be(false)
-  end
-end
diff --git a/spec/public/controller/config/init.rb b/spec/public/controller/config/init.rb
deleted file mode 100644
index 53123fe..0000000
--- a/spec/public/controller/config/init.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Merb::Config.use do |c|
-  c[:default_cookie_domain] = "specs.merbivore.com"
-  c[:session_id_key]        = "some_meaningless_id_key"
-  c[:session_secret_key]    = "some_super_hyper_secret_key"
-  c[:session_expiry]        = Merb::Const::WEEK * 4
-end
diff --git a/spec/public/controller/controllers/authentication.rb b/spec/public/controller/controllers/authentication.rb
deleted file mode 100644
index 0c7cf31..0000000
--- a/spec/public/controller/controllers/authentication.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-  class BasicAuthentication < Testing
-    before :authenticate, :only => :index
-
-    def index
-      "authenticated"
-    end
-
-    protected
-
-    def authenticate
-      basic_authentication { |u, p| u == "Fred" && p == "secret" }
-    end
-  end
-
-  class BasicAuthenticationWithRealm < BasicAuthentication
-    def authenticate
-      basic_authentication("My Super App") { |u, p| u == "Fred" && p == "secret" }
-    end
-  end
-
-  class AuthenticateBasicAuthentication < Testing
-    def index
-      basic_authentication.authenticate { |u, p| "Fred:secret" }
-    end
-  end
-
-  class RequestBasicAuthentication < BasicAuthentication
-    def authenticate
-      basic_authentication.request
-    end
-  end
-
-  class RequestBasicAuthenticationWithRealm < BasicAuthentication
-    def authenticate
-      basic_authentication("My SuperApp").request
-    end
-  end
-  
-  class PassiveBasicAuthentication < BasicAuthentication
-        
-    def index
-      "My Output"
-    end
-    
-    def authenticate
-      basic_authentication.request!
-    end
-  end
-  
-  class PassiveBasicAuthenticationWithRealm < BasicAuthentication
-    def authenticate
-      basic_authentication("My Super App").request!
-    end
-  end
-  
-  class PassiveBasicAuthenticationInAction < BasicAuthentication
-    
-    def index
-      basic_authentication.request!
-      "In Action"
-    end
-    
-    def authenticate
-      true
-    end
-  end
-
-end
diff --git a/spec/public/controller/controllers/base.rb b/spec/public/controller/controllers/base.rb
deleted file mode 100644
index 036305a..0000000
--- a/spec/public/controller/controllers/base.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-module Merb::Test::Fixtures
-  module Controllers
-    class Testing < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    module Inclusion
-      def self.included(base)
-        base.show_action(:baz)
-      end
-
-      def baz
-        "baz"
-      end
-
-      def bat
-        "bat"
-      end
-    end
-
-    class Base < Testing
-      include Inclusion
-
-      def index
-        self.status = :ok
-        "index"
-      end
-
-      def hidden
-        "Bar"
-      end
-      hide_action :hidden
-    end
-    
-    class FilteredParams < Testing
-      def index
-        "Index"
-      end
-      
-      def self._filter_params(params)
-        params.reject {|k,v| k == "password" }
-      end
-    end
-
-    class SetStatus < Testing
-      def index
-        self.status = "awesome"
-      end
-    end
-
-    class DispatchCallbacks < Testing
-
-      attr_accessor :called_before, :called_after, :observed_action
-
-      self._before_dispatch_callbacks << lambda do |c|
-        c.called_before = true
-        c.observed_action = c.action_name
-      end
-
-      self._after_dispatch_callbacks  << lambda do |c|
-         c.called_after  = true
-      end
-
-      def index
-        "index"
-      end
-
-    end
-
-  end
-end
diff --git a/spec/public/controller/controllers/conditional_get.rb b/spec/public/controller/controllers/conditional_get.rb
deleted file mode 100644
index 329c8b0..0000000
--- a/spec/public/controller/controllers/conditional_get.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require "time"
-
-module Merb::Test::Fixtures
-  module Controllers
-    class Testing < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    class ConditionalGet < Testing
-      def sets_etag
-        self.etag = "39791e6fb09"
-        "can has etag"
-      end
-
-      def sets_last_modified
-        self.last_modified = Time.at(7000)
-        "can has last-modified"
-      end
-
-      def superfresh
-        self.etag          = "39791e6fb09"
-        self.last_modified = Time.at(7000)
-        
-        "can has fresh request"
-      end
-
-      def stale
-        self.etag          = "1234567678"
-        self.last_modified = Time.at(9000)
-        
-        "can has stale request"
-      end
-
-      def sets_nothing
-        "can has nothing"
-      end
-    end
-  end
-end
diff --git a/spec/public/controller/controllers/cookies.rb b/spec/public/controller/controllers/cookies.rb
deleted file mode 100644
index 5209689..0000000
--- a/spec/public/controller/controllers/cookies.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-  class CookiesController < Testing
-    
-    def store_cookies
-      cookies.set_cookie(:awesome,   'super-cookie', :domain  => 'blog.merbivore.com')
-      cookies[:foo] = 'bar'
-      cookies.set_cookie(:oldcookie, 'this is really old', :expires => Time.utc(2020))
-      cookies.set_cookie(:safecook,  'no-hackers-here', :secure => true)
-      cookies.set_cookie(:xsscook,  'only-through-http', :http_only => true)
-    end
-    
-    def destroy_cookies
-      cookies.delete(:foo)
-    end
-    
-    def retrieve_cookies
-    end
-    
-  end
-  
-  class OverridingDefaultCookieDomain < CookiesController
-    self._default_cookie_domain = "overridden.merbivore.com"
-  end
-
-  class NotOverridingDefaultCookieDomain < CookiesController
-  end
-  
-  class EmptyDefaultCookieDomain < CookiesController
-    self._default_cookie_domain = ''
-  end
-  
-end
diff --git a/spec/public/controller/controllers/dispatcher.rb b/spec/public/controller/controllers/dispatcher.rb
deleted file mode 100644
index fbe8a68..0000000
--- a/spec/public/controller/controllers/dispatcher.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-class Application < Merb::Controller
-end
-
-module Merb::Test::Fixtures
-  module Controllers
-    class Testing < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    class DispatchTo < Testing
-      def index
-        "Dispatched"
-      end
-    end
-    
-    class NotAController
-      def index
-        "Dispatched"
-      end
-    end
-    
-    class RaiseGone < Testing
-      def index
-        raise Gone
-      end
-    end
-
-    class RaiseLoadError < Merb::Controller
-      def index
-        raise LoadError, "In the controller"
-      end
-    end
-
-  end
-end
diff --git a/spec/public/controller/controllers/display.rb b/spec/public/controller/controllers/display.rb
deleted file mode 100644
index cd73f7b..0000000
--- a/spec/public/controller/controllers/display.rb
+++ /dev/null
@@ -1,118 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-  class SomeModel
-    def to_xml; "<XML:Model />" end
-    def to_json(options = {})
-      includes = options[:include].join(', ') rescue ""
-      excludes = options[:except].first rescue ""
-      "{ 'include': '#{includes}', 'exclude': '#{excludes}' }"
-    end
-    def to_param
-      "1"
-    end
-  end
-
-
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-
-  class Display < Testing
-    def index
-      @obj = SomeModel.new
-      display @obj
-    end    
-  end
-
-  class DisplayWithLayout < Testing
-    provides :json
-    
-    def index
-      @obj = SomeModel.new
-      display @obj, :layout => :custom_arg
-    end    
-  end
-
-  class DisplayHtmlDefault < Display; end
-
-  class DisplayClassProvides < Display
-    provides :xml
-  end
-
-
-  class DisplayLocalProvides < Display
-    def index
-      @obj = SomeModel.new
-      provides :xml
-      display @obj
-    end
-  end
-
-
-  class DisplayWithTemplate < Display
-    layout :custom
-
-    def no_layout
-      render :layout => false
-    end
-    
-    def absolute_without_mime
-      render :template => File.expand_path(self._template_root) / "merb/test/fixtures/controllers/html_default/index"
-    end
-    
-    def absolute_with_mime
-      render :template => File.expand_path(self._template_root) / "merb/test/fixtures/controllers/html_default/index.html"
-    end
-    
-    def relative_without_mime
-      render :template => "merb/test/fixtures/controllers/html_default/index"
-    end
-    
-    def relative_with_mime
-      render :template => "merb/test/fixtures/controllers/html_default/index.html"
-    end
-    
-  end
-  
-  class DisplayWithTemplateArgument < Display
-    def index
-      @obj = SomeModel.new
-      display @obj, :layout => :custom_arg
-    end
-
-    def index_by_arg
-      @obj = SomeModel.new
-      display @obj, "merb/test/fixtures/controllers/display_with_template_argument/index.html"
-    end
-  end
-
-  class DisplayWithStringLocation < Display
-    provides :json
-    def index
-      @obj = SomeModel.new
-      display @obj, :location => "/some_resources/#{@obj.to_param}"
-    end
-  end
-
-  class DisplayWithStatus < Display
-    provides :json
-    def index
-      @obj = SomeModel.new
-      display @obj, :status => 500
-    end
-  end
-
-  class DisplayWithSerializationOptions < Display
-    provides :json
-
-    def index
-      @obj = SomeModel.new
-      display @obj, :include => [:beer, :jazz], :except => [:idiots]
-    end
-
-    def index_that_passes_empty_hash
-      @obj = SomeModel.new
-      display @obj, {}
-    end
-  end
-end
diff --git a/spec/public/controller/controllers/redirect.rb b/spec/public/controller/controllers/redirect.rb
deleted file mode 100644
index 2862c23..0000000
--- a/spec/public/controller/controllers/redirect.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-  class SimpleRedirect < Testing
-    def index
-      redirect("/")
-    end
-  end
-
-  class RedirectViaHalt < Testing
-    def index
-      throw :halt, redirect("/")
-    end
-  end
-
-  class PermanentRedirect < Testing
-    def index
-      redirect("/", :permanent => true)
-    end
-  end
-  
-  class PermanentAndStatusRedirect < Testing
-    def index
-      redirect("/", :permanent => true, :status => 302)
-    end
-  end
-
-  class WithStatusRedirect < Testing
-    def index
-      redirect("/", :status => 307)
-    end
-  end
-
-  class RedirectWithMessage < Testing
-    def index
-      redirect("/", :message => { :notice => "what?" })
-    end
-  end
-  
-  class RedirectWithNotice < Testing
-    def index
-      redirect("/", :notice => "what?")
-    end
-  end
-
-  class RedirectWithError < Testing
-    def index
-      redirect("/", :error => "errored!")
-    end
-  end
-  
-  class RedirectWithMessageAndFragment < Testing
-    def index
-      redirect("/#someanchor", :message => { :notice => "what?" }, :fragment => "someanchor")
-    end
-  end
-
-  class ConsumesMessage < Testing
-    def index
-      message[:notice]
-    end
-  end
-  
-  class SetsMessage < Testing
-    def index
-      message[:notice] = "Hello"
-      message[:notice]
-    end
-  end
-end
diff --git a/spec/public/controller/controllers/responder.rb b/spec/public/controller/controllers/responder.rb
deleted file mode 100644
index 8b91189..0000000
--- a/spec/public/controller/controllers/responder.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-
-  class Responder < Testing
-    def index
-      render
-    end
-  end
-
-
-  class HtmlDefault < Responder; end
-
-
-  class ClassProvides < Responder
-    provides :xml
-  end
-
-
-  class LocalProvides < Responder
-    def index
-      provides :xml
-      render
-    end
-  end
-
-
-  class MultiProvides < Responder
-    def index
-      provides :html, :js
-      render
-    end
-  end
-
-  class ClassAndLocalProvides < Responder
-    provides :html    
-    def index
-      provides :xml
-      render
-    end
-  end
-
-  class ClassOnlyProvides < Responder
-    only_provides :text, :xml
-
-    def index
-      "nothing"
-    end
-  end
-
-
-  class OnlyProvides < Responder
-    def index
-      only_provides :text, :xml
-      "nothing"
-    end
-  end
-
-  class ClassDoesntProvides < Responder
-    provides :xml
-    does_not_provide :html
-
-    def index
-      "nothing"
-    end
-  end
-
-
-  class DoesntProvide < Responder
-    def index
-      provides :xml
-      does_not_provide :html
-      "nothing"
-    end
-  end
-
-
-  class FooFormatProvides < Responder
-    only_provides :foo
-
-    def index
-      render "nothing"
-    end
-
-    def show
-      headers["Content-Language"] = 'nl'
-      headers["Biz"] = "buzz"
-      render "nothing"
-    end
-  end
-end
diff --git a/spec/public/controller/controllers/streaming.rb b/spec/public/controller/controllers/streaming.rb
deleted file mode 100644
index 0c0469a..0000000
--- a/spec/public/controller/controllers/streaming.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Merb::Test::Fixtures
-  module Controllers
-    class Testing < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    class Streaming < Testing
-      def x_accel_redirect
-        nginx_send_file "/protected/content.pdf", "application/pdf"
-      end
-
-      def x_accel_redirect_with_default_content_type
-        nginx_send_file "/protected/content.pdf"
-      end
-
-    end
-  end
-end
diff --git a/spec/public/controller/controllers/url.rb b/spec/public/controller/controllers/url.rb
deleted file mode 100644
index 18887b4..0000000
--- a/spec/public/controller/controllers/url.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-  class Url < Testing
-    
-    def void
-      'index'
-    end
-    
-    def this_route
-      url(:this)
-    end
-    
-    def this_route_with_page
-      url(:this, :page => 2)
-    end
-    
-    def one_optionals
-      url(:this, :one => params[:one])
-    end
-    
-    def two_optionals
-      url(:this, :one => params[:one], :two => params[:two])
-    end
-    
-    # --- Resource routes ---
-    
-    def index
-      url(:this)
-    end
-    
-    def show
-      url(:this)
-    end
-    
-    def new
-      url(:this)
-    end
-    
-    def edit
-      url(:this)
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/layout/custom.html.erb b/spec/public/controller/controllers/views/layout/custom.html.erb
deleted file mode 100644
index 95aecf9..0000000
--- a/spec/public/controller/controllers/views/layout/custom.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Custom: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/layout/custom_arg.html.erb b/spec/public/controller/controllers/views/layout/custom_arg.html.erb
deleted file mode 100644
index 2624385..0000000
--- a/spec/public/controller/controllers/views/layout/custom_arg.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Custom Arg: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/layout/custom_arg.json.erb b/spec/public/controller/controllers/views/layout/custom_arg.json.erb
deleted file mode 100644
index 3d69967..0000000
--- a/spec/public/controller/controllers/views/layout/custom_arg.json.erb
+++ /dev/null
@@ -1 +0,0 @@
-{custom_arg: <%= catch_content(:for_layout) %>}
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb
deleted file mode 100644
index 2bed133..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-HTML: Class and Local
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb
deleted file mode 100644
index a7053ed..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<XML:ClassAndLocalProvides provides='true' />
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb
deleted file mode 100644
index 3028185..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-HTML: Wins Over XML If Both Are Specified
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb
deleted file mode 100644
index 7c91f63..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<XML:Class provides='true' />
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb
deleted file mode 100644
index a1ab916..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Template
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb
deleted file mode 100644
index 533e76b..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-No layoutz eva!
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb
deleted file mode 100644
index a1ab916..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Template
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb
deleted file mode 100644
index eb4b52b..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-HTML: Default
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb
deleted file mode 100644
index 95aecf9..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Custom: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb
deleted file mode 100644
index a3a841a..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-This should not render
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb
deleted file mode 100644
index c1384ec..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<XML:Local provides='true' />
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb
deleted file mode 100644
index 0b44f43..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-HTML: Multi
\ No newline at end of file
diff --git a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb b/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb
deleted file mode 100644
index c381ca4..0000000
--- a/spec/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb
+++ /dev/null
@@ -1 +0,0 @@
-JS: Multi
\ No newline at end of file
diff --git a/spec/public/controller/cookies_spec.rb b/spec/public/controller/cookies_spec.rb
deleted file mode 100644
index cc497c4..0000000
--- a/spec/public/controller/cookies_spec.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Controller, "._default_cookie_domain" do
-    
-  before(:each) do
-    Merb::Config[:default_cookie_domain].should_not be(nil)
-  end
-  
-  it 'is set to Merb::Config[:default_cookie_domain] by default' do
-    Merb::Controller._default_cookie_domain.should == Merb::Config[:default_cookie_domain]
-    Merb::Test::Fixtures::Controllers::CookiesController._default_cookie_domain.should ==
-      Merb::Config[:default_cookie_domain]
-  end
-
-  it "can be overridden for particular controller" do
-    Merb::Test::Fixtures::Controllers::OverridingDefaultCookieDomain._default_cookie_domain.should ==
-      "overridden.merbivore.com"
-  end
-
-  it 'is inherited by subclasses unless overriden' do
-    Merb::Test::Fixtures::Controllers::NotOverridingDefaultCookieDomain._default_cookie_domain.should ==
-      Merb::Config[:default_cookie_domain]
-  end
-end
-
-describe Merb::Controller, "#cookies creating" do
-  include Merb::Test::CookiesHelper
-  
-  it "should set all the cookies for a request" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    extract_cookies(controller.headers).length.should == 5
-  end
-  
-  it "should set a simple cookie" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = extract_cookies(controller.headers).sort[1]
-    cookie.should match(/foo=bar;/)
-    cookie.should match(/domain=specs.merbivore.com;/)
-  end
-  
-  it "should set the cookie domain correctly when it is specified" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = extract_cookies(controller.headers).sort[0]
-    cookie.should match(/awesome=super-cookie;/)
-    cookie.should match(/domain=blog.merbivore.com;/)
-  end
-  
-  it "should format the expires time to the correct format" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = extract_cookies(controller.headers).sort[2]
-    cookie.should include("oldcookie=this+is+really+old;")
-    cookie.should include("expires=Wed, 01-Jan-2020 00:00:00 GMT;")
-  end
-  
-  it "should append secure to the end of the cookie header when marked as such" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = extract_cookies(controller.headers).sort[3]
-    cookie.should match(/secure;$/)
-  end
-  
-  it "should append HttpOnly to the end of the cookie header when marked as such" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = extract_cookies(controller.headers).sort[4]
-    cookie.should match(/HttpOnly;$/)
-  end
-  
-  it "sets the Set-Cookie response header - and ignores blank options" do
-    controller_klass = Merb::Test::Fixtures::Controllers::EmptyDefaultCookieDomain
-    with_cookies(controller_klass) do |cookie_jar|
-      controller = dispatch_to(controller_klass, :store_cookies)
-      cookies = extract_cookies(controller.headers).sort
-      cookies[1].should == "foo=bar; path=/;"
-    end
-  end
-    
-  it "it gives access to cookie values" do
-    controller_klass = Merb::Test::Fixtures::Controllers::CookiesController
-    with_cookies(controller_klass) do |cookie_jar|
-      controller = dispatch_to(controller_klass, :store_cookies)
-      controller = dispatch_to(controller_klass, :retrieve_cookies)
-      controller.cookies['awesome'].should == 'super-cookie'
-      controller.cookies['foo'].should == 'bar'
-      controller.cookies.should == cookie_jar
-    end
-  end
-  
-end
-
-describe Merb::Controller, "#cookies destroying" do
-  include Merb::Test::CookiesHelper
-  
-  it "should send a cookie when deleting a cookie" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :destroy_cookies)
-    extract_cookies(controller.headers).length.should == 1
-  end
-  
-  it "should set the expiration time of the cookie being destroyed to the past" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :destroy_cookies)
-    cookie = extract_cookies(controller.headers).sort[0]
-    cookie.should include("expires=Thu, 01-Jan-1970 00:00:00 GMT;")
-  end
-  
-end
diff --git a/spec/public/controller/dispatcher_spec.rb b/spec/public/controller/dispatcher_spec.rb
deleted file mode 100644
index 3e5cb47..0000000
--- a/spec/public/controller/dispatcher_spec.rb
+++ /dev/null
@@ -1,587 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-require File.join(File.dirname(__FILE__), "controllers", "dispatcher")
-
-include Merb::Test::Fixtures::Controllers
-
-describe Merb::Dispatcher do
-  include Merb::Test::Rspec::ControllerMatchers
-  include ::Webrat::Matchers
-  include ::Webrat::HaveTagMatcher
-  
-  def status(response)
-    response.status
-  end
-  
-  def body(response)
-    # emulate what most rack server adapters will do
-    response_body = ""
-    response.body.each do |b|
-      response_body << b
-    end
-    response_body
-  end
-  
-  def headers(response)
-    response.headers
-  end
-  
-  def dispatch(url)
-    rack = Merb::Dispatcher.handle(request_for(url))
-    Struct.new(:status, :headers, :body, :url).new(rack[0], rack[1], rack[2], url)
-  end
-
-  def request_for(url)
-    Merb::Request.new(Rack::MockRequest.env_for(url))
-  end
-
-  before(:each) do
-    Merb::Config[:exception_details] = true
-  end
-
-  describe "with a regular route, " do
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/dispatch_to/index"
-    end
-  
-    it "dispatches to the right controller and action" do
-      body(dispatch(@url)).should == "Dispatched"
-    end
-    
-    it "has the correct status code" do
-      status(dispatch(@url)).should == 200
-    end
-    
-    it "sets the Request#params to include the route params" do
-      # FIXME
-      request = request_for(@url)
-      Merb::Dispatcher.handle(request)
-      request.params.should == 
-        {"controller" => "dispatch_to", "action" => "index", 
-         "id" => nil, "format" => nil}
-    end
-    
-    it "provides the time for start of request handling via Logger#info" do
-      with_level(:info) do
-        dispatch(@url)
-      end.should include_log("Started request handling")
-      
-      with_level(:warn) do
-        dispatch(@url)
-      end.should_not include_log("Started request handling")
-    end
-    
-    it "provides the routed params via Logger#debug" do
-      with_level(:debug) do
-        dispatch(@url)
-      end.should include_log("Routed to:")
-      
-      with_level(:info) do
-        dispatch(@url)
-      end.should_not include_log("Routed to:")
-    end
-    
-    it "provides the benchmarks via Logger#info" do
-      with_level(:info) do
-        dispatch(@url)
-      end.should include_log(":after_filters_time")
-      
-      with_level(:warn) do
-        dispatch(@url)
-      end.should_not include_log(":after_filters_time")
-    end
-  end
-  
-  describe "with a route that redirects" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/redirect/to/foo").redirect("/foo", :permanent => true)
-        default_routes
-      end
-      @url = "/redirect/to/foo"
-      @controller = dispatch(@url)
-    end
-    
-    it "redirects" do
-      body(@controller).should =~ %r{You are being <a href="/foo">redirected}
-    end
-    
-    it "reports that it is redirecting via Logger#info" do
-      with_level(:info) do
-        dispatch(@url)
-      end.should include_log("Dispatcher redirecting to: /foo (301)")
-      
-      with_level(:warn) do
-        dispatch(@url)
-      end.should_not include_log("Dispatcher redirecting to: /foo (301)")
-    end
-    
-    it "sets the status correctly" do
-      status(@controller).should == 301
-    end
-    
-    it "sets the location correctly" do
-      headers(@controller)["Location"].should == "/foo"
-    end
-  end
-  
-  describe "with a deferred route that redirects" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/redirect/to/foo").defer_to do |request, params|
-          redirect "/foo", :permanent => true
-        end
-        default_routes
-      end
-      @url = "/redirect/to/foo"
-      @controller = dispatch(@url)
-    end
-    
-    it "redirects" do
-      body(@controller).should =~ %r{You are being <a href="/foo">redirected}
-    end
-    
-    it "reports that it is redirecting via Logger#info" do
-      with_level(:info) do
-        dispatch(@url)
-      end.should include_log("Dispatcher redirecting to: /foo (301)")
-      
-      with_level(:warn) do
-        dispatch(@url)
-      end.should_not include_log("Dispatcher redirecting to: /foo (301)")
-    end
-    
-    it "sets the status correctly" do
-      status(@controller).should == 301
-    end
-    
-    it "sets the location correctly" do
-      headers(@controller)["Location"].should == "/foo"
-    end
-  end
-  
-  describe "with a route that points to a class that is not a Controller, " do
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/not_a_controller/index"
-      @controller = dispatch(@url)
-    end
-    
-    describe "with exception details showing" do
-      it "returns a 404 status" do
-        status(@controller).should == 404
-      end
-      
-      it "returns useful info in the body" do
-        body(@controller).should =~
-          %r{<h2>Controller 'Merb::Test::Fixtures::Controllers::NotAController' not found.</h2>}
-      end
-    end
-    
-    describe "when the action raises an Exception" do
-      before(:each) do
-        Object.class_eval <<-RUBY
-          class Exceptions < Merb::Controller
-            def gone
-              "Gone"
-            end
-          end
-        RUBY
-      end
-      
-      after(:each) do
-        Object.send(:remove_const, :Exceptions)
-      end
-      
-      before(:each) do
-        Merb::Router.prepare do
-          default_routes
-        end
-        @url = "/raise_gone/index"
-        @controller = dispatch(@url)
-      end
-      
-      it "renders the action Exception#gone" do
-        body(@controller).should == "Gone"
-      end
-      
-      it "returns the status 410" do
-        status(@controller).should == 410
-      end
-    end
-    
-    describe "when the action raises an Exception that has a superclass Exception available" do
-      before(:each) do
-        Object.class_eval <<-RUBY
-          class Exceptions < Merb::Controller
-            def client_error
-              "ClientError"
-            end
-          end
-        RUBY
-      end
-      
-      after(:each) do
-        Object.send(:remove_const, :Exceptions)
-      end
-      
-      before(:each) do
-        Merb::Router.prepare do
-          default_routes
-        end
-        @url = "/raise_gone/index"
-        @controller = dispatch(@url)
-      end
-      
-      it "renders the action Exceptions#client_error since #gone is not defined" do
-        body(@controller).should == "ClientError"
-      end
-      
-      it "returns the status 410 (Gone) even though we rendered #client_error" do
-        status(@controller).should == 410
-      end
-    end
-  end
-  
-  describe "with a route that doesn't point to a Controller," do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match('/').register
-      end
-      
-      @controller = dispatch("/")
-    end
-    
-    describe "with exception details showing" do
-    
-      it "returns a 404 status" do
-        status(@controller).should == 404
-      end
-      
-      it "returns useful info in the body" do
-        body(@controller).should =~
-          %r{<h2>Route matched, but route did not specify a controller.</h2>}
-      end
-    end
-    
-    describe "when the action raises an Exception" do
-      before(:each) do
-        Object.class_eval <<-RUBY
-          class Exceptions < Merb::Controller
-            def gone
-              "Gone"
-            end
-          end
-        RUBY
-      end
-      
-      after(:each) do
-        Object.send(:remove_const, :Exceptions)
-      end
-      
-      before(:each) do
-        Merb::Router.prepare do
-          default_routes
-        end
-        @url = "/raise_gone/index"
-        @controller = dispatch(@url)
-      end
-      
-      it "renders the action Exception#gone" do
-        body(@controller).should == "Gone"
-      end
-      
-      it "returns the status 410" do
-        status(@controller).should == 410
-      end
-    end
-    
-    
-  end
-  
-  describe "when the action returns nil" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class SomeController < Merb::Controller
-          def zilch
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :SomeController)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/zilch").to(:controller => "SomeController", :action => "zilch")
-      end
-      @controller = dispatch("/zilch")
-    end
-    
-    it "renders nothing" do
-      body(@controller).should == ""
-    end
-  end
-  
-  describe "when the action raises an Error that is not a ControllerError" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def load_error
-            "LoadError"
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/raise_load_error/index"
-      @controller = dispatch(@url)
-    end
-    
-    it "renders Exceptions#load_error" do
-      body(@controller).should == "LoadError"
-    end
-    
-    it "returns a 500 status code" do
-      status(@controller).should == 500
-    end
-  end
-
-  describe "when the Exception action raises" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def load_error
-            raise StandardError, "Big error"
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/raise_load_error/index"
-      @controller = dispatch(@url)
-    end
-    
-    it "renders the default exception template" do
-      body(@controller).should have_xpath("//h1[contains(.,'Standard Error')]")
-      body(@controller).should have_xpath("//h2[contains(.,'Big error')]")
-
-      body(@controller).should have_xpath("//h1[contains(.,'Load Error')]")
-      body(@controller).should have_xpath("//h2[contains(.,'Big error')]")
-    end
-    
-    it "returns a 500 status code" do
-      status(@controller).should == 500
-    end
-  end
-
-
-  describe "when the Exception action raises a NotFound" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def not_found
-            raise NotFound, "Somehow, the thing you were looking for was not found."
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/page/not/found"
-      @controller = dispatch(@url)
-    end
-    
-    it "renders the default exception template" do
-      body(@controller).should have_xpath("//h1[contains(.,'Not Found')]")
-      body(@controller).should have_xpath("//h2[contains(.,'Somehow, the thing')]")
-    end
-    
-    it "returns a 404 status code" do
-      status(@controller).should == 404
-    end
-  end
-
-  describe "when the Exception action raises the same thing as the original failure" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def load_error
-            raise LoadError, "Something failed here"
-          end          
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/raise_load_error/index"
-      @controller = dispatch(@url)
-    end
-    
-    it "renders the default exception template" do
-      body(@controller).should have_xpath("//h2[contains(.,'Something failed here')]")
-    end
-    
-    it "returns a 500 status code" do
-      status(@controller).should == 500
-    end
-  end
-
-  describe "when more than one Exceptions methods raises an Error" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def load_error
-            raise StandardError, "StandardError"
-          end
-          
-          def standard_error
-            raise Exception, "Exception"
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/raise_load_error/index"
-      @controller = dispatch(@url)
-      @body = body(@controller)
-    end
-    
-    it "renders a list of links to the traces" do
-      @body.should have_xpath("//li//a[@href='#exception_0']")
-      @body.should have_xpath("//li//a[@href='#exception_1']")
-      @body.should have_xpath("//li//a[@href='#exception_2']")
-    end
-    
-    it "renders the default exception template" do
-      @body.should have_xpath("//h1[contains(.,'Load Error')]")
-      @body.should have_xpath("//h2[contains(.,'In the controller')]")
-      @body.should have_xpath("//h1[contains(.,'Standard Error')]")
-      @body.should have_xpath("//h2[contains(.,'StandardError')]")
-      @body.should have_xpath("//h1[contains(.,'Exception')]")
-      @body.should have_xpath("//h2[contains(.,'Exception')]")
-    end
-    
-    it "returns a 500 status code" do
-      status(@controller).should == 500
-    end
-  end
-  
-  describe "dispatching to abstract controllers" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class AbstractOne < Merb::Controller
-          abstract!
-          def index; "AbstractOne#index"; end
-        end
-      
-        class NotAbstract < AbstractOne
-          def index; "NotAbstract#index"; end
-        end
-        
-        class NormalController < Application
-          def index; "NormalController#index"; end
-        end
-      RUBY
-      class Application < Merb::Controller
-        def method_for_abstract_test; "method_for_abstract_test"; end
-      end
-      Merb::Router.prepare do
-        default_routes
-      end
-    end
-    
-    after(:each) do
-      Object.class_eval do 
-        remove_const(:AbstractOne)
-        remove_const(:NotAbstract)
-      end
-      
-      class Application < Merb::Controller
-        undef method_for_abstract_test
-      end
-      
-      # Merb::Router.prepare do
-      #   default_routes
-      # end      
-    end
-    
-    it "should return a NotFound for an Application#method" do
-      status(dispatch("/application/method_for_abstract_test")).should == 404
-    end
-    
-    it "should have Application marked as abstract" do
-      ::Application.should be_abstract
-    end
-    
-    it "should have AbstractOne marked as abstract" do
-      AbstractOne.should be_abstract
-    end
-    
-    it "should return a NotFound for an abstract controllers method" do
-      status(dispatch("/abstract_one/index")).should == 404
-    end
-    
-    it "should return correctly for a normal controller" do
-      result = dispatch("/normal_controller/index")
-      status(result).should == 200
-      body(result).should == "NormalController#index"
-    end
-    
-    it "should return correctly for a controller that is inherited from an abstract controller" do
-      result = dispatch("/not_abstract/index")
-      status(result).should == 200
-      body(result).should == "NotAbstract#index"
-    end
-    
-    
-    
-  end
-  
-end
diff --git a/spec/public/controller/display_spec.rb b/spec/public/controller/display_spec.rb
deleted file mode 100644
index 66862d2..0000000
--- a/spec/public/controller/display_spec.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Controller, " displaying objects based on mime type" do
-
-  before do
-    Merb::Router.prepare do
-      default_routes
-    end
-  end
-
-  it "should default the mime-type to HTML (and raise since there's no to_html)" do
-    running { dispatch_to(Merb::Test::Fixtures::Controllers::DisplayHtmlDefault, :index) }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should set headers['Location'] to string provided by :location" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithStringLocation, :index, {}, :http_accept => "application/json").headers['Location'].should =~ /some_resources/
-  end
-
-  it "should set the status to a code provided by :status" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithStatus, :index, {}, :http_accept => "application/json").status.should == 500
-  end
-
-  it "should use a template if specified" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :index).body.should match(/Custom: Template/)
-  end
-
-  it "overrides layout settings with render :layout => false" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :no_layout).body.should_not match(/Custom: Template/)
-  end
-  
-  it "should accept an absolute template path argument - with the mimetype extension" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :absolute_with_mime).body.should == "Custom: HTML: Default"
-  end
-  
-  it "should accept an absolute template path argument - without the mimetype extension" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :absolute_without_mime).body.should == "Custom: HTML: Default"
-  end
-  
-  it "should accept a relative template path argument - with the mimetype extension" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :relative_with_mime).body.should == "Custom: HTML: Default"
-  end
-  
-  it "should accept a relative template path argument - without the mimetype extension" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :relative_without_mime).body.should == "Custom: HTML: Default"
-  end
-
-  it "should accept a layout argument when calling to_*" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithLayout, :index, {}, 
-      :http_accept => "application/json").body.should == "{custom_arg: { 'include': '', 'exclude': '' }}"
-  end
-  
-  it "should accept a layout argument with a template" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplateArgument, :index).body.should == "Custom Arg: Template"
-  end
-
-  it "should accept a template path argument" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplateArgument, :index_by_arg).body.should == "Template"
-  end
-  
-  it "should use other mime-types if they are provided on the class level" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayClassProvides, :index, {}, :http_accept => "application/xml")
-    controller.body.should == "<XML:Model />"
-  end
-
-  it "should fail if none of the acceptable mime-types are available" do
-    calling { dispatch_to(Merb::Test::Fixtures::Controllers::DisplayClassProvides, :index, {}, :http_accept => "application/json") }.
-      should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should use mime-types that are provided at the local level" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayLocalProvides, :index, {}, :http_accept => "application/xml")
-    controller.body.should == "<XML:Model />"
-  end
-
-  it "passes all options to serialization method like :to_json" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithSerializationOptions, :index, {}, :http_accept => "application/json")
-    controller.body.should == "{ 'include': 'beer, jazz', 'exclude': 'idiots' }"
-  end
-
-  it "passes single argument to serialization method like :to_json" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithSerializationOptions, :index_that_passes_empty_hash, {}, :http_accept => "application/json")
-    controller.body.should == "{ 'include': '', 'exclude': '' }"
-  end
-end
diff --git a/spec/public/controller/override_spec.rb b/spec/public/controller/override_spec.rb
deleted file mode 100644
index 47b2478..0000000
--- a/spec/public/controller/override_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-class MyKontroller < Merb::Controller
-end
-
-describe "attempting to override a method in Merb::Controller" do
-  after(:each) do
-    MyKontroller.class_eval do
-      undef_method :status if method_defined?(:status)
-    end
-  end
-  
-  it "raises an error" do
-    lambda { MyKontroller.class_eval do
-      def status
-      end
-    end }.should raise_error(Merb::ReservedError)
-  end
-  
-  it "doesn't raise an error if override! is called" do
-    lambda { MyKontroller.class_eval do
-      override! :status
-      def status
-      end
-    end }.should_not raise_error
-  end
-end
\ No newline at end of file
diff --git a/spec/public/controller/redirect_spec.rb b/spec/public/controller/redirect_spec.rb
deleted file mode 100644
index f33a348..0000000
--- a/spec/public/controller/redirect_spec.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Controller, " redirects" do
-  it "redirects with simple URLs" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::SimpleRedirect, :index)
-    @controller.status.should == 302
-    @controller.headers["Location"].should == "/"
-  end
-
-  it "redirects if passed in via throw :halt" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::RedirectViaHalt, :index)
-    @controller.status.should == 302
-    @controller.headers["Location"].should == "/"
-  end
-
-  it "permanently redirects" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::PermanentRedirect, :index)
-    @controller.status.should == 301
-    @controller.headers["Location"].should == "/"
-  end
-
-  it "recirect with :permanent and :stauts use :status" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::PermanentAndStatusRedirect, :index)
-    @controller.status.should == 302
-    @controller.headers["Location"].should == "/"
-  end
-
-  it "redirect with status" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::WithStatusRedirect, :index)
-    @controller.status.should == 307
-    @controller.headers["Location"].should == "/"
-  end
-
-  it "redirects with messages" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::RedirectWithMessage, :index)
-    @controller.status.should == 302
-    expected_url = Merb::Parse.escape([Marshal.dump(:notice => "what?")].pack("m"))
-    @controller.headers["Location"].should == "/?_message=#{expected_url}"
-  end
-  
-  it "redirects with message and fragment" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::RedirectWithMessageAndFragment, :index)
-    @controller.status.should == 302
-    expected_url = Merb::Parse.escape([Marshal.dump(:notice => "what?")].pack("m"))
-    @controller.headers["Location"].should == "/?_message=#{expected_url}#someanchor"
-  end
-  
-  it "redirects with short style using :notice" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::RedirectWithNotice, :index)
-    @controller.status.should == 302
-    expected_url = Merb::Parse.escape([Marshal.dump(:notice => "what?")].pack("m"))
-    @controller.headers["Location"].should == "/?_message=#{expected_url}"
-  end
-
-  it "redirects with short style using :error" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::RedirectWithError, :index)
-    @controller.status.should == 302
-    expected_url = Merb::Parse.escape([Marshal.dump(:error => "errored!")].pack("m"))
-    @controller.headers["Location"].should == "/?_message=#{expected_url}"
-  end
-
-  it "consumes redirects with messages" do
-    Merb::Router.prepare do
-      match('/consumes_message').to(:controller => 'merb/test/fixtures/controllers/consumes_message', :action => 'index')
-    end
-    expected_url = Merb::Parse.escape([Marshal.dump(:notice => '<b>1 > 2 + 100</b>')].pack('m'))
-    response = visit("/consumes_message?_message=#{expected_url}")
-    response.body.to_s.should == '<b>1 > 2 + 100</b>'
-  end
-  
-  it "supports setting the message for use immediately" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::SetsMessage, :index)
-    @controller.body.should == "Hello"
-  end
-
-  it "handles malformed message" do
-    message = Merb::Parse.escape([Marshal.dump(:notice => "what?")].pack("m"))
-    message = message.reverse
-    lambda do
-      @controller = dispatch_to(Merb::Test::Fixtures::Controllers::SetsMessage, :index, {:_message => message})
-    end.should_not raise_error(TypeError)
-  end
-end
diff --git a/spec/public/controller/resource_spec.rb b/spec/public/controller/resource_spec.rb
deleted file mode 100644
index 0c51747..0000000
--- a/spec/public/controller/resource_spec.rb
+++ /dev/null
@@ -1,364 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-require File.join(File.dirname(__FILE__), "controllers", "url")
-require 'ostruct'
-
-describe Merb::Controller, " #resource" do
-  
-  class ::Orm     < ::OpenStruct ; def id ; @table[:id] ; end ; end
-  class ::User    < Orm ; end
-  class ::Comment < Orm ; end
-  class ::Forum   < Orm ; end
-
-  module ::Namespaced
-    class User < Orm ; end
-  end
-  
-  before(:each) do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :void)
-  end
-  
-  describe "generating a resource collection route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users
-        end
-      end
-      
-      @user = User.new(:id => 5)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(:users).should == "/users"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@user).should == "/users/5"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:users, :new).should == "/users/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@user, :edit).should == "/users/5/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@user, :delete).should == "/users/5/delete"
-    end
-    
-    it "should be able to specify extra actions through the options" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users, :collection => { :hello => :get }, :member => { :goodbye => :post }
-        end
-      end
-      
-      @controller.resource(:users, :hello).should  == "/users/hello"
-      @controller.resource(@user, :goodbye).should == "/users/5/goodbye"
-    end
-    
-    it "should be able to specify extra actions through the block" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users do
-            collection :hello
-            member     :goodbye
-          end
-        end
-      end
-      
-      @controller.resource(:users, :hello).should  == "/users/hello"
-      @controller.resource(@user, :goodbye).should == "/users/5/goodbye"
-    end
-    
-    it "should be able to work with a model Named Forum" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :forums
-        end
-      end
-      
-      @forum = Forum.new(:id => 9)
-      
-      @controller.resource(@forum).should == "/forums/9"
-    end
-    
-  end
-  
-  describe "generating a resource member route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :user
-      end
-      
-      @user = User.new(:id => 5)
-    end
-    
-    it "should generate the url for the member" do
-      @controller.resource(:user).should == "/user"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:user, :new).should == "/user/new"
-    end
-    
-    it "should generate the url for editing the member" do
-      @controller.resource(:user, :edit).should == "/user/edit"
-    end
-    
-    it "should generate the url for deleting the member" do
-      @controller.resource(:user, :delete).should == "/user/delete"
-    end
-    
-    it "should be able to specify extra actions through the options" do
-      Merb::Router.prepare do
-        resource :user, :member => { :hello => :get }
-      end
-      
-      @controller.resource(:user, :hello).should == "/user/hello"
-    end
-    
-    it "should be able to specify extra options through the block" do
-      Merb::Router.prepare do
-        resource :user do
-          member :hello
-        end
-      end
-      
-      @controller.resource(:user, :hello).should == "/user/hello"
-    end
-    
-  end
-  
-  describe "a nested resource collection route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users do
-            resources :comments
-          end
-        end
-      end
-      
-      @user    = User.new(:id => 5)
-      @comment = Comment.new(:id => 8)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(@user, :comments).should == "/users/5/comments"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@user, @comment).should == "/users/5/comments/8"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(@user, :comments, :new).should == "/users/5/comments/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@user, @comment, :edit).should == "/users/5/comments/8/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@user, @comment, :delete).should == "/users/5/comments/8/delete"
-    end
-  end
-  
-  describe "nested member routes" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :user do
-          resource :comment
-        end
-      end
-    end
-    
-    it "should generate the url for the nested member" do
-      @controller.resource(:user, :comment).should == "/user/comment"
-    end
-    
-    it "should generate the url for a new nested member" do
-      @controller.resource(:user, :comment, :new).should == "/user/comment/new"
-    end
-    
-    it "should generate the url for editing the nested member" do
-      @controller.resource(:user, :comment, :edit).should == "/user/comment/edit"
-    end
-    
-    it "should generate the url for deleting the nested member" do
-      @controller.resource(:user, :comment, :delete).should == "/user/comment/delete"
-    end
-  end
-  
-  describe "a namespaced resource collection route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify(:id).namespace(:admin) do
-          resources :users
-        end
-      end
-      
-      @user = User.new(:id => 5)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(:admin, :users).should == "/admin/users"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@user).should == "/users/5"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:users, :new).should == "/users/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@user, :edit).should == "/users/5/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@user, :delete).should == "/users/5/delete"
-    end
-    
-  end
-  
-  describe "a resource collection route with a named segment prefix" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify(:id).match("/:account") do
-          resources :users
-        end
-      end
-      
-      @user = User.new(:id => 5)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(:users, :account => "foo").should == "/foo/users"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@user, :account => "foo").should == "/foo/users/5"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:users, :new, :account => "foo").should == "/foo/users/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@user, :edit, :account => "foo").should == "/foo/users/5/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@user, :delete, :account => "foo").should == "/foo/users/5/delete"
-    end
-    
-    it "should use :account from the request params if it isn't specified" do
-      @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :void, :account => "foo")
-      @controller.resource(:users).should == "/foo/users"
-      @controller.resource(@user).should  == "/foo/users/5"
-    end
-    
-    it "should be able to override the :account request parameter" do
-      @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :void, :account => "foo")
-      @controller.resource(:users, :account => "bar").should == "/bar/users"
-      @controller.resource(@user, :account => "bar").should  == "/bar/users/5"
-    end
-    
-  end
-  
-  describe "a resource collection with a specified class" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify :id do
-          resources :admins, User do
-            resources :notes, "Comment"
-          end
-        end
-      end
-      
-      @admin = User.new(:id => 5)
-      @note  = Comment.new(:id => 8)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(:admins).should == "/admins"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@admin).should == "/admins/5"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:admins, :new).should == "/admins/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@admin, :edit).should == "/admins/5/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@admin, :delete).should == "/admins/5/delete"
-    end
-    
-    it "should generate the url for the nested collection" do
-      @controller.resource(@admin, :notes).should == "/admins/5/notes"
-    end
-    
-    it "should generate the url for a member of the nested collection" do
-      @controller.resource(@admin, @note).should == "/admins/5/notes/8"
-    end
-    
-    it "should generate the url for a new nested member" do
-      @controller.resource(@admin, :notes, :new).should == "/admins/5/notes/new"
-    end
-    
-    it "should generate the url for editing a member of the nested collection" do
-      @controller.resource(@admin, @note, :edit).should == "/admins/5/notes/8/edit"
-    end
-    
-    it "should generate the url for deleting a member of the nested collection" do
-      @controller.resource(@admin, @note, :delete).should == "/admins/5/notes/8/delete"
-    end
-    
-  end
-  
-  describe "a resource collection with a specified namespaced class" do
-    
-    it "should generate the url for the namespaced resource when passed as a constant" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users, User
-          match("/hello").resources :users, Namespaced::User
-        end
-      end
-      
-      resource(Namespaced::User.new(:id => 5)).should == "/hello/users/5"
-    end
-    
-    it "should generate the url for the namespaced resource when passed as a string" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users, User
-          match("/hello").resources :users, "Namespaced::User"
-        end
-      end
-      
-      resource(Namespaced::User.new(:id => 5)).should == "/hello/users/5"
-    end
-    
-  end
-  
-  
-end
diff --git a/spec/public/controller/responder_spec.rb b/spec/public/controller/responder_spec.rb
deleted file mode 100644
index e4b187b..0000000
--- a/spec/public/controller/responder_spec.rb
+++ /dev/null
@@ -1,179 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Controller, " responds" do
-  
-  Controllers = Merb::Test::Fixtures::Controllers unless defined?(Controllers)
-  
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")    
-    Merb::Router.prepare do
-      default_routes
-    end
-  end
-  
-  it "should default the mime-type to HTML" do
-    dispatch_to(Controllers::HtmlDefault, :index).body.should == "HTML: Default"
-  end
-
-  it "should use other mime-types if they are provided on the controller-level" do
-    controller = dispatch_to(Controllers::ClassProvides, :index, {}, :http_accept => "application/xml")
-    controller.body.should == "<XML:Class provides='true' />"
-  end
-
-  it "should fail if none of the acceptable mime-types are available" do
-    calling { dispatch_to(Controllers::ClassProvides, :index, {}, :http_accept => "application/json") }.
-      should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should use mime-types that are provided at the action-level" do
-    controller = dispatch_to(Controllers::LocalProvides, :index, {}, :http_accept => "application/xml")
-    controller.body.should == "<XML:Local provides='true' />"
-  end
-  
-  it "should use mime-types that are provided at the controller-level as well as the action-level (controller)" do
-    controller = dispatch_to(Controllers::ClassAndLocalProvides, :index, {}, :http_accept => "text/html")
-    controller.class_provided_formats.should == [:html]
-    controller._provided_formats.should == [:html, :xml]
-    controller.body.should == "HTML: Class and Local"
-  end  
-  
-  it "should use mime-types that are provided at the controller-level as well as the action-level (action)" do  
-    controller = dispatch_to(Controllers::ClassAndLocalProvides, :index, {}, :http_accept => "application/xml")
-    controller.class_provided_formats.should == [:html]
-    controller._provided_formats.should == [:html, :xml]
-    controller.body.should == "<XML:ClassAndLocalProvides provides='true' />"
-  end
-
-  it "should use the first mime-type when accepting anything */*" do
-    controller = dispatch_to(Controllers::MultiProvides, :index, {}, :http_accept => "*/*")
-    controller.body.should == "HTML: Multi"
-  end
-
-  it "should pick application/xhtml+xml when both application/xml and application/xhtml+xml are available" do
-    controller = dispatch_to(Controllers::ClassProvides, 
-      :index, {}, :http_accept => "application/xml,application/xhtml+xml")
-    controller.body.should == "HTML: Wins Over XML If Both Are Specified"
-  end
-
-  it "should use the first mime-type when accepting anything */*, even if something unprovidable comes first" do
-    controller = dispatch_to(Controllers::HtmlDefault, :index, {}, :http_accept => "application/json, */*")
-    controller.body.should == "HTML: Default"
-  end
-
-  it "should use the pick the first mime-type from the list not the */*" do
-    controller = dispatch_to(Controllers::MultiProvides, :index, {}, :http_accept => "text/javascript, */*")
-    controller.body.should == "JS: Multi"
-  end
-  
-  it "should pick the first mime-type if no specific supported content-type matches are *available*" do
-    controller = dispatch_to(Controllers::MultiProvides, :index, {}, :http_accept => "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*")
-    controller.body.should == "HTML: Multi"
-  end
-
-  it "should pick the first mime-type if no specific supported content-type matches are actually *provided*" do
-    controller = dispatch_to(Controllers::MultiProvides, :index, {}, :http_accept => "application/json, */*")
-    controller.body.should == "HTML: Multi"
-  end
-  
-  it "should select the format based on params supplied to it with controller-level provides" do
-    controller = dispatch_to(Controllers::ClassProvides, :index, :format => "xml")
-    controller.content_type.should == :xml    
-  end
-  
-  it "should select the format based on params supplied to it with action-level provides" do
-    controller = dispatch_to(Controllers::LocalProvides, :index, :format => "xml")
-    controller.content_type.should == :xml    
-  end
-  
-  it "should select the format based on params supplied to it with controller and action provides (controller)" do
-    controller = dispatch_to(Controllers::ClassAndLocalProvides, :index, :format => "html")
-    controller.content_type.should == :html
-  end
-  
-  it "should select the format based on params supplied to it with controller and action provides (action)" do
-    controller = dispatch_to(Controllers::ClassAndLocalProvides, :index, :format => "xml")
-    controller.content_type.should == :xml
-  end
-  
-  it "should properly add formats when only_provides is called in action" do
-    controller = dispatch_to(Controllers::OnlyProvides, :index, {}, :http_accept => "application/xml")
-    controller._provided_formats.should == [:text, :xml]
-    controller.content_type.should == :xml
-  end
-  
-  it "should raise an error if an invalid format is provided via :format" do
-    lambda do
-      controller = dispatch_to(Controllers::OnlyProvides, :index, {:format => "zooz"}, 
-        :http_accept => "application/xml")
-      controller.content_type
-    end.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should properly remove formats when only_provides is called in action" do
-    controller = dispatch_to(Controllers::OnlyProvides, :index, {}, :http_accept => "text/html")
-    lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should properly add formats when only_provides is called in controller" do
-    controller = dispatch_to(Controllers::ClassOnlyProvides, :index, {}, :http_accept => "application/xml")
-    controller._provided_formats.should == [:text, :xml]
-    controller.content_type.should == :xml
-  end
-
-  it "should properly remove formats when only_provides is called in controller" do
-    controller = dispatch_to(Controllers::ClassOnlyProvides, :index, {}, :http_accept => "text/html")
-    lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-  
-  it "should properly remove formats when does_not_provide is called in controller" do
-    controller = dispatch_to(Controllers::ClassDoesntProvides, :index, {}, :http_accept => "text/html")
-    controller._provided_formats.should == [:xml]
-    lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should properly remove formats when does_not_provide is called in action" do
-    controller = dispatch_to(Controllers::DoesntProvide, :index, {}, :http_accept => "text/html")
-    controller._provided_formats.should == [:xml]
-    lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-  
-  it "should return the correct default HTTP headers for a format" do
-    controller = dispatch_to(Controllers::ClassProvides, :index, :format => "xml")
-    controller.headers.keys.sort.should == ["Content-Type"]
-    controller.headers["Content-Type"].should == "application/xml; charset=utf-8"
-  end
-  
-  it "should append the correct charset which was set when the format was added" do
-    Merb.add_mime_type(:foo, nil, %w[application/foo], :charset => "iso-8859-1")
-    controller = dispatch_to(Controllers::FooFormatProvides, :index, :format => "foo")
-    controller.headers["Content-Type"].should == "application/foo; charset=iso-8859-1"
-  end
-  
-  it "should return the correct HTTP headers which were set when the format was added" do
-    Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => 'bar', "Content-Language" => "en", :charset => "utf-8")
-    controller = dispatch_to(Controllers::FooFormatProvides, :index, :format => "foo")
-    controller.headers.keys.should_not include(:charset)
-    controller.headers["Content-Type"].should == "application/foo; charset=utf-8"
-    controller.headers["Content-Language"].should == "en"
-    controller.headers["Foo"] = "bar"
-  end
-  
-  it "should return the correct HTTP headers using the block given when the format was added" do
-    Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => "bar") do |controller|
-      controller.headers["Action-Name"] = controller.action_name
-    end
-    controller = dispatch_to(Controllers::FooFormatProvides, :index, :format => "foo")
-    controller.headers["Content-Type"].should == "application/foo"
-    controller.headers["Action-Name"].should == "index"
-    controller.headers["Foo"] = "bar"
-  end
-  
-  it "should not overwrite runtime-set headers with default format response headers" do
-    Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => "bar", "Content-Language" => "en")
-    controller = dispatch_to(Controllers::FooFormatProvides, :show, :format => "foo")
-    controller.headers["Content-Language"].should == "nl"
-    controller.headers["Biz"] = "buzz"
-    controller.headers["Foo"] = "bar"
-  end
-  
-end
diff --git a/spec/public/controller/spec_helper.rb b/spec/public/controller/spec_helper.rb
deleted file mode 100644
index c52b375..0000000
--- a/spec/public/controller/spec_helper.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-__DIR__ = File.dirname(__FILE__)
-
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-
-startup_merb(:init_file => File.join(__DIR__, 'config', 'init'))
-
-require File.join(__DIR__, "controllers", "base")
-require File.join(__DIR__, "controllers", "responder")
-require File.join(__DIR__, "controllers", "display")
-require File.join(__DIR__, "controllers", "authentication")
-require File.join(__DIR__, "controllers", "redirect")
-require File.join(__DIR__, "controllers", "cookies")
-require File.join(__DIR__, "controllers", "conditional_get")
-require File.join(__DIR__, "controllers", "streaming")
-
diff --git a/spec/public/controller/streaming_spec.rb b/spec/public/controller/streaming_spec.rb
deleted file mode 100644
index 85655d1..0000000
--- a/spec/public/controller/streaming_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-Controllers = Merb::Test::Fixtures::Controllers
-
-describe Merb::Controller, "#nginx_send_file" do
-  
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")    
-    Merb::Router.prepare do
-      default_routes
-    end
-
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Streaming, :x_accel_redirect)
-  end
-  
-  it "returns a space" do
-    @controller.body.should == " "
-  end
-
-  it 'sets X-Accel-Redirect header using first argument value' do
-    @controller.headers['X-Accel-Redirect'].should == "/protected/content.pdf"
-  end
-
-  describe "when given second argument" do
-    it 'sets Content-Type header using second argument value' do
-      @controller.headers['Content-Type'].should == "application/pdf"
-    end
-  end
-
-
-  describe "when given only first argument" do
-    before(:each) do
-      @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Streaming, :x_accel_redirect_with_default_content_type)
-    end
-    
-    it 'sets Content-Type header to empty string and sets Nginx determine it' do
-      @controller.headers['Content-Type'].should == ""
-    end
-  end
-end
diff --git a/spec/public/controller/url_spec.rb b/spec/public/controller/url_spec.rb
deleted file mode 100644
index 1e70f9c..0000000
--- a/spec/public/controller/url_spec.rb
+++ /dev/null
@@ -1,375 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-require File.join(File.dirname(__FILE__), "controllers", "url")
-
-class Monkey ; def to_param ; 45 ; end ; end
-class Donkey ; def to_param ; 19 ; end ; end
-class Blue
-  def to_param ; 13 ; end
-  def monkey_id ; Monkey.new ; end
-  def donkey_id ; Donkey.new ; end
-end
-class Pink
-  def to_param ; 22 ; end
-  def blue_id ; Blue.new ; end
-  def monkey_id ; blue_id.monkey_id ; end
-end
-
-describe Merb::Controller, " url" do
-  
-  before(:each) do
-    Merb::Router.prepare do
-      identify :to_param do
-        resources :monkeys do
-          resources :blues do
-            resources :pinks
-          end
-        end
-        resources :donkeys do
-          resources :blues
-        end
-        resource :red do
-          resources :blues
-        end
-        match(%r{/foo/(\d+)/}).to(:controller => 'asdf').name(:regexp)
-        match('/people(/:name)(.:format)').to(:controller => 'people', :action => 'show').name(:person)
-        match('/argstrs').to(:controller => "args").name(:args)
-        default_routes
-      end
-    end
-    
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :index)
-  end
-  
-  it "should match the :controller to the default route" do
-    @controller.url(:controller => "monkeys").should eql("/monkeys")
-  end
-
-  it "should match the :controller,:action to the default route" do
-    @controller.url(:controller => "monkeys", :action => "list").
-      should eql("/monkeys/list")
-  end
-  
-  it "should match the :controller,:action,:id to the default route" do
-    @controller.url(:controller => "monkeys", :action => "list", :id => 4).
-      should eql("/monkeys/list/4")
-  end
-  
-  it "should match the :controller,:action,:id,:format to the default route" do
-    @controller.url(:controller => "monkeys", :action => "list", :id => 4, :format => "xml").
-      should eql("/monkeys/list/4.xml")
-  end
-  
-  it "should match the :controller,:action,:id,:format,:fragment to the default route" do
-    @controller.url(:controller => "monkeys", :action => "list", :id => 4, :format => "xml", :fragment => :half_way).
-      should eql("/monkeys/list/4.xml#half_way")
-  end
-
-  it "should raise an error when trying to generate a regexp route" do
-    lambda { @controller.url(:regexp) }.should raise_error(Merb::Router::GenerationError)
-  end
-  
-  it "should raise an error when trying to generate a route that doesn't exist" do
-    lambda { @controller.url(:lalalala) }.should raise_error(Merb::Router::GenerationError)
-  end
-
-  it "should match with a route param" do
-    @controller.url(:person, :name => "david").should eql("/people/david")
-  end
-
-  it "should match without a route param" do
-    @controller.url(:person).should eql("/people")
-  end
-
-  it "should match with an additional param" do
-    @controller.url(:person, :name => 'david', :color => 'blue').should eql("/people/david?color=blue")
-  end
-  
-  it "should match with a :format" do
-    @controller.url(:person, :name => 'david', :format => :xml).should eql("/people/david.xml")
-  end
-  
-  it "should match with a :fragment" do
-    @controller.url(:person, :name => 'david', :fragment => :half_way).should eql("/people/david#half_way")
-  end
-
-  it "should match with an :anchor (alias for :fragment)" do
-    @controller.url(:person, :name => 'david', :anchor => :half_way).should eql("/people/david#half_way")
-  end
-  
-  it "should match with an additional param and :format" do
-    @controller.url(:person, :name => 'david', :color => 'blue', :format => :xml).should eql("/people/david.xml?color=blue")
-  end
-  
-  it "should match with an additional param, :format, and :fragment" do
-    @controller.url(:person, :name => 'david', :color => 'blue', :format => :xml, :fragment => :half_way).
-      should eql("/people/david.xml?color=blue#half_way")
-  end
-  
-  it "should match with additional params" do
-    url = @controller.url(:person, :name => 'david', :smell => 'funky', :color => 'blue')
-    url.should match(%r{/people/david?.*color=blue})
-    url.should match(%r{/people/david?.*smell=funky})
-  end
-
-  it "should match with extra params and an array" do
-    @controller.url(:args, :monkey => [1,2]).should == "/argstrs?monkey[]=1&monkey[]=2"
-  end
-  
-  it "should match with no second arg" do
-    @controller.url(:monkeys).should == "/monkeys"
-  end
-  
-  it "should match with an object as second arg" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, @monkey).should == "/monkeys/45"
-  end
-  
-  it "should match with a fixnum as second arg" do
-    @controller.url(:monkey, 3).should == "/monkeys/3"
-  end
-  
-  it "should match with an object and :format" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, :id => @monkey, :format => :xml).should == "/monkeys/45.xml"
-  end
-  
-  it "should match with an object, :format and additional options" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, :id => @monkey, :format => :xml, :color => "blue").should == "/monkeys/45.xml?color=blue"
-  end
-  
-  it "should match with an object, :format, :fragment, and additional options" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, :id => @monkey, :format => :xml, :color => "blue", :fragment => :half_way).should == "/monkeys/45.xml?color=blue#half_way"
-  end
-
-  it "should match the delete_monkey route" do
-    @monkey = Monkey.new
-    @controller.url(:delete_monkey, @monkey).should == "/monkeys/45/delete"
-  end
-  
-  it "should match the delete_red route" do
-    @controller.url(:delete_red).should == "/red/delete"
-  end
-
-  it "should add a path_prefix to the url if :path_prefix is set" do
-    Merb::Config[:path_prefix] = "/jungle"
-    @controller.url(:monkeys).should == "/jungle/monkeys"
-    Merb::Config[:path_prefix] = nil
-  end
- 
-  it "should match a nested resources show action" do
-    @blue = Blue.new
-    @controller.url(:monkey_blue, @blue.monkey_id, @blue).should == "/monkeys/45/blues/13"
-  end
-  
-  it "should match the index action of nested resource with parent object" do
-    @blue = Blue.new
-    @monkey = Monkey.new
-    @controller.url(:monkey_blues, :monkey_id => @monkey).should == "/monkeys/45/blues"
-  end
-  
-  it "should match the index action of nested resource with parent id as string" do
-    @blue = Blue.new
-    @controller.url(:monkey_blues, :monkey_id => '1').should == "/monkeys/1/blues"
-  end
-  
-  it "should match the edit action of nested resource" do
-    @blue = Blue.new
-    @controller.url(:edit_monkey_blue, @blue.monkey_id, @blue).should == "/monkeys/45/blues/13/edit"
-  end
-  
-  it "should match the index action of resources nested under a resource" do
-    @blue = Blue.new
-    @controller.url(:red_blues).should == "/red/blues"
-  end
-  
-  it "should match resource that has been nested multiple times" do
-    @blue = Blue.new
-    @controller.url(:donkey_blue, @blue.donkey_id, @blue).should == "/donkeys/19/blues/13"
-    @controller.url(:monkey_blue, @blue.monkey_id, @blue).should == "/monkeys/45/blues/13"
-  end
-  
-  it "should match resources nested more than one level deep" do
-    @pink = Pink.new
-    @controller.url(:monkey_blue_pink, @pink.blue_id.monkey_id, @pink.blue_id, @pink).should == "/monkeys/45/blues/13/pinks/22"
-  end
-
-  it "should match resource with additional params" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, @monkey, :foo => "bar").should == "/monkeys/45?foo=bar"
-  end
-  it "should match resource with fragment" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, @monkey, :fragment => :half_way).should == "/monkeys/45#half_way"
-  end
-
-  it "should match a nested resource with additional params" do
-    @blue = Blue.new
-    @controller.url(:monkey_blue, @blue.monkey_id, @blue, :foo => "bar").should == "/monkeys/45/blues/13?foo=bar"
-  end
-  
-  it "should match a nested resource with additional params and fragment" do
-    @blue = Blue.new
-    @controller.url(:monkey_blue, @blue.monkey_id, @blue, :foo => "bar", :fragment => :half_way).should == "/monkeys/45/blues/13?foo=bar#half_way"
-  end
-
-end
-
-describe Merb::Controller, "#url(:this, *args)" do
-  
-  before(:each) do
-    Merb::Router.prepare do
-      with(:controller => "merb/test/fixtures/controllers/url", :action => "this_route") do
-        
-        resources :users, :controller => "merb/test/fixtures/controllers/url" do
-          resources :comments, :controller => "merb/test/fixtures/controllers/url"
-        end
-        
-        resource :profile, :controller => "merb/test/fixtures/controllers/url"
-        
-        match(%r[/regex]).register
-        match("/simple").register
-        match("/no_optionals(/:one(/:two))").register
-        match("/one_optionals(/:one(/:two))").to(:action => "one_optionals")
-        match("/two_optionals(/:one(/:two))").to(:action => "two_optionals")
-        match("/postage", :method => :post).register
-        match("/action/:action").to(:action => "[1]")
-        match("/defer").defer_to { |r, params| params }
-        match(:method => :get).defer_to { |r, params| params }
-      end
-    end
-  end
-  
-  it "should use the current route" do
-    visit("/simple").body.to_s.should == "/simple"
-  end
-  
-  it "should be able to generate a route with optional segments" do
-    visit("/no_optionals").body.to_s.should == "/no_optionals"
-  end
-  
-  it "should drop the optional request params if they are not specified when generating the route" do
-    visit("/no_optionals/one/two").body.to_s.should == "/no_optionals"
-  end
-  
-  it "should generate the optional segments as specified" do
-    visit("/one_optionals/one/two").body.to_s.should == "/one_optionals/one"
-    visit("/two_optionals/one/two").body.to_s.should == "/two_optionals/one/two"
-  end
-  
-  it "should generate the route even if it is not a GET request" do
-    visit("/postage", :post).body.to_s.should == "/postage"
-  end
-  
-  it "should be able to tag on extra query string paramters" do
-    visit('/action/this_route_with_page').body.to_s.should == "/action/this_route_with_page?page=2"
-  end
-  
-  it "should work with deferred block routes" do
-    visit("/defer").body.to_s.should == "/defer"
-  end
-  
-  it "should not work with routes that do not have a path" do
-    begin
-      visit("/foo/bar")
-      fail "Should raise Webrat::PageLoadError"
-    rescue Webrat::PageLoadError => e
-      e.message.should have_xpath("//h1[contains(.,'Generation Error')]")
-    end
-  end
-  
-  it "should raise an error when trying to generate a regexp route" do
-    begin
-      visit("/regex")
-      fail "Should raise Webrat::PageLoadError"
-    rescue Webrat::PageLoadError => e
-      e.message.should have_xpath("//h1[contains(.,'Generation Error')]")
-    end
-  end
-  
-  it "should work with resource routes" do
-    visit("/users").body.to_s.should         == "/users"
-    visit("/users/10").body.to_s.should      == "/users/10"
-    visit("/users/new").body.to_s.should     == "/users/new"
-    visit("/users/10/edit").body.to_s.should == "/users/10/edit"
-    visit("/profile").body.to_s.should       == "/profile"
-  end
-  
-  it "should work with nested resource routes" do
-    visit("/users/10/comments").body.to_s.should        == "/users/10/comments"
-    visit("/users/10/comments/9").body.to_s.should      == "/users/10/comments/9"
-    visit("/users/10/comments/new").body.to_s.should    == "/users/10/comments/new"
-    visit("/users/10/comments/9/edit").body.to_s.should == "/users/10/comments/9/edit"
-  end
-end
-
-describe Merb::Controller, "absolute_url" do
-  before do
-    Merb::Router.prepare do
-      identify :to_param do
-        resources :monkeys do |m|
-          m.resources :blues do |b|
-            b.resources :pinks
-          end
-        end
-        resources :donkeys do |d|
-          d.resources :blues
-        end
-        resource :red do |red|
-          red.resources :blues
-        end
-        match(%r{/foo/(\d+)/}).to(:controller => 'asdf').name(:regexp)
-        match('/people(/:name)(.:format)').to(:controller => 'people', :action => 'show').name(:person)
-        match('/argstrs').to(:controller => "args").name(:args)
-        default_routes
-      end
-    end
-    
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :index)
-  end
-
-  it 'takes :protocol option' do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey,
-                             :id       => @monkey,
-                             :format   => :xml,
-                             :protocol => "https").should == "https://localhost/monkeys/45.xml"
-  end
-
-  it 'takes :host option' do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey,
-                             :id       => @monkey,
-                             :format   => :xml,
-                             :protocol => "https",
-                             :host     => "rubyisnotrails.org").should == "https://rubyisnotrails.org/monkeys/45.xml"
-  end
-
-  it 'falls back to request protocol' do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey,
-                             :id       => @monkey,
-                             :format   => :xml).should == "http://localhost/monkeys/45.xml"
-  end
-
-  it 'falls back to request host' do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey,
-                             :id       => @monkey,
-                             :format   => :xml,
-                             :protocol => "https").should == "https://localhost/monkeys/45.xml"
-  end
-  
-  it "allows passing an object instead of a hash" do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey, @monkey).should == "http://localhost/monkeys/45"
-  end
-  
-  it "should support non-named routes" do
-    @controller.absolute_url(:controller => "monkeys", :action => "list").
-      should eql("http://localhost/monkeys/list")
-  end
-  
-end
diff --git a/spec/public/core/config_spec.rb b/spec/public/core/config_spec.rb
deleted file mode 100644
index d2a8a60..0000000
--- a/spec/public/core/config_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-
-describe Merb::Config do
-
-  it "should set Dispatcher.use_mutex to true by default" do
-    lambda {
-      startup_merb
-      Merb::Dispatcher.use_mutex.should be_true
-    }
-  end
-
-  it "should set Dispatcher.use_mutex to value in config" do
-    lambda {
-      startup_merb({:use_mutex => false})
-      Merb::Dispatcher.use_mutex.should be_false
-    }
-  end
-end
diff --git a/spec/public/core/merb_core_spec.rb b/spec/public/core/merb_core_spec.rb
deleted file mode 100644
index 2c6660c..0000000
--- a/spec/public/core/merb_core_spec.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-
-describe "Merb" do
-
-  describe "Merb.environment, Merb.env helpers" do
-    before(:all) do
-      startup_merb
-      @orig_env = Merb.environment
-    end
-    after(:all) do
-      Merb.environment = @orig_env
-    end
-
-    it "should pickup the environment from env" do
-      %w(development test production staging demo).each do |e|
-        Merb.environment = e
-        Merb.env.should == e
-      end
-    end
-
-    it "should correctly answer the question about which env it's in with symbol or string" do
-      %w(development test production staging demo custom).each do |e|
-        Merb.environment = e
-        Merb.env?(e).should be true
-        Merb.env?(e.to_sym).should be_true
-      end
-    end
-
-    it "should answer false if asked for an environment that is not current" do
-      %w(development test production staging demo custom).each do |e|
-        Merb.environment = e
-        Merb.env?(:not_it).should be_false
-      end
-    end
-
-    it "should allow an environment to merge another environments settings" do
-      %w(development test production staging demo custom).each do |e|
-
-        Merb.environment = e
-        Merb.start_environment
-        Merb.merge_env "some_other_env"
-        Merb.environment_info.nil?.should be_false
-        Merb.environment_info[:merged_envs].first.should == "some_other_env"
-      end
-    end
-  end
-
-  describe "#runnig_irb?" do
-    it "should be false if running different adapter than irb" do
-      startup_merb
-      Merb.running_irb?.should be_false
-    end
-
-    %w{-i --irb-console}.each do |option|
-      it "should be true if merb is run with CLI option #{option}" do
-        Merb::Server.stub!(:start)
-        Merb.start([option])
-        Merb.running_irb?.should be_true
-      end
-    end
-  end
-end
diff --git a/spec/public/core_ext/kernel_spec.rb b/spec/public/core_ext/kernel_spec.rb
deleted file mode 100644
index 885a499..0000000
--- a/spec/public/core_ext/kernel_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-$:.push File.join(File.dirname(__FILE__), "fixtures")
-
-describe Kernel, "#use_orm" do
-  
-  before do
-    Merb.orm = :none # reset orm
-  end
-  
-  it "should set Merb.orm" do
-    Kernel.use_orm(:activerecord)
-    Merb.orm.should == :activerecord
-  end
-end
-
-describe Kernel, "#use_template_engine" do
-  
-  before do
-    Merb.template_engine = :erb # reset template engine
-  end
-  
-  it "should set Merb.template_engine" do
-    Kernel.use_template_engine(:haml)
-    Merb.template_engine.should == :haml
-  end
-end
-
-describe Kernel, "#use_test" do
-  
-  before do
-    Merb.test_framework = :rspec # reset test framework
-  end
-  
-  it "should set Merb.test_framework" do
-    Kernel.use_test(:test_unit)
-    Merb.test_framework.should == :test_unit
-  end
-end
diff --git a/spec/public/core_ext/spec_helper.rb b/spec/public/core_ext/spec_helper.rb
deleted file mode 100644
index 2088625..0000000
--- a/spec/public/core_ext/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
\ No newline at end of file
diff --git a/spec/public/directory_structure/directory/app/controllers/application.rb b/spec/public/directory_structure/directory/app/controllers/application.rb
deleted file mode 100644
index 17ae294..0000000
--- a/spec/public/directory_structure/directory/app/controllers/application.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-class Application < Merb::Controller; end
\ No newline at end of file
diff --git a/spec/public/directory_structure/directory/app/controllers/base.rb b/spec/public/directory_structure/directory/app/controllers/base.rb
deleted file mode 100644
index a9c45b5..0000000
--- a/spec/public/directory_structure/directory/app/controllers/base.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-class Base < Application
-
-  def string
-    "String"
-  end
-
-  def template
-    render
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/directory_structure/directory/app/controllers/custom.rb b/spec/public/directory_structure/directory/app/controllers/custom.rb
deleted file mode 100644
index 156b374..0000000
--- a/spec/public/directory_structure/directory/app/controllers/custom.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-class Custom < Application
-
-  def string
-    "String"
-  end
-
-  def template
-    render
-  end
-  
-  private
-  
-  def _template_location(context, type = nil, controller = controller_name)  
-    "wonderful/#{context}"
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/directory_structure/directory/app/views/base/template.html.erb b/spec/public/directory_structure/directory/app/views/base/template.html.erb
deleted file mode 100644
index 4f48606..0000000
--- a/spec/public/directory_structure/directory/app/views/base/template.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Template <%= "ERB" %>
\ No newline at end of file
diff --git a/spec/public/directory_structure/directory/app/views/wonderful/template.erb b/spec/public/directory_structure/directory/app/views/wonderful/template.erb
deleted file mode 100644
index 30f6337..0000000
--- a/spec/public/directory_structure/directory/app/views/wonderful/template.erb
+++ /dev/null
@@ -1 +0,0 @@
-Wonderful <%= "Template" %>
\ No newline at end of file
diff --git a/spec/public/directory_structure/directory/config/router.rb b/spec/public/directory_structure/directory/config/router.rb
deleted file mode 100644
index 8c8db72..0000000
--- a/spec/public/directory_structure/directory/config/router.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-Merb::Router.prepare do
-  default_routes
-end
diff --git a/spec/public/directory_structure/directory_spec.rb b/spec/public/directory_structure/directory_spec.rb
deleted file mode 100644
index f340cd9..0000000
--- a/spec/public/directory_structure/directory_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
-startup_merb(:merb_root => File.join(File.dirname(__FILE__), "directory"))
-
-describe "The default Merb directory structure" do
-
-  it "should load in controllers" do
-    calling { Base }.should_not raise_error
-  end
-
-  it "should be able to complete the dispatch cycle" do
-    controller = dispatch_to(Base, :string)
-    controller.body.should == "String"
-  end
-
-  it "should be able to complete the dispatch cycle with templates" do
-    controller = dispatch_to(Base, :template)
-    controller.body.should == "Template ERB"
-  end
-
-end
-
-describe "Modifying the _template_path" do
-
-  it "should move the templates to a new location" do
-    controller = dispatch_to(Custom, :template)
-    controller.body.should == "Wonderful Template"
-  end
-
-end
-
-describe "Merb.root_path" do
-
-  it "should return a path relative to Merb.root" do
-    path = Merb.root_path('/app/controllers/base.rb')
-    path.to_s.should == File.join(Merb.root, '/app/controllers/base.rb')
-  end
-
-  it "should accept multiple arguments like File.join" do
-    path = Merb.root_path('app', 'controllers', 'base.rb')
-    path.to_s.should == File.join(Merb.root, 'app', 'controllers', 'base.rb')
-  end
-
-end
diff --git a/spec/public/logger/logger_spec.rb b/spec/public/logger/logger_spec.rb
deleted file mode 100644
index ef3b4c2..0000000
--- a/spec/public/logger/logger_spec.rb
+++ /dev/null
@@ -1,283 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb do
-
-  describe "Command Line Options" do
-
-    it "should allow -l / --log_level to set the log_level" do
-      pending("How do we spec these?")
-    end
-
-    it "should allow -L / --log_file  to set the log_file" do
-      pending("How do we spec these?")
-      # Run an instance of merb from the command line
-      # using system and test if the file was created?
-    end
-
-  end
-
-end
-
-describe Merb::Logger do
-
-  describe "#new" do
-    it "should call set_log with the arguments it was passed." do
-      logger = Merb::Logger.allocate # create an object sans initialization
-      logger.should_receive(:set_log).with('a partridge', 'a pear tree', 'a time bomb').and_return(true)
-      logger.send(:initialize, 'a partridge', 'a pear tree', 'a time bomb')
-    end
-  end
-
-  describe "#set_log" do
-
-    before(:each) do
-      # @logger = Merb::Logger.new(Merb.log_file)
-    end
-
-    it "should set the log level to :warn (4) when second parameter is :warn" do
-      Merb::Config[:log_level] = :warn
-      Merb.reset_logger!
-      Merb.logger.level.should == 4
-    end
-
-    it "should set the log level to :debug (0) when Merb.environment is development" do
-      Merb.environment = "development"
-      Merb::Config.delete(:log_level)
-      Merb.reset_logger!
-      Merb::BootLoader::Logger.run
-      Merb.logger.level.should == 0
-    end
-
-    it "should set the log level to :error (6) when Merb.environment is production" do
-      Merb.environment = "production"
-      Merb::Config.delete(:log_level)
-      Merb.reset_logger!
-      Merb::BootLoader::Logger.run
-      Merb.logger.level.should == 4
-    end
-
-    it "should default the delimiter to ' ~ '" do
-      Merb.logger.delimiter.should eql(" ~ ")
-    end
-
-    it 'allows level value be specified as a String' do
-      Merb::Config[:log_level] = :warn
-      Merb.reset_logger!
-      Merb.logger.level.should == 4
-    end
-  end
-
-
-  describe "#flush" do
-    it "should immediately return if the buffer is empty" do
-      Merb::Config[:log_stream] = StringIO.new
-      Merb.reset_logger!
-
-      Merb.logger.flush
-      Merb::Config[:log_stream].string.should == ""
-    end
-
-    it "should call the write_method with the stringified contents of the buffer if the buffer is non-empty" do
-      Merb::Config[:log_stream] = StringIO.new
-      Merb.reset_logger!
-
-      Merb.logger << "a message"
-      Merb.logger << "another message"
-      Merb.logger.flush
-
-      Merb::Config[:log_stream].string.should == " ~ a message\n ~ another message\n"
-    end
-
-  end
-
-  # There were close specs here, but the logger isn't an IO anymore, and
-  # shares a stream with other loggers, so it shouldn't be closing the
-  # stream.
-
-  def set_level(level)
-    Merb::Config[:log_level] = level
-    Merb.reset_logger!
-  end
-
-  # Spec examples below all use log_with_method
-  # matcher that is defined right here.
-  Spec::Matchers.create(:log_with_method) do
-    # logger is received, method is matcher argument
-    # So if you call Merb.logger.should log_with_method(:info),
-    # logger has value of Merb.logger and method has value of :info.
-    matches do |logger, method|
-      logger.send(method, "message")
-      logger.flush
-
-      logger.log.string == " ~ message\n"
-    end
-
-    message do |logger, method|
-      "Expected #{logger} NOT to log with method #{method}, but it did."
-    end
-
-    failure_message do |logger, method|
-      "Expected #{logger} to log with method #{method}, but it did not."
-    end
-  end
-
-  describe "#debug" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:debug)
-    end
-
-    it "does not add to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should_not log_with_method(:debug)
-    end
-
-    it "does not add to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should_not log_with_method(:debug)
-    end
-
-    it "does not add to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should_not log_with_method(:debug)
-    end
-
-    it "does not add to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should_not log_with_method(:debug)
-    end
-  end # #debug
-
-
-  describe "#info" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:info)
-    end
-
-    it "adds to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should log_with_method(:info)
-    end
-
-    it "does not add to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should_not log_with_method(:info)
-    end
-
-    it "does not add to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should_not log_with_method(:info)
-    end
-
-    it "does not add to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should_not log_with_method(:info)
-    end
-  end # #info
-
-
-  describe "#warn" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:warn)
-    end
-
-    it "adds to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should log_with_method(:warn)
-    end
-
-    it "adds to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should log_with_method(:warn)
-    end
-
-    it "does not add to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should_not log_with_method(:warn)
-    end
-
-    it "does not add to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should_not log_with_method(:warn)
-    end
-  end # #warn
-
-
-  describe "#error" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:error)
-    end
-
-    it "adds to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should log_with_method(:error)
-    end
-
-    it "adds to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should log_with_method(:error)
-    end
-
-    it "adds to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should log_with_method(:error)
-    end
-
-    it "does not add to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should_not log_with_method(:error)
-    end
-  end # #error
-
-
-  describe "#fatal" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:fatal)
-    end
-
-    it "adds to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should log_with_method(:fatal)
-    end
-
-    it "adds to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should log_with_method(:fatal)
-    end
-
-    it "adds to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should log_with_method(:fatal)
-    end
-
-    it "adds to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should log_with_method(:fatal)
-    end
-  end # #fatal
-end # Merb::Logger
diff --git a/spec/public/logger/spec_helper.rb b/spec/public/logger/spec_helper.rb
deleted file mode 100644
index 2088625..0000000
--- a/spec/public/logger/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
\ No newline at end of file
diff --git a/spec/public/rack/conditinal_get_middleware_spec.rb b/spec/public/rack/conditinal_get_middleware_spec.rb
deleted file mode 100644
index 9be3361..0000000
--- a/spec/public/rack/conditinal_get_middleware_spec.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-require "digest/sha1"
-
-class ConditionalGetTestController < Merb::Controller
-  def with_etag
-    response = "original message-body"
-    headers['ETag'] = Digest::SHA1.hexdigest(response)
-
-    response
-  end
-
-  def with_last_modified
-    headers[Merb::Const::LAST_MODIFIED] = :documents_last_modified_time
-    "original message-body"
-  end
-
-  def without
-    # sanity check
-    headers.delete('ETag')
-    headers.delete(Merb::Const::LAST_MODIFIED)
-    
-    "original message-body"
-  end
-end
-
-
-Merb::Router.prepare do
-  match("/with_etag").to(
-    :controller => "conditional_get_test_controller", :action => "with_etag"
-  )
-  match("/with_last_modified").to(
-    :controller => "conditional_get_test_controller", :action => "with_last_modified"
-  )
-  match("/without").to(
-    :controller => "conditional_get_test_controller", :action => "without"
-  )
-end
-
-describe Merb::Rack::ConditionalGet do
-
-  describe(
-    "when the client already has an up-to-date document", 
-    :shared => true
-  ) do
-    it 'sets status to "304"' do
-      @status.should == 304
-    end
-
-    it 'returns no message-body' do
-      @body.should == ""
-    end
-  end
-
-  describe(
-    "when the client does NOT have an up-to-date document",
-    :shared => true
-  ) do
-    it 'does not modify status' do
-      @status.should == 200
-    end
-
-    it 'does not modify message-body' do
-      @body.should == "original message-body"
-    end
-  end
-  
-  before(:each) do
-    @app        = Merb::Rack::Application.new
-    @middleware = Merb::Rack::ConditionalGet.new(@app)
-  end
-  
-  describe "when response has no ETag header and no Last-Modified header" do
-    before(:each) do
-      env = Rack::MockRequest.env_for('/without')
-      @status, @headers, @body = @middleware.call(env)        
-    end
-    
-    it_should_behave_like "when the client does NOT have an up-to-date document"
-  end
-
-  describe "when response has ETag header" do
-    describe "and it == to HTTP_IF_NONE_MATCH of the request" do
-      before(:each) do
-        env = Rack::MockRequest.env_for('/with_etag')
-        env['HTTP_IF_NONE_MATCH'] =
-          Digest::SHA1.hexdigest("original message-body")
-        @status, @headers, @body = @middleware.call(env)        
-      end
-
-      it_should_behave_like "when the client already has an up-to-date document"
-    end
-
-    describe "and it IS NOT == to HTTP_IF_NONE_MATCH of the request" do
-      before(:each) do
-        env = Rack::MockRequest.env_for('/with_etag')
-        env['HTTP_IF_NONE_MATCH'] =
-          Digest::SHA1.hexdigest("a different message-body")
-        @status, @headers, @body = @middleware.call(env)
-      end
-      
-      it_should_behave_like "when the client does NOT have an up-to-date document"
-    end
-  end
-
-  describe "when response has Last-Modified header" do
-    describe "and it == to HTTP_IF_NOT_MODIFIED_SINCE of the request" do
-      before(:each) do
-        env = Rack::MockRequest.env_for('/with_last_modified')
-        env[Merb::Const::HTTP_IF_MODIFIED_SINCE] = :documents_last_modified_time
-        @status, @headers, @body = @middleware.call(env)
-      end
-      
-      it_should_behave_like "when the client already has an up-to-date document"
-    end
-
-    describe "and it IS NOT == to HTTP_IF_NOT_MODIFIED_SINCE of the request" do
-      before(:each) do
-        env = Rack::MockRequest.env_for('/with_last_modified')
-        env[Merb::Const::HTTP_IF_MODIFIED_SINCE] = :some_other_time
-        @status, @headers, @body = @middleware.call(env)
-      end
-
-      it_should_behave_like "when the client does NOT have an up-to-date document"
-    end
-  end
-end
diff --git a/spec/public/rack/rack_middleware_spec.rb b/spec/public/rack/rack_middleware_spec.rb
deleted file mode 100644
index 7a89223..0000000
--- a/spec/public/rack/rack_middleware_spec.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-require File.join(File.dirname(__FILE__), "shared_example_groups")
-
-class RackyController < Merb::Controller
-  def index
-    body = "Everyone loves Rack"
-    headers['Content-Length'] = body.size.to_s
-    
-    body
-  end
-end
-
-Merb::Router.prepare do
-  match("/heavy/lifting").to(:controller => "racky_controller")
-end
-
-
-describe Merb::Rack::Application do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @env = Rack::MockRequest.env_for('/heavy/lifting')
-    
-    @result = @app.call(@env)
-    @body   = "Everyone loves Rack"
-  end
-
-  it_should_behave_like "rack application"
-
-  it 'does not set Date header' do
-    status, headers, body = @app.call(@env)
-
-    headers.keys.should_not include(Merb::Const::DATE)
-  end
-  
-  describe "#deferred?" do
-    it "returns true when request path matches deferred actions regexp" do
-      Merb::Config[:deferred_actions] = ['/heavy/lifting']
-
-      @app.deferred?(@env).should be(true)
-    end
-
-    it "returns false when request path DOES NOT match deferred actions regexp" do
-      @app.deferred?(Rack::MockRequest.env_for('/not/deferred')).should be(false)
-    end
-  end
-end
-
-
-describe Merb::Rack::Middleware do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @middleware = Merb::Rack::Middleware.new(@app)
-    @env        = Rack::MockRequest.env_for('/heavy/lifting')
-    
-    @result = @middleware.call(@env)
-    @body   = "Everyone loves Rack"
-  end
-
-  it_should_behave_like "rack application"
-
-  it_should_behave_like "transparent middleware"
-end
-
-
-
-describe Merb::Rack::Tracer do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @middleware = Merb::Rack::Tracer.new(@app)
-    @env        = Rack::MockRequest.env_for('/heavy/lifting')
-    
-    @result = @middleware.call(@env)
-    @body   = "Everyone loves Rack"
-  end
-
-  it_should_behave_like "rack application"
-
-  it_should_behave_like "transparent middleware"  
-end
-
-
-describe Merb::Rack::ContentLength do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @middleware = Merb::Rack::ContentLength.new(@app)
-    @env        = Rack::MockRequest.env_for('/heavy/lifting')
-    
-    @result = @middleware.call(@env)
-    @body   = "Everyone loves Rack"
-  end
-
-  it_should_behave_like "rack application"
-
-  it_should_behave_like "transparent middleware"
-
-  it 'sets Content-Length header to response body size' do
-    @result[1]['Content-Length'].should == @body.size.to_s
-  end
-end
-
-describe Merb::Rack::Head do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @middleware = Merb::Rack::Head.new(@app)
-    @env        = Rack::MockRequest.env_for('/heavy/lifting', :method => 'HEAD')
-    
-    @result = @middleware.call(@env)
-    @body   = [] # Head should return empty body
-  end
-
-  it_should_behave_like "rack application"
-
-  it_should_behave_like "transparent middleware"
-end
diff --git a/spec/public/rack/shared_example_groups.rb b/spec/public/rack/shared_example_groups.rb
deleted file mode 100644
index e42445a..0000000
--- a/spec/public/rack/shared_example_groups.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-describe "rack application", :shared => true do
-  it 'is callable' do
-    @app.should respond_to(:call)
-  end
-
-  it 'returns a 3-tuple' do
-    @result.size.should == 3
-  end
-
-  it 'returns status as first tuple element' do
-    @result.first.should == 200
-  end
-
-  it 'returns hash of headers as the second tuple element' do
-    @result[1].should be_kind_of(Hash)
-  end
-
-  it 'returns response body as third tuple element' do
-    @result.last.should == @body
-  end
-end
-
-describe "transparent middleware", :shared => true do
-  it "delegates request handling to wrapped Rack application" do
-    @result.last.should == @body
-  end
-
-  describe "#deferred?" do
-    it "is delegated to wrapped Rack application" do
-      @middleware.deferred?(@env).should be(true)
-      @middleware.deferred?(Rack::MockRequest.env_for('/not-deferred/')).should be(false)
-    end
-  end
-end
-
diff --git a/spec/public/request/multipart_spec.rb b/spec/public/request/multipart_spec.rb
deleted file mode 100644
index 0801705..0000000
--- a/spec/public/request/multipart_spec.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-module Merb::MultipartRequestSpecHelper
-  def fake_file(read = nil, filename = 'sample.txt', path = 'sample.txt')
-    read ||= 'This is a text file with some small content in it.'
-    Struct.new(:read, :filename, :path).new(read, filename, path)
-  end
-end
-
-describe Merb::Request do
-  include Merb::MultipartRequestSpecHelper
-
-  it "should handle file upload for multipart/form-data posts" do
-    file = fake_file
-    m = Merb::Test::MultipartRequestHelper::Post.new(:file => file)
-    body, head = m.to_multipart
-    request = fake_request({:request_method => "POST",
-                            :content_type => head,
-                            :content_length => body.length}, :req => body)
-    request.params[:file].should_not be_nil
-    request.params[:file][:tempfile].class.should == Tempfile
-    request.params[:file][:content_type].should == 'text/plain'
-    request.params[:file][:size].should == file.read.length
-  end
-
-  it "should correctly format multipart posts which contain multiple parameters" do
-    params = {:model => {:description1 => 'foo', :description2 => 'bar', :file => fake_file}}
-    m = Merb::Test::MultipartRequestHelper::Post.new params
-    body, head = m.to_multipart
-    body.split('----------0xKhTmLbOuNdArY').size.should eql(5)
-  end
-
-  it "should correctly format multipart posts which contain an array as parameter" do
-    file = fake_file
-    file2 = fake_file("This is another text file", "sample2.txt", "sample2.txt")
-    params = {:model => {:description1 => 'foo',
-                         :description2 => 'bar',
-                         :child_attributes => [
-                           { :file => file },
-                           { :file => file2 }
-                         ]
-                        }}
-
-    m = Merb::Test::MultipartRequestHelper::Post.new params
-    body, head = m.to_multipart
-    body.should match(/model\[child_attributes\]\[\]\[file\]/)
-    body.split('----------0xKhTmLbOuNdArY').size.should eql(6)
-    request = fake_request({:request_method => "POST", :content_type => head, :content_length => body.length}, :req => body)
-    request.params[:model][:child_attributes].size.should == 2
-  end
-
-  it "should accept env['rack.input'] as IO object (instead of StringIO)" do
-    file = fake_file
-    m = Merb::Test::MultipartRequestHelper::Post.new :file => file
-    body, head = m.to_multipart
-    
-    t = Tempfile.new("io")
-    t.write(body)
-    t.close
-    
-    fd = IO.sysopen(t.path)
-    io = IO.for_fd(fd,"r")
-    request = Merb::Test::RequestHelper::FakeRequest.new({:request_method => "POST", :content_type => 'multipart/form-data, boundary=----------0xKhTmLbOuNdArY', :content_length => body.length},io)
-
-    running {request.params}.should_not raise_error        
-    request.params[:file].should_not be_nil
-    request.params[:file][:tempfile].class.should == Tempfile
-    request.params[:file][:content_type].should == 'text/plain'
-    request.params[:file][:size].should == file.read.length
-  end    
-    
-  it "should handle GET with a content_type but an empty body (happens in some browsers such as safari after redirect)" do
-      request = fake_request({:request_method => "GET", :content_type => 'multipart/form-data, boundary=----------0xKhTmLbOuNdArY', :content_length => 0}, :req => '')      
-      running {request.params}.should_not raise_error        
-  end
-
-  it "should handle multiple occurences of one parameter" do
-    m = Merb::Test::MultipartRequestHelper::Post.new :file => fake_file
-    m.push_params({:checkbox => 0})
-    m.push_params({:checkbox => 1})
-    body, head = m.to_multipart
-    request = fake_request({:request_method => "POST",
-                            :content_type => head,
-                            :content_length => body.length}, :req => body)
-    request.params[:file].should_not be_nil
-    request.params[:checkbox].should eql '1'
-  end
-end
diff --git a/spec/public/request/request_spec.rb b/spec/public/request/request_spec.rb
deleted file mode 100644
index 89da19f..0000000
--- a/spec/public/request/request_spec.rb
+++ /dev/null
@@ -1,265 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-describe Merb::Request, "#method" do
-  
-  [:get, :head, :put, :delete].each do |method|
-    it "should use the HTTP if it was a #{method.to_s.upcase}" do
-      fake_request(:request_method => method.to_s).method.should == method
-    end
-
-    it "should use the _method body params for #{method.to_s.upcase} when it came in as a POST" do
-      request = fake_request({:request_method => "POST"}, :post_body => "_method=#{method}")
-      request.method.should == method
-    end
-    
-    it "should use the _method query params for #{method.to_s.upcase} when it came in as a POST" do
-      Merb::Request.parse_multipart_params = false
-      request = fake_request(:request_method => "POST", :query_string => "_method=#{method}")
-      request.method.should == method      
-    end
-    
-    [:get, :head, :put, :delete].each do |meth|
-      it "should return #{method == meth} when calling #{meth}? and the method is :#{method}" do
-        request = fake_request({:request_method => method.to_s})
-        request.send("#{meth}?").should == (method == meth)
-      end
-    end
-  end
-
-  it "should not try to parse the request body as JSON on GET" do
-    request = fake_request({:request_method => "GET", :content_type => "application/json"}, :req => "")
-    lambda { request.params }.should_not raise_error(JSON::ParserError)
-    request.params.should == {}
-  end
-  
-  it "should return an empty hash when XML is not parsable" do
-    request = fake_request({:content_type => "application/xml"}, :req => '')
-    lambda { request.params }.should_not raise_error
-    request.params.should == {}
-  end
-  
-  it "should default to POST if the _method is not defined" do
-    request = fake_request({:request_method => "POST"}, :post_body => "_method=zed")
-    request.method.should == :post
-  end
-  
-  it "should raise an error if an unknown method is used" do
-    request = fake_request({:request_method => "foo"})
-    running {request.method}.should raise_error
-  end
-    
-end
-
-describe Merb::Request, " query and body params" do
-  
-  before(:all) { Merb::BootLoader::Dependencies.enable_json_gem }
-  
-  TEST_PARAMS = {
-    "foo=bar&baz=bat"                       => {"foo" => "bar", "baz" => "bat"},
-    "foo=bar&foo=baz"                       => {"foo" => "baz"},
-    "foo[]=bar&foo[]=baz"                   => {"foo" => ["bar", "baz"]},
-    "foo[][bar]=1&foo[][bar]=2"             => {"foo" => [{"bar" => "1"},{"bar" => "2"}]},
-    "foo[bar][][baz]=1&foo[bar][][baz]=2"   => {"foo" => {"bar" => [{"baz" => "1"},{"baz" => "2"}]}},
-    "foo[1]=bar&foo[2]=baz"                 => {"foo" => {"1" => "bar", "2" => "baz"}},
-    
-    "foo[bar][baz]=1&foo[bar][zot]=2&foo[bar][zip]=3&foo[bar][buz]=4" => {"foo" => {"bar" => {"baz" => "1", "zot" => "2", "zip" => "3", "buz" => "4"}}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][zip]=3&foo[bar][][buz]=4" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "zip" => "3", "buz" => "4"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][baz]=3&foo[bar][][zot]=4" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2"},{"baz" => "3", "zot" => "4"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][fuz]=A&foo[bar][][baz]=3&foo[bar][][zot]=4&foo[bar][][fuz]=B" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4", "fuz" => "B"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][fuz]=A&foo[bar][][baz]=3&foo[bar][][zot]=4&foo[bar][][foz]=C" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4", "foz" => "C"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][fuz]=A&foo[bar][][baz]=3&foo[bar][][zot]=4" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][fuz]=A&foo[bar][][baz]=3&foo[bar][][zot]=4&foo[bar][][fuz]=B&foo[bar][][foz]=C" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4", "fuz" => "B", "foz" => "C"}]}},
-    "foo[][bar][][baz]=1&foo[][bar][][zot]=2&foo[][bar][][fuz]=A&foo[][bar][][baz]=3&foo[][bar][][zot]=4&foo[][bar][][fuz]=B&foo[][bar][][foz]=C" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4", "fuz" => "B", "foz" => "C"}]}}
-  }
-  
-  TEST_PARAMS.each do |query, parse|
-
-     it "should convert #{query.inspect} to #{parse.inspect} in the query string" do
-       request = fake_request({:query_string => query})
-       request.params.should == parse
-     end
-
-     it "should convert #{query.inspect} to #{parse.inspect} in the post body" do
-       request = fake_request({}, :post_body => query)
-       request.params.should == parse
-     end
-   
-   end
-   
-  it "should support JSON params" do
-    request = fake_request({:content_type => "application/json"}, :req => %{{"foo": "bar"}})
-    request.params.should == {"foo" => "bar"}
-  end
-  
-  it "should populated the inflated_object parameter if JSON params do not inflate to a hash" do
-    request = fake_request({:content_type => "application/json"}, :req => %{["foo", "bar"]})
-    request.params.should have_key(:inflated_object)
-    request.params[:inflated_object].should eql(["foo", "bar"])
-  end
-  
-  it "should support XML params" do
-    request = fake_request({:content_type => "application/xml"}, :req => %{<foo bar="baz"><baz/></foo>})
-    request.params.should == {"foo" => {"baz" => nil, "bar" => "baz"}}
-  end  
-  
-end
-
-describe Merb::Request, "#remote_ip" do
-  it "should be able to get the remote IP of a request with X_FORWARDED_FOR" do
-    request = fake_request({:http_x_forwarded_for => "www.example.com"})
-    request.remote_ip.should == "www.example.com"
-  end
-  
-  it "should be able to get the remote IP when some of the X_FORWARDED_FOR are local" do
-    request = fake_request({:http_x_forwarded_for => "192.168.2.1,127.0.0.1,www.example.com"})
-    request.remote_ip.should == "www.example.com"
-    
-    %w(212.183.134.130 82.132.136.215).each do |addr|
-      request = fake_request({:http_x_forwarded_for => addr})
-      request.remote_ip.should == addr
-    end
-  end
-  
-  it "should be able to get the remote IP when it's in REMOTE_ADDR" do
-    request = fake_request({:remote_addr => "www.example.com"})
-    request.remote_ip.should == "www.example.com"    
-  end
-  
-  it "filters private IPs from X_FORWARDED_FOR" do
-    request = fake_request({:http_x_forwarded_for => "10.0.0.0,10.255.255.255,169.254.1.2,172.16.0.0,172.24.0.0,172.31.255.255,192.168.0.0,192.168.255.255,www.example.com"})
-    request.remote_ip.should == 'www.example.com'
-  end
-end
-
-describe Merb::Request, "#cookies" do
-  
-  it "should take cookies in the HTTP_COOKIE environment variable" do
-    request = fake_request({:http_cookie => "merb=canhascookie; version=1"})
-    request.cookies.should == {"merb" => "canhascookie", "version" => "1"}
-  end
-  
-  it "should handle badly formatted cookies" do
-    request = fake_request({:http_cookie => "merb=; ; also=hats"})
-    request.cookies.should == {"merb" => "", "also" => "hats"}
-  end
-  
-end
-
-describe Merb::Request, " misc" do
-  
-  it "should contain the request start" do
-    request = fake_request
-    request.start.should be_instance_of(Time)
-  end
-  
-  it "should know if a request is an XHR" do
-    request = fake_request({:http_x_requested_with => "XMLHttpRequest"})
-    request.should be_xhr
-  end
-  
-  it "should know if the protocol is http or https (when HTTPS is on)" do
-    request = fake_request({:https => "on"})
-    request.protocol.should == "https"
-    request.should be_ssl
-  end
-
-  it "should know if the protocol is http or https (when HTTP_X_FORWARDED_PROTO is https)" do
-    request = fake_request({:http_x_forwarded_proto => "https"})
-    request.protocol.should == "https"
-    request.should be_ssl
-  end
-
-  it "should know if the protocol is http or https (when it's regular HTTP)" do
-    request = fake_request({})
-    request.protocol.should == "http"
-  end
-  
-  it "should get the content-length" do
-    request = fake_request({:content_length => "300"})
-    request.content_length.should == 300
-  end
-  
-  it "should be able to get the path from the URI (stripping trailing /)" do
-    request = fake_request({:request_uri => "foo/bar/baz/?bat"})
-    request.path.should == "foo/bar/baz"
-  end
-  
-  it "should be able to get the path from the URI (joining multiple //)" do
-    request = fake_request({:request_uri => "foo/bar//baz/?bat"})
-    request.path.should == "foo/bar/baz"
-  end
-  
-  it "should get the remote port" do
-    request = fake_request({:server_port => "80"})
-    request.port.should == 80
-  end
-  
-  it "should get the parts of the remote subdomain" do
-    request = fake_request({:http_host => "zoo.boom.foo.com"})
-    request.subdomains.should == ["zoo", "boom"]
-  end
-  
-  it "should get the parts of the remote subdomain when there's an irregular TLD number" do
-    request = fake_request({:http_host => "foo.bar.co.uk"})
-    request.subdomains(2).should == ["foo"]
-  end
-  
-  it "should get the full domain (not including subdomains and not including the port)" do
-    request = fake_request({:http_host => "www.foo.com:80"})
-    request.domain.should == "foo.com"
-  end
-
-  it "should get the full domain from an irregular TLD" do
-    request = fake_request({:http_host => "www.foo.co.uk:80"})
-    request.domain(2).should == "foo.co.uk"
-  end
-
-  it "should get the host (with X_FORWARDED_HOST)" do
-    request = fake_request({:http_x_forwarded_host => "www.example.com"})
-    request.host.should == "www.example.com"
-  end
-
-  it "should get the host (without X_FORWARDED_HOST)" do
-    request = fake_request({:http_host => "www.example.com"})
-    request.host.should == "www.example.com"
-  end
-    
-  {:http_referer            => ["referer", "http://referer.com"],
-   :request_uri             => ["uri", "http://uri.com/uri"],
-   :http_user_agent         => ["user_agent", "mozilla"],
-   :server_name             => ["server_name", "apache"],
-   :http_accept_encoding    => ["accept_encoding", "application/json"],
-   :script_name             => ["script_name", "foo"],
-   :http_cache_control      => ["cache_control", "no-cache"],
-   :http_accept_language    => ["accept_language", "en"],
-   :server_software         => ["server_software", "apache"],
-   :http_keep_alive         => ["keep_alive", "300"],
-   :http_accept_charset     => ["accept_charset", "UTF-8"],
-   :http_version            => ["version", "1.1"],
-   :gateway_interface       => ["gateway", "CGI/1.2"],
-   :http_connection         => ["connection", "keep-alive"],
-   :path_info               => ["path_info", "foo/bar/baz"],
-  }.each do |env, vars|
-    
-    it "should be able to get the #{env.to_s.upcase}" do
-      request = fake_request({env => vars[1]})
-      request.send(vars[0]).should == vars[1]
-    end
-    
-  end
-  
-end
-
-describe Merb::Request, "#if_none_match" do
-  it 'returns value of If-None-Match request header' do
-    fake_request(Merb::Const::HTTP_IF_NONE_MATCH => "dc1562a133").if_none_match.should == "dc1562a133"
-  end
-end
-
-describe Merb::Request, "#if_modified_since" do
-  it 'returns value of If-Modified-Since request header' do
-    t = '05 Sep 2008 22:00:27 GMT'
-    fake_request(Merb::Const::HTTP_IF_MODIFIED_SINCE => t).if_modified_since.should == Time.rfc2822(t)
-  end
-end
diff --git a/spec/public/router/behavior_spec.rb b/spec/public/router/behavior_spec.rb
deleted file mode 100644
index 904d19a..0000000
--- a/spec/public/router/behavior_spec.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Router::Behavior do
-  
-  describe "#capture" do
-    
-    it "should capture the named routes defined in the block" do
-      Merb::Router.prepare do
-        match("/one").register
-        match("/two").name(:two)
-        
-        # --- self. is to get around a helper method
-        captured = self.capture do
-          match("/three").register
-          match("/four").name(:four)
-        end
-        
-        captured.should == Merb::Router.named_routes.reject { |key, _| key == :two }
-      end
-    end
-    
-    it "should retain the same names if there are no name_prefixes set" do
-      Merb::Router.prepare do
-        captured = self.capture do
-          match('/one').name(:one)
-          match('/two/three').name(:two_three)
-        end
-        
-        Merb::Router.named_routes[:one].should       == captured[:one]
-        Merb::Router.named_routes[:two_three].should == captured[:two_three]
-      end
-    end
-    
-    it "should still recognize the routes generated before, inside, and after a capture block" do
-      Merb::Router.prepare do
-        match("/one").to(:controller => "one")
-        self.capture do
-          match("/two").to(:controller => "two")
-        end
-        match("/three").to(:controller => "three")
-      end
-      
-      route_for("/one").should   have_route(:controller => "one")
-      route_for("/two").should   have_route(:controller => "two")
-      route_for("/three").should have_route(:controller => 'three')
-    end
-    
-    it "should not return anything if nothing was defined inside of the block" do
-      captured = {}
-      
-      Merb::Router.prepare do
-        captured = self.capture { }
-      end
-      
-      captured.should be_empty
-    end
-    
-    it "should ignore the namespaces that capture is wrapped around" do
-      Merb::Router.prepare do
-        namespace :admin do
-          captured = self.capture do
-            match("/one").to(:controller => "hi").name(:one)
-            match("/two/three").to(:controller => "hi").name(:two_three)
-          end
-          
-          captured[:one].should       == Merb::Router.named_routes[:admin_one]
-          captured[:two_three].should == Merb::Router.named_routes[:admin_two_three]
-        end
-      end
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/conditions_spec.rb b/spec/public/router/generation/conditions_spec.rb
deleted file mode 100644
index 73458ce..0000000
--- a/spec/public/router/generation/conditions_spec.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a route with one condition" do
-    
-    it "should generate when the string condition is met" do
-      Merb::Router.prepare do
-        match("/:account", :account => "walruses").name(:condition)
-      end
-
-      url(:condition, :account => "walruses").should == "/walruses"
-    end
-    
-    it "should generate when the regexp condition that is met" do
-      Merb::Router.prepare do
-        match("/:account", :account => /[a-z]+/).name(:condition)
-      end
-
-      url(:condition, :account => "walruses").should == "/walruses"
-    end
-
-    it "should not generate if the String condition is not met" do
-      Merb::Router.prepare do
-        match("/:account", :account => "walruses").name(:condition)
-      end
-
-      lambda { url(:condition, :account => "pecans") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should not generate if the Regexp condition is not met" do
-      Merb::Router.prepare do
-        match("/:account", :account => /[a-z]+/).name(:condition)
-      end
-
-      lambda { url(:condition, :account => "29") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should work with numbers" do
-      Merb::Router.prepare do
-        match("/hello/:id", :id => /^\d+$/).name(:number)
-      end
-      
-      url(:number, :id => 10).should == "/hello/10"
-      lambda { url(:number, :id => true) }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should respect Regexp anchors" do
-      Merb::Router.prepare do
-        match("/:account") do
-          match(:account => /^[a-z]+$/).name(:both )
-          match(:account => /^[a-z]+/ ).name(:start)
-          match(:account => /[a-z]+$/ ).name(:end  )
-          match(:account => /[a-z]+/  ).name(:none )
-        end
-      end
-
-      # Success
-      url(:both,  :account => "abc").should == "/abc"
-      url(:start, :account => "abc").should == "/abc"
-      url(:start, :account => "ab1").should == "/ab1"
-      url(:end,   :account => "abc").should == "/abc"
-      url(:end,   :account => "1ab").should == "/1ab"
-      url(:none,  :account => "abc").should == "/abc"
-      url(:none,  :account => "1ab").should == "/1ab"
-      url(:none,  :account => "ab1").should == "/ab1"
-
-      # Failure
-      lambda { url(:both,  :account => "1ab") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:both,  :account => "ab1") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:both,  :account => "123") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:start, :account => "1ab") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:start, :account => "123") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:end,   :account => "ab1") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:end,   :account => "123") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:none,  :account => "123") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should work with Regexp conditions that contain capturing parentheses" do
-      Merb::Router.prepare do
-        match("/:domain", :domain => /[a-z]+\.(com|net)/).name(:condition)
-      end
-
-      url(:condition, :domain => "foobar.com").should == "/foobar.com"
-      lambda { url(:condition, :domain => "foobar.org") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should work with Regexp conditions that contain non-capturing parentheses" do
-      Merb::Router.prepare do
-        match("/:domain", :domain => /[a-z]+\.(com|net)/).name(:condition)
-      end
-
-      url(:condition, :domain => "foobar.com").should == "/foobar.com"
-      lambda { url(:condition, :domain => "foobar.org") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should not take into consideration conditions on request methods" do
-      Merb::Router.prepare do
-        match("/one/two", :method => :post).name(:simple)
-      end
-      
-      url(:simple).should == "/one/two"
-    end
-  end
-  
-  describe "a route with multiple conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:one/:two", :one => "hello", :two => %r[^(world|moon)$]).name(:condition)
-      end
-    end
-
-    it "should generate if all the conditions are met" do
-      url(:condition, :one => "hello", :two => "moon").should == "/hello/moon"
-    end
-
-    it "should not generate if any of the conditions fail" do
-      lambda { url(:condition, :one => "hello") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:condition, :two => "world") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should append any extra elements to the query string" do
-      url(:condition, :one => "hello", :two => "world", :three => "moon").should == "/hello/world?three=moon"
-    end
-    
-  end
-  
-  describe "a route with nested condition blocks" do
-    it "should use both condition blocks to generate" do
-      Merb::Router.prepare do
-        match("/prefix") do
-          to(:controller => "prefix", :action => "show").name(:prefix)
-          match("/second").to(:controller => "second").name(:second)
-        end
-      end
-      
-      url(:prefix).should == "/prefix"
-      url(:second).should == "/prefix/second"
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/default_route_spec.rb b/spec/public/router/generation/default_route_spec.rb
deleted file mode 100644
index eda3dc4..0000000
--- a/spec/public/router/generation/default_route_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "the default route" do
-    
-    it "should be able to generate from the various combinations" do
-      Merb::Router.prepare do
-        default_routes
-      end
-
-      url(:controller => "hello").should                              == "/hello"
-      url(:controller => "hello", :action => "index").should          == "/hello/index"
-      url(:controller => "hello", :action => "world").should          == "/hello/world"
-      url(:controller => "hello", :format => :html).should            == "/hello.html"
-      url(:controller => "zomg", :action => "hi2u", :id => 12).should == "/zomg/hi2u/12"
-    end
-    
-    # it "should be able to generate spiced up default routes" do
-    #   Merb::Router.prepare do |r|
-    #     r.match("/:account/:controller(/:action(/:id))(.:format)").to.name(:default)
-    #   end
-    #   
-    #   url(:account => "ohyeah", :controller => "hello").should == "/ohyeah/hello"
-    #   url(:account => "ohyeah", :controller => "hello", :action => "world").should == "/ohyeah/hello/world"
-    #   url(:account => "ohyeah", :controller => "hello", :format => :html).should == "/ohyeah/hello.html"
-    #   
-    #   url(:account => "ohyeah", :controller => "zomg", :action => "hi2u", :id => 12).should == "/ohyeah/zomg/hi2u/12"
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/defaults_spec.rb b/spec/public/router/generation/defaults_spec.rb
deleted file mode 100644
index 6c572de..0000000
--- a/spec/public/router/generation/defaults_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a route default values for variable segments" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/(:foobar)").defaults(:foobar => "foo").name(:with_default)
-      end
-    end
-    
-    it "should generate the route normally" do
-      url(:with_default).should                     == "/"
-      url(:with_default, :foobar => "hello").should == "/hello"
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/identify_spec.rb b/spec/public/router/generation/identify_spec.rb
deleted file mode 100644
index 36af103..0000000
--- a/spec/public/router/generation/identify_spec.rb
+++ /dev/null
@@ -1,163 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-# Namespacing everything so that all the spec classes aren't shared
-# across other specs
-module ID
-  class ORM ; end
-
-  module Resource
-    def identifier
-      "included"
-    end
-  end
-
-  class Article < ORM 
-    def id   ; 10        ; end
-    def to_s ; "article" ; end
-  end
-
-  class Account < ORM
-    def to_s ; "account"  ; end
-    def url  ; "awesome" ; end
-  end
-
-  class User < ORM
-    def id         ; 10     ; end
-    def to_s       ; "user" ; end
-    def name       ; "carl" ; end
-    def first_name ; "john" ; end
-    def last_name  ; "doe"  ; end
-  end
-
-  class Something
-    def to_s ; "hello" ; end
-  end
-
-  class WithInclusions
-    include Resource
-  end
-  
-  describe "When generating URLs," do
-
-    before(:each) do
-      Merb::Router.prepare do
-        identify ::ID::Account => :url, ::ID::User => :name, ::ID::ORM => :id, ::ID::Resource => :identifier do
-          match("/:account") do
-            resources :users
-          end
-        end
-
-        match("/resources/:id").name(:resource)
-      end
-    end
-
-    describe "a route with custom identifiers" do
-
-      it "should use #to_s if no other identifier is set" do
-        url(:resource, :id => Article.new).should   == "/resources/article"
-        url(:resource, :id => Account.new).should   == "/resources/account"
-        url(:resource, :id => User.new).should      == "/resources/user"
-        url(:resource, :id => Something.new).should == "/resources/hello"
-      end
-      
-      it "should use #to_s if no other identifier is set when params are anonymous" do
-        url(:resource, Article.new).should   == "/resources/article"
-        url(:resource, Account.new).should   == "/resources/account"
-        url(:resource, User.new).should      == "/resources/user"
-        url(:resource, Something.new).should == "/resources/hello"
-      end
-
-      it "should use the identifier for the object" do
-        url(:user, :account => Account.new, :id => User.new).should == "/awesome/users/carl"
-      end
-      
-      it "should use the identifier for the object when the params are anonymous" do
-        url(:user, Account.new, User.new).should == "/awesome/users/carl"
-      end
-
-      it "should be able to use identifiers for parent classes" do
-        url(:user, :account => Article.new, :id => 1).should == "/10/users/1"
-      end
-      
-      it "should be able to use identifiers for parent classes when the params are anonymous" do
-        url(:user, Article.new, 1).should == "/10/users/1"
-      end
-
-      it "should be able to use identifiers for included modules" do
-        url(:user, :account => WithInclusions.new, :id => '1').should == "/included/users/1"
-      end
-      
-      it "should be able to use identifiers for included modules when the params are anonymous" do
-        url(:user, WithInclusions.new, '1').should == "/included/users/1"
-      end
-      
-      it "should be able to specify an array of identifiers" do
-        Merb::Router.prepare do
-          identify(::ID::User => [:last_name, :first_name]) do
-            match("/users/:last_name/:first_name").name(:users)
-          end
-        end
-        
-        url(:users, :last_name => User.new, :first_name => User.new).should == "/users/doe/john"
-      end
-      
-      it "should be able to specify an array of identifiers when the params are anonymous" do
-        Merb::Router.prepare do
-          identify(::ID::User => [:last_name, :first_name]) do
-            match("/users/:last_name/:first_name").name(:users)
-          end
-        end
-        
-        url(:users, ::ID::User.new).should == "/users/doe/john"
-      end
-      
-      it "should be able to treat :id correctly with Array identifiers" do
-        Merb::Router.prepare do
-          identify(::ID::User => [:name, :id]) do
-            resources :users, :keys => [:name, :id] do
-              resources :comments
-            end
-          end
-        end
-        
-        url(:user_comments, :name => ::ID::User.new, :user_id => ::ID::User.new).should == "/users/carl/10/comments"
-      end
-
-      it "should not require a block" do
-        Merb::Router.prepare do
-          identify(::ID::Account => :url).match("/:account").name(:account)
-        end
-
-        url(:account, :account => ::ID::Account.new).should == "/awesome"
-      end
-
-      it "should combine identifiers when nesting" do
-        Merb::Router.prepare do
-          identify ::ID::Account => :url do
-            identify ::ID::User => :name do
-              match("/:account").resources :users
-            end
-          end
-        end
-
-        url(:user, :account => ::ID::Account.new, :id => ::ID::User.new).should == "/awesome/users/carl"
-      end
-
-      it "should retain previously set conditions" do
-        Merb::Router.prepare do
-          match("/:account") do
-            register.name(:account)
-            identify ::ID::Account => :url do
-              resources :users
-            end
-          end
-        end
-
-        url(:account, :account => ::ID::Account.new).should == "/account"
-        url(:user, :account => ::ID::Account.new, :id => User.new).should == "/awesome/users/user"
-      end
-
-    end
-
-  end
-end
diff --git a/spec/public/router/generation/namespace_spec.rb b/spec/public/router/generation/namespace_spec.rb
deleted file mode 100644
index de00c3e..0000000
--- a/spec/public/router/generation/namespace_spec.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a namespaced named route" do
-    
-    it "should add the prefix to the route name and url" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          match("/login").to(:controller => "home").name(:login)
-        end
-      end
-
-      url(:admin_login).should == "/admin/login"
-    end
-    
-    it "should be able to specify the path prefix as an option" do
-      Merb::Router.prepare do
-        namespace(:admin, :path => "supauser") do
-          match("/login").to(:controller => "home").name(:login)
-        end
-      end
-      
-      url(:admin_login).should == "/supauser/login"
-    end
-    
-    it "should be able to specify the name prefix as an option" do
-      Merb::Router.prepare do
-        namespace(:admin, :name_prefix => "supa") do
-          match("/login").to(:controller => "home").name(:login)
-        end
-      end
-      
-      url(:supa_login).should == "/admin/login"
-    end
-    
-    it "should be able to not add a path prefix" do
-      Merb::Router.prepare do
-        namespace(:admin, :path => "") do
-          match("/login").to(:controller => "home").name(:login)
-        end
-      end
-      
-      url(:admin_login).should == "/login"
-    end
-    
-    it "should not use the name prefix if the route is named with #full_name" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          match("/:controller").full_name(:controller)
-          match("/login").to(:controller => "home").full_name(:login)
-        end
-      end
-      
-      url(:controller, :controller => 'foobar').should == "/admin/foobar"
-      url(:login).should                               == "/admin/login"
-    end
-    
-    it "should be able to prepend to the name_prefix" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          match("/login").to(:controller => "home").name(:do, :login)
-        end
-      end
-      
-      url(:do_admin_login).should == "/admin/login"
-    end
-  end
-  
-  describe "a nested namespaced named route" do
-    it "should combine the namespaces" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          namespace(:bar) do
-            match("/login").to(:controller => "home").name(:login)
-          end
-        end
-      end
-      
-      url(:foo_bar_login).should == "/foo/bar/login"
-    end
-    
-    it "should only use the first namespace" do
-      Merb::Router.prepare do
-        namespace(:foo) do |f|
-          namespace(:bar) do
-            f.match("/login").to(:controller => "home").name(:login)
-          end
-        end
-      end
-      
-      url(:foo_login).should == "/foo/login"
-    end
-    
-    # This is broken :(
-    # ---
-    # it "should only use the second namespace" do
-    #   pending "This doesn't work for now"
-    #   Merb::Router.prepare do |r|
-    #     r.namespace(:foo) do |f|
-    #       r.namespace(:bar) do |b|
-    #         b.match("/login").to(:controller => "home").name(:login)
-    #       end
-    #     end
-    #   end
-    #   
-    #   url(:bar_login).should == "/bar/login"
-    # end
-  end
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/optional_segments_spec.rb b/spec/public/router/generation/optional_segments_spec.rb
deleted file mode 100644
index 15c3f68..0000000
--- a/spec/public/router/generation/optional_segments_spec.rb
+++ /dev/null
@@ -1,163 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a named route with a single optional segment" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:foo(/:bar)").name(:optional)
-      end
-    end
-
-    it "should not generate the optional segment when all segments are just strings" do
-      Merb::Router.prepare do
-        match("/hello(/world)").name(:optional)
-      end
-
-      url(:optional).should == "/hello"
-    end
-
-    it "should not add the optional segment when the optional segment is just a string" do
-      Merb::Router.prepare do
-        match("/:greets(/world)").name(:optional)
-      end
-
-      url(:optional, :greets => "goodbye").should == "/goodbye"
-    end
-
-    it "should only generate the route's required segment if it contains no variables" do
-      Merb::Router.prepare do
-        match("/hello(/:optional)").name(:optional)
-      end
-
-      url(:optional).should == "/hello"
-    end
-
-    it "should only generate the required segment of the route if the optional parameter is not provided" do
-      url(:optional, :foo => "hello").should == "/hello"
-    end
-
-    it "should only generate the required segment of the route and add all extra parameters to the query string if the optional parameter is not provided" do
-      url(:optional, :foo => "hello", :extra => "world").should == "/hello?extra=world"
-    end
-
-    it "should also generate the optional segment of the route if the parameter is provied" do
-      url(:optional, :foo => "hello", :bar => "world").should == "/hello/world"
-    end
-
-    it "should generate the full optional segment of the route when there are multiple variables in the optional segment" do
-      Merb::Router.prepare do
-        match("/hello(/:foo/:bar)").name(:long_optional)
-      end
-
-      url(:long_optional, :foo => "world", :bar => "hello").should == "/hello/world/hello"
-    end
-
-    it "should not generate the optional segment of the route if all the parameters of that optional segment are not provided" do
-      Merb::Router.prepare do
-        match("/hello(/:foo/:bar)").name(:long_optional)
-      end
-
-      url(:long_optional, :foo => "world").should == "/hello?foo=world"
-    end
-
-    it "should raise an error if the required parameters are not provided" do
-      lambda { url(:optional) }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should raise an error if the required parameters are not provided even if optional parameters are" do
-      lambda { url(:optional, :bar => "hello") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-  describe "a named route with nested optional egments" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:controller(/:action(/:id))").name(:nested)
-      end
-    end
-
-    it "should generate the full route if all the necessary paramters are supplied" do
-      url(:nested, :controller => "users", :action => "show", :id => 5).should == "/users/show/5"
-    end
-
-    it "should generate only the required segment if no optional paramters are supplied" do
-      url(:nested, :controller => "users").should == "/users"
-    end
-
-    it "should generate the first optional level when deeper levels are not provided" do
-      url(:nested, :controller => "users", :action => "show").should == "/users/show"
-    end
-
-    it "should add deeper level of optional parameters to the query string if a middle level is not provided" do
-      url(:nested, :controller => "users", :id => 5).should == "/users?id=5"
-    end
-
-    it "should raise an error if the required segment is not provided" do
-      lambda { url(:nested, :action => "show") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:nested, :id => 5) }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:nested, :action => "show", :id => 5) }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should add extra parameters to the query string" do
-      url(:nested, :controller => "users", :foo => "bar").should == "/users?foo=bar"
-      url(:nested, :controller => "users", :action => "show", :foo => "bar").should == "/users/show?foo=bar"
-      url(:nested, :controller => "users", :action => "show", :id => "2", :foo => "bar").should == "/users/show/2?foo=bar"
-    end
-    
-  end
-  
-  describe "a named route with multiple optional segments" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:controller(/:action)(.:format)").name(:multi)
-      end
-    end
-
-    it "should generate the full route if all the parameters are provided" do
-      url(:multi, :controller => "articles", :action => "recent", :format => "rss").should == "/articles/recent.rss"
-    end
-
-    it "should be able to generate the first optional segment without the second" do
-      url(:multi, :controller => "articles", :action => "recent").should == "/articles/recent"
-    end
-
-    it "should be able to generate the second optional segment without the first" do
-      url(:multi, :controller => "articles", :format => "xml").should == "/articles.xml"
-    end
-    
-  end
-  
-  describe "a named route with multiple optional segments containing nested optional segments" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:controller(/:action(/:id))(.:format)").name(:default)
-      end
-    end
-
-    it "should generate the full route when all the parameters are provided" do
-      url(:default, :controller => "posts", :action => "show", :id => "5", :format => :js).should ==
-        "/posts/show/5.js"
-    end
-
-    it "should generate with just the required parameter" do
-      url(:default, :controller => "posts").should == "/posts"
-    end
-
-    it "should be able to generate the first optional segment without the second" do
-      url(:default, :controller => "posts", :action => "show").should == "/posts/show"
-      url(:default, :controller => "posts", :action => "show", :id => "5").should == "/posts/show/5"
-    end
-
-    it "should be able to generate the second optional segment without the first" do
-      url(:default, :controller => "posts", :format => "html").should == "/posts.html"
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/other_spec.rb b/spec/public/router/generation/other_spec.rb
deleted file mode 100644
index 2d9a39e..0000000
--- a/spec/public/router/generation/other_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a route with a Regexp path" do
-    
-    it "should not generate" do
-      Merb::Router.prepare do
-        match(%r[/hello/world]).name(:regexp)
-      end
-      
-      lambda { url(:regexp) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/params_spec.rb b/spec/public/router/generation/params_spec.rb
deleted file mode 100644
index 0d6de53..0000000
--- a/spec/public/router/generation/params_spec.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "passing params in anonymously to routes" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:first/:second/:third").name(:ordered)
-      end
-    end
-    
-    it "should match the params to the segment variables in the order that they were declared" do
-      url(:ordered, "one", "two", "three").should == "/one/two/three"
-    end
-    
-    it "should not generate unless all the params are present" do
-      lambda { url(:ordered, "one", "two") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should not generate if there are too many anonymous params" do
-      lambda { url(:ordered, "one", "two", "three", "four") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should be able to mix and match with the params hash" do
-      url(:ordered, "one", "two", :third => "three").should == "/one/two/three"
-    end
-    
-    it "should be able to set query params with the params hash" do
-      url(:ordered, "one", "two", "three", :fourth => "four").should == "/one/two/three?fourth=four"
-    end
-    
-    it "should give precedence to the params hash" do
-      url(:ordered, "one", "two", :first => "un").should             == "/un/one/two"
-      url(:ordered, "one", :first => "un", :second => "deux").should == "/un/deux/one"
-      url(:ordered, "one", :first => "un", :third => "trois").should == "/un/one/trois"
-      url(:ordered, "one", "two", :second => "deux").should          == "/one/deux/two"
-    end
-    
-    it "should raise an exception when there are two many anonymous params after the named params were placed" do
-      lambda { url(:ordered, "one", "two", :first => "un", :second => "deux") }.should raise_error(Merb::Router::GenerationError)
-    end
-  end
-  
-  describe "passing params anonymously to resource routes with identifiers" do
-    
-    module ::AP
-      class ORM ; end
-      class User    < ORM ; def id ; 10 ; end ; end
-      class Comment < ORM ; def id ; 25 ; end ; end
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify AP::ORM => :id do
-          resources :users do
-            resources :comments
-          end
-        end
-      end
-    end
-    
-    it "should work the same as normal routes" do
-      url(:user,         AP::User.new                 ).should == "/users/10"
-      url(:user_comment, AP::User.new, AP::Comment.new).should == "/users/10/comments/25"
-      url(:user_comment, 30,           AP::Comment.new).should == "/users/30/comments/25"
-      url(:user_comment, AP::User.new, "42"           ).should == "/users/10/comments/42"
-    end
-    
-  end
-  
-end
diff --git a/spec/public/router/generation/resources_spec.rb b/spec/public/router/generation/resources_spec.rb
deleted file mode 100644
index 836596a..0000000
--- a/spec/public/router/generation/resources_spec.rb
+++ /dev/null
@@ -1,320 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-class User
-  def id    ; 5  ; end
-  def ohhai ; 10 ; end
-end
-
-describe "When generating URLs," do
-  
-  describe "a resource collection route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users
-          identify :ohhai do
-            resources :admins
-          end
-        end
-      end
-    end
-    
-    it "should provide an index route" do
-      url(:users).should == "/users"
-    end
-    
-    it "should provide a new route" do
-      url(:new_user).should == "/users/new"
-    end
-    
-    it "should provide a show route" do
-      url(:user, :id => 1).should   == "/users/1"
-    end
-    
-    it "should be able to provide a string to generate a show route" do
-      url(:user, :id => "1").should == "/users/1"
-    end
-    
-    it "should be able to provide an object that responds to the default identifier method" do
-      url(:user, :id => User.new).should == "/users/5"
-    end
-    
-    it "should be able to provide an object that responds to a custom identifier method" do
-      url(:admin, :id => User.new).should == "/admins/10"
-    end
-    
-    it "should provide an edit route" do
-      url(:edit_user, :id => 1).should   == "/users/1/edit"
-    end
-    
-    it "should be able to provide a string to generate a show route" do
-      url(:edit_user, :id => "1").should == "/users/1/edit"
-    end
-    
-    it "should be able to provide an object that responds to the default identifier method" do
-      url(:edit_user, :id => User.new).should == "/users/5/edit"
-    end
-    
-    it "should be able to provide an object that responds to a custom identifier method" do
-      url(:edit_admin, :id => User.new).should == "/admins/10/edit"
-    end
-    
-    it "should provide a delete route" do
-      url(:delete_user, :id => 1).should   == "/users/1/delete"
-    end
-    
-    it "should be able to provide a string to generate a delete route" do
-      url(:delete_user, :id => "1").should == "/users/1/delete"
-    end
-    
-    it "should be able to provide an object that responds to the default identifier method" do
-      url(:delete_user, :id => User.new).should == "/users/5/delete"
-    end
-    
-    it "should be able to provide an object that responds to a custom identifier method" do
-      url(:delete_admin, :id => User.new).should == "/admins/10/delete"
-    end
-    
-    it "should be able to specify a class that does not exist" do
-      lambda do
-        Merb::Router.prepare do
-          resources :emails, "EmailBlahBlah"
-        end
-      end.should_not raise_error
-    end
-    
-    it "should be able to specify different keys than :id" do
-      Merb::Router.prepare do
-        resources :users, :keys => [:account, :name]
-      end
-      
-      url(:users).should                                               == "/users"
-      url(:new_user).should                                            == "/users/new"
-      url(:user, :account => "github", :name => "foo").should          == "/users/github/foo"
-      url(:edit_user, :account => "lighthouse", :name => "bar").should == "/users/lighthouse/bar/edit"
-      url(:delete_user, :account => "hello", :name => "world").should  == "/users/hello/world/delete"
-      # -- Bad --
-      lambda { url(:user, :id => 1) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    [:key, :keys].each do |option|
-      it "should work with a single #{option.inspect} entry" do
-        Merb::Router.prepare do
-          resources :users, option => :name
-        end
-
-        url(:users).should                          == "/users"
-        url(:new_user).should                       == "/users/new"
-        url(:user,        :name => "foo").should    == "/users/foo"
-        url(:edit_user,   :name => "bar").should    == "/users/bar/edit"
-        url(:delete_user, :name => "world").should  == "/users/world/delete"
-        # -- Bad --
-        lambda { url(:user, :id => 1) }.should raise_error(Merb::Router::GenerationError)
-      end
-    end
-    
-    it "should be able to specify the path of the resource" do
-      Merb::Router.prepare do
-        resources :users, :path => "admins"
-      end
-      
-      url(:users).should == "/admins"
-    end
-    
-    it "should be able to prepend the name" do
-      Merb::Router.prepare do
-        resources :users, :name_prefix => :admin
-      end
-      
-      url(:admin_users).should                 == "/users"
-      url(:new_admin_user).should              == "/users/new"
-      url(:admin_user, :id => 1).should        == "/users/1"
-      url(:edit_admin_user, :id => 1).should   == "/users/1/edit"
-      url(:delete_admin_user, :id => 1).should == "/users/1/delete"
-    end
-    
-    it "should be able to add extra collection routes through the options" do
-      Merb::Router.prepare do
-        resources :users, :collection => {:hello => :get, :goodbye => :post}
-      end
-      
-      url(:hello_users).should   == "/users/hello"
-      url(:goodbye_users).should == "/users/goodbye"
-    end
-    
-    it "should be able to add extra collection routes in the block" do
-      Merb::Router.prepare do
-        resources :users do
-          collection :hello
-          collection :goodbye
-        end
-      end
-      
-      url(:hello_users).should   == "/users/hello"
-      url(:goodbye_users).should == "/users/goodbye"
-    end
-    
-    it "should be able to add extra member routes" do
-      Merb::Router.prepare do
-        resources :users, :member => {:hello => :get, :goodbye => :post}
-      end
-      
-      url(:hello_user, :id => 1).should   == "/users/1/hello"
-      url(:goodbye_user, :id => 1).should == "/users/1/goodbye"
-    end
-    
-    it "should be able to add extra member routes" do
-      Merb::Router.prepare do
-        resources :users do
-          member :hello
-          member :goodbye
-        end
-      end
-      
-      url(:hello_user, :id => 1).should   == "/users/1/hello"
-      url(:goodbye_user, :id => 1).should == "/users/1/goodbye"
-    end
-    
-    it "should be able to specify arbitrary sub routes" do
-      Merb::Router.prepare do
-        resources :users do
-          match("/:foo", :foo => %r[^foo-\d+$]).to(:action => "foo").name(:foo)
-        end
-      end
-      
-      url(:user_foo, :user_id => 2, :foo => "foo-123").should == "/users/2/foo-123"
-    end
-    
-    it "should allow the singular name to be set" do
-      Merb::Router.prepare do
-        resources :blogposts, :singular => :blogpoost
-      end
-      
-      url(:blogposts).should == "/blogposts"
-      url(:blogpoost, 1).should == "/blogposts/1"
-    end
-    
-  end
-  
-  describe "a resource object route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :form
-      end
-    end
-    
-    it "should provide a show route" do
-      url(:form).should == "/form"
-    end
-    
-    it "should provide a new route" do
-      url(:new_form).should == "/form/new"
-    end
-    
-    it "should provide an edit route" do
-      url(:edit_form).should == "/form/edit"
-    end
-    
-    it "should provide a delete route" do
-      url(:delete_form).should == "/form/delete"
-    end
-    
-    it "should not provide an index route" do
-      lambda { url(:forms) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should be able to specify extra actions through the options" do
-      Merb::Router.prepare do
-        resource :form, :member => { :hello => :get, :goodbye => :post }
-      end
-      
-      url(:hello_form).should   == "/form/hello"
-      url(:goodbye_form).should == "/form/goodbye"
-    end
-    
-    it "should be able to specify extra actions through the block" do
-      Merb::Router.prepare do
-        resource :form do
-          member :hello
-          member :goodbye
-        end
-      end
-      
-      url(:hello_form).should   == "/form/hello"
-      url(:goodbye_form).should == "/form/goodbye"
-    end
-    
-    it "should be able to specify arbitrary sub routes" do
-      Merb::Router.prepare do
-        resource :form do
-          match("/:foo", :foo => %r[^foo-\d+$]).to(:action => "foo").name(:foo)
-        end
-      end
-      
-      url(:form_foo, :foo => "foo-123").should == "/form/foo-123"
-    end
-    
-  end
-  
-  describe "a nested resource route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resources :users do
-          collection :gaga
-          resources :comments do
-            collection :hello
-            member     :goodbye
-          end
-        end
-      end
-    end
-    
-    it "should provide an index route" do
-      url(:user_comments, :user_id => 5).should == "/users/5/comments"
-    end
-    
-    it "should provide a new route" do
-      url(:new_user_comment, :user_id => 5).should == "/users/5/comments/new"
-    end
-    
-    it "should provide a show route" do
-      url(:user_comment, :user_id => 5, :id => 1).should == "/users/5/comments/1"
-    end
-    
-    it "should provide an edit route" do
-      url(:edit_user_comment, :user_id => 5, :id => 1).should == "/users/5/comments/1/edit"
-    end
-    
-    it "should provide a delete route" do
-      url(:delete_user_comment, :user_id => 5, :id => 1).should == "/users/5/comments/1/delete"
-    end
-    
-    it "should not have a gaga route" do
-      lambda { url(:gaga_user_comments, :user_id => 5) }
-    end
-    
-    it "should provide a hello collection route" do
-      url(:hello_user_comments, :user_id => 5).should == "/users/5/comments/hello"
-    end
-    
-    it "should provide a goodbye member route" do
-      url(:goodbye_user_comment, :user_id => 5, :id => 1).should == "/users/5/comments/1/goodbye"
-    end
-    
-  end
-  
-  describe "a resource route nested in a conditional block" do
-    it "should use previously set conditions" do
-      Merb::Router.prepare do
-        match("/prefix") do
-          resources :users
-        end
-      end
-      
-      url(:users).should == "/prefix/users"
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/string_spec.rb b/spec/public/router/generation/string_spec.rb
deleted file mode 100644
index ff2148c..0000000
--- a/spec/public/router/generation/string_spec.rb
+++ /dev/null
@@ -1,125 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a plain named route with no variables" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/hello/world").to(:controller => "hello", :action => "world").name(:simple)
-      end
-    end
-
-    it "should generate with no parameters" do
-      url(:simple).should == "/hello/world"
-    end
-
-    it "should append any parameters to the query string" do
-      url(:simple, :foo => "bar").should == "/hello/world?foo=bar"
-    end
-    
-  end
-  
-  describe "a named route with a variable and no conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:account/welcome").to(:controller => "home", :action => "welcome").name(:welcome)
-      end
-    end
-
-    it "should generate a URL with a paramter passed for the variable" do
-      url(:welcome, :account => "walruses").should == "/walruses/welcome"
-    end
-    
-    it "should generate with a blank parameter" do
-      url(:welcome, :account => "").should == "//welcome"
-    end
-
-    it "should append any extra parameters to the query string" do
-      url(:welcome, :account => "seagulls", :like_walruses => "true").should == "/seagulls/welcome?like_walruses=true"
-    end
-
-    it "should raise an error if no parameters are passed" do
-      lambda { url(:welcome) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should raise an error if a nil parameter is passed" do
-      lambda { url(:welcome, :account => nil) }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should raise an error if parameters are passed without :account" do
-      lambda { url(:welcome, :foo => "bar") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-  describe "a named route with multiple variables and no conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:foo/:bar").to(:controller => "one", :action => "two").name(:foobar)
-      end
-    end
-
-    it "should generate URL with parameters passed for both variables" do
-      url(:foobar, :foo => "omg", :bar => "hi2u").should == "/omg/hi2u"
-    end
-
-    it "should append any extra parameters to the query string" do
-      url(:foobar, :foo => "omg", :bar => "hi2u", :fiz => "what", :biz => "bat").should =~ %r[\?(fiz=what&biz=bat|biz=bat&fiz=what)$] # "/omg/hi2u?fiz=what&biz=bat"
-    end
-    
-    it "should not append nil parameters to the query string" do
-      url(:foobar, :foo => "omg", :bar => "hi2u", :fiz => nil).should == "/omg/hi2u"
-    end
-
-    it "should raise an error if the first variable is missing" do
-      lambda { url(:foobar, :bar => "hi2u") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should raise an error if the second variable is missing" do
-      lambda { url(:foobar, :foo => "omg") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should raise an error no variables are passed" do
-      lambda { url(:foobar) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-  describe "a named route that has :controller and :action in the path and no conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:controller/:action").name(:default)
-      end
-    end
-
-    it "should generate from any controller and action" do
-      url(:default, :controller => "ilove", :action => "lamb").should == "/ilove/lamb"
-    end
-
-    it "should append any extra parameters to the query string" do
-      url(:default, :controller => "di", :action => "fm", :quality => "rocks").should == "/di/fm?quality=rocks"
-    end
-
-    it "should require the controller" do
-      lambda { url(:default, :action => "fm") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should require the controller even if extra parameters are passed" do
-      lambda { url(:default, :action => "fm", :random => "station") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should require the action" do
-      lambda { url(:default, :controller => "di") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should require the action even if extra parameters are passed" do
-      lambda { url(:default, :controller => "di", :random => "station") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/generation/using_request_params_spec.rb b/spec/public/router/generation/using_request_params_spec.rb
deleted file mode 100644
index 1a4afb1..0000000
--- a/spec/public/router/generation/using_request_params_spec.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs when there are request params available," do
-  
-  describe "a simple route" do
-    
-    before(:each) do
-      @request_params = { :project => "awesomo" }
-    end
-    
-    it "should always try to pull required params from the request if they are missing" do
-      Merb::Router.prepare do
-        match("/:project/:article").name(:article)
-      end
-      
-      url(:article, :article => "why-carl-is-awesome").should == "/awesomo/why-carl-is-awesome"
-    end
-    
-    it "should not require any params when all the required params are available in the request" do
-      Merb::Router.prepare do
-        match("/:project").name(:account)
-      end
-      
-      url(:account).should == "/awesomo"
-    end
-    
-    it "should not append the extra request parameters to the query string" do
-      @request_params.merge! :never => "see"
-      
-      Merb::Router.prepare do
-        match("/hello").name(:simple)
-      end
-      
-      url(:simple).should == "/hello"
-    end
-    
-    it "should not generate optional segments even if all the params are availabe in the request if no element is provided" do
-      @request_params.merge! :one => "uno", :two => "dos", :three => "tres"
-      
-      Merb::Router.prepare do
-        match("/hello(/:one/:two/:three)").name(:sequential)
-        match("/hello(/:one(/:two(/:three)))").name(:nested)
-      end
-      
-      url(:sequential).should == "/hello"
-      url(:nested).should     == "/hello"
-    end
-    
-    it "should generate the optional segments if an element from it is specified" do
-      @request_params.merge! :one => "uno", :two => "dos", :three => "tres"
-      
-      Merb::Router.prepare do
-        match("/hello(/:one/:two/:three)").name(:sequential)
-        match("/hello(/:one(/:two(/:three)))").name(:nested)
-      end
-      
-      url(:sequential, :one   => "hi").should == "/hello/hi/dos/tres"
-      url(:sequential, :two   => "hi").should == "/hello/uno/hi/tres"
-      url(:sequential, :three => "hi").should == "/hello/uno/dos/hi"
-      url(:nested,     :one   => "hi").should == "/hello/hi"
-      url(:nested,     :two   => "hi").should == "/hello/uno/hi"
-      url(:nested,     :three => "hi").should == "/hello/uno/dos/hi"
-    end
-    
-  end
-  
-  describe "a route with segment conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:one(/:two/:three(/:four))", :one => /^\d+$/, :two => /^\d+$/, :three => /^\d+$/, :four => /^\d+$/).name(:numbers)
-      end
-    end
-    
-    it "should use the request params if using it will satisfy all the routes' conditions" do
-      @request_params = { :one => '1', :two => '2' }
-      url(:numbers, :three => '3').should == "/1/2/3"
-    end
-    
-    it "should never generate paths that don't match the conditions and append passed params that didn't match to the query string" do
-      @request_params = { :one => '1', :two => 'two' }
-      url(:numbers, :three => '3').should == '/1?three=3'
-      
-      @request_params = { :one => "1", :two => "2", :three => "3" }
-      url(:numbers, :four => "fouryo").should == "/1/2/3?four=fouryo"
-    end
-    
-  end
-  
-  describe "a default route generated when there are request params available" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      
-      @request_params = { :controller => "articles", :action => "show", :id => "10" }
-    end
-    
-    [ :including, :excluding ].each do |option|
-      
-      describe "#{option} a :format param" do
-        
-        before(:each) do
-          @request_params.merge! :format => :xml if option == :including
-        end
-        
-        it "should generate the route just the same when all params are supplied" do
-          url(:controller => "articles", :action => "edit", :id => "8").should == "/articles/edit/8"
-          url(:controller => "articles", :action => "index").should            == "/articles/index"
-          url(:controller => "users").should                                   == "/users"
-          url(:controller => "users", :action => "show").should                == "/users/show"
-          url(:controller => "users", :action => "show", :id => 1).should      == "/users/show/1"
-        end
-
-        it "should use the :controller request parameter when :action is provided" do
-          url(:action => "show").should              == "/articles/show"
-          url(:action => "show", :id => "15").should == "/articles/show/15"
-        end
-
-        it "should use the :action parameter when :id is present" do
-          url(:id => "8").should == "/articles/show/8"
-        end
-      end
-      
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/conditions_spec.rb b/spec/public/router/recognition/conditions_spec.rb
deleted file mode 100644
index 5d04356..0000000
--- a/spec/public/router/recognition/conditions_spec.rb
+++ /dev/null
@@ -1,395 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a route with a String path condition" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/info").to(:controller => "info", :action => "foo")
-      end
-    end
-    
-    it "should match the path and return the parameters passed to #to" do
-      route_for("/info").should have_route(:controller => "info", :action => "foo", :id => nil)
-    end
-    
-    it "should not match a different path" do
-      lambda { route_for("/notinfo") }.should raise_not_found
-    end
-    
-    it "should ignore trailing slashes" do
-      Merb::Router.prepare do
-        match("/hello/").to(:controller => "world")
-      end
-      
-      route_for("/hello").should have_route(:controller => "world")
-    end
-    
-    it "should ignore repeated slashes" do
-      Merb::Router.prepare do
-        match("/foo///bar").to(:controller => "fubar")
-        match("/hello//world").to(:controller => "greetings")
-      end
-      
-      route_for("/foo/bar").should have_route(:controller => "fubar")
-      route_for("/hello/world").should have_route(:controller => "greetings")
-    end
-  end
-  
-  describe "a route with a Request method condition" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match(:method => :post).to(:controller => "all", :action => "posting")
-      end
-    end
-    
-    it "should match any path with a post method" do
-      route_for("/foo/create/12", :method => "post").should have_route(:controller => "all", :action => "posting")
-      route_for("", :method => "post").should have_route(:controller => "all", :action => "posting")
-    end
-    
-    it "should not match any paths that don't have a post method" do
-      lambda { route_for("/foo/create/12", :method => "get") }.should raise_not_found
-      lambda { route_for("", :method => "get") }.should raise_not_found
-    end
-    
-    it "should combine Array elements using OR" do
-      Merb::Router.prepare do
-        match(:method => [:get, :post]).to(:controller => "hello")
-      end
-      
-      route_for('/anything', :method => "get").should        have_route(:controller => "hello")
-      route_for('/anything', :method => "post").should       have_route(:controller => "hello")
-      lambda { route_for('/anything', :method => "put")    }.should raise_not_found
-      lambda { route_for('/anything', :method => "delete") }.should raise_not_found
-    end
-    
-    it "should be able to handle Regexps inside of condition arrays" do
-      Merb::Router.prepare do
-        match(:method => [/^g[aeiou]?t$/, :post]).to(:controller => "hello")
-      end
-      
-      route_for('/anything', :method => "get").should        have_route(:controller => "hello")
-      route_for('/anything', :method => "post").should       have_route(:controller => "hello")
-      lambda { route_for('/anything', :method => "put")    }.should raise_not_found
-      lambda { route_for('/anything', :method => "delete") }.should raise_not_found
-    end
-    
-    it "should ignore nil values" do
-      Merb::Router.prepare do
-        match("/hello", :method => nil).to(:controller => "all")
-      end
-      
-      [:get, :post, :puts, :delete].each do |method|
-        route_for("/hello", :method => method).should have_route(:controller => "all")
-      end
-    end
-  end
-  
-  describe "a route with Request method condition and a path condition" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/foo", :protocol => "http").to(:controller => "plain", :action => "text")
-      end
-    end
-    
-    it "should match the route if the path and the protocol match" do
-      route_for("/foo", :protocol => "http").should have_route(:controller => "plain", :action => "text")
-    end
-    
-    it "should not match if the route does not match" do
-      lambda { route_for("/bar", :protocol => "http") }.should raise_not_found
-    end
-    
-    it "should not match if the protocol does not match" do
-      lambda { route_for("/foo", :protocol => "https") }.should raise_not_found
-    end
-    
-    it "should combine Array elements using OR" do
-      Merb::Router.prepare do
-        match("/hello", :method => [:get, :post]).to(:controller => "hello")
-      end
-      
-      route_for("/hello", :method => "get").should          have_route(:controller => "hello")
-      route_for("/hello", :method => "post").should         have_route(:controller => "hello")
-      lambda { route_for("/hello",   :method => "put")    }.should raise_not_found
-      lambda { route_for("/hello",   :method => "delete") }.should raise_not_found
-      lambda { route_for("/goodbye", :method => "get")    }.should raise_not_found
-      lambda { route_for("/goodbye", :method => "post")   }.should raise_not_found
-      lambda { route_for("/goodbye", :method => "put")    }.should raise_not_found
-      lambda { route_for("/goodbye", :method => "delete") }.should raise_not_found
-    end
-  end
-  
-  describe "a route containing path variable conditions" do
-    
-    it "should match only if the condition is satisfied" do
-      Merb::Router.prepare do
-        match("/foo/:bar", :bar => /\d+/).register
-      end
-      
-      route_for("/foo/123").should have_route(:bar => "123")
-      lambda { route_for("/foo/abc") }.should raise_not_found
-    end
-    
-    it "should be able to handle conditions with anchors" do
-      Merb::Router.prepare do
-        match("/foo/:bar") do
-          match(:bar => /^\d+$/).to(:controller => "both")
-          match(:bar => /^\d+/ ).to(:controller => "start")
-          match(:bar => /\d+$/ ).to(:controller => "end")
-          match(:bar => /\d+/  ).to(:controller => "none")
-        end
-      end
-      
-      route_for("/foo/123456").should have_route(:controller => "both",  :bar => "123456")
-      route_for("/foo/123abc").should have_route(:controller => "start", :bar => "123abc")
-      route_for("/foo/abc123").should have_route(:controller => "end",   :bar => "abc123")
-      route_for("/foo/ab123c").should have_route(:controller => "none",  :bar => "ab123c")
-      lambda { route_for("/foo/abcdef") }.should raise_not_found
-    end
-    
-    it "should match only if all conditions are satisied" do
-      Merb::Router.prepare do
-        match("/:foo/:bar", :foo => /abc/, :bar => /123/).register
-      end
-      
-      route_for("/abc/123").should   have_route(:foo => "abc",  :bar => "123")
-      route_for("/abcd/123").should  have_route(:foo => "abcd", :bar => "123")
-      route_for("/abc/1234").should  have_route(:foo => "abc",  :bar => "1234")
-      route_for("/abcd/1234").should have_route(:foo => "abcd", :bar => "1234")
-      lambda { route_for("/ab/123") }.should raise_not_found
-      lambda { route_for("/abc/12") }.should raise_not_found
-      lambda { route_for("/ab/12") }.should raise_not_found
-    end
-    
-    it "should allow creating conditions that span default segment dividers" do
-      Merb::Router.prepare do
-        match("/:controller", :controller => %r[^[a-z]+/[a-z]+$]).register
-      end
-      
-      lambda { route_for("/somewhere") }.should raise_not_found
-      route_for("/somewhere/somehow").should have_route(:controller => "somewhere/somehow")
-    end
-    
-    it "should allow creating conditions that match everything" do
-      Merb::Router.prepare do
-        match("/:glob", :glob => /.*/).register
-      end
-      
-      %w(somewhere somewhere/somehow 123/456/789 i;just/dont-understand).each do |path|
-        route_for("/#{path}").should have_route(:glob => path)
-      end
-    end
-    
-    it "should allow greedy matches to preceed segments" do
-      Merb::Router.prepare do
-        match("/foo/:bar/something/:else", :bar => /.*/).register
-      end
-      
-      %w(somewhere somewhere/somehow 123/456/789 i;just/dont-understand).each do |path|
-        route_for("/foo/#{path}/something/wonderful").should have_route(:bar => path, :else => "wonderful")
-      end
-    end
-    
-    it "should allow creating conditions that proceed a glob" do
-      Merb::Router.prepare do
-        match("/:foo/bar/:glob", :glob => /.*/).register
-      end
-      
-      %w(somewhere somewhere/somehow 123/456/789 i;just/dont-understand).each do |path|
-        route_for("/superblog/bar/#{path}").should have_route(:foo => "superblog", :glob => path)
-        lambda { route_for("/notablog/foo/#{path}") }.should raise_not_found
-      end
-    end
-    
-    it "should match only if all mixed conditions are satisied" do
-      Merb::Router.prepare do
-        match("/:blog/post/:id", :blog => %r{^[a-zA-Z]+$}, :id => %r{^[0-9]+$}).register
-      end
-      
-      route_for("/superblog/post/123").should  have_route(:blog => "superblog",  :id => "123")
-      route_for("/superblawg/post/321").should have_route(:blog => "superblawg", :id => "321")
-      lambda { route_for("/superblog/post/asdf") }.should raise_not_found
-      lambda { route_for("/superblog1/post/123") }.should raise_not_found
-      lambda { route_for("/ab/12") }.should raise_not_found
-    end
-    
-    it "should raise an error when :path is used as a variable in the path" do
-      bad_path = lambda do
-        Merb::Router.prepare do
-          match("/:path").register
-        end
-      end
-      
-      bad_path.should raise_error(Merb::Router::Behavior::Error)
-    end
-  end
-  
-  describe "a route built with nested conditions" do
-    
-    it "should support block matchers as a path namespace" do
-      Merb::Router.prepare do
-        match("/foo") do
-          match("/bar").to(:controller => "one/two", :action => "baz")
-        end
-      end
-      
-      route_for("/foo/bar").should have_route(:controller => "one/two", :action => "baz")
-    end
-    
-    it "should yield the builder object" do
-      Merb::Router.prepare do
-        match("/foo") do |path|
-          path.match("/bar").to(:controller => "one/two", :action => "baz")
-        end
-      end
-      
-      route_for("/foo/bar").should have_route(:controller => "one/two", :action => "baz")
-    end
-    
-    it "should be able to nest named segment variables" do
-      Merb::Router.prepare do
-        match("/:first") do
-          match("/:second").register
-        end
-      end
-      
-      route_for("/one/two").should have_route(:first => "one", :second => "two")
-      lambda { route_for("/one") }.should raise_not_found
-    end
-    
-    it "should ignore trailing slashes" do
-      Merb::Router.prepare do
-        match("/hello") do
-          match("/").to(:controller => "greetings")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "greetings")
-    end
-    
-    it "should ignore double slashes" do
-      Merb::Router.prepare do
-        match("/hello/") do
-          match("/world").to(:controller => "greetings")
-        end
-      end
-      
-      route_for("/hello/world").should have_route(:controller => "greetings")
-    end
-    
-    it "should be able to define a route and still use the context for more route definition" do
-      Merb::Router.prepare do
-        match("/hello") do
-          to(:controller => "foo", :action => "bar")
-          match("/world").to(:controller => "hello", :action => "world")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "foo", :action => "bar")
-      route_for("/hello/world").should have_route(:controller => "hello", :action => "world")
-    end
-    
-    it "should be able to add blank paths without effecting the actual path" do
-      Merb::Router.prepare do
-        match("/foo") do
-          match("").to(:controller => "one/two", :action => "index")
-        end
-      end
-      
-      route_for("/foo").should have_route(:controller => "one/two", :action => "index")
-    end
-    
-    it "should be able to merge path and request method conditions" do
-      Merb::Router.prepare do
-        match("/:controller") do
-          match(:protocol => "https").to(:action => "bar")
-        end
-      end
-      
-      lambda { route_for("/foo") }.should raise_not_found
-      route_for("/foo", :protocol => "https").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should be able to override previously set Request method conditions" do
-      Merb::Router.prepare do
-        match(:domain => "foo.com") do
-          match("/", :domain => "bar.com").to(:controller => "bar", :action => "com")
-        end
-      end
-      
-      lambda { route_for("/") }.should raise_not_found
-      lambda { route_for("/", :domain => "foo.com") }.should raise_not_found
-      route_for("/", :domain => "bar.com").should have_route(:controller => "bar", :action => "com")
-    end
-    
-    it "should be able to override previously set named segment variable conditions" do
-      Merb::Router.prepare do
-        match("/:account", :account => /^\d+$/) do
-          match(:account => /^[a-z]+$/).register
-        end
-      end
-      
-      route_for("/abc").should have_route(:account => "abc")
-      lambda { route_for("/123") }.should raise_not_found
-    end
-    
-    it "should be able to set conditions on named segment variables that haven't been used yet" do
-      Merb::Router.prepare do
-        match(:account => /^[a-z]+$/) do
-          match("/:account").register
-        end
-      end
-      
-      route_for("/abc").should have_route(:account => "abc")
-      lambda { route_for("/123") }.should raise_not_found
-    end
-    
-    it "should be able to merge path and request method conditions when both kinds are specified in the parent match statement" do
-      Merb::Router.prepare do
-        match("/:controller", :protocol => "https") do
-          match("/greets").to(:action => "bar")
-        end
-      end
-      
-      lambda { route_for("/foo") }.should raise_not_found
-      lambda { route_for("/foo/greets") }.should raise_not_found
-      lambda { route_for("/foo", :protocol => "https") }.should raise_not_found
-      route_for("/foo/greets", :protocol => "https").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "allows wrapping of nested routes all having shared argument with PREDEFINED VALUES" do
-      Merb::Router.prepare do
-        match(%r{/?(en|es|fr|be|nl)?}).to(:language => "[1]") do
-          match("/guides/:action/:id").to(:controller => "tour_guides")
-        end
-      end
-
-      route_for('/nl/guides/search/denboss').should   have_route(:controller => 'tour_guides', :action => "search", :id => "denboss", :language => "nl")
-      route_for('/es/guides/search/barcelona').should have_route(:controller => 'tour_guides', :action => "search", :id => "barcelona", :language => "es")
-      route_for('/fr/guides/search/lille').should     have_route(:controller => 'tour_guides', :action => "search", :id => "lille", :language => "fr")
-      route_for('/en/guides/search/london').should    have_route(:controller => 'tour_guides', :action => "search", :id => "london", :language => "en")
-      route_for('/be/guides/search/brussels').should  have_route(:controller => 'tour_guides', :action => "search", :id => "brussels", :language => "be")
-      route_for('/guides/search/brussels').should     have_route(:controller => 'tour_guides', :action => "search", :id => "brussels")
-    end
-    
-  end
-
-  describe "multiple routes" do
-    # --- Catches a weird bug ---
-    it "should not leak conditions" do
-      Merb::Router.prepare do
-        match("/root") do |r|
-          r.match('/foo').to
-          r.match('/bar').to(:hello => "world")
-        end
-      end
-      
-      route_for("/root/bar").should have_route(:hello => "world")
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/default_routes_spec.rb b/spec/public/router/recognition/default_routes_spec.rb
deleted file mode 100644
index 462cac0..0000000
--- a/spec/public/router/recognition/default_routes_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for the default routes" do
-  
-  before :each do
-    Merb::Router.prepare do
-      default_routes
-    end
-  end
-    
-  it "should match /foo to the Foo controller and index action" do
-    route_for("/foo").should have_route(:controller => "foo", :action => "index", :id => nil)
-  end
-  
-  it "should match /foo/bar to the Foo controller and the bar action" do
-    route_for("/foo/bar").should have_route(:controller => "foo", :action => "bar", :id => nil)
-  end
-  
-  it "should match /foo/bar/12 to the Foo controller, the bar action, and id of 12" do
-    route_for("/foo/bar/12").should have_route(:controller => "foo", :action => "bar", :id => "12")
-  end
-  
-  it "should match /foo.xml to the Foo controller, index action, and xml format" do
-    route_for("/foo.xml").should have_route(:controller => "foo", :action => "index", :format => "xml")
-  end
-  
-  it "should match /foo.xml to the Foo controller, bar action, and xml format" do
-    route_for("/foo/bar.xml").should have_route(:controller => "foo", :action => "bar", :format => "xml")
-  end
-  
-  it "should match /foo.xml to the Foo controller, bar action, id 10, and xml format" do
-    route_for("/foo/bar/10.xml").should have_route(:controller => "foo", :action => "bar", :id => "10", :format => "xml")
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/defaults_spec.rb b/spec/public/router/recognition/defaults_spec.rb
deleted file mode 100644
index 3453f3e..0000000
--- a/spec/public/router/recognition/defaults_spec.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for the routes with default values for variables" do
-  
-  it "should use the specified default value if the variable is not included in the path" do
-    Merb::Router.prepare do
-      defaults(:controller => "foos", :action => "bars").match("/").register
-    end
-    
-    route_for("/").should have_route(:controller => "foos", :action => "bars")
-  end
-  
-  it "should use the specified default value if the variable is included in the path but wasn't matched" do
-    Merb::Router.prepare do
-      defaults(:action => "index").match("/:controller(/:action)").register
-    end
-    
-    route_for("/foos").should have_route(:controller => "foos", :action => "index")
-  end
-  
-  it "should use the matched value for required variables" do
-    Merb::Router.prepare do
-      defaults(:action => "index").match("/:controller/:action").register
-    end
-    
-    route_for("/foos/bar").should have_route(:controller => "foos", :action => "bar")
-  end
-  
-  it "should use the matched value for optional variables" do
-    Merb::Router.prepare do
-      defaults(:action => "index").match("/:controller(/:action)").register
-    end
-    
-    route_for("/foos/bar").should have_route(:controller => "foos", :action => "bar")
-  end
-  
-  it "should use the params when there are some set" do
-    Merb::Router.prepare do
-      match("/go").defaults(:foo => "bar").to(:foo => "baz")
-    end
-    
-    route_for("/go").should have_route(:foo => "baz")
-  end
-  
-  it "should be used in constructed params when the optional segment wasn't matched" do
-    Merb::Router.prepare do
-      match("/go(/:foo)").defaults(:foo => "bar").to(:foo => "foo/:foo")
-    end
-    
-    route_for("/go").should have_route(:foo => "foo/bar")
-  end
-  
-  it "should combine multiple default params when nesting defaults" do
-    Merb::Router.prepare do
-      defaults(:controller => "home") do
-        defaults(:action => "index").match("/(:controller/:action)").register
-      end
-    end
-    
-    route_for("/").should have_route(:controller => "home", :action => "index")
-  end
-  
-  it "should yield the new builder object to the block" do
-    Merb::Router.prepare do
-      defaults(:controller => "home") do |d|
-        d.defaults(:action => "index").match("/(:controller/:action)").register
-      end
-    end
-    
-    route_for("/").should have_route(:controller => "home", :action => "index")
-  end
-  
-  it "should overwrite previously set default params with the new ones when nesting" do
-    Merb::Router.prepare do
-      defaults(:action => "index") do
-        defaults(:action => "notindex").match("/:account(/:action)").register
-      end
-    end
-    
-    route_for("/awesome").should have_route(:account => "awesome", :action => "notindex")
-  end
-  
-  it "should preserve previously set conditions" do
-    Merb::Router.prepare do
-      match("/blah") do
-        defaults(:foo => "bar").to(:controller => "baz")
-      end
-    end
-    
-    route_for("/blah").should have_route(:controller => "baz", :foo => "bar")
-  end
-  
-  it "should be preserved through condition blocks" do
-    Merb::Router.prepare do
-      defaults(:foo => "bar") do
-        match("/go").register
-      end
-    end
-    
-    route_for("/go").should have_route(:foo => "bar")
-  end
-  
-  it "should preserve previously set params" do
-    Merb::Router.prepare do
-      to(:controller => "bar") do
-        defaults(:action => "baz").match("/go").register
-      end
-    end
-    
-    route_for("/go").should have_route(:controller => "bar", :action => "baz")
-  end
-  
-  it "should be preserved through params blocks" do
-    Merb::Router.prepare do
-      defaults(:foo => "bar") do
-        match("/go").to(:controller => "gos")
-      end
-    end
-    
-    route_for("/go").should have_route(:controller => "gos", :foo => "bar")
-  end
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/deferred_spec.rb b/spec/public/router/recognition/deferred_spec.rb
deleted file mode 100644
index bcd8792..0000000
--- a/spec/public/router/recognition/deferred_spec.rb
+++ /dev/null
@@ -1,209 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for deferred routes" do
-
-  describe "that route the request to a controller" do
-    before :each do
-      Merb::Router.prepare do      
-        match("/deferred/:zoo").defer_to do |request, params|
-          params.merge(:controller => "w00t") if params[:zoo]
-        end
-      end    
-    end
-
-    it "should match routes based on the incoming params" do
-      route_for("/deferred/baz", :boo => "12").should have_route(:controller => "w00t", :zoo => "baz")
-    end
-
-    it "should not use the route if it does not match the defered block" do
-      lambda { route_for("/deferred") }.should raise_not_found
-    end
-
-    it "should return the param hash returned by the block" do
-      Merb::Router.prepare do
-        match("/deferred").defer_to do |request, params|
-          { :hello => "world" }
-        end
-      end
-
-      route_for("/deferred").should have_route(:hello => "world")
-    end
-
-    it "should accept params" do
-      Merb::Router.prepare do
-        match("/").defer_to(:controller => "accounts") do |request, params|
-          params.update(:action => "hello")
-        end
-      end
-
-      route_for("/").should have_route(:controller => "accounts", :action => "hello")
-    end
-
-    it "should be able to define routes after the deferred route" do
-      Merb::Router.prepare do
-        match("/deferred").defer_to do
-          { :hello => "world" }
-        end
-
-        match("/").to(:foo => "bar")
-      end
-
-      route_for("/deferred").should have_route(:hello => "world")
-      route_for("/").should         have_route(:foo => "bar")
-    end
-  end
-  
-  describe "that redirect to request to another path" do
-    
-    it "should be able to redirect from inside the deferred block" do
-      Merb::Router.prepare do
-        match("/").defer_to do
-          redirect "/hello"
-        end
-      end
-      
-      route_for("/").should have_rack(:status => 302, :headers => { "Location" => "/hello" })
-    end
-    
-    it "should be able to set the redirect status" do
-      Merb::Router.prepare do
-        match("/").defer_to do
-          redirect "/hello"
-        end
-      end
-      
-      route_for("/").should have_rack(:status => 302, :headers => { "Location" => "/hello" })
-    end
-    
-    it "should be able to use #url in deferred blocks" do
-      Merb::Router.prepare do
-        match("/").defer_to { redirect url(:homepage) }
-        match("/home").to(:controller => "home").name(:homepage)
-      end
-      
-      route_for("/").should have_rack(:headers => { "Location" => "/home" })
-    end
-    
-  end
-  
-end
-
-describe "Recognizing requests for stacked deferred routes" do
-  
-  it "should route the request normally" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| p }
-      second = Proc.new { |req, p| p }
-      third  = Proc.new { |req, p| p }
-      
-      defer(first).defer(second).defer(third) do
-        match("/hello").to(:controller => "greetings")
-      end
-    end
-    
-    route_for("/hello").should have_route(:controller => "greetings")
-  end
-  
-  it "should run all the deferred procs in order" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| req.first_proc!  ; p }
-      second = Proc.new { |req, p| req.second_proc! ; p }
-      third  = Proc.new { |req, p| req.third_proc!  ; p }
-      
-      defer(first).defer(second).defer(third) do
-        match("/hello").to(:controller => "greetings")
-      end
-    end
-    
-    route_for("/hello") do |req|
-      req.should_receive(:first_proc!)
-      req.should_receive(:second_proc!)
-      req.should_receive(:third_proc!)
-    end
-  end
-  
-  it "should abort the deferred stack if one of the procs marks the request as matched" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| req.first_proc!  ; p }
-      second = Proc.new { |req, p| req.second_proc! ; req.matched! ; p }
-      third  = Proc.new { |req, p| req.third_proc!  ; p }
-      
-      defer(first).defer(second).defer(third) do
-        match("/hello").to(:controller => "greetings")
-      end
-    end
-    
-    route_for("/hello") do |req|
-      req.should_receive(:first_proc!)
-      req.should_receive(:second_proc!)
-      req.should_not_receive(:third_proc!)
-    end
-  end
-  
-  it "should abort the deferred stack if one of the procs redirects the request" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| req.first_proc!  ; p }
-      second = Proc.new { |req, p| req.second_proc! ; redirect("/goodbye") }
-      third  = Proc.new { |req, p| req.third_proc!  ; p }
-      
-      defer(first).defer(second).defer(third) do
-        match("/hello").to(:controller => "greetings")
-      end
-    end
-    
-    route_for("/hello") do |req|
-      req.should_receive(:first_proc!)
-      req.should_receive(:second_proc!)
-      req.should_not_receive(:third_proc!)
-    end
-  end
-  
-  it "should match the deferred route if none of the blocks return false / nil" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| p }
-      second = Proc.new { |req, p| p }
-      
-      match("/hello").defer(first).defer(second).to(:controller => "deferred")
-      match("/hello").to(:controller => "not_deferred")
-    end
-    
-    route_for("/hello").should have_route(:controller => "deferred")
-  end
-  
-  it "should not match the deferred route if any of the blocks return false / nil" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| nil }
-      second = Proc.new { |req, p| p }
-      
-      match("/hello").defer(first).defer(second).to(:controller => "deferred")
-      match("/hello").to(:controller => "not_deferred")
-    end
-    
-    route_for("/hello").should have_route(:controller => "not_deferred")
-    
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| p }
-      second = Proc.new { |req, p| nil }
-      
-      match("/hello").defer(first).defer(second).to(:controller => "deferred")
-      match("/hello").to(:controller => "not_deferred")
-    end
-    
-    route_for("/hello").should have_route(:controller => "not_deferred")
-  end
-  
-  it "should be able to use the same deferred block in multiple routes" do
-    Merb::Router.prepare do
-      block = Proc.new { |req, p| req.in_block! ; p }
-
-      defer(block).with(:controller => "deferred") do
-        match("/first").register
-        match("/second").register
-      end
-    end
-    
-    route_for("/first")  { |req| req.should_receive(:in_block!) }
-    route_for("/second") { |req| req.should_receive(:in_block!) }
-  end
-  
-end
diff --git a/spec/public/router/recognition/fixation_spec.rb b/spec/public/router/recognition/fixation_spec.rb
deleted file mode 100644
index 73419c9..0000000
--- a/spec/public/router/recognition/fixation_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a route with fixation configured" do
-    
-    predicate_matchers[:allow_fixation] = :allow_fixation?
-
-    it "should be able to allow fixation" do
-      Merb::Router.prepare do
-        match("/hello/:action/:id").to(:controller => "foo", :action => "fixoid").fixatable
-      end
-
-      matched_route_for("/hello/goodbye/tagging").should allow_fixation
-    end
-
-    it "should be able to disallow fixation" do
-      Merb::Router.prepare do
-        match("/hello/:action/:id").to(:controller => "foo", :action => "fixoid")
-      end
-
-      matched_route_for("/hello/goodbye/tagging").should_not allow_fixation
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/identify_spec.rb b/spec/public/router/recognition/identify_spec.rb
deleted file mode 100644
index 96e917e..0000000
--- a/spec/public/router/recognition/identify_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  it "should retain previously set params" do
-    Merb::Router.prepare do
-      with(:controller => "hellos") do
-        identify :id do
-          match("/:world").register
-        end
-      end
-    end
-    
-    route_for("/worlds").should have_route(:controller => "hellos", :world => "worlds")
-  end
-  
-  it "should retain previously set options" do
-    Merb::Router.prepare do
-     options(:controller_prefix => "hello") do
-        identify :id do
-          match("/").to(:controller => "world")
-        end
-      end
-    end
-    
-    route_for("/").should have_route(:controller => "hello/world")
-  end
-  
-  it "should retain previously set namespaces" do
-    Merb::Router.prepare do
-      namespace :admin do
-        identify :id do
-          match("/hello").to(:controller => "world")
-        end
-      end
-    end
-    
-    route_for("/admin/hello").should have_route(:controller => "admin/world")
-  end
-  
-  it "should retain previously set defaults" do
-    Merb::Router.prepare do
-      defaults(:foo => "bar") do
-        identify :id do
-          match("/(:foo)").to(:controller => "hello")
-        end
-      end
-    end
-    
-    route_for("/").should have_route(:controller => "hello", :foo => "bar")
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/namespace_spec.rb b/spec/public/router/recognition/namespace_spec.rb
deleted file mode 100644
index 517c03f..0000000
--- a/spec/public/router/recognition/namespace_spec.rb
+++ /dev/null
@@ -1,353 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-
-  describe "a namespaced route" do
-    
-    it "should add to the path and prepend the controller with the namespace" do
-      Merb::Router.prepare do
-        namespace :admin do
-          match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      lambda { route_for("/foo") }.should raise_not_found
-      route_for("/admin/foo").should have_route(:controller => "admin/foos")
-    end
-    
-    it "should yield the new behavior object to the block" do
-      Merb::Router.prepare do
-        namespace :admin do |a|
-          a.match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      route_for("/admin/foo").should have_route(:controller => "admin/foos")
-    end
-    
-    it "should be able to prepend the namespace even if the :controller param has been specified already" do
-      Merb::Router.prepare do
-        to(:controller => "bars") do
-          namespace(:admin) do
-            match("/foo").register
-          end
-        end
-      end
-      
-      route_for("/admin/foo").should have_route(:controller => "admin/bars")
-    end
-    
-    it "should be able to prepend the namespace even if :controller has been used in the path already" do
-      Merb::Router.prepare do
-        match("/:controller") do
-          namespace(:marketing).register
-        end
-      end
-      
-      route_for("/something/marketing").should have_route(:controller => "marketing/something")
-    end
-    
-    it "should be able to specify the path prefix" do
-      Merb::Router.prepare do
-        namespace :admin, :path => "administration" do
-          match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      lambda { route_for("/admin/foo") }.should raise_not_found
-      route_for("/administration/foo").should have_route(:controller => "admin/foos")
-    end
-    
-    it "should be able to escape the controller namespace" do
-      Merb::Router.prepare do
-        namespace :admin do
-          match("/login").to(:controller => "/sessions")
-        end
-      end
-      
-      route_for("/admin/login").should have_route(:controller => "sessions")
-    end
-    
-    it "should be able to set a namespace without a path prefix" do
-      Merb::Router.prepare do
-        namespace :admin, :path => "" do
-          match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      lambda { route_for("/admin/foo") }.should raise_not_found
-      route_for("/foo").should       have_route(:controller => "admin/foos")
-    end
-    
-    it "should be able to use nil to set a namespace without a path prefix" do
-      Merb::Router.prepare do
-        namespace :admin, :path => nil do
-          match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      lambda { route_for("/admin/foo") }.should raise_not_found
-      route_for("/foo").should       have_route(:controller => "admin/foos")
-    end
-    
-    it "should preserve previous conditions" do
-      Merb::Router.prepare do
-        match :domain => "foo.com" do
-          namespace :admin do
-            match("/foo").to(:controller => "foos")
-          end
-        end
-      end
-      
-      lambda { route_for("/admin/foo") }.should raise_not_found
-      route_for("/admin/foo", :domain => "foo.com").should have_route(:controller => "admin/foos")
-    end
-    
-    it "should preserve previous params" do
-      Merb::Router.prepare do
-        to(:awesome => "true") do
-          namespace :administration do
-            match("/something").to(:controller => "home")
-          end
-        end
-      end
-      
-      route_for("/administration/something").should have_route(:controller => "administration/home", :awesome => "true")
-    end
-    
-    it "should preserve previous defaults" do
-      Merb::Router.prepare do
-        defaults(:action => "awesome", :foo => "bar") do
-          namespace :baz do
-            match("/users").to(:controller => "users")
-          end
-        end
-      end
-      
-      route_for("/baz/users").should have_route(:controller => "baz/users", :action => "awesome", :foo => "bar")
-    end
-    
-    it "should be preserved through match blocks" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          match(:host => "admin.domain.com").to(:controller => "welcome")
-        end
-      end
-      
-      route_for("/admin", :host => "admin.domain.com").should have_route(:controller => "admin/welcome")
-    end
-    
-    it "should be preserved through to blocks" do
-      Merb::Router.prepare do
-        namespace(:blah) do
-          to(:action => "overload") do
-            match("/blah").to(:controller => "weeeee")
-          end
-        end
-      end
-      
-      route_for("/blah/blah").should have_route(:controller => "blah/weeeee", :action => "overload")
-    end
-    
-    it "should be preserved through defaults blocks" do
-      Merb::Router.prepare do
-        namespace(:blah) do
-          defaults(:action => "overload") do
-            match("/blah").to(:controller => "weeeee")
-          end
-        end
-      end
-      
-      route_for("/blah/blah").should have_route(:controller => "blah/weeeee", :action => "overload")
-    end
-  end
-  
-  describe "a nested namespaced route" do
-    it "should append the paths and controller namespaces together" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          namespace(:bar) do
-            match("/blah").to(:controller => "weeeee")
-          end
-        end
-      end
-      
-      route_for('/foo/bar/blah').should have_route(:controller => 'foo/bar/weeeee', :action => 'index')
-    end
-    
-    it "should respec the custom path prefixes set on each namespace" do
-      Merb::Router.prepare do
-        namespace(:foo, :path => "superfoo") do
-          namespace(:bar, :path => "superbar") do
-            match("/blah").to(:controller => "weeeee")
-          end
-        end
-      end
-      
-      route_for('/superfoo/superbar/blah').should have_route(:controller => 'foo/bar/weeeee', :action => 'index')
-    end
-    
-    it "should preserve previous conditions" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          match(:protocol => 'https') do
-            namespace(:bar) do
-              match("/blah").to(:controller => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/bar/blah', :protocol => 'https').should have_route(:controller => 'foo/bar/weeeee', :action => 'index')
-    end
-    
-    it "should preserve previous params" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          match('/:first') do
-            namespace(:bar) do
-              match("/blah").to(:controller => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/one/bar/blah').should have_route(:controller => 'foo/bar/weeeee', :first => 'one', :action => 'index')
-    end
-    
-    it "should preserve previous defaults" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          defaults(:action => "megaweee") do
-            namespace(:bar) do
-              match("/blah").to(:controller => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/bar/blah').should have_route(:controller => 'foo/bar/weeeee', :action => 'megaweee')
-    end
-      
-    it "should be preserved through match blocks" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          match('/bar') do
-            namespace(:baz) do
-              match("/blah").to(:controller => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/bar/baz/blah').should have_route(:controller => 'foo/baz/weeeee')
-    end
-    
-    it "should be preserved through to blocks" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          match('/bar').to(:controller => 'bar') do
-            namespace(:baz) do
-              match("/blah").to(:action => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/bar/baz/blah').should have_route(:controller => 'foo/baz/bar', :action => "weeeee")
-    end
-    
-    it "should be preserved through defaults blocks" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          defaults(:action => "default_action") do
-            namespace(:baz) do
-              match("/blah").to(:controller => "blah")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/baz/blah').should have_route(:controller => 'foo/baz/blah', :action => "default_action")
-    end
-    
-    it "should use the controller prefix from the last time the prefix started with /" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          namespace(:bar, :controller_prefix => "/bar") do
-            match("/home").to(:controller => "home")
-          end
-        end
-      end
-      
-      route_for("/foo/bar/home").should have_route(:controller => "bar/home")
-    end
-  end
-
-  # I'm not sure if a) these are in the right spec file and b) if they are needed at all
-  describe "a namespaced resource" do
-    
-    it "should match a get to /admin/foo/blogposts to the blogposts controller and index action" do
-      Merb::Router.prepare do
-        namespace :admin do
-          resource :foo do
-            resources :blogposts
-          end
-        end
-      end
-      
-      route_for('/admin/foo/blogposts', :method => :get).should have_route(:controller => 'admin/blogposts', :action => 'index', :id => nil)
-    end
-
-    it "should match a get to /admin/blogposts/1/foo to the foo controller and the show action" do
-      Merb::Router.prepare do
-        namespace :admin do
-          resources :blogposts do
-            resource :foo
-          end
-        end
-      end
-      
-      route_for('/admin/blogposts/1/foo', :method => :get).should have_route(:controller => 'admin/foos', :action => 'show', :blogpost_id => '1', :id => nil)
-    end
-  
-    it "should match a get to /my_admin/blogposts to the blogposts controller with a custom patch setting" do
-      Merb::Router.prepare do
-        namespace(:admin, :path => "my_admin") do
-          resources :blogposts
-        end
-      end
-      
-      route_for('/my_admin/blogposts', :method => :get).should have_route(:controller => 'admin/blogposts', :action => 'index', :id => nil)
-    end
-
-    it "should match a get to /admin/blogposts/1/foo to the foo controller and the show action with namespace admin" do
-      Merb::Router.prepare do
-        namespace(:admin, :path => "") do
-          resources :blogposts do
-            resource :foo
-          end
-        end
-      end
-      
-      route_for('/blogposts/1/foo', :method => :get).should have_route(:controller => 'admin/foos', :action => 'show', :blogpost_id => '1', :id => nil)
-    end
-  end
-
-  # This doesn't work anymore
-  # ---
-  # describe "a nested namespaced resource" do
-  #   it "should match a get to /admin/superadmin/blogposts to the blogposts controller and index action and a nested namespace" do
-  #     pending "Awww crap, this is the single spec that instance_eval fails on"
-  #     Merb::Router.prepare do
-  #       namespace :admin do |admin|
-  #         r.namespace :superadmin do |superadmin|
-  #           admin.resources :blogposts
-  #         end
-  #       end
-  #     end
-  #     
-  #     route_for('/admin/blogposts', :method => :get).should have_route(:controller => 'admin/blogposts', :action => 'index', :id => nil)
-  #   end
-  # end
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/nested_resources_spec.rb b/spec/public/router/recognition/nested_resources_spec.rb
deleted file mode 100644
index 01853a5..0000000
--- a/spec/public/router/recognition/nested_resources_spec.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for nested resources routes" do
-  
-  before(:each) do
-    Merb::Router.prepare do
-      
-      resources :users do
-        
-        resources :comments, :collection => { :one => :get }, :member => { :two => :get } do
-          collection :three, :to => "awesome"
-          member     :four,  :to => "awesome"
-          
-          resources :replies, :collection => { :one => :get }, :member => { :two => :get } do
-            collection :three, :to => "awesome"
-            member     :four,  :to => "awesome"
-          end
-        end
-        
-        resource :profile, :member => { :one => :get } do
-          member :two, :to => "awesome"
-        end
-      end
-      
-      resource :account do
-        resources :images, :collection => { :one => :get }, :member => { :two => :get } do
-          collection :three, :to => "awesome"
-          member     :four,  :to => "awesome"
-        end
-        
-        resource  :preference, :member => { :one => :get } do
-          member :two, :to => "awesome"
-        end
-      end
-      
-      resources :domains, :keys => :domain do
-        resources :emails, :keys => :username
-      end
-    end
-  end
-  
-  it_should_be_a_resource_collection_route :comments, "/users/9", :user_id => "9"
-  
-  it_should_be_a_resource_collection_route :replies,  "/users/9/comments/5", :user_id => "9", :comment_id => "5"
-  
-  it_should_be_a_resource_object_route :profile, "/users/8", :user_id => "8"
-  
-  it_should_be_a_resource_collection_route :images, "/account"
-  
-  it_should_be_a_resource_object_route :preference, "/account"
-  
-  it "should match a get to /domains/merbivore_com/emails to the emails controller and index action with domain => 'merbivore_com" do
-    route_for('/domains/merbivore_com/emails', :method => :get).should have_route(:controller => 'emails', :action => 'index', :username => nil, :domain => 'merbivore_com')
-  end
-  
-end
-
-describe "Recognizing requests for nested resources routes with custom matchers" do
-  
-  it "should convert the :id condition to :user_id" do
-    Merb::Router.prepare do
-      resources :users, :id => /[a-z]+/ do
-        resources :comments
-      end
-    end
-    
-    route_for("/users/abc/comments/1").should have_route(:user_id => "abc")
-    lambda { route_for('/users/123/comments/1') }.should raise_not_found
-  end
-  
-  it "should leave single keys not named :id alone" do
-    Merb::Router.prepare do
-      resources :users, :key => :name, :name => /[a-z]+/ do
-        resources :comments
-      end
-    end
-    
-    route_for("/users/abc/comments/1").should have_route(:name => "abc")
-    lambda { route_for('/users/123/comments/1') }.should raise_not_found
-  end
-  
-  it "should work with multi-key resources that have an :id as part of the identifier" do
-    Merb::Router.prepare do
-      resources :users, :key => [:name, :id], :id => /[a-z]+/ do
-        resources :comments
-      end
-    end
-    
-    route_for("/users/abc/efg/comments/1").should have_route(:name => "abc", :user_id => "efg")
-    lambda { route_for('/users/abc/123/comments/1') }.should raise_not_found
-  end
-  
-  it "should work with mult-key resources" do
-    Merb::Router.prepare do
-      resources :users, :key => [:first, :last], :first => /[a-z]+/, :last => /[a-z]+\/[a-z]+/ do
-        resources :comments
-      end
-    end
-    
-    route_for("/users/abc/efg/hij/comments/1").should have_route(:first => "abc", :last => "efg/hij")
-    lambda { route_for('/users/abc/123/comments/1') }.should raise_not_found
-    lambda { route_for('/users/abc/efg/comments/1') }.should raise_not_found
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/optional_segments_spec.rb b/spec/public/router/recognition/optional_segments_spec.rb
deleted file mode 100644
index 78d573a..0000000
--- a/spec/public/router/recognition/optional_segments_spec.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for the routes with" do
-  
-  describe "a route with optional segments", :shared => true do
-    
-    it "should match when the required segment matches" do
-      route_for("/hello").should have_route(:first => 'hello', :second => nil, :third => nil)
-    end
-    
-    it "should match when the required and optional segment(s) match" do
-      route_for("/hello/world/sweet").should have_route(:first => "hello", :second => "world", :third => "sweet")
-    end
-    
-  end
-  
-  describe "a single optional segment" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:first(/:second/:third)").register
-      end
-    end
-    
-    it_should_behave_like "a route with optional segments"
-    
-    it "should not match the route if the optional segment is only partially present" do
-      lambda { route_for("/hello/world") }.should raise_not_found
-    end
-    
-    it "should not match the optional segment if the optional segment is present but doesn't match a named segment condition" do
-      Merb::Router.prepare do
-        match("/:first(/:second)", :second => /^\d+$/).register
-      end
-      
-      lambda { route_for("/hello/world") }.should raise_not_found
-    end
-    
-    it "should not match if the optional segment is present but not the required segment" do
-      Merb::Router.prepare do
-        match("/:first(/:second)", :first => /^[a-z]+$/, :second => /^\d+$/).register
-      end
-      
-      lambda { route_for("/123") }.should raise_not_found
-    end
-  end
-  
-  describe "multiple optional segments" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:first(/:second)(/:third)").register
-      end
-    end
-    
-    it_should_behave_like "a route with optional segments"
-    
-    it "should match when one optional segment matches" do
-      route_for("/hello/sweet").should have_route(:first => "hello", :second => "sweet")
-    end
-    
-    it "should be able to distinguish the optional segments when there are conditions on them" do
-      Merb::Router.prepare do
-        match("/:first(/:second)(/:third)", :second => /^\d+$/).register
-      end
-      
-      route_for("/hello/world").should have_route(:first => "hello", :second => nil, :third => "world")
-      route_for("/hello/123").should have_route(:first => "hello", :second => "123", :third => nil)
-    end
-    
-    it "should not match any of the optional segments if the segments can't be matched" do
-      Merb::Router.prepare do
-        match("(/:first/abc)(/:bar)").register
-      end
-      
-      lambda { route_for("/abc/hello") }.should raise_not_found
-      lambda { route_for("/hello/world/abc") }.should raise_not_found
-    end
-  end
-  
-  describe "nested optional segments" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:first(/:second(/:third))").register
-      end
-    end
-    
-    it_should_behave_like "a route with optional segments"
-    
-    it "should match when the first optional segment matches" do
-      route_for("/hello/world").should have_route(:first => "hello", :second => "world")
-    end
-    
-    it "should not match the nested optional group unless the containing optional group matches" do
-      Merb::Router.prepare do
-        match("/:first(/:second(/:third))", :second => /^\d+$/).to
-      end
-      
-      lambda { route_for("/hello/world") }.should raise_not_found
-    end
-  end
-  
-  describe "nested match blocks with optional segments" do
-    it "should allow wrapping of nested routes all having a shared optional segment" do
-      Merb::Router.prepare do
-        match("(/:language)") do
-          match("/guides/:action/:id").to(:controller => "tour_guides")
-        end
-      end
-
-      route_for('/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :id => "london")
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/params_spec.rb b/spec/public/router/recognition/params_spec.rb
deleted file mode 100644
index 439bc0f..0000000
--- a/spec/public/router/recognition/params_spec.rb
+++ /dev/null
@@ -1,228 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a route a simple param builder" do
-    
-    it "should provide the params specified in 'to' statements" do
-      Merb::Router.prepare do
-        match('/hello').to(:foo => "bar")
-      end
-
-      route_for("/hello").should have_route(:foo => "bar")
-    end
-    
-    it "should be able to handle Numeric params" do
-      Merb::Router.prepare do
-        match("/hello").to(:integer => 10, :float => 5.5)
-      end
-      
-      route_for("/hello").should have_route(:integer => 10, :float => 5.5)
-    end
-    
-    it "should be able to handle Boolean params" do
-      Merb::Router.prepare do
-        match("/hello").to(:true => true, :false => false)
-      end
-    end
-
-    it "should only contain an :action key if no params are defined" do
-      # This because all routes have :action => "index" as a default
-      Merb::Router.prepare do
-        match('/hello').register
-      end
-
-      route_for('/hello').should have_exact_route(:action => "index")
-    end
-
-    it "should be able to extract named segments as params" do
-      Merb::Router.prepare do
-        match('/:foo').register
-      end
-
-      route_for('/bar').should have_route(:foo => "bar")
-    end
-
-    it "should be able to extract multiple named segments as params" do
-      Merb::Router.prepare do
-        match("/:foo/:faz").register
-      end
-
-      route_for("/bar/baz").should have_route(:foo => "bar", :faz => "baz")
-    end
-
-    it "should not extract a named segment if it did not match the condition assigned to it" do
-      Merb::Router.prepare do
-        match("/:foo", :foo => /^[a-z]$/).register
-      end
-
-      lambda { route_for("/123") }.should raise_not_found
-    end
-  end
-  
-  describe "a route a complex param builder" do
-    
-    it "should be able to prepend to the named segment" do
-      Merb::Router.prepare do
-        match('/:foo').to(:foo => 'bar/:foo')
-      end
-      
-      route_for("/hello").should have_route(:foo => 'bar/hello')
-    end
-    
-    it "should be able to append to the named segment" do
-      Merb::Router.prepare do
-        match('/:foo').to(:foo => ':foo/bar')
-      end
-      
-      route_for("/hello").should have_route(:foo => "hello/bar")
-    end
-    
-    it "should be able to not alter the named segment" do
-      Merb::Router.prepare do
-        match('/:foo').to(:foo => ':foo')
-      end
-      
-      route_for("/hello").should have_route(:foo => "hello")
-    end
-    
-    it "should be able to insert the named segment into phrases" do
-      Merb::Router.prepare do
-        match("/:greetings").to(:greetings => "I say :greetings to you good sir!")
-      end
-      
-      route_for("/good-day").should have_route(:greetings => "I say good-day to you good sir!")
-    end
-    
-    it "should be able to extract a specified capture from a regular expression path condition" do
-      Merb::Router.prepare do
-        match(%r[/([a-z]+)/world]).to(:greetings => "[1]")
-      end
-      
-      route_for("/hello/world").should have_route(:greetings => "hello")
-    end
-    
-    it "should be able to extract a specified capture from a regular expression named segment" do
-      Merb::Router.prepare do
-        match("/:foo", :foo => %r[\d+([a-z]*)\d+]).to(:foo => "[2]")
-      end
-      
-      route_for("/123abc1").should have_route(:foo => "abc")
-    end
-    
-    it "should be able to extract a specified capture from a regular expression condition on an arbitrary request method" do
-      Merb::Router.prepare do
-        match(:host => %r[([a-z]+)\.world\.com]).to(:greetings => ":host[1]")
-      end
-      
-      route_for("/blah", :host => "hello.world.com").should have_route(:greetings => "hello")
-    end
-    
-    it "should be able to combine multiple regular expression extractions into a single param" do
-      Merb::Router.prepare do
-        match(%r[/([a-z]+)/world], :host => %r[([a-z]+)\.world\.com]).to(:combined => ":host[1] :path[1]")
-      end
-      
-      route_for("/goodbye/world", :host => "hello.world.com").should have_route(:combined => "hello goodbye")
-    end
-    
-    it "should strip the trailing slash from :controller" do
-      Merb::Router.prepare do
-        match("/").to(:controller => "/home")
-      end
-      
-      route_for("/").should have_route(:controller => "home")
-    end
-    
-    it "should accept a Symbol for :controller" do
-      Merb::Router.prepare do
-        match("/").to(:controller => :home)
-      end
-      
-      route_for("/").should have_route(:controller => "home")
-    end
-    
-    it "should accept a Symbol for :controller in a namespace" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          to(:controller => :home)
-        end
-      end
-      
-      route_for("/admin").should have_route(:controller => "admin/home")
-    end
-  end
-  
-  describe "a route with nested to blocks" do
-    
-    it "should merge all the params together" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do
-          match("/hello").to(:action => "bar")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should yield the new behavior object to the block" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do |builder|
-          builder.match("/hello").to(:action => "bar")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should overwrite previous params with newer params" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do
-          match("/hello").to(:controller => "bar")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "bar")
-    end
-  
-    it "should preserve existing conditions" do
-      Merb::Router.prepare do
-        match("/foo").to(:controller => "foo") do
-          to(:action => "bar")
-        end
-      end
-      
-      route_for("/foo").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should be preserved through condition blocks" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do
-          match('/blah').to
-        end
-      end
-      
-      route_for("/blah").should have_route(:controller => "foo")
-    end
-    
-    it "should preserve existing defaults" do
-      Merb::Router.prepare do
-        defaults(:action => "bar").to(:controller => "foo") do
-          match("/(:action)").to
-        end
-      end
-      
-      route_for("/").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should be preserved through defaults blocks" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do
-          defaults(:action => "bar").match("/blah").to
-        end
-      end
-      
-      route_for("/blah").should have_route(:controller => "foo")
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/redirect_spec.rb b/spec/public/router/recognition/redirect_spec.rb
deleted file mode 100644
index 76487db..0000000
--- a/spec/public/router/recognition/redirect_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-
-  # predicate_matchers[:redirects] = :redirect
-  
-  describe "a route that redirects" do
-    
-    it "should set the request as a redirect" do
-      Merb::Router.prepare do
-        match("/foo").redirect("/bar")
-      end
-      
-      route_for("/foo").should have_rack(:status => 302, :headers => { "Location" => "/bar" })
-    end
-    
-    it "should be able to set the redirect as a temporary redirect" do
-      Merb::Router.prepare do
-        match("/foo").redirect("/bar", :permanent => true)
-      end
-      
-      route_for("/foo").should have_rack(:status => 301, :headers => { "Location" => "/bar" })
-    end
-    
-    it "should still redirect even if there was a deferred block assigned to the route" do
-      Merb::Router.prepare do
-        block = Proc.new { |r,p| p }
-        defer(block) do
-          match("/hello").redirect("/goodbye")
-        end
-      end
-      
-      route_for("/hello").should have_rack(:status => 302, :headers => { "Location" => "/goodbye" })
-    end
-    
-    it "should redirect to the URL in the deferred block" do
-      Merb::Router.prepare do
-        block = Proc.new { |r,p| redirect("/deferred-goodbye") }
-        defer(block) do
-          match("/hello").redirect("/goodbye")
-        end
-      end
-      
-      route_for("/hello").should have_rack(:status => 302, :headers => { "Location" => "/deferred-goodbye" })
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/regexp_paths_spec.rb b/spec/public/router/recognition/regexp_paths_spec.rb
deleted file mode 100644
index 7e63056..0000000
--- a/spec/public/router/recognition/regexp_paths_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When recognizing requests," do
-
-  describe "a route with a Regexp path condition" do
-    
-    it "should allow a regex expression" do
-      Merb::Router.prepare do
-        match(%r{^/foos?/(bar|baz)/([a-z0-9]+)}).to(:controller => "foo", :action => "[1]", :id => "[2]")
-      end
-      
-      route_for("/foo/bar/baz").should  have_route(:controller => "foo", :action => "bar", :id => "baz")
-      route_for("/foos/bar/baz").should have_route(:controller => "foo", :action => "bar", :id => "baz")
-      lambda { route_for("/bars/foo/baz") }.should raise_not_found
-    end
-    
-    it "should allow mixing regular expression paths with string paths" do
-      Merb::Router.prepare do
-        match(%r{^/(foo|bar)}).match("/baz").match(%r{/([a-z0-9]+)}).to(:controller => "[1]", :action => "baz", :id => "[2]")
-      end
-      
-      route_for("/foo/baz/bar").should have_route(:controller => "foo", :action => "baz", :id => "bar")
-      route_for("/bar/baz/foo").should have_route(:controller => "bar", :action => "baz", :id => "foo")
-      lambda { route_for("/for/bar/baz") }.should raise_not_found
-    end
-    
-    it "should allow mixing regular expression paths with string paths when nesting match blocks" do
-      Merb::Router.prepare do
-        match(%r{^/(foo|bar)}) do
-          match("/baz") do
-            match(%r{/([a-z0-9]+)}).to(:controller => "[1]", :action => "baz", :id => "[2]")
-          end
-        end
-        
-      end
-      
-      route_for("/foo/baz/bar").should have_route(:controller => "foo", :action => "baz", :id => "bar")
-      route_for("/bar/baz/foo").should have_route(:controller => "bar", :action => "baz", :id => "foo")
-      lambda { route_for("/for/bar/baz") }.should raise_not_found
-    end
-    
-    it "should support inbound user agents" do
-      Merb::Router.prepare do
-        match(%r[^/foo/(.+)], :user_agent => /(MSIE|Gecko)/).to(:controller => "foo", :title => "[1]", :action => "show", :agent => ":user_agent[1]")
-      end
-      route_for("/foo/bar", :user_agent => "MSIE").should have_route(:controller => "foo", :action => "show", :title => "bar", :agent => "MSIE")
-      lambda { route_for("/foo/bar", :user_agent => "Firefox") }.should raise_error(Merb::ControllerExceptions::NotFound)
-    end
-    
-    it "should allow wrapping of nested routes all having shared OPTIONAL argument" do
-      Merb::Router.prepare do
-        match(/\/?(.*)?/).to(:language => "[1]") do
-          match("/guides/:action/:id").to(:controller => "tour_guides")
-        end
-      end
-
-      route_for('/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :id => "london")
-    end
-  end
-
-end
\ No newline at end of file
diff --git a/spec/public/router/recognition/resource_spec.rb b/spec/public/router/recognition/resource_spec.rb
deleted file mode 100644
index 3fd971e..0000000
--- a/spec/public/router/recognition/resource_spec.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a basic singular resource route" do
-    
-    before :each do
-      Merb::Router.prepare do
-        resource :foo
-      end
-    end
-
-    it "should match a get to /foo to the blogposts controller and show action" do
-      route_for('/foo', :method => :get).should have_route(:controller => 'foos', :action => 'show', :id => nil)
-    end
-
-    it "should match a post to /foo to the blogposts controller and create action" do
-      route_for('/foo', :method => :post).should have_route(:controller => 'foos', :action => 'create', :id => nil)
-    end
-
-    it "should match a put to /foo to the blogposts controller and update action" do
-      route_for('/foo', :method => :put).should have_route(:controller => 'foos', :action => 'update', :id => nil)
-    end
-
-    it "should match a delete to /foo to the blogposts controller and show action" do
-      route_for('/foo', :method => :delete).should have_route(:controller => 'foos', :action => 'destroy', :id => nil)
-    end
-
-    it "should match a get to /foo/new to the blogposts controller and new action" do
-      route_for('/foo/new', :method => :get).should have_route(:controller => 'foos', :action => 'new', :id => nil)
-    end
-
-    it "should match a get to /foo/edit to the blogposts controller and edit action" do
-      route_for('/foo/edit', :method => :get).should have_route(:controller => 'foos', :action => 'edit', :id => nil)
-    end
-
-    it "should match a get to /foo/delete to the blogposts controller and delete action" do
-      route_for('/foo/delete', :method => :get).should have_route(:controller => 'foos', :action => 'delete', :id => nil)
-    end
-    
-  end
-  
-  describe "a customized singular resource route" do
-    
-    it "should be able to change the controller that the resource points to" do
-      Merb::Router.prepare do
-        resource :foo, :controller => :bars
-      end
-      
-      route_for('/foo').should                   have_route(:controller => "bars")
-      route_for('/foo', :method => :post).should have_route(:controller => "bars")
-    end
-    
-    [:controller_prefix, :namespace].each do |option|
-      it "should be able to specify the namespace with #{option.inspect}" do
-        Merb::Router.prepare do
-          resource :foo, option => "admin"
-        end
-        
-        route_for('/foo').should have_route(:controller => "admin/foos")
-      end
-    end
-    
-    it "should be able to set the path prefix" do
-      Merb::Router.prepare do
-        resource :foo, :path => "bar"
-      end
-      
-      route_for("/bar").should have_route(:controller => "foos", :action => "show")
-    end
-    
-  end
-  
-  member_routes = { :five => :get, :six => :post, :seven => :put, :eight => :delete }
-  
-  describe "a singular resource route with extra actions", :shared => true do
-    
-    member_routes.each_pair do |action, method|
-      
-      it "should be able to add extra #{method} methods on the member with an optional :format" do
-        route_for("/foo/#{action}",     :method => method).should have_route(:controller => "foos", :action => "#{action}", :format => nil)
-        route_for("/foo/#{action}.xml", :method => method).should have_route(:controller => "foos", :action => "#{action}", :format => "xml")
-      end
-      
-      other_methods = [:get, :post, :put, :delete] - [method]
-      other_methods.each do |other|
-        
-        it "should not route /#{action} on #{other} to anything" do
-          lambda { route_for("/foo/#{action}", :method => other) }.should raise_not_found
-        end
-        
-      end
-    end
-    
-  end
-  
-  describe "a singular resource with extra actions specified through the options" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :foo, :member => member_routes
-      end
-    end
-    
-    it_should_behave_like "a singular resource route with extra actions"
-    
-  end
-  
-  describe "a singular resource with extra actions specified in the block" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :foo do
-          member_routes.each { |name, method| member name, :method => method, :to => "#{name}" }
-        end
-      end
-    end
-    
-    it_should_behave_like "a singular resource route with extra actions"
-    
-    it "should work without the :to option" do
-      Merb::Router.prepare do
-        resource :foo do
-          member :hello, :method => :get
-        end
-      end
-      
-      route_for("/foo/hello").should have_route(:action => "hello")
-    end
-    
-    it "should work without the :method option" do
-      Merb::Router.prepare do
-        resource :foo do
-          member :hello, :to => "goodbye"
-        end
-      end
-      
-      [:get, :post, :put, :delete].each do |method|
-        route_for("/foo/hello", :method => method).should have_route(:action => "goodbye")
-      end
-    end
-    
-    it "should be able to map the same path with different methods to different actions for member routes" do
-      Merb::Router.prepare do
-        resource :foo do
-          member :hello, :method => :get, :to => "member_get_hello"
-          member :hello, :method => :put, :to => "member_put_hello"
-        end
-      end
-      
-      route_for("/foo/hello", :method => :get).should have_route(:controller => "foos", :action => "member_get_hello")
-      route_for("/foo/hello", :method => :put).should have_route(:controller => "foos", :action => "member_put_hello")
-    end
-    
-  end
-  
-end
diff --git a/spec/public/router/recognition/resources_spec.rb b/spec/public/router/recognition/resources_spec.rb
deleted file mode 100644
index 68c687f..0000000
--- a/spec/public/router/recognition/resources_spec.rb
+++ /dev/null
@@ -1,346 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a basic resource collection route" do
-    
-    before :each do
-      Merb::Router.prepare do
-        resources :blogposts
-      end
-    end
-    
-    it_should_be_a_resource_collection_route :blogposts, { :extra => false }, { }
-    
-    it "should not match put or delete on the collection" do
-      [:put, :delete].each do |method|
-        lambda { route_for('/blogposts',    :method => method) }.should raise_not_found
-        lambda { route_for('/blogposts.js', :method => method) }.should raise_not_found
-      end
-    end
-    
-    it "should not match post on the new action" do
-      lambda { route_for('/blogposts/new',     :method => :post) }.should raise_not_found
-      lambda { route_for('/blogposts/new.xml', :method => :post) }.should raise_not_found
-    end
-    
-    it "should not match post, put, or delete on the edit action" do
-      [:put, :post, :delete].each do |method|
-        lambda { route_for('/blogposts/edit',    :method => :post) }.should raise_not_found
-        lambda { route_for('/blogposts/edit.hi', :method => :post) }.should raise_not_found
-      end
-    end
-    
-    it "should not match post, put, or delete on the delete action" do
-      [:put, :post, :delete].each do |method|
-        lambda { route_for('/blogposts/delete',     :method => :post) }.should raise_not_found
-        lambda { route_for('/blogposts/delete.flv', :method => :post) }.should raise_not_found
-      end
-    end
-    
-  end
-  
-  describe "a basic resource collection with custom " do
-    
-    before :each do
-      Merb::Router.prepare do
-        resources :blogposts, :id => %r([a-z]+/\d+)
-      end
-    end
-    
-    it_should_be_a_resource_collection_route :blogposts, { :extra => false, :id => "abc/123" }, { }
-    
-    it "should not match a numeric ID for the routes" do
-      lambda { route_for("/blogposts/10") }.should                     raise_not_found
-      lambda { route_for("/blogposts/10", :method => :put) }.should    raise_not_found
-      lambda { route_for("/blogposts/10", :method => :delete) }.should raise_not_found
-      lambda { route_for("/blogposts/10/edit") }.should                raise_not_found
-      lambda { route_for("/blogposts/10/delete") }.should              raise_not_found
-    end
-    
-  end
-  
-  describe "a customized resource collection route" do
-    
-    it "should be able to change the controller that the resource points to" do
-      Merb::Router.prepare do
-        resources :blogposts, :controller => :posts
-      end
-      
-      route_for('/blogposts').should                   have_route(:controller => "posts")
-      route_for('/blogposts/1').should                 have_route(:controller => "posts")
-      route_for('/blogposts', :method => :post).should have_route(:controller => "posts")
-    end
-    
-    [:controller_prefix, :namespace].each do |option|
-      it "should be able to specify the namespace with #{option.inspect}" do
-        Merb::Router.prepare do
-          resources :blogposts, option => "admin"
-        end
-        
-        route_for('/blogposts').should have_route(:controller => "admin/blogposts")
-      end
-    end
-    
-    it "should be able to set the path prefix" do
-      Merb::Router.prepare do
-        resources :users, :path => "admins"
-      end
-      
-      route_for("/admins").should have_route(:controller => "users", :action => "index")
-    end
-  end
-  
-  collection_routes = { :one  => :get, :two => :post, :three => :put, :four  => :delete }
-  member_routes     = { :five => :get, :six => :post, :seven => :put, :eight => :delete }
-  
-  describe "a plural resource route with extra actions", :shared => true do
-    
-    # Loop through each method declared on the collection and make sure that they
-    # are available only when the request is using the specified method
-    collection_routes.each_pair do |action, method|
-      it "should be able to add extra #{method} methods on the collection with an optional :format" do
-        route_for("/users/#{action}",     :method => method).should have_route(:controller => "users", :action => "#{action}", :id => nil, :format => nil)
-        route_for("/users/#{action}.xml", :method => method).should have_route(:controller => "users", :action => "#{action}", :id => nil, :format => "xml")
-      end
-      
-      it "should still route /#{action} on get to show" do
-        route_for("/users/#{action}").should have_route(:controller => "users", :action => "show", :id => "#{action}")
-      end unless method == :get
-      
-      it "should still route /#{action} on put to update" do
-        route_for("/users/#{action}", :method => :put).should have_route(:controller => "users", :action => "update", :id => "#{action}")
-      end unless method == :put
-      
-      it "should still route /#{action} on delete to destroy" do
-        route_for("/users/#{action}", :method => :delete).should have_route(:controller => "users", :action => "destroy", :id => "#{action}")
-      end unless method == :delete
-      
-      it "should not match /#{action} on post to anything" do
-        lambda { route_for("/users/#{action}", :method => :post) }.should raise_not_found
-      end unless method == :post
-    end
-    
-    member_routes.each_pair do |action, method|
-      
-      it "should be able to add extra #{method} methods on the member with an optional :format" do
-        route_for("/users/2/#{action}",     :method => method).should have_route(:controller => "users", :action => "#{action}", :id => "2", :format => nil)
-        route_for("/users/2/#{action}.xml", :method => method).should have_route(:controller => "users", :action => "#{action}", :id => "2", :format => "xml")
-      end
-      
-      other_methods = [:get, :post, :put, :delete] - [method]
-      other_methods.each do |other|
-        
-        it "should not route /#{action} on #{other} to anything" do
-          lambda { route_for("/users/2/#{action}", :method => other) }.should raise_not_found
-        end
-        
-      end
-    end
-    
-  end
-  
-  describe "a plural resource with extra actions specified through the options" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resources :users, :collection => collection_routes, :member => member_routes
-      end
-    end
-    
-    it_should_behave_like "a plural resource route with extra actions"
-    
-  end
-  
-  describe "a plural resource with extra actions specified in the block" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resources :users do
-          collection_routes.each { |name, method| collection name, :method => method, :to => "#{name}" }
-          member_routes.each     { |name, method| member     name, :method => method, :to => "#{name}" }
-        end
-      end
-    end
-    
-    it_should_behave_like "a plural resource route with extra actions"
-    
-    it "should work without the :to option" do
-      Merb::Router.prepare do
-        resources :users do
-          collection :hello, :method => :get
-          member     :hello, :method => :get
-        end
-      end
-      
-      route_for("/users/hello").should   have_route(:action => "hello")
-      route_for("/users/1/hello").should have_route(:action => "hello")
-    end
-    
-    it "should work without the :method option" do
-      Merb::Router.prepare do
-        resources :users do
-          collection :hello, :to => "goodbye"
-          member     :hello, :to => "goodbye"
-        end
-      end
-      
-      [:get, :post, :put, :delete].each do |method|
-        route_for("/users/hello",   :method => method).should have_route(:action => "goodbye")
-        route_for("/users/1/hello", :method => method).should have_route(:action => "goodbye")
-      end
-    end
-    
-    it "should be able to map the same path with different methods to different actions for collection routes" do
-      Merb::Router.prepare do
-        resources :users do
-          collection :hello, :method => :get, :to => "collection_get_hello"
-          collection :hello, :method => :put, :to => "collection_put_hello"
-        end
-      end
-      
-      route_for("/users/hello", :method => :get).should have_route(:controller => "users", :action => "collection_get_hello")
-      route_for("/users/hello", :method => :put).should have_route(:controller => "users", :action => "collection_put_hello")
-    end
-    
-    it "should be able to map the same path with different methods to different actions for member routes" do
-      Merb::Router.prepare do
-        resources :users do
-          member :hello, :method => :get, :to => "member_get_hello"
-          member :hello, :method => :put, :to => "member_put_hello"
-        end
-      end
-      
-      route_for("/users/9/hello", :method => :get).should have_route(:controller => "users", :id => "9", :action => "member_get_hello")
-      route_for("/users/9/hello", :method => :put).should have_route(:controller => "users", :id => "9", :action => "member_put_hello")
-    end
-    
-  end
-
-  describe "a resource route with multiple custom keys" do
-  
-    before :each do
-      Merb::Router.prepare do
-        resources :emails, :keys => ["username", "domain"]
-      end 
-    end
-    
-    it "should match a get to /emails/bidule/merbivore_com to the  emails controller and the show action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com', :method => :get).should have_route(:controller => 'emails', :action => 'show', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should match a put to /emails/bidule/merbivore_com to the  emails controller and the update action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com', :method => :put).should have_route(:controller => 'emails', :action => 'update', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should match a delete to /emails/bidule/merbivore_com to the  emails controller and the destroy action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com', :method => :delete).should have_route(:controller => 'emails', :action => 'destroy', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should match a get to /emails/bidule/merbivore_com/edit to the  emails controller and the destroy action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com/edit', :method => :get).should have_route(:controller => 'emails', :action => 'edit', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should not match a put to /emails/bidule/merbivore_com/edit" do
-      lambda { route_for('/emails/bidule/merbivore_com/edit', :method => :put) }.should raise_not_found
-    end
-    
-    it "should match a get to /emails/bidule/merbivore_com/delete to the emails controller and the delete action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com/delete', :method => :get).should have_route(:controller => 'emails', :action => 'delete', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should be able to set matches on each key" do
-      Merb::Router.prepare do
-        resources :emails, :keys => ["username", "domain"], :username => /[a-z]+/, :domain => /[a-z]+\.com/
-      end
-      
-      route_for("/emails/abc/abc.com").should have_route(:username => "abc", :domain => "abc.com")
-      lambda { route_for("/emails/123/456")     }.should raise_not_found
-      lambda { route_for("/emails/abc/123")     }.should raise_not_found
-      lambda { route_for("/emails/123/abc.com") }.should raise_not_found
-    end
-    
-    it "should be able to set matches on a single key" do
-      Merb::Router.prepare do
-        resources :emails, :keys => ["username", "domain"], :username => /[a-z]+/
-      end
-      
-      route_for("/emails/abc/123").should have_route(:username => "abc", :domain => "123")
-      route_for("/emails/abc/abc").should have_route(:username => "abc", :domain => "abc")
-      lambda { route_for("/emails/123/456") }.should raise_not_found
-      lambda { route_for("/emails/123/abc") }.should raise_not_found
-    end
- 
-  end
-  
-  describe "a resource an identify" do
-    
-    class ::Email ; end
-    
-    it "should set the keys for the resource when the identify wraps the resource declaration" do
-      Merb::Router.prepare do
-        identify Email => :address do
-          resources :emails
-        end
-      end
-      
-      route_for('/emails/hello').should have_route(:id => nil, :address => "hello")
-    end
-    
-    it "should set the keys for the resource when the identify is specified inline" do
-      Merb::Router.prepare do
-        resources :emails, :identify => :address
-      end
-      
-      route_for('/emails/hello').should have_route(:id => nil, :address => "hello")
-    end
-    
-    it "should give precedance to the :keys option over a parent #identify" do
-      Merb::Router.prepare do
-        identify Email => :address do
-          resources :emails, :key => :email
-        end
-      end
-      
-      route_for('/emails/hello').should have_route(:id => nil, :address => nil, :email => "hello")
-    end
-    
-    it "should give precedance to the :keys option over the :identify option" do
-      Merb::Router.prepare do
-        resources :emails, :identify => :address, :key => :email
-      end
-      
-      route_for('/emails/hello').should have_route(:id => nil, :address => nil, :email => "hello")
-    end
-    
-  end
-  
-  describe "a resource route with a single custom key" do
-    
-    [:key, :keys].each do |option|
-      it "should use the specified key specified with #{option.inspect} in the params hash" do
-        Merb::Router.prepare do
-          resources :emails, option => :address
-        end
-        
-        route_for("/emails/foobar",        :method => :get).should have_route(:controller => "emails", :action => "show",   :address => "foobar")
-        route_for("/emails/foobar",        :method => :put).should have_route(:controller => "emails", :action => "update", :address => "foobar")
-        route_for("/emails/foobar/edit",   :method => :get).should have_route(:controller => "emails", :action => "edit",   :address => "foobar")
-        route_for("/emails/foobar/delete", :method => :get).should have_route(:controller => "emails", :action => "delete", :address => "foobar")
-      end
-    end
-    
-    it "should give precedence to :keys" do
-      Merb::Router.prepare do
-        resources :emails, :keys => :address, :key => :zomg
-      end
-      
-      route_for("/emails/foobar",        :method => :get).should have_route(:controller => "emails", :action => "show",   :address => "foobar")
-      route_for("/emails/foobar",        :method => :put).should have_route(:controller => "emails", :action => "update", :address => "foobar")
-      route_for("/emails/foobar/edit",   :method => :get).should have_route(:controller => "emails", :action => "edit",   :address => "foobar")
-      route_for("/emails/foobar/delete", :method => :get).should have_route(:controller => "emails", :action => "delete", :address => "foobar")
-    end
-    
-  end
-  
-end
diff --git a/spec/public/router/recognition/variables_spec.rb b/spec/public/router/recognition/variables_spec.rb
deleted file mode 100644
index 509556c..0000000
--- a/spec/public/router/recognition/variables_spec.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a route with variables in the path" do
-    
-    it "should create keys for each named variable" do
-      Merb::Router.prepare do
-        match("/:foo/:bar").register
-      end
-      
-      route_for("/one/two").should have_route(:foo => "one", :bar => "two")
-    end
-    
-    it "should be able to match :controller, :action, and :id from the route" do
-      Merb::Router.prepare do
-        match("/:controller/:action/:id").register
-      end
-      
-      route_for("/foo/bar/baz").should have_route(:controller => "foo", :action => "bar", :id => "baz")
-    end
-    
-    it "should be able to set :controller with #to" do
-      Merb::Router.prepare do
-        match("/:action").to(:controller => "users")
-      end
-      
-      route_for("/show").should have_route(:controller => "users", :action => "show")
-    end
-    
-    it "should be able to combine multiple named variables into a param" do
-      Merb::Router.prepare do
-        match("/:foo/:bar").to(:controller => ":foo/:bar")
-      end
-      
-      route_for("/one/two").should have_route(:controller => "one/two", :foo => "one", :bar => "two")
-    end
-    
-    it "should be able to overwrite matched named variables in the params" do
-      Merb::Router.prepare do
-        match("/:foo/:bar").to(:foo => "foo", :bar => "bar")
-      end
-      
-      route_for("/one/two").should have_route(:foo => "foo", :bar => "bar")
-    end
-    
-    it "should be able to block named variables from being present in the params" do
-      Merb::Router.prepare do
-        match("/:foo/:bar").to(:foo => nil, :bar => nil)
-      end
-      
-      route_for("/one/two").should have_route(:foo => nil, :bar => nil)
-    end
-    
-    it "should match single character names" do
-      Merb::Router.prepare do
-        match("/:x/:y").register
-      end
-      
-      route_for("/40/20").should have_route(:x => "40", :y => "20")
-    end
-    
-    it "should not swallow trailing underscores in the segment name" do
-      Merb::Router.prepare do
-        match("/:foo_").register
-      end
-      
-      route_for("/buh_").should have_route(:foo => "buh")
-      lambda { route_for("/buh").should }.should raise_error(Merb::ControllerExceptions::NotFound)
-    end
-    
-  end
-  
-  describe "a route with variables spread across match blocks" do
-    
-    it "should combine the path conditions from each match statement" do
-      Merb::Router.prepare do
-        match("/:foo") do
-          match("/:bar").register
-        end
-      end
-      
-      route_for("/one/two").should have_route(:foo => "one", :bar => "two")
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/router/router_spec.rb b/spec/public/router/router_spec.rb
deleted file mode 100644
index 87a68d9..0000000
--- a/spec/public/router/router_spec.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Router do
-  
-  describe "#prepare" do
-    
-    it "should be able to compile an empty route table" do
-      lambda do
-        Merb::Router.prepare { }
-      end.should_not raise_error(SyntaxError)
-    end
-    
-    it "should evaluate the prepare block in context an object that provides builder methods" do
-      Merb::Router.prepare do
-        %w(
-          match to defaults options fixatable
-          name full_name defer_to default_routes
-          namespace redirect resources resource
-        ).each do |method|
-          respond_to?(method).should == true
-        end
-      end
-    end
-    
-    it "should use the default root_behavior if none is specified" do
-      Merb::Router.prepare do
-        match("/hello").to(:controller => "hello")
-      end
-      
-      route_for("/hello").should have_route(:controller => "hello", :action => "index")
-    end
-    
-    it "should use the root_behavior specified externally" do
-      Merb::Router.root_behavior = Merb::Router.root_behavior.defaults(:controller => "default")
-      Merb::Router.prepare do
-        match("/hello").register
-      end
-      
-      route_for("/hello").should have_route(:controller => "default", :action => "index")
-    end
-    
-    it "should be able to chain root_behaviors" do
-      Merb::Router.root_behavior = Merb::Router.root_behavior.defaults(:controller => "default")
-      Merb::Router.root_behavior = Merb::Router.root_behavior.defaults(:action     => "default")
-      Merb::Router.prepare do
-        match("/hello").register
-      end
-      
-      route_for("/hello").should have_route(:controller => "default", :action => "default")
-    end
-    
-    it "should raise a friendly error when there is some :controller mismatching going on" do
-      lambda {
-        Merb::Router.prepare do
-          match("/").to(:controller => "hello/:controller")
-        end
-      }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should empty previously set #routes, #resource_routes, and #named_routes" do
-      Merb::Router.prepare do
-        resources :users
-      end
-      Merb::Router.prepare { }
-      
-      Merb::Router.routes.should be_empty
-      Merb::Router.named_routes.should be_empty
-      Merb::Router.resource_routes.should be_empty
-    end
-    
-    it "should not be able to match routes anymore" do
-      lambda { route_for("/users") }.should raise_error(Merb::Router::NotCompiledError)
-    end
-    
-    it "should log at the debug level when it cannot find a resource model" do
-      with_level(:info) do
-        Merb::Router.prepare { resources :zomghi2u }
-      end.should_not include_log("Could not find resource model Zonghi2u")
-      
-      with_level(:debug) do
-        Merb::Router.prepare { resources :zomghi2u }
-      end.should include_log("Could not find resource model Zomghi2u")
-    end
-  end
-
-  describe "#match" do
-    
-    it "should raise an error if the routes were not compiled yet" do
-      lambda { Merb::Router.match(simple_request) }.should raise_error(Merb::Router::NotCompiledError)
-    end
-
-  end
-  
-  describe "#extensions" do
-    it "should be able to extend the router" do
-      Merb::Router.extensions do
-        def hello_world
-          match("/hello").to(:controller => "world")
-        end
-      end
-      
-      Merb::Router.prepare do
-        hello_world
-      end
-      
-      route_for("/hello").should have_route(:controller => "world")
-    end
-  end
-  
-  describe "#route_for" do
-    it "should return the right routes with a user defined collection route" do
-      Merb::Router.prepare do
-        resources :robots do
-          collection :stop_them
-        end
-      end
-
-      # => index
-      route_for('/robots').first.to_s.should == '/robots(/index)(.:format)'
-
-      # => create
-      route_for('/robots', :method => :post).first.to_s.should == '/robots(.:format)'
-
-      # => new
-      route_for('/robots/new').first.to_s.should == '/robots/new(.:format)'
-
-      # => user defined collection routes (stop_them)
-      route_for('/robots/stop_them').first.to_s.should == '/robots/stop_them(.:format)'
-
-      # => show
-      route_for('/robots/1').first.to_s.should == '/robots/:id(.:format)'
-
-      # => user defined member routes (edit, delete)
-      route_for('/robots/1/edit').first.to_s.should == '/robots/:id/edit(.:format)'
-      route_for('/robots/1/delete').first.to_s.should == '/robots/:id/delete(.:format)'
-
-      # => update
-      route_for('/robots/1', :method => :put).first.to_s.should == '/robots/:id(.:format)'
-
-      # => destroy
-      route_for('/robots/1', :method => :delete).first.to_s.should == '/robots/:id(.:format)'
-    end
-  end
-
-  describe "#around_match" do
-    
-    it "should set a class method of Router to be called around request matching" do
-      class Merb::Router
-        def self.my_awesome_thang(request)
-          before!
-          retval = yield
-          after!
-          retval
-        end
-      end
-      
-      Merb::Router.around_match = :my_awesome_thang
-      Merb::Router.prepare do
-        match("/").to(:controller => "home")
-      end
-      
-      Merb::Router.should_receive(:before!)
-      Merb::Router.should_receive(:after!)
-      route_for("/").should have_route(:controller => "home")
-    end
-    
-  end
-
-end
\ No newline at end of file
diff --git a/spec/public/router/spec_helper.rb b/spec/public/router/spec_helper.rb
deleted file mode 100644
index d733a07..0000000
--- a/spec/public/router/spec_helper.rb
+++ /dev/null
@@ -1,287 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-require 'ostruct'
-require 'rubygems'
-gem "rspec"
-require "spec"
-
-module Spec
-  module Matchers
-    class HaveRoute
-      def initialize(expected, exact = false)
-        @expected = expected
-        @exact = exact
-      end
-
-      def matches?(target)
-        @target = target[1]
-        @errors = []
-        @expected.all? { |param, value| @target[param] == value } && (!@exact || @expected.length == @target.length)
-      end
-
-      def failure_message
-        @target.each do |param, value|
-          @errors << "Expected :#{param} to be #{@expected[param].inspect}, but was #{value.inspect}" unless
-            @expected[param] == value
-        end
-        @errors << "Got #{@target.inspect}"
-        @errors.join("\n")
-      end
-
-      def negative_failure_message
-        "Expected #{@expected.inspect} not to be #{@target.inspect}, but it was."
-      end
-
-      def description() "have_route #{@target.inspect}" end
-    end
-
-    def have_route(expected)
-      HaveRoute.new(expected)
-    end
-    
-    def have_exact_route(expected)
-      HaveRoute.new(expected, true)
-    end
-    
-    class HaveRack
-      def initialize(expected)
-        @expected = expected
-      end
-
-      def matches?(rack)
-        return false unless rack.last.is_a?(Array)
-        @actual = Struct.new(:status, :headers, :body).new(rack.last[0], rack.last[1], rack.last[2])
-        @expected.all? { |k, v| @actual[k] == v }
-      end
-
-      def failure_message
-        "#{@actual.inspect} does not match #{@expected.inspect}"
-      end
-
-      def negative_failure_message
-        "#{@actual.inspect} does match #{@expected.inspect}"
-      end
-
-      def description() "have_rack #{@actual.inspect}" end
-    end
-    
-    def have_rack(expected)
-      HaveRack.new(expected)
-    end
-    
-    # class HaveNilRoute
-    # 
-    #   def matches?(target)
-    #     @target = target
-    #     target.last.empty?
-    #   end
-    # 
-    #   def failure_message
-    #     "Expected a nil route. Got #{@target.inspect}."
-    #   end
-    # 
-    #   def negative_failure_message
-    #     "Expected not to get a nil route."
-    #   end
-    # end
-    # 
-    def raise_not_found
-      raise_error(Merb::ControllerExceptions::NotFound)
-    end
-  end
-  
-  module Helpers
-    #
-    # Creates a single route with the passed conditions and parameters without
-    # registering it with Router
-    # def route(conditions, params = {})
-    #   conditions = {:path => conditions} unless Hash === conditions
-    #   Merb::Router::Route.new(conditions, params)
-    # end
-    # 
-    # #
-    # # A shortcut for creating a single route and registering it with Router
-    # def prepare_named_route(name, from, conditions = {}, to = nil)
-    #   to, conditions = conditions, {} unless to
-    #   Merb::Router.prepare {|r| r.match(from, conditions).to(to).name(name) }
-    # end
-    # 
-    # def prepare_conditional_route(name, from, conditions, to = {})
-    #   Merb::Router.prepare {|r| r.match(from, conditions).to(to).name(name) }
-    # end
-    # 
-    def prepare_route(from = {}, to = {})
-      name = :default
-      Merb::Router.prepare {|r| r.match(from).to(to).name(name) }
-    end
-    
-    def env_for(path, orig_env = {})
-      env = orig_env.dup
-      env["REQUEST_METHOD"]  = env.delete(:method).to_s if env[:method]
-      env["HTTP_USER_AGENT"] = env.delete(:user_agent)  if env[:user_agent]
-      env["HTTPS"]           = "on"                     if env.delete(:protocol) =~ /https/i
-      env["REQUEST_PATH"]    = path
-      
-      if env[:host]
-        env["HTTP_HOST"] = env.delete(:host)
-      elsif env[:domain]
-        env["HTTP_HOST"] = env.delete(:domain)
-      end
-      
-      env
-    end
-    
-    def simple_request(env = {})
-      env_for("/", env)
-    end
-
-    #
-    # Returns the dispatch parameters for a request by passing the request
-    # through Router#match.
-    def route_for(path, env = {}, &block)
-      request = fake_request(env_for(path, env))
-      yield request if block_given?
-      Merb::Router.route_for(request)
-    end
-    
-    def request_for(path, env = {}, &block)
-      request = fake_request(env_for(path, env))
-      yield request if block_given?
-      Merb::Router.route_for(request)
-      request
-    end
-    
-    def matched_route_for(*args)
-      route_for(*args).first
-    end
-
-  end
-end
-
-def it_should_be_a_resource_collection_route(name, *args)
-  params = extract_options_from_args!(args) || {}
-  prefix = args.first.is_a?(String) ? args.shift : ""
-  opts   = args.first.is_a?(Hash)   ? args.shift : {}
-  
-  id = opts[:id] || "45"
-  
-  it "should provide #{name} with an 'index' route" do
-    route_for("#{prefix}/#{name}").should          have_route({:action => "index", :controller => "#{name}",  :id => nil, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/index").should    have_route({:action => "index", :controller => "#{name}",  :id => nil, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}.js").should       have_route({:action => "index", :controller => "#{name}",  :id => nil, :format => "js"}.merge(params))
-    route_for("#{prefix}/#{name}/index.js").should have_route({:action => "index", :controller => "#{name}",  :id => nil, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'new' route" do
-    route_for("#{prefix}/#{name}/new").should    have_route({:action => "new", :controller => "#{name}", :id => nil, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/new.js").should have_route({:action => "new", :controller => "#{name}", :id => nil, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'create' route" do
-    route_for("#{prefix}/#{name}",    :method => :post).should have_route({:action => "create", :controller => "#{name}", :id => nil, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}.js", :method => :post).should have_route({:action => "create", :controller => "#{name}", :id => nil, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'show' route" do
-    route_for("#{prefix}/#{name}/#{id}").should    have_route({:action => "show", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}.js").should have_route({:action => "show", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with an 'edit' route" do
-    route_for("#{prefix}/#{name}/#{id}/edit").should    have_route({:action => "edit", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}/edit.js").should have_route({:action => "edit", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with an 'update' route" do
-    route_for("#{prefix}/#{name}/#{id}",    :method => :put).should have_route({:action => "update", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}.js", :method => :put).should have_route({:action => "update", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'delete' route" do
-    route_for("#{prefix}/#{name}/#{id}/delete").should    have_route({:action => "delete", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}/delete.js").should have_route({:action => "delete", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'destroy' route" do
-    route_for("#{prefix}/#{name}/#{id}",    :method => :delete).should have_route({:action => "destroy", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}.js", :method => :delete).should have_route({:action => "destroy", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  # --- I decided that all the routes here will have the following ---
-  
-  if !opts.has_key?(:extra) || opts[:extra]
-    
-    it "should provide #{name} with a 'one' collection route" do
-      route_for("#{prefix}/#{name}/one").should    have_route({:action => "one", :controller => "#{name}", :format => nil }.merge(params))
-      route_for("#{prefix}/#{name}/one.js").should have_route({:action => "one", :controller => "#{name}", :format => "js"}.merge(params))
-    end
-
-    it "should provide #{name} with a 'two' member route" do
-      route_for("#{prefix}/#{name}/#{id}/two").should    have_route({:action => "two", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-      route_for("#{prefix}/#{name}/#{id}/two.js").should have_route({:action => "two", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-    end
-
-    it "should provide #{name} with a 'three' collection route that maps the 'awesome' method" do
-      route_for("#{prefix}/#{name}/three").should    have_route({:action => "awesome", :controller => "#{name}", :format => nil }.merge(params))
-      route_for("#{prefix}/#{name}/three.js").should have_route({:action => "awesome", :controller => "#{name}", :format => "js"}.merge(params))
-    end
-
-    it "should provide #{name} with a 'four' member route that maps to the 'awesome' method" do
-      route_for("#{prefix}/#{name}/#{id}/four").should    have_route({:action => "awesome", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-      route_for("#{prefix}/#{name}/#{id}/four.js").should have_route({:action => "awesome", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-    end
-  end
-end
-
-def it_should_be_a_resource_object_route(name, *args)
-  controller = "#{name}s"
-  params     = extract_options_from_args!(args) || {}
-  prefix     = args.first.is_a?(String) ? args.shift : ""
-  opts       = args.first.is_a?(Hash)   ? args.shift : {}
-
-  it "should provide #{name} with a 'show' route" do
-    route_for("#{prefix}/#{name}").should    have_route({:action => "show", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}.js").should have_route({:action => "show", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with an 'edit' route" do
-    route_for("#{prefix}/#{name}/edit").should    have_route({:action => "edit", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/edit.js").should have_route({:action => "edit", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with an 'update' route" do
-    route_for("#{prefix}/#{name}",    :method => :put).should have_route({:action => "update", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}.js", :method => :put).should have_route({:action => "update", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'delete' route" do
-    route_for("#{prefix}/#{name}/delete").should    have_route({:action => "delete", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/delete.js").should have_route({:action => "delete", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'destroy' route" do
-    route_for("#{prefix}/#{name}",    :method => :delete).should have_route({:action => "destroy", :controller => controller, :format => nil}.merge(params))
-    route_for("#{prefix}/#{name}.js", :method => :delete).should have_route({:action => "destroy", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'one' member route" do
-    route_for("#{prefix}/#{name}/one").should    have_route({:action => "one", :controller => controller, :format => nil}.merge(params))
-    route_for("#{prefix}/#{name}/one.js").should have_route({:action => "one", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'two' member route that maps to the 'awesome' method" do
-    route_for("#{prefix}/#{name}/two").should    have_route({:action => "awesome", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/two.js").should have_route({:action => "awesome", :controller => controller, :format => "js"}.merge(params))
-  end
-end
-
-Spec::Runner.configure do |config|
-  config.include(Spec::Helpers)
-  config.include(Spec::Matchers)
-  config.before(:each) do
-    @_root_behavior = Merb::Router.root_behavior
-  end
-  config.after(:each) do
-    Merb::Router.root_behavior = @_root_behavior
-    Merb::Router.reset!
-  end
-end
\ No newline at end of file
diff --git a/spec/public/router/spec_helper_spec.rb b/spec/public/router/spec_helper_spec.rb
deleted file mode 100644
index 034eaf3..0000000
--- a/spec/public/router/spec_helper_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "env_for" do
-  describe "with :method" do
-    before(:each) do
-      @orig_env = { :method => "POST" }
-    end
-  
-    it "should preserve the passed environment" do
-      env_for("/", @orig_env)
-      @orig_env.should == { :method => "POST" }
-    end
-
-    it "should return REQUEST_PATH and REQUEST_METHOD" do
-      env_for("/", @orig_env).should == { "REQUEST_PATH" => "/", "REQUEST_METHOD" => "POST" }
-    end
-  end
-
-  describe "with :user_agent" do
-    before(:each) do
-      @orig_env = { :user_agent => "Safari" }
-    end
-  
-    it "should preserve the passed environment" do
-      env_for("/", @orig_env)
-      @orig_env.should == { :user_agent => "Safari" }
-    end
-
-    it "should return REQUEST_PATH and HTTP_USER_AGENT" do
-      env_for("/", @orig_env).should == { "REQUEST_PATH" => "/", "HTTP_USER_AGENT" => "Safari" }
-    end
-  end
-end
diff --git a/spec/public/session/controllers/sessions.rb b/spec/public/session/controllers/sessions.rb
deleted file mode 100644
index 0238bf2..0000000
--- a/spec/public/session/controllers/sessions.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-module Merb
-  
-  module Test
-    module Fixtures
-  
-      module Controllers
-
-        class Testing < Merb::Controller
-          self._template_root = File.dirname(__FILE__) / "views"
-        end
-
-        class SessionsController < Testing
-    
-          def index
-            request.session[:foo] = params[:foo]
-            Merb::Config[:session_store]
-          end
-      
-          def regenerate
-            request.session.regenerate
-          end
-      
-          def retrieve
-          end
-      
-          def destroy
-            request.session.clear!
-          end
-    
-        end
-    
-        class MultipleSessionsController < Testing
-    
-          def store_in_cookie
-            request.session(:cookie)[:foo] = 'cookie-bar'
-          end
-      
-          def store_in_memory
-            request.session(:memory)[:foo] = 'memory-bar'
-          end
-      
-          def store_in_memcache
-            request.session(:memcache)[:foo] = 'memcache-bar'
-          end
-      
-          def store_in_multiple
-            request.session(:memcache)[:foo] = 'memcache-baz'
-            request.session(:memory)[:foo] = 'memory-baz'
-            request.session(:cookie)[:foo] = 'cookie-baz'
-          end
-      
-          def retrieve
-          end
-      
-        end
-  
-      end
-
-    end
-  end
-end
diff --git a/spec/public/session/cookie_session_spec.rb b/spec/public/session/cookie_session_spec.rb
deleted file mode 100644
index 48c9f7c..0000000
--- a/spec/public/session/cookie_session_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb(:session_store => "cookie",
-             :session_secret_key => "session-secret-key-here",
-             :default_cookie_domain => '.localhost.com')
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-describe Merb::CookieSession do
-  
-  before do 
-    @session_class = Merb::CookieSession
-    @session = @session_class.generate
-  end
-  
-  it_should_behave_like "All session-store backends"
-  
-  it "should have a session_store_type class attribute" do
-    @session.class.session_store_type.should == :cookie
-  end
-  
-end
-
-describe Merb::CookieSession, "mixed into Merb::Controller" do
-  include Merb::Test::CookiesHelper
-  
-  before(:all) { @controller_klass = Merb::Test::Fixtures::Controllers::SessionsController }
-  
-  it "should represent the controller session" do
-    controller = dispatch_to(@controller_klass, :index)
-    controller.body.should == "cookie"
-    controller.request.session.should be_kind_of(Merb::CookieSession)
-  end
-  
-  it "should store and retrieve session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-      controller.request.session[:foo].should == "cookie"
-    
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == "cookie"
-    end
-  end
-  
-  it "should allow regeneration of the session" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-      controller = dispatch_to(@controller_klass, :regenerate)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == "cookie"
-    end    
-  end
-    
-  it "shouldn't allow tampering with cookie data" do
-    with_cookies(@controller_klass) do |cookie_jar|
-      controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-      cookie_data, cookie_checksum = controller.cookies[Merb::Request._session_id_key].split('--')
-      cookie_data = 'tampered-with-data'
-      cookie_jar[Merb::Request._session_id_key] = "#{cookie_data}--#{cookie_checksum}"
-      controller = dispatch_to(@controller_klass, :retrieve)
-      lambda { controller.request.session }.should raise_error(Merb::CookieSession::TamperedWithCookie)
-    end
-  end
-    
-  it "shouldn't allow tampering with cookie fingerprints" do
-    with_cookies(@controller_klass) do |cookie_jar|
-      controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-      cookie_data, cookie_checksum = controller.cookies[Merb::Request._session_id_key].split('--')
-      cookie_checksum = 'tampered-with-checksum'
-      cookie_jar[Merb::Request._session_id_key] = "#{cookie_data}--#{cookie_checksum}"
-      controller = dispatch_to(@controller_klass, :retrieve)
-      lambda { controller.request.session }.should raise_error(Merb::CookieSession::TamperedWithCookie)
-    end
-  end
-
-  it "should set cookie domain to default_cookie_domain if set" do
-    controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-    cookie = extract_cookies(controller.headers).sort[0]
-    cookie.should match(/_session_id=/)
-    cookie.should match(/domain=.localhost.com/)
-  end
-  
-end
diff --git a/spec/public/session/memcached_session_spec.rb b/spec/public/session/memcached_session_spec.rb
deleted file mode 100644
index 70e9f2e..0000000
--- a/spec/public/session/memcached_session_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb(:session_store => "memcache")
-
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-require 'memcache'
-Merb::MemcacheSession.store = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })
-
-begin
-  Merb::MemcacheSession.store.stats  
-rescue MemCache::MemCacheError
-  puts "\nWarning: no connection to MemCache server at 127.0.0.1:11211 - some specs will fail!\n\n"
-end
-
-describe Merb::MemcacheSession do
-  
-  before do 
-    @session_class = Merb::MemcacheSession
-    @session = @session_class.generate
-  end
-  
-  it_should_behave_like "All session-store backends"
-  
-  it "should have a session_store_type class attribute" do
-    @session.class.session_store_type.should == :memcache
-  end
-  
-end
-
-describe Merb::MemcacheSession, "mixed into Merb::Controller" do
-  
-  before(:all) { @session_class = Merb::MemcacheSession }
-  
-  it_should_behave_like "All session-stores mixed into Merb::Controller"
-  
-end
diff --git a/spec/public/session/memory_session_spec.rb b/spec/public/session/memory_session_spec.rb
deleted file mode 100644
index 382bdab..0000000
--- a/spec/public/session/memory_session_spec.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb(:session_store => "memory")
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-describe Merb::MemorySession, "container" do
-
-  it "should always generate unique session" do
-    # Fix session id generation
-    Merb::SessionMixin.stub!(:rand_uuid).and_return(1, 1, 2)
-
-    s1 = Merb::MemorySession.generate
-    s1.store.store_session(s1.session_id, {:foo => 'bar'})
-    s1.session_id.should eql 1
-
-    s2 = Merb::MemorySession.generate
-    s2.session_id.should eql 2
-    # Cleanup
-    s1.store.delete_session(1)
-    s2.store.delete_session(2)
-  end
-
-  it "should raise exception if unable to generate unique ID" do
-    # Fix session id generation
-    Merb::SessionMixin.stub!(:rand_uuid).and_return(1, 1)
-
-    s1 = Merb::MemorySession.generate
-    s1.store.store_session(s1.session_id, {:foo => 'bar'})
-
-    lambda { s2 = Merb::MemorySession.generate }.should raise_error
-
-    s1.store.delete_session(1)
-  end
-end
-
-describe Merb::MemorySession do
-  
-  before do 
-    @session_class = Merb::MemorySession
-    @session = @session_class.generate
-  end
-  
-  it_should_behave_like "All session-store backends"
-  
-  it "should have a session_store_type class attribute" do
-    @session.class.session_store_type.should == :memory
-  end
-  
-end
-
-describe Merb::MemorySession, "mixed into Merb::Controller" do
-
-  before(:all) { @session_class = Merb::MemorySession }
-  
-  it_should_behave_like "All session-stores mixed into Merb::Controller"
-
-end
diff --git a/spec/public/session/multiple_sessions_spec.rb b/spec/public/session/multiple_sessions_spec.rb
deleted file mode 100644
index bb74ec2..0000000
--- a/spec/public/session/multiple_sessions_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb(:session_stores => ["cookie", "memory", "memcache"], :session_secret_key => "session-secret-key-here")
-
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-require 'memcache'
-Merb::MemcacheSession.store = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })
-
-begin
-  Merb::MemcacheSession.store.stats  
-rescue MemCache::MemCacheError
-  puts "\nWarning: no connection to MemCache server at 127.0.0.1:11211 - some specs will fail!\n\n"
-end
-
-describe "An app with multiple session stores configured" do
-  
-  before(:all) { @controller_klass = Merb::Test::Fixtures::Controllers::MultipleSessionsController }
-  
-  it "should store cookie-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_cookie)
-      controller.request.session(:cookie)[:foo].should == "cookie-bar"
-      controller.request.session[:foo].should == "cookie-bar" # defaults to the first registered store
-    end
-  end
-  
-  it "should retrieve cookie-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_cookie)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session(:cookie)[:foo].should == "cookie-bar"
-      controller.request.session[:foo].should == "cookie-bar" # defaults to the first registered store
-    end
-  end
-  
-  it "should store memory-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_memory)
-      controller.request.session(:memory)[:foo].should == "memory-bar"
-    end
-  end
-  
-  it "should retrieve memory-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_memory)
-      controller = dispatch_to(@controller_klass, :retrieve)    
-      controller.request.session(:memory)[:foo].should == "memory-bar"
-    end
-  end
-  
-
-  
-  it "should store memcache-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_memcache)
-      controller.request.session(:memcache)[:foo].should == "memcache-bar"
-    end
-  end
-  
-  it "should retrieve memcache-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_memcache)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session(:memcache)[:foo].should == "memcache-bar"
-    end
-  end
-   
-  # TODO - _session_id cookies are clobbered atm - so this doesn't work yet
-  # it "should allow you to use them simultaneously" do
-  #   with_cookies(@controller_klass) do
-  #     controller = dispatch_to(@controller_klass, :store_in_multiple)
-  #     controller.request.session(:cookie)[:foo].should == "cookie-baz"
-  #     
-  #     controller = dispatch_to(@controller_klass, :retrieve)
-  #     controller.request.session(:cookie)[:foo].should =="cookie-baz"
-  #     controller.request.session(:memory)[:foo].should == "memory-baz"  
-  #     controller.request.session(:memcache)[:foo].should == "memcache-baz"
-  #   end
-  # end
-    
-end
\ No newline at end of file
diff --git a/spec/public/session/no_session_spec.rb b/spec/public/session/no_session_spec.rb
deleted file mode 100644
index 043a70d..0000000
--- a/spec/public/session/no_session_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-describe "An app without sessions enabled" do
-  
-  it "should raise an exception when accessing request.session" do
-    lambda {
-      controller = dispatch_to(Merb::Test::Fixtures::Controllers::SessionsController, :index)
-    }.should raise_error(Merb::SessionMixin::NoSessionContainer)
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/session/session_shared.rb b/spec/public/session/session_shared.rb
deleted file mode 100644
index ddaf1e3..0000000
--- a/spec/public/session/session_shared.rb
+++ /dev/null
@@ -1,109 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-# The Merb::Session module gets mixed into Merb::SessionContainer to allow 
-# app-level functionality (usually found in app/models/merb/session.rb)
-module Merb
-  module Session
-    
-    def awesome?
-      self[:foo] == 'awesome'
-    end
-    
-  end
-end
-
-describe "All session-store backends", :shared => true do
-  
-  it "should be instanciated using the 'generate' method" do
-    @session_class.generate.should be_kind_of(@session_class)
-  end
-      
-  it "should store the session_id" do
-    @session.session_id.should match(/^[0-9a-f]{32}$/)
-  end
-  
-  it "should have bracket accessors for setting data" do
-    @session.should respond_to(:[]=)
-    @session.should respond_to(:[])
-    @session[:foo] = 'bar'
-    @session[:foo].should == 'bar'
-  end
-
-end
-
-describe "All session-stores mixed into Merb::Controller", :shared => true do
-  include Merb::Test::CookiesHelper
-  
-  before(:all) { @controller_klass = Merb::Test::Fixtures::Controllers::SessionsController }
-  
-  it "should represent the controller session" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index)
-      controller.request.session.should be_kind_of(@session_class)
-    end
-  end
-  
-  it "should store session data" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller.request.session[:foo].should == session_store_type
-      cookie_header = extract_cookies(controller.headers).first
-      cookie_header.should_not match(/expires/) # sessions expire when browser quits
-    end
-  end
-  
-  it "should retrieve session data" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == session_store_type
-    end    
-  end
-  
-  it "should allow regeneration of the session" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller = dispatch_to(@controller_klass, :regenerate)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == session_store_type
-    end    
-  end
-  
-  it "should allow the session to be destroyed" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == session_store_type
-      
-      controller = dispatch_to(@controller_klass, :destroy)
-      controller.request.session.should be_empty
-      cookie_header = extract_cookies(controller.headers).first
-      cookie_header.should match(/_session_id=;/)
-      cookie_header.should match(/01-Jan-1970/)
-    end
-  end
-  
-  it "should not set the Set-Cookie header when the session(_id) didn't change" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller.headers["Set-Cookie"].should_not be_blank
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.headers["Set-Cookie"].should be_blank
-    end
-  end
-  
-  it "should have mixed in Merb::Session methods" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => 'awesome')
-      controller.request.session.should respond_to(:awesome?)
-      controller.request.session.should be_awesome
-    end
-  end
-    
-end
diff --git a/spec/public/session/spec_helper.rb b/spec/public/session/spec_helper.rb
deleted file mode 100644
index 3c3eef9..0000000
--- a/spec/public/session/spec_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-require File.expand_path(File.join(File.dirname(__FILE__), "session_shared"))
diff --git a/spec/public/template/template_spec.rb b/spec/public/template/template_spec.rb
deleted file mode 100644
index 7bf4d94..0000000
--- a/spec/public/template/template_spec.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-# ==== Public Template API
-# Merb::Template.register_extensions(engine<Class>, extenstions<Array[String]>)
-#
-# ==== Semipublic Template API
-# Merb::Template.engine_for(path<String>)
-# Merb::Template.template_name(path<String>)
-# Merb::Template.inline_template(path<String>, mod<Module>)
-#
-# ==== Requirements for a new Template Engine
-# A Template Engine must have at least a single class method called compile_template
-# with the following parameters:
-# * path<String>:: the full path to the template being compiled
-# * name<String>:: the name of the method that will be inlined
-# * mod<Module>:: the module that the method will be inlined into
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-
-# A small structure to hold the templates so we can test the templating system in isolation
-# from the framework
-
-module Merb::Test::Fixtures
-  # This is a fake templating engine that just copies the text of the template
-  # exactly from the file
-  
-  class MyTemplateEngine
-    
-    def self.compile_template(io, name, locals, mod)
-      text = io.read
-      table = { "\r"=>"\\r", "\n"=>"\\n", "\t"=>"\\t", '"'=>'\\"', "\\"=>"\\\\" }      
-      text = (text.split("\n").map {|x| '"' + (x.gsub(/[\r\n\t"\\]/) { |m| table[m] }) + '"'}).join(" +\n")
-      mod.class_eval <<-EOS, File.expand_path(io.path)
-        def #{name}
-          #{text}
-        end
-      EOS
-    end
-    
-    module Mixin
-    end
-  end
-
-  module MyHelpers
-  end
-
-  class Environment
-    include MyHelpers
-  end
-end
-
-describe Merb::Template do
-  
-  # @public
-  it "should accept template-type registrations via #register_extensions" do
-    Merb::Template.register_extensions(Merb::Test::Fixtures::MyTemplateEngine, %w[myt])
-    Merb::Template.engine_for("foo.myt").should == Merb::Test::Fixtures::MyTemplateEngine
-    Merb::Template.template_extensions.should include("myt")
-  end
-  
-  # @semipublic
-  
-  def rendering_template(template_path)
-    Merb::Template.inline_template(File.open(template_path), [], Merb::Test::Fixtures::MyHelpers)
-    Merb::Test::Fixtures::Environment.new.
-      send(Merb::Template.template_name(template_path))  
-  end
-  alias_method :render_template, :rendering_template
-  
-  it "should compile and inline templates via #inline methods for custom languages" do
-    template_path = File.dirname(__FILE__) / "templates" / "template.html.myt"
-    rendering_template(template_path).should == "Hello world!"
-  end
-  
-  it "should compile and inline templates via #inline_template for erubis" do
-    template_path = File.dirname(__FILE__) / "templates" / "template.html.erb"
-    rendering_template(template_path).should == "Hello world!"
-  end
-  
-  it "should compile and inline templates that comes through via VirtualFile" do
-    Merb::Template.inline_template(VirtualFile.new("Hello", 
-      File.dirname(__FILE__) / "templates" / "template.html.erb"), 
-      [],
-      Merb::Test::Fixtures::MyHelpers)
-      
-    res = Merb::Test::Fixtures::Environment.new.
-      send(Merb::Template.template_name(File.dirname(__FILE__) / "templates" / "template.html.erb"))
-      
-    res.should == "Hello"
-  end
-  
-  it "should know how to correctly report errors" do
-    template_path = File.dirname(__FILE__) / "templates" / "error.html.erb"
-    running { render_template(template_path) }.should raise_error(NameError, /`foo'/)
-    begin
-      render_template(template_path)
-    rescue Exception => e
-      e.backtrace.first.match(/\/([^:\/]*:\d*)/)[1].should == "error.html.erb:2"
-    end
-  end
-  
-  it "should find the full template name for a path via #template_for" do
-    template_path = File.dirname(__FILE__) / "templates" / "template.html.erb"
-    name = Merb::Template.inline_template(File.open(template_path), [], Merb::Test::Fixtures::MyHelpers)
-    Merb::Test::Fixtures::Environment.new.should respond_to(name)
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/template/templates/error.html.erb b/spec/public/template/templates/error.html.erb
deleted file mode 100644
index 9328606..0000000
--- a/spec/public/template/templates/error.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-Hello
-<%= foo %>
\ No newline at end of file
diff --git a/spec/public/template/templates/template.html.erb b/spec/public/template/templates/template.html.erb
deleted file mode 100644
index 6769dd6..0000000
--- a/spec/public/template/templates/template.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello world!
\ No newline at end of file
diff --git a/spec/public/template/templates/template.html.myt b/spec/public/template/templates/template.html.myt
deleted file mode 100644
index 6769dd6..0000000
--- a/spec/public/template/templates/template.html.myt
+++ /dev/null
@@ -1 +0,0 @@
-Hello world!
\ No newline at end of file
diff --git a/spec/public/test/20_multipart_request_helper_spec.rb b/spec/public/test/20_multipart_request_helper_spec.rb
deleted file mode 100644
index a3c0f1d..0000000
--- a/spec/public/test/20_multipart_request_helper_spec.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-require "merb-core/two-oh"
-
-startup_merb(:log_level => :fatal)
-
-Dir[File.join(File.dirname(__FILE__), "controllers/**/*.rb")].each do |f|
-  require f
-end
-
-describe Merb::Test::MultipartRequestHelper do
-
-  describe "#dispatch_multipart_to" do
-
-    before(:all) do 
-      @controller_klass = Merb::Test::DispatchController
-    end
-
-    it "should dispatch to the given controller and action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-
-      dispatch_multipart_to(@controller_klass, :index)    
-    end
-
-    it "should dispatch to the given controller and action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_multipart_to(@controller_klass, :show, :name => "Fred")
-      controller.params[:name].should == "Fred"
-    end
-
-    it "should handle a file object when used as a param" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        controller = dispatch_multipart_to(@controller_klass, :show, :my_file => file)
-        file_params = controller.params[:my_file]
-        file_params[:content_type].should == "text/plain"
-        file_params[:size].should == File.size(file_name)
-        file_params[:tempfile].should be_a_kind_of(Tempfile)
-        file_params[:filename].should == "multipart_upload_text_file.txt"
-      end
-    end
-  end
-
-  describe "#multipart_post" do
-    before(:each) do
-      Merb::Router.prepare do
-        resources :spec_helper_controller
-      end
-    end
-  
-    it "should post to the create action with params" do
-      resp = multipart_post("/spec_helper_controller", :name => "Harry")
-      JSON(resp.body.to_s)["name"].should == "Harry"
-    end
-  
-    it "should upload a file to the action using multipart" do
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        resp = multipart_post("/spec_helper_controller", :my_file => file)
-        file_params = JSON(resp.body.to_s)["my_file"]
-        file_params["content_type"].should == "text/plain"
-        file_params["size"].should == File.size(file_name)
-        file_params["tempfile"].should =~ /#<File:.*>/
-        file_params["filename"].should == "multipart_upload_text_file.txt"
-      end
-    end
-  
-  end
-
-  describe "#multipart_put" do
-    before(:each) do
-      Merb::Router.prepare do
-        resources :spec_helper_controller
-      end
-    end
-  
-    it "should put to the update action with multipart params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      resp = multipart_put("/spec_helper_controller/my_id", :name => "Harry")
-      
-      params = JSON(resp.body.to_s).to_mash
-      params[:name].should == "Harry"
-      params[:id].should   == "my_id"
-    end
-  
-    it "should upload a file to the action using multipart" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        resp = multipart_put("/spec_helper_controller/my_id", :my_file => file)
-        params = JSON(resp.body.to_s).to_mash
-        params[:id].should == "my_id"
-        file_params = params[:my_file]
-        file_params[:content_type].should == "text/plain"
-        file_params[:size].should == File.size(file_name)
-        file_params[:tempfile].should =~ /#<File:.*>/
-        file_params[:filename].should == "multipart_upload_text_file.txt"
-      end
-    end
-  end
-end
-
-module Merb::Test::MultipartRequestHelper
-  describe Param, '#to_multipart' do
-    it "should represent the key and value correctly" do
-      param = Param.new('foo', 'bar')
-      param.to_multipart.should == %(Content-Disposition: form-data; name="foo"\r\n\r\nbar\r\n)
-    end
-  end
-
-  describe FileParam, '#to_multipart' do
-    it "should represent the key, filename and content correctly" do
-      param = FileParam.new('foo', '/bar.txt', 'baz')
-      param.to_multipart.should == %(Content-Disposition: form-data; name="foo"; filename="/bar.txt"\r\nContent-Type: text/plain\r\n\r\nbaz\r\n)
-    end
-  end
-
-  describe Post, '#push_params(params) param parsing' do
-    before(:each) do
-      @fake_return_param = mock('fake return_param')
-    end
-
-    it "should create Param from params when param doesn't respond to read" do
-      params = { 'normal' => 'normal_param' }
-      Param.should_receive(:new).with('normal', 'normal_param').and_return(@fake_return_param)
-      Post.new.push_params(params)
-    end
-  
-    it "should create FileParam from params when param does response to read" do
-      file_param = mock('file param')
-      file_param.should_receive(:read).and_return('file contents')
-      file_param.should_receive(:path).and_return('file.txt')
-      params = { 'file' => file_param }
-      FileParam.should_receive(:new).with('file', 'file.txt', 'file contents').and_return(@fake_return_param)
-      Post.new.push_params(params)
-    end
-  end
-  
-  describe Post, '#to_multipart' do
-    it "should create a multipart request from the params" do
-      file_param = mock('file param')
-      file_param.should_receive(:read).and_return('file contents')
-      file_param.should_receive(:path).and_return('file.txt')
-      params = { 'file' => file_param, 'normal' => 'normal_param' }
-      multipart = Post.new(params)
-      query, content_type = multipart.to_multipart
-      content_type.should == "multipart/form-data, boundary=----------0xKhTmLbOuNdArY"
-      query.should == "------------0xKhTmLbOuNdArY\r\nContent-Disposition: form-data; name=\"file\"; filename=\"file.txt\"\r\nContent-Type: text/plain\r\n\r\nfile contents\r\n------------0xKhTmLbOuNdArY\r\nContent-Disposition: form-data; name=\"normal\"\r\n\r\nnormal_param\r\n------------0xKhTmLbOuNdArY--"
-    end
-  end
-end
diff --git a/spec/public/test/controller_matchers_spec.rb b/spec/public/test/controller_matchers_spec.rb
deleted file mode 100644
index 69d4b93..0000000
--- a/spec/public/test/controller_matchers_spec.rb
+++ /dev/null
@@ -1,422 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-
-startup_merb(:log_level => :fatal)
-
-class TestController < Merb::Controller
-  attr_accessor :redirect_to
-  def redirect_action; redirect(@redirect_to || "/"); end
-  def success_action; end
-  def missing_action; render("i can has errorz", :status => 404); end
-
-  def redirect_with_message_action
-    redirect(@redirect_to, :message => "okey dookey")
-  end
-end
-
-describe Merb::Test::Rspec::ControllerMatchers do
-  include Merb::Test::ControllerHelper
-  before(:each) do
-    Merb::Router.prepare do
-      match("/redirect").to(:controller => "test_controller", :action => "redirect_action")
-      match("/success").to(:controller => "test_controller", :action => "success_action")
-      match("/missing").to(:controller => "test_controller", :action => "missing_action")
-    end
-  end
-  
-  describe "#redirect" do
-    it "should work with the result of a dispatch_to helper call" do
-      dispatch_to(TestController, :redirect_action).should redirect
-    end
-    
-    it "should work with the result of a get helper call" do
-      get("/redirect").should redirect
-    end
-    
-    it "should work with a redirection code" do
-      dispatch_to(TestController, :redirect_action).status.should redirect
-    end
-  end
-  
-  describe "#redirect_to" do
-    it "should work with the result of a dispatch_to helper call" do
-      dispatch_to(TestController, :redirect_action).should redirect_to("/")
-      dispatch_to(TestController, :redirect_action){ |controller| controller.redirect_to = "http://example.com/" }.should redirect_to("http://example.com/")
-    end
-    
-    it "should work with the result of a get helper call" do
-      get("/redirect"){|controller| controller.redirect_to = "http://example.com/" }.should redirect_to("http://example.com/")
-    end
-
-    it 'takes :message option' do
-      dispatch_to(TestController, :redirect_with_message_action) { |controller|
-        controller.redirect_to = "http://example.com/"
-      }.should redirect_to("http://example.com/", :message => "okey dookey")
-    end
-  end
-  
-  describe "#respond_successfully" do
-    it "should work with the result of a dispatch_to helper call" do
-      dispatch_to(TestController, :success_action).should respond_successfully
-    end
-    
-    it "should work with the result of a get helper call" do
-      get("/success").should respond_successfully
-    end
-    
-    it "should work with a redirection code" do
-      dispatch_to(TestController, :success_action).status.should be_successful
-    end
-  end
-  
-  describe "#be_missing" do
-    it "should work with the result of a dispatch_to helper call" do
-      dispatch_to(TestController, :missing_action).should be_missing
-    end
-    
-    it "should work with the result of a get helper call" do
-      get("/missing").should be_client_error
-    end
-    
-    it "should work with a redirection code" do
-      dispatch_to(TestController, :missing_action).status.should be_missing
-    end
-  end
-end
-
-module Merb::Test::Rspec
-  module ControllerMatchers
-    class RedirectableTarget
-      attr_accessor :status, :headers
-      def initialize; @headers = {}; end
-    end
-    
-    describe BeRedirect do
-      before(:each) do
-        @target = RedirectableTarget.new
-      end
-      
-      it "should match a 301 'Moved Permanently' redirect code" do
-        BeRedirect.new.matches?(301).should be_true
-      end
-      
-      it "should match a 302 'Found' redirect code" do
-        BeRedirect.new.matches?(302).should be_true
-      end
-      
-      it "should match a 303 'See Other' redirect code" do
-        BeRedirect.new.matches?(303).should be_true
-      end
-      
-      it "should match a 304 'Not Modified' redirect code" do
-        BeRedirect.new.matches?(304).should be_true
-      end
-      
-      it "should match a 307 'Temporary Redirect' redirect code" do
-        BeRedirect.new.matches?(307).should be_true
-      end
-      
-      it "should match a target with a valid redirect code" do
-        @target.status = 301
-        
-        BeRedirect.new.matches?(@target).should be_true
-      end
-      
-      it "should not match a target with an unused redirect code" do
-        @target.status = 399
-        
-        BeRedirect.new.matches?(@target).should_not be_true
-      end
-      
-      it "should not match a target with a non redirect code" do
-        @target.status = 200
-        
-        BeRedirect.new.matches?(@target).should_not be_true
-      end
-      
-      describe "#failure_message" do
-        it "should be 'expected to redirect' when the target is a status code" do
-          matcher = BeRedirect.new
-          matcher.matches?(200)
-          matcher.failure_message.should == "expected to redirect"
-        end
-        
-        it "should be 'expected Foo#bar to redirect' when the target's controller is Foo and action is bar" do
-          matcher = BeRedirect.new
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          matcher.matches?(@target)
-          matcher.failure_message.should == "expected Foo#bar to redirect"
-        end
-      end
-      
-      describe "#negative_failure_message" do
-        it "should be 'expected not to redirect' when the target is a status code" do
-          matcher = BeRedirect.new
-          matcher.matches?(200)
-          matcher.negative_failure_message.should == "expected not to redirect"
-        end
-        
-        it "should be 'expected Foo#bar to redirect' when the target's controller is Foo and action is bar" do
-          matcher = BeRedirect.new
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          matcher.matches?(@target)
-          matcher.negative_failure_message.should == "expected Foo#bar not to redirect"
-        end
-      end
-    end
-    
-    describe "redirect_to" do
-      before(:each) do
-        @target = RedirectableTarget.new
-      end
-      
-      it "should match a target if the status code is 300 level and the locations match" do
-        @target.status = 301
-        @target.headers['Location'] = "http://example.com/"
-
-        @target.should redirect_to("http://example.com/")
-      end
-      
-      it "should not match a target if the status code is not 300 level but the locations match" do
-        @target.status = 404
-        @target.headers['Location'] = "http://example.com/"
-
-        @target.should_not redirect_to("http://example.com/")
-      end
-      
-      it "should not match a target if the status code is 300 level but the locations do not match" do
-        @target.status = 301
-        @target.headers['Location'] = "http://merbivore.com/"
-
-        @target.should_not redirect_to("http://example.com/")
-      end
-      
-      describe "#failure_message" do
-        it "should be 'expected Foo#bar to redirect to " \
-           "<http://expected.com/>, but was <http://target.com/>' " \
-           "when the expected url is http://expected.com/ and the " \
-           "target url is http://target.com/" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 301
-          @target.headers['Location'] = "http://target.com/"
-          
-          lambda { @target.should redirect_to("http://expected.com/") }.
-            should fail_with("Expected Foo#bar to redirect to " \
-                             "<http://expected.com/>, but it " \
-                             "redirected to <http://target.com/>")
-        end
-        
-        it "should be 'expected Foo#bar to redirect, but there was " \
-           "no redirection' when the target is not redirected" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 200
-          @target.headers['Location'] = "http://target.com/"
-          
-          lambda { @target.should redirect_to("http://expected.com/")}.
-            should fail_with("Expected Foo#bar to be a redirect, " \
-                             "but it returned status code 200.")
-        end
-      end
-      
-      describe "#negative_failure_message" do
-        it "should be 'expected Foo#bar not to redirect to " \
-           "<http://expected.com/>, but it did anyways" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 302
-          @target.headers['Location'] = "http://expected.com/"
-          
-          lambda { @target.should_not redirect_to("http://expected.com/") }.
-            should fail_with("Expected Foo#bar not to redirect to " \
-                             "<http://expected.com/> but it did.")
-        end
-      end
-    end
-    
-    describe "be_successful" do
-      before(:each) do
-        @target = RedirectableTarget.new
-      end
-      
-      it "should match a target with a 200 'OK' status code" do
-        200.should be_successful
-      end
-      
-      it "should match a target with a 201 'Created' status code" do
-        201.should be_successful
-      end
-      
-      it "should match a target with a 202 'Accepted' status code" do
-        202.should be_successful
-      end
-      
-      it "should match a target with a 203 'Non-Authoritative Information' status code" do
-        203.should be_successful
-      end
-      
-      it "should match a target with a 204 'No Content' status code" do
-        204.should be_successful
-      end
-      
-      it "should match a target with a 205 'Reset Content' status code" do
-        205.should be_successful
-      end
-      
-      it "should match a target with a 206 'Partial Content' status code" do
-        206.should be_successful
-      end
-      
-      it "should match a target with a 207 'Multi-Status' status code" do
-        207.should be_successful
-      end
-      
-      it "should not match a target with an unused 200 level status code" do
-        299.should_not be_successful
-      end
-      
-      it "should not match a target with a non 200 level status code" do
-        301.should_not be_successful
-      end
-      
-      describe "#failure_message" do
-        it "should be 'expected to be successful but was 300' when the target is status code 300" do
-          lambda { 300.should be_successful }.should fail_with(
-            "Expected status code to be successful, but it was 300")
-        end
-        
-        it "should be 'expected Foo#bar to be successful but was 404' when the target is controller-ish" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 404
-          
-          lambda { @target.should be_successful }.
-            should fail_with("Expected Foo#bar to be successful, " \
-                             "but it returned a 404")
-        end
-      end
-      
-      describe "#negative_failure_message" do
-        it "should be 'expected not to be successful but it was' when the target is a 200 status code" do
-          
-          lambda { 302.should be_successful }.
-            should fail_with("Expected status code to be successful, " \
-                             "but it was 302")
-        end
-        
-        it "should be 'expected Foo#bar not to be successful but it was 200' when the target is controller-ish" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 200
-          
-          lambda { @target.should_not be_successful }.
-            should fail_with("Expected Foo#bar not to be successful, " \
-                             "but it returned a 200")
-        end
-      end
-    end
-    
-    describe "be_missing" do
-      before(:each) do
-        @target = RedirectableTarget.new
-      end
-      
-      it "should match a 400 'Bad Request'" do
-        400.should be_missing
-      end
-      
-      it "should match a 401 'Unauthorized'" do
-        401.should be_missing
-      end
-      
-      it "should match a 403 'Forbidden'" do
-        402.should be_missing
-      end
-      
-      it "should match a 404 'Not Found'" do
-        404.should be_missing
-      end
-      
-      it "should match a 409 'Conflict'" do
-        409.should be_missing
-      end
-      
-      it "should match a target with a valid client side error code" do
-        @target.status = 404
-        @target.should be_missing
-      end
-      
-      it "should not match a target with an unused client side error code" do
-        @target.status = 499
-        @target.should_not be_missing
-      end
-      
-      it "should not match a target with a non client side error code" do
-        @target.status = 200
-        @target.should_not be_missing
-      end
-      
-      describe "#failure_message" do
-        it "should be 'expected to be missing but was 300' when the target is status code 300" do
-          lambda { 300.should be_missing }.
-            should fail_with("Expected a missing error code, but got 300")
-        end
-        
-        it "should be 'expected Foo#bar to be successful but was 301' when the target is controller-ish" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 301
-          
-          lambda { @target.should be_missing }.
-            should fail_with("Expected Foo#bar to be missing, " \
-                             "but it returned a 301")
-        end
-      end
-      
-      describe "#negative_failure_message" do
-        it "should be 'expected not to be successful but it was' when the target is a 400 status code" do
-          
-          lambda { 400.should_not be_missing }.
-            should fail_with("Expected not to get a missing error code, " \
-                             "but got 400")
-        end
-        
-        it "should be 'expected Foo#bar not to be missing but it was 404' when the target is controller-ish" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 404
-          
-          lambda { @target.should_not be_missing }.
-            should fail_with("Expected Foo#bar not to be missing, " \
-                             "but it returned a 404")
-        end
-      end
-    end
-
-    describe Provide do
-      class ::TestController < Merb::Controller
-        provides :xml
-      end
-
-      it 'should match for formats a controller class provides' do
-        Provide.new( :xml ).matches?( TestController ).should be_true
-      end
-
-      it 'should match for formats a controller instance provides' do
-        t = TestController.new( fake_request )
-        Provide.new( :xml ).matches?( t ).should be_true
-      end
-
-      it 'should not match for formats a controller class does not provide' do
-        Provide.new( :yaml ).matches?( TestController ).should be_false
-      end
-
-      it 'should not match for formats a controller instance does not provide' do
-        t = TestController.new( fake_request )
-        Provide.new( :yaml ).matches?( t ).should be_false
-      end
-    end
-  end
-end
diff --git a/spec/public/test/controllers/controller_assertion_mock.rb b/spec/public/test/controllers/controller_assertion_mock.rb
deleted file mode 100644
index f157222..0000000
--- a/spec/public/test/controllers/controller_assertion_mock.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class Merb::Test::ControllerAssertionMock
-  
-  def self.called(action)
-    return action
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/test/controllers/dispatch_controller.rb b/spec/public/test/controllers/dispatch_controller.rb
deleted file mode 100644
index f74187c..0000000
--- a/spec/public/test/controllers/dispatch_controller.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class Merb::Test::DispatchController < Merb::Controller
-  
-  def index
-    Merb::Test::ControllerAssertionMock.called(:index)
-  end
-  
-  def show
-    Merb::Test::ControllerAssertionMock.called(:show)
-  end
-  
-end
\ No newline at end of file
diff --git a/spec/public/test/controllers/request_controller.rb b/spec/public/test/controllers/request_controller.rb
deleted file mode 100644
index e1e0141..0000000
--- a/spec/public/test/controllers/request_controller.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-module Merb::Test
-  class RequestController < Merb::Controller
-    
-    def request_method
-      "Method - #{request.method.to_s.upcase}"
-    end
-    
-    def document
-      '<html><body><div id="out"><div class="in">Hello</div></div></body></html>'
-    end
-    
-    def counter
-      value = (cookies[:counter] || 0).to_i + 1
-      cookies[:counter] = value
-      value
-    end
-    
-    def delete
-      cookies.delete(:counter)
-      "Delete"
-    end
-    
-    def domain
-      value = (cookies[:counter] || 0).to_i + 1
-      set_cookie :counter, value, :domain => "foo.example.org"
-      value
-    end
-    
-    def path
-      value = (cookies[:counter] || 0).to_i + 1
-      set_cookie :counter, value, :path => "/path/zomg"
-      value
-    end
-    
-    def expires
-      value = (cookies[:counter] || 0).to_i + 1
-      set_cookie :counter, value, :expires => Time.now
-      value
-    end
-    
-    def set
-      set_cookie :cookie, request.path, :path => request.path
-      "Setting"
-    end
-    
-    def get
-      cookies[:cookie]
-    end
-    
-    def domain_set
-      set_cookie :cookie, request.host, :domain => request.host
-      "SET"
-    end
-    
-    def domain_get
-      cookies[:cookie]
-    end
-    
-    def multiple
-      cookies[:one] = (cookies[:one] || 0).to_i + 1
-      cookies[:two] = (cookies[:two] || 0).to_i + 1
-      "#{cookies[:one]} - #{cookies[:two]}"
-    end
-    
-    # Don't actually set any cookies
-    def void
-      "Void"
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec/public/test/controllers/spec_helper_controller.rb b/spec/public/test/controllers/spec_helper_controller.rb
deleted file mode 100644
index 67050a3..0000000
--- a/spec/public/test/controllers/spec_helper_controller.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'json'
-class SpecHelperController < Merb::Controller
-  
-  def index
-    Merb::Test::ControllerAssertionMock.called(:index)
-  end
-  
-  def show
-    Merb::Test::ControllerAssertionMock.called(:show)
-  end
-  
-  def edit
-    Merb::Test::ControllerAssertionMock.called(:edit)
-  end
-  
-  def new
-    Merb::Test::ControllerAssertionMock.called(:new)
-  end
-  
-  def create
-    Merb::Test::ControllerAssertionMock.called(:create)
-    params.to_json
-  end
-  
-  def update
-    Merb::Test::ControllerAssertionMock.called(:update)
-    params.to_json
-  end
-  
-  def destroy
-    Merb::Test::ControllerAssertionMock.called(:destroy)
-  end  
-end
-
-module Namespaced
-  class SpecHelperController < Merb::Controller
-    def index
-      Merb::Test::ControllerAssertionMock.called(:index)
-    end
-  end
-end  
-        
diff --git a/spec/public/test/cookie_jar_spec.rb b/spec/public/test/cookie_jar_spec.rb
deleted file mode 100644
index 04bf58e..0000000
--- a/spec/public/test/cookie_jar_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-describe Merb::Test::Cookie do
-
-  describe "#valid?" do
-    before(:all) do
-      @cookie = Merb::Test::Cookie.new("path=/", ".example.org")
-    end
-
-    it "should return true for base domain" do
-      %w[example.org example.org/ example.org/some/path].each do |url|
-        @cookie.valid?(URI("http://#{url}")).should be_true
-      end
-    end
-
-    it "should return true for subdomains" do
-      %w[foo.example.org foo.example.org/ foo.example.org/some/path].each do |url|
-        @cookie.valid?(URI("http://#{url}")).should be_true
-      end
-    end
-  end
-
-end
diff --git a/spec/public/test/mock_request_helper_spec.rb b/spec/public/test/mock_request_helper_spec.rb
deleted file mode 100644
index ab66d02..0000000
--- a/spec/public/test/mock_request_helper_spec.rb
+++ /dev/null
@@ -1,269 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-startup_merb(:log_level => :fatal)
-
-Dir[File.join(File.dirname(__FILE__), "controllers/**/*.rb")].each do |f|
-  require f
-end
-
-describe Merb::Test::RequestHelper do
-  
-  describe Merb::Test::RequestHelper::CookieJar do
-    
-    it "should update its values from a request object" do
-      cookie_jar = Merb::Test::RequestHelper::CookieJar.new
-      cookie_jar.should be_empty
-      request = fake_request
-      request.cookies[:foo] = "bar+baz" # escaped by default
-      cookie_jar.update_from_request request
-      cookie_jar[:foo].should == 'bar baz'
-    end
-    
-  end  
-  
-  describe "#dispatch_to" do
-
-    before(:all) do
-      @controller_klass = Merb::Test::DispatchController
-    end
-
-    it "should dispatch to the given controller and action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-
-      dispatch_to(@controller_klass, :index)
-    end
-
-    it "should dispatch to the given controller and action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_to(@controller_klass, :show, :name => "Fred")
-      controller.params[:name].should == "Fred"
-    end
-
-    it "should dispatch to the given controller and action with the query string merged into the params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-      controller = dispatch_to(@controller_klass, :show, {:name => "Fred"}, {'QUERY_STRING' => "last_name=Jones&age=42"} )
-      
-      controller.params[:name].should == "Fred"
-      controller.params[:last_name].should == "Jones"
-      controller.params[:age].should == "42"   
-    end
-
-    it "should not hit the router to match its route" do
-      Merb::Router.should_not_receive(:match)
-      dispatch_to(@controller_klass, :index)
-    end
-    
-    it "merges :controller into params" do
-      controller = dispatch_to(@controller_klass, :show, :name => "Fred")
-      
-      controller.params[:controller].should == @controller_klass.name.to_const_path
-    end
-    
-    it "merges :action into params" do
-      controller = dispatch_to(@controller_klass, :show, :name => "Fred")
-      
-      controller.params[:action].should == "show"
-    end
-
-    it "should support setting request.raw_post" do
-      controller = dispatch_to(@controller_klass, :show, {}, {:post_body => 'some XML'})
-      controller.request.raw_post.should == 'some XML'
-    end
-  end
-  
-  describe "#dispatch_with_basic_authentication_to" do
-
-    before(:all) do
-      @controller_klass = Merb::Test::DispatchController
-    end
-
-    it "should dispatch to the given controller and action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-
-      dispatch_with_basic_authentication_to(@controller_klass, :index, "Fred", "secret")
-    end
-
-    it "should dispatch to the given controller and action with authentication token" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_with_basic_authentication_to(@controller_klass, :show, "Fred", "secret")
-
-      controller.request.env["X_HTTP_AUTHORIZATION"].should == "Basic #{Base64.encode64("Fred:secret")}"
-    end
-    
-    it "should dispatch to the given controller and action with authentication token and params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_with_basic_authentication_to(@controller_klass, :show, "Fred", "secret", :name => "Fred")
-
-      controller.request.env["X_HTTP_AUTHORIZATION"].should == "Basic #{Base64.encode64("Fred:secret")}"
-      controller.params[:name].should == "Fred"
-    end
-
-    it "should not hit the router to match its route" do
-      Merb::Router.should_not_receive(:match)
-      dispatch_with_basic_authentication_to(@controller_klass, :index, "Fred", "secret")
-    end
-  end
-
-  describe "#get" do
-    before(:each) do 
-      Merb::Router.prepare do
-        resources :spec_helper_controller
-        match("/:controller/:action/:custom").to(:controller => ":controller") 
-      end
-    end
-
-    it "should perform the index action when used with a get" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-      get("/spec_helper_controller")  
-    end
-
-    it "should perform the index action and have params available" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-      controller = get("/spec_helper_controller", :name => "Harry")
-      controller.params[:name].should == "Harry"    
-    end
-    
-    it "should perform the index action and have params available from the query string" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-      controller = get("/spec_helper_controller?last_name=Oswald&age=25", :name => "Harry")
-      controller.params[:name].should == "Harry"
-      controller.params[:last_name].should == "Oswald"
-      controller.params[:age].should == "25"
-    end
-
-    it "should evaluate in the context of the controller in the block" do
-      get("/spec_helper_controller") do |controller|
-        controller.class.should == SpecHelperController
-      end    
-    end
-
-    it "should allow for custom router params" do
-      controller = get("/spec_helper_controller/index/my_custom_stuff")
-      controller.params[:custom].should == "my_custom_stuff"    
-    end   
-
-    it "should get the show action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-      controller = get("/spec_helper_controller/my_id")
-      controller.params[:id].should == "my_id"    
-    end
-  end
-
-  describe "#post" do
-    before(:each) do
-      Merb::Router.prepare do
-        resources :spec_helper_controller
-      end
-    end
-
-    it "should post to the create action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      post("/spec_helper_controller")
-    end
-
-    it "should post to the create action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      controller = post("/spec_helper_controller", :name => "Harry")
-      controller.params[:name].should == "Harry"
-    end
-  end
-
-  describe "#put" do
-    before(:each) do
-      Merb::Router.prepare do
-        resources :spec_helper_controller
-      end
-    end
-    it "should put to the update action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      put("/spec_helper_controller/1")
-    end
-
-    it "should put to the update action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      controller = put("/spec_helper_controller/my_id", :name => "Harry")
-      controller.params[:name].should == "Harry"
-      controller.params[:id].should   == "my_id"
-    end
-  end
-
-  describe "#delete" do
-    before(:each) do
-      Merb::Router.prepare do
-        resources :spec_helper_controller
-      end
-    end
-    it "should put to the update action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:destroy)
-      delete("/spec_helper_controller/1")
-    end
-
-    it "should put to the update action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:destroy)
-      controller = delete("/spec_helper_controller/my_id", :name => "Harry")
-      controller.params[:name].should == "Harry"
-      controller.params[:id].should   == "my_id"
-    end
-  end
-  
-  describe "#request" do
-    before(:each) do 
-      Merb::Router.prepare do
-        namespace :namespaced do |namespaced|
-          namespaced.resources :spec_helper_controller
-        end
-      end
-    end
-    
-    it "should support setting request.raw_post" do
-      controller = mock_request("/namespaced/spec_helper_controller", {}, {:post_body => 'some XML'})
-      controller.request.raw_post.should == 'some XML'
-    end
-
-    it "should get namespaced index action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-      controller = mock_request("/namespaced/spec_helper_controller")
-      controller.class.should == Namespaced::SpecHelperController
-    end
-
-    it "should make the post body available in the request on deferred routing" do
-      Merb::Router.prepare do
-        match('/xmlrpc').defer_to do |request, params|
-          request.raw_post.should == 'XMLRPC request body'
-          {:controller => 'spec_helper_controller', :action => :index}
-        end
-      end
-
-      mock_request('/xmlrpc', {}, {:post_body => 'XMLRPC request body'})
-    end
-  end
-  
-end
-
-module Merb::Test::RequestHelper
-  describe FakeRequest, ".new(env = {}, req = StringIO.new)" do
-    it "should create request with default enviroment, minus rack.input" do
-      @mock = FakeRequest.new
-      @mock.env.except('rack.input').should == FakeRequest::DEFAULT_ENV
-    end
-
-    it "should override default env values passed in HTTP format" do
-      @mock = FakeRequest.new('HTTP_ACCEPT' => 'nothing')
-      @mock.env['HTTP_ACCEPT'].should == 'nothing'
-    end
-
-    it "should override default env values passed in symbol format" do
-      @mock = FakeRequest.new(:http_accept => 'nothing')
-      @mock.env['HTTP_ACCEPT'].should == 'nothing'
-    end
-
-    it "should set rack input to an empty StringIO" do
-      @mock = FakeRequest.new
-      @mock.env['rack.input'].should be_kind_of(StringIO)
-      @mock.env['rack.input'].read.should == ''
-    end
-  end
-end
diff --git a/spec/public/test/multipart_request_helper_spec.rb b/spec/public/test/multipart_request_helper_spec.rb
deleted file mode 100644
index fae34b5..0000000
--- a/spec/public/test/multipart_request_helper_spec.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-startup_merb(:log_level => :fatal)
-
-Dir[File.join(File.dirname(__FILE__), "controllers/**/*.rb")].each do |f|
-  require f
-end
-
-describe Merb::Test::MultipartRequestHelper do
-
-  describe "#dispatch_multipart_to" do
-
-    before(:all) do 
-      @controller_klass = Merb::Test::DispatchController
-    end
-
-    it "should dispatch to the given controller and action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-
-      dispatch_multipart_to(@controller_klass, :index)    
-    end
-
-    it "should dispatch to the given controller and action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_multipart_to(@controller_klass, :show, :name => "Fred")
-      controller.params[:name].should == "Fred"
-    end
-
-    it "should handle a file object when used as a param" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        controller = dispatch_multipart_to(@controller_klass, :show, :my_file => file)
-        file_params = controller.params[:my_file]
-        file_params[:content_type].should == "text/plain"
-        file_params[:size].should == File.size(file_name)
-        file_params[:tempfile].should be_a_kind_of(Tempfile)
-        file_params[:filename].should == "multipart_upload_text_file.txt"
-      end
-    end
-  end
-
-  describe "#multipart_post" do
-    before(:each) do
-      Merb::Router.prepare do
-        resources :spec_helper_controller
-      end
-    end
-  
-    it "should post to the create action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      multipart_post("/spec_helper_controller")
-    end
-  
-    it "should post to the create action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      controller = multipart_post("/spec_helper_controller", :name => "Harry")
-      controller.params[:name].should == "Harry"
-    end
-  
-    it "should upload a file to the action using multipart" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        controller = multipart_post("/spec_helper_controller", :my_file => file)
-        file_params = controller.params[:my_file]
-        file_params[:content_type].should == "text/plain"
-        file_params[:size].should == File.size(file_name)
-        file_params[:tempfile].should be_a_kind_of(Tempfile)
-        file_params[:filename].should == "multipart_upload_text_file.txt"
-      end
-    end
-  
-  end
-
-  describe "#multipart_put" do
-    before(:each) do
-      Merb::Router.prepare do
-        resources :spec_helper_controller
-      end
-    end
-    it "should put to the update action multipart" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      multipart_put("/spec_helper_controller/1")
-    end
-  
-    it "should put to the update action with multipart params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      controller = multipart_put("/spec_helper_controller/my_id", :name => "Harry")
-      controller.params[:name].should == "Harry"
-      controller.params[:id].should   == "my_id"
-    end
-  
-    it "should upload a file to the action using multipart" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        controller = multipart_put("/spec_helper_controller/my_id", :my_file => file)
-        controller.params[:id].should == "my_id"
-        file_params = controller.params[:my_file]
-        file_params[:content_type].should == "text/plain"
-        file_params[:size].should == File.size(file_name)
-        file_params[:tempfile].should be_a_kind_of(Tempfile)
-        file_params[:filename].should == "multipart_upload_text_file.txt"
-      end
-    end
-  end
-end
-
-module Merb::Test::MultipartRequestHelper
-  describe Param, '#to_multipart' do
-    it "should represent the key and value correctly" do
-      param = Param.new('foo', 'bar')
-      param.to_multipart.should == %(Content-Disposition: form-data; name="foo"\r\n\r\nbar\r\n)
-    end
-  end
-
-  describe FileParam, '#to_multipart' do
-    it "should represent the key, filename and content correctly" do
-      param = FileParam.new('foo', '/bar.txt', 'baz')
-      param.to_multipart.should == %(Content-Disposition: form-data; name="foo"; filename="/bar.txt"\r\nContent-Type: text/plain\r\n\r\nbaz\r\n)
-    end
-  end
-
-  describe Post, '#push_params(params) param parsing' do
-    before(:each) do
-      @fake_return_param = mock('fake return_param')
-    end
-
-    it "should create Param from params when param doesn't respond to read" do
-      params = { 'normal' => 'normal_param' }
-      Param.should_receive(:new).with('normal', 'normal_param').and_return(@fake_return_param)
-      Post.new.push_params(params)
-    end
-  
-    it "should create FileParam from params when param does response to read" do
-      file_param = mock('file param')
-      file_param.should_receive(:read).and_return('file contents')
-      file_param.should_receive(:path).and_return('file.txt')
-      params = { 'file' => file_param }
-      FileParam.should_receive(:new).with('file', 'file.txt', 'file contents').and_return(@fake_return_param)
-      Post.new.push_params(params)
-    end
-  end
-  
-  describe Post, '#to_multipart' do
-    it "should create a multipart request from the params" do
-      file_param = mock('file param')
-      file_param.should_receive(:read).and_return('file contents')
-      file_param.should_receive(:path).and_return('file.txt')
-      params = { 'file' => file_param, 'normal' => 'normal_param' }
-      multipart = Post.new(params)
-      query, content_type = multipart.to_multipart
-      content_type.should == "multipart/form-data, boundary=----------0xKhTmLbOuNdArY"
-      query.should == "------------0xKhTmLbOuNdArY\r\nContent-Disposition: form-data; name=\"file\"; filename=\"file.txt\"\r\nContent-Type: text/plain\r\n\r\nfile contents\r\n------------0xKhTmLbOuNdArY\r\nContent-Disposition: form-data; name=\"normal\"\r\n\r\nnormal_param\r\n------------0xKhTmLbOuNdArY--"
-    end
-  end
-end
diff --git a/spec/public/test/multipart_upload_text_file.txt b/spec/public/test/multipart_upload_text_file.txt
deleted file mode 100644
index 1875338..0000000
--- a/spec/public/test/multipart_upload_text_file.txt
+++ /dev/null
@@ -1 +0,0 @@
-File With Some Text In It For Testing Multipart Uploads
diff --git a/spec/public/test/request_helper_spec.rb b/spec/public/test/request_helper_spec.rb
deleted file mode 100644
index fd7020b..0000000
--- a/spec/public/test/request_helper_spec.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-startup_merb(:log_level => :fatal)
-
-require File.dirname(__FILE__) / "controllers/request_controller"
-
-module WithPathPrefixHelper
-  def with_path_prefix(prefix)
-    old_prefix = Merb::Config[:path_prefix]
-    Merb::Config[:path_prefix] = prefix
-    yield
-  ensure
-    Merb::Config[:path_prefix] = old_prefix
-  end
-end
-
-describe Merb::Test::RequestHelper do
-  include WithPathPrefixHelper
-
-  before(:each) do
-    Merb::Controller._default_cookie_domain = "example.com"
-
-    Merb::Router.prepare do
-      with(:controller => "merb/test/request_controller") do
-        match("/set/short/long/read").to(:action => "get")
-        match("/:action(/:junk)", :junk => ".*").register
-      end
-    end
-  end
-
-  it "should remove the path_prefix configuration option" do
-    with_path_prefix '/foo' do
-      visit("/foo/path").should have_body('1')
-    end
-  end
-  
-  it "should dispatch a request using GET by defalt" do
-    visit("/request_method").should have_body("Method - GET")
-  end
-  
-  it "should work with have_selector" do
-    visit("/document").should have_selector("div div")
-  end
-  
-  it "should work with have_xpath" do
-    visit("/document").should have_xpath("//div/div")
-  end
-  
-  it "should work with have_content" do
-    visit("/request_method").should contain("Method")
-  end
-  
-  it "should persist cookies across sequential cookie setting requests" do
-    visit("/counter").should have_body("1")
-    visit("/counter").should have_body("2")
-  end
-  
-  it "should persist cookies across requests that don't return any cookie headers" do
-    visit("/counter").should have_body("1")
-    visit("/void").should    have_body("Void")
-    visit('/counter').should have_body("2")
-  end
-  
-  it "should delete cookies from the jar" do
-    visit("/counter").should have_body("1")
-    visit("/delete").should  have_body("Delete")
-    visit("/counter").should have_body("1")
-  end
-  
-  it "should be able to disable the cookie jar" do
-    visit("/counter", :get, :jar => nil).should have_body("1")
-    visit("/counter", :get, :jar => nil).should have_body("1")
-    visit("/counter").should have_body("1")
-    visit("/counter").should have_body("2")
-  end
-  
-  it "should be able to specify separate jars" do
-    visit("/counter", :get, :jar => :one).should have_body("1")
-    visit("/counter", :get, :jar => :two).should have_body("1")
-    visit("/counter", :get, :jar => :one).should have_body("2")
-    visit("/counter", :get, :jar => :two).should have_body("2")
-  end
-
-  it 'should allow a cookie to be set' do
-    cookie = visit("/counter").headers['Set-Cookie']
-    visit("/delete")
-    visit("/counter", :get, :cookie => cookie).should have_body("2")
-  end
-  
-  it "should respect cookie domains when no domain is explicitly set" do
-    visit("http://example.com/counter").should     have_body("1")
-    visit("http://www.example.com/counter").should have_body("2")
-    visit("http://example.com/counter").should     have_body("3")
-    visit("http://www.example.com/counter").should have_body("4")
-  end
-  
-  it "should respect the domain set in the cookie" do
-    visit("http://example.org/domain").should     have_body("1")
-    visit("http://foo.example.org/domain").should have_body("1")
-    visit("http://example.org/domain").should     have_body("1")
-    visit("http://foo.example.org/domain").should have_body("2")
-  end
-  
-  it "should respect the path set in the cookie" do
-    visit("/path").should      have_body("1")
-    visit("/path/zomg").should have_body("1")
-    visit("/path").should      have_body("1")
-    visit("/path/zomg").should have_body("2")
-  end
-  
-  it "should use the most specific path cookie" do
-    visit("/set/short")
-    visit("/set/short/long")
-    visit("/set/short/long/read").should have_body("/set/short/long")
-  end
-  
-  it "should use the most specific path cookie even if it was defined first" do
-    visit("/set/short/long")
-    visit("/set/short")
-    visit("/set/short/long/read").should have_body("/set/short/long")
-  end
-  
-  it "should leave the least specific cookie intact when specifying a more specific path" do
-    visit("/set/short")
-    visit("/set/short/long/zomg/what/hi")
-    visit("/set/short/long/read").should have_body("/set/short")
-  end
-  
-  it "should use the most specific domain cookie" do
-    visit("http://test.com/domain_set")
-    visit("http://one.test.com/domain_set")
-    visit("http://one.test.com/domain_get").should have_body("one.test.com")
-  end
-  
-  it "should keep the less specific domain cookie" do
-    visit("http://test.com/domain_set").should be_successful
-    visit("http://one.test.com/domain_set").should be_successful
-    visit("http://test.com/domain_get").should have_body("test.com")
-  end
-  
-  it "should be able to handle multiple cookies" do
-    visit("/multiple").should have_body("1 - 1")
-    visit("/multiple").should have_body("2 - 2")
-  end
-  
-  it "should respect the expiration" do
-    visit("/expires").should have_body("1")
-    sleep(1)
-    visit("/expires").should have_body("1")
-  end
-  
-end
diff --git a/spec/public/test/route_helper_spec.rb b/spec/public/test/route_helper_spec.rb
deleted file mode 100644
index b28426c..0000000
--- a/spec/public/test/route_helper_spec.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-class TestController < Merb::Controller
-  def get(id = nil); end
-  def post; end
-end
-
-describe Merb::Test::RouteHelper do
-  include Merb::Test::RouteHelper
-  
-  before(:each) do
-    Merb::Router.prepare do
-      match("/").defer_to do |request, params|
-        { :controller => 'test_controller', :action => request.raw_post } unless request.raw_post.blank?
-      end
-      match("/", :method => :get).to(:controller => "test_controller", :action => "get").name(:getter)
-      match("/", :method => :post).to(:controller => "test_controller", :action => "post")
-      match("/:id").to(:controller => "test_controller", :action => "get").name(:with_id)
-      default_routes
-    end
-  end
-  
-  describe "#url" do
-    it "should use Merb::Router" do
-      url(:getter).should == "/"
-    end
-    
-    it "should work with a parameters hash" do
-      url(:with_id, :id => 123).should == "/123"
-    end
-    
-    it "should turn extra hash items into query params" do
-      generated_url = url(:getter, :id => 123, :color => 'red', :size => 'large')
-      lambda {
-        generated_url.match(/\bid=123\b/) &&
-        generated_url.match(/\bsize=large\b/) &&
-        generated_url.match(/\bcolor=red\b/)
-      }.call.should_not be_nil
-    end
-    
-    it "should remove items with nil values from query params" do
-      url(:getter, :color => nil, :size => 'large').should == "/?size=large"
-    end
-    
-    it "should remove items with nil values from query params when named route isn't specified" do
-      url(:controller => 'cont', :action => 'act', :color => nil, :size => 'large').should == "/cont/act?size=large"
-    end
-  end
-  
-  describe "#request_to" do
-    it "should GET if no method is given" do
-      request_to("/")[:action].should == "get"
-    end
-    
-    it "should return a hash" do
-      Hash.should === request_to("/")
-    end
-    
-    it "should contain the controller in the result" do
-      request_to("/")[:controller].should == "test_controller"
-    end
-    
-    it "should contain the action in the result" do
-      request_to("/")[:action].should == "get"
-    end
-    
-    it "should contain any parameters in the result" do
-      request_to("/123")[:id].should == "123"
-    end
-
-    it "should play nice with raw_post in deferred routing" do
-      request_to("/", :post, {:post_body => 'deferred'})[:action].should == 'deferred'
-    end
-  end
-end
diff --git a/spec/public/test/route_matchers_spec.rb b/spec/public/test/route_matchers_spec.rb
deleted file mode 100644
index c0ee874..0000000
--- a/spec/public/test/route_matchers_spec.rb
+++ /dev/null
@@ -1,168 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-startup_merb(:log_level => :fatal)
-
-class TestController < Merb::Controller
-  def get(id = nil); end
-  def post(version = nil); end
-end
-
-class IDish
-  attr_accessor :id
-  alias_method :to_param, :id
-
-  def initialize(id)
-    @id = id
-  end
-end
-
-describe Merb::Test::Rspec::RouteMatchers do
-  include Merb::Test::RouteHelper
-
-  before(:each) do
-    Merb::Router.prepare do
-      match(%r"/v(\d+\.\d+)", :method => :post).to(:controller => "test_controller", :action => "post", :version => "[1]")
-      match("/", :method => :get).to(:controller => "test_controller", :action => "get").name(:getter)
-      match("/", :method => :post).to(:controller => "test_controller", :action => "post")
-      identify :id do
-        match("/:id").to(:controller => "test_controller", :action => "get").name(:with_id)
-      end
-    end
-  end
-
-  describe "#route_to" do
-    it "should work with the request_to helper" do
-      request_to("/", :get).should route_to(TestController, :get)
-      request_to("/", :post).should_not route_to(TestController, :get)
-    end
-
-    it "should work with the url helper and ParamMatcher" do
-      idish = IDish.new(rand(1000).to_s)
-      
-      request_to(url(:with_id, idish)).should route_to(TestController, :get).with(idish)
-    end
-
-    it "should work with a negative ParamMatcher" do
-      request_to(url(:with_id, :id => 100)).should_not route_to(TestController, :get).with(:id => 1)
-    end
-
-    it "should work with a route containing a regexp" do
-      request_to("/v1.2", :post).should route_to(TestController, :post).with(:version => "1.2")
-      request_to("/v1.0", :post).should_not route_to(TestController, :post).with(:version => "3.14")
-    end
-  end
-
-  module Merb::Test::Rspec::RouteMatchers
-
-    describe RouteToMatcher do
-
-      it "should work with snake cased controllers" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "test_controller", :action => "get").should be_true
-      end
-
-      it "should work with camel cased controllers" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "TestController", :action => "get").should be_true
-      end
-
-      it "should work with symbol or string controller name" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "test_controller", :action => "get").should be_true
-        RouteToMatcher.new(TestController, :get).matches?(:controller => :test_controller, :action => :get)
-      end
-
-      it "should not pass if the controllers do not match" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "other_controller", :action => "get").should be_false
-      end
-
-      it "should not pass if the actions do not match" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "test_controller", :action => "post").should be_false
-      end
-
-      it "should not pass if the parameters do not the ParameterMatcher" do
-        route_matcher = RouteToMatcher.new(TestController, :get)
-        route_matcher.with(:id => "123")
-
-        route_matcher.matches?(:controller => "test_case", :action => "get", :id => "456").should be_false
-      end
-
-      describe "#with" do
-        it "should add a ParameterMatcher" do
-          ParameterMatcher.should_receive(:new).with(:id => "123")
-
-          route_matcher = RouteToMatcher.new(TestController, :get)
-          route_matcher.with(:id => "123")
-        end
-
-        it "should work with an empty expectation" do
-          ParameterMatcher.new({}).matches?(:param => "abc").should be_false
-        end
-      end
-
-      describe "#failure_message" do
-        it "should include the expected controller and action" do
-          matcher = RouteToMatcher.new(TestController, :any_action)
-          matcher.matches?(:controller => "target_controller", :action => "target_action")
-          matcher.failure_message.should include("TestController#any_action")
-        end
-
-        it "should include the target controller and action in camel case" do
-          matcher = RouteToMatcher.new(TestController, :any_action)
-          matcher.matches?(:controller => "target_controller", :action => "target_action")
-          matcher.failure_message.should include("TargetController#target_action")
-        end
-
-        it "should include the expected parameters" do
-          expected_parameters = {:id => '123', :page => '2'}
-          matcher = RouteToMatcher.new(TestController, :any_action)
-          matcher.with(expected_parameters)
-          matcher.matches?(:controller => "target_controller", :action => "target_action")
-          matcher.failure_message.should include(expected_parameters.inspect)
-        end
-
-        it "should include the actual paramters" do
-          expected_parameters, actual_parameters = {:id => '123', :page => '2'}, {:id => '2', :page => '321'}
-          matcher = RouteToMatcher.new(TestController, :any_action)
-          matcher.with(expected_parameters)
-          matcher.matches?(actual_parameters.merge(:controller => "test_controller", :action => "any_action"))
-          matcher.failure_message.should include(actual_parameters.inspect)
-        end
-      end
-
-      describe "#negative_failure_message" do
-        it "should include the expected controller and action" do
-          RouteToMatcher.new(TestController, :any_action).negative_failure_message.should include("TestController#any_action")
-        end
-      end
-    end
-
-    describe ParameterMatcher do
-      it "should work with a Hash as the parameter argument" do
-        ParameterMatcher.new(:param => "abc").matches?(:param => "abc").should be_true
-      end
-
-      it "should work with an object as the parameter argument" do
-        ParameterMatcher.new(IDish.new(1234)).matches?(:id => 1234).should be_true
-      end
-
-      describe "#failure_message" do
-        it "should include the expected parameters hash" do
-          parameter_hash = {:parent_id => "123", :child_id => "abc"}
-          ParameterMatcher.new(parameter_hash).failure_message.should include(parameter_hash.inspect)
-        end
-
-        it "should include the actual parameters hash" do
-          parameter_hash = {:parent_id => "123", :child_id => "abc"}
-          matcher = ParameterMatcher.new(:id => 123)
-          matcher.matches?(parameter_hash)
-          matcher.failure_message.should include(parameter_hash.inspect)
-        end
-      end
-
-      describe "#negative_failure_message" do
-        it "should include the expected parameters hash" do
-          parameter_hash = {:parent_id => "123", :child_id => "abc"}
-          ParameterMatcher.new(parameter_hash).negative_failure_message.should include(parameter_hash.inspect)
-        end
-      end
-    end
-  end
-end
diff --git a/spec/public/test/rspec_ext_spec.rb b/spec/public/test/rspec_ext_spec.rb
deleted file mode 100644
index 508c077..0000000
--- a/spec/public/test/rspec_ext_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-given "we set an ivar" do
-  @foo = 7
-end
-
-given "we set another ivar" do
-  @pi = 3.14
-end
-
-describe "a spec that reuses a given block", :given => "we set an ivar" do
-  it "sees the results of the given block" do
-    @foo.should == 7
-  end
-end
-
-describe "a spec that reuses many given blocks", :given => ["we set an ivar", "we set another ivar"] do
-  it "sees the results of the first given block" do
-    @foo.should == 7
-  end
-
-  it "sees the results of the second given block" do
-    @pi.should == 3.14
-  end
-end
-
-describe "a spec that does not reuse a given block" do
-  it "does not see the given block" do
-    @foo.should == nil
-  end
-end
\ No newline at end of file
diff --git a/spec/public/test/spec_helper.rb b/spec/public/test/spec_helper.rb
deleted file mode 100644
index 2088625..0000000
--- a/spec/public/test/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
\ No newline at end of file
diff --git a/spec/public/webrat/spec_helper.rb b/spec/public/webrat/spec_helper.rb
deleted file mode 100644
index 2088625..0000000
--- a/spec/public/webrat/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/Gemfile b/spec/public/webrat/test_app/Gemfile
deleted file mode 100644
index e69de29..0000000
diff --git a/spec/public/webrat/test_app/Rakefile b/spec/public/webrat/test_app/Rakefile
deleted file mode 100644
index a760c99..0000000
--- a/spec/public/webrat/test_app/Rakefile
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'rubygems'
-require 'rake/rdoctask'
-
-require 'merb-core'
-require 'merb-core/tasks/merb'
-
-include FileUtils
-
-# Load the basic runtime dependencies; this will include 
-# any plugins and therefore plugin rake tasks.
-init_env = ENV['MERB_ENV'] || 'rake'
-Merb.load_dependencies(:environment => init_env)
-     
-# Get Merb plugins and dependencies
-Merb::Plugins.rakefiles.each { |r| require r } 
-
-# Load any app level custom rakefile extensions from lib/tasks
-tasks_path = File.join(File.dirname(__FILE__), "lib", "tasks")
-rake_files = Dir["#{tasks_path}/*.rake"]
-rake_files.each{|rake_file| load rake_file }
-
-desc "Start runner environment"
-task :merb_env do
-  Merb.start_environment(:environment => init_env, :adapter => 'runner')
-end
-
-require 'spec/rake/spectask'
-require 'merb-core/test/tasks/spectasks'
-desc 'Default: run spec examples'
-task :default => 'spec'
-
-##############################################################################
-# ADD YOUR CUSTOM TASKS IN /lib/tasks
-# NAME YOUR RAKE FILES file_name.rake
-##############################################################################
diff --git a/spec/public/webrat/test_app/app/controllers/application.rb b/spec/public/webrat/test_app/app/controllers/application.rb
deleted file mode 100644
index 5ce39a0..0000000
--- a/spec/public/webrat/test_app/app/controllers/application.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class Application < Merb::Controller
-end
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/app/controllers/exceptions.rb b/spec/public/webrat/test_app/app/controllers/exceptions.rb
deleted file mode 100644
index 4fdb566..0000000
--- a/spec/public/webrat/test_app/app/controllers/exceptions.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-class Exceptions < Merb::Controller
-  
-  # handle NotFound exceptions (404)
-  def not_found
-    render :format => :html
-  end
-
-  # handle NotAcceptable exceptions (406)
-  def not_acceptable
-    render :format => :html
-  end
-
-end
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/app/controllers/testing.rb b/spec/public/webrat/test_app/app/controllers/testing.rb
deleted file mode 100644
index 81417d6..0000000
--- a/spec/public/webrat/test_app/app/controllers/testing.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-class Testing < Application
-
-  # ...and remember, everything returned from an action
-  # goes to the client...
-  def index
-    render
-  end
-  
-  def next
-    "<p>Got to next</p>"
-  end
-  
-  def show_form
-    render
-  end
-  
-  def submit_form
-    render(params.map do |param, value|
-      "<p>#{param}: #{value}</p>"
-    end.join("\n"))
-  end
-  
-end
diff --git a/spec/public/webrat/test_app/app/helpers/global_helpers.rb b/spec/public/webrat/test_app/app/helpers/global_helpers.rb
deleted file mode 100644
index 9c9e5aa..0000000
--- a/spec/public/webrat/test_app/app/helpers/global_helpers.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module Merb
-  module GlobalHelpers
-    # helpers defined here available to all views.  
-  end
-end
diff --git a/spec/public/webrat/test_app/app/helpers/testing_helper.rb b/spec/public/webrat/test_app/app/helpers/testing_helper.rb
deleted file mode 100644
index 9ee922a..0000000
--- a/spec/public/webrat/test_app/app/helpers/testing_helper.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module Merb
-  module TestingHelper
-
-  end
-end # Merb
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/app/models/user.rb b/spec/public/webrat/test_app/app/models/user.rb
deleted file mode 100644
index 97d82e8..0000000
--- a/spec/public/webrat/test_app/app/models/user.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# This is a default user class used to activate merb-auth.  Feel free to change from a User to 
-# Some other class, or to remove it altogether.  If removed, merb-auth may not work by default.
-#
-# Don't forget that by default the salted_user mixin is used from merb-more
-# You'll need to setup your db as per the salted_user mixin, and you'll need
-# To use :password, and :password_confirmation when creating a user
-#
-# see merb/merb-auth/setup.rb to see how to disable the salted_user mixin
-# 
-# You will need to setup your database and create a user.
-# class User
-#   include DataMapper::Resource
-#   
-#   property :id,     Serial
-#   property :login,  String
-#   
-# end
diff --git a/spec/public/webrat/test_app/app/views/exceptions/not_acceptable.html.erb b/spec/public/webrat/test_app/app/views/exceptions/not_acceptable.html.erb
deleted file mode 100644
index a7b7752..0000000
--- a/spec/public/webrat/test_app/app/views/exceptions/not_acceptable.html.erb
+++ /dev/null
@@ -1,63 +0,0 @@
-<div id="container">
-  <div id="header-container">
-    <img src="/images/merb.jpg" />
-    <!-- <h1>Mongrel + Erb</h1> -->
-    <h2>pocket rocket web framework</h2>
-    <hr />
-  </div>
-
-  <div id="left-container">
-    <h3>Exception:</h3>
-    <p><%= request.exceptions.first.message %></p>
-  </div>
-
-  <div id="main-container">
-    <h3>Why am I seeing this page?</h3>
-    <p>Merb couldn't find an appropriate content_type to return,
-      based on what you said was available via provides() and
-      what the client requested.</p>
-
-    <h3>How to add a mime-type</h3>
-    <pre><code>
-      Merb.add_mime_type :pdf, :to_pdf, %w[application/pdf], "Content-Encoding" => "gzip"
-    </code></pre>
-    <h3>What this means is:</h3>
-    <ul>
-      <li>Add a mime-type for :pdf</li>
-      <li>Register the method for converting objects to PDF as <code>#to_pdf</code>.</li>
-      <li>Register the incoming mime-type "Accept" header as <code>application/pdf</code>.</li>
-      <li>Specify a new header for PDF types so it will set <code>Content-Encoding</code> to gzip.</li>
-    </ul>
-
-    <h3>You can then do:</h3>
-    <pre><code>
-      class Foo < Application
-        provides :pdf
-      end
-    </code></pre>
-
-    <h3>Where can I find help?</h3>
-    <p>If you have any questions or if you can't figure something out, please take a
-      look at our <a href="http://merbivore.com/"> project page</a>,
-      feel free to come chat at irc.freenode.net, channel #merb,
-      or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
-      on Google Groups.</p>
-      
-    <h3>What if I've found a bug?</h3>
-    <p>If you want to file a bug or make your own contribution to Merb,
-      feel free to register and create a ticket at our
-      <a href="http://merb.lighthouseapp.com/">project development page</a>
-      on Lighthouse.</p>
-
-    <h3>How do I edit this page?</h3>
-    <p>You can change what people see when this happens by editing <tt>app/views/exceptions/not_acceptable.html.erb</tt>.</p> 
-
-  </div>
-
-  <div id="footer-container">
-    <hr />
-    <div class="left"></div>
-    <div class="right">© 2008 the merb dev team</div>
-    <p> </p>
-  </div>
-</div>
diff --git a/spec/public/webrat/test_app/app/views/exceptions/not_found.html.erb b/spec/public/webrat/test_app/app/views/exceptions/not_found.html.erb
deleted file mode 100644
index 42b41a8..0000000
--- a/spec/public/webrat/test_app/app/views/exceptions/not_found.html.erb
+++ /dev/null
@@ -1,47 +0,0 @@
-<div id="container">
-  <div id="header-container">
-    <img src="/images/merb.jpg" />
-    <!-- <h1>Mongrel + Erb</h1> -->
-    <h2>pocket rocket web framework</h2>
-    <hr />
-  </div>
-
-  <div id="left-container">
-    <h3>Exception:</h3>
-    <p><%= request.exceptions.first.message %></p>
-  </div>
-
-  <div id="main-container">
-    <h3>Welcome to Merb!</h3>
-    <p>Merb is a light-weight MVC framework written in Ruby.  We hope you enjoy it.</p>
-    
-    <h3>Where can I find help?</h3>
-    <p>If you have any questions or if you can't figure something out, please take a
-      look at our <a href="http://merbivore.com/"> project page</a>,
-      feel free to come chat at irc.freenode.net, channel #merb,
-      or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
-      on Google Groups.</p>
-      
-    <h3>What if I've found a bug?</h3>
-    <p>If you want to file a bug or make your own contribution to Merb,
-      feel free to register and create a ticket at our
-      <a href="http://merb.lighthouseapp.com/">project development page</a>
-      on Lighthouse.</p>
-
-    <h3>How do I edit this page?</h3>
-    <p>You're seeing this page because you need to edit the following files:
-      <ul>
-        <li>config/router.rb <strong><em>(recommended)</em></strong></li>
-        <li>app/views/exceptions/not_found.html.erb <strong><em>(recommended)</em></strong></li>
-        <li>app/views/layout/application.html.erb <strong><em>(change this layout)</em></strong></li>
-      </ul>
-    </p>
-  </div>
-
-  <div id="footer-container">
-    <hr />
-    <div class="left"></div>
-    <div class="right">© 2008 the merb dev team</div>
-    <p> </p>
-  </div>
-</div>
diff --git a/spec/public/webrat/test_app/app/views/layout/application.html.erb b/spec/public/webrat/test_app/app/views/layout/application.html.erb
deleted file mode 100644
index 4637ef2..0000000
--- a/spec/public/webrat/test_app/app/views/layout/application.html.erb
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
-  <head>
-    <title>Fresh Merb App</title>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <link rel="stylesheet" href="/stylesheets/master.css" type="text/css" media="screen" charset="utf-8" />
-  </head>
-  <body>
-    <%#= message[:notice] %>
-    <%= catch_content :for_layout %>
-  </body>
-</html>
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/app/views/testing/index.html.erb b/spec/public/webrat/test_app/app/views/testing/index.html.erb
deleted file mode 100644
index 5256b34..0000000
--- a/spec/public/webrat/test_app/app/views/testing/index.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-You're in index of the Testing controller.
-
-<a href="/testing/next">Next</a>
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/app/views/testing/show_form.html.erb b/spec/public/webrat/test_app/app/views/testing/show_form.html.erb
deleted file mode 100644
index a78e6be..0000000
--- a/spec/public/webrat/test_app/app/views/testing/show_form.html.erb
+++ /dev/null
@@ -1,6 +0,0 @@
-<%= form(:action => "/testing/submit_form") do %>
-  <%= text_field :name, :label => "Name" %>
-  <%= text_field :address, :label => "Address" %>
-  <%= check_box :truez, :label => "Tis truez" %>
-  <%= submit "Submit!" %>
-<% end =%>
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/config/database.yml b/spec/public/webrat/test_app/config/database.yml
deleted file mode 100644
index ba3a4f8..0000000
--- a/spec/public/webrat/test_app/config/database.yml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-# This is a sample database file for the DataMapper ORM
-development: &defaults
-  # These are the settings for repository :default
-  adapter:  sqlite3
-  database: sample_development.db
- 
-  # Add more repositories
-  # repositories:
-  #   repo1:
-  #     adapter:  sqlite3
-  #     database: sample_1_development.db
-  #   repo2:
-  #     ...
- 
-test:
-  <<:       *defaults
-  database: sample_test.db
- 
-  # repositories:
-  #   repo1:
-  #     database: sample_1_test.db
- 
-production:
-  <<:       *defaults
-  database: production.db
- 
-  # repositories:
-  #   repo1:
-  #     database: sample_production.db
- 
-rake:
-  <<: *defaults
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/config/environments/development.rb b/spec/public/webrat/test_app/config/environments/development.rb
deleted file mode 100644
index d6d4ab3..0000000
--- a/spec/public/webrat/test_app/config/environments/development.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-Merb.logger.info("Loaded DEVELOPMENT Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_templates] = true
-  c[:reload_classes] = true
-  c[:reload_time] = 0.5
-  c[:ignore_tampered_cookies] = true
-  c[:log_auto_flush ] = true
-  c[:log_level] = :debug
-
-  c[:log_stream] = STDOUT
-  c[:log_file]   = nil
-  # Or redirect logging into a file:
-  # c[:log_file]  = Merb.root / "log" / "development.log"
-}
diff --git a/spec/public/webrat/test_app/config/environments/production.rb b/spec/public/webrat/test_app/config/environments/production.rb
deleted file mode 100644
index 17a2d4b..0000000
--- a/spec/public/webrat/test_app/config/environments/production.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-Merb.logger.info("Loaded PRODUCTION Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = false
-  c[:reload_classes] = false
-  c[:log_level] = :error
-  
-  c[:log_file]  = Merb.root / "log" / "production.log"
-  # or redirect logger using IO handle
-  # c[:log_stream] = STDOUT
-}
diff --git a/spec/public/webrat/test_app/config/environments/rake.rb b/spec/public/webrat/test_app/config/environments/rake.rb
deleted file mode 100644
index 5e4b9a7..0000000
--- a/spec/public/webrat/test_app/config/environments/rake.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-Merb.logger.info("Loaded RAKE Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_classes]  = false
-  c[:log_auto_flush ] = true
-
-  c[:log_stream] = STDOUT
-  c[:log_file]   = nil
-  # Or redirect logging into a file:
-  # c[:log_file]  = Merb.root / "log" / "development.log"
-}
diff --git a/spec/public/webrat/test_app/config/environments/staging.rb b/spec/public/webrat/test_app/config/environments/staging.rb
deleted file mode 100644
index f5b5058..0000000
--- a/spec/public/webrat/test_app/config/environments/staging.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-Merb.logger.info("Loaded STAGING Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = false
-  c[:reload_classes]    = false
-  c[:log_level]         = :error
-
-  c[:log_file]  = Merb.root / "log" / "staging.log"
-  # or redirect logger using IO handle
-  # c[:log_stream] = STDOUT
-}
diff --git a/spec/public/webrat/test_app/config/environments/test.rb b/spec/public/webrat/test_app/config/environments/test.rb
deleted file mode 100644
index 671ec76..0000000
--- a/spec/public/webrat/test_app/config/environments/test.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-Merb.logger.info("Loaded TEST Environment...")
-Merb::Config.use { |c|
-  c[:testing]           = true
-  c[:exception_details] = true
-  c[:log_auto_flush ]   = true
-  # log less in testing environment
-  c[:log_level]         = :error
-
-  #c[:log_file]  = Merb.root / "log" / "test.log"
-  # or redirect logger using IO handle
-  c[:log_stream] = STDOUT
-}
diff --git a/spec/public/webrat/test_app/config/init.rb b/spec/public/webrat/test_app/config/init.rb
deleted file mode 100644
index 9d80d15..0000000
--- a/spec/public/webrat/test_app/config/init.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# Go to http://wiki.merbivore.com/pages/init-rb
- 
-::Gem.clear_paths; ::Gem.path.unshift(File.dirname(__FILE__) + "/../gems/")
-
-Merb::BootLoader.before_app_loads do
-  $:.push(Merb.framework_root / ".." / ".." / "merb-helpers" / "lib")
-  require 'merb-helpers'
-end
- 
-use_test :rspec
-use_template_engine :erb
-
-Merb::Config.use do |c|
-  c[:use_mutex] = false
-  c[:session_store] = 'cookie'  # can also be 'memory', 'memcache', 'container', 'datamapper
-  
-  # cookie session store configuration
-  c[:session_secret_key]  = 'aac0966e584824077b8c4e0442dca5a97f91d007'  # required for cookie session store
-  # c[:session_id_key] = '_session_id' # cookie session id key, defaults to "_session_id"
-end
- 
-Merb::BootLoader.before_app_loads do
-  # This will get executed after dependencies have been loaded but before your app's classes have loaded.
-end
- 
-Merb::BootLoader.after_app_loads do
-  # This will get executed after your app's classes have been loaded.
-end
diff --git a/spec/public/webrat/test_app/config/rack.rb b/spec/public/webrat/test_app/config/rack.rb
deleted file mode 100644
index 30dddb5..0000000
--- a/spec/public/webrat/test_app/config/rack.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-module Merb
-  module Rack
-
-    class DummyWare < ::Merb::Rack::Middleware
-
-      def call(env)
-        if env["PATH_INFO"] =~ /^\/dummy/
-          [200, {}, ['This is a dummy content']]
-        else
-          @app.call(env)
-        end
-      end
-    end
-  end
-end
-
-use Merb::Rack::DummyWare
-
-# use PathPrefix Middleware if :path_prefix is set in Merb::Config
-if prefix = ::Merb::Config[:path_prefix]
-  use ::Merb::Rack::PathPrefix, prefix
-end
-
-# comment this out if you are running merb behind a load balancer
-# that serves static files
-use ::Merb::Rack::Static, ::Merb.dir_for(:public)
-
-# this is our main merb application
-run ::Merb::Rack::Application.new
diff --git a/spec/public/webrat/test_app/config/router.rb b/spec/public/webrat/test_app/config/router.rb
deleted file mode 100644
index 214910c..0000000
--- a/spec/public/webrat/test_app/config/router.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# Merb::Router is the request routing mapper for the merb framework.
-#
-# You can route a specific URL to a controller / action pair:
-#
-#   match("/contact").
-#     to(:controller => "info", :action => "contact")
-#
-# You can define placeholder parts of the url with the :symbol notation. These
-# placeholders will be available in the params hash of your controllers. For example:
-#
-#   match("/books/:book_id/:action").
-#     to(:controller => "books")
-#   
-# Or, use placeholders in the "to" results for more complicated routing, e.g.:
-#
-#   match("/admin/:module/:controller/:action/:id").
-#     to(:controller => ":module/:controller")
-#
-# You can specify conditions on the placeholder by passing a hash as the second
-# argument of "match"
-#
-#   match("/registration/:course_name", :course_name => /^[a-z]{3,5}-\d{5}$/).
-#     to(:controller => "registration")
-#
-# You can also use regular expressions, deferred routes, and many other options.
-# See merb/specs/merb/router.rb for a fairly complete usage sample.
-
-Merb.logger.info("Compiling routes...")
-Merb::Router.prepare do
-  # RESTful routes
-  # resources :posts
-  
-  # Adds the required routes for merb-auth using the password slice
-  # slice(:merb_auth_slice_password, :name_prefix => nil, :path_prefix => "")
-
-  # This is the default route for /:controller/:action/:id
-  # This is fine for most cases.  If you're heavily using resource-based
-  # routes, you may want to comment/remove this line to prevent
-  # clients from calling your create or destroy actions with a GET
-  default_routes
-  
-  # Change this for your home page to be available at /
-  # match('/').to(:controller => 'whatever', :action =>'index')
-end
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/merb/merb-auth/setup.rb b/spec/public/webrat/test_app/merb/merb-auth/setup.rb
deleted file mode 100644
index 612f01d..0000000
--- a/spec/public/webrat/test_app/merb/merb-auth/setup.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# This file is specifically setup for use with the merb-auth plugin.
-# This file should be used to setup and configure your authentication stack.
-# It is not required and may safely be deleted.
-#
-# To change the parameter names for the password or login field you may set either of these two options
-#
-# Merb::Plugins.config[:"merb-auth"][:login_param]    = :email 
-# Merb::Plugins.config[:"merb-auth"][:password_param] = :my_password_field_name
-
-begin
-  # Sets the default class ofr authentication.  This is primarily used for 
-  # Plugins and the default strategies
-  Merb::Authentication.user_class = User 
-  
-  
-  # Mixin the salted user mixin
-  require 'merb-auth-more/mixins/salted_user'
-  Merb::Authentication.user_class.class_eval{ include Merb::Authentication::Mixins::SaltedUser }
-    
-  # Setup the session serialization
-  class Merb::Authentication
-
-    def fetch_user(session_user_id)
-      Merb::Authentication.user_class.get(session_user_id)
-    end
-
-    def store_user(user)
-      user.nil? ? user : user.id
-    end
-  end
-  
-rescue
-  Merb.logger.error <<-TEXT
-  
-    You need to setup some kind of user class with merb-auth.  
-    Merb::Authentication.user_class = User
-    
-    If you want to fully customize your authentication you should use merb-core directly.  
-    
-    See merb/merb-auth/setup.rb and strategies.rb to customize your setup
-
-    TEXT
-end
-
diff --git a/spec/public/webrat/test_app/merb/merb-auth/strategies.rb b/spec/public/webrat/test_app/merb/merb-auth/strategies.rb
deleted file mode 100644
index fd6f20a..0000000
--- a/spec/public/webrat/test_app/merb/merb-auth/strategies.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# This file is specifically for you to define your strategies 
-#
-# You should declare you strategies directly and/or use 
-# Merb::Authentication.activate!(:label_of_strategy)
-#
-# To load and set the order of strategy processing
-
-Merb::Slices::config[:"merb-auth-slice-password"][:no_default_strategies] = true
-
-Merb::Authentication.activate!(:default_password_form)
-Merb::Authentication.activate!(:default_basic_auth)
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/merb/session/session.rb b/spec/public/webrat/test_app/merb/session/session.rb
deleted file mode 100644
index 5d05316..0000000
--- a/spec/public/webrat/test_app/merb/session/session.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module Merb
-  module Session
-    
-    # The Merb::Session module gets mixed into Merb::SessionContainer to allow 
-    # app-level functionality; it will be included and methods will be available 
-    # through request.session as instance methods.
-    
-  end
-end
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/public/favicon.ico b/spec/public/webrat/test_app/public/favicon.ico
deleted file mode 100644
index c908d63..0000000
Binary files a/spec/public/webrat/test_app/public/favicon.ico and /dev/null differ
diff --git a/spec/public/webrat/test_app/public/images/merb.jpg b/spec/public/webrat/test_app/public/images/merb.jpg
deleted file mode 100644
index a19dcf4..0000000
Binary files a/spec/public/webrat/test_app/public/images/merb.jpg and /dev/null differ
diff --git a/spec/public/webrat/test_app/public/javascripts/application.js b/spec/public/webrat/test_app/public/javascripts/application.js
deleted file mode 100644
index 246a8be..0000000
--- a/spec/public/webrat/test_app/public/javascripts/application.js
+++ /dev/null
@@ -1 +0,0 @@
-// Common JavaScript code across your application goes here.
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/public/javascripts/jquery.js b/spec/public/webrat/test_app/public/javascripts/jquery.js
deleted file mode 100644
index 82b98e1..0000000
--- a/spec/public/webrat/test_app/public/javascripts/jquery.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * jQuery 1.2.6 - New Wave Javascript
- *
- * Copyright (c) 2008 John Resig (jquery.com)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
- * $Rev: 5685 $
- */
-(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
-return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
-return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
-selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
-return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
-this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
-return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
-jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
-script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
-for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
-for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
-jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
-ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
-while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
-while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
-for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
-jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
-xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
-jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
-for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
-s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
-e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/public/merb.fcgi b/spec/public/webrat/test_app/public/merb.fcgi
deleted file mode 100755
index 9804e0f..0000000
--- a/spec/public/webrat/test_app/public/merb.fcgi
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env ruby
-                                                               
-require 'rubygems'
-require 'merb-core'
-
-# this is Merb.root, change this if you have some funky setup.
-merb_root = File.expand_path(File.dirname(__FILE__) / '../')
-        
-# If the fcgi process runs as apache, make sure
-# we have an inlinedir set for Rubyinline action-args to work
-unless ENV["INLINEDIR"] || ENV["HOME"]
-  tmpdir = merb_root / "tmp"
-  unless File.directory?(tmpdir)
-    Dir.mkdir(tmpdir)
-  end                
-  ENV["INLINEDIR"] = tmpdir
-end
-   
-# start merb with the fcgi adapter, add options or change the log dir here
-Merb.start(:adapter => 'fcgi',
-           :merb_root => merb_root,
-           :log_file => merb_root /'log'/'merb.log')
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/public/robots.txt b/spec/public/webrat/test_app/public/robots.txt
deleted file mode 100644
index f85a11b..0000000
--- a/spec/public/webrat/test_app/public/robots.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
-#
-# To ban all spiders from the entire site uncomment the next two lines:
-# User-Agent: *
-# Disallow: /
\ No newline at end of file
diff --git a/spec/public/webrat/test_app/public/stylesheets/master.css b/spec/public/webrat/test_app/public/stylesheets/master.css
deleted file mode 100644
index c4fa676..0000000
--- a/spec/public/webrat/test_app/public/stylesheets/master.css
+++ /dev/null
@@ -1,119 +0,0 @@
-body {
-  font-family: Arial, Verdana, sans-serif;
-  font-size: 12px;
-  background-color: #fff;
-}
-* {
-  margin: 0px;
-  padding: 0px;
-  text-decoration: none;
-}
-html {
-  height: 100%;
-  margin-bottom: 1px;
-}
-#container {
-  width: 80%;
-  text-align: left;
-  background-color: #fff;
-  margin-right: auto;
-  margin-left: auto;
-}
-#header-container {
-  width: 100%;
-  padding-top: 15px;
-}
-#header-container h1, #header-container h2 {
-  margin-left: 6px;
-  margin-bottom: 6px;
-}
-.spacer {
-  width: 100%;
-  height: 15px;
-}
-hr {
-  border: 0px;
-  color: #ccc;
-  background-color: #cdcdcd;
-  height: 1px;
-  width: 100%;
-  text-align: left;
-}
-h1 {
-  font-size: 28px;
-  color: #c55;
-  background-color: #fff;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-}
-h2 {
-  font-size: 15px;
-  color: #999;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-  background-color: #fff;
-}
-h3 {
-  color: #4d9b12;
-  font-size: 15px;
-  text-align: left;
-  font-weight: 300;
-  padding: 5px;
-  margin-top: 5px;
-}
-
-#left-container {
-  float: left;
-  width: 250px;
-  background-color: #FFFFFF;
-  color: black;
-}
-
-#left-container h3 {
-  color: #c55;
-}
-
-#main-container {
-  margin: 5px 5px 5px 260px;
-  padding: 15px;
-  border-left: 1px solid silver;
-  min-height: 400px;
-}
-p {
-  color: #000;
-  background-color: #fff;
-  line-height: 20px;
-  padding: 5px;
-}
-a {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: none;
-}
-a:hover {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: underline;
-}
-#footer-container {
-  clear: both;
-  font-size: 12px;
-  font-family: Verdana, Arial, sans-serif;
-}
-.right {
-  float: right;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-.left {
-  float: left;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-#main-container ul {
-  margin-left: 3.0em;
-}
\ No newline at end of file
diff --git a/spec/public/webrat/webrat_spec.rb b/spec/public/webrat/webrat_spec.rb
deleted file mode 100644
index 7073d19..0000000
--- a/spec/public/webrat/webrat_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-startup_merb(
-  :merb_root => File.dirname(__FILE__) / "test_app",
-  :gemfile   => File.dirname(__FILE__) / "test_app" / "Gemfile",
-  :fork_for_class_load => false
-)
-Merb::Config[:log_stream] = File.open("/dev/null", "w")
-Merb.reset_logger!
-
-describe "an app tested using the webrat proxies" do
-  describe("#visit") do
-    it "supports visit" do
-      visit("/testing")
-    end
-  
-    it "can use the Merb expectations with visit" do
-      visit("/testing").should be_successful
-    end
-  
-    it "supports visit intermixed with request" do
-      resp = visit("/testing/next")
-      resp.should have_xpath("//p")
-    end
-  end
-  
-  describe("#click_link") do
-    it "supports click_link" do
-      visit "/testing"
-      click_link "Next"
-    end
-    
-    it "can use the Merb expectations with click_link" do
-      visit "/testing"
-      resp = click_link "Next"
-      resp.should have_xpath("//p[contains(., 'Got to next')]")
-    end
-  end
-  
-  describe "filling in forms" do
-    it "lets you fill in text fields" do
-      visit "/testing/show_form"
-      fill_in "Name", :with => "Merby"
-      fill_in "Address", :with => "82 South Park"
-      click_button "Submit!"
-    end
-    
-    it "returns the response when you fill in text fields" do
-      visit "/testing/show_form"
-      fill_in "name", :with => "Merby"
-      fill_in "address", :with => "82 South Park"
-      resp = click_button "Submit!"
-      resp.should have_xpath("//p[contains(., 'Merby')]")
-    end
-    
-    it "lets you check checkboxes" do
-      visit "/testing/show_form"
-      check "Tis truez"
-    end
-    
-    it "returns the response when you check checkboxes" do
-      visit "/testing/show_form"
-      check "Tis truez"
-      resp = click_button "Submit!"
-      resp.should have_xpath("//p[contains(., 'truez: 1')]")
-    end
-  end
-  
-  describe "runs through defined Rack middle ware" do
-    it "returns the response in the rack middleware" do
-      resp = visit "/dummy"
-      resp.body.to_s.should == "This is a dummy content"
-    end
-  end
-  
-end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
deleted file mode 100644
index 24bb027..0000000
--- a/spec/spec_helper.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-require "spec"
-require File.join(File.dirname(__FILE__), "..", "lib", "merb-core")
-
-def startup_merb(opts = {})
-  default_options = {
-    :environment => 'test',
-    :adapter => 'runner',
-    :gemfile => File.join(File.dirname(__FILE__), "Gemfile"),
-    :log_level => :error
-  }
-  options = default_options.merge(opts)
-  Merb.start_environment(options)
-end
-
-# -- Global custom matchers --
-
-# A better +be_kind_of+ with more informative error messages.
-#
-# The default +be_kind_of+ just says
-#
-#   "expected to return true but got false"
-#
-# This one says
-#
-#   "expected File but got Tempfile"
-
-module Merb
-  module Test
-    module RspecMatchers
-      class IncludeLog
-        def initialize(expected)
-          @expected = expected
-        end
-        
-        def matches?(target)
-          target.rewind
-          @text = target.read
-          @text =~ (String === @expected ? /#{Regexp.escape @expected}/ : @expected)
-        end
-        
-        def failure_message
-          "expected to find `#{@expected}' in the log but got:\n" <<
-          @text.split("\n").map {|s| "  #{s}" }.join
-        end
-        
-        def negative_failure_message
-          "exected not to find `#{@expected}' in the log but got:\n" <<
-          @text.split("\n").map {|s| "  #{s}" }.join
-        end
-        
-        def description
-          "include #{@text} in the log"
-        end
-      end
-      
-      class BeKindOf
-        def initialize(expected) # + args
-          @expected = expected
-        end
-
-        def matches?(target)
-          @target = target
-          @target.kind_of?(@expected)
-        end
-
-        def failure_message
-          "expected #{@expected} but got #{@target.class}"
-        end
-
-        def negative_failure_message
-          "expected #{@expected} to not be #{@target.class}"
-        end
-
-        def description
-          "be_kind_of #{@target}"
-        end
-      end
-
-      def be_kind_of(expected) # + args
-        BeKindOf.new(expected)
-      end
-      
-      def include_log(expected)
-        IncludeLog.new(expected)
-      end
-    end
-
-    module Helper
-      def running(&blk) blk; end
-
-      def executing(&blk) blk; end
-
-      def doing(&blk) blk; end
-
-      def calling(&blk) blk; end
-    end
-  end
-end
-
-# Helper to extract cookies from headers
-#
-# This is needed in some specs for sessions and cookies
-module Merb::Test::CookiesHelper
-  def extract_cookies(header)
-    header['Set-Cookie'] ? header['Set-Cookie'].split(Merb::Const::NEWLINE) : []
-  end
-end
-
-Spec::Runner.configure do |config|
-  config.include Merb::Test::Helper
-  config.include Merb::Test::RspecMatchers
-  config.include ::Webrat::Matchers
-  config.include ::Webrat::HaveTagMatcher
-  config.include Merb::Test::RequestHelper
-  config.include Merb::Test::RouteHelper
-  config.include Merb::Test::WebratHelper
-
-  def reset_dependency(name, const = nil)
-    Object.send(:remove_const, const) if const && Object.const_defined?(const)
-    Merb::BootLoader::Dependencies.dependencies.delete_if do |d|
-      d.name == name
-    end
-    $LOADED_FEATURES.delete("#{name}.rb")
-  end
-
-  def with_level(level)
-    Merb::Config[:log_stream] = StringIO.new
-    Merb::Config[:log_level] = level
-    Merb.reset_logger!
-    yield
-    Merb::Config[:log_stream]
-  end
-
-  def capture(stream)
-    begin
-      stream = stream.to_s
-      eval "$#{stream} = StringIO.new"
-      yield
-      result = eval("$#{stream}").string
-    ensure
-      eval("$#{stream} = #{stream.upcase}")
-    end
-
-    result
-  end
-
-  alias silence capture
-end
diff --git a/spec10/private/core_ext/kernel_spec.rb b/spec10/private/core_ext/kernel_spec.rb
deleted file mode 100644
index e3d29fd..0000000
--- a/spec10/private/core_ext/kernel_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "Kernel#caller" do
-  it "should be able to determine caller info" do
-    __caller_info__.should be_kind_of(Array)
-  end
-
-  it "should be able to get caller lines" do
-    i = 0
-    __caller_lines__(__caller_info__[0], __caller_info__[1], 4) { i += 1 }
-    i.should == 9
-  end
-end
-
-
-
-describe "Kernel#extract_options_from_args!" do
-  it "should extract options from args" do
-    args = ["foo", "bar", {:baz => :bar}]
-    Kernel.extract_options_from_args!(args).should == {:baz => :bar}
-    args.should == ["foo", "bar"]
-  end
-end
-
-
-
-describe "Kernel#debugger" do
-  it "should throw a useful error if there's no debugger" do
-    Merb.logger.should_receive(:info!).with "\n***** Debugger requested, but was not " +
-      "available: Start server with --debugger " +
-      "to enable *****\n"
-    Kernel.debugger
-  end
-end
diff --git a/spec10/private/dispatch/bootloader_spec.rb b/spec10/private/dispatch/bootloader_spec.rb
deleted file mode 100644
index c31cf8a..0000000
--- a/spec10/private/dispatch/bootloader_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe Merb::BootLoader::RackUpApplication do
-
-  it "should default to rack config (rack.rb)" do
-    options = {:merb_root => File.dirname(__FILE__) / 'fixture'}
-    Merb::Config.setup(options)
-    Merb::BootLoader::RackUpApplication.run
-    app = Merb::Config[:app]
-    app.class.should == Merb::Rack::Static
-  end
-
-  it "should use rackup config that we specified" do
-    options = {:rackup => File.dirname(__FILE__) / 'fixture' / 'config' / 'black_hole.rb'}
-    Merb::Config.setup(options)
-    Merb::BootLoader::RackUpApplication.run
-    app = Merb::Config[:app]
-    app.class.should == Rack::Adapter::BlackHole
-
-    env = Rack::MockRequest.env_for("/black_hole")
-    status, header, body = app.call(env)
-    status.should == 200
-    header.should == { "Content-Type" => "text/plain" }
-    body.should == ""
-  end
-  
-end
diff --git a/spec10/private/dispatch/fixture/app/controllers/application.rb b/spec10/private/dispatch/fixture/app/controllers/application.rb
deleted file mode 100644
index 99141ac..0000000
--- a/spec10/private/dispatch/fixture/app/controllers/application.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-class Application < Merb::Controller
-end
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/app/controllers/exceptions.rb b/spec10/private/dispatch/fixture/app/controllers/exceptions.rb
deleted file mode 100644
index f5c5a9b..0000000
--- a/spec10/private/dispatch/fixture/app/controllers/exceptions.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-class Exceptions < Merb::Controller
-
-  attr_reader :handler 
-  
-  # handle NotFound exceptions (404)
-  
-   def not_found
-     @handler = :not_found
-     render :format => :html
-   end
- 
-   # handle NotAcceptable exceptions (406)
-   
-   def not_acceptable
-     @handler = :not_acceptable
-     render "Handled by: not_acceptable"
-   end
- 
-  # # Any client error (400 series)
-  def client_error
-    @handler = :client_error
-    render "Handled by: client_error"
-  end
-
-end
diff --git a/spec10/private/dispatch/fixture/app/controllers/foo.rb b/spec10/private/dispatch/fixture/app/controllers/foo.rb
deleted file mode 100644
index 683bc2a..0000000
--- a/spec10/private/dispatch/fixture/app/controllers/foo.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class Foo < Application
-
-  def index
-    "index"
-  end
-
-  def bar
-    render
-  end
-
-  def raise_conflict
-    raise Conflict
-  end
-  
-  def raise_not_acceptable
-    raise NotAcceptable
-  end
-  
-end  
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/app/helpers/global_helpers.rb b/spec10/private/dispatch/fixture/app/helpers/global_helpers.rb
deleted file mode 100644
index 6cbdf14..0000000
--- a/spec10/private/dispatch/fixture/app/helpers/global_helpers.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-module Merb
-
-  module GlobalHelper
-    # helpers defined here available to all views.  
-  end
-end
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/app/views/foo/bar.html.erb b/spec10/private/dispatch/fixture/app/views/foo/bar.html.erb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec10/private/dispatch/fixture/app/views/layout/application.html.erb b/spec10/private/dispatch/fixture/app/views/layout/application.html.erb
deleted file mode 100644
index 21c795c..0000000
--- a/spec10/private/dispatch/fixture/app/views/layout/application.html.erb
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
-  <head>
-    <title>Fresh Merb App</title>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <link rel="stylesheet" href="/stylesheets/master.css" type="text/css" media="screen" charset="utf-8">
-  </head>
-  <body>
-    <%= catch_content :for_layout %>
-  </body>
-</html>
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/config/black_hole.rb b/spec10/private/dispatch/fixture/config/black_hole.rb
deleted file mode 100644
index 6b639ae..0000000
--- a/spec10/private/dispatch/fixture/config/black_hole.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# Alternate rackup config
-module Rack
-  module Adapter
-    class BlackHole
-      def call(env)
-        [ 200, { "Content-Type" => "text/plain" }, "" ]
-      end
-    end
-  end
-end
-
-run Rack::Adapter::BlackHole.new
diff --git a/spec10/private/dispatch/fixture/config/environments/development.rb b/spec10/private/dispatch/fixture/config/environments/development.rb
deleted file mode 100644
index 01db9a0..0000000
--- a/spec10/private/dispatch/fixture/config/environments/development.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Merb.logger.info("Loaded DEVELOPMENT Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_classes] = true
-  c[:reload_time] = 0.5
-}
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/config/environments/production.rb b/spec10/private/dispatch/fixture/config/environments/production.rb
deleted file mode 100644
index e6d99e6..0000000
--- a/spec10/private/dispatch/fixture/config/environments/production.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-Merb.logger.info("Loaded PRODUCTION Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = false
-  c[:reload_classes] = false
-}
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/config/environments/test.rb b/spec10/private/dispatch/fixture/config/environments/test.rb
deleted file mode 100644
index 0ea51d1..0000000
--- a/spec10/private/dispatch/fixture/config/environments/test.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Merb.logger.info("Loaded TEST Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_classes] = true
-  c[:reload_time] = 0.5
-}
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/config/init.rb b/spec10/private/dispatch/fixture/config/init.rb
deleted file mode 100644
index b9f9185..0000000
--- a/spec10/private/dispatch/fixture/config/init.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# Make the app's "gems" directory a place where gems are loaded from
-Gem.clear_paths
-Gem.path.unshift(Merb.root / "gems")
-
-# Make the app's "lib" directory a place where ruby files get "require"d from
-$LOAD_PATH.unshift(Merb.root / "lib")
-
-Merb::Config.use { |c|
-  c[:session_store]      = 'cookie'
-  c[:session_secret_key] = "2c24532b38b8c46d8acf1b5ed71bdd5426dadd9b"
-}
-
-### Merb doesn't come with database support by default.  You need
-### an ORM plugin.  Install one, and uncomment one of the following lines,
-### if you need a database.
-
-### Uncomment for DataMapper ORM
-# use_orm :datamapper
-
-### Uncomment for ActiveRecord ORM
-# use_orm :activerecord
-
-### Uncomment for Sequel ORM
-# use_orm :sequel
-
-### This defines which test framework the generators will use
-### rspec is turned on by default
-# use_test :test_unit
-# use_test :rspec
-
-### Add your other dependencies here
-
-# These are some examples of how you might specify dependencies.
-# 
-# dependencies "RedCloth", "merb_helpers"
-# OR
-# dependency "RedCloth", "> 3.0"
-# OR
-# dependencies "RedCloth" => "> 3.0", "ruby-aes-cext" => "= 1.0"
-
-Merb::BootLoader.after_app_loads do
-  ### Add dependencies here that must load after the application loads:
-
-  # dependency "magic_admin" # this gem uses the app's model classes
-end
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/config/rack.rb b/spec10/private/dispatch/fixture/config/rack.rb
deleted file mode 100644
index 494c687..0000000
--- a/spec10/private/dispatch/fixture/config/rack.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# use PathPrefix Middleware if :path_prefix is set in Merb::Config
-if prefix = ::Merb::Config[:path_prefix]
-  use Merb::Rack::PathPrefix, prefix
-end
-
-# comment this out if you are running merb behind a load balancer
-# that serves static files
-use Merb::Rack::Static, Merb.dir_for(:public)
-
-# this is our main merb application
-run Merb::Rack::Application.new
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/config/router.rb b/spec10/private/dispatch/fixture/config/router.rb
deleted file mode 100644
index c60d454..0000000
--- a/spec10/private/dispatch/fixture/config/router.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# Merb::Router is the request routing mapper for the merb framework.
-#
-# You can route a specific URL to a controller / action pair:
-#
-#   r.match("/contact").
-#     to(:controller => "info", :action => "contact")
-#
-# You can define placeholder parts of the url with the :symbol notation. These
-# placeholders will be available in the params hash of your controllers. For example:
-#
-#   r.match("/books/:book_id/:action").
-#     to(:controller => "books")
-#   
-# Or, use placeholders in the "to" results for more complicated routing, e.g.:
-#
-#   r.match("/admin/:module/:controller/:action/:id").
-#     to(:controller => ":module/:controller")
-#
-# You can also use regular expressions, deferred routes, and many other options.
-# See merb/specs/merb/router.rb for a fairly complete usage sample.
-
-Merb.logger.info("Compiling routes...")
-Merb::Router.prepare do |r|
-  # RESTful routes
-  # r.resources :posts
-
-  # This is the default route for /:controller/:action/:id
-  # This is fine for most cases.  If you're heavily using resource-based
-  # routes, you may want to comment/remove this line to prevent
-  # clients from calling your create or destroy actions with a GET
-  r.default_routes
-  
-  # Change this for your home page to be available at /
-  # r.match('/').to(:controller => 'whatever', :action =>'index')
-end
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/public/images/merb.jpg b/spec10/private/dispatch/fixture/public/images/merb.jpg
deleted file mode 100644
index 4fe7ce7..0000000
Binary files a/spec10/private/dispatch/fixture/public/images/merb.jpg and /dev/null differ
diff --git a/spec10/private/dispatch/fixture/public/merb.fcgi b/spec10/private/dispatch/fixture/public/merb.fcgi
deleted file mode 100644
index f8218e6..0000000
--- a/spec10/private/dispatch/fixture/public/merb.fcgi
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env ruby
-
-argv = ARGV + %w[-a fcgi]
-Merb.start(argv)
\ No newline at end of file
diff --git a/spec10/private/dispatch/fixture/public/stylesheets/master.css b/spec10/private/dispatch/fixture/public/stylesheets/master.css
deleted file mode 100644
index c4fa676..0000000
--- a/spec10/private/dispatch/fixture/public/stylesheets/master.css
+++ /dev/null
@@ -1,119 +0,0 @@
-body {
-  font-family: Arial, Verdana, sans-serif;
-  font-size: 12px;
-  background-color: #fff;
-}
-* {
-  margin: 0px;
-  padding: 0px;
-  text-decoration: none;
-}
-html {
-  height: 100%;
-  margin-bottom: 1px;
-}
-#container {
-  width: 80%;
-  text-align: left;
-  background-color: #fff;
-  margin-right: auto;
-  margin-left: auto;
-}
-#header-container {
-  width: 100%;
-  padding-top: 15px;
-}
-#header-container h1, #header-container h2 {
-  margin-left: 6px;
-  margin-bottom: 6px;
-}
-.spacer {
-  width: 100%;
-  height: 15px;
-}
-hr {
-  border: 0px;
-  color: #ccc;
-  background-color: #cdcdcd;
-  height: 1px;
-  width: 100%;
-  text-align: left;
-}
-h1 {
-  font-size: 28px;
-  color: #c55;
-  background-color: #fff;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-}
-h2 {
-  font-size: 15px;
-  color: #999;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-  background-color: #fff;
-}
-h3 {
-  color: #4d9b12;
-  font-size: 15px;
-  text-align: left;
-  font-weight: 300;
-  padding: 5px;
-  margin-top: 5px;
-}
-
-#left-container {
-  float: left;
-  width: 250px;
-  background-color: #FFFFFF;
-  color: black;
-}
-
-#left-container h3 {
-  color: #c55;
-}
-
-#main-container {
-  margin: 5px 5px 5px 260px;
-  padding: 15px;
-  border-left: 1px solid silver;
-  min-height: 400px;
-}
-p {
-  color: #000;
-  background-color: #fff;
-  line-height: 20px;
-  padding: 5px;
-}
-a {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: none;
-}
-a:hover {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: underline;
-}
-#footer-container {
-  clear: both;
-  font-size: 12px;
-  font-family: Verdana, Arial, sans-serif;
-}
-.right {
-  float: right;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-.left {
-  float: left;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-#main-container ul {
-  margin-left: 3.0em;
-}
\ No newline at end of file
diff --git a/spec10/private/dispatch/spec_helper.rb b/spec10/private/dispatch/spec_helper.rb
deleted file mode 100644
index f4a904e..0000000
--- a/spec10/private/dispatch/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
\ No newline at end of file
diff --git a/spec10/public/DEFINITIONS b/spec10/public/DEFINITIONS
deleted file mode 100644
index c787e99..0000000
--- a/spec10/public/DEFINITIONS
+++ /dev/null
@@ -1,11 +0,0 @@
-==== Public API
-This is the API that is available in your app itself. Anything not in the public API is subject to change.
-
-==== Semipublic API
-This is the API that is guaranteed to be available between components of Merb. If something in the semipublic
-API changes, this will likely require changes in other parts of Merb. Additionally, items in the semipublic
-API can be relied upon for introspection, for testing purposes.
-
-For instance, AbstractController#_body should not be used in Merb apps themselves, as it may change, but
-it may be used in other components of Merb and in the Merb tests themselves. Including it in the semipublic
-API is designed to alert Merb's maintainers that changing it will have framework-wide repercussions. 
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/layout/application.erb b/spec10/public/abstract_controller/controllers/alt_views/layout/application.erb
deleted file mode 100644
index 0946f7a..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/layout/application.erb
+++ /dev/null
@@ -1 +0,0 @@
-App: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb b/spec10/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb
deleted file mode 100644
index a275312..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_string_controller_layout.erb
+++ /dev/null
@@ -1 +0,0 @@
-Controller: <%= catch_content :for_layout %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb b/spec10/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb
deleted file mode 100644
index a275312..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/layout/merb/test/fixtures/abstract/render_template_controller_layout.erb
+++ /dev/null
@@ -1 +0,0 @@
-Controller: <%= catch_content :for_layout %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb b/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb
deleted file mode 100644
index 5ed1ab6..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-new index
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb b/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb
deleted file mode 100644
index 4de7ee1..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/display_object_with_multiple_roots/show.erb
+++ /dev/null
@@ -1 +0,0 @@
-new show
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb b/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb
deleted file mode 100644
index 2072bf0..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Multiple
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb b/spec10/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb
deleted file mode 100644
index b99ef60..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/partial/basic_partial_with_multiple_roots/_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-Alt Partial
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb b/spec10/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb
deleted file mode 100644
index ab350dc..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_and_custom_location/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Woot.
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb b/spec10/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb
deleted file mode 100644
index 989dfa3..0000000
--- a/spec10/public/abstract_controller/controllers/alt_views/render_template_multiple_roots_inherited/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Good.
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/cousins.rb b/spec10/public/abstract_controller/controllers/cousins.rb
deleted file mode 100644
index b3ff445..0000000
--- a/spec10/public/abstract_controller/controllers/cousins.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-module Merb::Test::Fixtures
-  
-  module Abstract
-    
-    class Testing < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-    
-    class FilterParent < Testing
-      before :print_before_filter
-      
-      def print_before_filter
-        @before_string = "Before"
-      end
-    end
-    
-    class FilterChild1 < FilterParent
-      before :print_before_filter, :only => :limited
-      
-      def index
-        @before_string.to_s + " Index"
-      end
-      
-      def limited
-        @before_string.to_s + " Limited"
-      end
-    end
-
-    class FilterChild2 < FilterParent
-      
-      def index
-        @before_string.to_s + " Index"
-      end
-      
-      def limited
-        @before_string.to_s + " Limited"
-      end
-    end
-    
-    # #611 in merb-core tracker
-    class HasFiltersWithSimilarNames < Testing
-      before :befilter
-      before :bef
-
-      def index
-        @before_string.to_s + " Index"
-      end
-
-      protected
-
-      def befilter
-        @before_string = "Befilter"
-      end
-
-      def bef
-        @before_string << " Bef"
-      end
-    end # HasFiltersWithSimilarNames
-  end # Abstract
-end
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/display.rb b/spec10/public/abstract_controller/controllers/display.rb
deleted file mode 100644
index 1a6158f..0000000
--- a/spec10/public/abstract_controller/controllers/display.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-module Merb::Test::Fixtures
-
-  module Abstract
-    
-    class SomeModel; end
-    
-    class Testing < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-    
-    class DisplayObject < Testing
-      def index
-        @obj = SomeModel.new
-        display @obj
-      end
-    end
-    
-    class DisplayObjectWithAction < Testing
-      def create
-        @obj = SomeModel.new
-        display @obj, :new
-      end
-    end
-    
-    class DisplayObjectWithPath < Testing
-      def index
-        @obj = SomeModel.new
-        display @obj, "test_display/foo.html"
-      end
-    end
-
-    class DisplayObjectWithPathViaOpts < Testing
-      def index
-        @obj = SomeModel.new
-        display @obj, :template => "test_display/foo.html"
-      end
-    end
-    
-    class DisplayObjectWithMultipleRoots < DisplayObject
-      self._template_roots << [File.dirname(__FILE__) / "alt_views", :_template_location]
-      
-      def show
-        @obj = SomeModel.new
-        display @obj, nil, :layout=>"alt"
-      end
-      
-      def another
-        @obj = SomeModel.new
-        display @obj, "test_display/foo.html", :layout=>false
-      end
-      
-      def wonderful
-        true
-      end
-    end
-  end
-
-end
diff --git a/spec10/public/abstract_controller/controllers/filters.rb b/spec10/public/abstract_controller/controllers/filters.rb
deleted file mode 100644
index 4e28f69..0000000
--- a/spec10/public/abstract_controller/controllers/filters.rb
+++ /dev/null
@@ -1,260 +0,0 @@
-# ==== Methodology
-# Each of the controllers tested here tests a discrete, single case. This
-# is to ensure that each test is actually testing exactly what we want,
-# and that other features (or lack thereof), are not causing tests to fail
-# that would otherwise pass.
-module Merb::Test::Fixtures
-  
-  module Abstract
-    
-    class Testing < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    class TestBeforeFilter < Testing
-      before :foo
-
-      def index
-        "#{@x}"
-      end
-      
-      private
-      
-      def foo
-        @x = "foo filter"
-      end    
-    end
-
-    class TestAfterFilter < Testing
-      after :foo
-
-      def index
-        "index action"
-      end
-      
-      private
-      
-      def foo
-        @body = "foo filter"
-      end        
-    end
-
-    class TestSkipFilter < TestBeforeFilter
-      skip_before :foo
-    end
-
-    class TestBeforeFilterOrder < TestBeforeFilter
-      before :bar
-
-      def index
-        "#{@x}"
-      end
-    
-      private
-      
-      def bar
-        @x = "bar filter"
-      end
-    end
-
-    class TestAfterFilterOrder < TestAfterFilter
-      after :bar
-
-      def index
-        "index action"
-      end
-    
-      private
-      
-      def bar
-        @body = "bar filter"
-      end
-    end
-
-    class TestProcFilter < Testing
-      before { @x = "proc filter1" }
-      before Proc.new { @y = "proc filter2" }
-
-      def index
-        "#{@x} #{@y}"
-      end
-    end
-    
-    class TestProcFilterViaMethod < Testing
-      def self.my_before(data)
-        before proc { add_string(data) }
-      end
-      
-      my_before("one")
-      my_before("two")
-
-      def index
-        @text
-      end
-      protected
-        def add_string(str)
-          @text ||= ""
-          @text << str
-        end
-    end
-
-    class TestExcludeFilter < Testing
-      before :foo, :exclude => :index
-      before :bar, :exclude => [:index]
-
-      def index
-        "#{@x} #{@y}"
-      end
-
-      def show
-        "#{@x} #{@y}"
-      end
-    
-      private
-      
-      def foo
-        @x = "foo filter"
-      end
-
-      def bar
-        @y = "bar filter"
-      end
-    end
-
-    class TestOnlyFilter < Testing
-      before :foo, :only => :index
-      before :bar, :only => [:index]
-
-      def index
-        "#{@x} #{@y}"
-      end
-
-      def show
-        "#{@x} #{@y}"
-      end
-    
-      private
-      
-      def foo
-        @x = "foo filter"
-      end
-
-      def bar
-        @y = "bar filter"
-      end
-    end
-    
-    class TestConditionalFilterWithMethod < Testing
-      before  :foo, :if => :bar
-      
-      attr_accessor :bar
-      
-      def index
-        "#{@x}"
-      end
-      
-      private
-      def foo
-        @x = "foo filter"
-      end
-    end
-    
-    class TestConditionalFilterWithProc < Testing
-      after   :foo, :unless => lambda { |x| x.bar == "bar" }
-      
-      attr_accessor :bar
-      
-      def index
-        "index action"
-      end
-      
-      private
-      def foo
-        @body = "foo filter"
-      end
-    end
-    
-    class TestConditionalFilterWithNoProcOrSymbol < Testing
-      after   :foo, :unless => true
-      
-      def index
-        "index action"
-      end
-    end
-    
-    class TestBeforeFilterWithArgument < Testing
-      before :foo, :with => "bar"
-      
-      def index
-        "index action"
-      end
-      
-      private
-      def foo(bar)
-        bar == "bar"
-      end
-    end
-    
-    class TestBeforeFilterWithArguments < Testing
-      before :foo, :with => ["bar", "baz"]
-      
-      def index
-        "index action"
-      end
-      
-      private
-      def foo(bar,baz)
-        bar == "bar" && baz == "baz"
-      end
-    end
-    
-    class BeforeFilterWithThrowHalt < Testing
-      before do
-        throw :halt, "Halt thrown"
-      end
-      
-      def index
-        "Halt not thrown"
-      end      
-    end
-    
-    class BeforeFilterWithThrowProc < Testing
-      before do
-        throw :halt, Proc.new { "Proc thrown" }
-      end
-      
-      def index
-        "Proc not thrown"
-      end
-    end
-    
-    class ThrowNil < Testing
-      before do
-        throw :halt, nil
-      end
-      
-      def index
-        "Awesome"
-      end
-    end
-    
-    class FilterChainError < Testing
-      before do
-        throw :halt, Merb
-      end
-      
-      def index
-        "Awesome"
-      end
-    end
-    
-    class Benchmarking < Testing
-      before {}
-      after {}
-      
-      def index
-        "Awesome"
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/helpers.rb b/spec10/public/abstract_controller/controllers/helpers.rb
deleted file mode 100644
index 3ad19aa..0000000
--- a/spec10/public/abstract_controller/controllers/helpers.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-module Merb::Test::Fixtures
-  module Abstract
-  
-    class HelperTesting < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-      
-      def _template_location(context, type = nil, controller = controller_name)
-        "helpers/#{File.basename(controller)}/#{context}"
-      end
-      
-      def index
-        render
-      end
-    end
-    
-    class Capture < HelperTesting
-    end
-    
-    class CaptureWithArgs < HelperTesting
-    end
-    
-    class CaptureReturnValue < HelperTesting
-    end
-
-    class CaptureNonStringReturnValue < HelperTesting
-    end
-
-    class CaptureEq < HelperTesting
-      def helper_using_capture(&blk)
-        "Beginning... #{capture(&blk)}... Done"
-      end
-    end
-
-    module ConcatHelper
-      def concatter(&blk)
-        concat("Concat", blk.binding)
-      end
-    end
-    
-    class Concat < HelperTesting
-      def index
-        render
-      end
-    end
-       
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/partial.rb b/spec10/public/abstract_controller/controllers/partial.rb
deleted file mode 100644
index b4b70a0..0000000
--- a/spec10/public/abstract_controller/controllers/partial.rb
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-module Merb::Test::Fixtures
-
-  module Abstract
-
-    class RenderIt < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-
-      def _template_location(context, type = nil, controller = controller_name)
-        "partial/#{File.basename(controller)}/#{context}"
-      end
-    end
-    
-    class BasicPartial < RenderIt
-
-      def index
-        render
-      end
-    end
-
-    class WithAbsolutePartial < RenderIt
-      
-      def index
-        @absolute_partial_path = File.expand_path(File.dirname(__FILE__)) / 'views' / 'partial' / 'with_absolute_partial' / 'partial'
-        render 
-      end
-    end
-
-    class WithPartial < RenderIt
-
-      def index
-        @foo = "With"
-        render
-      end
-    end
-
-    class WithNilPartial < RenderIt
-
-      def index
-        render
-      end
-    end
-
-    class WithAsPartial < RenderIt
-
-      def index
-        @foo = "With and As"
-        render
-      end
-    end
-
-    class PartialWithCollections < RenderIt
-
-      def index
-        @foo = %w{ c o l l e c t i o n }
-        render
-      end
-    end
-
-    class PartialWithCollectionsAndAs < RenderIt
-
-      def index
-        @foo = %w{ c o l l e c t i o n }
-        render
-      end
-    end
-    
-   class PartialWithCollectionsAndCounter < RenderIt
-      def index
-        @foo = %w(1 2 3 4 5)
-        render
-      end
-    end
-
-    class PartialWithLocals < RenderIt
-
-      def index
-        @foo, @bar = %w{ local variables }
-        render
-      end
-    end
-
-    class PartialWithLocalsOverridingHelpers < RenderIt
-
-      def index
-        @foo = %w{ local }
-        render
-      end
-      
-      def value
-        "helper"
-      end
-    end
-
-    class PartialWithDifferentSetsOfLocals < RenderIt
-
-      def index
-        render
-      end
-    end
-
-    class PartialWithBoth < RenderIt
-
-      def index
-        @foo = %w{ c o l l e c t i o n }
-        @delimiter = "-"
-        render
-      end
-    end
-
-    class PartialWithWithAndLocals < RenderIt
-
-      def index
-        @foo, @bar = "with", "and locals"
-        render
-      end
-    end
-
-    class PartialInAnotherDirectory < RenderIt
-
-      def index
-        render
-      end
-    end
-
-    class NestedPartial < RenderIt
-      def index
-        render
-      end
-    end
-
-    class BasicPartialWithMultipleRoots < RenderIt
-      self._template_roots << [File.dirname(__FILE__) / "alt_views", :_template_location]
-      def index
-        render
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/render.rb b/spec10/public/abstract_controller/controllers/render.rb
deleted file mode 100644
index 8342311..0000000
--- a/spec10/public/abstract_controller/controllers/render.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
-module Merb::Test::Fixtures
-
-  module Abstract
-    
-    class Testing < Merb::AbstractController
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-		class RenderTwoAppendContents < Testing
-			
-			def index
-				render
-			end
-		end
-
-    class RenderString < Testing
-      
-      def index
-        render "the index"
-      end
-    end
-
-    class RenderStringCustomLayout < RenderString
-      layout :custom
-    end
-
-    class RenderStringAppLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"      
-    end
-
-    class RenderStringControllerLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"
-    end
-    
-    class RenderStringDynamicLayout < RenderString
-      layout :determine_layout
-      
-      def alt_index
-        render "the alt index"
-      end
-      
-      def determine_layout
-        action_name.index('alt') == 0 ? 'alt' : 'custom'
-      end
-    end
-
-    class RenderTemplate < Testing
-      
-      def index
-        render
-      end      
-    end
-
-    class RenderTemplateCustomLayout < RenderString
-      layout :custom
-    end
-
-    class RenderTemplateAppLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"      
-    end
-
-    class RenderTemplateControllerLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"      
-    end  
-    
-    class RenderNoDefaultAppLayout < RenderString
-      self._template_root = File.dirname(__FILE__) / "alt_views"
-      self.layout false
-    end
-    
-    class RenderNoDefaultAppLayoutInherited < RenderNoDefaultAppLayout
-    end
-    
-    class RenderDefaultAppLayoutInheritedOverride < RenderNoDefaultAppLayout
-      self.default_layout
-    end
-    
-    class RenderTemplateCustomLocation < RenderTemplate      
-      def _template_location(context, type = nil, controller = controller_name)  
-        "wonderful/#{context}"
-      end
-    end
-    
-    class RenderTemplateAbsolutePath < RenderTemplate
-      
-      def index
-        render :template => File.expand_path(self._template_root) / 'wonderful' / 'index'
-      end
-      
-    end
-    
-    class RenderTemplateMultipleRoots < RenderTemplate
-      self._template_roots << [File.dirname(__FILE__) / "alt_views", :_template_location]
-      
-      def show
-        render :layout => false
-      end
-    end
-
-    class RenderTemplateMultipleRootsAndCustomLocation < RenderTemplate
-      self._template_roots = [[File.dirname(__FILE__) / "alt_views", :_custom_template_location]]
-      
-      def _custom_template_location(context, type = nil, controller = controller_name)
-        "#{self.class.name.split('::')[-1].to_const_path}/#{context}"
-      end
-    end
-    
-    class RenderTemplateMultipleRootsInherited < RenderTemplateMultipleRootsAndCustomLocation
-    end
-  end
-end
diff --git a/spec10/public/abstract_controller/controllers/views/helpers/capture/index.erb b/spec10/public/abstract_controller/controllers/views/helpers/capture/index.erb
deleted file mode 100644
index 0970a92..0000000
--- a/spec10/public/abstract_controller/controllers/views/helpers/capture/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% x = capture do -%>Capture<% end -%><%= x %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb b/spec10/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb
deleted file mode 100644
index c20537a..0000000
--- a/spec10/public/abstract_controller/controllers/views/helpers/capture_eq/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Pre. <%= helper_using_capture do %>Capturing<% end =%>. Post.
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/helpers/capture_non_string_return_value/index.erb b/spec10/public/abstract_controller/controllers/views/helpers/capture_non_string_return_value/index.erb
deleted file mode 100644
index 2fa59e0..0000000
--- a/spec10/public/abstract_controller/controllers/views/helpers/capture_non_string_return_value/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% x = "Captured '" << capture{ nil } << "'" %><%= x %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/helpers/capture_return_value/index.erb b/spec10/public/abstract_controller/controllers/views/helpers/capture_return_value/index.erb
deleted file mode 100644
index 88c3a22..0000000
--- a/spec10/public/abstract_controller/controllers/views/helpers/capture_return_value/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% x = capture do "Capture" end -%><%= x %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb b/spec10/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb
deleted file mode 100644
index d4dabe7..0000000
--- a/spec10/public/abstract_controller/controllers/views/helpers/capture_with_args/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% x = capture('one', 'two') do |one, two| -%>Capture: <%= one %>, <%= two %><% end -%><%= x %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/helpers/concat/index.erb b/spec10/public/abstract_controller/controllers/views/helpers/concat/index.erb
deleted file mode 100644
index 6f66205..0000000
--- a/spec10/public/abstract_controller/controllers/views/helpers/concat/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% concatter do -%>Hello<% end -%>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/layout/alt.erb b/spec10/public/abstract_controller/controllers/views/layout/alt.erb
deleted file mode 100644
index 6003f10..0000000
--- a/spec10/public/abstract_controller/controllers/views/layout/alt.erb
+++ /dev/null
@@ -1 +0,0 @@
-Alt: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/layout/custom.erb b/spec10/public/abstract_controller/controllers/views/layout/custom.erb
deleted file mode 100644
index 95aecf9..0000000
--- a/spec10/public/abstract_controller/controllers/views/layout/custom.erb
+++ /dev/null
@@ -1 +0,0 @@
-Custom: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb b/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb
deleted file mode 100644
index 5bec4c8..0000000
--- a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-the index
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb b/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb
deleted file mode 100644
index 6ccefea..0000000
--- a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/display_object_with_action/new.erb
+++ /dev/null
@@ -1 +0,0 @@
-new action
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb b/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb
deleted file mode 100644
index 5bec4c8..0000000
--- a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-the index
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb b/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_app_layout/index.erb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb b/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb
deleted file mode 100644
index 5bec4c8..0000000
--- a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_custom_layout/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-the index
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb b/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb
deleted file mode 100644
index efa11ff..0000000
--- a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-This is overriden by the custom template root
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb b/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb
deleted file mode 100644
index 28eca30..0000000
--- a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_template_multiple_roots/show.erb
+++ /dev/null
@@ -1 +0,0 @@
-default show
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_append_contents/index.erb b/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_append_contents/index.erb
deleted file mode 100644
index 725f833..0000000
--- a/spec10/public/abstract_controller/controllers/views/merb/test/fixtures/abstract/render_two_append_contents/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<% append_content(:foo, "Foo") %><% append_content(:foo, "Bar") %><%= catch_content(:foo) =%>
diff --git a/spec10/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb b/spec10/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb
deleted file mode 100644
index ba0f9ef..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/another_directory/_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial in another directory
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb b/spec10/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb
deleted file mode 100644
index 8bfc4e8..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/basic_partial/_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/basic_partial/index.erb b/spec10/public/abstract_controller/controllers/views/partial/basic_partial/index.erb
deleted file mode 100644
index 0f23025..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/basic_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Index <%= partial :partial %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb b/spec10/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb
deleted file mode 100644
index 512967a..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/basic_partial_with_multiple_roots/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Base Index: <%= partial :partial %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb b/spec10/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb
deleted file mode 100644
index ce0a0e8..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/nested_partial/_first.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= msg %> <%= partial 'second', :another => 'second' %> <%= msg %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb b/spec10/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb
deleted file mode 100644
index be40ea4..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/nested_partial/_second.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= another %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/nested_partial/index.erb b/spec10/public/abstract_controller/controllers/views/partial/nested_partial/index.erb
deleted file mode 100644
index b62d70d..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/nested_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= partial 'first', :msg => 'first' %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb
deleted file mode 100644
index 12b070e..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_in_another_directory/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Index <%= partial 'another_directory/partial' %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb
deleted file mode 100644
index 9a526e0..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_both/_collection.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= letter %><%= delimiter %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb
deleted file mode 100644
index 964482b..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_both/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :collection, :with => @foo, :as => :letter, :delimiter => @delimiter %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb
deleted file mode 100644
index bcfe958..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections/_collection.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= collection %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb
deleted file mode 100644
index f0f45d6..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :collection, :with => @foo %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb
deleted file mode 100644
index ce8c7c7..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/_collection.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= letter %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb
deleted file mode 100644
index 6c774ce..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_as/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :collection, :with => @foo, :as => :letter %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb
deleted file mode 100644
index 5f5dfa6..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/_collection.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= collection_index %>/<%= collection_size %> 
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb
deleted file mode 100644
index 94b982d..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_collections_and_counter/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial counting: <%= partial :collection, :with => @foo %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/_ab.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/_ab.erb
deleted file mode 100644
index 09a07ab..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/_ab.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= a if defined?(a) && a%><%= b if defined?(b) && b %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/index.erb
deleted file mode 100644
index 8e906ee..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_different_sets_of_locals/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= partial(:ab, :a => "a")%><%= partial(:ab, :b => "b") %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb
deleted file mode 100644
index c9fdb22..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals/_variables.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= local %> <%= variables %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb
deleted file mode 100644
index f10591c..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :variables, :local => @foo, :variables => @bar %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/_variable.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/_variable.erb
deleted file mode 100644
index 19d25e3..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/_variable.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= value %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/index.erb
deleted file mode 100644
index e5e4067..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_locals_overriding_helpers/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :variable, :value => @foo %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb
deleted file mode 100644
index 0d2fd59..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/_both.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= first %> <%= second %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb b/spec10/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb
deleted file mode 100644
index 8b8c1a0..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/partial_with_with_and_locals/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :both, :with => @foo, :as => :first, :second => @bar %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb b/spec10/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb
deleted file mode 100644
index 982f0ed..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/with_absolute_partial/_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-Absolute Partial
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb b/spec10/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb
deleted file mode 100644
index 21d7bcb..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/with_absolute_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Index <%= partial @absolute_partial_path %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb b/spec10/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb
deleted file mode 100644
index 9cdafe7..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/with_as_partial/_with_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= w00t %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb b/spec10/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb
deleted file mode 100644
index e1d8b75..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/with_as_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :with_partial, :with => @foo, :as => :w00t %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb b/spec10/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb
deleted file mode 100644
index 16de2de..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/with_nil_partial/_with_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= with_partial || "nil local" %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb b/spec10/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb
deleted file mode 100644
index 669d1b6..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/with_nil_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :with_partial, :with => nil %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb b/spec10/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb
deleted file mode 100644
index 16de2de..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/with_partial/_with_partial.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= with_partial || "nil local" %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/partial/with_partial/index.erb b/spec10/public/abstract_controller/controllers/views/partial/with_partial/index.erb
deleted file mode 100644
index 22c9304..0000000
--- a/spec10/public/abstract_controller/controllers/views/partial/with_partial/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Partial with <%= partial :with_partial, :with => @foo %>
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/test_display/foo.html.erb b/spec10/public/abstract_controller/controllers/views/test_display/foo.html.erb
deleted file mode 100644
index 5159d33..0000000
--- a/spec10/public/abstract_controller/controllers/views/test_display/foo.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-fooness
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/controllers/views/test_render/foo.html.erb b/spec10/public/abstract_controller/controllers/views/test_render/foo.html.erb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec10/public/abstract_controller/controllers/views/wonderful/index.erb b/spec10/public/abstract_controller/controllers/views/wonderful/index.erb
deleted file mode 100644
index 1601e9f..0000000
--- a/spec10/public/abstract_controller/controllers/views/wonderful/index.erb
+++ /dev/null
@@ -1 +0,0 @@
-Wonderful
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/display_spec.rb b/spec10/public/abstract_controller/display_spec.rb
deleted file mode 100644
index 4f988f6..0000000
--- a/spec10/public/abstract_controller/display_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb::AbstractController, " displaying objects with templates" do
-
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
-  end
-  
-  it "should allow you to pass an object" do
-    dispatch_should_make_body("DisplayObject", "the index")
-  end
-  
-  it "should allow you to pass an object with an action specified" do
-    dispatch_should_make_body("DisplayObjectWithAction", "new action", :create)
-  end
-  
-  it "should allow you to pass an object with a path specified for the template" do
-    dispatch_should_make_body("DisplayObjectWithPath", "fooness")
-  end
- 
-  it "should allow you to pass an object with a path specified for the template via opts" do
-    dispatch_should_make_body("DisplayObjectWithPathViaOpts", "fooness")
-  end
-
-  it "should allow you to pass an object using multiple template root" do
-    dispatch_should_make_body("DisplayObjectWithMultipleRoots", "App: new index")
-  end
-
-  it "should allow you to pass an object using multiple template root, with layout" do
-    dispatch_should_make_body("DisplayObjectWithMultipleRoots", "Alt: new show", "show")
-  end
-
-  it "should allow you to pass an object using multiple template root, without layout" do
-    dispatch_should_make_body("DisplayObjectWithMultipleRoots", "fooness", "another")
-  end
-
-end
diff --git a/spec10/public/abstract_controller/filter_spec.rb b/spec10/public/abstract_controller/filter_spec.rb
deleted file mode 100644
index 1a83e53..0000000
--- a/spec10/public/abstract_controller/filter_spec.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-# ==== Public API
-# Merb::AbstractController.before(filter<Symbol, Proc>, opts<Hash>)
-# Merb::AbstractController.after(filter<Symbol, Proc>, opts<Hash>)
-# Merb::AbstractController.skip_before(filter<Symbol>)
-# Merb::AbstractController.skip_after(filter<Symbol>)
-#
-# ==== Semipublic API
-# Merb::AbstractController#_body
-# Merb::AbstractController#_dispatch(action<~to_s>)
-
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-AbstractControllers = Merb::Test::Fixtures::Abstract
-
-describe Merb::AbstractController, " should support before and after filters" do
-    
-  it "should support before filters" do
-    dispatch_should_make_body("TestBeforeFilter", "foo filter")
-  end
-  
-  it "should support after filters" do
-    dispatch_should_make_body("TestAfterFilter", "foo filter")
-  end
-  
-  it "should support skipping filters that were defined in a superclass" do
-    dispatch_should_make_body("TestSkipFilter", "")
-  end
-  
-  it "should append before filters when added" do
-    dispatch_should_make_body("TestBeforeFilterOrder", "bar filter")
-  end
-
-  it "should append after filters when added" do
-    dispatch_should_make_body("TestAfterFilterOrder", "bar filter")
-  end
-  
-  it "should support proc arguments to filters evaluated in the controller's instance" do
-    dispatch_should_make_body("TestProcFilter", "proc filter1 proc filter2")
-  end
-  
-  it "should support proc arguments to filters when called inside a class method" do
-    dispatch_should_make_body("TestProcFilterViaMethod", "onetwo")
-  end
-  
-  it "should support filters that skip specific actions via :exclude" do
-    dispatch_should_make_body("TestExcludeFilter", " ", :index)
-    dispatch_should_make_body("TestExcludeFilter", "foo filter bar filter", :show)    
-  end
-  
-  it "should support filters that work only on specific actions via :only" do
-    dispatch_should_make_body("TestOnlyFilter", "foo filter bar filter", :index)        
-    dispatch_should_make_body("TestOnlyFilter", " ", :show)
-  end
-  
-  it "should throw an error if both :exclude and :only are passed to a filter" do
-    running { Merb::Test::Fixtures::Abstract.class_eval do
-      
-      class TestErrorFilter < Merb::Test::Fixtures::Abstract::Testing
-        before :foo, :only => :index, :exclude => :show
-      end 
-    end }.should raise_error(ArgumentError, /either :only or :exclude/)
-  end
-
-  it "should support filters that work only when a condition is met via :if" do
-    dispatch_should_make_body("TestConditionalFilterWithMethod", "foo filter", :index, :presets => {:bar= => true})
-    dispatch_should_make_body("TestConditionalFilterWithMethod", "", :index, :presets => {:bar= => false})
-  end
-  
-  it "should support filters that work only when a condition is met via :unless" do
-    dispatch_should_make_body("TestConditionalFilterWithProc", "foo filter", :index, :presets => {:bar= => 'baz'})
-    dispatch_should_make_body("TestConditionalFilterWithProc", "index action", :index, :presets => {:bar= => 'bar'})
-  end
-  
-  it "should throw an error if both :if and :unless are passed to a filter" do
-    running { Merb::Test::Fixtures::Abstract.class_eval do
-      
-      class TestErrorFilter < Merb::Test::Fixtures::Abstract::Testing
-        before :foo, :if => :index, :unless => :show
-      end 
-    end }.should raise_error(ArgumentError, /either :if or :unless/)
-  end
-  
-  it "should throw an error" do
-    running { dispatch_should_make_body("TestConditionalFilterWithNoProcOrSymbol", "") }.should raise_error(ArgumentError, /a Symbol or a Proc/)
-  end
-  
-  it "should throw an error if an unknown option is passed to a filter" do
-    running { Merb::Test::Fixtures::Abstract.class_eval do
-        
-      class TestErrorFilter < Merb::Test::Fixtures::Abstract::Testing
-        before :foo, :except => :index
-      end 
-    end }.should raise_error(ArgumentError, /known filter options/)
-  end
-  
-  it "should support passing an argument to a before filter method" do
-    dispatch_should_make_body("TestBeforeFilterWithArgument", "index action")
-  end
-  
-  it "should support passing arguments to a before filter method" do
-    dispatch_should_make_body("TestBeforeFilterWithArguments", "index action")
-  end
-  
-  it "should support throwing :halt to block a filter chain" do
-    dispatch_should_make_body("BeforeFilterWithThrowHalt", "Halt thrown")
-  end
-  
-  it "should support throwing a proc in filters" do
-    dispatch_should_make_body("BeforeFilterWithThrowProc", "Proc thrown")    
-  end
-  
-  it "should raise an InternalServerError if :halt is thrown with unexpected type" do
-    calling { dispatch_to(AbstractControllers::FilterChainError, :index) }.should(
-      raise_error(ArgumentError, /Threw :halt, Merb. Expected String/))
-  end
-  
-  it "should print useful HTML if throw :halt is called with nil" do
-    dispatch_should_make_body("ThrowNil", 
-      "<html><body><h1>Filter Chain Halted!</h1></body></html>")
-  end
-  
-  it "should inherit before filters" do
-    dispatch_should_make_body("FilterChild2", "Before Limited", :limited)
-  end
-    
-  it "should provide benchmarks" do
-    controller = dispatch_to(AbstractControllers::Benchmarking, :index)
-    controller._benchmarks[:before_filters_time].should be_kind_of(Numeric)
-    controller._benchmarks[:after_filters_time].should be_kind_of(Numeric)
-  end
-  
-  it "should not get contaminated by cousins" do
-    dispatch_should_make_body("FilterChild2", "Before Index")
-    dispatch_should_make_body("FilterChild1", "Before Limited", :limited)
-    dispatch_should_make_body("FilterChild1", " Index")
-  end
-
-  # #611 in merb-core
-  it "doesn't override existing filters by filters with similar names" do
-    dispatch_should_make_body("HasFiltersWithSimilarNames", "Befilter Bef Index")
-  end
-end
diff --git a/spec10/public/abstract_controller/helper_spec.rb b/spec10/public/abstract_controller/helper_spec.rb
deleted file mode 100644
index 9be4902..0000000
--- a/spec10/public/abstract_controller/helper_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb::AbstractController, " with capture and concat" do
-  
-  it "should support capture" do
-    dispatch_should_make_body("Capture", "Capture")
-  end
-  
-  it "should support capture with arguments" do
-    dispatch_should_make_body("CaptureWithArgs", "Capture: one, two")
-  end
-
-  it "should support capturing the return value of a non-template block" do
-    dispatch_should_make_body("CaptureReturnValue", "Capture")
-  end
-
-  it "should support capturing the return value of a non-template block" do
-    dispatch_should_make_body("CaptureNonStringReturnValue", "Captured ''")
-  end
-
-  it "should support basic helpers that use capture with <%=" do
-    dispatch_should_make_body("CaptureEq", "Pre. Beginning... Capturing... Done. Post.")
-  end
-  
-  it "should support concat" do
-    dispatch_should_make_body("Concat", "Concat")
-  end
-    
-end
diff --git a/spec10/public/abstract_controller/partial_spec.rb b/spec10/public/abstract_controller/partial_spec.rb
deleted file mode 100644
index bbecaee..0000000
--- a/spec10/public/abstract_controller/partial_spec.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb::AbstractController, " Partials" do
-  
-  it "should work with no options" do
-    dispatch_should_make_body("BasicPartial", "Index Partial")
-  end
-  
-  it "should work with :with" do
-    dispatch_should_make_body("WithPartial", "Partial with With")
-  end
-
-  it "should work with nil :with" do
-    dispatch_should_make_body("WithNilPartial", "Partial with nil local")
-  end
-  
-  it "should work with :with and :as" do
-    dispatch_should_make_body("WithAsPartial", "Partial with With and As")
-  end
-  
-  it "should work with collections" do
-    dispatch_should_make_body("PartialWithCollections", "Partial with collection")
-  end
-  
-  it "should work with collections and :as" do
-    dispatch_should_make_body("PartialWithCollectionsAndAs", "Partial with collection")
-  end
-  
-  it "should work with key/value pairs of locals" do
-    dispatch_should_make_body("PartialWithLocals", "Partial with local variables")
-  end
-  
-  it "should work with key/value pairs of locals that override helpers" do
-    dispatch_should_make_body("PartialWithLocalsOverridingHelpers", "Partial with local")
-  end
-  
-  it "should work with different calls to the same partial having different sets of locals" do
-    dispatch_should_make_body("PartialWithDifferentSetsOfLocals", "ab")
-  end
-  
-  it "should work with both collections and locals" do
-    dispatch_should_make_body("PartialWithBoth", "Partial with c-o-l-l-e-c-t-i-o-n-")    
-  end
-  
-  it "should work with both :with/:as and regular locals" do
-    dispatch_should_make_body("PartialWithWithAndLocals", "Partial with with and locals")    
-  end
-  
-  it "should work with a partial in another directory" do
-    dispatch_should_make_body("PartialInAnotherDirectory", "Index Partial in another directory")
-  end
-
-  it "should work with nested partials with locals" do
-    dispatch_should_make_body("NestedPartial", "first second first")
-  end
-  
-  it "should work with multiple template roots" do
-    dispatch_should_make_body("BasicPartialWithMultipleRoots", "Base Index: Alt Partial")
-  end
-  
-  it "should be able to count collections" do
-    dispatch_should_make_body("PartialWithCollectionsAndCounter", "Partial counting: 0/5 1/5 2/5 3/5 4/5 ")
-  end
-  
-  it "should render a partial using an absolute path" do
-    dispatch_should_make_body("WithAbsolutePartial", "Index Absolute Partial")
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/abstract_controller/render_spec.rb b/spec10/public/abstract_controller/render_spec.rb
deleted file mode 100644
index 6ad4f76..0000000
--- a/spec10/public/abstract_controller/render_spec.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb::AbstractController, " rendering plain strings" do
-
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")
-  end
-
-	it "should render two append_contents into same object" do
-    dispatch_should_make_body("RenderTwoAppendContents", "FooBar")		
-	end
-
-  it "should support rendering plain strings with no layout" do
-    dispatch_should_make_body("RenderString", "the index")
-  end
-
-  it "should support rendering plain strings with custom layouts" do
-    dispatch_should_make_body("RenderStringCustomLayout", "Custom: the index")
-  end
-
-  it "should support rendering plain strings with the application layout" do
-    dispatch_should_make_body("RenderStringAppLayout", "App: the index")
-  end
-  
-  it "should support rendering plain strings with the controller layout" do
-    dispatch_should_make_body("RenderStringControllerLayout", "Controller: the index")
-  end
-
-  it "should support rendering plain strings with dynamic layouts" do
-    dispatch_should_make_body("RenderStringDynamicLayout", "Custom: the index", :index)
-    dispatch_should_make_body("RenderStringDynamicLayout", "Alt: the alt index", :alt_index)
-  end
-  
-end
-
-describe Merb::AbstractController, " rendering templates" do
-
-  it "should support rendering templates with no layout" do
-    dispatch_should_make_body("RenderTemplate", "the index")
-  end
-
-  it "should support rendering templates with custom layouts" do
-    dispatch_should_make_body("RenderStringCustomLayout", "Custom: the index")
-  end
-  
-  it "should support rendering templates with the application layout" do
-    dispatch_should_make_body("RenderTemplateAppLayout", "App: the index")
-  end
-  
-  it "should support rendering plain strings with the controller layout" do
-    dispatch_should_make_body("RenderTemplateControllerLayout", "Controller: the index")
-  end
-  
-  it "should support rendering templates without any layout (even if the default layout exists)" do
-    dispatch_should_make_body("RenderNoDefaultAppLayout", "the index")
-  end
-  
-  it "should inherit the layout setting from a parent controller class" do
-    dispatch_should_make_body("RenderNoDefaultAppLayoutInherited", "the index")
-  end
-
-  it "should support reverting to the default layout" do
-    dispatch_should_make_body("RenderDefaultAppLayoutInheritedOverride", "App: the index")
-  end  
-
-  it "should support rendering templates with a custom location" do
-    dispatch_should_make_body("RenderTemplateCustomLocation", "Wonderful")
-  end
-  
-  it "should support rendering templates from an absolute path location" do
-    dispatch_should_make_body("RenderTemplateAbsolutePath", "Wonderful")
-  end
-
-  it "should support rendering templates with multiple roots" do
-    dispatch_should_make_body("RenderTemplateMultipleRoots", "App: Multiple")
-  end
-
-  it "should support rendering templates with multiple roots, first root" do
-    dispatch_should_make_body("RenderTemplateMultipleRoots", "default show", "show")
-  end
-
-  it "should support rendering templates with multiple roots and custom location" do
-    dispatch_should_make_body("RenderTemplateMultipleRootsAndCustomLocation", "Woot.")
-  end 
-
-  it "should support rendering templates with multiple roots and custom location from an inherited controller" do
-    dispatch_should_make_body("RenderTemplateMultipleRootsInherited", "Good.")
-  end 
-
-end
diff --git a/spec10/public/abstract_controller/spec_helper.rb b/spec10/public/abstract_controller/spec_helper.rb
deleted file mode 100644
index fd1b282..0000000
--- a/spec10/public/abstract_controller/spec_helper.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-__DIR__ = File.dirname(__FILE__)
-require File.expand_path(File.join(__DIR__, "..", "..", "spec_helper"))
-
-require File.expand_path(File.join(__DIR__, "controllers", "filters"))
-require File.expand_path(File.join(__DIR__, "controllers", "cousins"))
-require File.expand_path(File.join(__DIR__, "controllers", "render"))
-require File.expand_path(File.join(__DIR__, "controllers", "partial"))
-require File.expand_path(File.join(__DIR__, "controllers", "display"))
-require File.expand_path(File.join(__DIR__, "controllers", "helpers"))
-
-Merb.start :environment => 'test'
-
-module Merb::Test::Behaviors
-  include Merb::Test::RequestHelper
-  
-  def dispatch_should_make_body(klass, body, action = :index, opts = {}, env = {}, &blk)
-    klass = Merb::Test::Fixtures::Abstract.const_get(klass)
-    if opts.key?(:presets)
-      controller = klass.new
-      opts[:presets].each { |attr, value| controller.send(attr, value)}
-      controller._dispatch(action.to_s)
-    else
-      controller = dispatch_to(klass, action, opts, env, &blk)
-    end
-    controller.body.should == body
-  end
-end
-
-Spec::Runner.configure do |config|
-  config.include Merb::Test::Behaviors
-end
\ No newline at end of file
diff --git a/spec10/public/boot_loader/boot_loader_spec.rb b/spec10/public/boot_loader/boot_loader_spec.rb
deleted file mode 100644
index 78d0672..0000000
--- a/spec10/public/boot_loader/boot_loader_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# The before/after filters in BootLoaders are considered public API.
-#
-# However, Merb::BootLoader.subclasses is not considered public API and should not be used in plugins.
-
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-class Merb::BootLoader::AfterTest < Merb::BootLoader
-  after Merb::BootLoader::BeforeAppLoads
-  
-  def self.run
-  end
-end
-
-class Merb::BootLoader::BeforeTest < Merb::BootLoader
-  before Merb::BootLoader::Templates
-  
-  def self.run
-  end
-end
-
-describe "The BootLoader" do
-  
-  it "should support adding a BootLoader after another" do
-    idx = Merb::BootLoader.subclasses.index("Merb::BootLoader::BeforeAppLoads")
-    Merb::BootLoader.subclasses.index("Merb::BootLoader::AfterTest").should == idx + 1
-  end
-
-  it "should support adding a BootLoader before another" do
-    idx = Merb::BootLoader.subclasses.index("Merb::BootLoader::Templates")
-    Merb::BootLoader.subclasses.index("Merb::BootLoader::BeforeTest").should == idx - 1
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/boot_loader/spec_helper.rb b/spec10/public/boot_loader/spec_helper.rb
deleted file mode 100644
index f4a904e..0000000
--- a/spec10/public/boot_loader/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
\ No newline at end of file
diff --git a/spec10/public/controller/authentication_spec.rb b/spec10/public/controller/authentication_spec.rb
deleted file mode 100644
index ae79e3d..0000000
--- a/spec10/public/controller/authentication_spec.rb
+++ /dev/null
@@ -1,174 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "basic_authentication in general", :shared => true do
-
-  it "should halt the filter chain and return a 401 status code if no authentication is sent" do
-    response = dispatch_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index)
-    response.body.should == "HTTP Basic: Access denied.\n"
-    response.status.should == 401
-  end
-
-  it "should halt the filter chain and return a 401 status code on invalid username and password" do
-    u, p = "John", "password"
-    response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
-    response.body.should == "HTTP Basic: Access denied.\n"
-    response.status.should == 401
-  end
-
-  it "should halt the filter chain and return a 401 status code on invalid username and valid password" do
-    u, p = "John", "secret"
-    response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
-    response.body.should == "HTTP Basic: Access denied.\n"
-    response.status.should == 401
-  end
-
-  it "should halt the filter chain and return a 401 status code on valid username and invalid password" do
-    u, p = "Fred", "password"
-    response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
-    response.body.should == "HTTP Basic: Access denied.\n"
-    response.status.should == 401
-  end
-
-  it "should call the action on valid username and password" do
-    u, p = "Fred", "secret"
-    response = dispatch_with_basic_authentication_to(Merb::Test::Fixtures::Controllers::BasicAuthentication, :index, u, p)
-    response.body.should == "authenticated"
-    response.status.should == 200
-  end
-
-end
-
-describe Merb::Controller do
-  MTFC = Merb::Test::Fixtures::Controllers
-  
-  describe "#basic_authentication with no realm" do
-    it_should_behave_like "basic_authentication in general"
-
-    it "should have a default WWW-Authenticate realm of 'Application' if no authentication is sent" do
-      response = dispatch_to(MTFC::BasicAuthentication, :index)
-      response.headers['WWW-Authenticate'] = 'Basic realm="Application"'
-    end
-
-    it "should have a default WWW-Authenticate realm of 'Application' if incorrect authentication is sent" do
-      u, p = "John", "password"
-      response = dispatch_with_basic_authentication_to(MTFC::BasicAuthentication, :index, u, p)
-      response.headers['WWW-Authenticate'] = 'Basic realm="Application"'
-    end
-  end
-
-  describe "#basic_authentication with realm" do
-
-    it_should_behave_like "basic_authentication in general"
-
-    it "should set the WWW-Authenticate realm if no authentication is sent" do
-      response = dispatch_to(MTFC::BasicAuthenticationWithRealm, :index)
-      response.headers['WWW-Authenticate'] = 'Basic realm="My SuperApp"'
-    end
-
-    it "should set the WWW-Authenticate realm if incorrect authentication is sent" do
-      u, p = "John", "password"
-      response = dispatch_with_basic_authentication_to(MTFC::BasicAuthenticationWithRealm, :index, u, p)
-      response.headers['WWW-Authenticate'] = 'Basic realm="My SuperApp"'
-    end
-
-  end
-
-  describe  "#basic_authentication.authenticate" do
-
-    it "should pass in the username and password and return the result of the block" do
-      u, p = "Fred", "secret"
-      response = dispatch_with_basic_authentication_to(MTFC::AuthenticateBasicAuthentication, :index, u, p)
-      response.body.should == "Fred:secret"
-    end
-
-  end
-  
-  describe "#basic_authentication.request" do
-
-    it "should halt the filter chain and return a 401 status code" do
-      response = dispatch_to(MTFC::RequestBasicAuthentication, :index)
-      response.body.should == "HTTP Basic: Access denied.\n"
-      response.status.should == 401
-    end
-
-    it "should have a default WWW-Authenticate realm of 'Application'" do
-      response = dispatch_to(MTFC::RequestBasicAuthentication, :index)
-      response.headers['WWW-Authenticate'].should == 'Basic realm="Application"'
-    end
-
-    it "should set the WWW-Authenticate realm" do
-      response = dispatch_to(MTFC::RequestBasicAuthenticationWithRealm, :index)
-      response.headers['WWW-Authenticate'].should == 'Basic realm="My SuperApp"'
-    end
-
-  end
-
-  describe "#basic_authentication.request!" do
-    
-    it "should not halt the filter chain and provide a 401 status code" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.status = 401
-    end
-    
-    it "should have a default WWW=Authentication realm of 'Application'" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.headers['WWW-Authenticate'].should == 'Basic realm="Application"'
-    end
-    
-    it "should set the WWW-Authenticate realm" do
-      response = dispatch_to(MTFC::PassiveBasicAuthenticationWithRealm, :index)
-      response.headers['WWW-Authenticate'].should == 'Basic realm="My Super App"'
-    end
-    
-    it "should allow the action to render it's output" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.body.should == "My Output"
-    end
-
-    it "should be callable from within an action" do
-      response = dispatch_to(MTFC::PassiveBasicAuthenticationInAction, :index)
-      response.body.should == "In Action"
-      response.status.should == 401
-    end
-
-  end
-  
-  describe "basic_authentication.provided?" do
-    
-    it "should return true when basic authentication credentials have been supplied" do
-      u, p = "Fred", "secret"
-      response = dispatch_with_basic_authentication_to(MTFC::PassiveBasicAuthentication, :index, u, p)
-      response.basic_authentication.provided?.should be_true
-    end
-    
-    it "should return false when basic authentication credentials have not been supplied" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.basic_authentication.provided?.should be_false
-    end
-  end
-  
-  describe "basic_authentication.username and password" do
-    it "return username if set" do
-      u, p = "Fred", "secret"
-      response = dispatch_with_basic_authentication_to(MTFC::PassiveBasicAuthentication, :index, u, p)
-      response.basic_authentication.username.should == "Fred"
-    end
-    
-    it "should return nil if the username is not set" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.basic_authentication.username.should be_nil
-    end
-    
-    it "should return password if set" do
-      u, p = "Fred", "secret"
-      response = dispatch_with_basic_authentication_to(MTFC::PassiveBasicAuthentication, :index, u, p)
-      response.basic_authentication.password.should == "secret"
-    end
-    
-    it "shoudl return nil for the password if not set" do
-      response = dispatch_to(MTFC::PassiveBasicAuthentication, :index)
-      response.basic_authentication.password.should be_nil
-    end
-  end
-
-end
diff --git a/spec10/public/controller/base_spec.rb b/spec10/public/controller/base_spec.rb
deleted file mode 100644
index b615c81..0000000
--- a/spec10/public/controller/base_spec.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-Controllers = Merb::Test::Fixtures::Controllers
-
-describe Merb::Controller, "callable actions" do
-  
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")    
-    Merb::Router.prepare do |r|
-      r.default_routes
-    end
-  end
-  
-  it "has no any callable actions by default" do
-    Merb::Controller.callable_actions.should be_empty
-  end
-  
-  it "sets body on dispatch to callable action" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::Base, :index)
-    controller.body.should == "index"
-  end
-
-  it "sets status on dispatch to callable action" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::Base, :index)
-    controller.status.should == 200
-  end
-
-  it "should not dispatch to hidden actions" do
-    calling { dispatch_to(Merb::Test::Fixtures::Controllers::Base, :hidden) }.
-      should raise_error(Merb::ControllerExceptions::ActionNotFound)
-  end
-  
-  it "should dispatch to included methods with show_action called" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::Base, :baz).body.should == "baz"
-  end
-
-  it "should not dispatch to included methods with show_action not called" do
-    calling { dispatch_to(Merb::Test::Fixtures::Controllers::Base, :bat) }.
-      should raise_error(Merb::ControllerExceptions::ActionNotFound)
-  end
- 
-end
-
-describe Merb::Controller, "filtered params" do  
-  it "removes filtered parameters from the log" do
-    out = with_level(:info) do
-      dispatch_to(Controllers::FilteredParams, :index, :username => "Awesome", :password => "sekrit")
-    end
-    out.should include_log(/Params:.*"username"\s*=>\s*"Awesome"/)
-    out.should_not include_log(/"password"/)
-  end
-  
-  it "doesn't put the parameters in the log in levels higher than info" do
-    out = with_level(:warn) do
-      dispatch_to(Controllers::FilteredParams, :index, :username => "Awesome", :password => "sekrit")
-    end
-    out.should_not include_log(/Params/)
-  end
-end
-
-describe Merb::Controller, "records benchmarks" do
-  it "collects benchmarks for the amount of time the action took" do
-    controller = dispatch_to(Controllers::Base, :index)
-    controller._benchmarks[:action_time].should be_kind_of(Numeric)
-  end
-end
-
-describe Merb::Controller, "handles invalid actions" do
-  it "raises if an action was not found" do
-    calling { controller = dispatch_to(Controllers::Base, :awesome) }.
-      should raise_error(Merb::ControllerExceptions::ActionNotFound,
-      /Action.*awesome.*was not found in.*Base/)
-  end
-end
-
-describe Merb::Controller, "handles invalid status codes" do
-  it "raises if an invalid status is set" do
-    calling { dispatch_to(Controllers::SetStatus, :index) }.
-      should raise_error(ArgumentError, /was.*String/)
-  end
-end
-
-describe Merb::Controller, "before/after dispatch callbacks" do
-  it "are used for internal purposes" do
-    controller = dispatch_to(Controllers::DispatchCallbacks, :index)
-    controller.called_before.should be_true
-    controller.called_after.should be_true
-  end
-
-  it 'has access to action name' do
-    controller = dispatch_to(Controllers::DispatchCallbacks, :index)
-    controller.called_before.should be_true
-    controller.called_after.should be_true
-    controller.observed_action.should == 'index'
-  end
-end
diff --git a/spec10/public/controller/conditional_get_spec.rb b/spec10/public/controller/conditional_get_spec.rb
deleted file mode 100644
index fef9294..0000000
--- a/spec10/public/controller/conditional_get_spec.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-Controllers = Merb::Test::Fixtures::Controllers
-
-describe Merb::Controller, "#etag=" do
-  
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")    
-    Merb::Router.prepare do |r|
-      r.default_routes
-    end
-  end
-
-  it 'sets ETag header' do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet, :sets_etag)
-    controller.headers['ETag'].should == '"39791e6fb09"'
-  end
-end
-
-
-
-describe Merb::Controller, "#last_modified=" do
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")    
-    Merb::Router.prepare do |r|
-      r.default_routes
-    end
-  end
-
-  it 'sets Last-Modified header' do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet, :sets_last_modified)
-    controller.headers['Last-Modified'].should == Time.at(7000).httpdate
-  end
-end
-
-
-describe Merb::Controller, "#etag_matches?" do
-  it 'returns true when response ETag header equals to request If-None-Match header' do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet, :sets_etag, {}, { Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' } )
-    controller.etag_matches?('"39791e6fb09"').should be(true)
-  end
-
-  it 'returns false when response ETag header DOES NOT equal to request If-None-Match header' do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet, :sets_etag, {}, { Merb::Const::HTTP_IF_NONE_MATCH => '"6fb91e09793"' } )
-    controller.etag_matches?('"55789a6fb09"').should be(false)
-  end
-end
-
-
-
-describe Merb::Controller, "#modified_since?" do
-  before(:each) do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_last_modified, {}, { Merb::Const::HTTP_IF_MODIFIED_SINCE => Time.at(7000).httpdate })
-  end
-  
-  it 'return true when response Last-Modified header value <= request If-Modified-Since header' do
-    @controller.not_modified?(Time.at(5000)).should be(true)
-    @controller.not_modified?(Time.at(6999)).should be(true)
-  end
-
-  it 'return false when response Last-Modified header value > request If-Modified-Since header' do
-    @controller.not_modified?(Time.at(7003)).should be(false)
-    @controller.not_modified?(Time.at(16999)).should be(false)
-  end
-end
-
-
-describe Merb::Controller, "#request_fresh?" do
-  it 'return true when ETag matches' do
-    env = { 'HTTP_IF_MODIFIED_SINCE' => Time.at(8000).httpdate, Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_etag, {}, env)
-
-    @controller.request_fresh?.should be(true)
-  end
-
-  it 'return true when entity is not modified since date given in request header' do
-    env = { Merb::Const::HTTP_IF_MODIFIED_SINCE => Time.at(7000).httpdate }
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :sets_last_modified, {}, env)
-    
-    @controller.request_fresh?.should be(true)
-  end
-
-  it 'return true when both etag and last modification date satisfy request freshness' do
-    env = { 'HTTP_IF_MODIFIED_SINCE' => Time.at(7000).httpdate, Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }    
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :superfresh, {}, env)
-    
-    @controller.request_fresh?.should be(true)
-  end
-
-  it 'return false when neither etag nor last modification date satisfy request freshness' do
-    env = { 'HTTP_IF_MODIFIED_SINCE' => Time.at(7000).httpdate, Merb::Const::HTTP_IF_NONE_MATCH => '"39791e6fb09"' }    
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConditionalGet,
-                              :stale, {}, env)
-    
-    @controller.request_fresh?.should be(false)
-  end  
-end
diff --git a/spec10/public/controller/config/init.rb b/spec10/public/controller/config/init.rb
deleted file mode 100644
index 53123fe..0000000
--- a/spec10/public/controller/config/init.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Merb::Config.use do |c|
-  c[:default_cookie_domain] = "specs.merbivore.com"
-  c[:session_id_key]        = "some_meaningless_id_key"
-  c[:session_secret_key]    = "some_super_hyper_secret_key"
-  c[:session_expiry]        = Merb::Const::WEEK * 4
-end
diff --git a/spec10/public/controller/controllers/authentication.rb b/spec10/public/controller/controllers/authentication.rb
deleted file mode 100644
index 0c7cf31..0000000
--- a/spec10/public/controller/controllers/authentication.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-  class BasicAuthentication < Testing
-    before :authenticate, :only => :index
-
-    def index
-      "authenticated"
-    end
-
-    protected
-
-    def authenticate
-      basic_authentication { |u, p| u == "Fred" && p == "secret" }
-    end
-  end
-
-  class BasicAuthenticationWithRealm < BasicAuthentication
-    def authenticate
-      basic_authentication("My Super App") { |u, p| u == "Fred" && p == "secret" }
-    end
-  end
-
-  class AuthenticateBasicAuthentication < Testing
-    def index
-      basic_authentication.authenticate { |u, p| "Fred:secret" }
-    end
-  end
-
-  class RequestBasicAuthentication < BasicAuthentication
-    def authenticate
-      basic_authentication.request
-    end
-  end
-
-  class RequestBasicAuthenticationWithRealm < BasicAuthentication
-    def authenticate
-      basic_authentication("My SuperApp").request
-    end
-  end
-  
-  class PassiveBasicAuthentication < BasicAuthentication
-        
-    def index
-      "My Output"
-    end
-    
-    def authenticate
-      basic_authentication.request!
-    end
-  end
-  
-  class PassiveBasicAuthenticationWithRealm < BasicAuthentication
-    def authenticate
-      basic_authentication("My Super App").request!
-    end
-  end
-  
-  class PassiveBasicAuthenticationInAction < BasicAuthentication
-    
-    def index
-      basic_authentication.request!
-      "In Action"
-    end
-    
-    def authenticate
-      true
-    end
-  end
-
-end
diff --git a/spec10/public/controller/controllers/base.rb b/spec10/public/controller/controllers/base.rb
deleted file mode 100644
index 036305a..0000000
--- a/spec10/public/controller/controllers/base.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-module Merb::Test::Fixtures
-  module Controllers
-    class Testing < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    module Inclusion
-      def self.included(base)
-        base.show_action(:baz)
-      end
-
-      def baz
-        "baz"
-      end
-
-      def bat
-        "bat"
-      end
-    end
-
-    class Base < Testing
-      include Inclusion
-
-      def index
-        self.status = :ok
-        "index"
-      end
-
-      def hidden
-        "Bar"
-      end
-      hide_action :hidden
-    end
-    
-    class FilteredParams < Testing
-      def index
-        "Index"
-      end
-      
-      def self._filter_params(params)
-        params.reject {|k,v| k == "password" }
-      end
-    end
-
-    class SetStatus < Testing
-      def index
-        self.status = "awesome"
-      end
-    end
-
-    class DispatchCallbacks < Testing
-
-      attr_accessor :called_before, :called_after, :observed_action
-
-      self._before_dispatch_callbacks << lambda do |c|
-        c.called_before = true
-        c.observed_action = c.action_name
-      end
-
-      self._after_dispatch_callbacks  << lambda do |c|
-         c.called_after  = true
-      end
-
-      def index
-        "index"
-      end
-
-    end
-
-  end
-end
diff --git a/spec10/public/controller/controllers/conditional_get.rb b/spec10/public/controller/controllers/conditional_get.rb
deleted file mode 100644
index d10b078..0000000
--- a/spec10/public/controller/controllers/conditional_get.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require "time"
-
-module Merb::Test::Fixtures
-  module Controllers
-    class Testing < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    class ConditionalGet < Testing
-      def sets_etag
-        self.etag = "39791e6fb09"
-        "can has etag"
-      end
-
-      def sets_last_modified
-        self.last_modified = Time.at(7000)
-        "can has last-modified"
-      end
-
-      def superfresh
-        self.etag          = "39791e6fb09"
-        self.last_modified = Time.at(7000)
-        
-        "can has fresh request"
-      end
-
-      def stale
-        self.etag          = "1234567678"
-        self.last_modified = Time.at(9000)
-        
-        "can has stale request"
-      end
-    end
-  end
-end
diff --git a/spec10/public/controller/controllers/cookies.rb b/spec10/public/controller/controllers/cookies.rb
deleted file mode 100644
index 1b36804..0000000
--- a/spec10/public/controller/controllers/cookies.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-  class CookiesController < Testing
-    
-    def store_cookies
-      cookies.set_cookie(:awesome,   'super-cookie', :domain  => 'blog.merbivore.com')
-      cookies[:foo] = 'bar'
-      cookies.set_cookie(:oldcookie, 'this is really old', :expires => Time.utc(2020))
-      cookies.set_cookie(:safecook,  'no-hackers-here', :secure => true)
-    end
-    
-    def destroy_cookies
-      cookies.delete(:foo)
-    end
-    
-    def retrieve_cookies
-    end
-    
-  end
-  
-  class OverridingDefaultCookieDomain < CookiesController
-    self._default_cookie_domain = "overridden.merbivore.com"
-  end
-
-  class NotOverridingDefaultCookieDomain < CookiesController
-  end
-  
-  class EmptyDefaultCookieDomain < CookiesController
-    self._default_cookie_domain = ''
-  end
-  
-end
diff --git a/spec10/public/controller/controllers/dispatcher.rb b/spec10/public/controller/controllers/dispatcher.rb
deleted file mode 100644
index fbe8a68..0000000
--- a/spec10/public/controller/controllers/dispatcher.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-class Application < Merb::Controller
-end
-
-module Merb::Test::Fixtures
-  module Controllers
-    class Testing < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    class DispatchTo < Testing
-      def index
-        "Dispatched"
-      end
-    end
-    
-    class NotAController
-      def index
-        "Dispatched"
-      end
-    end
-    
-    class RaiseGone < Testing
-      def index
-        raise Gone
-      end
-    end
-
-    class RaiseLoadError < Merb::Controller
-      def index
-        raise LoadError, "In the controller"
-      end
-    end
-
-  end
-end
diff --git a/spec10/public/controller/controllers/display.rb b/spec10/public/controller/controllers/display.rb
deleted file mode 100644
index cd73f7b..0000000
--- a/spec10/public/controller/controllers/display.rb
+++ /dev/null
@@ -1,118 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-  class SomeModel
-    def to_xml; "<XML:Model />" end
-    def to_json(options = {})
-      includes = options[:include].join(', ') rescue ""
-      excludes = options[:except].first rescue ""
-      "{ 'include': '#{includes}', 'exclude': '#{excludes}' }"
-    end
-    def to_param
-      "1"
-    end
-  end
-
-
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-
-  class Display < Testing
-    def index
-      @obj = SomeModel.new
-      display @obj
-    end    
-  end
-
-  class DisplayWithLayout < Testing
-    provides :json
-    
-    def index
-      @obj = SomeModel.new
-      display @obj, :layout => :custom_arg
-    end    
-  end
-
-  class DisplayHtmlDefault < Display; end
-
-  class DisplayClassProvides < Display
-    provides :xml
-  end
-
-
-  class DisplayLocalProvides < Display
-    def index
-      @obj = SomeModel.new
-      provides :xml
-      display @obj
-    end
-  end
-
-
-  class DisplayWithTemplate < Display
-    layout :custom
-
-    def no_layout
-      render :layout => false
-    end
-    
-    def absolute_without_mime
-      render :template => File.expand_path(self._template_root) / "merb/test/fixtures/controllers/html_default/index"
-    end
-    
-    def absolute_with_mime
-      render :template => File.expand_path(self._template_root) / "merb/test/fixtures/controllers/html_default/index.html"
-    end
-    
-    def relative_without_mime
-      render :template => "merb/test/fixtures/controllers/html_default/index"
-    end
-    
-    def relative_with_mime
-      render :template => "merb/test/fixtures/controllers/html_default/index.html"
-    end
-    
-  end
-  
-  class DisplayWithTemplateArgument < Display
-    def index
-      @obj = SomeModel.new
-      display @obj, :layout => :custom_arg
-    end
-
-    def index_by_arg
-      @obj = SomeModel.new
-      display @obj, "merb/test/fixtures/controllers/display_with_template_argument/index.html"
-    end
-  end
-
-  class DisplayWithStringLocation < Display
-    provides :json
-    def index
-      @obj = SomeModel.new
-      display @obj, :location => "/some_resources/#{@obj.to_param}"
-    end
-  end
-
-  class DisplayWithStatus < Display
-    provides :json
-    def index
-      @obj = SomeModel.new
-      display @obj, :status => 500
-    end
-  end
-
-  class DisplayWithSerializationOptions < Display
-    provides :json
-
-    def index
-      @obj = SomeModel.new
-      display @obj, :include => [:beer, :jazz], :except => [:idiots]
-    end
-
-    def index_that_passes_empty_hash
-      @obj = SomeModel.new
-      display @obj, {}
-    end
-  end
-end
diff --git a/spec10/public/controller/controllers/redirect.rb b/spec10/public/controller/controllers/redirect.rb
deleted file mode 100644
index 866c597..0000000
--- a/spec10/public/controller/controllers/redirect.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-  class SimpleRedirect < Testing
-    def index
-      redirect("/")
-    end
-  end
-
-  class PermanentRedirect < Testing
-    def index
-      redirect("/", :permanent => true)
-    end
-  end
-
-  class RedirectWithMessage < Testing
-    def index
-      redirect("/", :message => { :notice => "what?" })
-    end
-  end
-  
-  class ConsumesMessage < Testing
-    def index
-      message[:notice].inspect
-    end
-  end
-  
-  class SetsMessage < Testing
-    def index
-      message[:notice] = "Hello"
-      message[:notice]
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/responder.rb b/spec10/public/controller/controllers/responder.rb
deleted file mode 100644
index 8b91189..0000000
--- a/spec10/public/controller/controllers/responder.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-  class Testing < Merb::Controller
-    self._template_root = File.dirname(__FILE__) / "views"
-  end
-
-
-  class Responder < Testing
-    def index
-      render
-    end
-  end
-
-
-  class HtmlDefault < Responder; end
-
-
-  class ClassProvides < Responder
-    provides :xml
-  end
-
-
-  class LocalProvides < Responder
-    def index
-      provides :xml
-      render
-    end
-  end
-
-
-  class MultiProvides < Responder
-    def index
-      provides :html, :js
-      render
-    end
-  end
-
-  class ClassAndLocalProvides < Responder
-    provides :html    
-    def index
-      provides :xml
-      render
-    end
-  end
-
-  class ClassOnlyProvides < Responder
-    only_provides :text, :xml
-
-    def index
-      "nothing"
-    end
-  end
-
-
-  class OnlyProvides < Responder
-    def index
-      only_provides :text, :xml
-      "nothing"
-    end
-  end
-
-  class ClassDoesntProvides < Responder
-    provides :xml
-    does_not_provide :html
-
-    def index
-      "nothing"
-    end
-  end
-
-
-  class DoesntProvide < Responder
-    def index
-      provides :xml
-      does_not_provide :html
-      "nothing"
-    end
-  end
-
-
-  class FooFormatProvides < Responder
-    only_provides :foo
-
-    def index
-      render "nothing"
-    end
-
-    def show
-      headers["Content-Language"] = 'nl'
-      headers["Biz"] = "buzz"
-      render "nothing"
-    end
-  end
-end
diff --git a/spec10/public/controller/controllers/streaming.rb b/spec10/public/controller/controllers/streaming.rb
deleted file mode 100644
index 0c0469a..0000000
--- a/spec10/public/controller/controllers/streaming.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Merb::Test::Fixtures
-  module Controllers
-    class Testing < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-    end
-
-    class Streaming < Testing
-      def x_accel_redirect
-        nginx_send_file "/protected/content.pdf", "application/pdf"
-      end
-
-      def x_accel_redirect_with_default_content_type
-        nginx_send_file "/protected/content.pdf"
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/controller/controllers/url.rb b/spec10/public/controller/controllers/url.rb
deleted file mode 100644
index 18887b4..0000000
--- a/spec10/public/controller/controllers/url.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-module Merb::Test::Fixtures::Controllers
-  class Url < Testing
-    
-    def void
-      'index'
-    end
-    
-    def this_route
-      url(:this)
-    end
-    
-    def this_route_with_page
-      url(:this, :page => 2)
-    end
-    
-    def one_optionals
-      url(:this, :one => params[:one])
-    end
-    
-    def two_optionals
-      url(:this, :one => params[:one], :two => params[:two])
-    end
-    
-    # --- Resource routes ---
-    
-    def index
-      url(:this)
-    end
-    
-    def show
-      url(:this)
-    end
-    
-    def new
-      url(:this)
-    end
-    
-    def edit
-      url(:this)
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/layout/custom.html.erb b/spec10/public/controller/controllers/views/layout/custom.html.erb
deleted file mode 100644
index 95aecf9..0000000
--- a/spec10/public/controller/controllers/views/layout/custom.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Custom: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/layout/custom_arg.html.erb b/spec10/public/controller/controllers/views/layout/custom_arg.html.erb
deleted file mode 100644
index 2624385..0000000
--- a/spec10/public/controller/controllers/views/layout/custom_arg.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Custom Arg: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/layout/custom_arg.json.erb b/spec10/public/controller/controllers/views/layout/custom_arg.json.erb
deleted file mode 100644
index 3d69967..0000000
--- a/spec10/public/controller/controllers/views/layout/custom_arg.json.erb
+++ /dev/null
@@ -1 +0,0 @@
-{custom_arg: <%= catch_content(:for_layout) %>}
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb
deleted file mode 100644
index 2bed133..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-HTML: Class and Local
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb
deleted file mode 100644
index a7053ed..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_and_local_provides/index.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<XML:ClassAndLocalProvides provides='true' />
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb
deleted file mode 100644
index 3028185..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-HTML: Wins Over XML If Both Are Specified
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb
deleted file mode 100644
index 7c91f63..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/class_provides/index.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<XML:Class provides='true' />
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb
deleted file mode 100644
index a1ab916..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Template
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb
deleted file mode 100644
index 533e76b..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template/no_layout.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-No layoutz eva!
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb
deleted file mode 100644
index a1ab916..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/display_with_template_argument/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Template
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb
deleted file mode 100644
index eb4b52b..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/html_default/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-HTML: Default
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb
deleted file mode 100644
index 95aecf9..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/layout/custom.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Custom: <%= catch_content(:for_layout) %>
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb
deleted file mode 100644
index a3a841a..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-This should not render
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb
deleted file mode 100644
index c1384ec..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/local_provides/index.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<XML:Local provides='true' />
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb
deleted file mode 100644
index 0b44f43..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-HTML: Multi
\ No newline at end of file
diff --git a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb b/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb
deleted file mode 100644
index c381ca4..0000000
--- a/spec10/public/controller/controllers/views/merb/test/fixtures/controllers/multi_provides/index.js.erb
+++ /dev/null
@@ -1 +0,0 @@
-JS: Multi
\ No newline at end of file
diff --git a/spec10/public/controller/cookies_spec.rb b/spec10/public/controller/cookies_spec.rb
deleted file mode 100644
index 2df35d8..0000000
--- a/spec10/public/controller/cookies_spec.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Controller, "._default_cookie_domain" do
-    
-  before(:each) do
-    Merb::Config[:default_cookie_domain].should_not be(nil)
-  end
-  
-  it 'is set to Merb::Config[:default_cookie_domain] by default' do
-    Merb::Controller._default_cookie_domain.should == Merb::Config[:default_cookie_domain]
-    Merb::Test::Fixtures::Controllers::CookiesController._default_cookie_domain.should ==
-      Merb::Config[:default_cookie_domain]
-  end
-
-  it "can be overridden for particular controller" do
-    Merb::Test::Fixtures::Controllers::OverridingDefaultCookieDomain._default_cookie_domain.should ==
-      "overridden.merbivore.com"
-  end
-
-  it 'is inherited by subclasses unless overriden' do
-    Merb::Test::Fixtures::Controllers::NotOverridingDefaultCookieDomain._default_cookie_domain.should ==
-      Merb::Config[:default_cookie_domain]
-  end
-end
-
-describe Merb::Controller, "#cookies creating" do
-  
-  it "should set all the cookies for a request" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    controller.headers['Set-Cookie'].length.should == 4
-  end
-  
-  it "should set a simple cookie" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = controller.headers['Set-Cookie'].sort[1]
-    cookie.should match(/foo=bar;/)
-    cookie.should match(/domain=specs.merbivore.com;/)
-  end
-  
-  it "should set the cookie domain correctly when it is specified" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = controller.headers['Set-Cookie'].sort[0]
-    cookie.should match(/awesome=super-cookie;/)
-    cookie.should match(/domain=blog.merbivore.com;/)
-  end
-  
-  it "should format the expires time to the correct format" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = controller.headers['Set-Cookie'].sort[2]
-    cookie.should include("oldcookie=this+is+really+old;")
-    cookie.should include("expires=Wed, 01-Jan-2020 00:00:00 GMT;")
-  end
-  
-  it "should append secure to the end of the cookie header when marked as such" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :store_cookies)
-    cookie = controller.headers['Set-Cookie'].sort[3]
-    cookie.should match(/secure$/)
-  end
-  
-  it "sets the Set-Cookie response header - and ignores blank options" do
-    controller_klass = Merb::Test::Fixtures::Controllers::EmptyDefaultCookieDomain
-    with_cookies(controller_klass) do |cookie_jar|
-      controller = dispatch_to(controller_klass, :store_cookies)
-      cookies = controller.headers['Set-Cookie'].sort
-      cookies[1].should == "foo=bar; path=/;"
-    end
-  end
-    
-  it "it gives access to cookie values" do
-    controller_klass = Merb::Test::Fixtures::Controllers::CookiesController
-    with_cookies(controller_klass) do |cookie_jar|
-      controller = dispatch_to(controller_klass, :store_cookies)
-      controller = dispatch_to(controller_klass, :retrieve_cookies)
-      controller.cookies['awesome'].should == 'super-cookie'
-      controller.cookies['foo'].should == 'bar'
-      controller.cookies.should == cookie_jar
-    end
-  end
-  
-end
-
-describe Merb::Controller, "#cookies destroying" do
-  
-  it "should send a cookie when deleting a cookie" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :destroy_cookies)
-    controller.headers['Set-Cookie'].length.should == 1
-  end
-  
-  it "should set the expiration time of the cookie being destroyed to the past" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::CookiesController, :destroy_cookies)
-    cookie = controller.headers['Set-Cookie'].sort[0]
-    cookie.should include("expires=Thu, 01-Jan-1970 00:00:00 GMT;")
-  end
-  
-end
diff --git a/spec10/public/controller/dispatcher_spec.rb b/spec10/public/controller/dispatcher_spec.rb
deleted file mode 100644
index 16d6fe1..0000000
--- a/spec10/public/controller/dispatcher_spec.rb
+++ /dev/null
@@ -1,556 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-require File.join(File.dirname(__FILE__), "controllers", "dispatcher")
-
-include Merb::Test::Fixtures::Controllers
-
-describe Merb::Dispatcher do
-  include Merb::Test::Rspec::ControllerMatchers
-  include ::Webrat::Matchers
-  include ::Webrat::HaveTagMatcher
-  
-  def status(response)
-    response.status
-  end
-  
-  def body(response)
-    response.body.to_s
-  end
-  
-  def headers(response)
-    response.headers
-  end
-  
-  def dispatch(url)
-    rack = Merb::Dispatcher.handle(request_for(url))
-    Struct.new(:status, :headers, :body, :url).new(rack[0], rack[1], rack[2], url)
-  end
-
-  def request_for(url)
-    Merb::Request.new(Rack::MockRequest.env_for(url))
-  end
-
-  before(:each) do
-    Merb::Config[:exception_details] = true
-  end
-
-  describe "with a regular route, " do
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/dispatch_to/index"
-    end
-  
-    it "dispatches to the right controller and action" do
-      body(dispatch(@url)).should == "Dispatched"
-    end
-    
-    it "has the correct status code" do
-      status(dispatch(@url)).should == 200
-    end
-    
-    it "sets the Request#params to include the route params" do
-      # FIXME
-      request = request_for(@url)
-      Merb::Dispatcher.handle(request)
-      request.params.should == 
-        {"controller" => "dispatch_to", "action" => "index", 
-         "id" => nil, "format" => nil}
-    end
-    
-    it "provides the time for start of request handling via Logger#info" do
-      with_level(:info) do
-        dispatch(@url)
-      end.should include_log("Started request handling")
-      
-      with_level(:warn) do
-        dispatch(@url)
-      end.should_not include_log("Started request handling")
-    end
-    
-    it "provides the routed params via Logger#debug" do
-      with_level(:debug) do
-        dispatch(@url)
-      end.should include_log("Routed to:")
-      
-      with_level(:info) do
-        dispatch(@url)
-      end.should_not include_log("Routed to:")
-    end
-    
-    it "provides the benchmarks via Logger#info" do
-      with_level(:info) do
-        dispatch(@url)
-      end.should include_log(":after_filters_time")
-      
-      with_level(:warn) do
-        dispatch(@url)
-      end.should_not include_log(":after_filters_time")
-    end
-  end
-  
-  describe "with a route that redirects" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/redirect/to/foo").redirect("/foo", :permanent => true)
-        default_routes
-      end
-      @url = "/redirect/to/foo"
-      @controller = dispatch(@url)
-    end
-    
-    it "redirects" do
-      body(@controller).should =~ %r{You are being <a href="/foo">redirected}
-    end
-    
-    it "reports that it is redirecting via Logger#info" do
-      with_level(:info) do
-        dispatch(@url)
-      end.should include_log("Dispatcher redirecting to: /foo (301)")
-      
-      with_level(:warn) do
-        dispatch(@url)
-      end.should_not include_log("Dispatcher redirecting to: /foo (301)")
-    end
-    
-    it "sets the status correctly" do
-      status(@controller).should == 301
-    end
-    
-    it "sets the location correctly" do
-      headers(@controller)["Location"].should == "/foo"
-    end
-  end
-  
-  describe "with a deferred route that redirects" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/redirect/to/foo").defer_to do |request, params|
-          redirect "/foo", :permanent => true
-        end
-        default_routes
-      end
-      @url = "/redirect/to/foo"
-      @controller = dispatch(@url)
-    end
-    
-    it "redirects" do
-      body(@controller).should =~ %r{You are being <a href="/foo">redirected}
-    end
-    
-    it "reports that it is redirecting via Logger#info" do
-      with_level(:info) do
-        dispatch(@url)
-      end.should include_log("Dispatcher redirecting to: /foo (301)")
-      
-      with_level(:warn) do
-        dispatch(@url)
-      end.should_not include_log("Dispatcher redirecting to: /foo (301)")
-    end
-    
-    it "sets the status correctly" do
-      status(@controller).should == 301
-    end
-    
-    it "sets the location correctly" do
-      headers(@controller)["Location"].should == "/foo"
-    end
-  end
-  
-  describe "with a route that points to a class that is not a Controller, " do
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/not_a_controller/index"
-      @controller = dispatch(@url)
-    end
-    
-    describe "with exception details showing" do
-      it "returns a 404 status" do
-        status(@controller).should == 404
-      end
-      
-      it "returns useful info in the body" do
-        body(@controller).should =~
-          %r{<h2>Controller 'Merb::Test::Fixtures::Controllers::NotAController' not found.</h2>}
-      end
-    end
-    
-    describe "when the action raises an Exception" do
-      before(:each) do
-        Object.class_eval <<-RUBY
-          class Exceptions < Merb::Controller
-            def gone
-              "Gone"
-            end
-          end
-        RUBY
-      end
-      
-      after(:each) do
-        Object.send(:remove_const, :Exceptions)
-      end
-      
-      before(:each) do
-        Merb::Router.prepare do
-          default_routes
-        end
-        @url = "/raise_gone/index"
-        @controller = dispatch(@url)
-      end
-      
-      it "renders the action Exception#gone" do
-        body(@controller).should == "Gone"
-      end
-      
-      it "returns the status 410" do
-        status(@controller).should == 410
-      end
-    end
-    
-    describe "when the action raises an Exception that has a superclass Exception available" do
-      before(:each) do
-        Object.class_eval <<-RUBY
-          class Exceptions < Merb::Controller
-            def client_error
-              "ClientError"
-            end
-          end
-        RUBY
-      end
-      
-      after(:each) do
-        Object.send(:remove_const, :Exceptions)
-      end
-      
-      before(:each) do
-        Merb::Router.prepare do
-          default_routes
-        end
-        @url = "/raise_gone/index"
-        @controller = dispatch(@url)
-      end
-      
-      it "renders the action Exceptions#client_error since #gone is not defined" do
-        body(@controller).should == "ClientError"
-      end
-      
-      it "returns the status 410 (Gone) even though we rendered #client_error" do
-        status(@controller).should == 410
-      end
-    end
-  end
-  
-  describe "with a route that doesn't point to a Controller," do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match('/').register
-      end
-      
-      @controller = dispatch("/")
-    end
-    
-    describe "with exception details showing" do
-    
-      it "returns a 404 status" do
-        status(@controller).should == 404
-      end
-      
-      it "returns useful info in the body" do
-        body(@controller).should =~
-          %r{<h2>Route matched, but route did not specify a controller.</h2>}
-      end
-    end
-    
-    describe "when the action raises an Exception" do
-      before(:each) do
-        Object.class_eval <<-RUBY
-          class Exceptions < Merb::Controller
-            def gone
-              "Gone"
-            end
-          end
-        RUBY
-      end
-      
-      after(:each) do
-        Object.send(:remove_const, :Exceptions)
-      end
-      
-      before(:each) do
-        Merb::Router.prepare do
-          default_routes
-        end
-        @url = "/raise_gone/index"
-        @controller = dispatch(@url)
-      end
-      
-      it "renders the action Exception#gone" do
-        body(@controller).should == "Gone"
-      end
-      
-      it "returns the status 410" do
-        status(@controller).should == 410
-      end
-    end
-    
-    
-  end
-  
-  describe "when the action raises an Error that is not a ControllerError" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def load_error
-            "LoadError"
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/raise_load_error/index"
-      @controller = dispatch(@url)
-    end
-    
-    it "renders Exceptions#load_error" do
-      body(@controller).should == "LoadError"
-    end
-    
-    it "returns a 500 status code" do
-      status(@controller).should == 500
-    end
-  end
-
-  describe "when the Exception action raises" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def load_error
-            raise StandardError, "Big error"
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/raise_load_error/index"
-      @controller = dispatch(@url)
-    end
-    
-    it "renders the default exception template" do
-      body(@controller).should have_xpath("//h1[contains(.,'Standard Error')]")
-      body(@controller).should have_xpath("//h2[contains(.,'Big error')]")
-
-      body(@controller).should have_xpath("//h1[contains(.,'Load Error')]")
-      body(@controller).should have_xpath("//h2[contains(.,'Big error')]")
-    end
-    
-    it "returns a 500 status code" do
-      status(@controller).should == 500
-    end
-  end
-
-
-  describe "when the Exception action raises a NotFound" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def not_found
-            raise NotFound, "Somehow, the thing you were looking for was not found."
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/page/not/found"
-      @controller = dispatch(@url)
-    end
-    
-    it "renders the default exception template" do
-      body(@controller).should have_xpath("//h1[contains(.,'Not Found')]")
-      body(@controller).should have_xpath("//h2[contains(.,'Somehow, the thing')]")
-    end
-    
-    it "returns a 404 status code" do
-      status(@controller).should == 404
-    end
-  end
-
-  describe "when the Exception action raises the same thing as the original failure" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def load_error
-            raise LoadError, "Something failed here"
-          end          
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/raise_load_error/index"
-      @controller = dispatch(@url)
-    end
-    
-    it "renders the default exception template" do
-      body(@controller).should have_xpath("//h2[contains(.,'Something failed here')]")
-    end
-    
-    it "returns a 500 status code" do
-      status(@controller).should == 500
-    end
-  end
-
-  describe "when more than one Exceptions methods raises an Error" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class Exceptions < Merb::Controller
-          def load_error
-            raise StandardError, "StandardError"
-          end
-          
-          def standard_error
-            raise Exception, "Exception"
-          end
-        end
-      RUBY
-    end
-    
-    after(:each) do
-      Object.send(:remove_const, :Exceptions)
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      @url = "/raise_load_error/index"
-      @controller = dispatch(@url)
-      @body = body(@controller)
-    end
-    
-    it "renders a list of links to the traces" do
-      @body.should have_xpath("//li//a[@href='#exception_0']")
-      @body.should have_xpath("//li//a[@href='#exception_1']")
-      @body.should have_xpath("//li//a[@href='#exception_2']")
-    end
-    
-    it "renders the default exception template" do
-      @body.should have_xpath("//h1[contains(.,'Load Error')]")
-      @body.should have_xpath("//h2[contains(.,'In the controller')]")
-      @body.should have_xpath("//h1[contains(.,'Standard Error')]")
-      @body.should have_xpath("//h2[contains(.,'StandardError')]")
-      @body.should have_xpath("//h1[contains(.,'Exception')]")
-      @body.should have_xpath("//h2[contains(.,'Exception')]")
-    end
-    
-    it "returns a 500 status code" do
-      status(@controller).should == 500
-    end
-  end
-  
-  describe "dispatching to abstract controllers" do
-    before(:each) do
-      Object.class_eval <<-RUBY
-        class AbstractOne < Merb::Controller
-          abstract!
-          def index; "AbstractOne#index"; end
-        end
-      
-        class NotAbstract < AbstractOne
-          def index; "NotAbstract#index"; end
-        end
-        
-        class NormalController < Application
-          def index; "NormalController#index"; end
-        end
-      RUBY
-      class Application < Merb::Controller
-        def method_for_abstract_test; "method_for_abstract_test"; end
-      end
-      Merb::Router.prepare do
-        default_routes
-      end
-    end
-    
-    after(:each) do
-      Object.class_eval do 
-        remove_const(:AbstractOne)
-        remove_const(:NotAbstract)
-      end
-      
-      class Application < Merb::Controller
-        undef method_for_abstract_test
-      end
-      
-      # Merb::Router.prepare do
-      #   default_routes
-      # end      
-    end
-    
-    it "should return a NotFound for an Application#method" do
-      status(dispatch("/application/method_for_abstract_test")).should == 404
-    end
-    
-    it "should have Application marked as abstract" do
-      Application.should be_abstract
-    end
-    
-    it "should have AbstractOne marked as abstract" do
-      AbstractOne.should be_abstract
-    end
-    
-    it "should return a NotFound for an abstract controllers method" do
-      status(dispatch("/abstract_one/index")).should == 404
-    end
-    
-    it "should return correctly for a normal controller" do
-      result = dispatch("/normal_controller/index")
-      status(result).should == 200
-      body(result).should == "NormalController#index"
-    end
-    
-    it "should return correctly for a controller that is inherited from an abstract controller" do
-      result = dispatch("/not_abstract/index")
-      status(result).should == 200
-      body(result).should == "NotAbstract#index"
-    end
-    
-    
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/controller/display_spec.rb b/spec10/public/controller/display_spec.rb
deleted file mode 100644
index 20b316e..0000000
--- a/spec10/public/controller/display_spec.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Controller, " displaying objects based on mime type" do
-
-  before do
-    Merb::Router.prepare do |r|
-      r.default_routes
-    end
-  end
-
-  it "should default the mime-type to HTML (and raise since there's no to_html)" do
-    running { dispatch_to(Merb::Test::Fixtures::Controllers::DisplayHtmlDefault, :index) }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should set headers['Location'] to string provided by :location" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithStringLocation, :index, {}, :http_accept => "application/json").headers['Location'].should =~ /some_resources/
-  end
-
-  it "should set the status to a code provided by :status" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithStatus, :index, {}, :http_accept => "application/json").status.should == 500
-  end
-
-  it "should use a template if specified" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :index).body.should match(/Custom: Template/)
-  end
-
-  it "overrides layout settings with render :layout => false" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :no_layout).body.should_not match(/Custom: Template/)
-  end
-  
-  it "should accept an absolute template path argument - with the mimetype extension" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :absolute_with_mime).body.should == "Custom: HTML: Default"
-  end
-  
-  it "should accept an absolute template path argument - without the mimetype extension" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :absolute_without_mime).body.should == "Custom: HTML: Default"
-  end
-  
-  it "should accept a relative template path argument - with the mimetype extension" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :relative_with_mime).body.should == "Custom: HTML: Default"
-  end
-  
-  it "should accept a relative template path argument - without the mimetype extension" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplate, :relative_without_mime).body.should == "Custom: HTML: Default"
-  end
-
-  it "should accept a layout argument when calling to_*" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithLayout, :index, {}, 
-      :http_accept => "application/json").body.should == "{custom_arg: { 'include': '', 'exclude': '' }}"
-  end
-  
-  it "should accept a layout argument with a template" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplateArgument, :index).body.should == "Custom Arg: Template"
-  end
-
-  it "should accept a template path argument" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithTemplateArgument, :index_by_arg).body.should == "Template"
-  end
-  
-  it "should use other mime-types if they are provided on the class level" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayClassProvides, :index, {}, :http_accept => "application/xml")
-    controller.body.should == "<XML:Model />"
-  end
-
-  it "should fail if none of the acceptable mime-types are available" do
-    calling { dispatch_to(Merb::Test::Fixtures::Controllers::DisplayClassProvides, :index, {}, :http_accept => "application/json") }.
-      should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should use mime-types that are provided at the local level" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayLocalProvides, :index, {}, :http_accept => "application/xml")
-    controller.body.should == "<XML:Model />"
-  end
-
-  it "passes all options to serialization method like :to_json" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithSerializationOptions, :index, {}, :http_accept => "application/json")
-    controller.body.should == "{ 'include': 'beer, jazz', 'exclude': 'idiots' }"
-  end
-
-  it "passes single argument to serialization method like :to_json" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DisplayWithSerializationOptions, :index_that_passes_empty_hash, {}, :http_accept => "application/json")
-    controller.body.should == "{ 'include': '', 'exclude': '' }"
-  end
-end
diff --git a/spec10/public/controller/redirect_spec.rb b/spec10/public/controller/redirect_spec.rb
deleted file mode 100644
index 4d14613..0000000
--- a/spec10/public/controller/redirect_spec.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Controller, " redirects" do
-  it "redirects with simple URLs" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::SimpleRedirect, :index)
-    @controller.status.should == 302
-    @controller.headers["Location"].should == "/"
-  end
-
-  it "permanently redirects" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::PermanentRedirect, :index)
-    @controller.status.should == 301
-    @controller.headers["Location"].should == "/"
-  end
-
-  it "redirects with messages" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::RedirectWithMessage, :index)
-    @controller.status.should == 302
-    expected_url = Merb::Parse.escape([Marshal.dump(:notice => "what?")].pack("m"))
-    @controller.headers["Location"].should == "/?_message=#{expected_url}"
-  end
-  
-  it "consumes redirects with messages" do
-    message = Merb::Parse.escape([Marshal.dump(:notice => "what?")].pack("m"))
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::ConsumesMessage, :index, {:_message => message})
-    @controller.body.should == "\"what?\""
-  end
-  
-  it "supports setting the message for use immediately" do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::SetsMessage, :index)
-    @controller.body.should == "Hello"
-  end
-
-  it "handles malformed message" do
-    message = Merb::Parse.escape([Marshal.dump(:notice => "what?")].pack("m"))
-    message = message.reverse
-    lambda do
-      @controller = dispatch_to(Merb::Test::Fixtures::Controllers::SetsMessage, :index, {:_message => message})
-    end.should_not raise_error(TypeError)
-  end
-end
diff --git a/spec10/public/controller/resource_spec.rb b/spec10/public/controller/resource_spec.rb
deleted file mode 100644
index 51060a3..0000000
--- a/spec10/public/controller/resource_spec.rb
+++ /dev/null
@@ -1,364 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-require File.join(File.dirname(__FILE__), "controllers", "url")
-require 'ostruct'
-
-describe Merb::Controller, " #resource" do
-  
-  class Orm     < OpenStruct ; def id ; @table[:id] ; end ; end
-  class User    < Orm ; end
-  class Comment < Orm ; end
-  class Forum   < Orm ; end
-
-  module Namespaced
-    class User < Orm ; end
-  end
-  
-  before(:each) do
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :void)
-  end
-  
-  describe "generating a resource collection route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users
-        end
-      end
-      
-      @user = User.new(:id => 5)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(:users).should == "/users"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@user).should == "/users/5"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:users, :new).should == "/users/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@user, :edit).should == "/users/5/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@user, :delete).should == "/users/5/delete"
-    end
-    
-    it "should be able to specify extra actions through the options" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users, :collection => { :hello => :get }, :member => { :goodbye => :post }
-        end
-      end
-      
-      @controller.resource(:users, :hello).should  == "/users/hello"
-      @controller.resource(@user, :goodbye).should == "/users/5/goodbye"
-    end
-    
-    it "should be able to specify extra actions through the block" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users do
-            collection :hello
-            member     :goodbye
-          end
-        end
-      end
-      
-      @controller.resource(:users, :hello).should  == "/users/hello"
-      @controller.resource(@user, :goodbye).should == "/users/5/goodbye"
-    end
-    
-    it "should be able to work with a model Named Forum" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :forums
-        end
-      end
-      
-      @forum = Forum.new(:id => 9)
-      
-      @controller.resource(@forum).should == "/forums/9"
-    end
-    
-  end
-  
-  describe "generating a resource member route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :user
-      end
-      
-      @user = User.new(:id => 5)
-    end
-    
-    it "should generate the url for the member" do
-      @controller.resource(:user).should == "/user"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:user, :new).should == "/user/new"
-    end
-    
-    it "should generate the url for editing the member" do
-      @controller.resource(:user, :edit).should == "/user/edit"
-    end
-    
-    it "should generate the url for deleting the member" do
-      @controller.resource(:user, :delete).should == "/user/delete"
-    end
-    
-    it "should be able to specify extra actions through the options" do
-      Merb::Router.prepare do
-        resource :user, :member => { :hello => :get }
-      end
-      
-      @controller.resource(:user, :hello).should == "/user/hello"
-    end
-    
-    it "should be able to specify extra options through the block" do
-      Merb::Router.prepare do
-        resource :user do
-          member :hello
-        end
-      end
-      
-      @controller.resource(:user, :hello).should == "/user/hello"
-    end
-    
-  end
-  
-  describe "a nested resource collection route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users do
-            resources :comments
-          end
-        end
-      end
-      
-      @user    = User.new(:id => 5)
-      @comment = Comment.new(:id => 8)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(@user, :comments).should == "/users/5/comments"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@user, @comment).should == "/users/5/comments/8"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(@user, :comments, :new).should == "/users/5/comments/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@user, @comment, :edit).should == "/users/5/comments/8/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@user, @comment, :delete).should == "/users/5/comments/8/delete"
-    end
-  end
-  
-  describe "nested member routes" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :user do
-          resource :comment
-        end
-      end
-    end
-    
-    it "should generate the url for the nested member" do
-      @controller.resource(:user, :comment).should == "/user/comment"
-    end
-    
-    it "should generate the url for a new nested member" do
-      @controller.resource(:user, :comment, :new).should == "/user/comment/new"
-    end
-    
-    it "should generate the url for editing the nested member" do
-      @controller.resource(:user, :comment, :edit).should == "/user/comment/edit"
-    end
-    
-    it "should generate the url for deleting the nested member" do
-      @controller.resource(:user, :comment, :delete).should == "/user/comment/delete"
-    end
-  end
-  
-  describe "a namespaced resource collection route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify(:id).namespace(:admin) do
-          resources :users
-        end
-      end
-      
-      @user = User.new(:id => 5)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(:admin, :users).should == "/admin/users"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@user).should == "/users/5"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:users, :new).should == "/users/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@user, :edit).should == "/users/5/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@user, :delete).should == "/users/5/delete"
-    end
-    
-  end
-  
-  describe "a resource collection route with a named segment prefix" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify(:id).match("/:account") do
-          resources :users
-        end
-      end
-      
-      @user = User.new(:id => 5)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(:users, :account => "foo").should == "/foo/users"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@user, :account => "foo").should == "/foo/users/5"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:users, :new, :account => "foo").should == "/foo/users/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@user, :edit, :account => "foo").should == "/foo/users/5/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@user, :delete, :account => "foo").should == "/foo/users/5/delete"
-    end
-    
-    it "should use :account from the request params if it isn't specified" do
-      @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :void, :account => "foo")
-      @controller.resource(:users).should == "/foo/users"
-      @controller.resource(@user).should  == "/foo/users/5"
-    end
-    
-    it "should be able to override the :account request parameter" do
-      @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :void, :account => "foo")
-      @controller.resource(:users, :account => "bar").should == "/bar/users"
-      @controller.resource(@user, :account => "bar").should  == "/bar/users/5"
-    end
-    
-  end
-  
-  describe "a resource collection with a specified class" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify :id do
-          resources :admins, User do
-            resources :notes, "Comment"
-          end
-        end
-      end
-      
-      @admin = User.new(:id => 5)
-      @note  = Comment.new(:id => 8)
-    end
-    
-    it "should generate the url for the collection" do
-      @controller.resource(:admins).should == "/admins"
-    end
-    
-    it "should generate the url for a member of the collection" do
-      @controller.resource(@admin).should == "/admins/5"
-    end
-    
-    it "should generate the url for a new member" do
-      @controller.resource(:admins, :new).should == "/admins/new"
-    end
-    
-    it "should generate the url for editing a member of the collection" do
-      @controller.resource(@admin, :edit).should == "/admins/5/edit"
-    end
-    
-    it "should generate the url for deleting a member of the collection" do
-      @controller.resource(@admin, :delete).should == "/admins/5/delete"
-    end
-    
-    it "should generate the url for the nested collection" do
-      @controller.resource(@admin, :notes).should == "/admins/5/notes"
-    end
-    
-    it "should generate the url for a member of the nested collection" do
-      @controller.resource(@admin, @note).should == "/admins/5/notes/8"
-    end
-    
-    it "should generate the url for a new nested member" do
-      @controller.resource(@admin, :notes, :new).should == "/admins/5/notes/new"
-    end
-    
-    it "should generate the url for editing a member of the nested collection" do
-      @controller.resource(@admin, @note, :edit).should == "/admins/5/notes/8/edit"
-    end
-    
-    it "should generate the url for deleting a member of the nested collection" do
-      @controller.resource(@admin, @note, :delete).should == "/admins/5/notes/8/delete"
-    end
-    
-  end
-  
-  describe "a resource collection with a specified namespaced class" do
-    
-    it "should generate the url for the namespaced resource when passed as a constant" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users, User
-          match("/hello").resources :users, Namespaced::User
-        end
-      end
-      
-      resource(Namespaced::User.new(:id => 5)).should == "/hello/users/5"
-    end
-    
-    it "should generate the url for the namespaced resource when passed as a string" do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users, User
-          match("/hello").resources :users, "Namespaced::User"
-        end
-      end
-      
-      resource(Namespaced::User.new(:id => 5)).should == "/hello/users/5"
-    end
-    
-  end
-  
-  
-end
\ No newline at end of file
diff --git a/spec10/public/controller/responder_spec.rb b/spec10/public/controller/responder_spec.rb
deleted file mode 100644
index bef146f..0000000
--- a/spec10/public/controller/responder_spec.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Controller, " responds" do
-  
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")    
-    Merb::Router.prepare do |r|
-      r.default_routes
-    end
-  end
-  
-  it "should default the mime-type to HTML" do
-    dispatch_to(Merb::Test::Fixtures::Controllers::HtmlDefault, :index).body.should == "HTML: Default"
-  end
-
-  it "should use other mime-types if they are provided on the controller-level" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, :index, {}, :http_accept => "application/xml")
-    controller.body.should == "<XML:Class provides='true' />"
-  end
-
-  it "should fail if none of the acceptable mime-types are available" do
-    calling { dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, :index, {}, :http_accept => "application/json") }.
-      should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should use mime-types that are provided at the action-level" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::LocalProvides, :index, {}, :http_accept => "application/xml")
-    controller.body.should == "<XML:Local provides='true' />"
-  end
-  
-  it "should use mime-types that are provided at the controller-level as well as the action-level (controller)" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassAndLocalProvides, :index, {}, :http_accept => "text/html")
-    controller.class_provided_formats.should == [:html]
-    controller._provided_formats.should == [:html, :xml]
-    controller.body.should == "HTML: Class and Local"
-  end  
-  
-  it "should use mime-types that are provided at the controller-level as well as the action-level (action)" do  
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassAndLocalProvides, :index, {}, :http_accept => "application/xml")
-    controller.class_provided_formats.should == [:html]
-    controller._provided_formats.should == [:html, :xml]
-    controller.body.should == "<XML:ClassAndLocalProvides provides='true' />"
-  end
-
-  it "should use the first mime-type when accepting anything */*" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::MultiProvides, :index, {}, :http_accept => "*/*")
-    controller.body.should == "HTML: Multi"
-  end
-
-  it "should pick application/xhtml+xml when both application/xml and application/xhtml+xml are available" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, 
-      :index, {}, :http_accept => "application/xml,application/xhtml+xml")
-    controller.body.should == "HTML: Wins Over XML If Both Are Specified"
-  end
-
-  it "should use the first mime-type when accepting anything */*, even if something unprovidable comes first" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::HtmlDefault, :index, {}, :http_accept => "application/json, */*")
-    controller.body.should == "HTML: Default"
-  end
-
-  it "should use the pick the first mime-type from the list not the */*" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::MultiProvides, :index, {}, :http_accept => "text/javascript, */*")
-    controller.body.should == "JS: Multi"
-  end
-  
-  it "should pick the first mime-type if no specific supported content-type matches are *available*" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::MultiProvides, :index, {}, :http_accept => "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*")
-    controller.body.should == "HTML: Multi"
-  end
-
-  it "should pick the first mime-type if no specific supported content-type matches are actually *provided*" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::MultiProvides, :index, {}, :http_accept => "application/json, */*")
-    controller.body.should == "HTML: Multi"
-  end
-  
-  it "should select the format based on params supplied to it with controller-level provides" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, :index, :format => "xml")
-    controller.content_type.should == :xml    
-  end
-  
-  it "should select the format based on params supplied to it with action-level provides" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::LocalProvides, :index, :format => "xml")
-    controller.content_type.should == :xml    
-  end
-  
-  it "should select the format based on params supplied to it with controller and action provides (controller)" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassAndLocalProvides, :index, :format => "html")
-    controller.content_type.should == :html
-  end
-  
-  it "should select the format based on params supplied to it with controller and action provides (action)" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassAndLocalProvides, :index, :format => "xml")
-    controller.content_type.should == :xml
-  end
-  
-  it "should properly add formats when only_provides is called in action" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::OnlyProvides, :index, {}, :http_accept => "application/xml")
-    controller._provided_formats.should == [:text, :xml]
-    controller.content_type.should == :xml
-  end
-
-  it "should properly remove formats when only_provides is called in action" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::OnlyProvides, :index, {}, :http_accept => "text/html")
-    lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should properly add formats when only_provides is called in controller" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassOnlyProvides, :index, {}, :http_accept => "application/xml")
-    controller._provided_formats.should == [:text, :xml]
-    controller.content_type.should == :xml
-  end
-
-  it "should properly remove formats when only_provides is called in controller" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassOnlyProvides, :index, {}, :http_accept => "text/html")
-    lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-  
-  it "should properly remove formats when does_not_provide is called in controller" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassDoesntProvides, :index, {}, :http_accept => "text/html")
-    controller._provided_formats.should == [:xml]
-    lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-
-  it "should properly remove formats when does_not_provide is called in action" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::DoesntProvide, :index, {}, :http_accept => "text/html")
-    controller._provided_formats.should == [:xml]
-    lambda { controller.content_type }.should raise_error(Merb::ControllerExceptions::NotAcceptable)
-  end
-  
-  it "should return the correct default HTTP headers for a format" do
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::ClassProvides, :index, :format => "xml")
-    controller.headers.keys.sort.should == ["Content-Type"]
-    controller.headers["Content-Type"].should == "application/xml; charset=utf-8"
-  end
-  
-  it "should append the correct charset which was set when the format was added" do
-    Merb.add_mime_type(:foo, nil, %w[application/foo], :charset => "iso-8859-1")
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::FooFormatProvides, :index, :format => "foo")
-    controller.headers["Content-Type"].should == "application/foo; charset=iso-8859-1"
-  end
-  
-  it "should return the correct HTTP headers which were set when the format was added" do
-    Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => 'bar', "Content-Language" => "en", :charset => "utf-8")
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::FooFormatProvides, :index, :format => "foo")
-    controller.headers.keys.should_not include(:charset)
-    controller.headers["Content-Type"].should == "application/foo; charset=utf-8"
-    controller.headers["Content-Language"].should == "en"
-    controller.headers["Foo"] = "bar"
-  end
-  
-  it "should return the correct HTTP headers using the block given when the format was added" do
-    Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => "bar") do |controller|
-      controller.headers["Action-Name"] = controller.action_name
-    end
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::FooFormatProvides, :index, :format => "foo")
-    controller.headers["Content-Type"].should == "application/foo"
-    controller.headers["Action-Name"].should == "index"
-    controller.headers["Foo"] = "bar"
-  end
-  
-  it "should not overwrite runtime-set headers with default format response headers" do
-    Merb.add_mime_type(:foo, nil, %w[application/foo], "Foo" => "bar", "Content-Language" => "en")
-    controller = dispatch_to(Merb::Test::Fixtures::Controllers::FooFormatProvides, :show, :format => "foo")
-    controller.headers["Content-Language"].should == "nl"
-    controller.headers["Biz"] = "buzz"
-    controller.headers["Foo"] = "bar"
-  end
-  
-end
diff --git a/spec10/public/controller/spec_helper.rb b/spec10/public/controller/spec_helper.rb
deleted file mode 100644
index 411e1cf..0000000
--- a/spec10/public/controller/spec_helper.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-__DIR__ = File.dirname(__FILE__)
-
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-require File.join(__DIR__, "controllers", "base")
-require File.join(__DIR__, "controllers", "responder")
-require File.join(__DIR__, "controllers", "display")
-require File.join(__DIR__, "controllers", "authentication")
-require File.join(__DIR__, "controllers", "redirect")
-require File.join(__DIR__, "controllers", "cookies")
-require File.join(__DIR__, "controllers", "conditional_get")
-require File.join(__DIR__, "controllers", "streaming")
-
-Merb.start :environment => 'test', :init_file => File.join(__DIR__, 'config', 'init')
diff --git a/spec10/public/controller/streaming_spec.rb b/spec10/public/controller/streaming_spec.rb
deleted file mode 100644
index c951891..0000000
--- a/spec10/public/controller/streaming_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-Controllers = Merb::Test::Fixtures::Controllers
-
-describe Merb::Controller, "#nginx_send_file" do
-  
-  before do
-    Merb.push_path(:layout, File.dirname(__FILE__) / "controllers" / "views" / "layouts")    
-    Merb::Router.prepare do |r|
-      r.default_routes
-    end
-
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Streaming, :x_accel_redirect)
-  end
-  
-  it "returns a space" do
-    @controller.body.should == " "
-  end
-
-  it 'sets X-Accel-Redirect header using first argument value' do
-    @controller.headers['X-Accel-Redirect'].should == "/protected/content.pdf"
-  end
-
-  describe "when given second argument" do
-    it 'sets Content-Type header using second argument value' do
-      @controller.headers['Content-Type'].should == "application/pdf"
-    end
-  end
-
-
-  describe "when given only first argument" do
-    before(:each) do
-      @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Streaming, :x_accel_redirect_with_default_content_type)
-    end
-    
-    it 'sets Content-Type header to empty string and sets Nginx determine it' do
-      @controller.headers['Content-Type'].should == ""
-    end
-  end
-end
diff --git a/spec10/public/controller/url_spec.rb b/spec10/public/controller/url_spec.rb
deleted file mode 100644
index e1c87bb..0000000
--- a/spec10/public/controller/url_spec.rb
+++ /dev/null
@@ -1,361 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-require File.join(File.dirname(__FILE__), "controllers", "url")
-
-class Monkey ; def to_param ; 45 ; end ; end
-class Donkey ; def to_param ; 19 ; end ; end
-class Blue
-  def to_param ; 13 ; end
-  def monkey_id ; Monkey.new ; end
-  def donkey_id ; Donkey.new ; end
-end
-class Pink
-  def to_param ; 22 ; end
-  def blue_id ; Blue.new ; end
-  def monkey_id ; blue_id.monkey_id ; end
-end
-
-describe Merb::Controller, " url" do
-  
-  before(:each) do
-    Merb::Router.prepare do
-      identify :to_param do
-        resources :monkeys do
-          resources :blues do
-            resources :pinks
-          end
-        end
-        resources :donkeys do
-          resources :blues
-        end
-        resource :red do
-          resources :blues
-        end
-        match(%r{/foo/(\d+)/}).to(:controller => 'asdf').name(:regexp)
-        match('/people(/:name)(.:format)').to(:controller => 'people', :action => 'show').name(:person)
-        match('/argstrs').to(:controller => "args").name(:args)
-        default_routes
-      end
-    end
-    
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :index)
-  end
-  
-  it "should match the :controller to the default route" do
-    @controller.url(:controller => "monkeys").should eql("/monkeys")
-  end
-
-  it "should match the :controller,:action to the default route" do
-    @controller.url(:controller => "monkeys", :action => "list").
-      should eql("/monkeys/list")
-  end
-  
-  it "should match the :controller,:action,:id to the default route" do
-    @controller.url(:controller => "monkeys", :action => "list", :id => 4).
-      should eql("/monkeys/list/4")
-  end
-  
-  it "should match the :controller,:action,:id,:format to the default route" do
-    @controller.url(:controller => "monkeys", :action => "list", :id => 4, :format => "xml").
-      should eql("/monkeys/list/4.xml")
-  end
-  
-  it "should match the :controller,:action,:id,:format,:fragment to the default route" do
-    @controller.url(:controller => "monkeys", :action => "list", :id => 4, :format => "xml", :fragment => :half_way).
-      should eql("/monkeys/list/4.xml#half_way")
-  end
-
-  it "should raise an error when trying to generate a regexp route" do
-    lambda { @controller.url(:regexp) }.should raise_error(Merb::Router::GenerationError)
-  end
-  
-  it "should raise an error when trying to generate a route that doesn't exist" do
-    lambda { @controller.url(:lalalala) }.should raise_error(Merb::Router::GenerationError)
-  end
-
-  it "should match with a route param" do
-    @controller.url(:person, :name => "david").should eql("/people/david")
-  end
-
-  it "should match without a route param" do
-    @controller.url(:person).should eql("/people")
-  end
-
-  it "should match with an additional param" do
-    @controller.url(:person, :name => 'david', :color => 'blue').should eql("/people/david?color=blue")
-  end
-  
-  it "should match with a :format" do
-    @controller.url(:person, :name => 'david', :format => :xml).should eql("/people/david.xml")
-  end
-  
-  it "should match with a :fragment" do
-    @controller.url(:person, :name => 'david', :fragment => :half_way).should eql("/people/david#half_way")
-  end
-  
-  it "should match with an additional param and :format" do
-    @controller.url(:person, :name => 'david', :color => 'blue', :format => :xml).should eql("/people/david.xml?color=blue")
-  end
-  
-  it "should match with an additional param, :format, and :fragment" do
-    @controller.url(:person, :name => 'david', :color => 'blue', :format => :xml, :fragment => :half_way).
-      should eql("/people/david.xml?color=blue#half_way")
-  end
-  
-  it "should match with additional params" do
-    url = @controller.url(:person, :name => 'david', :smell => 'funky', :color => 'blue')
-    url.should match(%r{/people/david?.*color=blue})
-    url.should match(%r{/people/david?.*smell=funky})
-  end
-
-  it "should match with extra params and an array" do
-    @controller.url(:args, :monkey => [1,2]).should == "/argstrs?monkey[]=1&monkey[]=2"
-  end
-  
-  it "should match with no second arg" do
-    @controller.url(:monkeys).should == "/monkeys"
-  end
-  
-  it "should match with an object as second arg" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, @monkey).should == "/monkeys/45"
-  end
-  
-  it "should match with a fixnum as second arg" do
-    @controller.url(:monkey, 3).should == "/monkeys/3"
-  end
-  
-  it "should match with an object and :format" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, :id => @monkey, :format => :xml).should == "/monkeys/45.xml"
-  end
-  
-  it "should match with an object, :format and additional options" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, :id => @monkey, :format => :xml, :color => "blue").should == "/monkeys/45.xml?color=blue"
-  end
-  
-  it "should match with an object, :format, :fragment, and additional options" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, :id => @monkey, :format => :xml, :color => "blue", :fragment => :half_way).should == "/monkeys/45.xml?color=blue#half_way"
-  end
-
-  it "should match the delete_monkey route" do
-    @monkey = Monkey.new
-    @controller.url(:delete_monkey, @monkey).should == "/monkeys/45/delete"
-  end
-  
-  it "should match the delete_red route" do
-    @controller.url(:delete_red).should == "/red/delete"
-  end
-
-  it "should add a path_prefix to the url if :path_prefix is set" do
-    Merb::Config[:path_prefix] = "/jungle"
-    @controller.url(:monkeys).should == "/jungle/monkeys"
-    Merb::Config[:path_prefix] = nil
-  end
- 
-  it "should match a nested resources show action" do
-    @blue = Blue.new
-    @controller.url(:monkey_blue, @blue.monkey_id, @blue).should == "/monkeys/45/blues/13"
-  end
-  
-  it "should match the index action of nested resource with parent object" do
-    @blue = Blue.new
-    @monkey = Monkey.new
-    @controller.url(:monkey_blues, :monkey_id => @monkey).should == "/monkeys/45/blues"
-  end
-  
-  it "should match the index action of nested resource with parent id as string" do
-    @blue = Blue.new
-    @controller.url(:monkey_blues, :monkey_id => '1').should == "/monkeys/1/blues"
-  end
-  
-  it "should match the edit action of nested resource" do
-    @blue = Blue.new
-    @controller.url(:edit_monkey_blue, @blue.monkey_id, @blue).should == "/monkeys/45/blues/13/edit"
-  end
-  
-  it "should match the index action of resources nested under a resource" do
-    @blue = Blue.new
-    @controller.url(:red_blues).should == "/red/blues"
-  end
-  
-  it "should match resource that has been nested multiple times" do
-    @blue = Blue.new
-    @controller.url(:donkey_blue, @blue.donkey_id, @blue).should == "/donkeys/19/blues/13"
-    @controller.url(:monkey_blue, @blue.monkey_id, @blue).should == "/monkeys/45/blues/13"
-  end
-  
-  it "should match resources nested more than one level deep" do
-    @pink = Pink.new
-    @controller.url(:monkey_blue_pink, @pink.blue_id.monkey_id, @pink.blue_id, @pink).should == "/monkeys/45/blues/13/pinks/22"
-  end
-
-  it "should match resource with additional params" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, @monkey, :foo => "bar").should == "/monkeys/45?foo=bar"
-  end
-  it "should match resource with fragment" do
-    @monkey = Monkey.new
-    @controller.url(:monkey, @monkey, :fragment => :half_way).should == "/monkeys/45#half_way"
-  end
-
-  it "should match a nested resource with additional params" do
-    @blue = Blue.new
-    @controller.url(:monkey_blue, @blue.monkey_id, @blue, :foo => "bar").should == "/monkeys/45/blues/13?foo=bar"
-  end
-  
-  it "should match a nested resource with additional params and fragment" do
-    @blue = Blue.new
-    @controller.url(:monkey_blue, @blue.monkey_id, @blue, :foo => "bar", :fragment => :half_way).should == "/monkeys/45/blues/13?foo=bar#half_way"
-  end
-
-end
-
-describe Merb::Controller, "#url(:this, *args)" do
-  
-  before(:each) do
-    Merb::Router.prepare do
-      with(:controller => "merb/test/fixtures/controllers/url", :action => "this_route") do
-        
-        resources :users, :controller => "merb/test/fixtures/controllers/url" do
-          resources :comments, :controller => "merb/test/fixtures/controllers/url"
-        end
-        
-        resource :profile, :controller => "merb/test/fixtures/controllers/url"
-        
-        match(%r[/regex]).register
-        match("/simple").register
-        match("/no_optionals(/:one(/:two))").register
-        match("/one_optionals(/:one(/:two))").to(:action => "one_optionals")
-        match("/two_optionals(/:one(/:two))").to(:action => "two_optionals")
-        match("/postage", :method => :post).register
-        match("/action/:action").to(:action => "[1]")
-        match("/defer").defer_to { |r, params| params }
-        match(:method => :get).defer_to { |r, params| params }
-      end
-    end
-  end
-  
-  it "should use the current route" do
-    request("/simple").body.to_s.should == "/simple"
-  end
-  
-  it "should be able to generate a route with optional segments" do
-    request("/no_optionals").body.to_s.should == "/no_optionals"
-  end
-  
-  it "should drop the optional request params if they are not specified when generating the route" do
-    request("/no_optionals/one/two").body.to_s.should == "/no_optionals"
-  end
-  
-  it "should generate the optional segments as specified" do
-    request("/one_optionals/one/two").body.to_s.should == "/one_optionals/one"
-    request("/two_optionals/one/two").body.to_s.should == "/two_optionals/one/two"
-  end
-  
-  it "should generate the route even if it is not a GET request" do
-    request("/postage", :method => "post").body.to_s.should == "/postage"
-  end
-  
-  it "should be able to tag on extra query string paramters" do
-    request('/action/this_route_with_page').body.to_s.should == "/action/this_route_with_page?page=2"
-  end
-  
-  it "should work with deferred block routes" do
-    request("/defer").body.to_s.should == "/defer"
-  end
-  
-  it "should not work with routes that do not have a path" do
-    request("/foo/bar").should have_xpath("//h1[contains(.,'Generation Error')]")
-  end
-  
-  it "should raise an error when trying to generate a regexp route" do
-    request("/regex").should have_xpath("//h1[contains(.,'Generation Error')]")
-  end
-  
-  it "should work with resource routes" do
-    request("/users").body.to_s.should         == "/users"
-    request("/users/10").body.to_s.should      == "/users/10"
-    request("/users/new").body.to_s.should     == "/users/new"
-    request("/users/10/edit").body.to_s.should == "/users/10/edit"
-    request("/profile").body.to_s.should       == "/profile"
-  end
-  
-  it "should work with nested resource routes" do
-    request("/users/10/comments").body.to_s.should        == "/users/10/comments"
-    request("/users/10/comments/9").body.to_s.should      == "/users/10/comments/9"
-    request("/users/10/comments/new").body.to_s.should    == "/users/10/comments/new"
-    request("/users/10/comments/9/edit").body.to_s.should == "/users/10/comments/9/edit"
-  end
-end
-
-describe Merb::Controller, "absolute_url" do
-  before do
-    Merb::Router.prepare do |r|
-      identify :to_param do
-        r.resources :monkeys do |m|
-          m.resources :blues do |b|
-            b.resources :pinks
-          end
-        end
-        r.resources :donkeys do |d|
-          d.resources :blues
-        end
-        r.resource :red do |red|
-          red.resources :blues
-        end
-        r.match(%r{/foo/(\d+)/}).to(:controller => 'asdf').name(:regexp)
-        r.match('/people(/:name)(.:format)').to(:controller => 'people', :action => 'show').name(:person)
-        r.match('/argstrs').to(:controller => "args").name(:args)
-        r.default_routes
-      end
-    end
-    
-    @controller = dispatch_to(Merb::Test::Fixtures::Controllers::Url, :index)
-  end
-
-  it 'takes :protocol option' do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey,
-                             :id       => @monkey,
-                             :format   => :xml,
-                             :protocol => "https").should == "https://localhost/monkeys/45.xml"
-  end
-
-  it 'takes :host option' do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey,
-                             :id       => @monkey,
-                             :format   => :xml,
-                             :protocol => "https",
-                             :host     => "rubyisnotrails.org").should == "https://rubyisnotrails.org/monkeys/45.xml"
-  end
-
-  it 'falls back to request protocol' do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey,
-                             :id       => @monkey,
-                             :format   => :xml).should == "http://localhost/monkeys/45.xml"
-  end
-
-  it 'falls back to request host' do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey,
-                             :id       => @monkey,
-                             :format   => :xml,
-                             :protocol => "https").should == "https://localhost/monkeys/45.xml"
-  end
-  
-  it "allows passing an object instead of a hash" do
-    @monkey = Monkey.new
-    @controller.absolute_url(:monkey, @monkey).should == "http://localhost/monkeys/45"
-  end
-  
-  it "should support non-named routes" do
-    @controller.absolute_url(:controller => "monkeys", :action => "list").
-      should eql("http://localhost/monkeys/list")
-  end
-  
-end
diff --git a/spec10/public/core/merb_core_spec.rb b/spec10/public/core/merb_core_spec.rb
deleted file mode 100644
index 0045bcd..0000000
--- a/spec10/public/core/merb_core_spec.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-describe "Merb.env helpers" do
-  before(:all) do
-    @orig_env = Merb.environment
-  end
-  after(:all) do
-    Merb.environment = @orig_env
-  end
-  
-  it "should pickup the environment from env" do
-    %w(development test production staging demo).each do |e|
-      Merb.environment = e
-      Merb.env.should == e
-    end
-  end
-  
-  it "should correctly answer the question about which env it's in with symbol or string" do
-    %w(development test production staging demo custom).each do |e|
-      Merb.environment = e
-      Merb.env?(e).should be true
-      Merb.env?(e.to_sym).should be_true
-    end
-  end
-  
-  it "should answer false if asked for an environment that is not current" do
-    %w(development test production staging demo custom).each do |e|
-      Merb.environment = e
-      Merb.env?(:not_it).should be_false
-    end
-  end
-  
-  it "should allow an environment to merge another environments settings" do
-    %w(development test production staging demo custom).each do |e|
-
-      Merb.environment = e
-      Merb.start_environment
-      Merb.merge_env "some_other_env"
-      Merb.environment_info.nil?.should be_false
-      Merb.environment_info[:merged_envs].first.should == "some_other_env"
-    end
-  end
-  
-  
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/dependency_after_load_spec.rb b/spec10/public/core_ext/dependency_after_load_spec.rb
deleted file mode 100644
index 038c16c..0000000
--- a/spec10/public/core_ext/dependency_after_load_spec.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using dependency to require a simple gem" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-  end
-  
-  it "loads dependencies immediately if Merb is already started" do
-    startup_merb
-    dependency "simple_gem"
-    defined?(Merb::SpecFixture::SimpleGem2).should_not be_nil
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/bad_require_gem/Rakefile b/spec10/public/core_ext/fixtures/bad_require_gem/Rakefile
deleted file mode 100644
index d861b1c..0000000
--- a/spec10/public/core_ext/fixtures/bad_require_gem/Rakefile
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'rubygems'
-require 'rake/gempackagetask'
-require 'rubygems/specification'
-require 'date'
-
-GEM = "bad_require_gem"
-GEM_VERSION = "0.0.1"
-AUTHOR = "Your Name"
-EMAIL = "Your Email"
-HOMEPAGE = "http://example.com"
-SUMMARY = "A gem that provides..."
-
-spec = Gem::Specification.new do |s|
-  s.name = GEM
-  s.version = GEM_VERSION
-  s.platform = Gem::Platform::RUBY
-  s.has_rdoc = true
-  s.summary = SUMMARY
-  s.description = s.summary
-  s.author = AUTHOR
-  s.email = EMAIL
-  s.homepage = HOMEPAGE
-  
-  s.require_path = 'lib'
-  s.files = %w(Rakefile) + Dir.glob("{lib}/**/*")
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.gem_spec = spec
-end
-
-desc "install the gem locally"
-task :install => [:package] do
-  sh %{sudo #{Gem.ruby} -S gem install pkg/#{GEM}-#{GEM_VERSION}}
-end
-
-desc "create a gemspec file"
-task :make_spec do
-  File.open("#{GEM}.gemspec", "w") do |file|
-    file.puts spec.to_ruby
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/bad_require_gem/lib/BadRequireGem.rb b/spec10/public/core_ext/fixtures/bad_require_gem/lib/BadRequireGem.rb
deleted file mode 100644
index 80643a5..0000000
--- a/spec10/public/core_ext/fixtures/bad_require_gem/lib/BadRequireGem.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Merb
-  module SpecFixture
-    class BadRequireGem
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/core_ext_dependency.rb b/spec10/public/core_ext/fixtures/core_ext_dependency.rb
deleted file mode 100644
index 7130931..0000000
--- a/spec10/public/core_ext/fixtures/core_ext_dependency.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class CoreExtDependency
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/bin/edit_json.rb b/spec10/public/core_ext/fixtures/gems/bin/edit_json.rb
deleted file mode 100755
index f64ac30..0000000
--- a/spec10/public/core_ext/fixtures/gems/bin/edit_json.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
-#
-# This file was generated by RubyGems.
-#
-# The application 'json_pure' is installed as part of a gem, and
-# this file is here to facilitate running it.
-#
-
-require 'rubygems'
-
-version = ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'json_pure', version
-load 'edit_json.rb'
diff --git a/spec10/public/core_ext/fixtures/gems/gems/bad_require_gem-0.0.1/Rakefile b/spec10/public/core_ext/fixtures/gems/gems/bad_require_gem-0.0.1/Rakefile
deleted file mode 100644
index d861b1c..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/bad_require_gem-0.0.1/Rakefile
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'rubygems'
-require 'rake/gempackagetask'
-require 'rubygems/specification'
-require 'date'
-
-GEM = "bad_require_gem"
-GEM_VERSION = "0.0.1"
-AUTHOR = "Your Name"
-EMAIL = "Your Email"
-HOMEPAGE = "http://example.com"
-SUMMARY = "A gem that provides..."
-
-spec = Gem::Specification.new do |s|
-  s.name = GEM
-  s.version = GEM_VERSION
-  s.platform = Gem::Platform::RUBY
-  s.has_rdoc = true
-  s.summary = SUMMARY
-  s.description = s.summary
-  s.author = AUTHOR
-  s.email = EMAIL
-  s.homepage = HOMEPAGE
-  
-  s.require_path = 'lib'
-  s.files = %w(Rakefile) + Dir.glob("{lib}/**/*")
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.gem_spec = spec
-end
-
-desc "install the gem locally"
-task :install => [:package] do
-  sh %{sudo #{Gem.ruby} -S gem install pkg/#{GEM}-#{GEM_VERSION}}
-end
-
-desc "create a gemspec file"
-task :make_spec do
-  File.open("#{GEM}.gemspec", "w") do |file|
-    file.puts spec.to_ruby
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/bad_require_gem-0.0.1/lib/BadRequireGem.rb b/spec10/public/core_ext/fixtures/gems/gems/bad_require_gem-0.0.1/lib/BadRequireGem.rb
deleted file mode 100644
index 80643a5..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/bad_require_gem-0.0.1/lib/BadRequireGem.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Merb
-  module SpecFixture
-    class BadRequireGem
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/CHANGES b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/CHANGES
deleted file mode 100644
index b100211..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/CHANGES
+++ /dev/null
@@ -1,93 +0,0 @@
-2008-07-10 (1.1.3)
-  * Wesley Beary <monki at geemus.com> reported a bug in json/add/core's DateTime
-    handling: If the nominator and denominator of the offset were divisible by
-    each other Ruby's Rational#to_s returns them as an integer not a fraction
-    with '/'. This caused a ZeroDivisionError during parsing.
-  * Use Date#start and DateTime#start instead of sg method, while
-    remaining backwards compatible.
-  * Supports ragel >= 6.0 now.
-  * Corrected some tests.
-  * Some minor changes.
-2007-11-27 (1.1.2)
-  * Remember default dir (last used directory) in editor.
-  * JSON::Editor.edit method added, the editor can now receive json texts from
-    the clipboard via C-v.
-  * Load json texts from an URL pasted via middle button press.
-  * Added :create_additions option to Parser. This makes it possible to disable
-    the creation of additions by force, in order to treat json texts as data
-    while having additions loaded.
-  * Jacob Maine <jmaine at blurb.com> reported, that JSON(:foo) outputs a JSON
-    object if the rails addition is enabled, which is wrong. It now outputs a
-    JSON string "foo" instead, like suggested by Jacob Maine.
-  * Discovered a bug in the Ruby Bugs Tracker on rubyforge, that was reported
-    by John Evans lgastako at gmail.com. He could produce a crash in the JSON
-    generator by returning something other than a String instance from a
-    to_json method. I now guard against this by doing a rather crude type
-    check, which raises an exception instead of crashing.
-2007-07-06 (1.1.1)
-  * Yui NARUSE <naruse at airemix.com> sent some patches to fix tests for Ruby
-    1.9. I applied them and adapted some of them a bit to run both on 1.8 and
-    1.9.
-  * Introduced a JSON.parse! method without depth checking for people who like
-    danger.
-  * Made generate and pretty_generate methods configurable by an options hash.
-  * Added :allow_nan option to parser and generator in order to handle NaN,
-    Infinity, and -Infinity correctly - if requested. Floats, which aren't numbers,
-    aren't valid JSON according to RFC4627, so by default an exception will be
-    raised if any of these symbols are encountered. Thanks to Andrea Censi
-    <andrea.censi at dis.uniroma1.it> for his hint about this.
-  * Fixed some more tests for Ruby 1.9.
-  * Implemented dump/load interface of Marshal as suggested in ruby-core:11405
-    by murphy <murphy at rubychan.de>.
-  * Implemented the max_nesting feature for generate methods, too.
-  * Added some implementations for ruby core's custom objects for
-    serialisation/deserialisation purposes.
-2007-05-21 (1.1.0)
-  * Implemented max_nesting feature for parser to avoid stack overflows for
-    data from untrusted sources. If you trust the source, you can disable it
-    with the option max_nesting => false.
-  * Piers Cawley <pdcawley at bofh.org.uk> reported a bug, that not every
-    character can be escaped by ?\ as required by RFC4627. There's a
-    contradiction between David Crockford's JSON checker test vectors (in
-    tests/fixtures) and RFC4627, though. I decided to stick to the RFC, because
-    the JSON checker seems to be a bit older than the RFC.
-  * Extended license to Ruby License, which includes the GPL.
-  * Added keyboard shortcuts, and 'Open location' menu item to edit_json.rb.
-2007-05-09 (1.0.4)
-  * Applied a patch from Yui NARUSE <naruse at airemix.com> to make JSON compile
-    under Ruby 1.9. Thank you very much for mailing it to me!
-  * Made binary variants of JSON fail early, instead of falling back to the
-    pure version. This should avoid overshadowing of eventual problems while
-    loading of the binary.
-2007-03-24 (1.0.3)
-  * Improved performance of pure variant a bit.
-  * The ext variant of this release supports the mswin32 platform. Ugh!
-2007-03-24 (1.0.2)
-  * Ext Parser didn't parse 0e0 correctly into 0.0: Fixed!
-2007-03-24 (1.0.1)
-  * Forgot some object files in the build dir. I really like that - not!
-2007-03-24 (1.0.0)
-  * Added C implementations for the JSON generator and a ragel based JSON
-    parser in C.
-  * Much more tests, especially fixtures from json.org.
-  * Further improved conformance to RFC4627.
-2007-02-09 (0.4.3)
-  * Conform more to RFC4627 for JSON: This means JSON strings
-    now always must contain exactly one object "{ ... }" or array "[ ... ]" in
-    order to be parsed without raising an exception. The definition of what
-    constitutes a whitespace is narrower in JSON than in Ruby ([ \t\r\n]), and
-    there are differences in floats and integers (no octals or hexadecimals) as
-    well.
-  * Added aliases generate and pretty_generate of unparse and pretty_unparse.
-  * Fixed a test case.
-  * Catch an Iconv::InvalidEncoding exception, that seems to occur on some Sun
-    boxes with SunOS 5.8, if iconv doesn't support utf16 conversions. This was
-    reported by Andrew R Jackson <andrewj at bcm.tmc.edu>, thanks a bunch!
-2006-08-25 (0.4.2)
-  * Fixed a bug in handling solidi (/-characters), that was reported by
-    Kevin Gilpin <kevin.gilpin at alum.mit.edu>.
-2006-02-06 (0.4.1)
-  * Fixed a bug related to escaping with backslashes. Thanks for the report go
-    to Florian Munz <surf at theflow.de>.
-2005-09-23 (0.4.0)
-  * Initial Rubyforge Version
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/GPL b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/GPL
deleted file mode 100644
index 5b6e7c6..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/GPL
+++ /dev/null
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/README b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/README
deleted file mode 100644
index 9b4f3be..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/README
+++ /dev/null
@@ -1,78 +0,0 @@
-Dependencies for Building
-=========================
-
-- You need rake to build the extensions and install them.
-
-  You can get it from rubyforge:
-    http://rubyforge.org/projects/rake
-
-  or just type
-
-  # gem install rake
-
-  for the installation via rubygems.
-
-- If you want to rebuild the parser.c file or draw nice graphviz images of the
-  state machines, you need ragel from:
-    http://www.cs.queensu.ca/~thurston/ragel
-
-Installation
-============
-
-It's recommended to use the extension variant of JSON, because it's quite a bit
-faster than the pure ruby variant. If you cannot build it on your system, you
-can settle for the latter.
-
-Just type into the command line as root:
-
-# rake install
-
-The above command will build the extensions and install them on your system.
-
-# rake install_pure
-
-or
-
-# ruby install.rb
-
-will just install the pure ruby implementation of JSON.
-
-If you use Rubygems you can type
-
-# gem install json
-
-instead, to install the newest JSON version.
-
-There is also a pure ruby json only variant of the gem, that can be installed
-with:
-
-# gem install json_pure
-
-Testing and Examples
-====================
-
-To run the tests type:
-
-$ rake test_ext
-
-This will build the extensions first and then test them.
-
-$ rake test_pure
-
-This will test the pure ruby extensions.
-
-There is also a small example in tools/server.rb if you want to see, how
-receiving a JSON object from a webrick server in your browser with the
-javasript prototype library (http://www.prototypejs.org) works.
-
-Author
-======
-
-Florian Frank <flori at ping.de>
-
-License
-=======
-
-Ruby License, see the RUBY file included in the source distribution. The Ruby
-License includes the GNU General Public License (GPL), Version 2, so see the
-file GPL as well.
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/RUBY b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/RUBY
deleted file mode 100644
index 4a99f6f..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/RUBY
+++ /dev/null
@@ -1,58 +0,0 @@
-Ruby is copyrighted free software by Yukihiro Matsumoto <matz at netlab.co.jp>.
-You can redistribute it and/or modify it under either the terms of the GPL
-(see COPYING.txt file), or the conditions below:
-
-  1. You may make and give away verbatim copies of the source form of the
-     software without restriction, provided that you duplicate all of the
-     original copyright notices and associated disclaimers.
-
-  2. You may modify your copy of the software in any way, provided that
-     you do at least ONE of the following:
-
-       a) place your modifications in the Public Domain or otherwise
-          make them Freely Available, such as by posting said
-	  modifications to Usenet or an equivalent medium, or by allowing
-	  the author to include your modifications in the software.
-
-       b) use the modified software only within your corporation or
-          organization.
-
-       c) rename any non-standard executables so the names do not conflict
-	  with standard executables, which must also be provided.
-
-       d) make other distribution arrangements with the author.
-
-  3. You may distribute the software in object code or executable
-     form, provided that you do at least ONE of the following:
-
-       a) distribute the executables and library files of the software,
-	  together with instructions (in the manual page or equivalent)
-	  on where to get the original distribution.
-
-       b) accompany the distribution with the machine-readable source of
-	  the software.
-
-       c) give non-standard executables non-standard names, with
-          instructions on where to get the original software distribution.
-
-       d) make other distribution arrangements with the author.
-
-  4. You may modify and include the part of the software into any other
-     software (possibly commercial).  But some files in the distribution
-     are not written by the author, so that they are not under this terms.
-
-     They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
-     files under the ./missing directory.  See each file for the copying
-     condition.
-
-  5. The scripts and library files supplied as input to or produced as 
-     output from the software do not automatically fall under the
-     copyright of the software, but belong to whomever generated them, 
-     and may be sold commercially, and may be aggregated with this
-     software.
-
-  6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-     IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-     PURPOSE.
-
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/Rakefile b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/Rakefile
deleted file mode 100644
index b66de5b..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/Rakefile
+++ /dev/null
@@ -1,309 +0,0 @@
-begin
-  require 'rake/gempackagetask'
-rescue LoadError
-end
-require 'rake/clean'
-
-require 'rbconfig'
-include Config
-
-ON_WINDOWS        = RUBY_PLATFORM =~ /mswin32/i 
-PKG_NAME          = 'json'
-PKG_VERSION       = File.read('VERSION').chomp
-PKG_FILES         = FileList["**/*"].exclude(/CVS|pkg|coverage|Makefile/).exclude(/\.(so|bundle|o|#{CONFIG['DLEXT']})$/)
-EXT_ROOT_DIR      = 'ext/json/ext'
-EXT_PARSER_DIR    = "#{EXT_ROOT_DIR}/parser"
-EXT_PARSER_DL     = "#{EXT_ROOT_DIR}/parser.#{CONFIG['DLEXT']}"
-EXT_PARSER_SRC    = "#{EXT_PARSER_DIR}/parser.c"
-PKG_FILES << EXT_PARSER_SRC
-EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
-EXT_GENERATOR_DL  = "#{EXT_ROOT_DIR}/generator.#{CONFIG['DLEXT']}"
-EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
-RAGEL_CODEGEN     = %w[rlcodegen rlgen-cd].find { |c| system(c, '-v') }
-RAGEL_DOTGEN      = %w[rlgen-dot rlgen-cd].find { |c| system(c, '-v') }
-RAGEL_PATH        = "#{EXT_PARSER_DIR}/parser.rl"
-CLEAN.include 'doc', 'coverage', FileList['diagrams/*.*'],
-  FileList["ext/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def}"],
-  FileList["ext/**/Makefile"]
-
-
-desc "Installing library (pure)"
-task :install_pure => :version do
-  ruby 'install.rb'
-end
-
-task :install_ext_really do
-  sitearchdir = CONFIG["sitearchdir"]
-  cd 'ext' do
-    for file in Dir["json/ext/*.#{CONFIG['DLEXT']}"]
-      d = File.join(sitearchdir, file)
-      mkdir_p File.dirname(d)
-      install(file, d)
-    end
-  end
-end
-
-desc "Installing library (extension)"
-task :install_ext => [ :compile, :install_pure, :install_ext_really ]
-
-task :install => :install_ext
-
-desc "Compiling extension"
-task :compile => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
-
-file EXT_PARSER_DL => EXT_PARSER_SRC do
-  cd EXT_PARSER_DIR do
-    ruby 'extconf.rb'
-    if ON_WINDOWS
-      sh 'nmake'
-      sh "mt -manifest parser.#{CONFIG['DLEXT']}.manifest -outputresource:parser.#{CONFIG['DLEXT']};2"
-    else
-      sh 'make'
-    end
-  end
-  cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
-end
-
-file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
-  cd EXT_GENERATOR_DIR do
-    ruby 'extconf.rb'
-    if ON_WINDOWS
-      sh 'nmake'
-      sh "mt -manifest generator.#{CONFIG['DLEXT']}.manifest -outputresource:generator.#{CONFIG['DLEXT']};2"
-    else
-      sh 'make'
-    end
-  end
-  cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
-end
-
-desc "Generate parser with ragel"
-task :ragel => EXT_PARSER_SRC
-
-task :ragel_clean do
-  rm_rf EXT_PARSER_SRC
-end
-
-file EXT_PARSER_SRC => RAGEL_PATH do
-  cd EXT_PARSER_DIR do
-    sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
-  end
-end
-
-desc "Generate diagrams of ragel parser (ps)"
-task :ragel_dot_ps do
-  root = 'diagrams'
-  specs = []
-  File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
-  for s in specs 
-    sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
-  end
-end
-
-desc "Generate diagrams of ragel parser (png)"
-task :ragel_dot_png do
-  root = 'diagrams'
-  specs = []
-  File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
-  for s in specs 
-    sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
-  end
-end
-
-desc "Generate diagrams of ragel parser"
-task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
-
-desc "Testing library (pure ruby)"
-task :test_pure => :clean do
-  ruby '-v -I lib tests/runner.rb'
-end
-
-desc "Testing library (extension)"
-task :test_ext => :compile do
-  ruby '-v -I ext:lib tests/runner.rb'
-end
-
-desc "Benchmarking parser (pure)"
-task :benchmark_parser_pure do
-  ruby '-I lib benchmarks/benchmark_parser.rb pure'
-end
-
-desc "Benchmarking generator (pure)"
-task :benchmark_generator_pure do
-  ruby '-I lib benchmarks/benchmark_generator.rb pure'
-  ruby 'benchmarks/benchmark_rails.rb'
-end
-
-desc "Benchmarking library (pure)"
-task :benchmark_pure => [ :benchmark_parser_pure, :benchmark_generator_pure ]
-
-desc "Benchmarking parser (extension)"
-task :benchmark_parser_ext => :compile do
-  ruby '-I ext:lib benchmarks/benchmark_parser.rb ext'
-end
-
-desc "Benchmarking generator (extension)"
-task :benchmark_generator_ext => :compile do
-  ruby '-I ext:lib benchmarks/benchmark_generator.rb ext'
-  ruby 'benchmarks/benchmark_rails.rb'
-end
-
-desc "Benchmarking library (extension)"
-task :benchmark_ext => [ :benchmark_parser_ext, :benchmark_generator_ext ]
-
-task :benchmark do
-  puts "Benchmarking extension variant"
-  Rake::Task[:benchmark_ext].invoke
-  puts "Benchmarking pure variant"
-  Rake::Task[:benchmark_pure].invoke
-end
-
-desc "Testing library with coverage" # XXX broken
-task :coverage do
-  system 'RUBYOPT="" rcov -x tests -Ilib tests/runner.rb'
-end
-
-desc "Create RDOC documentation"
-task :doc => [ :version, EXT_PARSER_SRC ] do
-  sh "rdoc -m JSON -S -o doc lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
-end
-
-if defined? Gem
-  spec_pure = Gem::Specification.new do |s|
-    s.name = 'json_pure'
-    s.version = PKG_VERSION
-    s.summary = "A JSON implementation in Ruby"
-    s.description = ""
-
-    s.files = PKG_FILES
-
-    s.require_path = 'lib'
-
-    s.bindir = "bin"
-    s.executables = ["edit_json.rb"]
-    s.default_executable = "edit_json.rb"
-
-    s.has_rdoc = true
-    s.rdoc_options <<
-      '--title' <<  'JSON -- A JSON implemention' <<
-      '--main' << 'JSON' << '--line-numbers'
-    s.test_files << 'tests/runner.rb'
-
-    s.author = "Florian Frank"
-    s.email = "flori at ping.de"
-    s.homepage = "http://json.rubyforge.org"
-    s.rubyforge_project = "json"
-  end
-
-  Rake::GemPackageTask.new(spec_pure) do |pkg|
-      pkg.need_tar = true
-      pkg.package_files += PKG_FILES
-  end
-
-  spec_ext = Gem::Specification.new do |s|
-    s.name = 'json'
-    s.version = PKG_VERSION
-    s.summary = "A JSON implementation as a Ruby extension"
-    s.description = ""
-
-    s.files = PKG_FILES
-
-    s.extensions <<
-      "#{EXT_PARSER_DIR}/extconf.rb" <<
-      "#{EXT_GENERATOR_DIR}/extconf.rb"
-
-    s.require_path = EXT_ROOT_DIR
-    s.require_paths << 'ext'
-    s.require_paths << 'lib'
-
-    s.bindir = "bin"
-    s.executables = ["edit_json.rb"]
-    s.default_executable = "edit_json.rb"
-
-    s.has_rdoc = true
-    s.rdoc_options <<
-      '--title' <<  'JSON -- A JSON implemention' <<
-      '--main' << 'JSON' << '--line-numbers'
-    s.test_files << 'tests/runner.rb'
-
-    s.author = "Florian Frank"
-    s.email = "flori at ping.de"
-    s.homepage = "http://json.rubyforge.org"
-    s.rubyforge_project = "json"
-  end
-
-  Rake::GemPackageTask.new(spec_ext) do |pkg|
-    pkg.need_tar = true
-    pkg.package_files += PKG_FILES
-  end
-
-  task :package_win => :compile do
-    mkdir_p 'pkg'
-    spec_win_ext = Gem::Specification.new do |s|
-      s.name = 'json'
-      s.platform = Gem::Platform::WIN32
-      s.version = PKG_VERSION
-      s.summary = "A JSON implementation as a Ruby extension"
-      s.description = ""
-
-      s.files = PKG_FILES.to_a <<
-        "#{EXT_ROOT_DIR}/parser.#{CONFIG['DLEXT']}" <<
-        "#{EXT_ROOT_DIR}/generator.#{CONFIG['DLEXT']}"
-
-      s.require_path = EXT_ROOT_DIR
-      s.require_paths << 'ext'
-      s.require_paths << 'lib'
-
-      s.bindir = "bin"
-      s.executables = ["edit_json.rb", "prettify_json.rb"]
-      s.default_executable = "edit_json.rb"
-
-      s.has_rdoc = true
-      s.rdoc_options <<
-        '--title' <<  'JSON -- A JSON implemention' <<
-        '--main' << 'JSON' << '--line-numbers'
-      s.test_files << 'tests/runner.rb'
-
-      s.author = "Florian Frank"
-      s.email = "flori at ping.de"
-      s.homepage = "http://json.rubyforge.org"
-      s.rubyforge_project = "json"
-    end
-
-    gem_file = "json-#{spec_win_ext.version}-#{spec_win_ext.platform}.gem"
-    Gem::Builder.new(spec_win_ext).build
-    mv gem_file, 'pkg'
-  end
-end
-
-task :mrproper => [ :ragel_clean, :clean ] do
-  for dir in [ EXT_PARSER_DIR, EXT_GENERATOR_DIR ]
-    cd(dir) {  rm_f 'Makefile' }
-  end
-end
-
-desc m = "Writing version information for #{PKG_VERSION}"
-task :version do
-  puts m
-  File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
-    v.puts <<EOT
-module JSON
-  # JSON version
-  VERSION         = '#{PKG_VERSION}'
-  VERSION_ARRAY   = VERSION.split(/\\./).map { |x| x.to_i } # :nodoc:
-  VERSION_MAJOR   = VERSION_ARRAY[0] # :nodoc:
-  VERSION_MINOR   = VERSION_ARRAY[1] # :nodoc:
-  VERSION_BUILD   = VERSION_ARRAY[2] # :nodoc:
-  VARIANT_BINARY  = #{!!ON_WINDOWS}
-end
-EOT
-  end
-end
-
-if ON_WINDOWS
-  task :release => [ :version, :clean, :package_win ]
-else
-  task :release => [ :version, :mrproper, :package ]
-end
-
-task :default => [ :version, :compile ]
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/TODO b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/TODO
deleted file mode 100644
index 8b13789..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/TODO
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/VERSION b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/VERSION
deleted file mode 100644
index 781dcb0..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.1.3
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark.txt b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark.txt
deleted file mode 100644
index 255d9fc..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark.txt
+++ /dev/null
@@ -1,133 +0,0 @@
-(in /home/flori/json)
-Ragel Code Generator version 5.17 January 2007
-Copyright (c) 2001-2006 by Adrian Thurston
-Benchmarking extension variant
-First run for warmup.
-Running 'BC_Parser' for a duration of 10 secs per method:
-              real      total      utime      stime     cutime     cstime
-parser:   10.005944  10.010000   9.970000   0.040000   0.000000   0.000000
-              5091  508.591409    0.001966
-             calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Parser' for a duration of 10 secs per method:
-              real      total      utime      stime     cutime     cstime
-parser:   10.006881  10.000000   9.950000   0.050000   0.000000   0.000000
-              5055  505.500000    0.001978
-             calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-
-[null,false,true,"f\u00d6\u00df\u00c4r",["n\u20acst\u20acd",true],{"quux":true,"foo\u00df":"b\u00e4r"}]
-First run for warmup.
-Running 'BC_Generator' for a duration of 10 secs per method:
-                        real      total      utime      stime     cutime     cstime
-generator_pretty:   10.001066  10.010000   9.990000   0.020000   0.000000   0.000000
-                        3492  348.851149    0.002867
-generator_fast  :   10.002910  10.000000   9.980000   0.020000   0.000000   0.000000
-                        5416  541.600000    0.001846
-generator_safe  :   10.003107  10.010000  10.000000   0.010000   0.000000   0.000000
-                        4926  492.107892    0.002032
-                       calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Generator' for a duration of 10 secs per method:
-                        real      total      utime      stime     cutime     cstime
-generator_pretty:   10.009150  10.010000  10.010000   0.000000   0.000000   0.000000
-                        3511  350.749251    0.002851
-generator_fast  :   10.014407  10.020000  10.020000   0.000000   0.000000   0.000000
-                        5411  540.019960    0.001852
-generator_safe  :   10.010055  10.000000  10.000000   0.000000   0.000000   0.000000
-                        4933  493.300000    0.002027
-                       calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-Comparison in BC_Generator:
-                  secs/call     speed
-generator_fast  :    0.002 ->    1.540x
-generator_safe  :    0.002 ->    1.406x
-generator_pretty:    0.003 ->    1.000x
---------------------------------------------------------------------------------
-
-[null, false, true, "f\u00d6\u00df\u00c4r", ["n\u20acst\u20acd", true], {quux: true, "foo\u00df": "b\u00e4r"}]
-First run for warmup.
-Running 'BC_Rails' for a duration of 10 secs per method:
-                 real      total      utime      stime     cutime     cstime
-generator:   10.026043  10.020000  10.020000   0.000000   0.000000   0.000000
-                  239   23.852295    0.041925
-                calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Rails' for a duration of 10 secs per method:
-                 real      total      utime      stime     cutime     cstime
-generator:   10.010931  10.020000  10.010000   0.010000   0.000000   0.000000
-                  238   23.752495    0.042101
-                calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-
-Benchmarking pure variant
-First run for warmup.
-Running 'BC_Parser' for a duration of 10 secs per method:
-              real      total      utime      stime     cutime     cstime
-parser:   10.022352  10.030000  10.020000   0.010000   0.000000   0.000000
-               288   28.713858    0.034826
-             calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Parser' for a duration of 10 secs per method:
-              real      total      utime      stime     cutime     cstime
-parser:   10.006552  10.000000  10.000000   0.000000   0.000000   0.000000
-               289   28.900000    0.034602
-             calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-
-[null,false,true,"f\u00d6\u00df\u00c4r",["n\u20acst\u20acd",true],{"quux":true,"foo\u00df":"b\u00e4r"}]
-First run for warmup.
-Running 'BC_Generator' for a duration of 10 secs per method:
-                        real      total      utime      stime     cutime     cstime
-generator_fast  :   10.011644  10.010000  10.010000   0.000000   0.000000   0.000000
-                         411   41.058941    0.024355
-generator_safe  :   10.007100  10.010000  10.010000   0.000000   0.000000   0.000000
-                         352   35.164835    0.028438
-generator_pretty:   10.008156  10.010000  10.010000   0.000000   0.000000   0.000000
-                         341   34.065934    0.029355
-                       calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Generator' for a duration of 10 secs per method:
-                        real      total      utime      stime     cutime     cstime
-generator_fast  :   10.005185  10.010000  10.010000   0.000000   0.000000   0.000000
-                         411   41.058941    0.024355
-generator_safe  :   10.006932  10.010000  10.010000   0.000000   0.000000   0.000000
-                         351   35.064935    0.028519
-generator_pretty:   10.007414  10.000000  10.000000   0.000000   0.000000   0.000000
-                         340   34.000000    0.029412
-                       calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-Comparison in BC_Generator:
-                  secs/call     speed
-generator_fast  :    0.024 ->    1.208x
-generator_safe  :    0.029 ->    1.031x
-generator_pretty:    0.029 ->    1.000x
---------------------------------------------------------------------------------
-
-[null, false, true, "f\u00d6\u00df\u00c4r", ["n\u20acst\u20acd", true], {quux: true, "foo\u00df": "b\u00e4r"}]
-First run for warmup.
-Running 'BC_Rails' for a duration of 10 secs per method:
-                 real      total      utime      stime     cutime     cstime
-generator:   10.005748  10.000000  10.000000   0.000000   0.000000   0.000000
-                  240   24.000000    0.041667
-                calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Rails' for a duration of 10 secs per method:
-                 real      total      utime      stime     cutime     cstime
-generator:   10.006764  10.010000  10.010000   0.000000   0.000000   0.000000
-                  239   23.876124    0.041883
-                calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_generator.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_generator.rb
deleted file mode 100755
index f0173bc..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_generator.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'bullshit'
-$KCODE='utf8'
-if ARGV.shift == 'pure'
-  require 'json/pure'
-else
-  require 'json/ext'
-end
-
-class BC_Generator < Bullshit::TimeCase
-  include JSON
-
-  warmup    true
-  duration  10
-
-  def setup
-    a = [ nil, false, true, "fÖßÄr", [ "n€st€d", true ], { "fooß" => "bär", "quux" => true } ]
-    puts JSON[a]
-    @big = a * 100
-  end
-
-  def benchmark_generator_fast
-    @result = JSON.fast_generate(@big)
-  end
-
-  def reset_benchmark_generator_fast
-    @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
-  end
-
-  def benchmark_generator_safe
-    @result = JSON.generate(@big)
-  end
-
-  def reset_benchmark_generator_safe
-    @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
-  end
-
-  def benchmark_generator_pretty
-    @result = JSON.pretty_generate(@big)
-  end
-
-  def reset_benchmark_generator_pretty
-    @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
-  end
-
-  compare :generator_fast, :generator_safe, :generator_pretty
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_parser.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_parser.rb
deleted file mode 100755
index 486cbaa..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_parser.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'bullshit'
-if ARGV.shift == 'pure'
-  require 'json/pure'
-else
-  require 'json/ext'
-end
-
-class BC_Parser < Bullshit::TimeCase
-  include JSON
-
-  warmup    true
-  duration  10
-
-  def setup
-    a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
-    @big = a * 100
-    @json = JSON.generate(@big)
-  end
-
-  def benchmark_parser
-    a = JSON.parse(@json)
-    a == @big or raise "not equal"
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_rails.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_rails.rb
deleted file mode 100755
index a9afb0d..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/benchmarks/benchmark_rails.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'bullshit'
-require 'active_support'
-
-class BC_Rails < Bullshit::TimeCase
-  warmup    true
-  duration  10
-
-  def setup
-    a = [ nil, false, true, "fÖßÄr", [ "n€st€d", true ], { "fooß" => "bär", "quux" => true } ]
-    puts a.to_json
-    @big = a * 100
-  end
-
-  def benchmark_generator
-    @result = @big.to_json
-  end
-
-  def reset_benchmark_generator
-    @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
-    if stack = Thread.current[:json_reference_stack]
-      stack.clear
-    end
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/bin/edit_json.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/bin/edit_json.rb
deleted file mode 100755
index 076ed4a..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/bin/edit_json.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env ruby
-$KCODE = 'U'
-require 'json/editor'
-
-filename, encoding = ARGV
-JSON::Editor.start(encoding) do |window|
-  if filename
-    window.file_open(filename)
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/bin/prettify_json.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/bin/prettify_json.rb
deleted file mode 100755
index 2f9a583..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/bin/prettify_json.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env ruby
-
-$KCODE = 'U'
-require 'json'
-require 'fileutils'
-include FileUtils
-
-# Parses the argument array _args_, according to the pattern _s_, to
-# retrieve the single character command line options from it. If _s_ is
-# 'xy:' an option '-x' without an option argument is searched, and an
-# option '-y foo' with an option argument ('foo').
-#
-# An option hash is returned with all found options set to true or the
-# found option argument.
-def go(s, args = ARGV)
-  b, v = s.scan(/(.)(:?)/).inject([{},{}]) { |t,(o,a)|
-    t[a.empty? ? 0 : 1][o] = a.empty? ? false : nil
-    t
-  }
-  while a = args.shift
-    a !~ /\A-(.+)/ and args.unshift a and break
-    p = $1
-    until p == ''
-      o = p.slice!(0, 1)
-      if v.key?(o)
-        v[o] = if p == '' then args.shift or break 1 else p end
-        break
-      elsif b.key?(o)
-        b[o] = true
-      else
-        args.unshift a
-        break 1
-      end
-    end and break
-  end
-  b.merge(v)
-end
-
-opts = go 'slhi:', args = ARGV.dup
-if opts['h'] || opts['l'] && opts['s']
-  puts <<EOT
-Usage: #{File.basename($0)} [OPTION] [FILE]
-
-If FILE is skipped, this scripts waits for input from STDIN. Otherwise
-FILE is opened, read, and used as input for the prettifier.
-
-OPTION can be
-  -s     to output the shortest possible JSON (precludes -l)
-  -l     to output a longer, better formatted JSON (precludes -s)
-  -i EXT prettifies FILE in place, saving a backup to FILE.EXT
-  -h     this help
-EOT
-  exit 0
-end
-
-filename = nil
-json = JSON[
-  if args.empty?
-    STDIN.read
-  else
-    File.read filename = args.first
-  end
-]
-
-output = if opts['s']
-  JSON.fast_generate json
-else # default is -l
-  JSON.pretty_generate json
-end
-
-if opts['i'] && filename
-  cp filename, "#{filename}.#{opts['i']}"
-  File.open(filename, 'w') { |f| f.puts output }
-else
-  puts output
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/example.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/example.json
deleted file mode 100644
index 88b4e82..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/example.json
+++ /dev/null
@@ -1 +0,0 @@
-{"a":2,"b":3.141,"TIME":"2007-03-14T11:52:40","c":"c","d":[1,"b",3.14],"COUNT":666,"e":{"foo":"bar"},"foo":"B\u00e4r","g":"\u677e\u672c\u884c\u5f18","h":1000.0,"bar":"\u00a9 \u2260 \u20ac!","i":0.001,"j":"\ud840\udc01"}
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/index.html b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/index.html
deleted file mode 100644
index abe6fdb..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/index.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-  <head>
-    <title>Javascript Example</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>    
-    <script src="prototype.js" type="text/javascript"></script>
-  </head>
-
-  <body>
-    <h1>Fetching object from server</h1>
-    <div id="list">
-      Wait...<br/>
-      <noscript><p>Switch on Javascript!</p></noscript>
-    </div>
-    <script type="text/javascript">
-    <!--
-    function pollJSON() {
-      new Ajax.Request('/json',
-        {
-          method: 'get',
-          onSuccess: function(transport) {
-            var response = transport.responseText || "no response text";
-            response = eval("(" + response + ")");
-            var text = "";
-            for (var k in response) {
-              text = text + "<b>" + k + "</b>: " + response[k] + "<br/>"
-            }
-            $("list").update(text);
-          },
-          onFailure: function() { alert('Something went wrong...') }
-        });
-    }
-    new PeriodicalExecuter(pollJSON, 1);
-    -->
-    </script>
-  </body>
-</html>
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/prototype.js b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/prototype.js
deleted file mode 100644
index 5c73462..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/data/prototype.js
+++ /dev/null
@@ -1,4184 +0,0 @@
-/*  Prototype JavaScript framework, version 1.6.0
- *  (c) 2005-2007 Sam Stephenson
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://www.prototypejs.org/
- *
- *--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.6.0',
-
-  Browser: {
-    IE:     !!(window.attachEvent && !window.opera),
-    Opera:  !!window.opera,
-    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
-    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
-    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
-  },
-
-  BrowserFeatures: {
-    XPath: !!document.evaluate,
-    ElementExtensions: !!window.HTMLElement,
-    SpecificElementExtensions:
-      document.createElement('div').__proto__ &&
-      document.createElement('div').__proto__ !==
-        document.createElement('form').__proto__
-  },
-
-  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
-  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
-
-  emptyFunction: function() { },
-  K: function(x) { return x }
-};
-
-if (Prototype.Browser.MobileSafari)
-  Prototype.BrowserFeatures.SpecificElementExtensions = false;
-
-if (Prototype.Browser.WebKit)
-  Prototype.BrowserFeatures.XPath = false;
-
-/* Based on Alex Arnell's inheritance implementation. */
-var Class = {
-  create: function() {
-    var parent = null, properties = $A(arguments);
-    if (Object.isFunction(properties[0]))
-      parent = properties.shift();
-
-    function klass() {
-      this.initialize.apply(this, arguments);
-    }
-
-    Object.extend(klass, Class.Methods);
-    klass.superclass = parent;
-    klass.subclasses = [];
-
-    if (parent) {
-      var subclass = function() { };
-      subclass.prototype = parent.prototype;
-      klass.prototype = new subclass;
-      parent.subclasses.push(klass);
-    }
-
-    for (var i = 0; i < properties.length; i++)
-      klass.addMethods(properties[i]);
-
-    if (!klass.prototype.initialize)
-      klass.prototype.initialize = Prototype.emptyFunction;
-
-    klass.prototype.constructor = klass;
-
-    return klass;
-  }
-};
-
-Class.Methods = {
-  addMethods: function(source) {
-    var ancestor   = this.superclass && this.superclass.prototype;
-    var properties = Object.keys(source);
-
-    if (!Object.keys({ toString: true }).length)
-      properties.push("toString", "valueOf");
-
-    for (var i = 0, length = properties.length; i < length; i++) {
-      var property = properties[i], value = source[property];
-      if (ancestor && Object.isFunction(value) &&
-          value.argumentNames().first() == "$super") {
-        var method = value, value = Object.extend((function(m) {
-          return function() { return ancestor[m].apply(this, arguments) };
-        })(property).wrap(method), {
-          valueOf:  function() { return method },
-          toString: function() { return method.toString() }
-        });
-      }
-      this.prototype[property] = value;
-    }
-
-    return this;
-  }
-};
-
-var Abstract = { };
-
-Object.extend = function(destination, source) {
-  for (var property in source)
-    destination[property] = source[property];
-  return destination;
-};
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (object === undefined) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : object.toString();
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  toJSON: function(object) {
-    var type = typeof object;
-    switch (type) {
-      case 'undefined':
-      case 'function':
-      case 'unknown': return;
-      case 'boolean': return object.toString();
-    }
-
-    if (object === null) return 'null';
-    if (object.toJSON) return object.toJSON();
-    if (Object.isElement(object)) return;
-
-    var results = [];
-    for (var property in object) {
-      var value = Object.toJSON(object[property]);
-      if (value !== undefined)
-        results.push(property.toJSON() + ': ' + value);
-    }
-
-    return '{' + results.join(', ') + '}';
-  },
-
-  toQueryString: function(object) {
-    return $H(object).toQueryString();
-  },
-
-  toHTML: function(object) {
-    return object && object.toHTML ? object.toHTML() : String.interpret(object);
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({ }, object);
-  },
-
-  isElement: function(object) {
-    return object && object.nodeType == 1;
-  },
-
-  isArray: function(object) {
-    return object && object.constructor === Array;
-  },
-
-  isHash: function(object) {
-    return object instanceof Hash;
-  },
-
-  isFunction: function(object) {
-    return typeof object == "function";
-  },
-
-  isString: function(object) {
-    return typeof object == "string";
-  },
-
-  isNumber: function(object) {
-    return typeof object == "number";
-  },
-
-  isUndefined: function(object) {
-    return typeof object == "undefined";
-  }
-});
-
-Object.extend(Function.prototype, {
-  argumentNames: function() {
-    var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
-    return names.length == 1 && !names[0] ? [] : names;
-  },
-
-  bind: function() {
-    if (arguments.length < 2 && arguments[0] === undefined) return this;
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function() {
-      return __method.apply(object, args.concat($A(arguments)));
-    }
-  },
-
-  bindAsEventListener: function() {
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function(event) {
-      return __method.apply(object, [event || window.event].concat(args));
-    }
-  },
-
-  curry: function() {
-    if (!arguments.length) return this;
-    var __method = this, args = $A(arguments);
-    return function() {
-      return __method.apply(this, args.concat($A(arguments)));
-    }
-  },
-
-  delay: function() {
-    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
-    return window.setTimeout(function() {
-      return __method.apply(__method, args);
-    }, timeout);
-  },
-
-  wrap: function(wrapper) {
-    var __method = this;
-    return function() {
-      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
-    }
-  },
-
-  methodize: function() {
-    if (this._methodized) return this._methodized;
-    var __method = this;
-    return this._methodized = function() {
-      return __method.apply(null, [this].concat($A(arguments)));
-    };
-  }
-});
-
-Function.prototype.defer = Function.prototype.delay.curry(0.01);
-
-Date.prototype.toJSON = function() {
-  return '"' + this.getUTCFullYear() + '-' +
-    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
-    this.getUTCDate().toPaddedString(2) + 'T' +
-    this.getUTCHours().toPaddedString(2) + ':' +
-    this.getUTCMinutes().toPaddedString(2) + ':' +
-    this.getUTCSeconds().toPaddedString(2) + 'Z"';
-};
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) { }
-    }
-
-    return returnValue;
-  }
-};
-
-RegExp.prototype.match = RegExp.prototype.test;
-
-RegExp.escape = function(str) {
-  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
-};
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create({
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  execute: function() {
-    this.callback(this);
-  },
-
-  stop: function() {
-    if (!this.timer) return;
-    clearInterval(this.timer);
-    this.timer = null;
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.execute();
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-});
-Object.extend(String, {
-  interpret: function(value) {
-    return value == null ? '' : String(value);
-  },
-  specialChar: {
-    '\b': '\\b',
-    '\t': '\\t',
-    '\n': '\\n',
-    '\f': '\\f',
-    '\r': '\\r',
-    '\\': '\\\\'
-  }
-});
-
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
-    var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
-
-    while (source.length > 0) {
-      if (match = source.match(pattern)) {
-        result += source.slice(0, match.index);
-        result += String.interpret(replacement(match));
-        source  = source.slice(match.index + match[0].length);
-      } else {
-        result += source, source = '';
-      }
-    }
-    return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
-    count = count === undefined ? 1 : count;
-
-    return this.gsub(pattern, function(match) {
-      if (--count < 0) return match[0];
-      return replacement(match);
-    });
-  },
-
-  scan: function(pattern, iterator) {
-    this.gsub(pattern, iterator);
-    return String(this);
-  },
-
-  truncate: function(length, truncation) {
-    length = length || 30;
-    truncation = truncation === undefined ? '...' : truncation;
-    return this.length > length ?
-      this.slice(0, length - truncation.length) + truncation : String(this);
-  },
-
-  strip: function() {
-    return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var self = arguments.callee;
-    self.text.data = this;
-    return self.div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = new Element('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
-    var match = this.strip().match(/([^?#]*)(#.*)?$/);
-    if (!match) return { };
-
-    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
-      if ((pair = pair.split('='))[0]) {
-        var key = decodeURIComponent(pair.shift());
-        var value = pair.length > 1 ? pair.join('=') : pair[0];
-        if (value != undefined) value = decodeURIComponent(value);
-
-        if (key in hash) {
-          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
-          hash[key].push(value);
-        }
-        else hash[key] = value;
-      }
-      return hash;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  succ: function() {
-    return this.slice(0, this.length - 1) +
-      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  times: function(count) {
-    return count < 1 ? '' : new Array(count + 1).join(this);
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function() {
-    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
-      var character = String.specialChar[match[0]];
-      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
-    });
-    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
-    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  },
-
-  toJSON: function() {
-    return this.inspect(true);
-  },
-
-  unfilterJSON: function(filter) {
-    return this.sub(filter || Prototype.JSONFilter, '#{1}');
-  },
-
-  isJSON: function() {
-    var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
-    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
-  },
-
-  evalJSON: function(sanitize) {
-    var json = this.unfilterJSON();
-    try {
-      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
-    } catch (e) { }
-    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
-  },
-
-  include: function(pattern) {
-    return this.indexOf(pattern) > -1;
-  },
-
-  startsWith: function(pattern) {
-    return this.indexOf(pattern) === 0;
-  },
-
-  endsWith: function(pattern) {
-    var d = this.length - pattern.length;
-    return d >= 0 && this.lastIndexOf(pattern) === d;
-  },
-
-  empty: function() {
-    return this == '';
-  },
-
-  blank: function() {
-    return /^\s*$/.test(this);
-  },
-
-  interpolate: function(object, pattern) {
-    return new Template(this, pattern).evaluate(object);
-  }
-});
-
-if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
-  escapeHTML: function() {
-    return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
-  },
-  unescapeHTML: function() {
-    return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (Object.isFunction(replacement)) return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-};
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-Object.extend(String.prototype.escapeHTML, {
-  div:  document.createElement('div'),
-  text: document.createTextNode('')
-});
-
-with (String.prototype.escapeHTML) div.appendChild(text);
-
-var Template = Class.create({
-  initialize: function(template, pattern) {
-    this.template = template.toString();
-    this.pattern = pattern || Template.Pattern;
-  },
-
-  evaluate: function(object) {
-    if (Object.isFunction(object.toTemplateReplacements))
-      object = object.toTemplateReplacements();
-
-    return this.template.gsub(this.pattern, function(match) {
-      if (object == null) return '';
-
-      var before = match[1] || '';
-      if (before == '\\') return match[2];
-
-      var ctx = object, expr = match[3];
-      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
-      if (match == null) return before;
-
-      while (match != null) {
-        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
-        ctx = ctx[comp];
-        if (null == ctx || '' == match[3]) break;
-        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
-        match = pattern.exec(expr);
-      }
-
-      return before + String.interpret(ctx);
-    }.bind(this));
-  }
-});
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-
-var $break = { };
-
-var Enumerable = {
-  each: function(iterator, context) {
-    var index = 0;
-    iterator = iterator.bind(context);
-    try {
-      this._each(function(value) {
-        iterator(value, index++);
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-    return this;
-  },
-
-  eachSlice: function(number, iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var index = -number, slices = [], array = this.toArray();
-    while ((index += number) < array.length)
-      slices.push(array.slice(index, index+number));
-    return slices.collect(iterator, context);
-  },
-
-  all: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!iterator(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result = false;
-    this.each(function(value, index) {
-      if (result = !!iterator(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var results = [];
-    this.each(function(value, index) {
-      results.push(iterator(value, index));
-    });
-    return results;
-  },
-
-  detect: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(filter, iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var results = [];
-
-    if (Object.isString(filter))
-      filter = new RegExp(filter);
-
-    this.each(function(value, index) {
-      if (filter.match(value))
-        results.push(iterator(value, index));
-    });
-    return results;
-  },
-
-  include: function(object) {
-    if (Object.isFunction(this.indexOf))
-      if (this.indexOf(object) != -1) return true;
-
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
-    fillWith = fillWith === undefined ? null : fillWith;
-    return this.eachSlice(number, function(slice) {
-      while(slice.length < number) slice.push(fillWith);
-      return slice;
-    });
-  },
-
-  inject: function(memo, iterator, context) {
-    iterator = iterator.bind(context);
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.map(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result;
-    this.each(function(value, index) {
-      value = iterator(value, index);
-      if (result == undefined || value >= result)
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result;
-    this.each(function(value, index) {
-      value = iterator(value, index);
-      if (result == undefined || value < result)
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      (iterator(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator, context) {
-    iterator = iterator.bind(context);
-    return this.map(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.map();
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (Object.isFunction(args.last()))
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      return iterator(collections.pluck(index));
-    });
-  },
-
-  size: function() {
-    return this.toArray().length;
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-};
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  filter:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray,
-  every:   Enumerable.all,
-  some:    Enumerable.any
-});
-function $A(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) return iterable.toArray();
-  var length = iterable.length, results = new Array(length);
-  while (length--) results[length] = iterable[length];
-  return results;
-}
-
-if (Prototype.Browser.WebKit) {
-  function $A(iterable) {
-    if (!iterable) return [];
-    if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
-        iterable.toArray) return iterable.toArray();
-    var length = iterable.length, results = new Array(length);
-    while (length--) results[length] = iterable[length];
-    return results;
-  }
-}
-
-Array.from = $A;
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(Object.isArray(value) ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function(sorted) {
-    return this.inject([], function(array, value, index) {
-      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
-        array.push(value);
-      return array;
-    });
-  },
-
-  intersect: function(array) {
-    return this.uniq().findAll(function(item) {
-      return array.detect(function(value) { return item === value });
-    });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
-    return this.length;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  },
-
-  toJSON: function() {
-    var results = [];
-    this.each(function(object) {
-      var value = Object.toJSON(object);
-      if (value !== undefined) results.push(value);
-    });
-    return '[' + results.join(', ') + ']';
-  }
-});
-
-// use native browser JS 1.6 implementation if available
-if (Object.isFunction(Array.prototype.forEach))
-  Array.prototype._each = Array.prototype.forEach;
-
-if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
-  i || (i = 0);
-  var length = this.length;
-  if (i < 0) i = length + i;
-  for (; i < length; i++)
-    if (this[i] === item) return i;
-  return -1;
-};
-
-if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
-  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
-  var n = this.slice(0, i).reverse().indexOf(item);
-  return (n < 0) ? n : i - n - 1;
-};
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string) {
-  if (!Object.isString(string)) return [];
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if (Prototype.Browser.Opera){
-  Array.prototype.concat = function() {
-    var array = [];
-    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      if (Object.isArray(arguments[i])) {
-        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
-      } else {
-        array.push(arguments[i]);
-      }
-    }
-    return array;
-  };
-}
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    return this.toPaddedString(2, 16);
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  },
-
-  toPaddedString: function(length, radix) {
-    var string = this.toString(radix || 10);
-    return '0'.times(length - string.length) + string;
-  },
-
-  toJSON: function() {
-    return isFinite(this) ? this.toString() : 'null';
-  }
-});
-
-$w('abs round ceil floor').each(function(method){
-  Number.prototype[method] = Math[method].methodize();
-});
-function $H(object) {
-  return new Hash(object);
-};
-
-var Hash = Class.create(Enumerable, (function() {
-  if (function() {
-    var i = 0, Test = function(value) { this.key = value };
-    Test.prototype.key = 'foo';
-    for (var property in new Test('bar')) i++;
-    return i > 1;
-  }()) {
-    function each(iterator) {
-      var cache = [];
-      for (var key in this._object) {
-        var value = this._object[key];
-        if (cache.include(key)) continue;
-        cache.push(key);
-        var pair = [key, value];
-        pair.key = key;
-        pair.value = value;
-        iterator(pair);
-      }
-    }
-  } else {
-    function each(iterator) {
-      for (var key in this._object) {
-        var value = this._object[key], pair = [key, value];
-        pair.key = key;
-        pair.value = value;
-        iterator(pair);
-      }
-    }
-  }
-
-  function toQueryPair(key, value) {
-    if (Object.isUndefined(value)) return key;
-    return key + '=' + encodeURIComponent(String.interpret(value));
-  }
-
-  return {
-    initialize: function(object) {
-      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
-    },
-
-    _each: each,
-
-    set: function(key, value) {
-      return this._object[key] = value;
-    },
-
-    get: function(key) {
-      return this._object[key];
-    },
-
-    unset: function(key) {
-      var value = this._object[key];
-      delete this._object[key];
-      return value;
-    },
-
-    toObject: function() {
-      return Object.clone(this._object);
-    },
-
-    keys: function() {
-      return this.pluck('key');
-    },
-
-    values: function() {
-      return this.pluck('value');
-    },
-
-    index: function(value) {
-      var match = this.detect(function(pair) {
-        return pair.value === value;
-      });
-      return match && match.key;
-    },
-
-    merge: function(object) {
-      return this.clone().update(object);
-    },
-
-    update: function(object) {
-      return new Hash(object).inject(this, function(result, pair) {
-        result.set(pair.key, pair.value);
-        return result;
-      });
-    },
-
-    toQueryString: function() {
-      return this.map(function(pair) {
-        var key = encodeURIComponent(pair.key), values = pair.value;
-
-        if (values && typeof values == 'object') {
-          if (Object.isArray(values))
-            return values.map(toQueryPair.curry(key)).join('&');
-        }
-        return toQueryPair(key, values);
-      }).join('&');
-    },
-
-    inspect: function() {
-      return '#<Hash:{' + this.map(function(pair) {
-        return pair.map(Object.inspect).join(': ');
-      }).join(', ') + '}>';
-    },
-
-    toJSON: function() {
-      return Object.toJSON(this.toObject());
-    },
-
-    clone: function() {
-      return new Hash(this);
-    }
-  }
-})());
-
-Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
-Hash.from = $H;
-var ObjectRange = Class.create(Enumerable, {
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    while (this.include(value)) {
-      iterator(value);
-      value = value.succ();
-    }
-  },
-
-  include: function(value) {
-    if (value < this.start)
-      return false;
-    if (this.exclusive)
-      return value < this.end;
-    return value <= this.end;
-  }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-};
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new XMLHttpRequest()},
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-};
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responder) {
-    if (!this.include(responder))
-      this.responders.push(responder);
-  },
-
-  unregister: function(responder) {
-    this.responders = this.responders.without(responder);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (Object.isFunction(responder[callback])) {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) { }
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate:   function() { Ajax.activeRequestCount++ },
-  onComplete: function() { Ajax.activeRequestCount-- }
-});
-
-Ajax.Base = Class.create({
-  initialize: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      contentType:  'application/x-www-form-urlencoded',
-      encoding:     'UTF-8',
-      parameters:   '',
-      evalJSON:     true,
-      evalJS:       true
-    };
-    Object.extend(this.options, options || { });
-
-    this.options.method = this.options.method.toLowerCase();
-    if (Object.isString(this.options.parameters))
-      this.options.parameters = this.options.parameters.toQueryParams();
-  }
-});
-
-Ajax.Request = Class.create(Ajax.Base, {
-  _complete: false,
-
-  initialize: function($super, url, options) {
-    $super(options);
-    this.transport = Ajax.getTransport();
-    this.request(url);
-  },
-
-  request: function(url) {
-    this.url = url;
-    this.method = this.options.method;
-    var params = Object.clone(this.options.parameters);
-
-    if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
-      this.method = 'post';
-    }
-
-    this.parameters = params;
-
-    if (params = Object.toQueryString(params)) {
-      // when GET, append parameters to URL
-      if (this.method == 'get')
-        this.url += (this.url.include('?') ? '&' : '?') + params;
-      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-        params += '&_=';
-    }
-
-    try {
-      var response = new Ajax.Response(this);
-      if (this.options.onCreate) this.options.onCreate(response);
-      Ajax.Responders.dispatch('onCreate', this, response);
-
-      this.transport.open(this.method.toUpperCase(), this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
-
-      this.transport.onreadystatechange = this.onStateChange.bind(this);
-      this.setRequestHeaders();
-
-      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
-      this.transport.send(this.body);
-
-      /* Force Firefox to handle ready state 4 for synchronous requests */
-      if (!this.options.asynchronous && this.transport.overrideMimeType)
-        this.onStateChange();
-
-    }
-    catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState > 1 && !((readyState == 4) && this._complete))
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  setRequestHeaders: function() {
-    var headers = {
-      'X-Requested-With': 'XMLHttpRequest',
-      'X-Prototype-Version': Prototype.Version,
-      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
-    };
-
-    if (this.method == 'post') {
-      headers['Content-type'] = this.options.contentType +
-        (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
-      /* Force "Connection: close" for older Mozilla browsers to work
-       * around a bug where XMLHttpRequest sends an incorrect
-       * Content-length header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType &&
-          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
-            headers['Connection'] = 'close';
-    }
-
-    // user-defined headers
-    if (typeof this.options.requestHeaders == 'object') {
-      var extras = this.options.requestHeaders;
-
-      if (Object.isFunction(extras.push))
-        for (var i = 0, length = extras.length; i < length; i += 2)
-          headers[extras[i]] = extras[i+1];
-      else
-        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
-    }
-
-    for (var name in headers)
-      this.transport.setRequestHeader(name, headers[name]);
-  },
-
-  success: function() {
-    var status = this.getStatus();
-    return !status || (status >= 200 && status < 300);
-  },
-
-  getStatus: function() {
-    try {
-      return this.transport.status || 0;
-    } catch (e) { return 0 }
-  },
-
-  respondToReadyState: function(readyState) {
-    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
-
-    if (state == 'Complete') {
-      try {
-        this._complete = true;
-        (this.options['on' + response.status]
-         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(response, response.headerJSON);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      var contentType = response.getHeader('Content-type');
-      if (this.options.evalJS == 'force'
-          || (this.options.evalJS && contentType
-          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
-        this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
-      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-    }
-  },
-
-  getHeader: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) { return null }
-  },
-
-  evalResponse: function() {
-    try {
-      return eval((this.transport.responseText || '').unfilterJSON());
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Response = Class.create({
-  initialize: function(request){
-    this.request = request;
-    var transport  = this.transport  = request.transport,
-        readyState = this.readyState = transport.readyState;
-
-    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
-      this.status       = this.getStatus();
-      this.statusText   = this.getStatusText();
-      this.responseText = String.interpret(transport.responseText);
-      this.headerJSON   = this._getHeaderJSON();
-    }
-
-    if(readyState == 4) {
-      var xml = transport.responseXML;
-      this.responseXML  = xml === undefined ? null : xml;
-      this.responseJSON = this._getResponseJSON();
-    }
-  },
-
-  status:      0,
-  statusText: '',
-
-  getStatus: Ajax.Request.prototype.getStatus,
-
-  getStatusText: function() {
-    try {
-      return this.transport.statusText || '';
-    } catch (e) { return '' }
-  },
-
-  getHeader: Ajax.Request.prototype.getHeader,
-
-  getAllHeaders: function() {
-    try {
-      return this.getAllResponseHeaders();
-    } catch (e) { return null }
-  },
-
-  getResponseHeader: function(name) {
-    return this.transport.getResponseHeader(name);
-  },
-
-  getAllResponseHeaders: function() {
-    return this.transport.getAllResponseHeaders();
-  },
-
-  _getHeaderJSON: function() {
-    var json = this.getHeader('X-JSON');
-    if (!json) return null;
-    json = decodeURIComponent(escape(json));
-    try {
-      return json.evalJSON(this.request.options.sanitizeJSON);
-    } catch (e) {
-      this.request.dispatchException(e);
-    }
-  },
-
-  _getResponseJSON: function() {
-    var options = this.request.options;
-    if (!options.evalJSON || (options.evalJSON != 'force' &&
-      !(this.getHeader('Content-type') || '').include('application/json')))
-        return null;
-    try {
-      return this.transport.responseText.evalJSON(options.sanitizeJSON);
-    } catch (e) {
-      this.request.dispatchException(e);
-    }
-  }
-});
-
-Ajax.Updater = Class.create(Ajax.Request, {
-  initialize: function($super, container, url, options) {
-    this.container = {
-      success: (container.success || container),
-      failure: (container.failure || (container.success ? null : container))
-    };
-
-    options = options || { };
-    var onComplete = options.onComplete;
-    options.onComplete = (function(response, param) {
-      this.updateContent(response.responseText);
-      if (Object.isFunction(onComplete)) onComplete(response, param);
-    }).bind(this);
-
-    $super(url, options);
-  },
-
-  updateContent: function(responseText) {
-    var receiver = this.container[this.success() ? 'success' : 'failure'],
-        options = this.options;
-
-    if (!options.evalScripts) responseText = responseText.stripScripts();
-
-    if (receiver = $(receiver)) {
-      if (options.insertion) {
-        if (Object.isString(options.insertion)) {
-          var insertion = { }; insertion[options.insertion] = responseText;
-          receiver.insert(insertion);
-        }
-        else options.insertion(receiver, responseText);
-      }
-      else receiver.update(responseText);
-    }
-
-    if (this.success()) {
-      if (this.onComplete) this.onComplete.bind(this).defer();
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
-  initialize: function($super, container, url, options) {
-    $super(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = { };
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.options.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(response) {
-    if (this.options.decay) {
-      this.decay = (response.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = response.responseText;
-    }
-    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-function $(element) {
-  if (arguments.length > 1) {
-    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
-      elements.push($(arguments[i]));
-    return elements;
-  }
-  if (Object.isString(element))
-    element = document.getElementById(element);
-  return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
-  document._getElementsByXPath = function(expression, parentElement) {
-    var results = [];
-    var query = document.evaluate(expression, $(parentElement) || document,
-      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-    for (var i = 0, length = query.snapshotLength; i < length; i++)
-      results.push(Element.extend(query.snapshotItem(i)));
-    return results;
-  };
-}
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Node) var Node = { };
-
-if (!Node.ELEMENT_NODE) {
-  // DOM level 2 ECMAScript Language Binding
-  Object.extend(Node, {
-    ELEMENT_NODE: 1,
-    ATTRIBUTE_NODE: 2,
-    TEXT_NODE: 3,
-    CDATA_SECTION_NODE: 4,
-    ENTITY_REFERENCE_NODE: 5,
-    ENTITY_NODE: 6,
-    PROCESSING_INSTRUCTION_NODE: 7,
-    COMMENT_NODE: 8,
-    DOCUMENT_NODE: 9,
-    DOCUMENT_TYPE_NODE: 10,
-    DOCUMENT_FRAGMENT_NODE: 11,
-    NOTATION_NODE: 12
-  });
-}
-
-(function() {
-  var element = this.Element;
-  this.Element = function(tagName, attributes) {
-    attributes = attributes || { };
-    tagName = tagName.toLowerCase();
-    var cache = Element.cache;
-    if (Prototype.Browser.IE && attributes.name) {
-      tagName = '<' + tagName + ' name="' + attributes.name + '">';
-      delete attributes.name;
-      return Element.writeAttribute(document.createElement(tagName), attributes);
-    }
-    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
-    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
-  };
-  Object.extend(this.Element, element || { });
-}).call(window);
-
-Element.cache = { };
-
-Element.Methods = {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function(element) {
-    element = $(element);
-    Element[Element.visible(element) ? 'hide' : 'show'](element);
-    return element;
-  },
-
-  hide: function(element) {
-    $(element).style.display = 'none';
-    return element;
-  },
-
-  show: function(element) {
-    $(element).style.display = '';
-    return element;
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-    return element;
-  },
-
-  update: function(element, content) {
-    element = $(element);
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-    content = Object.toHTML(content);
-    element.innerHTML = content.stripScripts();
-    content.evalScripts.bind(content).defer();
-    return element;
-  },
-
-  replace: function(element, content) {
-    element = $(element);
-    if (content && content.toElement) content = content.toElement();
-    else if (!Object.isElement(content)) {
-      content = Object.toHTML(content);
-      var range = element.ownerDocument.createRange();
-      range.selectNode(element);
-      content.evalScripts.bind(content).defer();
-      content = range.createContextualFragment(content.stripScripts());
-    }
-    element.parentNode.replaceChild(content, element);
-    return element;
-  },
-
-  insert: function(element, insertions) {
-    element = $(element);
-
-    if (Object.isString(insertions) || Object.isNumber(insertions) ||
-        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
-          insertions = {bottom:insertions};
-
-    var content, t, range;
-
-    for (position in insertions) {
-      content  = insertions[position];
-      position = position.toLowerCase();
-      t = Element._insertionTranslations[position];
-
-      if (content && content.toElement) content = content.toElement();
-      if (Object.isElement(content)) {
-        t.insert(element, content);
-        continue;
-      }
-
-      content = Object.toHTML(content);
-
-      range = element.ownerDocument.createRange();
-      t.initializeRange(element, range);
-      t.insert(element, range.createContextualFragment(content.stripScripts()));
-
-      content.evalScripts.bind(content).defer();
-    }
-
-    return element;
-  },
-
-  wrap: function(element, wrapper, attributes) {
-    element = $(element);
-    if (Object.isElement(wrapper))
-      $(wrapper).writeAttribute(attributes || { });
-    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
-    else wrapper = new Element('div', wrapper);
-    if (element.parentNode)
-      element.parentNode.replaceChild(wrapper, element);
-    wrapper.appendChild(element);
-    return wrapper;
-  },
-
-  inspect: function(element) {
-    element = $(element);
-    var result = '<' + element.tagName.toLowerCase();
-    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
-      if (value) result += ' ' + attribute + '=' + value.inspect(true);
-    });
-    return result + '>';
-  },
-
-  recursivelyCollect: function(element, property) {
-    element = $(element);
-    var elements = [];
-    while (element = element[property])
-      if (element.nodeType == 1)
-        elements.push(Element.extend(element));
-    return elements;
-  },
-
-  ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
-  },
-
-  descendants: function(element) {
-    return $A($(element).getElementsByTagName('*')).each(Element.extend);
-  },
-
-  firstDescendant: function(element) {
-    element = $(element).firstChild;
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    return $(element);
-  },
-
-  immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
-  },
-
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
-  },
-
-  nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
-  },
-
-  siblings: function(element) {
-    element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
-  },
-
-  match: function(element, selector) {
-    if (Object.isString(selector))
-      selector = new Selector(selector);
-    return selector.match($(element));
-  },
-
-  up: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(element.parentNode);
-    var ancestors = element.ancestors();
-    return expression ? Selector.findElement(ancestors, expression, index) :
-      ancestors[index || 0];
-  },
-
-  down: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return element.firstDescendant();
-    var descendants = element.descendants();
-    return expression ? Selector.findElement(descendants, expression, index) :
-      descendants[index || 0];
-  },
-
-  previous: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
-    var previousSiblings = element.previousSiblings();
-    return expression ? Selector.findElement(previousSiblings, expression, index) :
-      previousSiblings[index || 0];
-  },
-
-  next: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
-    var nextSiblings = element.nextSiblings();
-    return expression ? Selector.findElement(nextSiblings, expression, index) :
-      nextSiblings[index || 0];
-  },
-
-  select: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
-  },
-
-  adjacent: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element.parentNode, args).without(element);
-  },
-
-  identify: function(element) {
-    element = $(element);
-    var id = element.readAttribute('id'), self = arguments.callee;
-    if (id) return id;
-    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
-    element.writeAttribute('id', id);
-    return id;
-  },
-
-  readAttribute: function(element, name) {
-    element = $(element);
-    if (Prototype.Browser.IE) {
-      var t = Element._attributeTranslations.read;
-      if (t.values[name]) return t.values[name](element, name);
-      if (t.names[name]) name = t.names[name];
-      if (name.include(':')) {
-        return (!element.attributes || !element.attributes[name]) ? null :
-         element.attributes[name].value;
-      }
-    }
-    return element.getAttribute(name);
-  },
-
-  writeAttribute: function(element, name, value) {
-    element = $(element);
-    var attributes = { }, t = Element._attributeTranslations.write;
-
-    if (typeof name == 'object') attributes = name;
-    else attributes[name] = value === undefined ? true : value;
-
-    for (var attr in attributes) {
-      var name = t.names[attr] || attr, value = attributes[attr];
-      if (t.values[attr]) name = t.values[attr](element, value);
-      if (value === false || value === null)
-        element.removeAttribute(name);
-      else if (value === true)
-        element.setAttribute(name, name);
-      else element.setAttribute(name, value);
-    }
-    return element;
-  },
-
-  getHeight: function(element) {
-    return $(element).getDimensions().height;
-  },
-
-  getWidth: function(element) {
-    return $(element).getDimensions().width;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    var elementClassName = element.className;
-    return (elementClassName.length > 0 && (elementClassName == className ||
-      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    if (!element.hasClassName(className))
-      element.className += (element.className ? ' ' : '') + className;
-    return element;
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    element.className = element.className.replace(
-      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
-    return element;
-  },
-
-  toggleClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    return element[element.hasClassName(className) ?
-      'removeClassName' : 'addClassName'](className);
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    var node = element.firstChild;
-    while (node) {
-      var nextNode = node.nextSibling;
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        element.removeChild(node);
-      node = nextNode;
-    }
-    return element;
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.blank();
-  },
-
-  descendantOf: function(element, ancestor) {
-    element = $(element), ancestor = $(ancestor);
-
-    if (element.compareDocumentPosition)
-      return (element.compareDocumentPosition(ancestor) & 8) === 8;
-
-    if (element.sourceIndex && !Prototype.Browser.Opera) {
-      var e = element.sourceIndex, a = ancestor.sourceIndex,
-       nextAncestor = ancestor.nextSibling;
-      if (!nextAncestor) {
-        do { ancestor = ancestor.parentNode; }
-        while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
-      }
-      if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);
-    }
-
-    while (element = element.parentNode)
-      if (element == ancestor) return true;
-    return false;
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var pos = element.cumulativeOffset();
-    window.scrollTo(pos[0], pos[1]);
-    return element;
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    style = style == 'float' ? 'cssFloat' : style.camelize();
-    var value = element.style[style];
-    if (!value) {
-      var css = document.defaultView.getComputedStyle(element, null);
-      value = css ? css[style] : null;
-    }
-    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
-    return value == 'auto' ? null : value;
-  },
-
-  getOpacity: function(element) {
-    return $(element).getStyle('opacity');
-  },
-
-  setStyle: function(element, styles) {
-    element = $(element);
-    var elementStyle = element.style, match;
-    if (Object.isString(styles)) {
-      element.style.cssText += ';' + styles;
-      return styles.include('opacity') ?
-        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
-    }
-    for (var property in styles)
-      if (property == 'opacity') element.setOpacity(styles[property]);
-      else
-        elementStyle[(property == 'float' || property == 'cssFloat') ?
-          (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
-            property] = styles[property];
-
-    return element;
-  },
-
-  setOpacity: function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1 || value === '') ? '' :
-      (value < 0.00001) ? 0 : value;
-    return element;
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    var display = $(element).getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-    return element;
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-    return element;
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return element;
-    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
-    if (element._overflow !== 'hidden')
-      element.style.overflow = 'hidden';
-    return element;
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (!element._overflow) return element;
-    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
-    element._overflow = null;
-    return element;
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if (element.tagName == 'BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'absolute') return;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    var offsets = element.positionedOffset();
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-    return element;
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'relative') return;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-    return element;
-  },
-
-  cumulativeScrollOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  getOffsetParent: function(element) {
-    if (element.offsetParent) return $(element.offsetParent);
-    if (element == document.body) return $(element);
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return $(element);
-
-    return $(document.body);
-  },
-
-  viewportOffset: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent == document.body &&
-        Element.getStyle(element, 'position') == 'absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  clonePosition: function(element, source) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || { });
-
-    // find page position of source
-    source = $(source);
-    var p = source.viewportOffset();
-
-    // find coordinate system to use
-    element = $(element);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(element, 'position') == 'absolute') {
-      parent = element.getOffsetParent();
-      delta = parent.viewportOffset();
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
-    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
-    return element;
-  }
-};
-
-Element.Methods.identify.counter = 1;
-
-Object.extend(Element.Methods, {
-  getElementsBySelector: Element.Methods.select,
-  childElements: Element.Methods.immediateDescendants
-});
-
-Element._attributeTranslations = {
-  write: {
-    names: {
-      className: 'class',
-      htmlFor:   'for'
-    },
-    values: { }
-  }
-};
-
-
-if (!document.createRange || Prototype.Browser.Opera) {
-  Element.Methods.insert = function(element, insertions) {
-    element = $(element);
-
-    if (Object.isString(insertions) || Object.isNumber(insertions) ||
-        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
-          insertions = { bottom: insertions };
-
-    var t = Element._insertionTranslations, content, position, pos, tagName;
-
-    for (position in insertions) {
-      content  = insertions[position];
-      position = position.toLowerCase();
-      pos      = t[position];
-
-      if (content && content.toElement) content = content.toElement();
-      if (Object.isElement(content)) {
-        pos.insert(element, content);
-        continue;
-      }
-
-      content = Object.toHTML(content);
-      tagName = ((position == 'before' || position == 'after')
-        ? element.parentNode : element).tagName.toUpperCase();
-
-      if (t.tags[tagName]) {
-        var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
-        if (position == 'top' || position == 'after') fragments.reverse();
-        fragments.each(pos.insert.curry(element));
-      }
-      else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
-
-      content.evalScripts.bind(content).defer();
-    }
-
-    return element;
-  };
-}
-
-if (Prototype.Browser.Opera) {
-  Element.Methods._getStyle = Element.Methods.getStyle;
-  Element.Methods.getStyle = function(element, style) {
-    switch(style) {
-      case 'left':
-      case 'top':
-      case 'right':
-      case 'bottom':
-        if (Element._getStyle(element, 'position') == 'static') return null;
-      default: return Element._getStyle(element, style);
-    }
-  };
-  Element.Methods._readAttribute = Element.Methods.readAttribute;
-  Element.Methods.readAttribute = function(element, attribute) {
-    if (attribute == 'title') return element.title;
-    return Element._readAttribute(element, attribute);
-  };
-}
-
-else if (Prototype.Browser.IE) {
-  $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
-    Element.Methods[method] = Element.Methods[method].wrap(
-      function(proceed, element) {
-        element = $(element);
-        var position = element.getStyle('position');
-        if (position != 'static') return proceed(element);
-        element.setStyle({ position: 'relative' });
-        var value = proceed(element);
-        element.setStyle({ position: position });
-        return value;
-      }
-    );
-  });
-
-  Element.Methods.getStyle = function(element, style) {
-    element = $(element);
-    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
-    var value = element.style[style];
-    if (!value && element.currentStyle) value = element.currentStyle[style];
-
-    if (style == 'opacity') {
-      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
-        if (value[1]) return parseFloat(value[1]) / 100;
-      return 1.0;
-    }
-
-    if (value == 'auto') {
-      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
-        return element['offset' + style.capitalize()] + 'px';
-      return null;
-    }
-    return value;
-  };
-
-  Element.Methods.setOpacity = function(element, value) {
-    function stripAlpha(filter){
-      return filter.replace(/alpha\([^\)]*\)/gi,'');
-    }
-    element = $(element);
-    var currentStyle = element.currentStyle;
-    if ((currentStyle && !currentStyle.hasLayout) ||
-      (!currentStyle && element.style.zoom == 'normal'))
-        element.style.zoom = 1;
-
-    var filter = element.getStyle('filter'), style = element.style;
-    if (value == 1 || value === '') {
-      (filter = stripAlpha(filter)) ?
-        style.filter = filter : style.removeAttribute('filter');
-      return element;
-    } else if (value < 0.00001) value = 0;
-    style.filter = stripAlpha(filter) +
-      'alpha(opacity=' + (value * 100) + ')';
-    return element;
-  };
-
-  Element._attributeTranslations = {
-    read: {
-      names: {
-        'class': 'className',
-        'for':   'htmlFor'
-      },
-      values: {
-        _getAttr: function(element, attribute) {
-          return element.getAttribute(attribute, 2);
-        },
-        _getAttrNode: function(element, attribute) {
-          var node = element.getAttributeNode(attribute);
-          return node ? node.value : "";
-        },
-        _getEv: function(element, attribute) {
-          var attribute = element.getAttribute(attribute);
-          return attribute ? attribute.toString().slice(23, -2) : null;
-        },
-        _flag: function(element, attribute) {
-          return $(element).hasAttribute(attribute) ? attribute : null;
-        },
-        style: function(element) {
-          return element.style.cssText.toLowerCase();
-        },
-        title: function(element) {
-          return element.title;
-        }
-      }
-    }
-  };
-
-  Element._attributeTranslations.write = {
-    names: Object.clone(Element._attributeTranslations.read.names),
-    values: {
-      checked: function(element, value) {
-        element.checked = !!value;
-      },
-
-      style: function(element, value) {
-        element.style.cssText = value ? value : '';
-      }
-    }
-  };
-
-  Element._attributeTranslations.has = {};
-
-  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
-      'encType maxLength readOnly longDesc').each(function(attr) {
-    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
-    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
-  });
-
-  (function(v) {
-    Object.extend(v, {
-      href:        v._getAttr,
-      src:         v._getAttr,
-      type:        v._getAttr,
-      action:      v._getAttrNode,
-      disabled:    v._flag,
-      checked:     v._flag,
-      readonly:    v._flag,
-      multiple:    v._flag,
-      onload:      v._getEv,
-      onunload:    v._getEv,
-      onclick:     v._getEv,
-      ondblclick:  v._getEv,
-      onmousedown: v._getEv,
-      onmouseup:   v._getEv,
-      onmouseover: v._getEv,
-      onmousemove: v._getEv,
-      onmouseout:  v._getEv,
-      onfocus:     v._getEv,
-      onblur:      v._getEv,
-      onkeypress:  v._getEv,
-      onkeydown:   v._getEv,
-      onkeyup:     v._getEv,
-      onsubmit:    v._getEv,
-      onreset:     v._getEv,
-      onselect:    v._getEv,
-      onchange:    v._getEv
-    });
-  })(Element._attributeTranslations.read.values);
-}
-
-else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
-  Element.Methods.setOpacity = function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1) ? 0.999999 :
-      (value === '') ? '' : (value < 0.00001) ? 0 : value;
-    return element;
-  };
-}
-
-else if (Prototype.Browser.WebKit) {
-  Element.Methods.setOpacity = function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1 || value === '') ? '' :
-      (value < 0.00001) ? 0 : value;
-
-    if (value == 1)
-      if(element.tagName == 'IMG' && element.width) {
-        element.width++; element.width--;
-      } else try {
-        var n = document.createTextNode(' ');
-        element.appendChild(n);
-        element.removeChild(n);
-      } catch (e) { }
-
-    return element;
-  };
-
-  // Safari returns margins on body which is incorrect if the child is absolutely
-  // positioned.  For performance reasons, redefine Position.cumulativeOffset for
-  // KHTML/WebKit only.
-  Element.Methods.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return Element._returnOffset(valueL, valueT);
-  };
-}
-
-if (Prototype.Browser.IE || Prototype.Browser.Opera) {
-  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
-  Element.Methods.update = function(element, content) {
-    element = $(element);
-
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-
-    content = Object.toHTML(content);
-    var tagName = element.tagName.toUpperCase();
-
-    if (tagName in Element._insertionTranslations.tags) {
-      $A(element.childNodes).each(function(node) { element.removeChild(node) });
-      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
-        .each(function(node) { element.appendChild(node) });
-    }
-    else element.innerHTML = content.stripScripts();
-
-    content.evalScripts.bind(content).defer();
-    return element;
-  };
-}
-
-if (document.createElement('div').outerHTML) {
-  Element.Methods.replace = function(element, content) {
-    element = $(element);
-
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) {
-      element.parentNode.replaceChild(content, element);
-      return element;
-    }
-
-    content = Object.toHTML(content);
-    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
-
-    if (Element._insertionTranslations.tags[tagName]) {
-      var nextSibling = element.next();
-      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
-      parent.removeChild(element);
-      if (nextSibling)
-        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
-      else
-        fragments.each(function(node) { parent.appendChild(node) });
-    }
-    else element.outerHTML = content.stripScripts();
-
-    content.evalScripts.bind(content).defer();
-    return element;
-  };
-}
-
-Element._returnOffset = function(l, t) {
-  var result = [l, t];
-  result.left = l;
-  result.top = t;
-  return result;
-};
-
-Element._getContentFromAnonymousElement = function(tagName, html) {
-  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
-  div.innerHTML = t[0] + html + t[1];
-  t[2].times(function() { div = div.firstChild });
-  return $A(div.childNodes);
-};
-
-Element._insertionTranslations = {
-  before: {
-    adjacency: 'beforeBegin',
-    insert: function(element, node) {
-      element.parentNode.insertBefore(node, element);
-    },
-    initializeRange: function(element, range) {
-      range.setStartBefore(element);
-    }
-  },
-  top: {
-    adjacency: 'afterBegin',
-    insert: function(element, node) {
-      element.insertBefore(node, element.firstChild);
-    },
-    initializeRange: function(element, range) {
-      range.selectNodeContents(element);
-      range.collapse(true);
-    }
-  },
-  bottom: {
-    adjacency: 'beforeEnd',
-    insert: function(element, node) {
-      element.appendChild(node);
-    }
-  },
-  after: {
-    adjacency: 'afterEnd',
-    insert: function(element, node) {
-      element.parentNode.insertBefore(node, element.nextSibling);
-    },
-    initializeRange: function(element, range) {
-      range.setStartAfter(element);
-    }
-  },
-  tags: {
-    TABLE:  ['<table>',                '</table>',                   1],
-    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
-    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
-    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
-    SELECT: ['<select>',               '</select>',                  1]
-  }
-};
-
-(function() {
-  this.bottom.initializeRange = this.top.initializeRange;
-  Object.extend(this.tags, {
-    THEAD: this.tags.TBODY,
-    TFOOT: this.tags.TBODY,
-    TH:    this.tags.TD
-  });
-}).call(Element._insertionTranslations);
-
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    attribute = Element._attributeTranslations.has[attribute] || attribute;
-    var node = $(element).getAttributeNode(attribute);
-    return node && node.specified;
-  }
-};
-
-Element.Methods.ByTag = { };
-
-Object.extend(Element, Element.Methods);
-
-if (!Prototype.BrowserFeatures.ElementExtensions &&
-    document.createElement('div').__proto__) {
-  window.HTMLElement = { };
-  window.HTMLElement.prototype = document.createElement('div').__proto__;
-  Prototype.BrowserFeatures.ElementExtensions = true;
-}
-
-Element.extend = (function() {
-  if (Prototype.BrowserFeatures.SpecificElementExtensions)
-    return Prototype.K;
-
-  var Methods = { }, ByTag = Element.Methods.ByTag;
-
-  var extend = Object.extend(function(element) {
-    if (!element || element._extendedByPrototype ||
-        element.nodeType != 1 || element == window) return element;
-
-    var methods = Object.clone(Methods),
-      tagName = element.tagName, property, value;
-
-    // extend methods for specific tags
-    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
-
-    for (property in methods) {
-      value = methods[property];
-      if (Object.isFunction(value) && !(property in element))
-        element[property] = value.methodize();
-    }
-
-    element._extendedByPrototype = Prototype.emptyFunction;
-    return element;
-
-  }, {
-    refresh: function() {
-      // extend methods for all tags (Safari doesn't need this)
-      if (!Prototype.BrowserFeatures.ElementExtensions) {
-        Object.extend(Methods, Element.Methods);
-        Object.extend(Methods, Element.Methods.Simulated);
-      }
-    }
-  });
-
-  extend.refresh();
-  return extend;
-})();
-
-Element.hasAttribute = function(element, attribute) {
-  if (element.hasAttribute) return element.hasAttribute(attribute);
-  return Element.Methods.Simulated.hasAttribute(element, attribute);
-};
-
-Element.addMethods = function(methods) {
-  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
-
-  if (!methods) {
-    Object.extend(Form, Form.Methods);
-    Object.extend(Form.Element, Form.Element.Methods);
-    Object.extend(Element.Methods.ByTag, {
-      "FORM":     Object.clone(Form.Methods),
-      "INPUT":    Object.clone(Form.Element.Methods),
-      "SELECT":   Object.clone(Form.Element.Methods),
-      "TEXTAREA": Object.clone(Form.Element.Methods)
-    });
-  }
-
-  if (arguments.length == 2) {
-    var tagName = methods;
-    methods = arguments[1];
-  }
-
-  if (!tagName) Object.extend(Element.Methods, methods || { });
-  else {
-    if (Object.isArray(tagName)) tagName.each(extend);
-    else extend(tagName);
-  }
-
-  function extend(tagName) {
-    tagName = tagName.toUpperCase();
-    if (!Element.Methods.ByTag[tagName])
-      Element.Methods.ByTag[tagName] = { };
-    Object.extend(Element.Methods.ByTag[tagName], methods);
-  }
-
-  function copy(methods, destination, onlyIfAbsent) {
-    onlyIfAbsent = onlyIfAbsent || false;
-    for (var property in methods) {
-      var value = methods[property];
-      if (!Object.isFunction(value)) continue;
-      if (!onlyIfAbsent || !(property in destination))
-        destination[property] = value.methodize();
-    }
-  }
-
-  function findDOMClass(tagName) {
-    var klass;
-    var trans = {
-      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
-      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
-      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
-      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
-      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
-      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
-      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
-      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
-      "FrameSet", "IFRAME": "IFrame"
-    };
-    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
-    if (window[klass]) return window[klass];
-    klass = 'HTML' + tagName + 'Element';
-    if (window[klass]) return window[klass];
-    klass = 'HTML' + tagName.capitalize() + 'Element';
-    if (window[klass]) return window[klass];
-
-    window[klass] = { };
-    window[klass].prototype = document.createElement(tagName).__proto__;
-    return window[klass];
-  }
-
-  if (F.ElementExtensions) {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
-  }
-
-  if (F.SpecificElementExtensions) {
-    for (var tag in Element.Methods.ByTag) {
-      var klass = findDOMClass(tag);
-      if (Object.isUndefined(klass)) continue;
-      copy(T[tag], klass.prototype);
-    }
-  }
-
-  Object.extend(Element, Element.Methods);
-  delete Element.ByTag;
-
-  if (Element.extend.refresh) Element.extend.refresh();
-  Element.cache = { };
-};
-
-document.viewport = {
-  getDimensions: function() {
-    var dimensions = { };
-    $w('width height').each(function(d) {
-      var D = d.capitalize();
-      dimensions[d] = self['inner' + D] ||
-       (document.documentElement['client' + D] || document.body['client' + D]);
-    });
-    return dimensions;
-  },
-
-  getWidth: function() {
-    return this.getDimensions().width;
-  },
-
-  getHeight: function() {
-    return this.getDimensions().height;
-  },
-
-  getScrollOffsets: function() {
-    return Element._returnOffset(
-      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
-      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
-  }
-};
-/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
- * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
- * license.  Please see http://www.yui-ext.com/ for more information. */
-
-var Selector = Class.create({
-  initialize: function(expression) {
-    this.expression = expression.strip();
-    this.compileMatcher();
-  },
-
-  compileMatcher: function() {
-    // Selectors with namespaced attributes can't use the XPath version
-    if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression))
-      return this.compileXPathMatcher();
-
-    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
-        c = Selector.criteria, le, p, m;
-
-    if (Selector._cache[e]) {
-      this.matcher = Selector._cache[e];
-      return;
-    }
-
-    this.matcher = ["this.matcher = function(root) {",
-                    "var r = root, h = Selector.handlers, c = false, n;"];
-
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
-    	      new Template(c[i]).evaluate(m));
-          e = e.replace(m[0], '');
-          break;
-        }
-      }
-    }
-
-    this.matcher.push("return h.unique(n);\n}");
-    eval(this.matcher.join('\n'));
-    Selector._cache[this.expression] = this.matcher;
-  },
-
-  compileXPathMatcher: function() {
-    var e = this.expression, ps = Selector.patterns,
-        x = Selector.xpath, le, m;
-
-    if (Selector._cache[e]) {
-      this.xpath = Selector._cache[e]; return;
-    }
-
-    this.matcher = ['.//*'];
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        if (m = e.match(ps[i])) {
-          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
-            new Template(x[i]).evaluate(m));
-          e = e.replace(m[0], '');
-          break;
-        }
-      }
-    }
-
-    this.xpath = this.matcher.join('');
-    Selector._cache[this.expression] = this.xpath;
-  },
-
-  findElements: function(root) {
-    root = root || document;
-    if (this.xpath) return document._getElementsByXPath(this.xpath, root);
-    return this.matcher(root);
-  },
-
-  match: function(element) {
-    this.tokens = [];
-
-    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
-    var le, p, m;
-
-    while (e && le !== e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          // use the Selector.assertions methods unless the selector
-          // is too complex.
-          if (as[i]) {
-            this.tokens.push([i, Object.clone(m)]);
-            e = e.replace(m[0], '');
-          } else {
-            // reluctantly do a document-wide search
-            // and look for a match in the array
-            return this.findElements(document).include(element);
-          }
-        }
-      }
-    }
-
-    var match = true, name, matches;
-    for (var i = 0, token; token = this.tokens[i]; i++) {
-      name = token[0], matches = token[1];
-      if (!Selector.assertions[name](element, matches)) {
-        match = false; break;
-      }
-    }
-
-    return match;
-  },
-
-  toString: function() {
-    return this.expression;
-  },
-
-  inspect: function() {
-    return "#<Selector:" + this.expression.inspect() + ">";
-  }
-});
-
-Object.extend(Selector, {
-  _cache: { },
-
-  xpath: {
-    descendant:   "//*",
-    child:        "/*",
-    adjacent:     "/following-sibling::*[1]",
-    laterSibling: '/following-sibling::*',
-    tagName:      function(m) {
-      if (m[1] == '*') return '';
-      return "[local-name()='" + m[1].toLowerCase() +
-             "' or local-name()='" + m[1].toUpperCase() + "']";
-    },
-    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
-    id:           "[@id='#{1}']",
-    attrPresence: "[@#{1}]",
-    attr: function(m) {
-      m[3] = m[5] || m[6];
-      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
-    },
-    pseudo: function(m) {
-      var h = Selector.xpath.pseudos[m[1]];
-      if (!h) return '';
-      if (Object.isFunction(h)) return h(m);
-      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
-    },
-    operators: {
-      '=':  "[@#{1}='#{3}']",
-      '!=': "[@#{1}!='#{3}']",
-      '^=': "[starts-with(@#{1}, '#{3}')]",
-      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
-      '*=': "[contains(@#{1}, '#{3}')]",
-      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
-      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
-    },
-    pseudos: {
-      'first-child': '[not(preceding-sibling::*)]',
-      'last-child':  '[not(following-sibling::*)]',
-      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
-      'empty':       "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
-      'checked':     "[@checked]",
-      'disabled':    "[@disabled]",
-      'enabled':     "[not(@disabled)]",
-      'not': function(m) {
-        var e = m[6], p = Selector.patterns,
-            x = Selector.xpath, le, m, v;
-
-        var exclusion = [];
-        while (e && le != e && (/\S/).test(e)) {
-          le = e;
-          for (var i in p) {
-            if (m = e.match(p[i])) {
-              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
-              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
-              e = e.replace(m[0], '');
-              break;
-            }
-          }
-        }
-        return "[not(" + exclusion.join(" and ") + ")]";
-      },
-      'nth-child':      function(m) {
-        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
-      },
-      'nth-last-child': function(m) {
-        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
-      },
-      'nth-of-type':    function(m) {
-        return Selector.xpath.pseudos.nth("position() ", m);
-      },
-      'nth-last-of-type': function(m) {
-        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
-      },
-      'first-of-type':  function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
-      },
-      'last-of-type':   function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
-      },
-      'only-of-type':   function(m) {
-        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
-      },
-      nth: function(fragment, m) {
-        var mm, formula = m[6], predicate;
-        if (formula == 'even') formula = '2n+0';
-        if (formula == 'odd')  formula = '2n+1';
-        if (mm = formula.match(/^(\d+)$/)) // digit only
-          return '[' + fragment + "= " + mm[1] + ']';
-        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-          if (mm[1] == "-") mm[1] = -1;
-          var a = mm[1] ? Number(mm[1]) : 1;
-          var b = mm[2] ? Number(mm[2]) : 0;
-          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
-          "((#{fragment} - #{b}) div #{a} >= 0)]";
-          return new Template(predicate).evaluate({
-            fragment: fragment, a: a, b: b });
-        }
-      }
-    }
-  },
-
-  criteria: {
-    tagName:      'n = h.tagName(n, r, "#{1}", c);   c = false;',
-    className:    'n = h.className(n, r, "#{1}", c); c = false;',
-    id:           'n = h.id(n, r, "#{1}", c);        c = false;',
-    attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
-    attr: function(m) {
-      m[3] = (m[5] || m[6]);
-      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
-    },
-    pseudo: function(m) {
-      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
-      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
-    },
-    descendant:   'c = "descendant";',
-    child:        'c = "child";',
-    adjacent:     'c = "adjacent";',
-    laterSibling: 'c = "laterSibling";'
-  },
-
-  patterns: {
-    // combinators must be listed first
-    // (and descendant needs to be last combinator)
-    laterSibling: /^\s*~\s*/,
-    child:        /^\s*>\s*/,
-    adjacent:     /^\s*\+\s*/,
-    descendant:   /^\s/,
-
-    // selectors follow
-    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
-    id:           /^#([\w\-\*]+)(\b|$)/,
-    className:    /^\.([\w\-\*]+)(\b|$)/,
-    pseudo:       /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/,
-    attrPresence: /^\[([\w]+)\]/,
-    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
-  },
-
-  // for Selector.match and Element#match
-  assertions: {
-    tagName: function(element, matches) {
-      return matches[1].toUpperCase() == element.tagName.toUpperCase();
-    },
-
-    className: function(element, matches) {
-      return Element.hasClassName(element, matches[1]);
-    },
-
-    id: function(element, matches) {
-      return element.id === matches[1];
-    },
-
-    attrPresence: function(element, matches) {
-      return Element.hasAttribute(element, matches[1]);
-    },
-
-    attr: function(element, matches) {
-      var nodeValue = Element.readAttribute(element, matches[1]);
-      return Selector.operators[matches[2]](nodeValue, matches[3]);
-    }
-  },
-
-  handlers: {
-    // UTILITY FUNCTIONS
-    // joins two collections
-    concat: function(a, b) {
-      for (var i = 0, node; node = b[i]; i++)
-        a.push(node);
-      return a;
-    },
-
-    // marks an array of nodes for counting
-    mark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._counted = true;
-      return nodes;
-    },
-
-    unmark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._counted = undefined;
-      return nodes;
-    },
-
-    // mark each child node with its position (for nth calls)
-    // "ofType" flag indicates whether we're indexing for nth-of-type
-    // rather than nth-child
-    index: function(parentNode, reverse, ofType) {
-      parentNode._counted = true;
-      if (reverse) {
-        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
-          var node = nodes[i];
-          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
-        }
-      } else {
-        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
-          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
-      }
-    },
-
-    // filters out duplicates and extends all nodes
-    unique: function(nodes) {
-      if (nodes.length == 0) return nodes;
-      var results = [], n;
-      for (var i = 0, l = nodes.length; i < l; i++)
-        if (!(n = nodes[i])._counted) {
-          n._counted = true;
-          results.push(Element.extend(n));
-        }
-      return Selector.handlers.unmark(results);
-    },
-
-    // COMBINATOR FUNCTIONS
-    descendant: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, node.getElementsByTagName('*'));
-      return results;
-    },
-
-    child: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
-          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
-      }
-      return results;
-    },
-
-    adjacent: function(nodes) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        var next = this.nextElementSibling(node);
-        if (next) results.push(next);
-      }
-      return results;
-    },
-
-    laterSibling: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, Element.nextSiblings(node));
-      return results;
-    },
-
-    nextElementSibling: function(node) {
-      while (node = node.nextSibling)
-	      if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    previousElementSibling: function(node) {
-      while (node = node.previousSibling)
-        if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    // TOKEN FUNCTIONS
-    tagName: function(nodes, root, tagName, combinator) {
-      tagName = tagName.toUpperCase();
-      var results = [], h = Selector.handlers;
-      if (nodes) {
-        if (combinator) {
-          // fastlane for ordinary descendant combinators
-          if (combinator == "descendant") {
-            for (var i = 0, node; node = nodes[i]; i++)
-              h.concat(results, node.getElementsByTagName(tagName));
-            return results;
-          } else nodes = this[combinator](nodes);
-          if (tagName == "*") return nodes;
-        }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.tagName.toUpperCase() == tagName) results.push(node);
-        return results;
-      } else return root.getElementsByTagName(tagName);
-    },
-
-    id: function(nodes, root, id, combinator) {
-      var targetNode = $(id), h = Selector.handlers;
-      if (!targetNode) return [];
-      if (!nodes && root == document) return [targetNode];
-      if (nodes) {
-        if (combinator) {
-          if (combinator == 'child') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (targetNode.parentNode == node) return [targetNode];
-          } else if (combinator == 'descendant') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Element.descendantOf(targetNode, node)) return [targetNode];
-          } else if (combinator == 'adjacent') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Selector.handlers.previousElementSibling(targetNode) == node)
-                return [targetNode];
-          } else nodes = h[combinator](nodes);
-        }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node == targetNode) return [targetNode];
-        return [];
-      }
-      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
-    },
-
-    className: function(nodes, root, className, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      return Selector.handlers.byClassName(nodes, root, className);
-    },
-
-    byClassName: function(nodes, root, className) {
-      if (!nodes) nodes = Selector.handlers.descendant([root]);
-      var needle = ' ' + className + ' ';
-      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
-        nodeClassName = node.className;
-        if (nodeClassName.length == 0) continue;
-        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
-          results.push(node);
-      }
-      return results;
-    },
-
-    attrPresence: function(nodes, root, attr) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      var results = [];
-      for (var i = 0, node; node = nodes[i]; i++)
-        if (Element.hasAttribute(node, attr)) results.push(node);
-      return results;
-    },
-
-    attr: function(nodes, root, attr, value, operator) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      var handler = Selector.operators[operator], results = [];
-      for (var i = 0, node; node = nodes[i]; i++) {
-        var nodeValue = Element.readAttribute(node, attr);
-        if (nodeValue === null) continue;
-        if (handler(nodeValue, value)) results.push(node);
-      }
-      return results;
-    },
-
-    pseudo: function(nodes, name, value, root, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      return Selector.pseudos[name](nodes, value, root);
-    }
-  },
-
-  pseudos: {
-    'first-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.previousElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'last-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.nextElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'only-child': function(nodes, value, root) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
-          results.push(node);
-      return results;
-    },
-    'nth-child':        function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root);
-    },
-    'nth-last-child':   function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true);
-    },
-    'nth-of-type':      function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, false, true);
-    },
-    'nth-last-of-type': function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true, true);
-    },
-    'first-of-type':    function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, false, true);
-    },
-    'last-of-type':     function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, true, true);
-    },
-    'only-of-type':     function(nodes, formula, root) {
-      var p = Selector.pseudos;
-      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
-    },
-
-    // handles the an+b logic
-    getIndices: function(a, b, total) {
-      if (a == 0) return b > 0 ? [b] : [];
-      return $R(1, total).inject([], function(memo, i) {
-        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
-        return memo;
-      });
-    },
-
-    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
-    nth: function(nodes, formula, root, reverse, ofType) {
-      if (nodes.length == 0) return [];
-      if (formula == 'even') formula = '2n+0';
-      if (formula == 'odd')  formula = '2n+1';
-      var h = Selector.handlers, results = [], indexed = [], m;
-      h.mark(nodes);
-      for (var i = 0, node; node = nodes[i]; i++) {
-        if (!node.parentNode._counted) {
-          h.index(node.parentNode, reverse, ofType);
-          indexed.push(node.parentNode);
-        }
-      }
-      if (formula.match(/^\d+$/)) { // just a number
-        formula = Number(formula);
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.nodeIndex == formula) results.push(node);
-      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-        if (m[1] == "-") m[1] = -1;
-        var a = m[1] ? Number(m[1]) : 1;
-        var b = m[2] ? Number(m[2]) : 0;
-        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
-        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
-          for (var j = 0; j < l; j++)
-            if (node.nodeIndex == indices[j]) results.push(node);
-        }
-      }
-      h.unmark(nodes);
-      h.unmark(indexed);
-      return results;
-    },
-
-    'empty': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        // IE treats comments as element nodes
-        if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
-        results.push(node);
-      }
-      return results;
-    },
-
-    'not': function(nodes, selector, root) {
-      var h = Selector.handlers, selectorType, m;
-      var exclusions = new Selector(selector).findElements(root);
-      h.mark(exclusions);
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node._counted) results.push(node);
-      h.unmark(exclusions);
-      return results;
-    },
-
-    'enabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node.disabled) results.push(node);
-      return results;
-    },
-
-    'disabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.disabled) results.push(node);
-      return results;
-    },
-
-    'checked': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.checked) results.push(node);
-      return results;
-    }
-  },
-
-  operators: {
-    '=':  function(nv, v) { return nv == v; },
-    '!=': function(nv, v) { return nv != v; },
-    '^=': function(nv, v) { return nv.startsWith(v); },
-    '$=': function(nv, v) { return nv.endsWith(v); },
-    '*=': function(nv, v) { return nv.include(v); },
-    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
-    '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
-  },
-
-  matchElements: function(elements, expression) {
-    var matches = new Selector(expression).findElements(), h = Selector.handlers;
-    h.mark(matches);
-    for (var i = 0, results = [], element; element = elements[i]; i++)
-      if (element._counted) results.push(element);
-    h.unmark(matches);
-    return results;
-  },
-
-  findElement: function(elements, expression, index) {
-    if (Object.isNumber(expression)) {
-      index = expression; expression = false;
-    }
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    var exprs = expressions.join(','), expressions = [];
-    exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
-      expressions.push(m[1].strip());
-    });
-    var results = [], h = Selector.handlers;
-    for (var i = 0, l = expressions.length, selector; i < l; i++) {
-      selector = new Selector(expressions[i].strip());
-      h.concat(results, selector.findElements(element));
-    }
-    return (l > 1) ? h.unique(results) : results;
-  }
-});
-
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
-  reset: function(form) {
-    $(form).reset();
-    return form;
-  },
-
-  serializeElements: function(elements, options) {
-    if (typeof options != 'object') options = { hash: !!options };
-    else if (options.hash === undefined) options.hash = true;
-    var key, value, submitted = false, submit = options.submit;
-
-    var data = elements.inject({ }, function(result, element) {
-      if (!element.disabled && element.name) {
-        key = element.name; value = $(element).getValue();
-        if (value != null && (element.type != 'submit' || (!submitted &&
-            submit !== false && (!submit || key == submit) && (submitted = true)))) {
-          if (key in result) {
-            // a key is already present; construct an array of values
-            if (!Object.isArray(result[key])) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
-        }
-      }
-      return result;
-    });
-
-    return options.hash ? data : Object.toQueryString(data);
-  }
-};
-
-Form.Methods = {
-  serialize: function(form, options) {
-    return Form.serializeElements(Form.getElements(form), options);
-  },
-
-  getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name) return $A(inputs).map(Element.extend);
-
-    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) || (name && input.name != name))
-        continue;
-      matchingInputs.push(Element.extend(input));
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    form = $(form);
-    Form.getElements(form).invoke('disable');
-    return form;
-  },
-
-  enable: function(form) {
-    form = $(form);
-    Form.getElements(form).invoke('enable');
-    return form;
-  },
-
-  findFirstElement: function(form) {
-    var elements = $(form).getElements().findAll(function(element) {
-      return 'hidden' != element.type && !element.disabled;
-    });
-    var firstByIndex = elements.findAll(function(element) {
-      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
-    }).sortBy(function(element) { return element.tabIndex }).first();
-
-    return firstByIndex ? firstByIndex : elements.find(function(element) {
-      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    form = $(form);
-    form.findFirstElement().activate();
-    return form;
-  },
-
-  request: function(form, options) {
-    form = $(form), options = Object.clone(options || { });
-
-    var params = options.parameters, action = form.readAttribute('action') || '';
-    if (action.blank()) action = window.location.href;
-    options.parameters = form.serialize(true);
-
-    if (params) {
-      if (Object.isString(params)) params = params.toQueryParams();
-      Object.extend(options.parameters, params);
-    }
-
-    if (form.hasAttribute('method') && !options.method)
-      options.method = form.method;
-
-    return new Ajax.Request(action, options);
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
-  focus: function(element) {
-    $(element).focus();
-    return element;
-  },
-
-  select: function(element) {
-    $(element).select();
-    return element;
-  }
-};
-
-Form.Element.Methods = {
-  serialize: function(element) {
-    element = $(element);
-    if (!element.disabled && element.name) {
-      var value = element.getValue();
-      if (value != undefined) {
-        var pair = { };
-        pair[element.name] = value;
-        return Object.toQueryString(pair);
-      }
-    }
-    return '';
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    return Form.Element.Serializers[method](element);
-  },
-
-  setValue: function(element, value) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    Form.Element.Serializers[method](element, value);
-    return element;
-  },
-
-  clear: function(element) {
-    $(element).value = '';
-    return element;
-  },
-
-  present: function(element) {
-    return $(element).value != '';
-  },
-
-  activate: function(element) {
-    element = $(element);
-    try {
-      element.focus();
-      if (element.select && (element.tagName.toLowerCase() != 'input' ||
-          !['button', 'reset', 'submit'].include(element.type)))
-        element.select();
-    } catch (e) { }
-    return element;
-  },
-
-  disable: function(element) {
-    element = $(element);
-    element.blur();
-    element.disabled = true;
-    return element;
-  },
-
-  enable: function(element) {
-    element = $(element);
-    element.disabled = false;
-    return element;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Field = Form.Element;
-var $F = Form.Element.Methods.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
-  input: function(element, value) {
-    switch (element.type.toLowerCase()) {
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element, value);
-      default:
-        return Form.Element.Serializers.textarea(element, value);
-    }
-  },
-
-  inputSelector: function(element, value) {
-    if (value === undefined) return element.checked ? element.value : null;
-    else element.checked = !!value;
-  },
-
-  textarea: function(element, value) {
-    if (value === undefined) return element.value;
-    else element.value = value;
-  },
-
-  select: function(element, index) {
-    if (index === undefined)
-      return this[element.type == 'select-one' ?
-        'selectOne' : 'selectMany'](element);
-    else {
-      var opt, value, single = !Object.isArray(index);
-      for (var i = 0, length = element.length; i < length; i++) {
-        opt = element.options[i];
-        value = this.optionValue(opt);
-        if (single) {
-          if (value == index) {
-            opt.selected = true;
-            return;
-          }
-        }
-        else opt.selected = index.include(value);
-      }
-    }
-  },
-
-  selectOne: function(element) {
-    var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
-    var values, length = element.length;
-    if (!length) return null;
-
-    for (var i = 0, values = []; i < length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
-    }
-    return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
-  initialize: function($super, element, frequency, callback) {
-    $super(callback, frequency);
-    this.element   = $(element);
-    this.lastValue = this.getValue();
-  },
-
-  execute: function() {
-    var value = this.getValue();
-    if (Object.isString(this.lastValue) && Object.isString(value) ?
-        this.lastValue != value : String(this.lastValue) != String(value)) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-});
-
-Form.Element.Observer = Class.create(Abstract.TimedObserver, {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create(Abstract.TimedObserver, {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = Class.create({
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    Form.getElements(this.element).each(this.registerCallback, this);
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        default:
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-});
-
-Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create(Abstract.EventObserver, {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) var Event = { };
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-  KEY_INSERT:   45,
-
-  cache: { },
-
-  relatedTarget: function(event) {
-    var element;
-    switch(event.type) {
-      case 'mouseover': element = event.fromElement; break;
-      case 'mouseout':  element = event.toElement;   break;
-      default: return null;
-    }
-    return Element.extend(element);
-  }
-});
-
-Event.Methods = (function() {
-  var isButton;
-
-  if (Prototype.Browser.IE) {
-    var buttonMap = { 0: 1, 1: 4, 2: 2 };
-    isButton = function(event, code) {
-      return event.button == buttonMap[code];
-    };
-
-  } else if (Prototype.Browser.WebKit) {
-    isButton = function(event, code) {
-      switch (code) {
-        case 0: return event.which == 1 && !event.metaKey;
-        case 1: return event.which == 1 && event.metaKey;
-        default: return false;
-      }
-    };
-
-  } else {
-    isButton = function(event, code) {
-      return event.which ? (event.which === code + 1) : (event.button === code);
-    };
-  }
-
-  return {
-    isLeftClick:   function(event) { return isButton(event, 0) },
-    isMiddleClick: function(event) { return isButton(event, 1) },
-    isRightClick:  function(event) { return isButton(event, 2) },
-
-    element: function(event) {
-      var node = Event.extend(event).target;
-      return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
-    },
-
-    findElement: function(event, expression) {
-      var element = Event.element(event);
-      return element.match(expression) ? element : element.up(expression);
-    },
-
-    pointer: function(event) {
-      return {
-        x: event.pageX || (event.clientX +
-          (document.documentElement.scrollLeft || document.body.scrollLeft)),
-        y: event.pageY || (event.clientY +
-          (document.documentElement.scrollTop || document.body.scrollTop))
-      };
-    },
-
-    pointerX: function(event) { return Event.pointer(event).x },
-    pointerY: function(event) { return Event.pointer(event).y },
-
-    stop: function(event) {
-      Event.extend(event);
-      event.preventDefault();
-      event.stopPropagation();
-      event.stopped = true;
-    }
-  };
-})();
-
-Event.extend = (function() {
-  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
-    m[name] = Event.Methods[name].methodize();
-    return m;
-  });
-
-  if (Prototype.Browser.IE) {
-    Object.extend(methods, {
-      stopPropagation: function() { this.cancelBubble = true },
-      preventDefault:  function() { this.returnValue = false },
-      inspect: function() { return "[object Event]" }
-    });
-
-    return function(event) {
-      if (!event) return false;
-      if (event._extendedByPrototype) return event;
-
-      event._extendedByPrototype = Prototype.emptyFunction;
-      var pointer = Event.pointer(event);
-      Object.extend(event, {
-        target: event.srcElement,
-        relatedTarget: Event.relatedTarget(event),
-        pageX:  pointer.x,
-        pageY:  pointer.y
-      });
-      return Object.extend(event, methods);
-    };
-
-  } else {
-    Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
-    Object.extend(Event.prototype, methods);
-    return Prototype.K;
-  }
-})();
-
-Object.extend(Event, (function() {
-  var cache = Event.cache;
-
-  function getEventID(element) {
-    if (element._eventID) return element._eventID;
-    arguments.callee.id = arguments.callee.id || 1;
-    return element._eventID = ++arguments.callee.id;
-  }
-
-  function getDOMEventName(eventName) {
-    if (eventName && eventName.include(':')) return "dataavailable";
-    return eventName;
-  }
-
-  function getCacheForID(id) {
-    return cache[id] = cache[id] || { };
-  }
-
-  function getWrappersForEventName(id, eventName) {
-    var c = getCacheForID(id);
-    return c[eventName] = c[eventName] || [];
-  }
-
-  function createWrapper(element, eventName, handler) {
-    var id = getEventID(element);
-    var c = getWrappersForEventName(id, eventName);
-    if (c.pluck("handler").include(handler)) return false;
-
-    var wrapper = function(event) {
-      if (!Event || !Event.extend ||
-        (event.eventName && event.eventName != eventName))
-          return false;
-
-      Event.extend(event);
-      handler.call(element, event)
-    };
-
-    wrapper.handler = handler;
-    c.push(wrapper);
-    return wrapper;
-  }
-
-  function findWrapper(id, eventName, handler) {
-    var c = getWrappersForEventName(id, eventName);
-    return c.find(function(wrapper) { return wrapper.handler == handler });
-  }
-
-  function destroyWrapper(id, eventName, handler) {
-    var c = getCacheForID(id);
-    if (!c[eventName]) return false;
-    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
-  }
-
-  function destroyCache() {
-    for (var id in cache)
-      for (var eventName in cache[id])
-        cache[id][eventName] = null;
-  }
-
-  if (window.attachEvent) {
-    window.attachEvent("onunload", destroyCache);
-  }
-
-  return {
-    observe: function(element, eventName, handler) {
-      element = $(element);
-      var name = getDOMEventName(eventName);
-
-      var wrapper = createWrapper(element, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.addEventListener) {
-        element.addEventListener(name, wrapper, false);
-      } else {
-        element.attachEvent("on" + name, wrapper);
-      }
-
-      return element;
-    },
-
-    stopObserving: function(element, eventName, handler) {
-      element = $(element);
-      var id = getEventID(element), name = getDOMEventName(eventName);
-
-      if (!handler && eventName) {
-        getWrappersForEventName(id, eventName).each(function(wrapper) {
-          element.stopObserving(eventName, wrapper.handler);
-        });
-        return element;
-
-      } else if (!eventName) {
-        Object.keys(getCacheForID(id)).each(function(eventName) {
-          element.stopObserving(eventName);
-        });
-        return element;
-      }
-
-      var wrapper = findWrapper(id, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.removeEventListener) {
-        element.removeEventListener(name, wrapper, false);
-      } else {
-        element.detachEvent("on" + name, wrapper);
-      }
-
-      destroyWrapper(id, eventName, handler);
-
-      return element;
-    },
-
-    fire: function(element, eventName, memo) {
-      element = $(element);
-      if (element == document && document.createEvent && !element.dispatchEvent)
-        element = document.documentElement;
-
-      if (document.createEvent) {
-        var event = document.createEvent("HTMLEvents");
-        event.initEvent("dataavailable", true, true);
-      } else {
-        var event = document.createEventObject();
-        event.eventType = "ondataavailable";
-      }
-
-      event.eventName = eventName;
-      event.memo = memo || { };
-
-      if (document.createEvent) {
-        element.dispatchEvent(event);
-      } else {
-        element.fireEvent(event.eventType, event);
-      }
-
-      return event;
-    }
-  };
-})());
-
-Object.extend(Event, Event.Methods);
-
-Element.addMethods({
-  fire:          Event.fire,
-  observe:       Event.observe,
-  stopObserving: Event.stopObserving
-});
-
-Object.extend(document, {
-  fire:          Element.Methods.fire.methodize(),
-  observe:       Element.Methods.observe.methodize(),
-  stopObserving: Element.Methods.stopObserving.methodize()
-});
-
-(function() {
-  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
-     Matthias Miller, Dean Edwards and John Resig. */
-
-  var timer, fired = false;
-
-  function fireContentLoadedEvent() {
-    if (fired) return;
-    if (timer) window.clearInterval(timer);
-    document.fire("dom:loaded");
-    fired = true;
-  }
-
-  if (document.addEventListener) {
-    if (Prototype.Browser.WebKit) {
-      timer = window.setInterval(function() {
-        if (/loaded|complete/.test(document.readyState))
-          fireContentLoadedEvent();
-      }, 0);
-
-      Event.observe(window, "load", fireContentLoadedEvent);
-
-    } else {
-      document.addEventListener("DOMContentLoaded",
-        fireContentLoadedEvent, false);
-    }
-
-  } else {
-    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
-    $("__onDOMContentLoaded").onreadystatechange = function() {
-      if (this.readyState == "complete") {
-        this.onreadystatechange = null;
-        fireContentLoadedEvent();
-      }
-    };
-  }
-})();
-/*------------------------------- DEPRECATED -------------------------------*/
-
-Hash.toQueryString = Object.toQueryString;
-
-var Toggle = { display: Element.toggle };
-
-Element.Methods.childOf = Element.Methods.descendantOf;
-
-var Insertion = {
-  Before: function(element, content) {
-    return Element.insert(element, {before:content});
-  },
-
-  Top: function(element, content) {
-    return Element.insert(element, {top:content});
-  },
-
-  Bottom: function(element, content) {
-    return Element.insert(element, {bottom:content});
-  },
-
-  After: function(element, content) {
-    return Element.insert(element, {after:content});
-  }
-};
-
-var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
-
-// This should be moved to script.aculo.us; notice the deprecated methods
-// further below, that map to the newer Element methods.
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = Element.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = Element.cumulativeScrollOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = Element.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  // Deprecation layer -- use newer Element methods now (1.5.2).
-
-  cumulativeOffset: Element.Methods.cumulativeOffset,
-
-  positionedOffset: Element.Methods.positionedOffset,
-
-  absolutize: function(element) {
-    Position.prepare();
-    return Element.absolutize(element);
-  },
-
-  relativize: function(element) {
-    Position.prepare();
-    return Element.relativize(element);
-  },
-
-  realOffset: Element.Methods.cumulativeScrollOffset,
-
-  offsetParent: Element.Methods.getOffsetParent,
-
-  page: Element.Methods.viewportOffset,
-
-  clone: function(source, target, options) {
-    options = options || { };
-    return Element.clonePosition(target, source, options);
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
-  function iter(name) {
-    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
-  }
-
-  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
-  function(element, className) {
-    className = className.toString().strip();
-    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
-    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
-  } : function(element, className) {
-    className = className.toString().strip();
-    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
-    if (!classNames && !className) return elements;
-
-    var nodes = $(element).getElementsByTagName('*');
-    className = ' ' + className + ' ';
-
-    for (var i = 0, child, cn; child = nodes[i]; i++) {
-      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
-          (classNames && classNames.all(function(name) {
-            return !name.toString().blank() && cn.include(' ' + name + ' ');
-          }))))
-        elements.push(Element.extend(child));
-    }
-    return elements;
-  };
-
-  return function(className, parentElement) {
-    return $(parentElement || document.body).getElementsByClassName(className);
-  };
-}(Element.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set($A(this).concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set($A(this).without(classNameToRemove).join(' '));
-  },
-
-  toString: function() {
-    return $A(this).join(' ');
-  }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-
-/*--------------------------------------------------------------------------*/
-
-Element.addMethods();
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/extconf.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/extconf.rb
deleted file mode 100644
index 88aaf40..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/extconf.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'mkmf'
-require 'rbconfig'
-
-if CONFIG['CC'] =~ /gcc/
-  $CFLAGS += ' -Wall'
-  #$CFLAGS += ' -O0 -ggdb'
-end
-
-create_makefile 'generator'
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/generator.c b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/generator.c
deleted file mode 100644
index e5333b7..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/generator.c
+++ /dev/null
@@ -1,875 +0,0 @@
-#include <string.h>
-#include "ruby.h"
-#include "st.h"
-#include "unicode.h"
-#include <math.h>
-
-#define check_max_nesting(state, depth) do {                                   \
-    long current_nesting = 1 + depth;                                          \
-    if (state->max_nesting != 0 && current_nesting > state->max_nesting)       \
-        rb_raise(eNestingError, "nesting of %ld is too deep", current_nesting); \
-} while (0);
-
-static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject,
-             mHash, mArray, mInteger, mFloat, mString, mString_Extend,
-             mTrueClass, mFalseClass, mNilClass, eGeneratorError,
-             eCircularDatastructure, eNestingError;
-
-static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before,
-          i_object_nl, i_array_nl, i_check_circular, i_max_nesting,
-          i_allow_nan, i_pack, i_unpack, i_create_id, i_extend;
-
-typedef struct JSON_Generator_StateStruct {
-    VALUE indent;
-    VALUE space;
-    VALUE space_before;
-    VALUE object_nl;
-    VALUE array_nl;
-    int check_circular;
-    VALUE seen;
-    VALUE memo;
-    VALUE depth;
-    long max_nesting;
-    int flag;
-    int allow_nan;
-} JSON_Generator_State;
-
-#define GET_STATE(self)                       \
-    JSON_Generator_State *state;              \
-    Data_Get_Struct(self, JSON_Generator_State, state);
-
-/* 
- * Document-module: JSON::Ext::Generator
- *
- * This is the JSON generator implemented as a C extension. It can be
- * configured to be used by setting
- *
- *  JSON.generator = JSON::Ext::Generator
- *
- * with the method generator= in JSON.
- *
- */
-
-static int hash_to_json_state_i(VALUE key, VALUE value, VALUE Vstate)
-{
-    VALUE json, buf, Vdepth;
-    GET_STATE(Vstate);
-    buf = state->memo;
-    Vdepth = state->depth;
-
-    if (key == Qundef) return ST_CONTINUE;
-    if (state->flag) {
-        state->flag = 0;
-        rb_str_buf_cat2(buf, ",");
-        if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(buf, state->object_nl);
-    }
-    if (RSTRING_LEN(state->object_nl)) {
-        rb_str_buf_append(buf, rb_str_times(state->indent, Vdepth));
-    }
-    json = rb_funcall(rb_funcall(key, i_to_s, 0), i_to_json, 2, Vstate, Vdepth);
-    Check_Type(json, T_STRING);
-    rb_str_buf_append(buf, json);
-    OBJ_INFECT(buf, json);
-    if (RSTRING_LEN(state->space_before)) {
-        rb_str_buf_append(buf, state->space_before);
-    }
-    rb_str_buf_cat2(buf, ":");
-    if (RSTRING_LEN(state->space)) rb_str_buf_append(buf, state->space);
-    json = rb_funcall(value, i_to_json, 2, Vstate, Vdepth);
-    Check_Type(json, T_STRING);
-    state->flag = 1;
-    rb_str_buf_append(buf, json);
-    OBJ_INFECT(buf, json);
-    state->depth = Vdepth;
-    state->memo = buf;
-    return ST_CONTINUE;
-}
-
-inline static VALUE mHash_json_transfrom(VALUE self, VALUE Vstate, VALUE Vdepth) {
-    long depth, len = RHASH(self)->tbl->num_entries;
-    VALUE result;
-    GET_STATE(Vstate);
-
-    depth = 1 + FIX2LONG(Vdepth);
-    result = rb_str_buf_new(len);
-    state->memo = result;
-    state->depth = LONG2FIX(depth);
-    state->flag = 0;
-    rb_str_buf_cat2(result, "{");
-    if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(result, state->object_nl);
-    rb_hash_foreach(self, hash_to_json_state_i, Vstate);
-    if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(result, state->object_nl);
-    if (RSTRING_LEN(state->object_nl)) {
-        rb_str_buf_append(result, rb_str_times(state->indent, Vdepth));
-    }
-    rb_str_buf_cat2(result, "}");
-    return result;
-}
-
-static int hash_to_json_i(VALUE key, VALUE value, VALUE buf)
-{
-    VALUE tmp;
-
-    if (key == Qundef) return ST_CONTINUE;
-    if (RSTRING_LEN(buf) > 1) rb_str_buf_cat2(buf, ",");
-    tmp = rb_funcall(rb_funcall(key, i_to_s, 0), i_to_json, 0);
-    Check_Type(tmp, T_STRING);
-    rb_str_buf_append(buf, tmp);
-    OBJ_INFECT(buf, tmp);
-    rb_str_buf_cat2(buf, ":");
-    tmp = rb_funcall(value, i_to_json, 0);
-    Check_Type(tmp, T_STRING);
-    rb_str_buf_append(buf, tmp);
-    OBJ_INFECT(buf, tmp);
-
-    return ST_CONTINUE;
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- * Returns a JSON string containing a JSON object, that is unparsed from
- * this Hash instance.
- * _state_ is a JSON::State object, that can also be used to configure the
- * produced JSON string output further.
- * _depth_ is used to find out nesting depth, to indent accordingly.
- */
-static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self)
-{
-    VALUE Vstate, Vdepth, result;
-    long depth;
-
-    rb_scan_args(argc, argv, "02", &Vstate, &Vdepth);
-    depth = NIL_P(Vdepth) ? 0 : FIX2LONG(Vdepth);
-    if (NIL_P(Vstate)) {
-        long len = RHASH(self)->tbl->num_entries;
-        result = rb_str_buf_new(len);
-        rb_str_buf_cat2(result, "{");
-        rb_hash_foreach(self, hash_to_json_i, result);
-        rb_str_buf_cat2(result, "}");
-    } else {
-        GET_STATE(Vstate);
-        check_max_nesting(state, depth);
-        if (state->check_circular) {
-            VALUE self_id = rb_obj_id(self);
-            if (RTEST(rb_hash_aref(state->seen, self_id))) {
-                rb_raise(eCircularDatastructure,
-                        "circular data structures not supported!");
-            }
-            rb_hash_aset(state->seen, self_id, Qtrue);
-            result = mHash_json_transfrom(self, Vstate, LONG2FIX(depth));
-            rb_hash_delete(state->seen, self_id);
-        } else {
-            result = mHash_json_transfrom(self, Vstate, LONG2FIX(depth));
-        }
-    }
-    OBJ_INFECT(result, self);
-    return result;
-}
-
-inline static VALUE mArray_json_transfrom(VALUE self, VALUE Vstate, VALUE Vdepth) {
-    long i, len = RARRAY_LEN(self);
-    VALUE shift, result;
-    long depth = NIL_P(Vdepth) ? 0 : FIX2LONG(Vdepth);
-    VALUE delim = rb_str_new2(",");
-    GET_STATE(Vstate);
-
-    check_max_nesting(state, depth);
-    if (state->check_circular) {
-        VALUE self_id = rb_obj_id(self);
-        rb_hash_aset(state->seen, self_id, Qtrue);
-        result = rb_str_buf_new(len);
-        if (RSTRING_LEN(state->array_nl)) rb_str_append(delim, state->array_nl);
-        shift = rb_str_times(state->indent, LONG2FIX(depth + 1));
-
-        rb_str_buf_cat2(result, "[");
-        OBJ_INFECT(result, self);
-        rb_str_buf_append(result, state->array_nl);
-        for (i = 0;  i < len; i++) {
-            VALUE element = RARRAY_PTR(self)[i];
-            if (RTEST(rb_hash_aref(state->seen, rb_obj_id(element)))) {
-                rb_raise(eCircularDatastructure,
-                        "circular data structures not supported!");
-            }
-            OBJ_INFECT(result, element);
-            if (i > 0) rb_str_buf_append(result, delim);
-            rb_str_buf_append(result, shift);
-            element = rb_funcall(element, i_to_json, 2, Vstate, LONG2FIX(depth + 1));
-            Check_Type(element, T_STRING);
-            rb_str_buf_append(result, element);
-        }
-        if (RSTRING_LEN(state->array_nl)) {
-            rb_str_buf_append(result, state->array_nl);
-            rb_str_buf_append(result, rb_str_times(state->indent, LONG2FIX(depth)));
-        }
-        rb_str_buf_cat2(result, "]");
-        rb_hash_delete(state->seen, self_id);
-    } else {
-        result = rb_str_buf_new(len);
-        OBJ_INFECT(result, self);
-        if (RSTRING_LEN(state->array_nl)) rb_str_append(delim, state->array_nl);
-        shift = rb_str_times(state->indent, LONG2FIX(depth + 1));
-
-        rb_str_buf_cat2(result, "[");
-        rb_str_buf_append(result, state->array_nl);
-        for (i = 0;  i < len; i++) {
-            VALUE element = RARRAY_PTR(self)[i];
-            OBJ_INFECT(result, element);
-            if (i > 0) rb_str_buf_append(result, delim);
-            rb_str_buf_append(result, shift);
-            element = rb_funcall(element, i_to_json, 2, Vstate, LONG2FIX(depth + 1));
-            Check_Type(element, T_STRING);
-            rb_str_buf_append(result, element);
-        }
-        rb_str_buf_append(result, state->array_nl);
-        if (RSTRING_LEN(state->array_nl)) {
-            rb_str_buf_append(result, rb_str_times(state->indent, LONG2FIX(depth)));
-        }
-        rb_str_buf_cat2(result, "]");
-    }
-    return result;
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- * Returns a JSON string containing a JSON array, that is unparsed from
- * this Array instance.
- * _state_ is a JSON::State object, that can also be used to configure the
- * produced JSON string output further.
- * _depth_ is used to find out nesting depth, to indent accordingly.
- */
-static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self) {
-    VALUE Vstate, Vdepth, result;
-
-    rb_scan_args(argc, argv, "02", &Vstate, &Vdepth);
-    if (NIL_P(Vstate)) {
-        long i, len = RARRAY_LEN(self);
-        result = rb_str_buf_new(2 + 2 * len);
-        rb_str_buf_cat2(result, "[");
-        OBJ_INFECT(result, self);
-        for (i = 0;  i < len; i++) {
-            VALUE element = RARRAY_PTR(self)[i];
-            OBJ_INFECT(result, element);
-            if (i > 0) rb_str_buf_cat2(result, ",");
-            element = rb_funcall(element, i_to_json, 0);
-            Check_Type(element, T_STRING);
-            rb_str_buf_append(result, element);
-        }
-        rb_str_buf_cat2(result, "]");
-    } else {
-        result = mArray_json_transfrom(self, Vstate, Vdepth);
-    }
-    OBJ_INFECT(result, self);
-    return result;
-}
-
-/*
- * call-seq: to_json(*)
- *
- * Returns a JSON string representation for this Integer number.
- */
-static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self)
-{
-    return rb_funcall(self, i_to_s, 0);
-}
-
-/*
- * call-seq: to_json(*)
- *
- * Returns a JSON string representation for this Float number.
- */
-static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self)
-{
-    JSON_Generator_State *state = NULL;
-    VALUE Vstate, rest, tmp;
-    double value = RFLOAT(self)->value;
-    rb_scan_args(argc, argv, "01*", &Vstate, &rest);
-    if (!NIL_P(Vstate)) Data_Get_Struct(Vstate, JSON_Generator_State, state);
-    if (isinf(value)) {
-        if (!state || state->allow_nan) {
-            return rb_funcall(self, i_to_s, 0);
-        } else {
-            tmp = rb_funcall(self, i_to_s, 0);
-            rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp));
-        }
-    } else if (isnan(value)) {
-        if (!state || state->allow_nan) {
-            return rb_funcall(self, i_to_s, 0);
-        } else {
-            tmp = rb_funcall(self, i_to_s, 0);
-            rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp));
-        }
-    } else {
-        return rb_funcall(self, i_to_s, 0);
-    }
-}
-
-/*
- * call-seq: String.included(modul)
- *
- * Extends _modul_ with the String::Extend module.
- */
-static VALUE mString_included_s(VALUE self, VALUE modul) {
-    return rb_funcall(modul, i_extend, 1, mString_Extend);
-}
-
-/*
- * call-seq: to_json(*)
- *
- * This string should be encoded with UTF-8 A call to this method
- * returns a JSON string encoded with UTF16 big endian characters as
- * \u????.
- */
-static VALUE mString_to_json(int argc, VALUE *argv, VALUE self)
-{
-    VALUE result = rb_str_buf_new(RSTRING_LEN(self));
-    rb_str_buf_cat2(result, "\"");
-    JSON_convert_UTF8_to_JSON(result, self, strictConversion);
-    rb_str_buf_cat2(result, "\"");
-    return result;
-}
-
-/*
- * call-seq: to_json_raw_object()
- *
- * This method creates a raw object hash, that can be nested into
- * other data structures and will be unparsed as a raw string. This
- * method should be used, if you want to convert raw strings to JSON
- * instead of UTF-8 strings, e. g. binary data.
- */
-static VALUE mString_to_json_raw_object(VALUE self) {
-    VALUE ary;
-    VALUE result = rb_hash_new();
-    rb_hash_aset(result, rb_funcall(mJSON, i_create_id, 0), rb_class_name(rb_obj_class(self)));
-    ary = rb_funcall(self, i_unpack, 1, rb_str_new2("C*"));
-    rb_hash_aset(result, rb_str_new2("raw"), ary);
-    return result;
-}
-
-/*
- * call-seq: to_json_raw(*args)
- *
- * This method creates a JSON text from the result of a call to
- * to_json_raw_object of this String.
- */
-static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self) {
-    VALUE obj = mString_to_json_raw_object(self);
-    Check_Type(obj, T_HASH);
-    return mHash_to_json(argc, argv, obj);
-}
-
-/*
- * call-seq: json_create(o)
- *
- * Raw Strings are JSON Objects (the raw bytes are stored in an array for the
- * key "raw"). The Ruby String can be created by this module method.
- */
-static VALUE mString_Extend_json_create(VALUE self, VALUE o) {
-    VALUE ary;
-    Check_Type(o, T_HASH);
-    ary = rb_hash_aref(o, rb_str_new2("raw"));
-    return rb_funcall(ary, i_pack, 1, rb_str_new2("C*"));
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- * Returns a JSON string for true: 'true'.
- */
-static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self)
-{
-    return rb_str_new2("true");
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- * Returns a JSON string for false: 'false'.
- */
-static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self)
-{
-    return rb_str_new2("false");
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- */
-static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self)
-{
-    return rb_str_new2("null");
-}
-
-/*
- * call-seq: to_json(*)
- *
- * Converts this object to a string (calling #to_s), converts
- * it to a JSON string, and returns the result. This is a fallback, if no
- * special method #to_json was defined for some object.
- */
-static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self)
-{
-    VALUE string = rb_funcall(self, i_to_s, 0);
-    Check_Type(string, T_STRING);
-    return mString_to_json(argc, argv, string);
-}
-
-/* 
- * Document-class: JSON::Ext::Generator::State
- *
- * This class is used to create State instances, that are use to hold data
- * while generating a JSON text from a a Ruby data structure.
- */
-
-static void State_mark(JSON_Generator_State *state)
-{
-    rb_gc_mark_maybe(state->indent);
-    rb_gc_mark_maybe(state->space);
-    rb_gc_mark_maybe(state->space_before);
-    rb_gc_mark_maybe(state->object_nl);
-    rb_gc_mark_maybe(state->array_nl);
-    rb_gc_mark_maybe(state->seen);
-    rb_gc_mark_maybe(state->memo);
-    rb_gc_mark_maybe(state->depth);
-}
-
-static JSON_Generator_State *State_allocate()
-{
-    JSON_Generator_State *state = ALLOC(JSON_Generator_State);
-    return state;
-}
-
-static VALUE cState_s_allocate(VALUE klass)
-{
-    JSON_Generator_State *state = State_allocate();
-    return Data_Wrap_Struct(klass, State_mark, -1, state);
-}
-
-/*
- * call-seq: configure(opts)
- *
- * Configure this State instance with the Hash _opts_, and return
- * itself.
- */
-static inline VALUE cState_configure(VALUE self, VALUE opts)
-{
-    VALUE tmp;
-    GET_STATE(self);
-    tmp = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
-    if (NIL_P(tmp)) tmp = rb_convert_type(opts, T_HASH, "Hash", "to_h");
-    if (NIL_P(tmp)) {
-        rb_raise(rb_eArgError, "opts has to be hash like or convertable into a hash");
-    }
-    opts = tmp;
-    tmp = rb_hash_aref(opts, ID2SYM(i_indent));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->indent = tmp;
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_space));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->space = tmp;
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_space_before));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->space_before = tmp;
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_array_nl));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->array_nl = tmp;
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_object_nl));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->object_nl = tmp;
-    }
-    tmp = ID2SYM(i_check_circular);
-    if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-        tmp = rb_hash_aref(opts, ID2SYM(i_check_circular));
-        state->check_circular = RTEST(tmp);
-    } else {
-        state->check_circular = 1;
-    }
-    tmp = ID2SYM(i_max_nesting);
-    state->max_nesting = 19;
-    if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-        VALUE max_nesting = rb_hash_aref(opts, tmp);
-        if (RTEST(max_nesting)) {
-            Check_Type(max_nesting, T_FIXNUM);
-            state->max_nesting = FIX2LONG(max_nesting);
-        } else {
-            state->max_nesting = 0;
-        }
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_allow_nan));
-    state->allow_nan = RTEST(tmp);
-    return self;
-}
-
-/*
- * call-seq: to_h
- *
- * Returns the configuration instance variables as a hash, that can be
- * passed to the configure method.
- */
-static VALUE cState_to_h(VALUE self)
-{
-    VALUE result = rb_hash_new();
-    GET_STATE(self);
-    rb_hash_aset(result, ID2SYM(i_indent), state->indent);
-    rb_hash_aset(result, ID2SYM(i_space), state->space);
-    rb_hash_aset(result, ID2SYM(i_space_before), state->space_before);
-    rb_hash_aset(result, ID2SYM(i_object_nl), state->object_nl);
-    rb_hash_aset(result, ID2SYM(i_array_nl), state->array_nl);
-    rb_hash_aset(result, ID2SYM(i_check_circular), state->check_circular ? Qtrue : Qfalse);
-    rb_hash_aset(result, ID2SYM(i_allow_nan), state->allow_nan ? Qtrue : Qfalse);
-    rb_hash_aset(result, ID2SYM(i_max_nesting), LONG2FIX(state->max_nesting));
-    return result;
-}
-
-
-/*
- * call-seq: new(opts = {})
- *
- * Instantiates a new State object, configured by _opts_.
- *
- * _opts_ can have the following keys:
- *
- * * *indent*: a string used to indent levels (default: ''),
- * * *space*: a string that is put after, a : or , delimiter (default: ''),
- * * *space_before*: a string that is put before a : pair delimiter (default: ''),
- * * *object_nl*: a string that is put at the end of a JSON object (default: ''), 
- * * *array_nl*: a string that is put at the end of a JSON array (default: ''),
- * * *check_circular*: true if checking for circular data structures
- *   should be done, false (the default) otherwise.
- * * *allow_nan*: true if NaN, Infinity, and -Infinity should be
- *   generated, otherwise an exception is thrown, if these values are
- *   encountered. This options defaults to false.
- */
-static VALUE cState_initialize(int argc, VALUE *argv, VALUE self)
-{
-    VALUE opts;
-    GET_STATE(self);
-
-    rb_scan_args(argc, argv, "01", &opts);
-    state->indent = rb_str_new2("");
-    state->space = rb_str_new2("");
-    state->space_before = rb_str_new2("");
-    state->array_nl = rb_str_new2("");
-    state->object_nl = rb_str_new2("");
-    if (NIL_P(opts)) {
-        state->check_circular = 1;
-        state->allow_nan = 0;
-        state->max_nesting = 19;
-    } else {
-        cState_configure(self, opts);
-    }
-    state->seen = rb_hash_new();
-    state->memo = Qnil;
-    state->depth = INT2FIX(0);
-    return self;
-}
-
-/*
- * call-seq: from_state(opts)
- *
- * Creates a State object from _opts_, which ought to be Hash to create a
- * new State instance configured by _opts_, something else to create an
- * unconfigured instance. If _opts_ is a State object, it is just returned.
- */
-static VALUE cState_from_state_s(VALUE self, VALUE opts)
-{
-    if (rb_obj_is_kind_of(opts, self)) {
-        return opts;
-    } else if (rb_obj_is_kind_of(opts, rb_cHash)) {
-        return rb_funcall(self, i_new, 1, opts);
-    } else {
-        return rb_funcall(self, i_new, 0);
-    }
-}
-
-/*
- * call-seq: indent()
- *
- * This string is used to indent levels in the JSON text.
- */
-static VALUE cState_indent(VALUE self)
-{
-    GET_STATE(self);
-    return state->indent;
-}
-
-/*
- * call-seq: indent=(indent)
- *
- * This string is used to indent levels in the JSON text.
- */
-static VALUE cState_indent_set(VALUE self, VALUE indent)
-{
-    GET_STATE(self);
-    Check_Type(indent, T_STRING);
-    return state->indent = indent;
-}
-
-/*
- * call-seq: space()
- *
- * This string is used to insert a space between the tokens in a JSON
- * string.
- */
-static VALUE cState_space(VALUE self)
-{
-    GET_STATE(self);
-    return state->space;
-}
-
-/*
- * call-seq: space=(space)
- *
- * This string is used to insert a space between the tokens in a JSON
- * string.
- */
-static VALUE cState_space_set(VALUE self, VALUE space)
-{
-    GET_STATE(self);
-    Check_Type(space, T_STRING);
-    return state->space = space;
-}
-
-/*
- * call-seq: space_before()
- *
- * This string is used to insert a space before the ':' in JSON objects.
- */
-static VALUE cState_space_before(VALUE self)
-{
-    GET_STATE(self);
-    return state->space_before;
-}
-
-/*
- * call-seq: space_before=(space_before)
- *
- * This string is used to insert a space before the ':' in JSON objects.
- */
-static VALUE cState_space_before_set(VALUE self, VALUE space_before)
-{
-    GET_STATE(self);
-    Check_Type(space_before, T_STRING);
-    return state->space_before = space_before;
-}
-
-/*
- * call-seq: object_nl()
- *
- * This string is put at the end of a line that holds a JSON object (or
- * Hash).
- */
-static VALUE cState_object_nl(VALUE self)
-{
-    GET_STATE(self);
-    return state->object_nl;
-}
-
-/*
- * call-seq: object_nl=(object_nl)
- *
- * This string is put at the end of a line that holds a JSON object (or
- * Hash).
- */
-static VALUE cState_object_nl_set(VALUE self, VALUE object_nl)
-{
-    GET_STATE(self);
-    Check_Type(object_nl, T_STRING);
-    return state->object_nl = object_nl;
-}
-
-/*
- * call-seq: array_nl()
- *
- * This string is put at the end of a line that holds a JSON array.
- */
-static VALUE cState_array_nl(VALUE self)
-{
-    GET_STATE(self);
-    return state->array_nl;
-}
-
-/*
- * call-seq: array_nl=(array_nl)
- *
- * This string is put at the end of a line that holds a JSON array.
- */
-static VALUE cState_array_nl_set(VALUE self, VALUE array_nl)
-{
-    GET_STATE(self);
-    Check_Type(array_nl, T_STRING);
-    return state->array_nl = array_nl;
-}
-
-/*
- * call-seq: check_circular?
- *
- * Returns true, if circular data structures should be checked,
- * otherwise returns false.
- */
-static VALUE cState_check_circular_p(VALUE self)
-{
-    GET_STATE(self);
-    return state->check_circular ? Qtrue : Qfalse;
-}
-
-/*
- * call-seq: max_nesting
- *
- * This integer returns the maximum level of data structure nesting in
- * the generated JSON, max_nesting = 0 if no maximum is checked.
- */
-static VALUE cState_max_nesting(VALUE self)
-{
-    GET_STATE(self);
-    return LONG2FIX(state->max_nesting);
-}
-
-/*
- * call-seq: max_nesting=(depth)
- *
- * This sets the maximum level of data structure nesting in the generated JSON
- * to the integer depth, max_nesting = 0 if no maximum should be checked.
- */
-static VALUE cState_max_nesting_set(VALUE self, VALUE depth)
-{
-    GET_STATE(self);
-    Check_Type(depth, T_FIXNUM);
-    state->max_nesting = FIX2LONG(depth);
-    return Qnil;
-}
-
-/*
- * call-seq: allow_nan?
- *
- * Returns true, if NaN, Infinity, and -Infinity should be generated, otherwise
- * returns false.
- */
-static VALUE cState_allow_nan_p(VALUE self)
-{
-    GET_STATE(self);
-    return state->allow_nan ? Qtrue : Qfalse;
-}
-
-/*
- * call-seq: seen?(object)
- *
- * Returns _true_, if _object_ was already seen during this generating run. 
- */
-static VALUE cState_seen_p(VALUE self, VALUE object)
-{
-    GET_STATE(self);
-    return rb_hash_aref(state->seen, rb_obj_id(object));
-}
-
-/*
- * call-seq: remember(object)
- *
- * Remember _object_, to find out if it was already encountered (if a cyclic
- * data structure is rendered). 
- */
-static VALUE cState_remember(VALUE self, VALUE object)
-{
-    GET_STATE(self);
-    return rb_hash_aset(state->seen, rb_obj_id(object), Qtrue);
-}
-
-/*
- * call-seq: forget(object)
- *
- * Forget _object_ for this generating run.
- */
-static VALUE cState_forget(VALUE self, VALUE object)
-{
-    GET_STATE(self);
-    return rb_hash_delete(state->seen, rb_obj_id(object));
-}
-
-/*
- *
- */
-void Init_generator()
-{
-    rb_require("json/common");
-    mJSON = rb_define_module("JSON");
-    mExt = rb_define_module_under(mJSON, "Ext");
-    mGenerator = rb_define_module_under(mExt, "Generator");
-    eGeneratorError = rb_path2class("JSON::GeneratorError");
-    eCircularDatastructure = rb_path2class("JSON::CircularDatastructure");
-    eNestingError = rb_path2class("JSON::NestingError");
-    cState = rb_define_class_under(mGenerator, "State", rb_cObject);
-    rb_define_alloc_func(cState, cState_s_allocate);
-    rb_define_singleton_method(cState, "from_state", cState_from_state_s, 1);
-    rb_define_method(cState, "initialize", cState_initialize, -1);
-
-    rb_define_method(cState, "indent", cState_indent, 0);
-    rb_define_method(cState, "indent=", cState_indent_set, 1);
-    rb_define_method(cState, "space", cState_space, 0);
-    rb_define_method(cState, "space=", cState_space_set, 1);
-    rb_define_method(cState, "space_before", cState_space_before, 0);
-    rb_define_method(cState, "space_before=", cState_space_before_set, 1);
-    rb_define_method(cState, "object_nl", cState_object_nl, 0);
-    rb_define_method(cState, "object_nl=", cState_object_nl_set, 1);
-    rb_define_method(cState, "array_nl", cState_array_nl, 0);
-    rb_define_method(cState, "array_nl=", cState_array_nl_set, 1);
-    rb_define_method(cState, "check_circular?", cState_check_circular_p, 0);
-    rb_define_method(cState, "max_nesting", cState_max_nesting, 0);
-    rb_define_method(cState, "max_nesting=", cState_max_nesting_set, 1);
-    rb_define_method(cState, "allow_nan?", cState_allow_nan_p, 0);
-    rb_define_method(cState, "seen?", cState_seen_p, 1);
-    rb_define_method(cState, "remember", cState_remember, 1);
-    rb_define_method(cState, "forget", cState_forget, 1);
-    rb_define_method(cState, "configure", cState_configure, 1);
-    rb_define_method(cState, "to_h", cState_to_h, 0);
-
-    mGeneratorMethods = rb_define_module_under(mGenerator, "GeneratorMethods");
-    mObject = rb_define_module_under(mGeneratorMethods, "Object");
-    rb_define_method(mObject, "to_json", mObject_to_json, -1);
-    mHash = rb_define_module_under(mGeneratorMethods, "Hash");
-    rb_define_method(mHash, "to_json", mHash_to_json, -1);
-    mArray = rb_define_module_under(mGeneratorMethods, "Array");
-    rb_define_method(mArray, "to_json", mArray_to_json, -1);
-    mInteger = rb_define_module_under(mGeneratorMethods, "Integer");
-    rb_define_method(mInteger, "to_json", mInteger_to_json, -1);
-    mFloat = rb_define_module_under(mGeneratorMethods, "Float");
-    rb_define_method(mFloat, "to_json", mFloat_to_json, -1);
-    mString = rb_define_module_under(mGeneratorMethods, "String");
-    rb_define_singleton_method(mString, "included", mString_included_s, 1);
-    rb_define_method(mString, "to_json", mString_to_json, -1);
-    rb_define_method(mString, "to_json_raw", mString_to_json_raw, -1);
-    rb_define_method(mString, "to_json_raw_object", mString_to_json_raw_object, 0);
-    mString_Extend = rb_define_module_under(mString, "Extend");
-    rb_define_method(mString_Extend, "json_create", mString_Extend_json_create, 1);
-    mTrueClass = rb_define_module_under(mGeneratorMethods, "TrueClass");
-    rb_define_method(mTrueClass, "to_json", mTrueClass_to_json, -1);
-    mFalseClass = rb_define_module_under(mGeneratorMethods, "FalseClass");
-    rb_define_method(mFalseClass, "to_json", mFalseClass_to_json, -1);
-    mNilClass = rb_define_module_under(mGeneratorMethods, "NilClass");
-    rb_define_method(mNilClass, "to_json", mNilClass_to_json, -1);
-
-    i_to_s = rb_intern("to_s");
-    i_to_json = rb_intern("to_json");
-    i_new = rb_intern("new");
-    i_indent = rb_intern("indent");
-    i_space = rb_intern("space");
-    i_space_before = rb_intern("space_before");
-    i_object_nl = rb_intern("object_nl");
-    i_array_nl = rb_intern("array_nl");
-    i_check_circular = rb_intern("check_circular");
-    i_max_nesting = rb_intern("max_nesting");
-    i_allow_nan = rb_intern("allow_nan");
-    i_pack = rb_intern("pack");
-    i_unpack = rb_intern("unpack");
-    i_create_id = rb_intern("create_id");
-    i_extend = rb_intern("extend");
-}
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.c b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.c
deleted file mode 100644
index 76834ea..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.c
+++ /dev/null
@@ -1,182 +0,0 @@
-#include "unicode.h"
-
-#define unicode_escape(buffer, character)          \
-    snprintf(buf, 7, "\\u%04x", (unsigned int) (character)); \
-         rb_str_buf_cat(buffer, buf, 6);
-
-/*
- * Copyright 2001-2004 Unicode, Inc.
- * 
- * Disclaimer
- * 
- * This source code is provided as is by Unicode, Inc. No claims are
- * made as to fitness for any particular purpose. No warranties of any
- * kind are expressed or implied. The recipient agrees to determine
- * applicability of information provided. If this file has been
- * purchased on magnetic or optical media from Unicode, Inc., the
- * sole remedy for any claim will be exchange of defective media
- * within 90 days of receipt.
- * 
- * Limitations on Rights to Redistribute This Code
- * 
- * Unicode, Inc. hereby grants the right to freely use the information
- * supplied in this file in the creation of products supporting the
- * Unicode Standard, and to make copies of this file in any form
- * for internal or external distribution as long as this notice
- * remains attached.
- */
-
-/*
- * Index into the table below with the first byte of a UTF-8 sequence to
- * get the number of trailing bytes that are supposed to follow it.
- * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
- * left as-is for anyone who may want to do such conversion, which was
- * allowed in earlier algorithms.
- */
-static const char trailingBytesForUTF8[256] = {
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
-};
-
-/*
- * Magic values subtracted from a buffer value during UTF8 conversion.
- * This table contains as many values as there might be trailing bytes
- * in a UTF-8 sequence.
- */
-static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 
-		     0x03C82080UL, 0xFA082080UL, 0x82082080UL };
-
-/*
- * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
- * into the first byte, depending on how many bytes follow.  There are
- * as many entries in this table as there are UTF-8 sequence types.
- * (I.e., one byte sequence, two byte... etc.). Remember that sequencs
- * for *legal* UTF-8 will be 4 or fewer bytes total.
- */
-static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
-
-/*
- * Utility routine to tell whether a sequence of bytes is legal UTF-8.
- * This must be called with the length pre-determined by the first byte.
- * If not calling this from ConvertUTF8to*, then the length can be set by:
- *  length = trailingBytesForUTF8[*source]+1;
- * and the sequence is illegal right away if there aren't that many bytes
- * available.
- * If presented with a length > 4, this returns 0.  The Unicode
- * definition of UTF-8 goes up to 4-byte sequences.
- */
-
-inline static unsigned char isLegalUTF8(const UTF8 *source, int length)
-{
-    UTF8 a;
-    const UTF8 *srcptr = source+length;
-    switch (length) {
-        default: return 0;
-                 /* Everything else falls through when "1"... */
-        case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
-        case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
-        case 2: if ((a = (*--srcptr)) > 0xBF) return 0;
-
-                    switch (*source) {
-                        /* no fall-through in this inner switch */
-                        case 0xE0: if (a < 0xA0) return 0; break;
-                        case 0xED: if (a > 0x9F) return 0; break;
-                        case 0xF0: if (a < 0x90) return 0; break;
-                        case 0xF4: if (a > 0x8F) return 0; break;
-                        default:   if (a < 0x80) return 0;
-                    }
-
-        case 1: if (*source >= 0x80 && *source < 0xC2) return 0;
-    }
-    if (*source > 0xF4) return 0;
-    return 1;
-}
-
-void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags)
-{
-    char buf[7];
-    const UTF8* source = (UTF8 *) RSTRING_PTR(string);
-    const UTF8* sourceEnd = source + RSTRING_LEN(string);
-
-    while (source < sourceEnd) {
-        UTF32 ch = 0;
-        unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
-        if (source + extraBytesToRead >= sourceEnd) {
-            rb_raise(rb_path2class("JSON::GeneratorError"),
-                    "partial character in source, but hit end");
-        }
-        if (!isLegalUTF8(source, extraBytesToRead+1)) {
-            rb_raise(rb_path2class("JSON::GeneratorError"),
-                    "source sequence is illegal/malformed");
-        }
-        /*
-         * The cases all fall through. See "Note A" below.
-         */
-        switch (extraBytesToRead) {
-            case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
-            case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
-            case 3: ch += *source++; ch <<= 6;
-            case 2: ch += *source++; ch <<= 6;
-            case 1: ch += *source++; ch <<= 6;
-            case 0: ch += *source++;
-        }
-        ch -= offsetsFromUTF8[extraBytesToRead];
-
-        if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */
-            /* UTF-16 surrogate values are illegal in UTF-32 */
-            if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
-                if (flags == strictConversion) {
-                    source -= (extraBytesToRead+1); /* return to the illegal value itself */
-                    rb_raise(rb_path2class("JSON::GeneratorError"),
-                        "source sequence is illegal/malformed");
-                } else {
-                    unicode_escape(buffer, UNI_REPLACEMENT_CHAR);
-                }
-            } else {
-                /* normal case */
-                if (ch == '"') {
-                    rb_str_buf_cat2(buffer, "\\\"");
-                } else if (ch == '\\') {
-                    rb_str_buf_cat2(buffer, "\\\\");
-                } else if (ch == '/') {
-                    rb_str_buf_cat2(buffer, "\\/");
-                } else if (ch >= 0x20 && ch <= 0x7f) {
-                    rb_str_buf_cat(buffer, (char *) source - 1, 1);
-                } else if (ch == '\n') {
-                    rb_str_buf_cat2(buffer, "\\n");
-                } else if (ch == '\r') {
-                    rb_str_buf_cat2(buffer, "\\r");
-                } else if (ch == '\t') {
-                    rb_str_buf_cat2(buffer, "\\t");
-                } else if (ch == '\f') {
-                    rb_str_buf_cat2(buffer, "\\f");
-                } else if (ch == '\b') {
-                    rb_str_buf_cat2(buffer, "\\b");
-                } else if (ch < 0x20) {
-                    unicode_escape(buffer, (UTF16) ch);
-                } else {
-                    unicode_escape(buffer, (UTF16) ch);
-                }
-            }
-        } else if (ch > UNI_MAX_UTF16) {
-            if (flags == strictConversion) {
-                source -= (extraBytesToRead+1); /* return to the start */
-                rb_raise(rb_path2class("JSON::GeneratorError"),
-                        "source sequence is illegal/malformed");
-            } else {
-                unicode_escape(buffer, UNI_REPLACEMENT_CHAR);
-            }
-        } else {
-            /* target is a character in range 0xFFFF - 0x10FFFF. */
-            ch -= halfBase;
-            unicode_escape(buffer, (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START));
-            unicode_escape(buffer, (UTF16)((ch & halfMask) + UNI_SUR_LOW_START));
-        }
-    }
-}
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.h b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.h
deleted file mode 100644
index 841474b..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#include "ruby.h"
-
-#ifndef _GENERATOR_UNICODE_H_
-#define _GENERATOR_UNICODE_H_
-
-typedef enum {
-	conversionOK = 0, 	/* conversion successful */
-	sourceExhausted,	/* partial character in source, but hit end */
-	targetExhausted,	/* insuff. room in target for conversion */
-	sourceIllegal		/* source sequence is illegal/malformed */
-} ConversionResult;
-
-typedef enum {
-	strictConversion = 0,
-	lenientConversion
-} ConversionFlags;
-
-typedef unsigned long	UTF32;	/* at least 32 bits */
-typedef unsigned short	UTF16;	/* at least 16 bits */
-typedef unsigned char	UTF8;	/* typically 8 bits */
-
-#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
-#define UNI_MAX_BMP (UTF32)0x0000FFFF
-#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
-#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
-#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
-
-#define UNI_SUR_HIGH_START  (UTF32)0xD800
-#define UNI_SUR_HIGH_END    (UTF32)0xDBFF
-#define UNI_SUR_LOW_START   (UTF32)0xDC00
-#define UNI_SUR_LOW_END     (UTF32)0xDFFF
-
-static const int halfShift  = 10; /* used for shifting by 10 bits */
-
-static const UTF32 halfBase = 0x0010000UL;
-static const UTF32 halfMask = 0x3FFUL;
-
-void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags);
-
-#ifndef RARRAY_PTR
-#define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
-#endif
-#ifndef RARRAY_LEN
-#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
-#endif
-#ifndef RSTRING_PTR
-#define RSTRING_PTR(string) RSTRING(string)->ptr
-#endif
-#ifndef RSTRING_LEN
-#define RSTRING_LEN(string) RSTRING(string)->len
-#endif
-
-#endif
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/extconf.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/extconf.rb
deleted file mode 100644
index f511bf0..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/extconf.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'mkmf'
-require 'rbconfig'
-
-if CONFIG['CC'] =~ /gcc/
-  $CFLAGS += ' -Wall'
-  #$CFLAGS += ' -O0 -ggdb'
-end
-
-create_makefile 'parser'
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.c b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.c
deleted file mode 100644
index b13c0e7..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.c
+++ /dev/null
@@ -1,1758 +0,0 @@
-#line 1 "parser.rl"
-#include "ruby.h"
-#include "re.h"
-#include "st.h"
-#include "unicode.h"
-
-#define EVIL 0x666
-
-static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
-static VALUE CNaN, CInfinity, CMinusInfinity;
-
-static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
-          i_chr, i_max_nesting, i_allow_nan; 
-
-#define MinusInfinity "-Infinity"
-
-typedef struct JSON_ParserStruct {
-    VALUE Vsource;
-    char *source;
-    long len;
-    char *memo;
-    VALUE create_id;
-    int max_nesting;
-    int current_nesting;
-    int allow_nan;
-} JSON_Parser;
-
-static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
-
-#define GET_STRUCT                          \
-    JSON_Parser *json;                      \
-    Data_Get_Struct(self, JSON_Parser, json);
-
-#line 64 "parser.rl"
-
-
-
-#line 44 "parser.c"
-static const int JSON_object_start = 1;
-static const int JSON_object_first_final = 27;
-static const int JSON_object_error = 0;
-
-static const int JSON_object_en_main = 1;
-
-#line 97 "parser.rl"
-
-
-static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-    VALUE last_name = Qnil;
-
-    if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
-    }
-
-    *result = rb_hash_new();
-
-    
-#line 66 "parser.c"
-	{
-	cs = JSON_object_start;
-	}
-#line 111 "parser.rl"
-    
-#line 72 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	if ( (*p) == 123 )
-		goto st2;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	switch( (*p) ) {
-		case 13: goto st2;
-		case 32: goto st2;
-		case 34: goto tr2;
-		case 47: goto st23;
-		case 125: goto tr4;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st2;
-	goto st0;
-tr2:
-#line 83 "parser.rl"
-	{
-        char *np = JSON_parse_string(json, p, pe, &last_name);
-        if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st3;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-#line 110 "parser.c"
-	switch( (*p) ) {
-		case 13: goto st3;
-		case 32: goto st3;
-		case 47: goto st4;
-		case 58: goto st8;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st3;
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	switch( (*p) ) {
-		case 42: goto st5;
-		case 47: goto st7;
-	}
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	if ( (*p) == 42 )
-		goto st6;
-	goto st5;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	switch( (*p) ) {
-		case 42: goto st6;
-		case 47: goto st3;
-	}
-	goto st5;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( (*p) == 10 )
-		goto st3;
-	goto st7;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	switch( (*p) ) {
-		case 13: goto st8;
-		case 32: goto st8;
-		case 34: goto tr11;
-		case 45: goto tr11;
-		case 47: goto st19;
-		case 73: goto tr11;
-		case 78: goto tr11;
-		case 91: goto tr11;
-		case 102: goto tr11;
-		case 110: goto tr11;
-		case 116: goto tr11;
-		case 123: goto tr11;
-	}
-	if ( (*p) > 10 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr11;
-	} else if ( (*p) >= 9 )
-		goto st8;
-	goto st0;
-tr11:
-#line 72 "parser.rl"
-	{
-        VALUE v = Qnil;
-        char *np = JSON_parse_value(json, p, pe, &v); 
-        if (np == NULL) {
-            p--; {p++; cs = 9; goto _out;}
-        } else {
-            rb_hash_aset(*result, last_name, v);
-            {p = (( np))-1;}
-        }
-    }
-	goto st9;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-#line 193 "parser.c"
-	switch( (*p) ) {
-		case 13: goto st9;
-		case 32: goto st9;
-		case 44: goto st10;
-		case 47: goto st15;
-		case 125: goto tr4;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st9;
-	goto st0;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-	switch( (*p) ) {
-		case 13: goto st10;
-		case 32: goto st10;
-		case 34: goto tr2;
-		case 47: goto st11;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st10;
-	goto st0;
-st11:
-	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
-	switch( (*p) ) {
-		case 42: goto st12;
-		case 47: goto st14;
-	}
-	goto st0;
-st12:
-	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
-	if ( (*p) == 42 )
-		goto st13;
-	goto st12;
-st13:
-	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
-	switch( (*p) ) {
-		case 42: goto st13;
-		case 47: goto st10;
-	}
-	goto st12;
-st14:
-	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
-	if ( (*p) == 10 )
-		goto st10;
-	goto st14;
-st15:
-	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
-	switch( (*p) ) {
-		case 42: goto st16;
-		case 47: goto st18;
-	}
-	goto st0;
-st16:
-	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-	if ( (*p) == 42 )
-		goto st17;
-	goto st16;
-st17:
-	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
-	switch( (*p) ) {
-		case 42: goto st17;
-		case 47: goto st9;
-	}
-	goto st16;
-st18:
-	if ( ++p == pe )
-		goto _test_eof18;
-case 18:
-	if ( (*p) == 10 )
-		goto st9;
-	goto st18;
-tr4:
-#line 88 "parser.rl"
-	{ p--; {p++; cs = 27; goto _out;} }
-	goto st27;
-st27:
-	if ( ++p == pe )
-		goto _test_eof27;
-case 27:
-#line 289 "parser.c"
-	goto st0;
-st19:
-	if ( ++p == pe )
-		goto _test_eof19;
-case 19:
-	switch( (*p) ) {
-		case 42: goto st20;
-		case 47: goto st22;
-	}
-	goto st0;
-st20:
-	if ( ++p == pe )
-		goto _test_eof20;
-case 20:
-	if ( (*p) == 42 )
-		goto st21;
-	goto st20;
-st21:
-	if ( ++p == pe )
-		goto _test_eof21;
-case 21:
-	switch( (*p) ) {
-		case 42: goto st21;
-		case 47: goto st8;
-	}
-	goto st20;
-st22:
-	if ( ++p == pe )
-		goto _test_eof22;
-case 22:
-	if ( (*p) == 10 )
-		goto st8;
-	goto st22;
-st23:
-	if ( ++p == pe )
-		goto _test_eof23;
-case 23:
-	switch( (*p) ) {
-		case 42: goto st24;
-		case 47: goto st26;
-	}
-	goto st0;
-st24:
-	if ( ++p == pe )
-		goto _test_eof24;
-case 24:
-	if ( (*p) == 42 )
-		goto st25;
-	goto st24;
-st25:
-	if ( ++p == pe )
-		goto _test_eof25;
-case 25:
-	switch( (*p) ) {
-		case 42: goto st25;
-		case 47: goto st2;
-	}
-	goto st24;
-st26:
-	if ( ++p == pe )
-		goto _test_eof26;
-case 26:
-	if ( (*p) == 10 )
-		goto st2;
-	goto st26;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
-	_test_eof13: cs = 13; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-	_test_eof17: cs = 17; goto _test_eof; 
-	_test_eof18: cs = 18; goto _test_eof; 
-	_test_eof27: cs = 27; goto _test_eof; 
-	_test_eof19: cs = 19; goto _test_eof; 
-	_test_eof20: cs = 20; goto _test_eof; 
-	_test_eof21: cs = 21; goto _test_eof; 
-	_test_eof22: cs = 22; goto _test_eof; 
-	_test_eof23: cs = 23; goto _test_eof; 
-	_test_eof24: cs = 24; goto _test_eof; 
-	_test_eof25: cs = 25; goto _test_eof; 
-	_test_eof26: cs = 26; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 112 "parser.rl"
-
-    if (cs >= JSON_object_first_final) {
-        if (RTEST(json->create_id)) {
-            VALUE klassname = rb_hash_aref(*result, json->create_id);
-            if (!NIL_P(klassname)) {
-                VALUE klass = rb_path2class(StringValueCStr(klassname));
-                if RTEST(rb_funcall(klass, i_json_creatable_p, 0)) {
-                    *result = rb_funcall(klass, i_json_create, 1, *result);
-                }
-            }
-        }
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-#line 405 "parser.c"
-static const int JSON_value_start = 1;
-static const int JSON_value_first_final = 21;
-static const int JSON_value_error = 0;
-
-static const int JSON_value_en_main = 1;
-
-#line 210 "parser.rl"
-
-
-static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    
-#line 420 "parser.c"
-	{
-	cs = JSON_value_start;
-	}
-#line 217 "parser.rl"
-    
-#line 426 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	switch( (*p) ) {
-		case 34: goto tr0;
-		case 45: goto tr2;
-		case 73: goto st2;
-		case 78: goto st9;
-		case 91: goto tr5;
-		case 102: goto st11;
-		case 110: goto st15;
-		case 116: goto st18;
-		case 123: goto tr9;
-	}
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto tr2;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-tr0:
-#line 158 "parser.rl"
-	{
-        char *np = JSON_parse_string(json, p, pe, result);
-        if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st21;
-tr2:
-#line 163 "parser.rl"
-	{
-        char *np;
-        if(pe > p + 9 && !strncmp(MinusInfinity, p, 9)) {
-            if (json->allow_nan) {
-                *result = CMinusInfinity;
-                {p = (( p + 10))-1;}
-                p--; {p++; cs = 21; goto _out;}
-            } else {
-                rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-            }
-        }
-        np = JSON_parse_float(json, p, pe, result);
-        if (np != NULL) {p = (( np))-1;}
-        np = JSON_parse_integer(json, p, pe, result);
-        if (np != NULL) {p = (( np))-1;}
-        p--; {p++; cs = 21; goto _out;}
-    }
-	goto st21;
-tr5:
-#line 181 "parser.rl"
-	{ 
-        char *np;
-        json->current_nesting++;
-        np = JSON_parse_array(json, p, pe, result);
-        json->current_nesting--;
-        if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st21;
-tr9:
-#line 189 "parser.rl"
-	{ 
-        char *np;
-        json->current_nesting++;
-        np =  JSON_parse_object(json, p, pe, result);
-        json->current_nesting--;
-        if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st21;
-tr16:
-#line 151 "parser.rl"
-	{
-        if (json->allow_nan) {
-            *result = CInfinity;
-        } else {
-            rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
-        }
-    }
-	goto st21;
-tr18:
-#line 144 "parser.rl"
-	{
-        if (json->allow_nan) {
-            *result = CNaN;
-        } else {
-            rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
-        }
-    }
-	goto st21;
-tr22:
-#line 138 "parser.rl"
-	{
-        *result = Qfalse;
-    }
-	goto st21;
-tr25:
-#line 135 "parser.rl"
-	{
-        *result = Qnil;
-    }
-	goto st21;
-tr28:
-#line 141 "parser.rl"
-	{
-        *result = Qtrue;
-    }
-	goto st21;
-st21:
-	if ( ++p == pe )
-		goto _test_eof21;
-case 21:
-#line 197 "parser.rl"
-	{ p--; {p++; cs = 21; goto _out;} }
-#line 541 "parser.c"
-	goto st0;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	if ( (*p) == 110 )
-		goto st3;
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	if ( (*p) == 102 )
-		goto st4;
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	if ( (*p) == 105 )
-		goto st5;
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	if ( (*p) == 110 )
-		goto st6;
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	if ( (*p) == 105 )
-		goto st7;
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( (*p) == 116 )
-		goto st8;
-	goto st0;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	if ( (*p) == 121 )
-		goto tr16;
-	goto st0;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	if ( (*p) == 97 )
-		goto st10;
-	goto st0;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-	if ( (*p) == 78 )
-		goto tr18;
-	goto st0;
-st11:
-	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
-	if ( (*p) == 97 )
-		goto st12;
-	goto st0;
-st12:
-	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
-	if ( (*p) == 108 )
-		goto st13;
-	goto st0;
-st13:
-	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
-	if ( (*p) == 115 )
-		goto st14;
-	goto st0;
-st14:
-	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
-	if ( (*p) == 101 )
-		goto tr22;
-	goto st0;
-st15:
-	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
-	if ( (*p) == 117 )
-		goto st16;
-	goto st0;
-st16:
-	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-	if ( (*p) == 108 )
-		goto st17;
-	goto st0;
-st17:
-	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
-	if ( (*p) == 108 )
-		goto tr25;
-	goto st0;
-st18:
-	if ( ++p == pe )
-		goto _test_eof18;
-case 18:
-	if ( (*p) == 114 )
-		goto st19;
-	goto st0;
-st19:
-	if ( ++p == pe )
-		goto _test_eof19;
-case 19:
-	if ( (*p) == 117 )
-		goto st20;
-	goto st0;
-st20:
-	if ( ++p == pe )
-		goto _test_eof20;
-case 20:
-	if ( (*p) == 101 )
-		goto tr28;
-	goto st0;
-	}
-	_test_eof21: cs = 21; goto _test_eof; 
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
-	_test_eof13: cs = 13; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-	_test_eof17: cs = 17; goto _test_eof; 
-	_test_eof18: cs = 18; goto _test_eof; 
-	_test_eof19: cs = 19; goto _test_eof; 
-	_test_eof20: cs = 20; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 218 "parser.rl"
-
-    if (cs >= JSON_value_first_final) {
-        return p;
-    } else {
-        return NULL;
-    }
-}
-
-
-#line 711 "parser.c"
-static const int JSON_integer_start = 1;
-static const int JSON_integer_first_final = 5;
-static const int JSON_integer_error = 0;
-
-static const int JSON_integer_en_main = 1;
-
-#line 234 "parser.rl"
-
-
-static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    
-#line 726 "parser.c"
-	{
-	cs = JSON_integer_start;
-	}
-#line 241 "parser.rl"
-    json->memo = p;
-    
-#line 733 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	switch( (*p) ) {
-		case 45: goto st2;
-		case 48: goto st3;
-	}
-	if ( 49 <= (*p) && (*p) <= 57 )
-		goto st4;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	if ( (*p) == 48 )
-		goto st3;
-	if ( 49 <= (*p) && (*p) <= 57 )
-		goto st4;
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st0;
-	goto tr4;
-tr4:
-#line 231 "parser.rl"
-	{ p--; {p++; cs = 5; goto _out;} }
-	goto st5;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-#line 774 "parser.c"
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st4;
-	goto tr4;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 243 "parser.rl"
-
-    if (cs >= JSON_integer_first_final) {
-        long len = p - json->memo;
-        *result = rb_Integer(rb_str_new(json->memo, len));
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-#line 804 "parser.c"
-static const int JSON_float_start = 1;
-static const int JSON_float_first_final = 10;
-static const int JSON_float_error = 0;
-
-static const int JSON_float_en_main = 1;
-
-#line 265 "parser.rl"
-
-
-static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    
-#line 819 "parser.c"
-	{
-	cs = JSON_float_start;
-	}
-#line 272 "parser.rl"
-    json->memo = p;
-    
-#line 826 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	switch( (*p) ) {
-		case 45: goto st2;
-		case 48: goto st3;
-	}
-	if ( 49 <= (*p) && (*p) <= 57 )
-		goto st9;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	if ( (*p) == 48 )
-		goto st3;
-	if ( 49 <= (*p) && (*p) <= 57 )
-		goto st9;
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	switch( (*p) ) {
-		case 46: goto st4;
-		case 69: goto st6;
-		case 101: goto st6;
-	}
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st5;
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	switch( (*p) ) {
-		case 69: goto st6;
-		case 101: goto st6;
-	}
-	if ( (*p) > 46 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st5;
-	} else if ( (*p) >= 45 )
-		goto st0;
-	goto tr7;
-tr7:
-#line 259 "parser.rl"
-	{ p--; {p++; cs = 10; goto _out;} }
-	goto st10;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-#line 891 "parser.c"
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	switch( (*p) ) {
-		case 43: goto st7;
-		case 45: goto st7;
-	}
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st8;
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st8;
-	goto st0;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	switch( (*p) ) {
-		case 69: goto st0;
-		case 101: goto st0;
-	}
-	if ( (*p) > 46 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st8;
-	} else if ( (*p) >= 45 )
-		goto st0;
-	goto tr7;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	switch( (*p) ) {
-		case 46: goto st4;
-		case 69: goto st6;
-		case 101: goto st6;
-	}
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st9;
-	goto st0;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 274 "parser.rl"
-
-    if (cs >= JSON_float_first_final) {
-        long len = p - json->memo;
-        *result = rb_Float(rb_str_new(json->memo, len));
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-
-#line 964 "parser.c"
-static const int JSON_array_start = 1;
-static const int JSON_array_first_final = 17;
-static const int JSON_array_error = 0;
-
-static const int JSON_array_en_main = 1;
-
-#line 310 "parser.rl"
-
-
-static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
-    }
-    *result = rb_ary_new();
-
-    
-#line 984 "parser.c"
-	{
-	cs = JSON_array_start;
-	}
-#line 322 "parser.rl"
-    
-#line 990 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	if ( (*p) == 91 )
-		goto st2;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	switch( (*p) ) {
-		case 13: goto st2;
-		case 32: goto st2;
-		case 34: goto tr2;
-		case 45: goto tr2;
-		case 47: goto st13;
-		case 73: goto tr2;
-		case 78: goto tr2;
-		case 91: goto tr2;
-		case 93: goto tr4;
-		case 102: goto tr2;
-		case 110: goto tr2;
-		case 116: goto tr2;
-		case 123: goto tr2;
-	}
-	if ( (*p) > 10 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr2;
-	} else if ( (*p) >= 9 )
-		goto st2;
-	goto st0;
-tr2:
-#line 291 "parser.rl"
-	{
-        VALUE v = Qnil;
-        char *np = JSON_parse_value(json, p, pe, &v); 
-        if (np == NULL) {
-            p--; {p++; cs = 3; goto _out;}
-        } else {
-            rb_ary_push(*result, v);
-            {p = (( np))-1;}
-        }
-    }
-	goto st3;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-#line 1045 "parser.c"
-	switch( (*p) ) {
-		case 13: goto st3;
-		case 32: goto st3;
-		case 44: goto st4;
-		case 47: goto st9;
-		case 93: goto tr4;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st3;
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	switch( (*p) ) {
-		case 13: goto st4;
-		case 32: goto st4;
-		case 34: goto tr2;
-		case 45: goto tr2;
-		case 47: goto st5;
-		case 73: goto tr2;
-		case 78: goto tr2;
-		case 91: goto tr2;
-		case 102: goto tr2;
-		case 110: goto tr2;
-		case 116: goto tr2;
-		case 123: goto tr2;
-	}
-	if ( (*p) > 10 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr2;
-	} else if ( (*p) >= 9 )
-		goto st4;
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	switch( (*p) ) {
-		case 42: goto st6;
-		case 47: goto st8;
-	}
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	if ( (*p) == 42 )
-		goto st7;
-	goto st6;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	switch( (*p) ) {
-		case 42: goto st7;
-		case 47: goto st4;
-	}
-	goto st6;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	if ( (*p) == 10 )
-		goto st4;
-	goto st8;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	switch( (*p) ) {
-		case 42: goto st10;
-		case 47: goto st12;
-	}
-	goto st0;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-	if ( (*p) == 42 )
-		goto st11;
-	goto st10;
-st11:
-	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
-	switch( (*p) ) {
-		case 42: goto st11;
-		case 47: goto st3;
-	}
-	goto st10;
-st12:
-	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
-	if ( (*p) == 10 )
-		goto st3;
-	goto st12;
-tr4:
-#line 302 "parser.rl"
-	{ p--; {p++; cs = 17; goto _out;} }
-	goto st17;
-st17:
-	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
-#line 1152 "parser.c"
-	goto st0;
-st13:
-	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
-	switch( (*p) ) {
-		case 42: goto st14;
-		case 47: goto st16;
-	}
-	goto st0;
-st14:
-	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
-	if ( (*p) == 42 )
-		goto st15;
-	goto st14;
-st15:
-	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
-	switch( (*p) ) {
-		case 42: goto st15;
-		case 47: goto st2;
-	}
-	goto st14;
-st16:
-	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-	if ( (*p) == 10 )
-		goto st2;
-	goto st16;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
-	_test_eof17: cs = 17; goto _test_eof; 
-	_test_eof13: cs = 13; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 323 "parser.rl"
-
-    if(cs >= JSON_array_first_final) {
-        return p + 1;
-    } else {
-        rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-    }
-}
-
-static VALUE json_string_unescape(char *p, char *pe)
-{
-    VALUE result = rb_str_buf_new(pe - p + 1);
-
-    while (p < pe) {
-        if (*p == '\\') {
-            p++;
-            if (p >= pe) return Qnil; /* raise an exception later, \ at end */
-            switch (*p) {
-                case '"':
-                case '\\':
-                    rb_str_buf_cat(result, p, 1);
-                    p++;
-                    break;
-                case 'b':
-                    rb_str_buf_cat2(result, "\b");
-                    p++;
-                    break;
-                case 'f':
-                    rb_str_buf_cat2(result, "\f");
-                    p++;
-                    break;
-                case 'n':
-                    rb_str_buf_cat2(result, "\n");
-                    p++;
-                    break;
-                case 'r':
-                    rb_str_buf_cat2(result, "\r");
-                    p++;
-                    break;
-                case 't':
-                    rb_str_buf_cat2(result, "\t");
-                    p++;
-                    break;
-                case 'u':
-                    if (p > pe - 4) { 
-                        return Qnil;
-                    } else {
-                        p = JSON_convert_UTF16_to_UTF8(result, p, pe, strictConversion);
-                    }
-                    break;
-                default:
-                    rb_str_buf_cat(result, p, 1);
-                    p++;
-                    break;
-            }
-        } else {
-            char *q = p;
-            while (*q != '\\' && q < pe) q++;
-            rb_str_buf_cat(result, p, q - p);
-            p = q;
-        }
-    }
-    return result;
-}
-
-
-#line 1273 "parser.c"
-static const int JSON_string_start = 1;
-static const int JSON_string_first_final = 8;
-static const int JSON_string_error = 0;
-
-static const int JSON_string_en_main = 1;
-
-#line 401 "parser.rl"
-
-
-static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    *result = rb_str_new("", 0);
-    
-#line 1289 "parser.c"
-	{
-	cs = JSON_string_start;
-	}
-#line 409 "parser.rl"
-    json->memo = p;
-    
-#line 1296 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	if ( (*p) == 34 )
-		goto st2;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	switch( (*p) ) {
-		case 34: goto tr2;
-		case 92: goto st3;
-	}
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto st2;
-tr2:
-#line 393 "parser.rl"
-	{
-        *result = json_string_unescape(json->memo + 1, p);
-        if (NIL_P(*result)) { p--; {p++; cs = 8; goto _out;} } else {p = (( p + 1))-1;}
-    }
-#line 398 "parser.rl"
-	{ p--; {p++; cs = 8; goto _out;} }
-	goto st8;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-#line 1333 "parser.c"
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	if ( (*p) == 117 )
-		goto st4;
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto st2;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st5;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st5;
-	} else
-		goto st5;
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st6;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st6;
-	} else
-		goto st6;
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st7;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st7;
-	} else
-		goto st7;
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st2;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st2;
-	} else
-		goto st2;
-	goto st0;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 411 "parser.rl"
-
-    if (cs >= JSON_string_first_final) {
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-
-#line 1419 "parser.c"
-static const int JSON_start = 1;
-static const int JSON_first_final = 10;
-static const int JSON_error = 0;
-
-static const int JSON_en_main = 1;
-
-#line 445 "parser.rl"
-
-
-/* 
- * Document-class: JSON::Ext::Parser
- *
- * This is the JSON parser implemented as a C extension. It can be configured
- * to be used by setting
- *
- *  JSON.parser = JSON::Ext::Parser
- *
- * with the method parser= in JSON.
- *
- */
-
-/*
- * call-seq: new(source, opts => {})
- *
- * Creates a new JSON::Ext::Parser instance for the string _source_.
- *
- * Creates a new JSON::Ext::Parser instance for the string _source_.
- *
- * It will be configured by the _opts_ hash. _opts_ can have the following
- * keys:
- *
- * _opts_ can have the following keys:
- * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
- *   structures. Disable depth checking with :max_nesting => false|nil|0, it
- *   defaults to 19.
- * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
- *   defiance of RFC 4627 to be parsed by the Parser. This option defaults to
- *   false.
- * * *create_additions*: If set to false, the Parser doesn't create
- *   additions even if a matchin class and create_id was found. This option
- *   defaults to true.
- */
-static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
-{
-    char *ptr;
-    long len;
-    VALUE source, opts;
-    GET_STRUCT;
-    rb_scan_args(argc, argv, "11", &source, &opts);
-    source = StringValue(source);
-    ptr = RSTRING_PTR(source);
-    len = RSTRING_LEN(source);
-    if (len < 2) {
-        rb_raise(eParserError, "A JSON text must at least contain two octets!");
-    }
-    if (!NIL_P(opts)) {
-        opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
-        if (NIL_P(opts)) {
-            rb_raise(rb_eArgError, "opts needs to be like a hash");
-        } else {
-            VALUE tmp = ID2SYM(i_max_nesting);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE max_nesting = rb_hash_aref(opts, tmp);
-                if (RTEST(max_nesting)) {
-                    Check_Type(max_nesting, T_FIXNUM);
-                    json->max_nesting = FIX2INT(max_nesting);
-                } else {
-                    json->max_nesting = 0;
-                }
-            } else {
-                json->max_nesting = 19;
-            }
-            tmp = ID2SYM(i_allow_nan);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE allow_nan = rb_hash_aref(opts, tmp);
-                json->allow_nan = RTEST(allow_nan) ? 1 : 0;
-            } else {
-                json->allow_nan = 0;
-            }
-            tmp = ID2SYM(i_create_additions);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE create_additions = rb_hash_aref(opts, tmp);
-                if (RTEST(create_additions)) {
-                    json->create_id = rb_funcall(mJSON, i_create_id, 0);
-                } else {
-                    json->create_id = Qnil;
-                }
-            } else {
-                json->create_id = rb_funcall(mJSON, i_create_id, 0);
-            }
-        }
-    } else {
-        json->max_nesting = 19;
-        json->allow_nan = 0;
-        json->create_id = rb_funcall(mJSON, i_create_id, 0);
-    }
-    json->current_nesting = 0;
-    /*
-       Convert these?
-    if (len >= 4 &&  ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    }
-    */
-    json->len = len;
-    json->source = ptr;
-    json->Vsource = source;
-    return self;
-}
-
-/*
- * call-seq: parse()
- *
- *  Parses the current JSON text _source_ and returns the complete data
- *  structure as a result.
- */
-static VALUE cParser_parse(VALUE self)
-{
-    char *p, *pe;
-    int cs = EVIL;
-    VALUE result = Qnil;
-    GET_STRUCT;
-
-    
-#line 1549 "parser.c"
-	{
-	cs = JSON_start;
-	}
-#line 567 "parser.rl"
-    p = json->source;
-    pe = p + json->len;
-    
-#line 1557 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-st1:
-	if ( ++p == pe )
-		goto _test_eof1;
-case 1:
-	switch( (*p) ) {
-		case 13: goto st1;
-		case 32: goto st1;
-		case 47: goto st2;
-		case 91: goto tr3;
-		case 123: goto tr4;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st1;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	switch( (*p) ) {
-		case 42: goto st3;
-		case 47: goto st5;
-	}
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	if ( (*p) == 42 )
-		goto st4;
-	goto st3;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	switch( (*p) ) {
-		case 42: goto st4;
-		case 47: goto st1;
-	}
-	goto st3;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	if ( (*p) == 10 )
-		goto st1;
-	goto st5;
-tr3:
-#line 434 "parser.rl"
-	{
-        char *np;
-        json->current_nesting = 1;
-        np = JSON_parse_array(json, p, pe, &result);
-        if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st10;
-tr4:
-#line 427 "parser.rl"
-	{
-        char *np;
-        json->current_nesting = 1;
-        np = JSON_parse_object(json, p, pe, &result);
-        if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st10;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-#line 1634 "parser.c"
-	switch( (*p) ) {
-		case 13: goto st10;
-		case 32: goto st10;
-		case 47: goto st6;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st10;
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	switch( (*p) ) {
-		case 42: goto st7;
-		case 47: goto st9;
-	}
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( (*p) == 42 )
-		goto st8;
-	goto st7;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	switch( (*p) ) {
-		case 42: goto st8;
-		case 47: goto st10;
-	}
-	goto st7;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	if ( (*p) == 10 )
-		goto st10;
-	goto st9;
-	}
-	_test_eof1: cs = 1; goto _test_eof; 
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 570 "parser.rl"
-
-    if (cs >= JSON_first_final && p == pe) {
-        return result;
-    } else {
-        rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-    }
-}
-
-inline static JSON_Parser *JSON_allocate()
-{
-    JSON_Parser *json = ALLOC(JSON_Parser);
-    MEMZERO(json, JSON_Parser, 1);
-    return json;
-}
-
-static void JSON_mark(JSON_Parser *json)
-{
-    rb_gc_mark_maybe(json->Vsource);
-    rb_gc_mark_maybe(json->create_id);
-}
-
-static void JSON_free(JSON_Parser *json)
-{
-    free(json);
-}
-
-static VALUE cJSON_parser_s_allocate(VALUE klass)
-{
-    JSON_Parser *json = JSON_allocate();
-    return Data_Wrap_Struct(klass, JSON_mark, JSON_free, json);
-}
-
-/*
- * call-seq: source()
- *
- * Returns a copy of the current _source_ string, that was used to construct
- * this Parser.
- */
-static VALUE cParser_source(VALUE self)
-{
-    GET_STRUCT;
-    return rb_str_dup(json->Vsource);
-}
-
-void Init_parser()
-{
-    rb_require("json/common");
-    mJSON = rb_define_module("JSON");
-    mExt = rb_define_module_under(mJSON, "Ext");
-    cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
-    eParserError = rb_path2class("JSON::ParserError");
-    eNestingError = rb_path2class("JSON::NestingError");
-    rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
-    rb_define_method(cParser, "initialize", cParser_initialize, -1);
-    rb_define_method(cParser, "parse", cParser_parse, 0);
-    rb_define_method(cParser, "source", cParser_source, 0);
-
-    CNaN = rb_const_get(mJSON, rb_intern("NaN"));
-    CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
-    CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
-
-    i_json_creatable_p = rb_intern("json_creatable?");
-    i_json_create = rb_intern("json_create");
-    i_create_id = rb_intern("create_id");
-    i_create_additions = rb_intern("create_additions");
-    i_chr = rb_intern("chr");
-    i_max_nesting = rb_intern("max_nesting");
-    i_allow_nan = rb_intern("allow_nan");
-}
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.rl b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.rl
deleted file mode 100644
index f6f830a..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.rl
+++ /dev/null
@@ -1,638 +0,0 @@
-#include "ruby.h"
-#include "re.h"
-#include "st.h"
-#include "unicode.h"
-
-#define EVIL 0x666
-
-static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
-static VALUE CNaN, CInfinity, CMinusInfinity;
-
-static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
-          i_chr, i_max_nesting, i_allow_nan; 
-
-#define MinusInfinity "-Infinity"
-
-typedef struct JSON_ParserStruct {
-    VALUE Vsource;
-    char *source;
-    long len;
-    char *memo;
-    VALUE create_id;
-    int max_nesting;
-    int current_nesting;
-    int allow_nan;
-} JSON_Parser;
-
-static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
-
-#define GET_STRUCT                          \
-    JSON_Parser *json;                      \
-    Data_Get_Struct(self, JSON_Parser, json);
-
-%%{
-    machine JSON_common;
-
-    cr                  = '\n';
-    cr_neg              = [^\n];
-    ws                  = [ \t\r\n];
-    c_comment           = '/*' ( any* - (any* '*/' any* ) ) '*/';
-    cpp_comment         = '//' cr_neg* cr;
-    comment             = c_comment | cpp_comment;
-    ignore              = ws | comment;
-    name_separator      = ':';
-    value_separator     = ',';
-    Vnull               = 'null';
-    Vfalse              = 'false';
-    Vtrue               = 'true';
-    VNaN                = 'NaN';
-    VInfinity           = 'Infinity';
-    VMinusInfinity      = '-Infinity';
-    begin_value         = [nft"\-[{NI] | digit;
-    begin_object        = '{';
-    end_object          = '}';
-    begin_array         = '[';
-    end_array           = ']';
-    begin_string        = '"';
-    begin_name          = begin_string;
-    begin_number        = digit | '-';
-}%%
-
-%%{
-    machine JSON_object;
-    include JSON_common;
-
-    write data;
-
-    action parse_value {
-        VALUE v = Qnil;
-        char *np = JSON_parse_value(json, fpc, pe, &v); 
-        if (np == NULL) {
-            fhold; fbreak;
-        } else {
-            rb_hash_aset(*result, last_name, v);
-            fexec np;
-        }
-    }
-
-    action parse_name {
-        char *np = JSON_parse_string(json, fpc, pe, &last_name);
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action exit { fhold; fbreak; }
-
-    a_pair  = ignore* begin_name >parse_name
-        ignore* name_separator ignore*
-        begin_value >parse_value;
-
-    main := begin_object
-          (a_pair (ignore* value_separator a_pair)*)?
-          ignore* end_object @exit;
-}%%
-
-static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-    VALUE last_name = Qnil;
-
-    if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
-    }
-
-    *result = rb_hash_new();
-
-    %% write init;
-    %% write exec;
-
-    if (cs >= JSON_object_first_final) {
-        if (RTEST(json->create_id)) {
-            VALUE klassname = rb_hash_aref(*result, json->create_id);
-            if (!NIL_P(klassname)) {
-                VALUE klass = rb_path2class(StringValueCStr(klassname));
-                if RTEST(rb_funcall(klass, i_json_creatable_p, 0)) {
-                    *result = rb_funcall(klass, i_json_create, 1, *result);
-                }
-            }
-        }
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-%%{
-    machine JSON_value;
-    include JSON_common;
-
-    write data;
-
-    action parse_null {
-        *result = Qnil;
-    }
-    action parse_false {
-        *result = Qfalse;
-    }
-    action parse_true {
-        *result = Qtrue;
-    }
-    action parse_nan {
-        if (json->allow_nan) {
-            *result = CNaN;
-        } else {
-            rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
-        }
-    }
-    action parse_infinity {
-        if (json->allow_nan) {
-            *result = CInfinity;
-        } else {
-            rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
-        }
-    }
-    action parse_string {
-        char *np = JSON_parse_string(json, fpc, pe, result);
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action parse_number {
-        char *np;
-        if(pe > fpc + 9 && !strncmp(MinusInfinity, fpc, 9)) {
-            if (json->allow_nan) {
-                *result = CMinusInfinity;
-                fexec p + 10;
-                fhold; fbreak;
-            } else {
-                rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-            }
-        }
-        np = JSON_parse_float(json, fpc, pe, result);
-        if (np != NULL) fexec np;
-        np = JSON_parse_integer(json, fpc, pe, result);
-        if (np != NULL) fexec np;
-        fhold; fbreak;
-    }
-
-    action parse_array { 
-        char *np;
-        json->current_nesting++;
-        np = JSON_parse_array(json, fpc, pe, result);
-        json->current_nesting--;
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action parse_object { 
-        char *np;
-        json->current_nesting++;
-        np =  JSON_parse_object(json, fpc, pe, result);
-        json->current_nesting--;
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action exit { fhold; fbreak; }
-
-main := (
-              Vnull @parse_null |
-              Vfalse @parse_false |
-              Vtrue @parse_true |
-              VNaN @parse_nan |
-              VInfinity @parse_infinity |
-              begin_number >parse_number |
-              begin_string >parse_string |
-              begin_array >parse_array |
-              begin_object >parse_object
-        ) %*exit;
-}%%
-
-static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    %% write init;
-    %% write exec;
-
-    if (cs >= JSON_value_first_final) {
-        return p;
-    } else {
-        return NULL;
-    }
-}
-
-%%{
-    machine JSON_integer;
-
-    write data;
-
-    action exit { fhold; fbreak; }
-
-    main := '-'? ('0' | [1-9][0-9]*) (^[0-9] @exit);
-}%%
-
-static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    %% write init;
-    json->memo = p;
-    %% write exec;
-
-    if (cs >= JSON_integer_first_final) {
-        long len = p - json->memo;
-        *result = rb_Integer(rb_str_new(json->memo, len));
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-%%{
-    machine JSON_float;
-    include JSON_common;
-
-    write data;
-
-    action exit { fhold; fbreak; }
-
-    main := '-'? (
-              (('0' | [1-9][0-9]*) '.' [0-9]+ ([Ee] [+\-]?[0-9]+)?)
-              | (('0' | [1-9][0-9]*) ([Ee] [+\-]?[0-9]+))
-             )  (^[0-9Ee.\-] @exit );
-}%%
-
-static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    %% write init;
-    json->memo = p;
-    %% write exec;
-
-    if (cs >= JSON_float_first_final) {
-        long len = p - json->memo;
-        *result = rb_Float(rb_str_new(json->memo, len));
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-%%{
-    machine JSON_array;
-    include JSON_common;
-
-    write data;
-
-    action parse_value {
-        VALUE v = Qnil;
-        char *np = JSON_parse_value(json, fpc, pe, &v); 
-        if (np == NULL) {
-            fhold; fbreak;
-        } else {
-            rb_ary_push(*result, v);
-            fexec np;
-        }
-    }
-
-    action exit { fhold; fbreak; }
-
-    next_element  = value_separator ignore* begin_value >parse_value;
-
-    main := begin_array ignore*
-          ((begin_value >parse_value ignore*)
-           (ignore* next_element ignore*)*)?
-          end_array @exit;
-}%%
-
-static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
-    }
-    *result = rb_ary_new();
-
-    %% write init;
-    %% write exec;
-
-    if(cs >= JSON_array_first_final) {
-        return p + 1;
-    } else {
-        rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-    }
-}
-
-static VALUE json_string_unescape(char *p, char *pe)
-{
-    VALUE result = rb_str_buf_new(pe - p + 1);
-
-    while (p < pe) {
-        if (*p == '\\') {
-            p++;
-            if (p >= pe) return Qnil; /* raise an exception later, \ at end */
-            switch (*p) {
-                case '"':
-                case '\\':
-                    rb_str_buf_cat(result, p, 1);
-                    p++;
-                    break;
-                case 'b':
-                    rb_str_buf_cat2(result, "\b");
-                    p++;
-                    break;
-                case 'f':
-                    rb_str_buf_cat2(result, "\f");
-                    p++;
-                    break;
-                case 'n':
-                    rb_str_buf_cat2(result, "\n");
-                    p++;
-                    break;
-                case 'r':
-                    rb_str_buf_cat2(result, "\r");
-                    p++;
-                    break;
-                case 't':
-                    rb_str_buf_cat2(result, "\t");
-                    p++;
-                    break;
-                case 'u':
-                    if (p > pe - 4) { 
-                        return Qnil;
-                    } else {
-                        p = JSON_convert_UTF16_to_UTF8(result, p, pe, strictConversion);
-                    }
-                    break;
-                default:
-                    rb_str_buf_cat(result, p, 1);
-                    p++;
-                    break;
-            }
-        } else {
-            char *q = p;
-            while (*q != '\\' && q < pe) q++;
-            rb_str_buf_cat(result, p, q - p);
-            p = q;
-        }
-    }
-    return result;
-}
-
-%%{
-    machine JSON_string;
-    include JSON_common;
-
-    write data;
-
-    action parse_string {
-        *result = json_string_unescape(json->memo + 1, p);
-        if (NIL_P(*result)) { fhold; fbreak; } else fexec p + 1;
-    }
-
-    action exit { fhold; fbreak; }
-
-    main := '"' ((^(["\\] | 0..0x1f) | '\\'["\\/bfnrt] | '\\u'[0-9a-fA-F]{4} | '\\'^(["\\/bfnrtu]|0..0x1f))* %parse_string) '"' @exit;
-}%%
-
-static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    *result = rb_str_new("", 0);
-    %% write init;
-    json->memo = p;
-    %% write exec;
-
-    if (cs >= JSON_string_first_final) {
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-%%{
-    machine JSON;
-
-    write data;
-
-    include JSON_common;
-
-    action parse_object {
-        char *np;
-        json->current_nesting = 1;
-        np = JSON_parse_object(json, fpc, pe, &result);
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action parse_array {
-        char *np;
-        json->current_nesting = 1;
-        np = JSON_parse_array(json, fpc, pe, &result);
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    main := ignore* (
-            begin_object >parse_object |
-            begin_array >parse_array
-            ) ignore*;
-}%%
-
-/* 
- * Document-class: JSON::Ext::Parser
- *
- * This is the JSON parser implemented as a C extension. It can be configured
- * to be used by setting
- *
- *  JSON.parser = JSON::Ext::Parser
- *
- * with the method parser= in JSON.
- *
- */
-
-/*
- * call-seq: new(source, opts => {})
- *
- * Creates a new JSON::Ext::Parser instance for the string _source_.
- *
- * Creates a new JSON::Ext::Parser instance for the string _source_.
- *
- * It will be configured by the _opts_ hash. _opts_ can have the following
- * keys:
- *
- * _opts_ can have the following keys:
- * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
- *   structures. Disable depth checking with :max_nesting => false|nil|0, it
- *   defaults to 19.
- * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
- *   defiance of RFC 4627 to be parsed by the Parser. This option defaults to
- *   false.
- * * *create_additions*: If set to false, the Parser doesn't create
- *   additions even if a matchin class and create_id was found. This option
- *   defaults to true.
- */
-static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
-{
-    char *ptr;
-    long len;
-    VALUE source, opts;
-    GET_STRUCT;
-    rb_scan_args(argc, argv, "11", &source, &opts);
-    source = StringValue(source);
-    ptr = RSTRING_PTR(source);
-    len = RSTRING_LEN(source);
-    if (len < 2) {
-        rb_raise(eParserError, "A JSON text must at least contain two octets!");
-    }
-    if (!NIL_P(opts)) {
-        opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
-        if (NIL_P(opts)) {
-            rb_raise(rb_eArgError, "opts needs to be like a hash");
-        } else {
-            VALUE tmp = ID2SYM(i_max_nesting);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE max_nesting = rb_hash_aref(opts, tmp);
-                if (RTEST(max_nesting)) {
-                    Check_Type(max_nesting, T_FIXNUM);
-                    json->max_nesting = FIX2INT(max_nesting);
-                } else {
-                    json->max_nesting = 0;
-                }
-            } else {
-                json->max_nesting = 19;
-            }
-            tmp = ID2SYM(i_allow_nan);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE allow_nan = rb_hash_aref(opts, tmp);
-                json->allow_nan = RTEST(allow_nan) ? 1 : 0;
-            } else {
-                json->allow_nan = 0;
-            }
-            tmp = ID2SYM(i_create_additions);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE create_additions = rb_hash_aref(opts, tmp);
-                if (RTEST(create_additions)) {
-                    json->create_id = rb_funcall(mJSON, i_create_id, 0);
-                } else {
-                    json->create_id = Qnil;
-                }
-            } else {
-                json->create_id = rb_funcall(mJSON, i_create_id, 0);
-            }
-        }
-    } else {
-        json->max_nesting = 19;
-        json->allow_nan = 0;
-        json->create_id = rb_funcall(mJSON, i_create_id, 0);
-    }
-    json->current_nesting = 0;
-    /*
-       Convert these?
-    if (len >= 4 &&  ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    }
-    */
-    json->len = len;
-    json->source = ptr;
-    json->Vsource = source;
-    return self;
-}
-
-/*
- * call-seq: parse()
- *
- *  Parses the current JSON text _source_ and returns the complete data
- *  structure as a result.
- */
-static VALUE cParser_parse(VALUE self)
-{
-    char *p, *pe;
-    int cs = EVIL;
-    VALUE result = Qnil;
-    GET_STRUCT;
-
-    %% write init;
-    p = json->source;
-    pe = p + json->len;
-    %% write exec;
-
-    if (cs >= JSON_first_final && p == pe) {
-        return result;
-    } else {
-        rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-    }
-}
-
-inline static JSON_Parser *JSON_allocate()
-{
-    JSON_Parser *json = ALLOC(JSON_Parser);
-    MEMZERO(json, JSON_Parser, 1);
-    return json;
-}
-
-static void JSON_mark(JSON_Parser *json)
-{
-    rb_gc_mark_maybe(json->Vsource);
-    rb_gc_mark_maybe(json->create_id);
-}
-
-static void JSON_free(JSON_Parser *json)
-{
-    free(json);
-}
-
-static VALUE cJSON_parser_s_allocate(VALUE klass)
-{
-    JSON_Parser *json = JSON_allocate();
-    return Data_Wrap_Struct(klass, JSON_mark, JSON_free, json);
-}
-
-/*
- * call-seq: source()
- *
- * Returns a copy of the current _source_ string, that was used to construct
- * this Parser.
- */
-static VALUE cParser_source(VALUE self)
-{
-    GET_STRUCT;
-    return rb_str_dup(json->Vsource);
-}
-
-void Init_parser()
-{
-    rb_require("json/common");
-    mJSON = rb_define_module("JSON");
-    mExt = rb_define_module_under(mJSON, "Ext");
-    cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
-    eParserError = rb_path2class("JSON::ParserError");
-    eNestingError = rb_path2class("JSON::NestingError");
-    rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
-    rb_define_method(cParser, "initialize", cParser_initialize, -1);
-    rb_define_method(cParser, "parse", cParser_parse, 0);
-    rb_define_method(cParser, "source", cParser_source, 0);
-
-    CNaN = rb_const_get(mJSON, rb_intern("NaN"));
-    CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
-    CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
-
-    i_json_creatable_p = rb_intern("json_creatable?");
-    i_json_create = rb_intern("json_create");
-    i_create_id = rb_intern("create_id");
-    i_create_additions = rb_intern("create_additions");
-    i_chr = rb_intern("chr");
-    i_max_nesting = rb_intern("max_nesting");
-    i_allow_nan = rb_intern("allow_nan");
-}
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.c b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.c
deleted file mode 100644
index a16ff26..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.c
+++ /dev/null
@@ -1,154 +0,0 @@
-#include "unicode.h"
-
-/*
- * Copyright 2001-2004 Unicode, Inc.
- * 
- * Disclaimer
- * 
- * This source code is provided as is by Unicode, Inc. No claims are
- * made as to fitness for any particular purpose. No warranties of any
- * kind are expressed or implied. The recipient agrees to determine
- * applicability of information provided. If this file has been
- * purchased on magnetic or optical media from Unicode, Inc., the
- * sole remedy for any claim will be exchange of defective media
- * within 90 days of receipt.
- * 
- * Limitations on Rights to Redistribute This Code
- * 
- * Unicode, Inc. hereby grants the right to freely use the information
- * supplied in this file in the creation of products supporting the
- * Unicode Standard, and to make copies of this file in any form
- * for internal or external distribution as long as this notice
- * remains attached.
- */
-
-/*
- * Index into the table below with the first byte of a UTF-8 sequence to
- * get the number of trailing bytes that are supposed to follow it.
- * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
- * left as-is for anyone who may want to do such conversion, which was
- * allowed in earlier algorithms.
- */
-static const char trailingBytesForUTF8[256] = {
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
-};
-
-/*
- * Magic values subtracted from a buffer value during UTF8 conversion.
- * This table contains as many values as there might be trailing bytes
- * in a UTF-8 sequence.
- */
-static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 
-             0x03C82080UL, 0xFA082080UL, 0x82082080UL };
-
-/*
- * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
- * into the first byte, depending on how many bytes follow.  There are
- * as many entries in this table as there are UTF-8 sequence types.
- * (I.e., one byte sequence, two byte... etc.). Remember that sequencs
- * for *legal* UTF-8 will be 4 or fewer bytes total.
- */
-static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
-
-char *JSON_convert_UTF16_to_UTF8 (
-        VALUE buffer,
-        char *source,
-        char *sourceEnd,
-        ConversionFlags flags)
-{
-    UTF16 *tmp, *tmpPtr, *tmpEnd;
-    char buf[5];
-    long n = 0, i;
-    char *p = source - 1;
-
-    while (p < sourceEnd && p[0] == '\\' && p[1] == 'u') {
-        p += 6;
-        n++;
-    }
-    p = source + 1;
-    buf[4] = 0;
-    tmpPtr = tmp = ALLOC_N(UTF16, n);
-    tmpEnd = tmp + n;
-    for (i = 0; i < n; i++) {
-        buf[0] = *p++;
-        buf[1] = *p++;
-        buf[2] = *p++;
-        buf[3] = *p++;
-        tmpPtr[i] = strtol(buf, NULL, 16);
-        p += 2;
-    }
-
-    while (tmpPtr < tmpEnd) {
-        UTF32 ch;
-        unsigned short bytesToWrite = 0;
-        const UTF32 byteMask = 0xBF;
-        const UTF32 byteMark = 0x80; 
-        ch = *tmpPtr++;
-        /* If we have a surrogate pair, convert to UTF32 first. */
-        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) {
-            /* If the 16 bits following the high surrogate are in the source
-             * buffer... */
-            if (tmpPtr < tmpEnd) {
-                UTF32 ch2 = *tmpPtr;
-                /* If it's a low surrogate, convert to UTF32. */
-                if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) {
-                    ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
-                        + (ch2 - UNI_SUR_LOW_START) + halfBase;
-                    ++tmpPtr;
-                } else if (flags == strictConversion) { /* it's an unpaired high surrogate */
-                    free(tmp);
-                    rb_raise(rb_path2class("JSON::ParserError"),
-                            "source sequence is illegal/malformed near %s", source);
-                }
-            } else { /* We don't have the 16 bits following the high surrogate. */
-                free(tmp);
-                rb_raise(rb_path2class("JSON::ParserError"),
-                    "partial character in source, but hit end near %s", source);
-                break;
-            }
-        } else if (flags == strictConversion) {
-            /* UTF-16 surrogate values are illegal in UTF-32 */
-            if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) {
-                free(tmp);
-                rb_raise(rb_path2class("JSON::ParserError"),
-                    "source sequence is illegal/malformed near %s", source);
-            }
-        }
-        /* Figure out how many bytes the result will require */
-        if (ch < (UTF32) 0x80) {
-            bytesToWrite = 1;
-        } else if (ch < (UTF32) 0x800) {
-            bytesToWrite = 2;
-        } else if (ch < (UTF32) 0x10000) {
-            bytesToWrite = 3;
-        } else if (ch < (UTF32) 0x110000) {
-            bytesToWrite = 4;
-        } else {
-            bytesToWrite = 3;
-            ch = UNI_REPLACEMENT_CHAR;
-        }
-
-        buf[0] = 0;
-        buf[1] = 0;
-        buf[2] = 0;
-        buf[3] = 0;
-        p = buf + bytesToWrite;
-        switch (bytesToWrite) { /* note: everything falls through. */
-            case 4: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
-            case 3: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
-            case 2: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
-            case 1: *--p = (UTF8) (ch | firstByteMark[bytesToWrite]);
-        }
-        rb_str_buf_cat(buffer, p, bytesToWrite);
-    }
-    free(tmp);
-    source += 5 + (n - 1) * 6;
-    return source;
-}
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.h b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.h
deleted file mode 100644
index 155da0c..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.h
+++ /dev/null
@@ -1,58 +0,0 @@
-
-#ifndef _PARSER_UNICODE_H_
-#define _PARSER_UNICODE_H_
-
-#include "ruby.h"
-
-typedef unsigned long	UTF32;	/* at least 32 bits */
-typedef unsigned short	UTF16;	/* at least 16 bits */
-typedef unsigned char	UTF8;	/* typically 8 bits */
-
-#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
-#define UNI_MAX_BMP (UTF32)0x0000FFFF
-#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
-#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
-#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
-
-#define UNI_SUR_HIGH_START  (UTF32)0xD800
-#define UNI_SUR_HIGH_END    (UTF32)0xDBFF
-#define UNI_SUR_LOW_START   (UTF32)0xDC00
-#define UNI_SUR_LOW_END     (UTF32)0xDFFF
-
-static const int halfShift  = 10; /* used for shifting by 10 bits */
-
-static const UTF32 halfBase = 0x0010000UL;
-static const UTF32 halfMask = 0x3FFUL;
-
-typedef enum {
-	conversionOK = 0, 	/* conversion successful */
-	sourceExhausted,	/* partial character in source, but hit end */
-	targetExhausted,	/* insuff. room in target for conversion */
-	sourceIllegal		/* source sequence is illegal/malformed */
-} ConversionResult;
-
-typedef enum {
-	strictConversion = 0,
-	lenientConversion
-} ConversionFlags;
-
-char *JSON_convert_UTF16_to_UTF8 (
-    VALUE buffer,
-    char *source,
-    char *sourceEnd,
-		ConversionFlags flags);
-
-#ifndef RARRAY_PTR
-#define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
-#endif
-#ifndef RARRAY_LEN
-#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
-#endif
-#ifndef RSTRING_PTR
-#define RSTRING_PTR(string) RSTRING(string)->ptr
-#endif
-#ifndef RSTRING_LEN
-#define RSTRING_LEN(string) RSTRING(string)->len
-#endif
-
-#endif
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/install.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/install.rb
deleted file mode 100755
index adf77a0..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/install.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rbconfig'
-require 'fileutils'
-include FileUtils::Verbose
-
-include Config
-
-bindir = CONFIG["bindir"]
-cd 'bin' do
-  filename = 'edit_json.rb'
-  #install(filename, bindir)
-end
-sitelibdir = CONFIG["sitelibdir"]
-cd 'lib' do
-  install('json.rb', sitelibdir)
-  mkdir_p File.join(sitelibdir, 'json')
-  for file in Dir['json/**/*.{rb,xpm}']
-    d = File.join(sitelibdir, file)
-    mkdir_p File.dirname(d)
-    install(file, d)
-  end
-  install(File.join('json', 'editor.rb'), File.join(sitelibdir,'json'))
-  install(File.join('json', 'json.xpm'), File.join(sitelibdir,'json'))
-end
-warn " *** Installed PURE ruby library."
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json.rb
deleted file mode 100644
index 3b0b711..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json.rb
+++ /dev/null
@@ -1,235 +0,0 @@
-require 'json/common'
-# = json - JSON for Ruby
-#
-# == Description
-#
-# This is a implementation of the JSON specification according to RFC 4627
-# (http://www.ietf.org/rfc/rfc4627.txt). Starting from version 1.0.0 on there
-# will be two variants available:
-#
-# * A pure ruby variant, that relies on the iconv and the stringscan
-#   extensions, which are both part of the ruby standard library.
-# * The quite a bit faster C extension variant, which is in parts implemented
-#   in C and comes with its own unicode conversion functions and a parser
-#   generated by the ragel state machine compiler
-#   (http://www.cs.queensu.ca/~thurston/ragel).
-#
-# Both variants of the JSON generator escape all non-ASCII an control
-# characters with \uXXXX escape sequences, and support UTF-16 surrogate pairs
-# in order to be able to generate the whole range of unicode code points. This
-# means that generated JSON text is encoded as UTF-8 (because ASCII is a subset
-# of UTF-8) and at the same time avoids decoding problems for receiving
-# endpoints, that don't expect UTF-8 encoded texts. On the negative side this
-# may lead to a bit longer strings than necessarry.
-#
-# All strings, that are to be encoded as JSON strings, should be UTF-8 byte
-# sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8
-# encoded, please use the to_json_raw_object method of String (which produces
-# an object, that contains a byte array) and decode the result on the receiving
-# endpoint.
-#
-# == Author
-#
-# Florian Frank <mailto:flori at ping.de>
-#
-# == License
-#
-# This software is distributed under the same license as Ruby itself, see
-# http://www.ruby-lang.org/en/LICENSE.txt.
-#
-# == Download
-#
-# The latest version of this library can be downloaded at
-#
-# * http://rubyforge.org/frs?group_id=953
-#
-# Online Documentation should be located at
-#
-# * http://json.rubyforge.org
-#
-# == Usage
-# 
-# To use JSON you can
-#   require 'json'
-# to load the installed variant (either the extension 'json' or the pure
-# variant 'json_pure'). If you have installed the extension variant, you can
-# pick either the extension variant or the pure variant by typing
-#   require 'json/ext'
-# or
-#   require 'json/pure'
-#
-# You can choose to load a set of common additions to ruby core's objects if
-# you
-#   require 'json/add/core'
-#
-# After requiring this you can, e. g., serialise/deserialise Ruby ranges:
-#
-#   JSON JSON(1..10) # => 1..10
-#
-# To find out how to add JSON support to other or your own classes, read the
-# Examples section below.
-#
-# To get the best compatibility to rails' JSON implementation, you can
-#   require 'json/add/rails'
-#
-# Both of the additions attempt to require 'json' (like above) first, if it has
-# not been required yet.
-#
-# == Speed Comparisons
-#
-# I have created some benchmark results (see the benchmarks subdir of the
-# package) for the JSON-Parser to estimate the speed up in the C extension:
-#
-# JSON::Pure::Parser::  28.90  calls/second
-# JSON::Ext::Parser::  505.50 calls/second
-#
-# This is ca. <b>17.5</b> times the speed of the pure Ruby implementation.
-#
-# I have benchmarked the JSON-Generator as well. This generates a few more
-# values, because there are different modes, that also influence the achieved
-# speed:
-#
-# * JSON::Pure::Generator:
-#   generate::        35.06 calls/second
-#   pretty_generate:: 34.00 calls/second
-#   fast_generate::   41.06 calls/second
-#
-# * JSON::Ext::Generator:
-#   generate::        492.11 calls/second
-#   pretty_generate:: 348.85 calls/second
-#   fast_generate::   541.60 calls/second
-#
-# * Speedup Ext/Pure:
-#   generate safe::   14.0 times
-#   generate pretty:: 10.3 times
-#   generate fast::   13.2 times
-#
-# The rails framework includes a generator as well, also it seems to be rather
-# slow: I measured only 23.87 calls/second which is slower than any of my pure
-# generator results. Here a comparison of the different speedups with the Rails
-# measurement as the divisor:
-#
-# * Speedup Pure/Rails:
-#   generate safe::   1.5 times
-#   generate pretty:: 1.4 times
-#   generate fast::   1.7 times
-#
-# * Speedup Ext/Rails:
-#   generate safe::   20.6 times
-#   generate pretty:: 14.6 times
-#   generate fast::   22.7 times
-#
-# To achieve the fastest JSON text output, you can use the
-# fast_generate/fast_unparse methods. Beware, that this will disable the
-# checking for circular Ruby data structures, which may cause JSON to go into
-# an infinite loop.
-#
-# == Examples
-#
-# To create a JSON text from a ruby data structure, you
-# can call JSON.generate (or JSON.unparse) like that:
-#
-#  json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#  # => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]"
-#
-# To create a valid JSON text you have to make sure, that the output is
-# embedded in either a JSON array [] or a JSON object {}. The easiest way to do
-# this, is by putting your values in a Ruby Array or Hash instance.
-#
-# To get back a ruby data structure from a JSON text, you have to call
-# JSON.parse on it:
-#
-#  JSON.parse json
-#  # => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"]
-# 
-# Note, that the range from the original data structure is a simple
-# string now. The reason for this is, that JSON doesn't support ranges
-# or arbitrary classes. In this case the json library falls back to call
-# Object#to_json, which is the same as #to_s.to_json.
-#
-# It's possible to add JSON support serialization to arbitrary classes by
-# simply implementing a more specialized version of the #to_json method, that
-# should return a JSON object (a hash converted to JSON with #to_json) like
-# this (don't forget the *a for all the arguments):
-#
-#  class Range
-#    def to_json(*a)
-#      {
-#        'json_class'   => self.class.name, # = 'Range'
-#        'data'         => [ first, last, exclude_end? ]
-#      }.to_json(*a)
-#    end
-#  end
-#
-# The hash key 'json_class' is the class, that will be asked to deserialise the
-# JSON representation later. In this case it's 'Range', but any namespace of
-# the form 'A::B' or '::A::B' will do. All other keys are arbitrary and can be
-# used to store the necessary data to configure the object to be deserialised.
-#
-# If a the key 'json_class' is found in a JSON object, the JSON parser checks
-# if the given class responds to the json_create class method. If so, it is
-# called with the JSON object converted to a Ruby hash. So a range can
-# be deserialised by implementing Range.json_create like this:
-# 
-#  class Range
-#    def self.json_create(o)
-#      new(*o['data'])
-#    end
-#  end
-#
-# Now it possible to serialise/deserialise ranges as well:
-#
-#  json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#  # => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]"
-#  JSON.parse json
-#  # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#
-# JSON.generate always creates the shortest possible string representation of a
-# ruby data structure in one line. This good for data storage or network
-# protocols, but not so good for humans to read. Fortunately there's also
-# JSON.pretty_generate (or JSON.pretty_generate) that creates a more
-# readable output:
-#
-#  puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10])
-#  [
-#    1,
-#    2,
-#    {
-#      "a": 3.141
-#    },
-#    false,
-#    true,
-#    null,
-#    {
-#      "json_class": "Range",
-#      "data": [
-#        4,
-#        10,
-#        false
-#      ]
-#    }
-#  ]
-#
-# There are also the methods Kernel#j for unparse, and Kernel#jj for
-# pretty_unparse output to the console, that work analogous to Core Ruby's p
-# and the pp library's pp methods.
-#
-# The script tools/server.rb contains a small example if you want to test, how
-# receiving a JSON object from a webrick server in your browser with the
-# javasript prototype library (http://www.prototypejs.org) works.
-#
-module JSON
-  require 'json/version'
-
-  if VARIANT_BINARY
-    require 'json/ext'
-  else
-    begin
-      require 'json/ext'
-    rescue LoadError
-      require 'json/pure'
-    end
-  end
-
-  JSON_LOADED = true
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Array.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Array.xpm
deleted file mode 100644
index 27c4801..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Array.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * Array_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"   ..........   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   ..........   ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/FalseClass.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/FalseClass.xpm
deleted file mode 100644
index 25ce608..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/FalseClass.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * False_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #FF0000",
-"                ",
-"                ",
-"                ",
-"     ......     ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     ......     ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     .          ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Hash.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Hash.xpm
deleted file mode 100644
index cd8f6f7..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Hash.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * Hash_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"       .  .     ",
-"       .  .     ",
-"       .  .     ",
-"    .........   ",
-"      .  .      ",
-"      .  .      ",
-"   .........    ",
-"     .  .       ",
-"     .  .       ",
-"     .  .       ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Key.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Key.xpm
deleted file mode 100644
index 9fd7281..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Key.xpm
+++ /dev/null
@@ -1,73 +0,0 @@
-/* XPM */
-static char * Key_xpm[] = {
-"16 16 54 1",
-" 	c None",
-".	c #110007",
-"+	c #0E0900",
-"@	c #000013",
-"#	c #070600",
-"$	c #F6F006",
-"%	c #ECE711",
-"&	c #E5EE00",
-"*	c #16021E",
-"=	c #120900",
-"-	c #EDF12B",
-";	c #000033",
-">	c #0F0000",
-",	c #FFFE03",
-"'	c #E6E500",
-")	c #16021B",
-"!	c #F7F502",
-"~	c #000E00",
-"{	c #130000",
-"]	c #FFF000",
-"^	c #FFE711",
-"/	c #140005",
-"(	c #190025",
-"_	c #E9DD27",
-":	c #E7DC04",
-"<	c #FFEC09",
-"[	c #FFE707",
-"}	c #FFDE10",
-"|	c #150021",
-"1	c #160700",
-"2	c #FAF60E",
-"3	c #EFE301",
-"4	c #FEF300",
-"5	c #E7E000",
-"6	c #FFFF08",
-"7	c #0E0206",
-"8	c #040000",
-"9	c #03052E",
-"0	c #041212",
-"a	c #070300",
-"b	c #F2E713",
-"c	c #F9DE13",
-"d	c #36091E",
-"e	c #00001C",
-"f	c #1F0010",
-"g	c #FFF500",
-"h	c #DEDE00",
-"i	c #050A00",
-"j	c #FAF14A",
-"k	c #F5F200",
-"l	c #040404",
-"m	c #1A0D00",
-"n	c #EDE43D",
-"o	c #ECE007",
-"                ",
-"                ",
-"    .+@         ",
-"   #$%&*        ",
-"  =-;>,')       ",
-"  >!~{]^/       ",
-"  (_:<[}|       ",
-"   1234567      ",
-"    890abcd     ",
-"       efghi    ",
-"         >jkl   ",
-"          mnol  ",
-"           >kl  ",
-"            ll  ",
-"                ",
-"                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/NilClass.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/NilClass.xpm
deleted file mode 100644
index 3509f06..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/NilClass.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * False_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"       ...      ",
-"      .   .     ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"      .   .     ",
-"       ...      ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Numeric.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Numeric.xpm
deleted file mode 100644
index e071e2e..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/Numeric.xpm
+++ /dev/null
@@ -1,28 +0,0 @@
-/* XPM */
-static char * Numeric_xpm[] = {
-"16 16 9 1",
-" 	c None",
-".	c #FF0000",
-"+	c #0000FF",
-"@	c #0023DB",
-"#	c #00EA14",
-"$	c #00FF00",
-"%	c #004FAF",
-"&	c #0028D6",
-"*	c #00F20C",
-"                ",
-"                ",
-"                ",
-" ... +++@#$$$$  ",
-"   .+   %&   $$ ",
-"   .     +    $ ",
-"   .     +   $$ ",
-"   .    ++$$$$  ",
-"   .    +    $$ ",
-"   .   +      $ ",
-"   .  +       $ ",
-"   . +  $    $$ ",
-" .....++++*$$   ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/String.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/String.xpm
deleted file mode 100644
index f79a89c..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/String.xpm
+++ /dev/null
@@ -1,96 +0,0 @@
-/* XPM */
-static char * String_xpm[] = {
-"16 16 77 1",
-" 	c None",
-".	c #000000",
-"+	c #040404",
-"@	c #080806",
-"#	c #090606",
-"$	c #EEEAE1",
-"%	c #E7E3DA",
-"&	c #E0DBD1",
-"*	c #D4B46F",
-"=	c #0C0906",
-"-	c #E3C072",
-";	c #E4C072",
-">	c #060505",
-",	c #0B0A08",
-"'	c #D5B264",
-")	c #D3AF5A",
-"!	c #080602",
-"~	c #E1B863",
-"{	c #DDB151",
-"]	c #DBAE4A",
-"^	c #DDB152",
-"/	c #DDB252",
-"(	c #070705",
-"_	c #0C0A07",
-":	c #D3A33B",
-"<	c #020201",
-"[	c #DAAA41",
-"}	c #040302",
-"|	c #E4D9BF",
-"1	c #0B0907",
-"2	c #030201",
-"3	c #020200",
-"4	c #C99115",
-"5	c #080704",
-"6	c #DBC8A2",
-"7	c #E7D7B4",
-"8	c #E0CD9E",
-"9	c #080601",
-"0	c #040400",
-"a	c #010100",
-"b	c #0B0B08",
-"c	c #DCBF83",
-"d	c #DCBC75",
-"e	c #DEB559",
-"f	c #040301",
-"g	c #BC8815",
-"h	c #120E07",
-"i	c #060402",
-"j	c #0A0804",
-"k	c #D4A747",
-"l	c #D6A12F",
-"m	c #0E0C05",
-"n	c #C8C1B0",
-"o	c #1D1B15",
-"p	c #D7AD51",
-"q	c #070502",
-"r	c #080804",
-"s	c #BC953B",
-"t	c #C4BDAD",
-"u	c #0B0807",
-"v	c #DBAC47",
-"w	c #1B150A",
-"x	c #B78A2C",
-"y	c #D8A83C",
-"z	c #D4A338",
-"A	c #0F0B03",
-"B	c #181105",
-"C	c #C59325",
-"D	c #C18E1F",
-"E	c #060600",
-"F	c #CC992D",
-"G	c #B98B25",
-"H	c #B3831F",
-"I	c #C08C1C",
-"J	c #060500",
-"K	c #0E0C03",
-"L	c #0D0A00",
-"                ",
-"   .+@#         ",
-"  .$%&*=        ",
-" .-;>,')!       ",
-" .~.  .{].      ",
-" .^/. (_:<      ",
-"  .[.}|$12      ",
-"   345678}90    ",
-"    a2bcdefgh   ",
-"      ijkl.mno  ",
-"      <pq. rstu ",
-"      .]v.  wx= ",
-"       .yzABCDE ",
-"        .FGHIJ  ",
-"         0KL0   ",
-"                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/TrueClass.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/TrueClass.xpm
deleted file mode 100644
index 143eef4..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/TrueClass.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * TrueClass_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #0BF311",
-"                ",
-"                ",
-"                ",
-"   .........    ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/add/core.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/add/core.rb
deleted file mode 100644
index 5a56ed7..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/add/core.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-# This file contains implementations of ruby core's custom objects for
-# serialisation/deserialisation.
-
-unless Object.const_defined?(:JSON) and ::JSON.const_defined?(:JSON_LOADED) and
-  ::JSON::JSON_LOADED
-  require 'json'
-end
-require 'date'
-
-class Time
-  def self.json_create(object)
-    if usec = object.delete('u') # used to be tv_usec -> tv_nsec
-      object['n'] = usec * 1000
-    end
-    if respond_to?(:tv_nsec)
-      at(*object.values_at('s', 'n'))
-    else
-      at(object['s'], object['n'] / 1000)
-    end
-  end
-
-  def to_json(*args)
-    {
-      'json_class' => self.class.name,
-      's' => tv_sec,
-      'n' => respond_to?(:tv_nsec) ? tv_nsec : tv_usec * 1000
-    }.to_json(*args)
-  end
-end
-
-class Date
-  def self.json_create(object)
-    civil(*object.values_at('y', 'm', 'd', 'sg'))
-  end
-
-  alias start sg unless method_defined?(:start)
-
-  def to_json(*args)
-    {
-      'json_class' => self.class.name,
-      'y' => year,
-      'm' => month,
-      'd' => day,
-      'sg' => start,
-    }.to_json(*args)
-  end
-end
-
-class DateTime
-  def self.json_create(object)
-    args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
-    of_a, of_b = object['of'].split('/')
-    if of_b and of_b != '0'
-      args << Rational(of_a.to_i, of_b.to_i)
-    else
-      args << of_a
-    end
-    args << object['sg']
-    civil(*args)
-  end
-
-  alias start sg unless method_defined?(:start)
-
-  def to_json(*args)
-    {
-      'json_class' => self.class.name,
-      'y' => year,
-      'm' => month,
-      'd' => day,
-      'H' => hour,
-      'M' => min,
-      'S' => sec,
-      'of' => offset.to_s,
-      'sg' => start,
-    }.to_json(*args)
-  end
-end
-
-class Range
-  def self.json_create(object)
-    new(*object['a'])
-  end
-
-  def to_json(*args)
-    {
-      'json_class'   => self.class.name,
-      'a'         => [ first, last, exclude_end? ]
-    }.to_json(*args)
-  end
-end
-
-class Struct
-  def self.json_create(object)
-    new(*object['v'])
-  end
-
-  def to_json(*args)
-    klass = self.class.name
-    klass.empty? and raise JSON::JSONError, "Only named structs are supported!"
-    {
-      'json_class' => klass,
-      'v'     => values,
-    }.to_json(*args)
-  end
-end
-
-class Exception
-  def self.json_create(object)
-    result = new(object['m'])
-    result.set_backtrace object['b']
-    result
-  end
-
-  def to_json(*args)
-    {
-      'json_class' => self.class.name,
-      'm'   => message,
-      'b' => backtrace,
-    }.to_json(*args)
-  end
-end
-
-class Regexp
-  def self.json_create(object)
-    new(object['s'], object['o'])
-  end
-
-  def to_json(*)
-    {
-      'json_class' => self.class.name,
-      'o' => options,
-      's' => source,
-    }.to_json
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/add/rails.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/add/rails.rb
deleted file mode 100644
index e86ed1a..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/add/rails.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# This file contains implementations of rails custom objects for
-# serialisation/deserialisation.
-
-unless Object.const_defined?(:JSON) and ::JSON.const_defined?(:JSON_LOADED) and
-  ::JSON::JSON_LOADED
-  require 'json'
-end
-
-class Object
-  def self.json_create(object)
-    obj = new
-    for key, value in object
-      next if key == 'json_class'
-      instance_variable_set "@#{key}", value
-    end
-    obj
-  end
-
-  def to_json(*a)
-    result = {
-      'json_class' => self.class.name
-    }
-    instance_variables.inject(result) do |r, name|
-      r[name[1..-1]] = instance_variable_get name
-      r
-    end
-    result.to_json(*a)
-  end
-end
-
-class Symbol
-  def to_json(*a)
-    to_s.to_json(*a)
-  end
-end
-
-module Enumerable
-  def to_json(*a)
-    to_a.to_json(*a)
-  end
-end
-
-# class Regexp
-#   def to_json(*)
-#     inspect
-#   end
-# end
-#
-# The above rails definition has some problems:
-#
-# 1. { 'foo' => /bar/ }.to_json # => "{foo: /bar/}"
-#    This isn't valid JSON, because the regular expression syntax is not
-#    defined in RFC 4627. (And unquoted strings are disallowed there, too.)
-#    Though it is valid Javascript.
-#
-# 2. { 'foo' => /bar/mix }.to_json # => "{foo: /bar/mix}"
-#    This isn't even valid Javascript.
-
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/common.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/common.rb
deleted file mode 100644
index 499fcc0..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/common.rb
+++ /dev/null
@@ -1,354 +0,0 @@
-require 'json/version'
-
-module JSON
-  class << self
-    # If _object_ is string-like parse the string and return the parsed result
-    # as a Ruby data structure. Otherwise generate a JSON text from the Ruby
-    # data structure object and return it.
-    #
-    # The _opts_ argument is passed through to generate/parse respectively, see
-    # generate and parse for their documentation.
-    def [](object, opts = {})
-      if object.respond_to? :to_str
-        JSON.parse(object.to_str, opts => {})
-      else
-        JSON.generate(object, opts => {})
-      end
-    end
-
-    # Returns the JSON parser class, that is used by JSON. This might be either
-    # JSON::Ext::Parser or JSON::Pure::Parser.
-    attr_reader :parser
-
-    # Set the JSON parser class _parser_ to be used by JSON.
-    def parser=(parser) # :nodoc:
-      @parser = parser
-      remove_const :Parser if const_defined? :Parser
-      const_set :Parser, parser
-    end
-
-    # Return the constant located at _path_. The format of _path_ has to be
-    # either ::A::B::C or A::B::C. In any case A has to be located at the top
-    # level (absolute namespace path?). If there doesn't exist a constant at
-    # the given path, an ArgumentError is raised.
-    def deep_const_get(path) # :nodoc:
-      path = path.to_s
-      path.split(/::/).inject(Object) do |p, c|
-        case
-        when c.empty?             then p
-        when p.const_defined?(c)  then p.const_get(c)
-        else                      raise ArgumentError, "can't find const #{path}"
-        end
-      end
-    end
-
-    # Set the module _generator_ to be used by JSON.
-    def generator=(generator) # :nodoc:
-      @generator = generator
-      generator_methods = generator::GeneratorMethods
-      for const in generator_methods.constants
-        klass = deep_const_get(const)
-        modul = generator_methods.const_get(const)
-        klass.class_eval do
-          instance_methods(false).each do |m|
-            m.to_s == 'to_json' and remove_method m
-          end
-          include modul
-        end
-      end
-      self.state = generator::State
-      const_set :State, self.state
-    end
-
-    # Returns the JSON generator modul, that is used by JSON. This might be
-    # either JSON::Ext::Generator or JSON::Pure::Generator.
-    attr_reader :generator
-
-    # Returns the JSON generator state class, that is used by JSON. This might
-    # be either JSON::Ext::Generator::State or JSON::Pure::Generator::State.
-    attr_accessor :state
-
-    # This is create identifier, that is used to decide, if the _json_create_
-    # hook of a class should be called. It defaults to 'json_class'.
-    attr_accessor :create_id
-  end
-  self.create_id = 'json_class'
-
-  NaN           = (-1.0) ** 0.5
-
-  Infinity      = 1.0/0
-
-  MinusInfinity = -Infinity
-
-  # The base exception for JSON errors.
-  class JSONError < StandardError; end
-
-  # This exception is raised, if a parser error occurs.
-  class ParserError < JSONError; end
-
-  # This exception is raised, if the nesting of parsed datastructures is too
-  # deep.
-  class NestingError < ParserError; end
-
-  # This exception is raised, if a generator or unparser error occurs.
-  class GeneratorError < JSONError; end
-  # For backwards compatibility
-  UnparserError = GeneratorError
-
-  # If a circular data structure is encountered while unparsing
-  # this exception is raised.
-  class CircularDatastructure < GeneratorError; end
-
-  # This exception is raised, if the required unicode support is missing on the
-  # system. Usually this means, that the iconv library is not installed.
-  class MissingUnicodeSupport < JSONError; end
-
-  module_function
-
-  # Parse the JSON string _source_ into a Ruby data structure and return it.
-  #
-  # _opts_ can have the following
-  # keys:
-  # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
-  #   structures. Disable depth checking with :max_nesting => false, it defaults
-  #   to 19.
-  # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
-  #   defiance of RFC 4627 to be parsed by the Parser. This option defaults
-  #   to false.
-  # * *create_additions*: If set to false, the Parser doesn't create
-  #   additions even if a matchin class and create_id was found. This option
-  #   defaults to true.
-  def parse(source, opts = {})
-    JSON.parser.new(source, opts).parse
-  end
-
-  # Parse the JSON string _source_ into a Ruby data structure and return it.
-  # The bang version of the parse method, defaults to the more dangerous values
-  # for the _opts_ hash, so be sure only to parse trusted _source_ strings.
-  #
-  # _opts_ can have the following keys:
-  # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
-  #   structures. Enable depth checking with :max_nesting => anInteger. The parse!
-  #   methods defaults to not doing max depth checking: This can be dangerous,
-  #   if someone wants to fill up your stack.
-  # * *allow_nan*: If set to true, allow NaN, Infinity, and -Infinity in
-  #   defiance of RFC 4627 to be parsed by the Parser. This option defaults
-  #   to true.
-  # * *create_additions*: If set to false, the Parser doesn't create
-  #   additions even if a matchin class and create_id was found. This option
-  #   defaults to true.
-  def parse!(source, opts = {})
-    opts = {
-      :max_nesting => false,
-      :allow_nan => true
-    }.update(opts)
-    JSON.parser.new(source, opts).parse
-  end
-
-  # Unparse the Ruby data structure _obj_ into a single line JSON string and
-  # return it. _state_ is
-  # * a JSON::State object,
-  # * or a Hash like object (responding to to_hash),
-  # * an object convertible into a hash by a to_h method,
-  # that is used as or to configure a State object.
-  #
-  # It defaults to a state object, that creates the shortest possible JSON text
-  # in one line, checks for circular data structures and doesn't allow NaN,
-  # Infinity, and -Infinity.
-  #
-  # A _state_ hash can have the following keys:
-  # * *indent*: a string used to indent levels (default: ''),
-  # * *space*: a string that is put after, a : or , delimiter (default: ''),
-  # * *space_before*: a string that is put before a : pair delimiter (default: ''),
-  # * *object_nl*: a string that is put at the end of a JSON object (default: ''), 
-  # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
-  # * *check_circular*: true if checking for circular data structures
-  #   should be done (the default), false otherwise.
-  # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
-  #   generated, otherwise an exception is thrown, if these values are
-  #   encountered. This options defaults to false.
-  # * *max_nesting*: The maximum depth of nesting allowed in the data
-  #   structures from which JSON is to be generated. Disable depth checking
-  #   with :max_nesting => false, it defaults to 19.
-  #
-  # See also the fast_generate for the fastest creation method with the least
-  # amount of sanity checks, and the pretty_generate method for some
-  # defaults for a pretty output.
-  def generate(obj, state = nil)
-    if state
-      state = State.from_state(state)
-    else
-      state = State.new
-    end
-    obj.to_json(state)
-  end
-
-  # :stopdoc:
-  # I want to deprecate these later, so I'll first be silent about them, and
-  # later delete them.
-  alias unparse generate
-  module_function :unparse
-  # :startdoc:
-
-  # Unparse the Ruby data structure _obj_ into a single line JSON string and
-  # return it. This method disables the checks for circles in Ruby objects, and
-  # also generates NaN, Infinity, and, -Infinity float values.
-  #
-  # *WARNING*: Be careful not to pass any Ruby data structures with circles as
-  # _obj_ argument, because this will cause JSON to go into an infinite loop.
-  def fast_generate(obj)
-    obj.to_json(nil)
-  end
-
-  # :stopdoc:
-  # I want to deprecate these later, so I'll first be silent about them, and later delete them.
-  alias fast_unparse fast_generate
-  module_function :fast_unparse
-  # :startdoc:
-
-  # Unparse the Ruby data structure _obj_ into a JSON string and return it. The
-  # returned string is a prettier form of the string returned by #unparse.
-  #
-  # The _opts_ argument can be used to configure the generator, see the
-  # generate method for a more detailed explanation.
-  def pretty_generate(obj, opts = nil)
-    state = JSON.state.new(
-      :indent     => '  ',
-      :space      => ' ',
-      :object_nl  => "\n",
-      :array_nl   => "\n",
-      :check_circular => true
-    )
-    if opts
-      if opts.respond_to? :to_hash
-        opts = opts.to_hash
-      elsif opts.respond_to? :to_h
-        opts = opts.to_h
-      else
-        raise TypeError, "can't convert #{opts.class} into Hash"
-      end
-      state.configure(opts)
-    end
-    obj.to_json(state)
-  end
-
-  # :stopdoc:
-  # I want to deprecate these later, so I'll first be silent about them, and later delete them.
-  alias pretty_unparse pretty_generate
-  module_function :pretty_unparse
-  # :startdoc:
-
-  # Load a ruby data structure from a JSON _source_ and return it. A source can
-  # either be a string-like object, an IO like object, or an object responding
-  # to the read method. If _proc_ was given, it will be called with any nested
-  # Ruby object as an argument recursively in depth first order.
-  #
-  # This method is part of the implementation of the load/dump interface of
-  # Marshal and YAML.
-  def load(source, proc = nil)
-    if source.respond_to? :to_str
-      source = source.to_str
-    elsif source.respond_to? :to_io
-      source = source.to_io.read
-    else
-      source = source.read
-    end
-    result = parse(source, :max_nesting => false, :allow_nan => true)
-    recurse_proc(result, &proc) if proc
-    result
-  end
-
-  def recurse_proc(result, &proc)
-    case result
-    when Array
-      result.each { |x| recurse_proc x, &proc }
-      proc.call result
-    when Hash
-      result.each { |x, y| recurse_proc x, &proc; recurse_proc y, &proc }
-      proc.call result
-    else
-      proc.call result
-    end
-  end
-  private :recurse_proc
-  module_function :recurse_proc
-
-  alias restore load
-  module_function :restore
-
-  # Dumps _obj_ as a JSON string, i.e. calls generate on the object and returns
-  # the result.
-  #
-  # If anIO (an IO like object or an object that responds to the write method)
-  # was given, the resulting JSON is written to it.
-  #
-  # If the number of nested arrays or objects exceeds _limit_ an ArgumentError
-  # exception is raised. This argument is similar (but not exactly the
-  # same!) to the _limit_ argument in Marshal.dump.
-  #
-  # This method is part of the implementation of the load/dump interface of
-  # Marshal and YAML.
-  def dump(obj, anIO = nil, limit = nil)
-    if anIO and limit.nil?
-      anIO = anIO.to_io if anIO.respond_to?(:to_io)
-      unless anIO.respond_to?(:write)
-        limit = anIO
-        anIO = nil
-      end
-    end
-    limit ||= 0
-    result = generate(obj, :allow_nan => true, :max_nesting => limit)
-    if anIO
-      anIO.write result
-      anIO
-    else
-      result
-    end
-  rescue JSON::NestingError
-    raise ArgumentError, "exceed depth limit"
-  end
-end
-
-module ::Kernel
-  # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
-  # one line.
-  def j(*objs)
-    objs.each do |obj|
-      puts JSON::generate(obj, :allow_nan => true, :max_nesting => false)
-    end
-    nil
-  end
-
-  # Ouputs _objs_ to STDOUT as JSON strings in a pretty format, with
-  # indentation and over many lines.
-  def jj(*objs)
-    objs.each do |obj|
-      puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)
-    end
-    nil
-  end
-
-  # If _object_ is string-like parse the string and return the parsed result as
-  # a Ruby data structure. Otherwise generate a JSON text from the Ruby data
-  # structure object and return it.
-  #
-  # The _opts_ argument is passed through to generate/parse respectively, see
-  # generate and parse for their documentation.
-  def JSON(object, opts = {})
-    if object.respond_to? :to_str
-      JSON.parse(object.to_str, opts)
-    else
-      JSON.generate(object, opts)
-    end
-  end
-end
-
-class ::Class
-  # Returns true, if this class can be used to create an instance
-  # from a serialised JSON string. The class has to implement a class
-  # method _json_create_ that expects a hash as first parameter, which includes
-  # the required data.
-  def json_creatable?
-    respond_to?(:json_create)
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/editor.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/editor.rb
deleted file mode 100644
index 12a7f94..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/editor.rb
+++ /dev/null
@@ -1,1362 +0,0 @@
-# To use the GUI JSON editor, start the edit_json.rb executable script. It
-# requires ruby-gtk to be installed.
-
-require 'gtk2'
-require 'iconv'
-require 'json'
-require 'rbconfig'
-require 'open-uri'
-
-module JSON
-  module Editor
-    include Gtk
-
-    # Beginning of the editor window title
-    TITLE                 = 'JSON Editor'.freeze
-
-    # Columns constants
-    ICON_COL, TYPE_COL, CONTENT_COL = 0, 1, 2
-
-    # JSON primitive types (Containers)
-    CONTAINER_TYPES = %w[Array Hash].sort
-    # All JSON primitive types
-    ALL_TYPES = (%w[TrueClass FalseClass Numeric String NilClass] +
-                 CONTAINER_TYPES).sort
-
-    # The Nodes necessary for the tree representation of a JSON document
-    ALL_NODES = (ALL_TYPES + %w[Key]).sort
-
-    DEFAULT_DIALOG_KEY_PRESS_HANDLER = lambda do |dialog, event|
-      case event.keyval
-      when Gdk::Keyval::GDK_Return
-        dialog.response Dialog::RESPONSE_ACCEPT
-      when Gdk::Keyval::GDK_Escape
-        dialog.response Dialog::RESPONSE_REJECT
-      end
-    end
-
-    # Returns the Gdk::Pixbuf of the icon named _name_ from the icon cache.
-    def Editor.fetch_icon(name)
-      @icon_cache ||= {}
-      unless @icon_cache.key?(name)
-        path = File.dirname(__FILE__)
-        @icon_cache[name] = Gdk::Pixbuf.new(File.join(path, name + '.xpm'))
-      end
-     @icon_cache[name]
-    end
-
-    # Opens an error dialog on top of _window_ showing the error message
-    # _text_.
-    def Editor.error_dialog(window, text)
-      dialog = MessageDialog.new(window, Dialog::MODAL, 
-        MessageDialog::ERROR, 
-        MessageDialog::BUTTONS_CLOSE, text)
-      dialog.show_all
-      dialog.run
-    rescue TypeError
-      dialog = MessageDialog.new(Editor.window, Dialog::MODAL, 
-        MessageDialog::ERROR, 
-        MessageDialog::BUTTONS_CLOSE, text)
-      dialog.show_all
-      dialog.run
-    ensure
-      dialog.destroy if dialog
-    end
-
-    # Opens a yes/no question dialog on top of _window_ showing the error
-    # message _text_. If yes was answered _true_ is returned, otherwise
-    # _false_.
-    def Editor.question_dialog(window, text)
-      dialog = MessageDialog.new(window, Dialog::MODAL, 
-        MessageDialog::QUESTION, 
-        MessageDialog::BUTTONS_YES_NO, text)
-      dialog.show_all
-      dialog.run do |response|
-        return Gtk::Dialog::RESPONSE_YES === response
-      end
-    ensure
-      dialog.destroy if dialog
-    end
-
-    # Convert the tree model starting from Gtk::TreeIter _iter_ into a Ruby
-    # data structure and return it.
-    def Editor.model2data(iter)
-      return nil if iter.nil?
-      case iter.type
-      when 'Hash'
-        hash = {}
-        iter.each { |c| hash[c.content] = Editor.model2data(c.first_child) }
-        hash
-      when 'Array'
-        array = Array.new(iter.n_children)
-        iter.each_with_index { |c, i| array[i] = Editor.model2data(c) }
-        array
-      when 'Key'
-        iter.content
-      when 'String'
-        iter.content
-      when 'Numeric'
-        content = iter.content
-        if /\./.match(content)
-          content.to_f
-        else
-          content.to_i
-        end
-      when 'TrueClass'
-        true
-      when 'FalseClass'
-        false
-      when 'NilClass'
-        nil
-      else
-        fail "Unknown type found in model: #{iter.type}"
-      end
-    end
-
-    # Convert the Ruby data structure _data_ into tree model data for Gtk and
-    # returns the whole model. If the parameter _model_ wasn't given a new
-    # Gtk::TreeStore is created as the model. The _parent_ parameter specifies
-    # the parent node (iter, Gtk:TreeIter instance) to which the data is
-    # appended, alternativeley the result of the yielded block is used as iter.
-    def Editor.data2model(data, model = nil, parent = nil)
-      model ||= TreeStore.new(Gdk::Pixbuf, String, String)
-      iter = if block_given?
-        yield model
-      else
-        model.append(parent)
-      end
-      case data
-      when Hash
-        iter.type = 'Hash'
-        data.sort.each do |key, value|
-          pair_iter = model.append(iter)
-          pair_iter.type    = 'Key'
-          pair_iter.content = key.to_s
-          Editor.data2model(value, model, pair_iter)
-        end
-      when Array
-        iter.type = 'Array'
-        data.each do |value|
-          Editor.data2model(value, model, iter)
-        end
-      when Numeric
-        iter.type = 'Numeric'
-        iter.content = data.to_s
-      when String, true, false, nil
-        iter.type    = data.class.name
-        iter.content = data.nil? ? 'null' : data.to_s
-      else
-        iter.type    = 'String'
-        iter.content = data.to_s
-      end
-      model
-    end
-
-    # The Gtk::TreeIter class is reopened and some auxiliary methods are added.
-    class Gtk::TreeIter
-      include Enumerable
-
-      # Traverse each of this Gtk::TreeIter instance's children
-      # and yield to them.
-      def each
-        n_children.times { |i| yield nth_child(i) }
-      end
-
-      # Recursively traverse all nodes of this Gtk::TreeIter's subtree
-      # (including self) and yield to them.
-      def recursive_each(&block)
-        yield self
-        each do |i|
-          i.recursive_each(&block)
-        end
-      end
-
-      # Remove the subtree of this Gtk::TreeIter instance from the
-      # model _model_.
-      def remove_subtree(model)
-        while current = first_child
-          model.remove(current)
-        end
-      end
-
-      # Returns the type of this node.
-      def type
-        self[TYPE_COL]
-      end
-
-      # Sets the type of this node to _value_. This implies setting
-      # the respective icon accordingly.
-      def type=(value)
-        self[TYPE_COL] = value
-        self[ICON_COL] = Editor.fetch_icon(value)
-      end
-
-      # Returns the content of this node.
-      def content
-        self[CONTENT_COL]
-      end
-
-      # Sets the content of this node to _value_.
-      def content=(value)
-        self[CONTENT_COL] = value
-      end
-    end
-
-    # This module bundles some method, that can be used to create a menu. It
-    # should be included into the class in question.
-    module MenuExtension
-      include Gtk
-
-      # Creates a Menu, that includes MenuExtension. _treeview_ is the
-      # Gtk::TreeView, on which it operates.
-      def initialize(treeview)
-        @treeview = treeview
-        @menu = Menu.new
-      end
-
-      # Returns the Gtk::TreeView of this menu.
-      attr_reader :treeview
-
-      # Returns the menu.
-      attr_reader :menu
-
-      # Adds a Gtk::SeparatorMenuItem to this instance's #menu.
-      def add_separator
-        menu.append SeparatorMenuItem.new
-      end
-
-      # Adds a Gtk::MenuItem to this instance's #menu. _label_ is the label
-      # string, _klass_ is the item type, and _callback_ is the procedure, that
-      # is called if the _item_ is activated.
-      def add_item(label, keyval = nil, klass = MenuItem, &callback)
-        label = "#{label} (C-#{keyval.chr})" if keyval
-        item = klass.new(label)
-        item.signal_connect(:activate, &callback)
-        if keyval
-          self.signal_connect(:'key-press-event') do |item, event|
-            if event.state & Gdk::Window::ModifierType::CONTROL_MASK != 0 and
-              event.keyval == keyval
-              callback.call item
-            end
-          end
-        end
-        menu.append item
-        item
-      end
-
-      # This method should be implemented in subclasses to create the #menu of
-      # this instance. It has to be called after an instance of this class is
-      # created, to build the menu.
-      def create
-        raise NotImplementedError
-      end
-
-      def method_missing(*a, &b)
-        treeview.__send__(*a, &b)
-      end
-    end
-
-    # This class creates the popup menu, that opens when clicking onto the
-    # treeview.
-    class PopUpMenu
-      include MenuExtension
-
-      # Change the type or content of the selected node.
-      def change_node(item)
-        if current = selection.selected
-          parent = current.parent
-          old_type, old_content = current.type, current.content
-          if ALL_TYPES.include?(old_type)
-            @clipboard_data = Editor.model2data(current)
-            type, content = ask_for_element(parent, current.type,
-              current.content)
-            if type
-              current.type, current.content = type, content
-              current.remove_subtree(model)
-              toplevel.display_status("Changed a node in tree.")
-              window.change
-            end
-          else
-            toplevel.display_status(
-              "Cannot change node of type #{old_type} in tree!")
-          end
-        end
-      end
-
-      # Cut the selected node and its subtree, and save it into the
-      # clipboard.
-      def cut_node(item)
-        if current = selection.selected
-          if current and current.type == 'Key'
-            @clipboard_data = {
-              current.content => Editor.model2data(current.first_child)
-            }
-          else
-            @clipboard_data = Editor.model2data(current)
-          end
-          model.remove(current)
-          window.change
-          toplevel.display_status("Cut a node from tree.")
-        end
-      end
-
-      # Copy the selected node and its subtree, and save it into the
-      # clipboard.
-      def copy_node(item)
-        if current = selection.selected
-          if current and current.type == 'Key'
-            @clipboard_data = {
-              current.content => Editor.model2data(current.first_child)
-            }
-          else
-            @clipboard_data = Editor.model2data(current)
-          end
-          window.change
-          toplevel.display_status("Copied a node from tree.")
-        end
-      end
-
-      # Paste the data in the clipboard into the selected Array or Hash by
-      # appending it.
-      def paste_node_appending(item)
-        if current = selection.selected
-          if @clipboard_data
-            case current.type
-            when 'Array'
-              Editor.data2model(@clipboard_data, model, current)
-              expand_collapse(current)
-            when 'Hash'
-              if @clipboard_data.is_a? Hash
-                parent = current.parent
-                hash = Editor.model2data(current)
-                model.remove(current)
-                hash.update(@clipboard_data)
-                Editor.data2model(hash, model, parent)
-                if parent
-                  expand_collapse(parent)
-                elsif @expanded
-                  expand_all
-                end
-                window.change
-              else
-                toplevel.display_status(
-                  "Cannot paste non-#{current.type} data into '#{current.type}'!")
-              end
-            else
-              toplevel.display_status(
-                "Cannot paste node below '#{current.type}'!")
-            end
-          else
-            toplevel.display_status("Nothing to paste in clipboard!")
-          end
-        else
-            toplevel.display_status("Append a node into the root first!")
-        end
-      end
-
-      # Paste the data in the clipboard into the selected Array inserting it
-      # before the selected element.
-      def paste_node_inserting_before(item)
-        if current = selection.selected
-          if @clipboard_data
-            parent = current.parent or return
-            parent_type = parent.type
-            if parent_type == 'Array'
-              selected_index = parent.each_with_index do |c, i|
-                break i if c == current
-              end
-              Editor.data2model(@clipboard_data, model, parent) do |m|
-                m.insert_before(parent, current)
-              end
-              expand_collapse(current)
-              toplevel.display_status("Inserted an element to " +
-                "'#{parent_type}' before index #{selected_index}.")
-              window.change
-            else
-              toplevel.display_status(
-                "Cannot insert node below '#{parent_type}'!")
-            end
-          else
-            toplevel.display_status("Nothing to paste in clipboard!")
-          end
-        else
-            toplevel.display_status("Append a node into the root first!")
-        end
-      end
-
-      # Append a new node to the selected Hash or Array.
-      def append_new_node(item)
-        if parent = selection.selected
-          parent_type = parent.type
-          case parent_type
-          when 'Hash'
-            key, type, content = ask_for_hash_pair(parent)
-            key or return
-            iter = create_node(parent, 'Key', key)
-            iter = create_node(iter, type, content)
-            toplevel.display_status(
-              "Added a (key, value)-pair to '#{parent_type}'.")
-            window.change
-          when 'Array'
-            type, content = ask_for_element(parent)
-            type or return
-            iter = create_node(parent, type, content)
-            window.change
-            toplevel.display_status("Appendend an element to '#{parent_type}'.")
-          else
-            toplevel.display_status("Cannot append to '#{parent_type}'!")
-          end
-        else
-          type, content = ask_for_element
-          type or return
-          iter = create_node(nil, type, content)
-          window.change
-        end
-      end
-
-      # Insert a new node into an Array before the selected element.
-      def insert_new_node(item)
-        if current = selection.selected
-          parent = current.parent or return
-          parent_parent = parent.parent
-          parent_type = parent.type
-          if parent_type == 'Array'
-            selected_index = parent.each_with_index do |c, i|
-              break i if c == current
-            end
-            type, content = ask_for_element(parent)
-            type or return
-            iter = model.insert_before(parent, current)
-            iter.type, iter.content = type, content
-            toplevel.display_status("Inserted an element to " +
-              "'#{parent_type}' before index #{selected_index}.")
-            window.change
-          else
-            toplevel.display_status(
-              "Cannot insert node below '#{parent_type}'!")
-          end
-        else
-            toplevel.display_status("Append a node into the root first!")
-        end
-      end
-
-      # Recursively collapse/expand a subtree starting from the selected node.
-      def collapse_expand(item)
-        if current = selection.selected
-          if row_expanded?(current.path)
-            collapse_row(current.path)
-          else
-            expand_row(current.path, true)
-          end
-        else
-            toplevel.display_status("Append a node into the root first!")
-        end
-      end
-
-      # Create the menu.
-      def create
-        add_item("Change node", ?n, &method(:change_node))
-        add_separator
-        add_item("Cut node", ?X, &method(:cut_node))
-        add_item("Copy node", ?C, &method(:copy_node))
-        add_item("Paste node (appending)", ?A, &method(:paste_node_appending))
-        add_item("Paste node (inserting before)", ?I,
-          &method(:paste_node_inserting_before))
-        add_separator
-        add_item("Append new node", ?a, &method(:append_new_node))
-        add_item("Insert new node before", ?i, &method(:insert_new_node))
-        add_separator 
-        add_item("Collapse/Expand node (recursively)", ?e,
-          &method(:collapse_expand))
-
-        menu.show_all
-        signal_connect(:button_press_event) do |widget, event|
-          if event.kind_of? Gdk::EventButton and event.button == 3
-            menu.popup(nil, nil, event.button, event.time)
-          end
-        end
-        signal_connect(:popup_menu) do
-          menu.popup(nil, nil, 0, Gdk::Event::CURRENT_TIME)
-        end
-      end
-    end
-
-    # This class creates the File pulldown menu.
-    class FileMenu
-      include MenuExtension
-
-      # Clear the model and filename, but ask to save the JSON document, if
-      # unsaved changes have occured.
-      def new(item)
-        window.clear
-      end
-
-      # Open a file and load it into the editor. Ask to save the JSON document
-      # first, if unsaved changes have occured.
-      def open(item)
-        window.file_open
-      end
-
-      def open_location(item)
-        window.location_open
-      end
-
-      # Revert the current JSON document in the editor to the saved version.
-      def revert(item)
-        window.instance_eval do
-          @filename and file_open(@filename) 
-        end
-      end
-
-      # Save the current JSON document.
-      def save(item)
-        window.file_save
-      end
-
-      # Save the current JSON document under the given filename.
-      def save_as(item)
-        window.file_save_as
-      end
-
-      # Quit the editor, after asking to save any unsaved changes first.
-      def quit(item)
-        window.quit
-      end
-
-      # Create the menu.
-      def create
-        title = MenuItem.new('File')
-        title.submenu = menu
-        add_item('New', &method(:new))
-        add_item('Open', ?o, &method(:open))
-        add_item('Open location', ?l, &method(:open_location))
-        add_item('Revert', &method(:revert))
-        add_separator
-        add_item('Save', ?s, &method(:save))
-        add_item('Save As', ?S, &method(:save_as))
-        add_separator
-        add_item('Quit', ?q, &method(:quit))
-        title
-      end
-    end
-
-    # This class creates the Edit pulldown menu.
-    class EditMenu
-      include MenuExtension
-
-      # Copy data from model into primary clipboard.
-      def copy(item)
-        data = Editor.model2data(model.iter_first)
-        json = JSON.pretty_generate(data, :max_nesting => false)
-        c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
-        c.text = json
-      end
-
-      # Copy json text from primary clipboard into model.
-      def paste(item)
-        c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
-        if json = c.wait_for_text
-          window.ask_save if @changed
-          begin
-            window.edit json
-          rescue JSON::ParserError
-            window.clear
-          end
-        end
-      end
-
-      # Find a string in all nodes' contents and select the found node in the
-      # treeview.
-      def find(item)
-        @search = ask_for_find_term(@search) or return
-        iter = model.get_iter('0') or return
-        iter.recursive_each do |i|
-          if @iter
-            if @iter != i
-              next
-            else
-              @iter = nil
-              next
-            end
-          elsif @search.match(i[CONTENT_COL])
-             set_cursor(i.path, nil, false)
-             @iter = i
-             break
-          end
-        end
-      end
-
-      # Repeat the last search given by #find.
-      def find_again(item)
-        @search or return
-        iter = model.get_iter('0')
-        iter.recursive_each do |i|
-          if @iter
-            if @iter != i
-              next
-            else
-              @iter = nil
-              next
-            end
-          elsif @search.match(i[CONTENT_COL])
-             set_cursor(i.path, nil, false)
-             @iter = i
-             break
-          end
-        end
-      end
-
-      # Sort (Reverse sort) all elements of the selected array by the given
-      # expression. _x_ is the element in question.
-      def sort(item)
-        if current = selection.selected
-          if current.type == 'Array'
-            parent = current.parent
-            ary = Editor.model2data(current)
-            order, reverse = ask_for_order
-            order or return
-            begin
-              block = eval "lambda { |x| #{order} }"
-              if reverse
-                ary.sort! { |a,b| block[b] <=> block[a] }
-              else
-                ary.sort! { |a,b| block[a] <=> block[b] }
-              end
-            rescue => e
-              Editor.error_dialog(self, "Failed to sort Array with #{order}: #{e}!")
-            else
-              Editor.data2model(ary, model, parent) do |m|
-                m.insert_before(parent, current)
-              end
-              model.remove(current)
-              expand_collapse(parent)
-              window.change
-              toplevel.display_status("Array has been sorted.")
-            end
-          else
-            toplevel.display_status("Only Array nodes can be sorted!")
-          end
-        else
-            toplevel.display_status("Select an Array to sort first!")
-        end
-      end
-
-      # Create the menu.
-      def create
-        title = MenuItem.new('Edit')
-        title.submenu = menu
-        add_item('Copy', ?c, &method(:copy))
-        add_item('Paste', ?v, &method(:paste))
-        add_separator
-        add_item('Find', ?f, &method(:find))
-        add_item('Find Again', ?g, &method(:find_again))
-        add_separator
-        add_item('Sort', ?S, &method(:sort))
-        title
-      end
-    end
-
-    class OptionsMenu
-      include MenuExtension
-
-      # Collapse/Expand all nodes by default.
-      def collapsed_nodes(item)
-        if expanded
-          self.expanded = false
-          collapse_all
-        else
-          self.expanded = true
-          expand_all 
-        end
-      end
-
-      # Toggle pretty saving mode on/off.
-      def pretty_saving(item)
-        @pretty_item.toggled
-        window.change
-      end
-
-      attr_reader :pretty_item
-
-      # Create the menu.
-      def create
-        title = MenuItem.new('Options')
-        title.submenu = menu
-        add_item('Collapsed nodes', nil, CheckMenuItem, &method(:collapsed_nodes))
-        @pretty_item = add_item('Pretty saving', nil, CheckMenuItem,
-          &method(:pretty_saving))
-        @pretty_item.active = true
-        window.unchange
-        title
-      end
-    end
-
-    # This class inherits from Gtk::TreeView, to configure it and to add a lot
-    # of behaviour to it.
-    class JSONTreeView < Gtk::TreeView
-      include Gtk
-
-      # Creates a JSONTreeView instance, the parameter _window_ is
-      # a MainWindow instance and used for self delegation.
-      def initialize(window)
-        @window = window
-        super(TreeStore.new(Gdk::Pixbuf, String, String))
-        self.selection.mode = SELECTION_BROWSE
-
-        @expanded = false
-        self.headers_visible = false
-        add_columns
-        add_popup_menu
-      end
-
-      # Returns the MainWindow instance of this JSONTreeView.
-      attr_reader :window
-
-      # Returns true, if nodes are autoexpanding, false otherwise.
-      attr_accessor :expanded
-
-      private
-
-      def add_columns
-        cell = CellRendererPixbuf.new
-        column = TreeViewColumn.new('Icon', cell,
-          'pixbuf'      => ICON_COL
-        )
-        append_column(column)
-
-        cell = CellRendererText.new
-        column = TreeViewColumn.new('Type', cell,
-          'text'      => TYPE_COL
-        )
-        append_column(column)
-
-        cell = CellRendererText.new
-        cell.editable = true
-        column = TreeViewColumn.new('Content', cell,
-          'text'       => CONTENT_COL
-        )
-        cell.signal_connect(:edited, &method(:cell_edited))
-        append_column(column)
-      end
-
-      def unify_key(iter, key)
-        return unless iter.type == 'Key'
-        parent = iter.parent
-        if parent.any? { |c| c != iter and c.content == key }
-          old_key = key
-          i = 0
-          begin
-            key = sprintf("%s.%d", old_key, i += 1)
-          end while parent.any? { |c| c != iter and c.content == key }
-        end
-        iter.content = key
-      end
-
-      def cell_edited(cell, path, value)
-        iter = model.get_iter(path)
-        case iter.type
-        when 'Key'
-          unify_key(iter, value)
-          toplevel.display_status('Key has been changed.')
-        when 'FalseClass'
-          value.downcase!
-          if value == 'true'
-            iter.type, iter.content = 'TrueClass', 'true'
-          end
-        when 'TrueClass'
-          value.downcase!
-          if value == 'false'
-            iter.type, iter.content = 'FalseClass', 'false'
-          end
-        when 'Numeric'
-          iter.content = (Integer(value) rescue Float(value) rescue 0).to_s
-        when 'String'
-          iter.content = value
-        when 'Hash', 'Array'
-          return
-        else
-          fail "Unknown type found in model: #{iter.type}"
-        end
-        window.change
-      end
-
-      def configure_value(value, type)
-        value.editable = false
-        case type
-        when 'Array', 'Hash'
-          value.text = ''
-        when 'TrueClass'
-          value.text = 'true'
-        when 'FalseClass'
-          value.text = 'false'
-        when 'NilClass'
-          value.text = 'null'
-        when 'Numeric', 'String'
-          value.text ||= ''
-          value.editable = true
-        else
-          raise ArgumentError, "unknown type '#{type}' encountered"
-        end
-      end
-
-      def add_popup_menu
-        menu = PopUpMenu.new(self)
-        menu.create
-      end
-
-      public
-
-      # Create a _type_ node with content _content_, and add it to _parent_
-      # in the model. If _parent_ is nil, create a new model and put it into
-      # the editor treeview.
-      def create_node(parent, type, content)
-        iter = if parent
-          model.append(parent)
-        else
-          new_model = Editor.data2model(nil)
-          toplevel.view_new_model(new_model)
-          new_model.iter_first
-        end
-        iter.type, iter.content = type, content
-        expand_collapse(parent) if parent
-        iter
-      end
-
-      # Ask for a hash key, value pair to be added to the Hash node _parent_.
-      def ask_for_hash_pair(parent)
-        key_input = type_input = value_input = nil
-
-        dialog = Dialog.new("New (key, value) pair for Hash", nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        dialog.width_request = 640
-
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Key:"), false)
-        hbox.pack_start(key_input = Entry.new)
-        key_input.text = @key || ''
-        dialog.vbox.pack_start(hbox, false)
-        key_input.signal_connect(:activate) do
-          if parent.any? { |c| c.content == key_input.text }
-            toplevel.display_status('Key already exists in Hash!')
-            key_input.text = ''
-          else
-            toplevel.display_status('Key has been changed.')
-          end
-        end
-
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Type:"), false)
-        hbox.pack_start(type_input = ComboBox.new(true))
-        ALL_TYPES.each { |t| type_input.append_text(t) }
-        type_input.active = @type || 0
-        dialog.vbox.pack_start(hbox, false)
-
-        type_input.signal_connect(:changed) do
-          value_input.editable = false
-          case ALL_TYPES[type_input.active]
-          when 'Array', 'Hash'
-            value_input.text = ''
-          when 'TrueClass'
-            value_input.text = 'true'
-          when 'FalseClass'
-            value_input.text = 'false'
-          when 'NilClass'
-            value_input.text = 'null'
-          else
-            value_input.text = ''
-            value_input.editable = true
-          end
-        end
-
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Value:"), false)
-        hbox.pack_start(value_input = Entry.new)
-        value_input.width_chars = 60
-        value_input.text = @value || ''
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        self.focus = dialog
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            @key = key_input.text
-            type = ALL_TYPES[@type = type_input.active]
-            content = value_input.text
-            return @key, type, content
-          end
-        end
-        return
-      ensure
-        dialog.destroy
-      end
-
-      # Ask for an element to be appended _parent_.
-      def ask_for_element(parent = nil, default_type = nil, value_text = @content)
-        type_input = value_input = nil
-
-        dialog = Dialog.new(
-          "New element into #{parent ? parent.type : 'root'}",
-          nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Type:"), false)
-        hbox.pack_start(type_input = ComboBox.new(true))
-        default_active = 0
-        types = parent ? ALL_TYPES : CONTAINER_TYPES
-        types.each_with_index do |t, i|
-          type_input.append_text(t)
-          if t == default_type
-            default_active = i
-          end
-        end
-        type_input.active = default_active
-        dialog.vbox.pack_start(hbox, false)
-        type_input.signal_connect(:changed) do
-          configure_value(value_input, types[type_input.active])
-        end
-
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Value:"), false)
-        hbox.pack_start(value_input = Entry.new)
-        value_input.width_chars = 60
-        value_input.text = value_text if value_text
-        configure_value(value_input, types[type_input.active])
-
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        self.focus = dialog
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            type = types[type_input.active]
-            @content = case type
-            when 'Numeric'
-              Integer(value_input.text) rescue Float(value_input.text) rescue 0
-            else
-              value_input.text
-            end.to_s
-            return type, @content
-          end
-        end
-        return
-      ensure
-        dialog.destroy if dialog
-      end
-
-      # Ask for an order criteria for sorting, using _x_ for the element in
-      # question. Returns the order criterium, and true/false for reverse
-      # sorting.
-      def ask_for_order
-        dialog = Dialog.new(
-          "Give an order criterium for 'x'.",
-          nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        hbox = HBox.new(false, 5)
-
-        hbox.pack_start(Label.new("Order:"), false)
-        hbox.pack_start(order_input = Entry.new)
-        order_input.text = @order || 'x'
-        order_input.width_chars = 60
-
-        hbox.pack_start(reverse_checkbox = CheckButton.new('Reverse'), false)
-
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        self.focus = dialog
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            return @order = order_input.text, reverse_checkbox.active?
-          end
-        end
-        return
-      ensure
-        dialog.destroy if dialog
-      end
-
-      # Ask for a find term to search for in the tree. Returns the term as a
-      # string.
-      def ask_for_find_term(search = nil)
-        dialog = Dialog.new(
-          "Find a node matching regex in tree.",
-          nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        hbox = HBox.new(false, 5)
-
-        hbox.pack_start(Label.new("Regex:"), false)
-        hbox.pack_start(regex_input = Entry.new)
-        hbox.pack_start(icase_checkbox = CheckButton.new('Icase'), false)
-        regex_input.width_chars = 60
-        if search
-          regex_input.text = search.source
-          icase_checkbox.active = search.casefold?
-        end
-
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        self.focus = dialog
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            begin
-              return Regexp.new(regex_input.text, icase_checkbox.active? ? Regexp::IGNORECASE : 0)
-            rescue => e
-              Editor.error_dialog(self, "Evaluation of regex /#{regex_input.text}/ failed: #{e}!")
-              return
-            end
-          end
-        end
-        return
-      ensure
-        dialog.destroy if dialog
-      end
-
-      # Expand or collapse row pointed to by _iter_ according
-      # to the #expanded attribute.
-      def expand_collapse(iter)
-        if expanded
-          expand_row(iter.path, true)
-        else
-          collapse_row(iter.path)
-        end
-      end
-    end
-
-    # The editor main window
-    class MainWindow < Gtk::Window
-      include Gtk
-
-      def initialize(encoding)
-        @changed  = false
-        @encoding = encoding
-        super(TOPLEVEL)
-        display_title
-        set_default_size(800, 600)
-        signal_connect(:delete_event) { quit }
-
-        vbox = VBox.new(false, 0)
-        add(vbox)
-        #vbox.border_width = 0
-
-        @treeview = JSONTreeView.new(self)
-        @treeview.signal_connect(:'cursor-changed') do
-          display_status('')
-        end
-
-        menu_bar = create_menu_bar
-        vbox.pack_start(menu_bar, false, false, 0)
-
-        sw = ScrolledWindow.new(nil, nil)
-        sw.shadow_type = SHADOW_ETCHED_IN
-        sw.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
-        vbox.pack_start(sw, true, true, 0)
-        sw.add(@treeview)
-
-        @status_bar = Statusbar.new
-        vbox.pack_start(@status_bar, false, false, 0)
-
-        @filename ||= nil
-        if @filename
-          data = read_data(@filename)
-          view_new_model Editor.data2model(data)
-        end
-
-        signal_connect(:button_release_event) do |_,event|
-          if event.button == 2
-            c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
-            if url = c.wait_for_text
-              location_open url
-            end
-            false
-          else
-            true
-          end
-        end
-      end
-
-      # Creates the menu bar with the pulldown menus and returns it.
-      def create_menu_bar
-        menu_bar = MenuBar.new
-        @file_menu = FileMenu.new(@treeview)
-        menu_bar.append @file_menu.create
-        @edit_menu = EditMenu.new(@treeview)
-        menu_bar.append @edit_menu.create
-        @options_menu = OptionsMenu.new(@treeview)
-        menu_bar.append @options_menu.create
-        menu_bar
-      end
-
-      # Sets editor status to changed, to indicate that the edited data
-      # containts unsaved changes.
-      def change
-        @changed = true
-        display_title
-      end
-
-      # Sets editor status to unchanged, to indicate that the edited data
-      # doesn't containt unsaved changes.
-      def unchange
-        @changed = false
-        display_title
-      end
-
-      # Puts a new model _model_ into the Gtk::TreeView to be edited.
-      def view_new_model(model)
-        @treeview.model     = model
-        @treeview.expanded  = true
-        @treeview.expand_all
-        unchange
-      end
-
-      # Displays _text_ in the status bar.
-      def display_status(text)
-        @cid ||= nil
-        @status_bar.pop(@cid) if @cid
-        @cid = @status_bar.get_context_id('dummy')
-        @status_bar.push(@cid, text)
-      end
-
-      # Opens a dialog, asking, if changes should be saved to a file.
-      def ask_save
-        if Editor.question_dialog(self,
-          "Unsaved changes to JSON model. Save?")
-          if @filename
-            file_save
-          else
-            file_save_as
-          end
-        end
-      end
-
-      # Quit this editor, that is, leave this editor's main loop.
-      def quit
-        ask_save if @changed
-        if Gtk.main_level > 0
-          destroy
-          Gtk.main_quit
-        end
-        nil
-      end
-
-      # Display the new title according to the editor's current state.
-      def display_title
-        title = TITLE.dup
-        title << ": #@filename" if @filename
-        title << " *" if @changed
-        self.title = title
-      end
-
-      # Clear the current model, after asking to save all unsaved changes.
-      def clear
-        ask_save if @changed
-        @filename = nil
-        self.view_new_model nil
-      end
-
-      def check_pretty_printed(json)
-        pretty = !!((nl_index = json.index("\n")) && nl_index != json.size - 1)
-        @options_menu.pretty_item.active = pretty
-      end
-      private :check_pretty_printed
-
-      # Open the data at the location _uri_, if given. Otherwise open a dialog
-      # to ask for the _uri_.
-      def location_open(uri = nil)
-        uri = ask_for_location unless uri
-        uri or return
-        ask_save if @changed
-        data = load_location(uri) or return
-        view_new_model Editor.data2model(data)
-      end
-
-      # Open the file _filename_ or call the #select_file method to ask for a
-      # filename.
-      def file_open(filename = nil)
-        filename = select_file('Open as a JSON file') unless filename
-        data = load_file(filename) or return
-        view_new_model Editor.data2model(data)
-      end
-
-      # Edit the string _json_ in the editor.
-      def edit(json)
-        if json.respond_to? :read
-          json = json.read
-        end
-        data = parse_json json
-        view_new_model Editor.data2model(data)
-      end
-
-      # Save the current file.
-      def file_save
-        if @filename
-          store_file(@filename)
-        else
-          file_save_as
-        end
-      end
-
-      # Save the current file as the filename 
-      def file_save_as
-        filename = select_file('Save as a JSON file')
-        store_file(filename)
-      end
-
-      # Store the current JSON document to _path_.
-      def store_file(path)
-        if path
-          data = Editor.model2data(@treeview.model.iter_first)
-          File.open(path + '.tmp', 'wb') do |output|
-            data or break
-            if @options_menu.pretty_item.active?
-              output.puts JSON.pretty_generate(data, :max_nesting => false)
-            else
-              output.write JSON.generate(data, :max_nesting => false)
-            end
-          end
-          File.rename path + '.tmp', path
-          @filename = path
-          toplevel.display_status("Saved data to '#@filename'.")
-          unchange
-        end
-      rescue SystemCallError => e
-        Editor.error_dialog(self, "Failed to store JSON file: #{e}!")
-      end
-  
-      # Load the file named _filename_ into the editor as a JSON document.
-      def load_file(filename)
-        if filename
-          if File.directory?(filename)
-            Editor.error_dialog(self, "Try to select a JSON file!")
-            nil
-          else
-            @filename = filename
-            if data = read_data(filename)
-              toplevel.display_status("Loaded data from '#@filename'.")
-            end
-            display_title
-            data
-          end
-        end
-      end
-
-      # Load the data at location _uri_ into the editor as a JSON document.
-      def load_location(uri)
-        data = read_data(uri) or return
-        @filename = nil
-        toplevel.display_status("Loaded data from '#{uri}'.")
-        display_title
-        data
-      end
-
-      def parse_json(json)
-        check_pretty_printed(json)
-        if @encoding && !/^utf8$/i.match(@encoding)
-          iconverter = Iconv.new('utf8', @encoding)
-          json = iconverter.iconv(json)
-        end
-        JSON::parse(json, :max_nesting => false, :create_additions => false)
-      end
-      private :parse_json
-
-      # Read a JSON document from the file named _filename_, parse it into a
-      # ruby data structure, and return the data.
-      def read_data(filename)
-        open(filename) do |f|
-          json = f.read
-          return parse_json(json)
-        end
-      rescue => e
-        Editor.error_dialog(self, "Failed to parse JSON file: #{e}!")
-        return
-      end
-
-      # Open a file selecton dialog, displaying _message_, and return the
-      # selected filename or nil, if no file was selected.
-      def select_file(message)
-        filename = nil
-        fs = FileSelection.new(message)
-        fs.set_modal(true)
-        @default_dir = File.join(Dir.pwd, '') unless @default_dir
-        fs.set_filename(@default_dir)
-        fs.set_transient_for(self)
-        fs.signal_connect(:destroy) { Gtk.main_quit }
-        fs.ok_button.signal_connect(:clicked) do
-          filename = fs.filename
-          @default_dir = File.join(File.dirname(filename), '')
-          fs.destroy
-          Gtk.main_quit
-        end
-        fs.cancel_button.signal_connect(:clicked) do
-          fs.destroy
-          Gtk.main_quit
-        end
-        fs.show_all
-        Gtk.main
-        filename
-      end
-
-      # Ask for location URI a to load data from. Returns the URI as a string.
-      def ask_for_location
-        dialog = Dialog.new(
-          "Load data from location...",
-          nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        hbox = HBox.new(false, 5)
-
-        hbox.pack_start(Label.new("Location:"), false)
-        hbox.pack_start(location_input = Entry.new)
-        location_input.width_chars = 60
-        location_input.text = @location || ''
-
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            return @location = location_input.text
-          end
-        end
-        return
-      ensure
-        dialog.destroy if dialog
-      end
-    end
-
-    class << self
-      # Starts a JSON Editor. If a block was given, it yields
-      # to the JSON::Editor::MainWindow instance.
-      def start(encoding = 'utf8') # :yield: window
-        Gtk.init
-        @window = Editor::MainWindow.new(encoding)
-        @window.icon_list = [ Editor.fetch_icon('json') ]
-        yield @window if block_given?
-        @window.show_all
-        Gtk.main
-      end
-
-      # Edit the string _json_ with encoding _encoding_ in the editor.
-      def edit(json, encoding = 'utf8')
-        start(encoding) do |window|
-          window.edit json
-        end
-      end
-
-      attr_reader :window
-    end
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/ext.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/ext.rb
deleted file mode 100644
index ff4fa42..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/ext.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'json/common'
-
-module JSON
-  # This module holds all the modules/classes that implement JSON's
-  # functionality as C extensions.
-  module Ext
-    require 'json/ext/parser'
-    require 'json/ext/generator'
-    $DEBUG and warn "Using c extension for JSON."
-    JSON.parser = Parser
-    JSON.generator = Generator
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/json.xpm b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/json.xpm
deleted file mode 100644
index 2cb626b..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/json.xpm
+++ /dev/null
@@ -1,1499 +0,0 @@
-/* XPM */
-static char * json_xpm[] = {
-"64 64 1432 2",
-"  	c None",
-". 	c #641839",
-"+ 	c #CF163C",
-"@ 	c #D31C3B",
-"# 	c #E11A38",
-"$ 	c #5F242D",
-"% 	c #320C22",
-"& 	c #9B532D",
-"* 	c #F32E34",
-"= 	c #820F33",
-"- 	c #4B0F34",
-"; 	c #8E1237",
-"> 	c #944029",
-", 	c #961325",
-"' 	c #A00C24",
-") 	c #872C23",
-"! 	c #694021",
-"~ 	c #590D1F",
-"{ 	c #420528",
-"] 	c #D85A2D",
-"^ 	c #7E092B",
-"/ 	c #0E0925",
-"( 	c #0D081F",
-"_ 	c #0F081E",
-": 	c #12071F",
-"< 	c #360620",
-"[ 	c #682A21",
-"} 	c #673F21",
-"| 	c #780E21",
-"1 	c #A82320",
-"2 	c #8D1D1F",
-"3 	c #970127",
-"4 	c #0D0123",
-"5 	c #0D0324",
-"6 	c #3B1E28",
-"7 	c #C28429",
-"8 	c #0C0523",
-"9 	c #0C041E",
-"0 	c #0E031A",
-"a 	c #11031A",
-"b 	c #13031B",
-"c 	c #13031C",
-"d 	c #11031D",
-"e 	c #19051E",
-"f 	c #390E20",
-"g 	c #9C0C20",
-"h 	c #C00721",
-"i 	c #980320",
-"j 	c #14031E",
-"k 	c #CD9F32",
-"l 	c #C29F2E",
-"m 	c #0F0325",
-"n 	c #0D0321",
-"o 	c #0E0324",
-"p 	c #D08329",
-"q 	c #9D1B27",
-"r 	c #1C0320",
-"s 	c #0D011A",
-"t 	c #120117",
-"u 	c #130017",
-"v 	c #150018",
-"w 	c #160119",
-"x 	c #17021A",
-"y 	c #15021B",
-"z 	c #11021E",
-"A 	c #0F021F",
-"B 	c #8C1821",
-"C 	c #CF4522",
-"D 	c #831821",
-"E 	c #BA7033",
-"F 	c #EDB339",
-"G 	c #C89733",
-"H 	c #280727",
-"I 	c #0F051F",
-"J 	c #0E0420",
-"K 	c #591F27",
-"L 	c #E47129",
-"M 	c #612224",
-"N 	c #0C021D",
-"O 	c #120018",
-"P 	c #140017",
-"Q 	c #170017",
-"R 	c #190018",
-"S 	c #1B0019",
-"T 	c #1B011A",
-"U 	c #18011B",
-"V 	c #15011C",
-"W 	c #12031E",
-"X 	c #460A21",
-"Y 	c #A13823",
-"Z 	c #784323",
-"` 	c #5A0C21",
-" .	c #BC4530",
-"..	c #EB5B38",
-"+.	c #CE4E3B",
-"@.	c #DD9334",
-"#.	c #751A27",
-"$.	c #11071E",
-"%.	c #0F041C",
-"&.	c #1E0824",
-"*.	c #955A28",
-"=.	c #9A5027",
-"-.	c #1E0321",
-";.	c #11011A",
-">.	c #140018",
-",.	c #180018",
-"'.	c #1F001A",
-").	c #20001B",
-"!.	c #1E001A",
-"~.	c #1B001A",
-"{.	c #16021B",
-"].	c #16041E",
-"^.	c #220622",
-"/.	c #5F3525",
-"(.	c #DE5724",
-"_.	c #611021",
-":.	c #0F0925",
-"<.	c #D1892E",
-"[.	c #F27036",
-"}.	c #EC633B",
-"|.	c #DA293C",
-"1.	c #E64833",
-"2.	c #912226",
-"3.	c #11081C",
-"4.	c #110419",
-"5.	c #0F041E",
-"6.	c #451425",
-"7.	c #BF6F28",
-"8.	c #332225",
-"9.	c #0E021E",
-"0.	c #13001B",
-"a.	c #17001A",
-"b.	c #1C001B",
-"c.	c #21001C",
-"d.	c #23001C",
-"e.	c #21001B",
-"f.	c #19021A",
-"g.	c #17041E",
-"h.	c #150721",
-"i.	c #602424",
-"j.	c #D51223",
-"k.	c #540820",
-"l.	c #D04D2D",
-"m.	c #EA8933",
-"n.	c #875637",
-"o.	c #88543A",
-"p.	c #E5923A",
-"q.	c #891931",
-"r.	c #130B25",
-"s.	c #10051B",
-"t.	c #110217",
-"u.	c #12021A",
-"v.	c #761826",
-"w.	c #E2A728",
-"x.	c #300224",
-"y.	c #10011E",
-"z.	c #16001B",
-"A.	c #1B001B",
-"B.	c #21001A",
-"C.	c #1E0019",
-"D.	c #1D0019",
-"E.	c #1A011A",
-"F.	c #17031C",
-"G.	c #120720",
-"H.	c #4E0822",
-"I.	c #670721",
-"J.	c #C07630",
-"K.	c #F59734",
-"L.	c #BE1B35",
-"M.	c #0E1435",
-"N.	c #522037",
-"O.	c #DB8039",
-"P.	c #D45933",
-"Q.	c #420927",
-"R.	c #0F041D",
-"S.	c #140118",
-"T.	c #13021D",
-"U.	c #100423",
-"V.	c #7B6227",
-"W.	c #C04326",
-"X.	c #0E0020",
-"Y.	c #13001D",
-"Z.	c #18001B",
-"`.	c #1E001B",
-" +	c #22001C",
-".+	c #22001B",
-"++	c #1B011B",
-"@+	c #16041D",
-"#+	c #130520",
-"$+	c #860521",
-"%+	c #710520",
-"&+	c #670A2A",
-"*+	c #A66431",
-"=+	c #E97536",
-"-+	c #F8833A",
-";+	c #F77A3A",
-">+	c #C45337",
-",+	c #0A1C35",
-"'+	c #993638",
-")+	c #F7863B",
-"!+	c #F49736",
-"~+	c #94462B",
-"{+	c #0E031F",
-"]+	c #130119",
-"^+	c #160018",
-"/+	c #16011B",
-"(+	c #15021F",
-"_+	c #120123",
-":+	c #A65C28",
-"<+	c #5C4D23",
-"[+	c #0F001F",
-"}+	c #14001D",
-"|+	c #1A001B",
-"1+	c #1F001B",
-"2+	c #24001D",
-"3+	c #25001D",
-"4+	c #24001C",
-"5+	c #1F001C",
-"6+	c #1A011C",
-"7+	c #16021E",
-"8+	c #3F0421",
-"9+	c #BC0522",
-"0+	c #1C041E",
-"a+	c #7F5531",
-"b+	c #E68A38",
-"c+	c #F8933E",
-"d+	c #FA7942",
-"e+	c #FB7543",
-"f+	c #FA6F41",
-"g+	c #F1793D",
-"h+	c #7D3B3A",
-"i+	c #28263B",
-"j+	c #D45441",
-"k+	c #F8A238",
-"l+	c #996B2D",
-"m+	c #0E0421",
-"n+	c #12011A",
-"o+	c #180019",
-"p+	c #17001C",
-"q+	c #12001F",
-"r+	c #4C2B2A",
-"s+	c #DB8130",
-"t+	c #540023",
-"u+	c #0F0120",
-"v+	c #16011C",
-"w+	c #22001D",
-"x+	c #25001F",
-"y+	c #26001F",
-"z+	c #25001E",
-"A+	c #24001E",
-"B+	c #1D001C",
-"C+	c #18011D",
-"D+	c #16031F",
-"E+	c #3C0522",
-"F+	c #9B0821",
-"G+	c #13041E",
-"H+	c #F6462E",
-"I+	c #E6AB37",
-"J+	c #E7A03E",
-"K+	c #FA9F44",
-"L+	c #FB8A48",
-"M+	c #FD7A4A",
-"N+	c #FD794A",
-"O+	c #FD7748",
-"P+	c #FD7E45",
-"Q+	c #FD8343",
-"R+	c #FB5D42",
-"S+	c #6E3A40",
-"T+	c #EE8A37",
-"U+	c #7E252B",
-"V+	c #100520",
-"W+	c #13011A",
-"X+	c #170019",
-"Y+	c #15001C",
-"Z+	c #0F0020",
-"`+	c #564427",
-" @	c #E0BA29",
-".@	c #5E2B25",
-"+@	c #10011F",
-"@@	c #17011C",
-"#@	c #1E001D",
-"$@	c #23001F",
-"%@	c #250020",
-"&@	c #24001F",
-"*@	c #23001E",
-"=@	c #21001E",
-"-@	c #1B001C",
-";@	c #17021D",
-">@	c #14041E",
-",@	c #AC0B25",
-"'@	c #5E1420",
-")@	c #F28635",
-"!@	c #C2733E",
-"~@	c #984C44",
-"{@	c #EA9148",
-"]@	c #FB844B",
-"^@	c #FD7E4C",
-"/@	c #FE7E4C",
-"(@	c #FE7E4B",
-"_@	c #FE7749",
-":@	c #FD7148",
-"<@	c #FB7D46",
-"[@	c #F89641",
-"}@	c #B95634",
-"|@	c #0D0927",
-"1@	c #11041D",
-"2@	c #150119",
-"3@	c #180017",
-"4@	c #16001A",
-"5@	c #13001E",
-"6@	c #110023",
-"7@	c #944C29",
-"8@	c #EE6229",
-"9@	c #3D0324",
-"0@	c #12021F",
-"a@	c #19011D",
-"b@	c #21001F",
-"c@	c #22001F",
-"d@	c #20001E",
-"e@	c #1F001D",
-"f@	c #1C001C",
-"g@	c #19011C",
-"h@	c #3D1621",
-"i@	c #B53622",
-"j@	c #31061F",
-"k@	c #841D34",
-"l@	c #F2703F",
-"m@	c #C14445",
-"n@	c #E67349",
-"o@	c #FB8E4B",
-"p@	c #FD834C",
-"q@	c #FE834D",
-"r@	c #FE834C",
-"s@	c #FE804C",
-"t@	c #FD814B",
-"u@	c #FB7D49",
-"v@	c #F79B43",
-"w@	c #AF1234",
-"x@	c #0D0625",
-"y@	c #13021C",
-"z@	c #1A0019",
-"A@	c #190019",
-"B@	c #410225",
-"C@	c #D39729",
-"D@	c #AA5927",
-"E@	c #0E0422",
-"F@	c #15021E",
-"G@	c #1A011D",
-"H@	c #1D001D",
-"I@	c #15031D",
-"J@	c #240820",
-"K@	c #A01023",
-"L@	c #670B21",
-"M@	c #3D0D33",
-"N@	c #E63C3E",
-"O@	c #EF7C45",
-"P@	c #F59048",
-"Q@	c #FB944A",
-"R@	c #FD904A",
-"S@	c #FE8E4B",
-"T@	c #FE854A",
-"U@	c #FE854B",
-"V@	c #FE884C",
-"W@	c #FC954B",
-"X@	c #F8AB45",
-"Y@	c #C37A35",
-"Z@	c #0D0425",
-"`@	c #13011B",
-" #	c #170018",
-".#	c #1A0018",
-"+#	c #1C0019",
-"@#	c #15001B",
-"##	c #100120",
-"$#	c #311F25",
-"%#	c #E68E28",
-"&#	c #7A1425",
-"*#	c #130321",
-"=#	c #17011E",
-"-#	c #1A001D",
-";#	c #19001B",
-">#	c #16021C",
-",#	c #130521",
-"'#	c #6F3123",
-")#	c #6D3022",
-"!#	c #C89433",
-"~#	c #EA7E3E",
-"{#	c #DB2943",
-"]#	c #EF7745",
-"^#	c #FB8544",
-"/#	c #FD9A43",
-"(#	c #FE9941",
-"_#	c #FE9D43",
-":#	c #FEA548",
-"<#	c #FEAE49",
-"[#	c #FCB944",
-"}#	c #CA9F35",
-"|#	c #0E0225",
-"1#	c #11001B",
-"2#	c #160019",
-"3#	c #12011B",
-"4#	c #0F0220",
-"5#	c #351D26",
-"6#	c #D85B28",
-"7#	c #6C0F26",
-"8#	c #190121",
-"9#	c #1B001E",
-"0#	c #1A001C",
-"a#	c #1D001B",
-"b#	c #130220",
-"c#	c #703A23",
-"d#	c #713A23",
-"e#	c #140327",
-"f#	c #411B36",
-"g#	c #C8713E",
-"h#	c #7A3A3F",
-"i#	c #CE2C3C",
-"j#	c #E77338",
-"k#	c #9C6535",
-"l#	c #9C6233",
-"m#	c #9C6332",
-"n#	c #9C6A35",
-"o#	c #C37D3C",
-"p#	c #FEAC41",
-"q#	c #FEC23E",
-"r#	c #826330",
-"s#	c #100122",
-"t#	c #120019",
-"u#	c #150017",
-"v#	c #190017",
-"w#	c #1B0018",
-"x#	c #12001A",
-"y#	c #10021F",
-"z#	c #1A0326",
-"A#	c #5F292A",
-"B#	c #7B4E29",
-"C#	c #3C0E25",
-"D#	c #1A0020",
-"E#	c #14021F",
-"F#	c #723B23",
-"G#	c #14001A",
-"H#	c #58042A",
-"I#	c #A28337",
-"J#	c #C8813B",
-"K#	c #B14B38",
-"L#	c #761231",
-"M#	c #5A132A",
-"N#	c #0D0726",
-"O#	c #0C0623",
-"P#	c #0B0723",
-"Q#	c #0B0A26",
-"R#	c #321C2D",
-"S#	c #C45B33",
-"T#	c #FEBB33",
-"U#	c #13052A",
-"V#	c #13011F",
-"W#	c #160017",
-"X#	c #15001A",
-"Y#	c #12001D",
-"Z#	c #94062A",
-"`#	c #630D2C",
-" $	c #85292B",
-".$	c #AA5E29",
-"+$	c #1F0123",
-"@$	c #19011F",
-"#$	c #1E001C",
-"$$	c #15031F",
-"%$	c #712122",
-"&$	c #712223",
-"*$	c #14011B",
-"=$	c #110321",
-"-$	c #AF0C2B",
-";$	c #E7D534",
-">$	c #EAC934",
-",$	c #84582D",
-"'$	c #1B0824",
-")$	c #11041E",
-"!$	c #10021B",
-"~$	c #100119",
-"{$	c #100218",
-"]$	c #0F041A",
-"^$	c #0E0720",
-"/$	c #2C1026",
-"($	c #D8A328",
-"_$	c #140322",
-":$	c #160016",
-"<$	c #14001F",
-"[$	c #120024",
-"}$	c #100128",
-"|$	c #3C032F",
-"1$	c #2C062E",
-"2$	c #29022B",
-"3$	c #A31D29",
-"4$	c #976A25",
-"5$	c #1A0321",
-"6$	c #17031E",
-"7$	c #1B021D",
-"8$	c #20001C",
-"9$	c #14041F",
-"0$	c #703422",
-"a$	c #6F3522",
-"b$	c #8D0328",
-"c$	c #920329",
-"d$	c #0F0326",
-"e$	c #100321",
-"f$	c #11021B",
-"g$	c #130117",
-"h$	c #140016",
-"i$	c #150015",
-"j$	c #140015",
-"k$	c #130116",
-"l$	c #120219",
-"m$	c #11031C",
-"n$	c #12031D",
-"o$	c #170016",
-"p$	c #160020",
-"q$	c #250029",
-"r$	c #670033",
-"s$	c #DCA238",
-"t$	c #F5C736",
-"u$	c #9A732E",
-"v$	c #110227",
-"w$	c #110324",
-"x$	c #811924",
-"y$	c #A04323",
-"z$	c #250721",
-"A$	c #1A041F",
-"B$	c #1E011D",
-"C$	c #1C011C",
-"D$	c #18031D",
-"E$	c #130721",
-"F$	c #6F3623",
-"G$	c #6B3622",
-"H$	c #1A001A",
-"I$	c #14011F",
-"J$	c #12011E",
-"K$	c #11011C",
-"L$	c #140117",
-"M$	c #170015",
-"N$	c #150016",
-"O$	c #120119",
-"P$	c #11011B",
-"Q$	c #11001A",
-"R$	c #130018",
-"S$	c #170118",
-"T$	c #170119",
-"U$	c #18021E",
-"V$	c #1A0126",
-"W$	c #6F2332",
-"X$	c #E5563B",
-"Y$	c #F1B83F",
-"Z$	c #F6CC38",
-"`$	c #9D7A2D",
-" %	c #130123",
-".%	c #130320",
-"+%	c #2A0721",
-"@%	c #B00E24",
-"#%	c #7D0B23",
-"$%	c #1F0522",
-"%%	c #1E0220",
-"&%	c #1D011E",
-"*%	c #1A031E",
-"=%	c #15051F",
-"-%	c #241322",
-";%	c #A32F23",
-">%	c #670E21",
-",%	c #1C001A",
-"'%	c #19001A",
-")%	c #180016",
-"!%	c #160118",
-"~%	c #140219",
-"{%	c #11021C",
-"]%	c #10021E",
-"^%	c #0F011D",
-"/%	c #170117",
-"(%	c #160219",
-"_%	c #17041D",
-":%	c #190523",
-"<%	c #8C042E",
-"[%	c #B65838",
-"}%	c #E9D73F",
-"|%	c #EED43E",
-"1%	c #D85538",
-"2%	c #493129",
-"3%	c #130120",
-"4%	c #15021D",
-"5%	c #330822",
-"6%	c #8A0825",
-"7%	c #3C0424",
-"8%	c #1E0322",
-"9%	c #1C0321",
-"0%	c #180421",
-"a%	c #130822",
-"b%	c #AF2D24",
-"c%	c #BC5623",
-"d%	c #2F071F",
-"e%	c #1A041C",
-"f%	c #1C031C",
-"g%	c #1D011C",
-"h%	c #160117",
-"i%	c #150419",
-"j%	c #12081D",
-"k%	c #0F0923",
-"l%	c #A77027",
-"m%	c #A60525",
-"n%	c #11021A",
-"o%	c #130218",
-"p%	c #150319",
-"q%	c #16061D",
-"r%	c #180923",
-"s%	c #9C1D2B",
-"t%	c #A32636",
-"u%	c #A66E3B",
-"v%	c #4B2E3C",
-"w%	c #412C36",
-"x%	c #36012D",
-"y%	c #140123",
-"z%	c #17001E",
-"A%	c #19011B",
-"B%	c #1A0421",
-"C%	c #340425",
-"D%	c #9E0326",
-"E%	c #1F0424",
-"F%	c #1C0524",
-"G%	c #180724",
-"H%	c #A91024",
-"I%	c #D55D24",
-"J%	c #90071E",
-"K%	c #3C051D",
-"L%	c #1C021C",
-"M%	c #1C011A",
-"N%	c #1D001A",
-"O%	c #160116",
-"P%	c #150216",
-"Q%	c #140217",
-"R%	c #140618",
-"S%	c #120D1D",
-"T%	c #231925",
-"U%	c #B16A2E",
-"V%	c #FDAC34",
-"W%	c #D58631",
-"X%	c #280E2A",
-"Y%	c #0D0A23",
-"Z%	c #0F0920",
-"`%	c #120C21",
-" &	c #1F1026",
-".&	c #A3352E",
-"+&	c #EE9F36",
-"@&	c #5D2A3C",
-"#&	c #960D3C",
-"$&	c #970638",
-"%&	c #A00330",
-"&&	c #4D0126",
-"*&	c #1C001F",
-"=&	c #280120",
-"-&	c #290223",
-";&	c #1F0425",
-">&	c #260726",
-",&	c #340A26",
-"'&	c #850925",
-")&	c #3A0823",
-"!&	c #82071D",
-"~&	c #5E071D",
-"{&	c #18051C",
-"]&	c #18021A",
-"^&	c #190118",
-"/&	c #160217",
-"(&	c #150418",
-"_&	c #130618",
-":&	c #110718",
-"<&	c #10081A",
-"[&	c #110D1D",
-"}&	c #291C24",
-"|&	c #A73B2D",
-"1&	c #FD6B36",
-"2&	c #FD853C",
-"3&	c #FD863B",
-"4&	c #C24A35",
-"5&	c #6B442F",
-"6&	c #6D302D",
-"7&	c #6E252E",
-"8&	c #8E3B32",
-"9&	c #DE7739",
-"0&	c #F48E3F",
-"a&	c #DD8D41",
-"b&	c #854F3D",
-"c&	c #7E2D35",
-"d&	c #33082B",
-"e&	c #1C0222",
-"f&	c #20001F",
-"g&	c #1F0222",
-"h&	c #1A0524",
-"i&	c #440C27",
-"j&	c #BC1427",
-"k&	c #20041B",
-"l&	c #53061C",
-"m&	c #25071B",
-"n&	c #11061A",
-"o&	c #130418",
-"p&	c #140317",
-"q&	c #150217",
-"r&	c #160318",
-"s&	c #12051B",
-"t&	c #100C1D",
-"u&	c #0E101E",
-"v&	c #0C121F",
-"w&	c #0C1321",
-"x&	c #781725",
-"y&	c #B25D2C",
-"z&	c #FA6335",
-"A&	c #FD633C",
-"B&	c #FE6D42",
-"C&	c #FE7C42",
-"D&	c #FE813F",
-"E&	c #FE873C",
-"F&	c #FD743B",
-"G&	c #FB683B",
-"H&	c #FA7A3E",
-"I&	c #F98242",
-"J&	c #F97844",
-"K&	c #F98943",
-"L&	c #F79C3D",
-"M&	c #A25133",
-"N&	c #280B28",
-"O&	c #1D021F",
-"P&	c #1F011C",
-"Q&	c #280321",
-"R&	c #1C0724",
-"S&	c #3F1C27",
-"T&	c #D33C27",
-"U&	c #0E061B",
-"V&	c #0C091C",
-"W&	c #0C0A1B",
-"X&	c #0E091A",
-"Y&	c #11081B",
-"Z&	c #100A20",
-"`&	c #0E0D23",
-" *	c #551227",
-".*	c #B21829",
-"+*	c #C42329",
-"@*	c #C62C29",
-"#*	c #C55429",
-"$*	c #E76F2B",
-"%*	c #F14232",
-"&*	c #F95E3A",
-"**	c #FC6740",
-"=*	c #FE6E45",
-"-*	c #FE7246",
-";*	c #FE7545",
-">*	c #FE7744",
-",*	c #FD7745",
-"'*	c #FD7845",
-")*	c #FD7847",
-"!*	c #FD7948",
-"~*	c #FD7B44",
-"{*	c #FC7C3B",
-"]*	c #6F3130",
-"^*	c #140B24",
-"/*	c #19031D",
-"(*	c #1C011B",
-"_*	c #5A011F",
-":*	c #B70421",
-"<*	c #380824",
-"[*	c #3E2626",
-"}*	c #9F5626",
-"|*	c #13051E",
-"1*	c #360A21",
-"2*	c #361223",
-"3*	c #371724",
-"4*	c #381824",
-"5*	c #3B1524",
-"6*	c #3E1E26",
-"7*	c #471A29",
-"8*	c #DB252E",
-"9*	c #ED2733",
-"0*	c #EE5436",
-"a*	c #F04237",
-"b*	c #F33934",
-"c*	c #F53D2F",
-"d*	c #D7312B",
-"e*	c #AF212B",
-"f*	c #3A2C31",
-"g*	c #F65F39",
-"h*	c #FB6F41",
-"i*	c #FD6D45",
-"j*	c #FE7047",
-"k*	c #FE7647",
-"l*	c #FE7847",
-"m*	c #FE7848",
-"n*	c #FE7748",
-"o*	c #FE7948",
-"p*	c #FE7C48",
-"q*	c #FE7C47",
-"r*	c #FE7642",
-"s*	c #FE7439",
-"t*	c #6D332C",
-"u*	c #100B21",
-"v*	c #16031B",
-"w*	c #2B001B",
-"x*	c #22011F",
-"y*	c #220521",
-"z*	c #1B0A23",
-"A*	c #421425",
-"B*	c #951924",
-"C*	c #381023",
-"D*	c #E94028",
-"E*	c #E7302B",
-"F*	c #EF432D",
-"G*	c #F4302E",
-"H*	c #F32C30",
-"I*	c #CB4432",
-"J*	c #DD3235",
-"K*	c #EF4B3A",
-"L*	c #F0333E",
-"M*	c #CC3D3F",
-"N*	c #E4313C",
-"O*	c #F34834",
-"P*	c #D13E2C",
-"Q*	c #431825",
-"R*	c #0E1424",
-"S*	c #3C202C",
-"T*	c #F15537",
-"U*	c #F97140",
-"V*	c #FC6E45",
-"W*	c #FE7547",
-"X*	c #FE7947",
-"Y*	c #FE7B48",
-"Z*	c #FE7D48",
-"`*	c #FE8047",
-" =	c #FE7A42",
-".=	c #FE7A38",
-"+=	c #6D442B",
-"@=	c #0F0B21",
-"#=	c #15031A",
-"$=	c #49001B",
-"%=	c #2F001C",
-"&=	c #21021E",
-"*=	c #220620",
-"==	c #1B0D23",
-"-=	c #641625",
-";=	c #951823",
-">=	c #390F25",
-",=	c #AC3A2A",
-"'=	c #B6492E",
-")=	c #ED7531",
-"!=	c #F45A34",
-"~=	c #F54C36",
-"{=	c #C72D39",
-"]=	c #DE283C",
-"^=	c #F33B40",
-"/=	c #F34142",
-"(=	c #D0393F",
-"_=	c #E72E39",
-":=	c #DB3C2E",
-"<=	c #461724",
-"[=	c #0F0D1E",
-"}=	c #140B1E",
-"|=	c #341427",
-"1=	c #CB4834",
-"2=	c #F7743F",
-"3=	c #FB7145",
-"4=	c #FE7747",
-"5=	c #FE7A47",
-"6=	c #FF7B48",
-"7=	c #FF7C48",
-"8=	c #FE7F47",
-"9=	c #FE8247",
-"0=	c #FE8642",
-"a=	c #FE8439",
-"b=	c #6D442D",
-"c=	c #0F0A21",
-"d=	c #14031A",
-"e=	c #20031D",
-"f=	c #210821",
-"g=	c #191024",
-"h=	c #CC1C25",
-"i=	c #961423",
-"j=	c #2C162C",
-"k=	c #BD242E",
-"l=	c #EF2C31",
-"m=	c #F54C34",
-"n=	c #F34037",
-"o=	c #F5353A",
-"p=	c #F7413D",
-"q=	c #F8423D",
-"r=	c #F93A39",
-"s=	c #F95731",
-"t=	c #341425",
-"u=	c #110A1D",
-"v=	c #140619",
-"w=	c #18051B",
-"x=	c #200F26",
-"y=	c #864833",
-"z=	c #F8773F",
-"A=	c #FC7445",
-"B=	c #FF7E48",
-"C=	c #FF7E49",
-"D=	c #FF7D49",
-"E=	c #FF7D48",
-"F=	c #FE8347",
-"G=	c #FE8743",
-"H=	c #FE893B",
-"I=	c #6E452F",
-"J=	c #100E23",
-"K=	c #14041A",
-"L=	c #55041D",
-"M=	c #540921",
-"N=	c #161124",
-"O=	c #CE6A25",
-"P=	c #3F1129",
-"Q=	c #170A29",
-"R=	c #0F0F29",
-"S=	c #15132B",
-"T=	c #1E182D",
-"U=	c #A82B3D",
-"V=	c #CB6633",
-"W=	c #CC6932",
-"X=	c #CC3D2D",
-"Y=	c #331225",
-"Z=	c #0F091C",
-"`=	c #120417",
-" -	c #160216",
-".-	c #190419",
-"+-	c #210F26",
-"@-	c #8C4934",
-"#-	c #F97A40",
-"$-	c #FC7545",
-"%-	c #FF7B49",
-"&-	c #FE7D46",
-"*-	c #FE7E43",
-"=-	c #FD7B3E",
-"--	c #FA6934",
-";-	c #532328",
-">-	c #130B1D",
-",-	c #150519",
-"'-	c #14041C",
-")-	c #120920",
-"!-	c #C43624",
-"~-	c #A21E23",
-"{-	c #F87C30",
-"]-	c #C9302D",
-"^-	c #300F2A",
-"/-	c #591129",
-"(-	c #171328",
-"_-	c #171628",
-":-	c #141829",
-"<-	c #101A2B",
-"[-	c #0F172B",
-"}-	c #0F1226",
-"|-	c #0E0C20",
-"1-	c #100619",
-"2-	c #140316",
-"3-	c #19051B",
-"4-	c #3C1428",
-"5-	c #E04B36",
-"6-	c #FA7B41",
-"7-	c #FD7346",
-"8-	c #FE7548",
-"9-	c #FF7849",
-"0-	c #FF7749",
-"a-	c #FE7B47",
-"b-	c #FE7945",
-"c-	c #FC7740",
-"d-	c #FA7E39",
-"e-	c #C1432F",
-"f-	c #131523",
-"g-	c #130A1C",
-"h-	c #420621",
-"i-	c #D08423",
-"j-	c #F87739",
-"k-	c #C03D37",
-"l-	c #962B34",
-"m-	c #A14332",
-"n-	c #E54B30",
-"o-	c #9E3E2F",
-"p-	c #7F262E",
-"q-	c #922D2E",
-"r-	c #9C4B2E",
-"s-	c #65212C",
-"t-	c #101628",
-"u-	c #101022",
-"v-	c #11091C",
-"w-	c #130619",
-"x-	c #160A1E",
-"y-	c #43252C",
-"z-	c #F66439",
-"A-	c #FA6942",
-"B-	c #FD6C47",
-"C-	c #FE6E48",
-"D-	c #FE6F48",
-"E-	c #FE7049",
-"F-	c #FE714A",
-"G-	c #FE744A",
-"H-	c #FE7846",
-"I-	c #FD7243",
-"J-	c #FC703E",
-"K-	c #FA6C37",
-"L-	c #81312B",
-"M-	c #121123",
-"N-	c #15071D",
-"O-	c #16031A",
-"P-	c #17021B",
-"Q-	c #8F3D22",
-"R-	c #F8393E",
-"S-	c #E42A3D",
-"T-	c #E7473B",
-"U-	c #FB503B",
-"V-	c #FB4F3A",
-"W-	c #F95439",
-"X-	c #ED4C38",
-"Y-	c #F45938",
-"Z-	c #FB6537",
-"`-	c #EA5236",
-" ;	c #CE6232",
-".;	c #CD392C",
-"+;	c #181425",
-"@;	c #120F21",
-"#;	c #130D20",
-"$;	c #151225",
-"%;	c #903431",
-"&;	c #F8703D",
-"*;	c #FB6344",
-"=;	c #FD6748",
-"-;	c #FE6849",
-";;	c #FE6949",
-">;	c #FE6A49",
-",;	c #FE6C4A",
-"';	c #FE704A",
-");	c #FE734A",
-"!;	c #FE7449",
-"~;	c #FE7347",
-"{;	c #FE7145",
-"];	c #FD6C42",
-"^;	c #FD753D",
-"/;	c #F36E35",
-"(;	c #CB452C",
-"_;	c #600D24",
-":;	c #1C061F",
-"<;	c #1E031F",
-"[;	c #5B3821",
-"};	c #CE9822",
-"|;	c #FA4341",
-"1;	c #FB4341",
-"2;	c #FC4541",
-"3;	c #FC4542",
-"4;	c #FC4143",
-"5;	c #FC4D42",
-"6;	c #FB5042",
-"7;	c #FB5342",
-"8;	c #FC5242",
-"9;	c #FD4F40",
-"0;	c #FD503E",
-"a;	c #FB6339",
-"b;	c #F45E33",
-"c;	c #A12A2E",
-"d;	c #401E2C",
-"e;	c #452D2F",
-"f;	c #F74F38",
-"g;	c #FA5940",
-"h;	c #FC6245",
-"i;	c #FE6447",
-"j;	c #FE6449",
-"k;	c #FE6549",
-"l;	c #FE6749",
-"m;	c #FE6B49",
-"n;	c #FE6D49",
-"o;	c #FE6D48",
-"p;	c #FE6D47",
-"q;	c #FE6D45",
-"r;	c #FE6C44",
-"s;	c #FE6A42",
-"t;	c #FE663C",
-"u;	c #FC6233",
-"v;	c #752129",
-"w;	c #1F0922",
-"x;	c #750520",
-"y;	c #81061F",
-"z;	c #FA3D42",
-"A;	c #FB4142",
-"B;	c #FD4543",
-"C;	c #FD4844",
-"D;	c #FD4A45",
-"E;	c #FD4D45",
-"F;	c #FD5045",
-"G;	c #FD5345",
-"H;	c #FE5346",
-"I;	c #FE5445",
-"J;	c #FD5444",
-"K;	c #FC4F41",
-"L;	c #FA513D",
-"M;	c #F95339",
-"N;	c #F63736",
-"O;	c #F75737",
-"P;	c #F95F3B",
-"Q;	c #FB5840",
-"R;	c #FD5F43",
-"S;	c #FE6345",
-"T;	c #FE6547",
-"U;	c #FE6548",
-"V;	c #FE6448",
-"W;	c #FE6248",
-"X;	c #FE6348",
-"Y;	c #FE6748",
-"Z;	c #FE6848",
-"`;	c #FE6846",
-" >	c #FE6A45",
-".>	c #FE6D43",
-"+>	c #FE703F",
-"@>	c #FC6F36",
-"#>	c #6F302B",
-"$>	c #140A22",
-"%>	c #FA3B42",
-"&>	c #FC4243",
-"*>	c #FD4744",
-"=>	c #FE4A45",
-"->	c #FE4C47",
-";>	c #FE4D47",
-">>	c #FE5047",
-",>	c #FE5347",
-"'>	c #FE5447",
-")>	c #FD5246",
-"!>	c #FB503F",
-"~>	c #FA543D",
-"{>	c #9B3D3B",
-"]>	c #A3433B",
-"^>	c #F9683D",
-"/>	c #FC6940",
-"(>	c #FE6342",
-"_>	c #FE6645",
-":>	c #FE6646",
-"<>	c #FE6147",
-"[>	c #FE6048",
-"}>	c #FE6148",
-"|>	c #FE6746",
-"1>	c #FE6A46",
-"2>	c #FE6F45",
-"3>	c #FE7441",
-"4>	c #FC7D39",
-"5>	c #6C422E",
-"6>	c #0F0F23",
-"7>	c #FA4142",
-"8>	c #FC4643",
-"9>	c #FE4D46",
-"0>	c #FE4E47",
-"a>	c #FE4F48",
-"b>	c #FE5148",
-"c>	c #FE5348",
-"d>	c #FE5548",
-"e>	c #FE5247",
-"f>	c #FD5445",
-"g>	c #FC5544",
-"h>	c #F96041",
-"i>	c #D33F3D",
-"j>	c #392D39",
-"k>	c #973C38",
-"l>	c #F94E3A",
-"m>	c #FD693E",
-"n>	c #FE6C43",
-"o>	c #FE6047",
-"p>	c #FE5D47",
-"q>	c #FE5E48",
-"r>	c #FE6948",
-"s>	c #FE6947",
-"t>	c #FE6B47",
-"u>	c #FE6E46",
-"v>	c #FD6D43",
-"w>	c #FB723D",
-"x>	c #D54A33",
-"y>	c #301C29",
-"z>	c #FB4A42",
-"A>	c #FD4B44",
-"B>	c #FE4F47",
-"C>	c #FE5048",
-"D>	c #FE5648",
-"E>	c #FE5848",
-"F>	c #FE5747",
-"G>	c #FE5547",
-"H>	c #FC5945",
-"I>	c #F95742",
-"J>	c #F3543D",
-"K>	c #A33336",
-"L>	c #302032",
-"M>	c #152433",
-"N>	c #CD3E38",
-"O>	c #FD5A3F",
-"P>	c #FE6343",
-"Q>	c #FE6446",
-"R>	c #FE6247",
-"S>	c #FE6A47",
-"T>	c #FC6542",
-"U>	c #FB6A3B",
-"V>	c #FA6D34",
-"W>	c #D73C2D",
-"X>	c #442428",
-"Y>	c #281323",
-"Z>	c #FD4E42",
-"`>	c #FD4D43",
-" ,	c #FE4D45",
-".,	c #FE5248",
-"+,	c #FE5947",
-"@,	c #FE5C47",
-"#,	c #FE5B47",
-"$,	c #FE5A47",
-"%,	c #FE5847",
-"&,	c #FC5C45",
-"*,	c #F95B43",
-"=,	c #F3613F",
-"-,	c #E74F37",
-";,	c #8C2431",
-">,	c #161E2F",
-",,	c #CD4E33",
-"',	c #FD503A",
-"),	c #FE5D40",
-"!,	c #FE6445",
-"~,	c #FE6946",
-"{,	c #FE6847",
-"],	c #FE6747",
-"^,	c #FD6644",
-"/,	c #FD6241",
-"(,	c #FD5B3D",
-"_,	c #FE6739",
-":,	c #FE6135",
-"<,	c #AB4830",
-"[,	c #733E2A",
-"},	c #161224",
-"|,	c #FC4E42",
-"1,	c #FE4D44",
-"2,	c #FE4E46",
-"3,	c #FE5147",
-"4,	c #FE5E47",
-"5,	c #FD5C46",
-"6,	c #FA5B44",
-"7,	c #F45441",
-"8,	c #EB393A",
-"9,	c #CC3433",
-"0,	c #47212F",
-"a,	c #59242F",
-"b,	c #FC6734",
-"c,	c #FC6F3A",
-"d,	c #FC723E",
-"e,	c #FD6540",
-"f,	c #FE6442",
-"g,	c #FE6643",
-"h,	c #FE6944",
-"i,	c #FE6546",
-"j,	c #FE6444",
-"k,	c #FE6143",
-"l,	c #FE5E41",
-"m,	c #FE613F",
-"n,	c #FE683C",
-"o,	c #FE7937",
-"p,	c #A25030",
-"q,	c #692629",
-"r,	c #151122",
-"s,	c #FA573F",
-"t,	c #FB4D40",
-"u,	c #FC4F43",
-"v,	c #FE5246",
-"w,	c #FF6347",
-"x,	c #FE5F48",
-"y,	c #F65942",
-"z,	c #F0493D",
-"A,	c #ED3736",
-"B,	c #73262F",
-"C,	c #10152C",
-"D,	c #3B292F",
-"E,	c #363034",
-"F,	c #AC3938",
-"G,	c #FC6B3B",
-"H,	c #FD763C",
-"I,	c #FE6D3F",
-"J,	c #FE6341",
-"K,	c #FE6642",
-"L,	c #FE6745",
-"M,	c #FE6245",
-"N,	c #FE6244",
-"O,	c #FE6841",
-"P,	c #FF683B",
-"Q,	c #EC7035",
-"R,	c #D0412D",
-"S,	c #3A1627",
-"T,	c #CF3938",
-"U,	c #F6543C",
-"V,	c #FB5040",
-"W,	c #FD5544",
-"X,	c #FE5A48",
-"Y,	c #FE5D48",
-"Z,	c #FE5F47",
-"`,	c #FF6147",
-" '	c #FD5C45",
-".'	c #FB5B43",
-"+'	c #FA5A42",
-"@'	c #F76040",
-"#'	c #F4623D",
-"$'	c #F26D38",
-"%'	c #EC4130",
-"&'	c #380E2B",
-"*'	c #13122C",
-"='	c #362D31",
-"-'	c #353435",
-";'	c #352E37",
-">'	c #2D3337",
-",'	c #CC5838",
-"''	c #CD6F3A",
-")'	c #CE6E3D",
-"!'	c #FE793F",
-"~'	c #FD7541",
-"{'	c #FD6243",
-"]'	c #FE6545",
-"^'	c #FF6543",
-"/'	c #FF6240",
-"('	c #FE723B",
-"_'	c #FE8034",
-":'	c #442D2C",
-"<'	c #311725",
-"['	c #222830",
-"}'	c #B73B36",
-"|'	c #F94C3D",
-"1'	c #FD5543",
-"2'	c #FE5B48",
-"3'	c #FF5E47",
-"4'	c #FE5C48",
-"5'	c #FC5B44",
-"6'	c #F95640",
-"7'	c #C34E3D",
-"8'	c #A45A3A",
-"9'	c #F37438",
-"0'	c #F28935",
-"a'	c #AF422F",
-"b'	c #240D2B",
-"c'	c #88292F",
-"d'	c #FA8E34",
-"e'	c #FC7E38",
-"f'	c #FC5939",
-"g'	c #694A37",
-"h'	c #693437",
-"i'	c #382638",
-"j'	c #142439",
-"k'	c #9F483A",
-"l'	c #C45E3C",
-"m'	c #FD7240",
-"n'	c #FF6645",
-"o'	c #FF6245",
-"p'	c #FF6045",
-"q'	c #FF6146",
-"r'	c #FF6246",
-"s'	c #FF6446",
-"t'	c #FF6545",
-"u'	c #FE763F",
-"v'	c #FE7237",
-"w'	c #C65331",
-"x'	c #3D272A",
-"y'	c #0D1E2B",
-"z'	c #683032",
-"A'	c #F9453A",
-"B'	c #FD5341",
-"C'	c #FE5A46",
-"D'	c #FF5A48",
-"E'	c #FE5948",
-"F'	c #FD5A47",
-"G'	c #FC5D43",
-"H'	c #F95B3D",
-"I'	c #713F37",
-"J'	c #1E2D32",
-"K'	c #C44531",
-"L'	c #EF7A2F",
-"M'	c #6B2E2C",
-"N'	c #0F0E2C",
-"O'	c #F56633",
-"P'	c #FA803A",
-"Q'	c #FC673E",
-"R'	c #FD673E",
-"S'	c #FC6F3C",
-"T'	c #FA6E3B",
-"U'	c #C6633A",
-"V'	c #A06739",
-"W'	c #835638",
-"X'	c #381F38",
-"Y'	c #713B38",
-"Z'	c #7B503C",
-"`'	c #FE7741",
-" )	c #FE7344",
-".)	c #FE6D46",
-"+)	c #FF6946",
-"@)	c #FF5E46",
-"#)	c #FF5D46",
-"$)	c #FF5D47",
-"%)	c #FF5F48",
-"&)	c #FF6248",
-"*)	c #FE6941",
-"=)	c #FC783C",
-"-)	c #C46B35",
-";)	c #892730",
-">)	c #111629",
-",)	c #1F2630",
-"')	c #AD3939",
-"))	c #FC5D41",
-"!)	c #FE5946",
-"~)	c #FF5848",
-"{)	c #FE5549",
-"])	c #FC5E42",
-"^)	c #FA673B",
-"/)	c #DB7033",
-"()	c #392E2B",
-"_)	c #311A28",
-":)	c #3C2127",
-"<)	c #1D1027",
-"[)	c #92102C",
-"})	c #F58336",
-"|)	c #FA673E",
-"1)	c #FD6642",
-"2)	c #FD5A41",
-"3)	c #FC6D41",
-"4)	c #FC6D3F",
-"5)	c #FD683E",
-"6)	c #F38C39",
-"7)	c #CE6535",
-"8)	c #612E34",
-"9)	c #1D2637",
-"0)	c #71513E",
-"a)	c #FF6847",
-"b)	c #FF5F47",
-"c)	c #FF5A46",
-"d)	c #FF5847",
-"e)	c #FF5748",
-"f)	c #FF594A",
-"g)	c #FF5E4B",
-"h)	c #FE654C",
-"i)	c #FE694B",
-"j)	c #FE6B48",
-"k)	c #FC6A43",
-"l)	c #F7683E",
-"m)	c #EC6E39",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                              . + @ # $   %                                                     ",
-"                                                            & * = - ; > , ' ) ! ~                                               ",
-"                                                            { ] ^ / ( _ : < [ } | 1 2                                           ",
-"                                                        3 4 5 6 7 8 9 0 a b c d e f g h i j                                     ",
-"                                                      k l m n o p q r s t u v w x y z A B C D                                   ",
-"                                                    E F G H I J K L M N O P Q R S T U V W X Y Z `                               ",
-"                                                   ...+. at .#.$.%.&.*.=.-.;.>.,.S '.).!.~.{.].^./.(._.                            ",
-"                                              :.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.!.S f.g.h.i.j.k.                          ",
-"                                              l.m.n.o.p.q.r.s.t.u.J v.w.x.y.z.A.c.d.d.B.C.D.E.F.G.H.I.                          ",
-"                                            J.K.L.M.N.O.P.Q.R.t S.T.U.V.W.X.Y.Z.`. +d.d..+B.'.++ at +#+$+%+                        ",
-"                                      &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+d.2+3+4+d.5+6+7+8+9+0+                      ",
-"                                    a+b+c+d+e+f+g+h+i+j+k+l+m+n+^+o+p+q+r+s+t+u+v+b.w+x+y+z+A+w+B+C+D+E+F+G+                    ",
-"                                H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+Q ,.X+Y+Z+`+ @. at +@@@#@$@%@&@*@=@#@-@;@>@,@'@                    ",
-"                                )@!@~@{@]@^@/@(@_@:@<@[@}@|@1 at 2@3 at R ,.4 at 5@6 at 7@8 at 9@0 at a@#@b at c@=@d at e@f at g@>@h at i@j@                  ",
-"                                k at l@m at n@o at p@q at r@s at t@u at v@w at x@y@^+R S z at A@z.q+B at C@D at E@F at G@H@#@e@#@#@f at g@I at J@K at L@                  ",
-"                                M at N@O at P@Q at R@S at T@U at V@W at X@Y at Z@`@ #.#+#+#S A@@###$#%#&#*#=#-#f at B+B+B+f@;#>#,#'#)#                  ",
-"                                !#~#{#]#^#/#(#(#_#:#<#[#}#|#1#^+.#S +#+#z at 2#3#4#5#6#7#8#9#0#A.B+B+a#A.@@b#c#d#                  ",
-"                              e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#.#w#S R ^+x#y#z#A#B#C#D#-#A.a#`.`.b.g at E#d#F#                  ",
-"                          G#0 at H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#>.W#3 at v#R R X+X#Y#s#Z#`# $.$+$@$g at f@5+5+#$6+$$%$&$                  ",
-"                          *$=$-$;$>$,$'$)$!$~${$]$^$/$($_$*$u#:$Q 3@,.X+z.<$[$}$|$1$2$3$4$5$6$7$e at 8$#$G at 9$0$a$                  ",
-"                        ,.4 at E#b$c$d$e$f$g$h$i$j$k$l$m$n$`@>.:$o$3@,. #a.p$q$r$s$t$u$v$w$x$y$z$A$B$#@C$D$E$F$G$                  ",
-"                      R S H$v+I$J$K$n+L$:$o$o$M$N$L$O$P$Q$R$N$o$3 at S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%                  ",
-"                      E.,%~.'%Z.4 at v W#o$)%)%)%Q !%~%{%]%^%Q$u u#/%(%_%:%<%[%}%|%1%2%3%4%=%5%6%7%8%9%0%a%b%c%d%                  ",
-"                    e%f%g%a#,%,%z at R 3 at 3@3@)%Q h%i%j%k%l%m%{+n%o%p%q%r%s%t%u%v%w%x%y%z%A%*%B%C%D%E%F%G%H%I%                      ",
-"                    J%K%L%M%N%D.S v#)%)%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&f at a##@=&-&;&>&,&'&)&                        ",
-"                  !&~&{&]&^&.#w#^&/%/&(&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&e at 1+5+e@f&g&h&i&j&                            ",
-"                k&l&m&n&o&p&q&r&i%s&3.t&u&v&w&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&1+`.e at f&Q&R&S&T&                            ",
-"                0 U&V&W&X&<&Y&j%Z&`& *.*+*@*#*$*%*&***=*-*;*>*>*,*'*)*!*~*{*]*^*/*(*a#B+#@_*:*<*[*}*                            ",
-"                |*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*E.w*d.e at x*y*z*A*B*                            ",
-"                C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*l*X*o*o*Y*Z*`* =.=+=@=#='%$=%=e@&=*===-=;=                            ",
-"                >=,='=)=!=~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=p*6=6=7=8=9=0=a=b=c=d=A@~.b.B+e=f=g=h=i=                            ",
-"                    j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=5=Z*B=C=D=E=8=F=G=H=I=J=K=S$R z@'%L=M=N=O=                              ",
-"                    P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+- at -#-$-5=p*E=D=%-%-q*&-*-=---;->-,-/%3@^+'-)-!-~-                              ",
-"                  {-]-^-/-(-_-:-<-[-}-|-1-2- -3-4-5-6-7-8-n*m*9-0-9-o*a-b-c-d-e-f-g-(&h%w c h-i-                                ",
-"                j-k-l-m-n-o-p-q-r-s-t-u-v-w-,-x-y-z-A-B-C-D-E-E-F-G-_ at m*H-I-J-K-L-M-N-O-P-(+Q-                                  ",
-"                R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;-;;;>;,;';);!;~;{;];^;/;(;_;:;<;[;};                                  ",
-"                |;1;2;3;4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;j;k;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;                                    ",
-"                z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;k;Y;Z;`; >r;.>+>@>#>$>                                        ",
-"                %>&>*>=>->;>>>,>'>,>)>F;8;!>~>{>]>^>/>(>_>:>i;<>[>X;}>i;|>1>q;2>3>4>5>6>                                        ",
-"                7>8>=>9>0>a>b>c>d>,>e>e>f>g>h>i>j>k>l>m>n>:>i;o>p>q>W;r>s>t>p;u>v>w>x>y>                                        ",
-"                z>A>9>0>B>C>c>D>E>F>G>G>F>H>I>J>K>L>M>N>O>P>Q>R>o>R>T;s>S>S>S>t>1>T>U>V>W>X>Y>                                  ",
-"                Z>`> ,9>B>.,D>+,@,#,$,%,$,&,*,=,-,;,>,,,',),P>!,!,_>~,t>s>{,],{,],^,/,(,_,:,<,[,},                              ",
-"                |,`>1,2,3,G>+,4,o>o>4,@,@,5,6,7,8,9,0,a,b,c,d,e,f,g,h, >~,|>T;T;T;i,j,k,l,m,n,o,p,q,r,                          ",
-"                s,t,u,v,G>%,@,o>w,R>x,p>@,5,6,y,z,A,B,C,D,E,F,G,H,I,J,K,L,L,i,i;i;i;Q>S;M,N,P>O,P,Q,R,S,                        ",
-"                T,U,V,W,%,X,Y,Z,`,[>q>@, '.'+'@'#'$'%'&'*'='-';'>',''')'!'~'{'N,i,:>_>]'M,M,Q>_>^'/'('_':'<'                    ",
-"                ['}'|'1'$,X,2'p>3'4'2'@,5'6'7'8'9'0'a'b'c'd'e'f'g'h'i'j'k'l'd,m'g, > >n'o'p'q'r's't'.>u'v'w'x'                  ",
-"                y'z'A'B'C'X,X,2'D'E'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'`' ).)+)r'@)#)$)%)&)l;1>*)=)-);)                ",
-"                >),)')))!)X,E'X,~){)d>!)])^)/)()_):)<)[)})|)1)f,2)3)4)5)6)7)8)9)0)*--*a)b)c)d)e)f)g)h)i)j)k)l)m)                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                "};
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure.rb
deleted file mode 100644
index b86d905..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-require 'json/common'
-require 'json/pure/parser'
-require 'json/pure/generator'
-
-module JSON
-  begin
-    require 'iconv'
-    # An iconv instance to convert from UTF8 to UTF16 Big Endian.
-    UTF16toUTF8 = Iconv.new('utf-8', 'utf-16be') # :nodoc:
-    # An iconv instance to convert from UTF16 Big Endian to UTF8.
-    UTF8toUTF16 = Iconv.new('utf-16be', 'utf-8') # :nodoc:
-    UTF8toUTF16.iconv('no bom')
-  rescue Errno::EINVAL, Iconv::InvalidEncoding
-    # Iconv doesn't support big endian utf-16. Let's try to hack this manually
-    # into the converters.
-    begin
-      old_verbose, $VERBSOSE = $VERBOSE, nil
-      # An iconv instance to convert from UTF8 to UTF16 Big Endian.
-      UTF16toUTF8 = Iconv.new('utf-8', 'utf-16') # :nodoc:
-      # An iconv instance to convert from UTF16 Big Endian to UTF8.
-      UTF8toUTF16 = Iconv.new('utf-16', 'utf-8') # :nodoc:
-      UTF8toUTF16.iconv('no bom')
-      if UTF8toUTF16.iconv("\xe2\x82\xac") == "\xac\x20"
-        swapper = Class.new do
-          def initialize(iconv) # :nodoc:
-            @iconv = iconv
-          end
-
-          def iconv(string) # :nodoc:
-            result = @iconv.iconv(string)
-            JSON.swap!(result)
-          end
-        end
-        UTF8toUTF16 = swapper.new(UTF8toUTF16) # :nodoc:
-      end
-      if UTF16toUTF8.iconv("\xac\x20") == "\xe2\x82\xac"
-        swapper = Class.new do
-          def initialize(iconv) # :nodoc:
-            @iconv = iconv
-          end
-
-          def iconv(string) # :nodoc:
-            string = JSON.swap!(string.dup)
-            @iconv.iconv(string)
-          end
-        end
-        UTF16toUTF8 = swapper.new(UTF16toUTF8) # :nodoc:
-      end
-    rescue Errno::EINVAL, Iconv::InvalidEncoding
-      raise MissingUnicodeSupport, "iconv doesn't seem to support UTF-8/UTF-16 conversions"
-    ensure
-      $VERBOSE = old_verbose
-    end
-  rescue LoadError
-    raise MissingUnicodeSupport,
-      "iconv couldn't be loaded, which is required for UTF-8/UTF-16 conversions"
-  end
-
-  # Swap consecutive bytes of _string_ in place.
-  def self.swap!(string) # :nodoc:
-    0.upto(string.size / 2) do |i|
-      break unless string[2 * i + 1]
-      string[2 * i], string[2 * i + 1] = string[2 * i + 1], string[2 * i]
-    end
-    string
-  end
-
-  # This module holds all the modules/classes that implement JSON's
-  # functionality in pure ruby.
-  module Pure
-    $DEBUG and warn "Using pure library for JSON."
-    JSON.parser = Parser
-    JSON.generator = Generator
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure/generator.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure/generator.rb
deleted file mode 100644
index c8bbfd0..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure/generator.rb
+++ /dev/null
@@ -1,394 +0,0 @@
-module JSON
-  MAP = {
-    "\x0" => '\u0000',
-    "\x1" => '\u0001',
-    "\x2" => '\u0002',
-    "\x3" => '\u0003',
-    "\x4" => '\u0004',
-    "\x5" => '\u0005',
-    "\x6" => '\u0006',
-    "\x7" => '\u0007',
-    "\b"  =>  '\b',
-    "\t"  =>  '\t',
-    "\n"  =>  '\n',
-    "\xb" => '\u000b',
-    "\f"  =>  '\f',
-    "\r"  =>  '\r',
-    "\xe" => '\u000e',
-    "\xf" => '\u000f',
-    "\x10" => '\u0010',
-    "\x11" => '\u0011',
-    "\x12" => '\u0012',
-    "\x13" => '\u0013',
-    "\x14" => '\u0014',
-    "\x15" => '\u0015',
-    "\x16" => '\u0016',
-    "\x17" => '\u0017',
-    "\x18" => '\u0018',
-    "\x19" => '\u0019',
-    "\x1a" => '\u001a',
-    "\x1b" => '\u001b',
-    "\x1c" => '\u001c',
-    "\x1d" => '\u001d',
-    "\x1e" => '\u001e',
-    "\x1f" => '\u001f',
-    '"'   =>  '\"',
-    '\\'  =>  '\\\\',
-    '/'   =>  '\/',
-  } # :nodoc:
-
-  # Convert a UTF8 encoded Ruby string _string_ to a JSON string, encoded with
-  # UTF16 big endian characters as \u????, and return it.
-  def utf8_to_json(string) # :nodoc:
-    string = string.gsub(/["\\\/\x0-\x1f]/) { MAP[$&] }
-    string.gsub!(/(
-                    (?:
-                      [\xc2-\xdf][\x80-\xbf]    |
-                      [\xe0-\xef][\x80-\xbf]{2} |
-                      [\xf0-\xf4][\x80-\xbf]{3}
-                    )+ |
-                    [\x80-\xc1\xf5-\xff]       # invalid
-                  )/nx) { |c|
-      c.size == 1 and raise GeneratorError, "invalid utf8 byte: '#{c}'"
-      s = JSON::UTF8toUTF16.iconv(c).unpack('H*')[0]
-      s.gsub!(/.{4}/n, '\\\\u\&')
-    }
-    string
-  rescue Iconv::Failure => e
-    raise GeneratorError, "Caught #{e.class}: #{e}"
-  end
-  module_function :utf8_to_json
-
-  module Pure
-    module Generator
-      # This class is used to create State instances, that are use to hold data
-      # while generating a JSON text from a a Ruby data structure.
-      class State
-        # Creates a State object from _opts_, which ought to be Hash to create
-        # a new State instance configured by _opts_, something else to create
-        # an unconfigured instance. If _opts_ is a State object, it is just
-        # returned.
-        def self.from_state(opts)
-          case opts
-          when self
-            opts
-          when Hash
-            new(opts)
-          else
-            new
-          end
-        end
-
-        # Instantiates a new State object, configured by _opts_.
-        #
-        # _opts_ can have the following keys:
-        #
-        # * *indent*: a string used to indent levels (default: ''),
-        # * *space*: a string that is put after, a : or , delimiter (default: ''),
-        # * *space_before*: a string that is put before a : pair delimiter (default: ''),
-        # * *object_nl*: a string that is put at the end of a JSON object (default: ''), 
-        # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
-        # * *check_circular*: true if checking for circular data structures
-        #   should be done (the default), false otherwise.
-        # * *check_circular*: true if checking for circular data structures
-        #   should be done, false (the default) otherwise.
-        # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
-        #   generated, otherwise an exception is thrown, if these values are
-        #   encountered. This options defaults to false.
-        def initialize(opts = {})
-          @seen = {}
-          @indent         = ''
-          @space          = ''
-          @space_before   = ''
-          @object_nl      = ''
-          @array_nl       = ''
-          @check_circular = true
-          @allow_nan      = false
-          configure opts
-        end
-
-        # This string is used to indent levels in the JSON text.
-        attr_accessor :indent
-
-        # This string is used to insert a space between the tokens in a JSON
-        # string.
-        attr_accessor :space
-
-        # This string is used to insert a space before the ':' in JSON objects.
-        attr_accessor :space_before
-
-        # This string is put at the end of a line that holds a JSON object (or
-        # Hash).
-        attr_accessor :object_nl
-
-        # This string is put at the end of a line that holds a JSON array.
-        attr_accessor :array_nl
-
-        # This integer returns the maximum level of data structure nesting in
-        # the generated JSON, max_nesting = 0 if no maximum is checked.
-        attr_accessor :max_nesting
-
-        def check_max_nesting(depth) # :nodoc:
-          return if @max_nesting.zero?
-          current_nesting = depth + 1
-          current_nesting > @max_nesting and
-            raise NestingError, "nesting of #{current_nesting} is too deep"
-        end
-
-        # Returns true, if circular data structures should be checked,
-        # otherwise returns false.
-        def check_circular?
-          @check_circular
-        end
-
-        # Returns true if NaN, Infinity, and -Infinity should be considered as
-        # valid JSON and output.
-        def allow_nan?
-          @allow_nan
-        end
-
-        # Returns _true_, if _object_ was already seen during this generating
-        # run. 
-        def seen?(object)
-          @seen.key?(object.__id__)
-        end
-
-        # Remember _object_, to find out if it was already encountered (if a
-        # cyclic data structure is if a cyclic data structure is rendered). 
-        def remember(object)
-          @seen[object.__id__] = true
-        end
-
-        # Forget _object_ for this generating run.
-        def forget(object)
-          @seen.delete object.__id__
-        end
-
-        # Configure this State instance with the Hash _opts_, and return
-        # itself.
-        def configure(opts)
-          @indent         = opts[:indent] if opts.key?(:indent)
-          @space          = opts[:space] if opts.key?(:space)
-          @space_before   = opts[:space_before] if opts.key?(:space_before)
-          @object_nl      = opts[:object_nl] if opts.key?(:object_nl)
-          @array_nl       = opts[:array_nl] if opts.key?(:array_nl)
-          @check_circular = !!opts[:check_circular] if opts.key?(:check_circular)
-          @allow_nan      = !!opts[:allow_nan] if opts.key?(:allow_nan)
-          if !opts.key?(:max_nesting) # defaults to 19
-            @max_nesting = 19
-          elsif opts[:max_nesting]
-            @max_nesting = opts[:max_nesting]
-          else
-            @max_nesting = 0
-          end
-          self
-        end
-
-        # Returns the configuration instance variables as a hash, that can be
-        # passed to the configure method.
-        def to_h
-          result = {}
-          for iv in %w[indent space space_before object_nl array_nl check_circular allow_nan max_nesting]
-            result[iv.intern] = instance_variable_get("@#{iv}")
-          end
-          result
-        end
-      end
-
-      module GeneratorMethods
-        module Object
-          # Converts this object to a string (calling #to_s), converts
-          # it to a JSON string, and returns the result. This is a fallback, if no
-          # special method #to_json was defined for some object.
-          def to_json(*) to_s.to_json end
-        end
-
-        module Hash
-          # Returns a JSON string containing a JSON object, that is unparsed from
-          # this Hash instance.
-          # _state_ is a JSON::State object, that can also be used to configure the
-          # produced JSON string output further.
-          # _depth_ is used to find out nesting depth, to indent accordingly.
-          def to_json(state = nil, depth = 0, *)
-            if state
-              state = JSON.state.from_state(state)
-              state.check_max_nesting(depth)
-              json_check_circular(state) { json_transform(state, depth) }
-            else
-              json_transform(state, depth)
-            end
-          end
-
-          private
-
-          def json_check_circular(state)
-            if state and state.check_circular?
-              state.seen?(self) and raise JSON::CircularDatastructure,
-                  "circular data structures not supported!"
-              state.remember self
-            end
-            yield
-          ensure
-            state and state.forget self
-          end
-
-          def json_shift(state, depth)
-            state and not state.object_nl.empty? or return ''
-            state.indent * depth
-          end
-
-          def json_transform(state, depth)
-            delim = ','
-            delim << state.object_nl if state
-            result = '{'
-            result << state.object_nl if state
-            result << map { |key,value|
-              s = json_shift(state, depth + 1)
-              s << key.to_s.to_json(state, depth + 1)
-              s << state.space_before if state
-              s << ':'
-              s << state.space if state
-              s << value.to_json(state, depth + 1)
-            }.join(delim)
-            result << state.object_nl if state
-            result << json_shift(state, depth)
-            result << '}'
-            result
-          end
-        end
-
-        module Array
-          # Returns a JSON string containing a JSON array, that is unparsed from
-          # this Array instance.
-          # _state_ is a JSON::State object, that can also be used to configure the
-          # produced JSON string output further.
-          # _depth_ is used to find out nesting depth, to indent accordingly.
-          def to_json(state = nil, depth = 0, *)
-            if state
-              state = JSON.state.from_state(state)
-              state.check_max_nesting(depth)
-              json_check_circular(state) { json_transform(state, depth) }
-            else
-              json_transform(state, depth)
-            end
-          end
-
-          private
-
-          def json_check_circular(state)
-            if state and state.check_circular?
-              state.seen?(self) and raise JSON::CircularDatastructure,
-                "circular data structures not supported!"
-              state.remember self
-            end
-            yield
-          ensure
-            state and state.forget self
-          end
-
-          def json_shift(state, depth)
-            state and not state.array_nl.empty? or return ''
-            state.indent * depth
-          end
-
-          def json_transform(state, depth)
-            delim = ','
-            delim << state.array_nl if state
-            result = '['
-            result << state.array_nl if state
-            result << map { |value|
-              json_shift(state, depth + 1) << value.to_json(state, depth + 1)
-            }.join(delim)
-            result << state.array_nl if state
-            result << json_shift(state, depth) 
-            result << ']'
-            result
-          end
-        end
-
-        module Integer
-          # Returns a JSON string representation for this Integer number.
-          def to_json(*) to_s end
-        end
-
-        module Float
-          # Returns a JSON string representation for this Float number.
-          def to_json(state = nil, *)
-            case
-            when infinite?
-              if !state || state.allow_nan?
-                to_s
-              else
-                raise GeneratorError, "#{self} not allowed in JSON"
-              end
-            when nan?
-              if !state || state.allow_nan?
-                to_s
-              else
-                raise GeneratorError, "#{self} not allowed in JSON"
-              end
-            else
-              to_s
-            end
-          end
-        end
-
-        module String
-          # This string should be encoded with UTF-8 A call to this method
-          # returns a JSON string encoded with UTF16 big endian characters as
-          # \u????.
-          def to_json(*)
-            '"' << JSON.utf8_to_json(self) << '"'
-          end
-
-          # Module that holds the extinding methods if, the String module is
-          # included.
-          module Extend
-            # Raw Strings are JSON Objects (the raw bytes are stored in an array for the
-            # key "raw"). The Ruby String can be created by this module method.
-            def json_create(o)
-              o['raw'].pack('C*')
-            end
-          end
-
-          # Extends _modul_ with the String::Extend module.
-          def self.included(modul)
-            modul.extend Extend
-          end
-
-          # This method creates a raw object hash, that can be nested into
-          # other data structures and will be unparsed as a raw string. This
-          # method should be used, if you want to convert raw strings to JSON
-          # instead of UTF-8 strings, e. g. binary data.
-          def to_json_raw_object
-            {
-              JSON.create_id  => self.class.name,
-              'raw'           => self.unpack('C*'),
-            }
-          end
-
-          # This method creates a JSON text from the result of
-          # a call to to_json_raw_object of this String.
-          def to_json_raw(*args)
-            to_json_raw_object.to_json(*args)
-          end
-        end
-
-        module TrueClass
-          # Returns a JSON string for true: 'true'.
-          def to_json(*) 'true' end
-        end
-
-        module FalseClass
-          # Returns a JSON string for false: 'false'.
-          def to_json(*) 'false' end
-        end
-
-        module NilClass
-          # Returns a JSON string for nil: 'null'.
-          def to_json(*) 'null' end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure/parser.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure/parser.rb
deleted file mode 100644
index 9b30f15..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/pure/parser.rb
+++ /dev/null
@@ -1,259 +0,0 @@
-require 'strscan'
-
-module JSON
-  module Pure
-    # This class implements the JSON parser that is used to parse a JSON string
-    # into a Ruby data structure.
-    class Parser < StringScanner
-      STRING                = /" ((?:[^\x0-\x1f"\\] |
-                                  \\["\\\/bfnrt] |
-                                  \\u[0-9a-fA-F]{4} |
-                                  \\[\x20-\xff])*)
-                              "/nx
-      INTEGER               = /(-?0|-?[1-9]\d*)/
-      FLOAT                 = /(-?
-                                (?:0|[1-9]\d*)
-                                (?:
-                                  \.\d+(?i:e[+-]?\d+) |
-                                  \.\d+ |
-                                  (?i:e[+-]?\d+)
-                                )
-                                )/x
-      NAN                   = /NaN/
-      INFINITY              = /Infinity/
-      MINUS_INFINITY        = /-Infinity/
-      OBJECT_OPEN           = /\{/
-      OBJECT_CLOSE          = /\}/
-      ARRAY_OPEN            = /\[/
-      ARRAY_CLOSE           = /\]/
-      PAIR_DELIMITER        = /:/
-      COLLECTION_DELIMITER  = /,/
-      TRUE                  = /true/
-      FALSE                 = /false/
-      NULL                  = /null/
-      IGNORE                = %r(
-        (?:
-         //[^\n\r]*[\n\r]| # line comments
-         /\*               # c-style comments
-         (?:
-          [^*/]|        # normal chars
-          /[^*]|        # slashes that do not start a nested comment
-          \*[^/]|       # asterisks that do not end this comment
-          /(?=\*/)      # single slash before this comment's end 
-         )*
-           \*/               # the End of this comment
-           |[ \t\r\n]+       # whitespaces: space, horicontal tab, lf, cr
-        )+
-      )mx
-
-      UNPARSED = Object.new
-
-      # Creates a new JSON::Pure::Parser instance for the string _source_.
-      #
-      # It will be configured by the _opts_ hash. _opts_ can have the following
-      # keys:
-      # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
-      #   structures. Disable depth checking with :max_nesting => false|nil|0,
-      #   it defaults to 19.
-      # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
-      #   defiance of RFC 4627 to be parsed by the Parser. This option defaults
-      #   to false.
-      # * *create_additions*: If set to false, the Parser doesn't create
-      #   additions even if a matchin class and create_id was found. This option
-      #   defaults to true.
-      def initialize(source, opts = {})
-        super
-        if !opts.key?(:max_nesting) # defaults to 19
-          @max_nesting = 19
-        elsif opts[:max_nesting]
-          @max_nesting = opts[:max_nesting]
-        else
-          @max_nesting = 0
-        end
-        @allow_nan = !!opts[:allow_nan]
-        ca = true
-        ca = opts[:create_additions] if opts.key?(:create_additions)
-        @create_id = ca ? JSON.create_id : nil
-      end
-
-      alias source string
-
-      # Parses the current JSON string _source_ and returns the complete data
-      # structure as a result.
-      def parse
-        reset
-        obj = nil
-        until eos?
-          case
-          when scan(OBJECT_OPEN)
-            obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
-            @current_nesting = 1
-            obj = parse_object
-          when scan(ARRAY_OPEN)
-            obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
-            @current_nesting = 1
-            obj = parse_array
-          when skip(IGNORE)
-            ;
-          else
-            raise ParserError, "source '#{peek(20)}' not in JSON!"
-          end
-        end
-        obj or raise ParserError, "source did not contain any JSON!"
-        obj
-      end
-
-      private
-
-      # Unescape characters in strings.
-      UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
-      UNESCAPE_MAP.update({
-        ?"  => '"',
-        ?\\ => '\\',
-        ?/  => '/',
-        ?b  => "\b",
-        ?f  => "\f",
-        ?n  => "\n",
-        ?r  => "\r",
-        ?t  => "\t",
-        ?u  => nil, 
-      })
-
-      def parse_string
-        if scan(STRING)
-          return '' if self[1].empty?
-          self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c|
-            if u = UNESCAPE_MAP[$&[1]]
-              u
-            else # \uXXXX
-              bytes = ''
-              i = 0
-              while c[6 * i] == ?\\ && c[6 * i + 1] == ?u 
-                bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16)
-                i += 1
-              end
-              JSON::UTF16toUTF8.iconv(bytes)
-            end
-          end
-        else
-          UNPARSED
-        end
-      rescue Iconv::Failure => e
-        raise GeneratorError, "Caught #{e.class}: #{e}"
-      end
-
-      def parse_value
-        case
-        when scan(FLOAT)
-          Float(self[1])
-        when scan(INTEGER)
-          Integer(self[1])
-        when scan(TRUE)
-          true
-        when scan(FALSE)
-          false
-        when scan(NULL)
-          nil
-        when (string = parse_string) != UNPARSED
-          string
-        when scan(ARRAY_OPEN)
-          @current_nesting += 1
-          ary = parse_array
-          @current_nesting -= 1
-          ary
-        when scan(OBJECT_OPEN)
-          @current_nesting += 1
-          obj = parse_object
-          @current_nesting -= 1
-          obj
-        when @allow_nan && scan(NAN)
-          NaN
-        when @allow_nan && scan(INFINITY)
-          Infinity
-        when @allow_nan && scan(MINUS_INFINITY)
-          MinusInfinity
-        else
-          UNPARSED
-        end
-      end
-
-      def parse_array
-        raise NestingError, "nesting of #@current_nesting is to deep" if
-          @max_nesting.nonzero? && @current_nesting > @max_nesting
-        result = []
-        delim = false
-        until eos?
-          case
-          when (value = parse_value) != UNPARSED
-            delim = false
-            result << value
-            skip(IGNORE)
-            if scan(COLLECTION_DELIMITER)
-              delim = true
-            elsif match?(ARRAY_CLOSE)
-              ;
-            else
-              raise ParserError, "expected ',' or ']' in array at '#{peek(20)}'!"
-            end
-          when scan(ARRAY_CLOSE)
-            if delim
-              raise ParserError, "expected next element in array at '#{peek(20)}'!"
-            end
-            break
-          when skip(IGNORE)
-            ;
-          else
-            raise ParserError, "unexpected token in array at '#{peek(20)}'!"
-          end
-        end
-        result
-      end
-
-      def parse_object
-        raise NestingError, "nesting of #@current_nesting is to deep" if
-          @max_nesting.nonzero? && @current_nesting > @max_nesting
-        result = {}
-        delim = false
-        until eos?
-          case
-          when (string = parse_string) != UNPARSED
-            skip(IGNORE)
-            unless scan(PAIR_DELIMITER)
-              raise ParserError, "expected ':' in object at '#{peek(20)}'!"
-            end
-            skip(IGNORE)
-            unless (value = parse_value).equal? UNPARSED
-              result[string] = value
-              delim = false
-              skip(IGNORE)
-              if scan(COLLECTION_DELIMITER)
-                delim = true
-              elsif match?(OBJECT_CLOSE)
-                ;
-              else
-                raise ParserError, "expected ',' or '}' in object at '#{peek(20)}'!"
-              end
-            else
-              raise ParserError, "expected value in object at '#{peek(20)}'!"
-            end
-          when scan(OBJECT_CLOSE)
-            if delim
-              raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!"
-            end
-            if @create_id and klassname = result[@create_id]
-              klass = JSON.deep_const_get klassname
-              break unless klass and klass.json_creatable?
-              result = klass.json_create(result)
-            end
-            break
-          when skip(IGNORE)
-            ;
-          else
-            raise ParserError, "unexpected token in object at '#{peek(20)}'!"
-          end
-        end
-        result
-      end
-    end
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/version.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/version.rb
deleted file mode 100644
index acf8217..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/lib/json/version.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module JSON
-  # JSON version
-  VERSION         = '1.1.3'
-  VERSION_ARRAY   = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
-  VERSION_MAJOR   = VERSION_ARRAY[0] # :nodoc:
-  VERSION_MINOR   = VERSION_ARRAY[1] # :nodoc:
-  VERSION_BUILD   = VERSION_ARRAY[2] # :nodoc:
-  VARIANT_BINARY  = false
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail1.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail1.json
deleted file mode 100644
index 6216b86..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail1.json
+++ /dev/null
@@ -1 +0,0 @@
-"A JSON payload should be an object or array, not a string."
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail10.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail10.json
deleted file mode 100644
index 5d8c004..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail10.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Extra value after close": true} "misplaced quoted value"
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail11.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail11.json
deleted file mode 100644
index 76eb95b..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail11.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Illegal expression": 1 + 2}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail12.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail12.json
deleted file mode 100644
index 77580a4..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail12.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Illegal invocation": alert()}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail13.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail13.json
deleted file mode 100644
index 379406b..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail13.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Numbers cannot have leading zeroes": 013}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail14.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail14.json
deleted file mode 100644
index 0ed366b..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail14.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Numbers cannot be hex": 0x14}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail18.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail18.json
deleted file mode 100644
index e2d130c..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail18.json
+++ /dev/null
@@ -1 +0,0 @@
-[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail19.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail19.json
deleted file mode 100644
index 3b9c46f..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail19.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Missing colon" null}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail2.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail2.json
deleted file mode 100644
index 6b7c11e..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail2.json
+++ /dev/null
@@ -1 +0,0 @@
-["Unclosed array"
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail20.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail20.json
deleted file mode 100644
index 27c1af3..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail20.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Double colon":: null}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail21.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail21.json
deleted file mode 100644
index 6247457..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail21.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Comma instead of colon", null}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail22.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail22.json
deleted file mode 100644
index a775258..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail22.json
+++ /dev/null
@@ -1 +0,0 @@
-["Colon instead of comma": false]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail23.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail23.json
deleted file mode 100644
index 494add1..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail23.json
+++ /dev/null
@@ -1 +0,0 @@
-["Bad value", truth]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail24.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail24.json
deleted file mode 100644
index caff239..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail24.json
+++ /dev/null
@@ -1 +0,0 @@
-['single quote']
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail25.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail25.json
deleted file mode 100644
index 2dfbd25..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail25.json
+++ /dev/null
@@ -1 +0,0 @@
-["tab	character	in	string	"]
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail27.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail27.json
deleted file mode 100644
index 6b01a2c..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail27.json
+++ /dev/null
@@ -1,2 +0,0 @@
-["line
-break"]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail28.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail28.json
deleted file mode 100644
index 621a010..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail28.json
+++ /dev/null
@@ -1,2 +0,0 @@
-["line\
-break"]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail3.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail3.json
deleted file mode 100644
index 168c81e..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail3.json
+++ /dev/null
@@ -1 +0,0 @@
-{unquoted_key: "keys must be quoted"}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail4.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail4.json
deleted file mode 100644
index 9de168b..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail4.json
+++ /dev/null
@@ -1 +0,0 @@
-["extra comma",]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail5.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail5.json
deleted file mode 100644
index ddf3ce3..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail5.json
+++ /dev/null
@@ -1 +0,0 @@
-["double extra comma",,]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail6.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail6.json
deleted file mode 100644
index ed91580..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail6.json
+++ /dev/null
@@ -1 +0,0 @@
-[   , "<-- missing value"]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail7.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail7.json
deleted file mode 100644
index 8a96af3..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail7.json
+++ /dev/null
@@ -1 +0,0 @@
-["Comma after the close"],
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail8.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail8.json
deleted file mode 100644
index b28479c..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail8.json
+++ /dev/null
@@ -1 +0,0 @@
-["Extra close"]]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail9.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail9.json
deleted file mode 100644
index 5815574..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/fail9.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Extra comma": true,}
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass1.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass1.json
deleted file mode 100644
index 7828fcc..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass1.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
-    "JSON Test Pattern pass1",
-    {"object with 1 member":["array with 1 element"]},
-    {},
-    [],
-    -42,
-    true,
-    false,
-    null,
-    {
-        "integer": 1234567890,
-        "real": -9876.543210,
-        "e": 0.123456789e-12,
-        "E": 1.234567890E+34,
-        "":  23456789012E666,
-        "zero": 0,
-        "one": 1,
-        "space": " ",
-        "quote": "\"",
-        "backslash": "\\",
-        "controls": "\b\f\n\r\t",
-        "slash": "/ & \/",
-        "alpha": "abcdefghijklmnopqrstuvwyz",
-        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
-        "digit": "0123456789",
-        "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
-        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
-        "true": true,
-        "false": false,
-        "null": null,
-        "array":[  ],
-        "object":{  },
-        "address": "50 St. James Street",
-        "url": "http://www.JSON.org/",
-        "comment": "// /* <!-- --",
-        "# -- --> */": " ",
-        " s p a c e d " :[1,2 , 3
-
-,
-
-4 , 5        ,          6           ,7        ],
-        "compact": [1,2,3,4,5,6,7],
-        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
-        "quotes": "" \u0022 %22 0x22 034 &#x22;",
-        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
-: "A key can be any string"
-    },
-    0.5 ,98.6
-,
-99.44
-,
-
-1066
-
-
-,"rosebud"]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass15.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass15.json
deleted file mode 100644
index fc8376b..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass15.json
+++ /dev/null
@@ -1 +0,0 @@
-["Illegal backslash escape: \x15"]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass16.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass16.json
deleted file mode 100644
index c43ae3c..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass16.json
+++ /dev/null
@@ -1 +0,0 @@
-["Illegal backslash escape: \'"]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass17.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass17.json
deleted file mode 100644
index 62b9214..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass17.json
+++ /dev/null
@@ -1 +0,0 @@
-["Illegal backslash escape: \017"]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass2.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass2.json
deleted file mode 100644
index d3c63c7..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass2.json
+++ /dev/null
@@ -1 +0,0 @@
-[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass26.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass26.json
deleted file mode 100644
index 845d26a..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass26.json
+++ /dev/null
@@ -1 +0,0 @@
-["tab\   character\   in\  string\  "]
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass3.json b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass3.json
deleted file mode 100644
index 4528d51..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/fixtures/pass3.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-    "JSON Test Pattern pass3": {
-        "The outermost value": "must be an object or array.",
-        "In this test": "It is an object."
-    }
-}
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/runner.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/runner.rb
deleted file mode 100755
index 9ad0448..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/runner.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit/ui/console/testrunner'
-require 'test/unit/testsuite'
-$:.unshift File.expand_path(File.dirname($0))
-$:.unshift 'tests'
-require 'test_json'
-require 'test_json_generate'
-require 'test_json_unicode'
-require 'test_json_addition'
-require 'test_json_rails'
-require 'test_json_fixtures'
-
-class TS_AllTests
-  def self.suite
-    suite = Test::Unit::TestSuite.new name
-    suite << TC_JSONGenerate.suite
-    suite << TC_JSON.suite
-    suite << TC_JSONUnicode.suite
-    suite << TC_JSONAddition.suite
-    suite << TC_JSONRails.suite
-    suite << TC_JSONFixtures.suite
-  end
-end
-Test::Unit::UI::Console::TestRunner.run(TS_AllTests)
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json.rb
deleted file mode 100755
index d7e8288..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json.rb
+++ /dev/null
@@ -1,293 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json'
-require 'stringio'
-
-class TC_JSON < Test::Unit::TestCase
-  include JSON
-
-  def setup
-    $KCODE = 'UTF8'
-    @ary = [1, "foo", 3.14, 4711.0, 2.718, nil, [1,-2,3], false, true].map do
-      |x| [x]
-    end
-    @ary_to_parse = ["1", '"foo"', "3.14", "4711.0", "2.718", "null",
-      "[1,-2,3]", "false", "true"].map do
-      |x| "[#{x}]"
-    end
-    @hash = {
-      'a' => 2,
-      'b' => 3.141,
-      'c' => 'c',
-      'd' => [ 1, "b", 3.14 ],
-      'e' => { 'foo' => 'bar' },
-      'g' => "\"\0\037",
-      'h' => 1000.0,
-      'i' => 0.001
-    }
-    @json = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' +
-      '"g":"\\"\\u0000\\u001f","h":1.0E3,"i":1.0E-3}'
-  end
-    suite << TC_JSON.suite
-
-  def test_construction
-    parser = JSON::Parser.new('test')
-    assert_equal 'test', parser.source
-  end
-
-  def assert_equal_float(expected, is)
-    assert_in_delta(expected.first, is.first, 1e-2)
-  end
-
-  def test_parse_simple_arrays
-    assert_equal([], parse('[]'))
-    assert_equal([], parse('  [  ] '))
-    assert_equal([nil], parse('[null]'))
-    assert_equal([false], parse('[false]'))
-    assert_equal([true], parse('[true]'))
-    assert_equal([-23], parse('[-23]'))
-    assert_equal([23], parse('[23]'))
-    assert_equal([0.23], parse('[0.23]'))
-    assert_equal([0.0], parse('[0e0]'))
-    assert_raises(JSON::ParserError) { parse('[+23.2]') }
-    assert_raises(JSON::ParserError) { parse('[+23]') }
-    assert_raises(JSON::ParserError) { parse('[.23]') }
-    assert_raises(JSON::ParserError) { parse('[023]') }
-    assert_equal_float [3.141], parse('[3.141]')
-    assert_equal_float [-3.141], parse('[-3.141]')
-    assert_equal_float [3.141], parse('[3141e-3]')
-    assert_equal_float [3.141], parse('[3141.1e-3]')
-    assert_equal_float [3.141], parse('[3141E-3]')
-    assert_equal_float [3.141], parse('[3141.0E-3]')
-    assert_equal_float [-3.141], parse('[-3141.0e-3]')
-    assert_equal_float [-3.141], parse('[-3141e-3]')
-    assert_raises(ParserError) { parse('[NaN]') }
-    assert parse('[NaN]', :allow_nan => true).first.nan?
-    assert_raises(ParserError) { parse('[Infinity]') }
-    assert_equal [1.0/0], parse('[Infinity]', :allow_nan => true)
-    assert_raises(ParserError) { parse('[-Infinity]') }
-    assert_equal [-1.0/0], parse('[-Infinity]', :allow_nan => true)
-    assert_equal([""], parse('[""]'))
-    assert_equal(["foobar"], parse('["foobar"]'))
-    assert_equal([{}], parse('[{}]'))
-  end
-
-  def test_parse_simple_objects
-    assert_equal({}, parse('{}'))
-    assert_equal({}, parse(' {   }   '))
-    assert_equal({ "a" => nil }, parse('{   "a"   :  null}'))
-    assert_equal({ "a" => nil }, parse('{"a":null}'))
-    assert_equal({ "a" => false }, parse('{   "a"  :  false  }  '))
-    assert_equal({ "a" => false }, parse('{"a":false}'))
-    assert_raises(JSON::ParserError) { parse('{false}') }
-    assert_equal({ "a" => true }, parse('{"a":true}'))
-    assert_equal({ "a" => true }, parse('  { "a" :  true  }   '))
-    assert_equal({ "a" => -23 }, parse('  {  "a"  :  -23  }  '))
-    assert_equal({ "a" => -23 }, parse('  { "a" : -23 } '))
-    assert_equal({ "a" => 23 }, parse('{"a":23  } '))
-    assert_equal({ "a" => 23 }, parse('  { "a"  : 23  } '))
-    assert_equal({ "a" => 0.23 }, parse(' { "a"  :  0.23 }  '))
-    assert_equal({ "a" => 0.23 }, parse('  {  "a"  :  0.23  }  '))
-  end
-
-  begin
-    require 'permutation'
-    def test_parse_more_complex_arrays
-      a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
-      perms = Permutation.for a
-      perms.each do |perm|
-        orig_ary = perm.project
-        json = pretty_generate(orig_ary)
-        assert_equal orig_ary, parse(json)
-      end
-    end
-
-    def test_parse_complex_objects
-      a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
-      perms = Permutation.for a
-      perms.each do |perm|
-        s = "a"
-        orig_obj = perm.project.inject({}) { |h, x| h[s.dup] = x; s = s.succ; h }
-        json = pretty_generate(orig_obj)
-        assert_equal orig_obj, parse(json)
-      end
-    end
-  rescue LoadError
-    warn "Skipping permutation tests."
-  end
-
-  def test_parse_arrays
-    assert_equal([1,2,3], parse('[1,2,3]'))
-    assert_equal([1.2,2,3], parse('[1.2,2,3]'))
-    assert_equal([[],[[],[]]], parse('[[],[[],[]]]'))
-  end
-
-  def test_parse_values
-    assert_equal([""], parse('[""]'))
-    assert_equal(["\\"], parse('["\\\\"]'))
-    assert_equal(['"'], parse('["\""]'))
-    assert_equal(['\\"\\'], parse('["\\\\\\"\\\\"]'))
-    assert_equal(["\"\b\n\r\t\0\037"],
-      parse('["\"\b\n\r\t\u0000\u001f"]'))
-    for i in 0 ... @ary.size
-      assert_equal(@ary[i], parse(@ary_to_parse[i]))
-    end
-  end
-
-  def test_parse_array
-    assert_equal([], parse('[]'))
-    assert_equal([], parse('  [  ]  '))
-    assert_equal([1], parse('[1]'))
-    assert_equal([1], parse('  [ 1  ]  '))
-    assert_equal(@ary,
-      parse('[[1],["foo"],[3.14],[47.11e+2],[2718.0E-3],[null],[[1,-2,3]]'\
-      ',[false],[true]]'))
-    assert_equal(@ary, parse(%Q{   [   [1] , ["foo"]  ,  [3.14] \t ,  [47.11e+2] 
-      , [2718.0E-3 ],\r[ null] , [[1, -2, 3 ]], [false ],[ true]\n ]  }))
-  end
-
-  def test_parse_object
-    assert_equal({}, parse('{}'))
-    assert_equal({}, parse('  {  }  '))
-    assert_equal({'foo'=>'bar'}, parse('{"foo":"bar"}'))
-    assert_equal({'foo'=>'bar'}, parse('    { "foo"  :   "bar"   }   '))
-  end
-
-  def test_parser_reset
-    parser = Parser.new(@json)
-    assert_equal(@hash, parser.parse)
-    assert_equal(@hash, parser.parse)
-  end
-
-  def test_comments
-    json = <<EOT
-{
-  "key1":"value1", // eol comment
-  "key2":"value2"  /* multi line
-                    *  comment */,
-  "key3":"value3"  /* multi line
-                    // nested eol comment
-                    *  comment */
-}
-EOT
-    assert_equal(
-      { "key1" => "value1", "key2" => "value2", "key3" => "value3" },
-      parse(json))
-    json = <<EOT
-{
-  "key1":"value1"  /* multi line
-                    // nested eol comment
-                    /* illegal nested multi line comment */
-                    *  comment */
-}
-EOT
-    assert_raises(ParserError) { parse(json) }
-    json = <<EOT
-{
-  "key1":"value1"  /* multi line
-                   // nested eol comment
-                   closed multi comment */
-                   and again, throw an Error */
-}
-EOT
-    assert_raises(ParserError) { parse(json) }
-    json = <<EOT
-{
-  "key1":"value1"  /*/*/
-}
-EOT
-    assert_equal({ "key1" => "value1" }, parse(json))
-  end
-
-  def test_backslash
-    data = [ '\\.(?i:gif|jpe?g|png)$' ]
-    json = '["\\\\.(?i:gif|jpe?g|png)$"]'
-    assert_equal json, JSON.unparse(data)
-    assert_equal data, JSON.parse(json)
-    #
-    data = [ '\\"' ]
-    json = '["\\\\\""]'
-    assert_equal json, JSON.unparse(data)
-    assert_equal data, JSON.parse(json)
-    #
-    json = '["\/"]'
-    data = JSON.parse(json)
-    assert_equal ['/'], data
-    assert_equal json, JSON.unparse(data)
-    #
-    json = '["\""]'
-    data = JSON.parse(json)
-    assert_equal ['"'], data
-    assert_equal json, JSON.unparse(data)
-    json = '["\\\'"]'
-    data = JSON.parse(json)
-    assert_equal ["'"], data
-    assert_equal '["\'"]', JSON.unparse(data)
-  end
-
-  def test_wrong_inputs
-    assert_raises(ParserError) { JSON.parse('"foo"') }
-    assert_raises(ParserError) { JSON.parse('123') }
-    assert_raises(ParserError) { JSON.parse('[] bla') }
-    assert_raises(ParserError) { JSON.parse('[] 1') }
-    assert_raises(ParserError) { JSON.parse('[] []') }
-    assert_raises(ParserError) { JSON.parse('[] {}') }
-    assert_raises(ParserError) { JSON.parse('{} []') }
-    assert_raises(ParserError) { JSON.parse('{} {}') }
-    assert_raises(ParserError) { JSON.parse('[NULL]') }
-    assert_raises(ParserError) { JSON.parse('[FALSE]') }
-    assert_raises(ParserError) { JSON.parse('[TRUE]') }
-    assert_raises(ParserError) { JSON.parse('[07]    ') }
-    assert_raises(ParserError) { JSON.parse('[0a]') }
-    assert_raises(ParserError) { JSON.parse('[1.]') }
-    assert_raises(ParserError) { JSON.parse('     ') }
-  end
-
-  def test_nesting
-    assert_raises(JSON::NestingError) { JSON.parse '[[]]', :max_nesting => 1 }
-    assert_raises(JSON::NestingError) { JSON.parser.new('[[]]', :max_nesting => 1).parse }
-    assert_equal [[]], JSON.parse('[[]]', :max_nesting => 2)
-    too_deep = '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]'
-    too_deep_ary = eval too_deep
-    assert_raises(JSON::NestingError) { JSON.parse too_deep }
-    assert_raises(JSON::NestingError) { JSON.parser.new(too_deep).parse }
-    assert_raises(JSON::NestingError) { JSON.parse too_deep, :max_nesting => 19 }
-    ok = JSON.parse too_deep, :max_nesting => 20
-    assert_equal too_deep_ary, ok
-    ok = JSON.parse too_deep, :max_nesting => nil
-    assert_equal too_deep_ary, ok
-    ok = JSON.parse too_deep, :max_nesting => false
-    assert_equal too_deep_ary, ok
-    ok = JSON.parse too_deep, :max_nesting => 0
-    assert_equal too_deep_ary, ok
-    assert_raises(JSON::NestingError) { JSON.generate [[]], :max_nesting => 1 }
-    assert_equal '[[]]', JSON.generate([[]], :max_nesting => 2)
-    assert_raises(JSON::NestingError) { JSON.generate too_deep_ary }
-    assert_raises(JSON::NestingError) { JSON.generate too_deep_ary, :max_nesting => 19 }
-    ok = JSON.generate too_deep_ary, :max_nesting => 20
-    assert_equal too_deep, ok
-    ok = JSON.generate too_deep_ary, :max_nesting => nil
-    assert_equal too_deep, ok
-    ok = JSON.generate too_deep_ary, :max_nesting => false
-    assert_equal too_deep, ok
-    ok = JSON.generate too_deep_ary, :max_nesting => 0
-    assert_equal too_deep, ok
-  end
-
-  def test_load_dump
-    too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
-    assert_equal too_deep, JSON.dump(eval(too_deep))
-    assert_kind_of String, Marshal.dump(eval(too_deep))
-    assert_raises(ArgumentError) { JSON.dump(eval(too_deep), 19) }
-    assert_raises(ArgumentError) { Marshal.dump(eval(too_deep), 19) }
-    assert_equal too_deep, JSON.dump(eval(too_deep), 20)
-    assert_kind_of String, Marshal.dump(eval(too_deep), 20)
-    output = StringIO.new
-    JSON.dump(eval(too_deep), output)
-    assert_equal too_deep, output.string
-    output = StringIO.new
-    JSON.dump(eval(too_deep), output, 20)
-    assert_equal too_deep, output.string
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_addition.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_addition.rb
deleted file mode 100755
index 248b7c9..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_addition.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json/add/core'
-require 'date'
-
-class TC_JSONAddition < Test::Unit::TestCase
-  include JSON
-
-  class A
-    def initialize(a)
-      @a = a
-    end
-
-    attr_reader :a
-
-    def ==(other)
-      a == other.a
-    end
-    
-    def self.json_create(object)
-      new(*object['args'])
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => self.class.name,
-        'args'        => [ @a ],
-      }.to_json(*args)
-    end
-  end
-
-  class B
-    def self.json_creatable?
-      false
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => self.class.name,
-      }.to_json(*args)
-    end
-  end
-
-  class C
-    def self.json_creatable?
-      false
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => 'TC_JSONAddition::Nix',
-      }.to_json(*args)
-    end
-  end
-
-  def setup
-    $KCODE = 'UTF8'
-  end
-
-  def test_extended_json
-    a = A.new(666)
-    assert A.json_creatable?
-    json = generate(a)
-    a_again = JSON.parse(json)
-    assert_kind_of a.class, a_again
-    assert_equal a, a_again
-  end
-
-  def test_extended_json_disabled
-    a = A.new(666)
-    assert A.json_creatable?
-    json = generate(a)
-    a_again = JSON.parse(json, :create_additions => true)
-    assert_kind_of a.class, a_again
-    assert_equal a, a_again
-    a_hash = JSON.parse(json, :create_additions => false)
-    assert_kind_of Hash, a_hash
-    assert_equal(
-      {"args"=>[666], "json_class"=>"TC_JSONAddition::A"}.sort_by { |k,| k },
-      a_hash.sort_by { |k,| k }
-    )
-  end
-
-  def test_extended_json_fail1
-    b = B.new
-    assert !B.json_creatable?
-    json = generate(b)
-    assert_equal({ "json_class"=>"TC_JSONAddition::B" }, JSON.parse(json))
-  end
-
-  def test_extended_json_fail2
-    c = C.new
-    assert !C.json_creatable?
-    json = generate(c)
-    assert_raises(ArgumentError) { JSON.parse(json) }
-  end
-
-  def test_raw_strings
-    raw = ''
-    raw_array = []
-    for i in 0..255
-      raw << i
-      raw_array << i
-    end
-    json = raw.to_json_raw
-    json_raw_object = raw.to_json_raw_object
-    hash = { 'json_class' => 'String', 'raw'=> raw_array }
-    assert_equal hash, json_raw_object
-    json_raw = <<EOT.chomp
-{\"json_class\":\"String\",\"raw\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
-EOT
-# "
-    assert_equal json_raw, json
-    raw_again = JSON.parse(json)
-    assert_equal raw, raw_again
-  end
-
-  MyJsonStruct = Struct.new 'MyJsonStruct', :foo, :bar
-
-  def test_core
-    t = Time.now
-    assert_equal t, JSON(JSON(t))
-    d = Date.today
-    assert_equal d, JSON(JSON(d))
-    d = DateTime.civil(2007, 6, 14, 14, 57, 10, Rational(1, 12), 2299161)
-    assert_equal d, JSON(JSON(d))
-    assert_equal 1..10, JSON(JSON(1..10))
-    assert_equal 1...10, JSON(JSON(1...10))
-    assert_equal "a".."c", JSON(JSON("a".."c"))
-    assert_equal "a"..."c", JSON(JSON("a"..."c"))
-    s = MyJsonStruct.new 4711, 'foot'
-    assert_equal s, JSON(JSON(s))
-    struct = Struct.new :foo, :bar
-    s = struct.new 4711, 'foot'
-    assert_raises(JSONError) { JSON(s) }
-    begin
-      raise TypeError, "test me"
-    rescue TypeError => e
-      e_json = JSON.generate e
-      e_again = JSON e_json
-      assert_kind_of TypeError, e_again
-      assert_equal e.message, e_again.message
-      assert_equal e.backtrace, e_again.backtrace
-    end
-    assert_equal(/foo/, JSON(JSON(/foo/)))
-    assert_equal(/foo/i, JSON(JSON(/foo/i)))
-  end
-
-  def test_utc_datetime
-    now = Time.now
-    d = DateTime.parse(now.to_s)                    # usual case
-    assert d, JSON.parse(d.to_json)
-    d = DateTime.parse(now.utc.to_s)                # of = 0
-    assert d, JSON.parse(d.to_json)
-    d = DateTime.civil(2008, 6, 17, 11, 48, 32, 1)  # of = 1 / 12 => 1/12
-    assert d, JSON.parse(d.to_json)
-    d = DateTime.civil(2008, 6, 17, 11, 48, 32, 12) # of = 12 / 12 => 12
-    assert d, JSON.parse(d.to_json)
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_fixtures.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_fixtures.rb
deleted file mode 100755
index 665dcbd..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_fixtures.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json'
-
-class TC_JSONFixtures < Test::Unit::TestCase
-  def setup
-    $KCODE = 'UTF8'
-    fixtures = File.join(File.dirname(__FILE__), 'fixtures/*.json')
-    passed, failed = Dir[fixtures].partition { |f| f['pass'] }
-    @passed = passed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
-    @failed = failed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
-  end
-
-  def test_passing
-    for name, source in @passed
-      assert JSON.parse(source),
-        "Did not pass for fixture '#{name}'"
-    end
-  end
-
-  def test_failing
-    for name, source in @failed
-      assert_raises(JSON::ParserError, JSON::NestingError,
-        "Did not fail for fixture '#{name}'") do
-        JSON.parse(source)
-      end
-    end
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_generate.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_generate.rb
deleted file mode 100755
index f09e9d5..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_generate.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-require 'test/unit'
-require 'json'
-
-class TC_JSONGenerate < Test::Unit::TestCase
-  include JSON
-
-  def setup
-    $KCODE = 'UTF8'
-    @hash = {
-      'a' => 2,
-      'b' => 3.141,
-      'c' => 'c',
-      'd' => [ 1, "b", 3.14 ],
-      'e' => { 'foo' => 'bar' },
-      'g' => "\"\0\037",
-      'h' => 1000.0,
-      'i' => 0.001
-    }
-    @json2 = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' +
-      '"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}'
-    @json3 = <<'EOT'.chomp
-{
-  "a": 2,
-  "b": 3.141,
-  "c": "c",
-  "d": [
-    1,
-    "b",
-    3.14
-  ],
-  "e": {
-    "foo": "bar"
-  },
-  "g": "\"\u0000\u001f",
-  "h": 1000.0,
-  "i": 0.001
-}
-EOT
-  end
-
-  def test_unparse
-    json = unparse(@hash)
-    assert_equal(JSON.parse(@json2), JSON.parse(json))
-    parsed_json = parse(json)
-    assert_equal(@hash, parsed_json)
-    json = generate({1=>2})
-    assert_equal('{"1":2}', json)
-    parsed_json = parse(json)
-    assert_equal({"1"=>2}, parsed_json)
-  end
-
-  def test_unparse_pretty
-    json = pretty_unparse(@hash)
-    assert_equal(JSON.parse(@json3), JSON.parse(json))
-    parsed_json = parse(json)
-    assert_equal(@hash, parsed_json)
-    json = pretty_generate({1=>2})
-    assert_equal(<<'EOT'.chomp, json)
-{
-  "1": 2
-}
-EOT
-    parsed_json = parse(json)
-    assert_equal({"1"=>2}, parsed_json)
-  end
-
-  def test_states
-    json = generate({1=>2}, nil)
-    assert_equal('{"1":2}', json)
-    s = JSON.state.new(:check_circular => true)
-    #assert s.check_circular
-    h = { 1=>2 }
-    h[3] = h
-    assert_raises(JSON::CircularDatastructure) {  generate(h) }
-    assert_raises(JSON::CircularDatastructure) {  generate(h, s) }
-    s = JSON.state.new(:check_circular => true)
-    #assert s.check_circular
-    a = [ 1, 2 ]
-    a << a
-    assert_raises(JSON::CircularDatastructure) {  generate(a, s) }
-  end
-
-  def test_allow_nan
-    assert_raises(GeneratorError) { generate([JSON::NaN]) }
-    assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true)
-    assert_equal '[NaN]', fast_generate([JSON::NaN])
-    assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) }
-    assert_equal "[\n  NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true)
-    assert_raises(GeneratorError) { generate([JSON::Infinity]) }
-    assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true)
-    assert_equal '[Infinity]', fast_generate([JSON::Infinity])
-    assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) }
-    assert_equal "[\n  Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true)
-    assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) }
-    assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true)
-    assert_equal '[-Infinity]', fast_generate([JSON::MinusInfinity])
-    assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
-    assert_equal "[\n  -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true)
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_rails.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_rails.rb
deleted file mode 100755
index c004860..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_rails.rb
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json/add/rails'
-require 'date'
-
-class TC_JSONRails < Test::Unit::TestCase
-  include JSON
-
-  class A
-    def initialize(a)
-      @a = a
-    end
-
-    attr_reader :a
-
-    def ==(other)
-      a == other.a
-    end
-    
-    def self.json_create(object)
-      new(*object['args'])
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => self.class.name,
-        'args'        => [ @a ],
-      }.to_json(*args)
-    end
-  end
-
-  class B
-    def self.json_creatable?
-      false
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => self.class.name,
-      }.to_json(*args)
-    end
-  end
-
-  class C
-    def to_json(*args)
-      {
-        'json_class'  => 'TC_JSONRails::Nix',
-      }.to_json(*args)
-    end
-  end
-
-  def setup
-    $KCODE = 'UTF8'
-  end
-
-  def test_extended_json
-    a = A.new(666)
-    assert A.json_creatable?
-    json = generate(a)
-    a_again = JSON.parse(json)
-    assert_kind_of a.class, a_again
-    assert_equal a, a_again
-  end
-
-  def test_extended_json_disabled
-    a = A.new(666)
-    assert A.json_creatable?
-    json = generate(a)
-    a_again = JSON.parse(json, :create_additions => true)
-    assert_kind_of a.class, a_again
-    assert_equal a, a_again
-    a_hash = JSON.parse(json, :create_additions => false)
-    assert_kind_of Hash, a_hash
-    assert_equal(
-      {"args"=>[666], "json_class"=>"TC_JSONRails::A"}.sort_by { |k,| k },
-      a_hash.sort_by { |k,| k }
-    )
-  end
-
-  def test_extended_json_fail1
-    b = B.new
-    assert !B.json_creatable?
-    json = generate(b)
-    assert_equal({ 'json_class' => B.name }, JSON.parse(json))
-  end
-
-  def test_extended_json_fail2
-    c = C.new # with rails addition all objects are theoretically creatable
-    assert C.json_creatable?
-    json = generate(c)
-    assert_raises(ArgumentError) { JSON.parse(json) }
-  end
-
-  def test_raw_strings
-    raw = ''
-    raw_array = []
-    for i in 0..255
-      raw << i
-      raw_array << i
-    end
-    json = raw.to_json_raw
-    json_raw_object = raw.to_json_raw_object
-    hash = { 'json_class' => 'String', 'raw'=> raw_array }
-    assert_equal hash, json_raw_object
-    json_raw = <<EOT.chomp
-{\"json_class\":\"String\",\"raw\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
-EOT
-# "
-    assert_equal json_raw, json
-    raw_again = JSON.parse(json)
-    assert_equal raw, raw_again
-  end
-
-  def test_symbol
-    assert_equal '"foo"', JSON(:foo) #  we don't want an object here
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_unicode.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_unicode.rb
deleted file mode 100755
index a91f4b5..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tests/test_json_unicode.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json'
-
-class TC_JSONUnicode < Test::Unit::TestCase
-  include JSON
-
-  def setup
-    $KCODE = 'UTF8'
-  end
-
-  def test_unicode
-    assert_equal '""', ''.to_json
-    assert_equal '"\\b"', "\b".to_json
-    assert_equal '"\u0001"', 0x1.chr.to_json
-    assert_equal '"\u001f"', 0x1f.chr.to_json
-    assert_equal '" "', ' '.to_json
-    assert_equal "\"#{0x7f.chr}\"", 0x7f.chr.to_json
-    utf8 = [ "© ≠ €! \01" ]
-    json = '["\u00a9 \u2260 \u20ac! \u0001"]'
-    assert_equal json, utf8.to_json
-    assert_equal utf8, parse(json)
-    utf8 = ["\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212"]
-    json = "[\"\\u3042\\u3044\\u3046\\u3048\\u304a\"]"
-    assert_equal json, utf8.to_json
-    assert_equal utf8, parse(json)
-    utf8 = ['საქართველო']
-    json = "[\"\\u10e1\\u10d0\\u10e5\\u10d0\\u10e0\\u10d7\\u10d5\\u10d4\\u10da\\u10dd\"]"
-    assert_equal json, utf8.to_json
-    assert_equal utf8, parse(json)
-    assert_equal '["\\u00c3"]', JSON.generate(["Ã"])
-    assert_equal ["€"], JSON.parse('["\u20ac"]')
-    utf8 = ["\xf0\xa0\x80\x81"]
-    json = '["\ud840\udc01"]'
-    assert_equal json, JSON.generate(utf8)
-    assert_equal utf8, JSON.parse(json)
-  end
-
-  def test_chars
-    (0..0x7f).each do |i|
-      json = '["\u%04x"]' % i
-      if RUBY_VERSION >= "1.9."
-        i = i.chr
-      end
-      assert_equal i, JSON.parse(json).first[0]
-      if i == ?\b
-        generated = JSON.generate(["" << i])
-        assert '["\b"]' == generated || '["\10"]' == generated
-      elsif [?\n, ?\r, ?\t, ?\f].include?(i)
-        assert_equal '[' << ('' << i).dump << ']', JSON.generate(["" << i])
-      elsif i.chr < 0x20.chr
-        assert_equal json, JSON.generate(["" << i])
-      end
-    end
-    assert_raises(JSON::GeneratorError) do
-      JSON.generate(["" << 0x80])
-    end
-    assert_equal "\302\200", JSON.parse('["\u0080"]').first
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tools/fuzz.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tools/fuzz.rb
deleted file mode 100755
index 8735963..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tools/fuzz.rb
+++ /dev/null
@@ -1,140 +0,0 @@
-$KCODE='UTF8'
-require 'json'
-
-require 'iconv'
-ISO_8859_1_TO_UTF8 = Iconv.new('utf-8', 'iso-8859-15')
-class ::String
-  def to_utf8
-    ISO_8859_1_TO_UTF8.iconv self
-  end
-end
-
-class Fuzzer
-  def initialize(n, freqs = {})
-    sum = freqs.inject(0.0) { |s, x| s + x.last }
-    freqs.each_key { |x| freqs[x] /= sum }
-    s = 0.0
-    freqs.each_key do |x|
-      freqs[x] = s .. (s + t = freqs[x])
-      s += t
-    end
-    @freqs = freqs
-    @n = n
-    @alpha = (0..0xff).to_a
-  end
-
-  def random_string
-    s = ''
-    30.times { s << @alpha[rand(@alpha.size)] }
-    s.to_utf8
-  end
-
-  def pick
-    r = rand
-    found = @freqs.find { |k, f| f.include? rand }
-    found && found.first
-  end
-
-  def make_pick
-    k = pick
-    case
-    when k == Hash, k == Array
-      k.new
-    when k == true, k == false, k == nil
-      k
-    when k == String
-      random_string
-    when k == Fixnum
-      rand(2 ** 30) - 2 ** 29
-    when k == Bignum
-      rand(2 ** 70) - 2 ** 69
-    end
-  end
-
-  def fuzz(current = nil)
-    if @n > 0
-      case current
-      when nil
-        @n -= 1
-        current = fuzz [ Hash, Array ][rand(2)].new
-      when Array
-        while @n > 0
-          @n -= 1
-          current << case p = make_pick
-          when Array, Hash
-            fuzz(p)
-          else
-            p
-          end
-        end
-      when Hash
-        while @n > 0
-          @n -= 1
-          current[random_string] = case p = make_pick
-          when Array, Hash
-            fuzz(p)
-          else
-            p
-          end
-        end
-      end
-    end
-    current
-  end
-end
-
-class MyState < JSON.state
-  WS = " \r\t\n"
-
-  def initialize
-    super(
-          :indent       => make_spaces,
-          :space        => make_spaces,
-          :space_before => make_spaces,
-          :object_nl    => make_spaces,
-          :array_nl     => make_spaces,
-          :max_nesting  => false
-         )
-  end
-
-  def make_spaces
-    s = ''
-    rand(1).times { s << WS[rand(WS.size)] }
-    s
-  end
-end
-
-n = (ARGV.shift || 500).to_i
-loop do
-  fuzzer = Fuzzer.new(n,
-                      Hash => 25,
-                      Array => 25,
-                      String => 10,
-                      Fixnum => 10,
-                      Bignum => 10,
-                      nil => 5,
-                      true => 5,
-                      false => 5
-                     )
-  o1 = fuzzer.fuzz
-  json = JSON.generate o1, MyState.new
-  if $DEBUG
-    puts "-" * 80
-    puts json, json.size
-  else 
-    puts json.size
-  end
-  begin
-    o2 = JSON.parse(json, :max_nesting => false)
-  rescue JSON::ParserError => e
-    puts "Caught #{e.class}: #{e.message}\n#{e.backtrace * "\n"}"
-    puts "o1 = #{o1.inspect}", "json = #{json}", "json_str = #{json.inspect}"
-    puts "locals = #{local_variables.inspect}"
-    exit
-  end
-  if o1 != o2
-    puts "mismatch", "o1 = #{o1.inspect}", "o2 = #{o2.inspect}",
-      "json = #{json}", "json_str = #{json.inspect}"
-    puts "locals = #{local_variables.inspect}"
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tools/server.rb b/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tools/server.rb
deleted file mode 100755
index 9508311..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/json_pure-1.1.3/tools/server.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env ruby
-
-$KCODE='UTF8'
-require 'webrick'
-include WEBrick
-$:.unshift 'ext'
-$:.unshift 'lib'
-require 'json'
-
-class JSONServlet < HTTPServlet::AbstractServlet
-  @@count = 1
-
-  def do_GET(req, res)
-    obj = {
-      "TIME" => Time.now.strftime("%FT%T"),
-      "foo" => "Bär",
-      "bar" => "© ≠ €!",
-      'a' => 2,
-      'b' => 3.141,
-      'COUNT' => @@count += 1,
-      'c' => 'c',
-      'd' => [ 1, "b", 3.14 ],
-      'e' => { 'foo' => 'bar' },
-      'g' => "松本行弘",
-      'h' => 1000.0,
-      'i' => 0.001,
-      'j' => "\xf0\xa0\x80\x81",
-    }
-    res.body = JSON.generate obj
-    res['Content-Type'] = "application/json"
-  end
-end
-
-def create_server(err, dir, port)
-  dir = File.expand_path(dir)
-  err.puts "Surf to:", "http://#{Socket.gethostname}:#{port}"
-
-  s = HTTPServer.new(
-    :Port         => port,
-    :DocumentRoot => dir,
-    :Logger       => WEBrick::Log.new(err),
-    :AccessLog    => [
-      [ err, WEBrick::AccessLog::COMMON_LOG_FORMAT  ],
-      [ err, WEBrick::AccessLog::REFERER_LOG_FORMAT ],
-      [ err, WEBrick::AccessLog::AGENT_LOG_FORMAT   ]
-    ]
-  )
-  s.mount("/json", JSONServlet)
-  s
-end
-
-default_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'data'))
-dir = ARGV.shift || default_dir
-port = (ARGV.shift || 6666).to_i
-s = create_server(STDERR, dir, 6666)
-t = Thread.new { s.start }
-trap(:INT) do
-  s.shutdown
-  t.join
-  exit
-end
-sleep
diff --git a/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.1/Rakefile b/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.1/Rakefile
deleted file mode 100644
index c69ddcc..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.1/Rakefile
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'rubygems'
-require 'rake/gempackagetask'
-require 'rubygems/specification'
-require 'date'
-
-GEM = "simple_gem"
-GEM_VERSION = "0.0.1"
-AUTHOR = "Your Name"
-EMAIL = "Your Email"
-HOMEPAGE = "http://example.com"
-SUMMARY = "A gem that provides..."
-
-spec = Gem::Specification.new do |s|
-  s.name = GEM
-  s.version = GEM_VERSION
-  s.platform = Gem::Platform::RUBY
-  s.has_rdoc = true
-  s.summary = SUMMARY
-  s.description = s.summary
-  s.author = AUTHOR
-  s.email = EMAIL
-  s.homepage = HOMEPAGE
-  
-  s.require_path = 'lib'
-  s.files = %w(Rakefile) + Dir.glob("{lib}/**/*")
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.gem_spec = spec
-end
-
-desc "install the gem locally"
-task :install => [:package] do
-  sh %{sudo #{Gem.ruby} -S gem install pkg/#{GEM}-#{GEM_VERSION}}
-end
-
-desc "create a gemspec file"
-task :make_spec do
-  File.open("#{GEM}.gemspec", "w") do |file|
-    file.puts spec.to_ruby
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.1/lib/simple_gem.rb b/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.1/lib/simple_gem.rb
deleted file mode 100644
index f0c4e44..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.1/lib/simple_gem.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Merb
-  module SpecFixture
-    class SimpleGem
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.2/Rakefile b/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.2/Rakefile
deleted file mode 100644
index fa1e180..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.2/Rakefile
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'rubygems'
-require 'rake/gempackagetask'
-require 'rubygems/specification'
-require 'date'
-
-GEM = "simple_gem"
-GEM_VERSION = "0.0.2"
-AUTHOR = "Your Name"
-EMAIL = "Your Email"
-HOMEPAGE = "http://example.com"
-SUMMARY = "A gem that provides..."
-
-spec = Gem::Specification.new do |s|
-  s.name = GEM
-  s.version = GEM_VERSION
-  s.platform = Gem::Platform::RUBY
-  s.has_rdoc = true
-  s.summary = SUMMARY
-  s.description = s.summary
-  s.author = AUTHOR
-  s.email = EMAIL
-  s.homepage = HOMEPAGE
-  
-  s.require_path = 'lib'
-  s.files = %w(Rakefile) + Dir.glob("{lib}/**/*")
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.gem_spec = spec
-end
-
-desc "install the gem locally"
-task :install => [:package] do
-  sh %{sudo #{Gem.ruby} -S gem install pkg/#{GEM}-#{GEM_VERSION}}
-end
-
-desc "create a gemspec file"
-task :make_spec do
-  File.open("#{GEM}.gemspec", "w") do |file|
-    file.puts spec.to_ruby
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.2/lib/simple_gem.rb b/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.2/lib/simple_gem.rb
deleted file mode 100644
index fb720cf..0000000
--- a/spec10/public/core_ext/fixtures/gems/gems/simple_gem-0.0.2/lib/simple_gem.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Merb
-  module SpecFixture
-    class SimpleGem2
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/gems/specifications/bad_require_gem-0.0.1.gemspec b/spec10/public/core_ext/fixtures/gems/specifications/bad_require_gem-0.0.1.gemspec
deleted file mode 100644
index 59dfa1b..0000000
--- a/spec10/public/core_ext/fixtures/gems/specifications/bad_require_gem-0.0.1.gemspec
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{bad_require_gem}
-  s.version = "0.0.1"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Your Name"]
-  s.date = %q{2008-10-27}
-  s.description = %q{A gem that provides...}
-  s.email = %q{Your Email}
-  s.files = ["Rakefile", "lib/BadRequireGem.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://example.com}
-  s.require_paths = ["lib"]
-  s.rubygems_version = %q{1.3.0}
-  s.summary = %q{A gem that provides...}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/specifications/json_pure-1.1.3.gemspec b/spec10/public/core_ext/fixtures/gems/specifications/json_pure-1.1.3.gemspec
deleted file mode 100644
index 9b39f4e..0000000
--- a/spec10/public/core_ext/fixtures/gems/specifications/json_pure-1.1.3.gemspec
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{json_pure}
-  s.version = "1.1.3"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Florian Frank"]
-  s.date = %q{2008-07-10}
-  s.default_executable = %q{edit_json.rb}
-  s.description = %q{}
-  s.email = %q{flori at ping.de}
-  s.executables = ["edit_json.rb"]
-  s.files = ["install.rb", "lib", "lib/json.rb", "lib/json", "lib/json/Array.xpm", "lib/json/FalseClass.xpm", "lib/json/json.xpm", "lib/json/editor.rb", "lib/json/Hash.xpm", "lib/json/Key.xpm", "lib/json/common.rb", "lib/json/String.xpm", "lib/json/pure", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/Numeric.xpm", "lib/json/ext.rb", "lib/json/pure.rb", "lib/json/NilClass.xpm", "lib/json/add", "lib/json/add/rails.rb", "lib/json/add/core.rb", "lib/json/TrueClass.xpm", "lib/json/version.rb", "ext", "ext/json", "ext/json/ext", "ext/json/ext/parser", "ext/json/ext/parser/unicode.h", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/unicode.c", "ext/json/ext/parser/parser.rl", "ext/json/ext/generator", "ext/json/ext/generator/unicode.h", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/unicode.c", "README", "diagrams", "CHANGES", "RUBY", "TODO", "VERSION", "tests", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/fixtures", "tests/fixtures/fail11.json", "tests/fixtures/fail5.json", "tests/fixtures/fail10.json", "tests/fixtures/fail3.json", "tests/fixtures/pass15.json", "tests/fixtures/fail9.json", "tests/fixtures/fail22.json", "tests/fixtures/fail6.json", "tests/fixtures/pass2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail19.json", "tests/fixtures/fail12.json", "tests/fixtures/fail7.json", "tests/fixtures/fail4.json", "tests/fixtures/fail1.json", "tests/fixtures/fail24.json", "tests/fixtures/fail21.json", "tests/fixtures/pass1.json", "tests/fixtures/fail2.json", "tests/fixtures/fail25.json", "tests/fixtures/pass16.json", "tests/fixtures/pass3.json", "tests/fixtures/fail18.json", "tests/fixtures/fail28.json", "tests/fixtures/fail13.json", "tests/fixtures/fail27.json", "tests/fixtures/pass17.json", "tests/fixtures/pass26.json", "tests/fixtures/fail23.json", "tests/fixtures/fail14.json", "tests/fixtures/fail8.json", "tests/runner.rb", "tests/test_json_generate.rb", "tests/test_json_rails.rb", "tests/test_json_unicode.rb", "tests/test_json_fixtures.rb", "benchmarks", "benchmarks/benchmark_parser.rb", "benchmarks/benchmark_generator.rb", "benchmarks/benchmark_rails.rb", "benchmarks/benchmark.txt", "Rakefile", "GPL", "data", "data/example.json", "data/index.html", "data/prototype.js", "bin", "bin/edit_json.rb", "bin/prettify_json.rb", "tools", "tools/fuzz.rb", "tools/server.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://json.rubyforge.org}
-  s.rdoc_options = ["--title", "JSON -- A JSON implemention", "--main", "JSON", "--line-numbers"]
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{json}
-  s.rubygems_version = %q{1.3.0}
-  s.summary = %q{A JSON implementation in Ruby}
-  s.test_files = ["tests/runner.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/specifications/simple_gem-0.0.1.gemspec b/spec10/public/core_ext/fixtures/gems/specifications/simple_gem-0.0.1.gemspec
deleted file mode 100644
index 4e8afc3..0000000
--- a/spec10/public/core_ext/fixtures/gems/specifications/simple_gem-0.0.1.gemspec
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{simple_gem}
-  s.version = "0.0.1"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Your Name"]
-  s.date = %q{2008-10-27}
-  s.description = %q{A gem that provides...}
-  s.email = %q{Your Email}
-  s.files = ["Rakefile", "lib/simple_gem.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://example.com}
-  s.require_paths = ["lib"]
-  s.rubygems_version = %q{1.3.0}
-  s.summary = %q{A gem that provides...}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/gems/specifications/simple_gem-0.0.2.gemspec b/spec10/public/core_ext/fixtures/gems/specifications/simple_gem-0.0.2.gemspec
deleted file mode 100644
index a667aab..0000000
--- a/spec10/public/core_ext/fixtures/gems/specifications/simple_gem-0.0.2.gemspec
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{simple_gem}
-  s.version = "0.0.2"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Your Name"]
-  s.date = %q{2008-10-27}
-  s.description = %q{A gem that provides...}
-  s.email = %q{Your Email}
-  s.files = ["Rakefile", "lib/simple_gem.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://example.com}
-  s.require_paths = ["lib"]
-  s.rubygems_version = %q{1.3.0}
-  s.summary = %q{A gem that provides...}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/core_ext/fixtures/simple_gem/Rakefile b/spec10/public/core_ext/fixtures/simple_gem/Rakefile
deleted file mode 100644
index c69ddcc..0000000
--- a/spec10/public/core_ext/fixtures/simple_gem/Rakefile
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'rubygems'
-require 'rake/gempackagetask'
-require 'rubygems/specification'
-require 'date'
-
-GEM = "simple_gem"
-GEM_VERSION = "0.0.1"
-AUTHOR = "Your Name"
-EMAIL = "Your Email"
-HOMEPAGE = "http://example.com"
-SUMMARY = "A gem that provides..."
-
-spec = Gem::Specification.new do |s|
-  s.name = GEM
-  s.version = GEM_VERSION
-  s.platform = Gem::Platform::RUBY
-  s.has_rdoc = true
-  s.summary = SUMMARY
-  s.description = s.summary
-  s.author = AUTHOR
-  s.email = EMAIL
-  s.homepage = HOMEPAGE
-  
-  s.require_path = 'lib'
-  s.files = %w(Rakefile) + Dir.glob("{lib}/**/*")
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.gem_spec = spec
-end
-
-desc "install the gem locally"
-task :install => [:package] do
-  sh %{sudo #{Gem.ruby} -S gem install pkg/#{GEM}-#{GEM_VERSION}}
-end
-
-desc "create a gemspec file"
-task :make_spec do
-  File.open("#{GEM}.gemspec", "w") do |file|
-    file.puts spec.to_ruby
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/simple_gem/lib/simple_gem.rb b/spec10/public/core_ext/fixtures/simple_gem/lib/simple_gem.rb
deleted file mode 100644
index f0c4e44..0000000
--- a/spec10/public/core_ext/fixtures/simple_gem/lib/simple_gem.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Merb
-  module SpecFixture
-    class SimpleGem
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/simple_gem_2/Rakefile b/spec10/public/core_ext/fixtures/simple_gem_2/Rakefile
deleted file mode 100644
index fa1e180..0000000
--- a/spec10/public/core_ext/fixtures/simple_gem_2/Rakefile
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'rubygems'
-require 'rake/gempackagetask'
-require 'rubygems/specification'
-require 'date'
-
-GEM = "simple_gem"
-GEM_VERSION = "0.0.2"
-AUTHOR = "Your Name"
-EMAIL = "Your Email"
-HOMEPAGE = "http://example.com"
-SUMMARY = "A gem that provides..."
-
-spec = Gem::Specification.new do |s|
-  s.name = GEM
-  s.version = GEM_VERSION
-  s.platform = Gem::Platform::RUBY
-  s.has_rdoc = true
-  s.summary = SUMMARY
-  s.description = s.summary
-  s.author = AUTHOR
-  s.email = EMAIL
-  s.homepage = HOMEPAGE
-  
-  s.require_path = 'lib'
-  s.files = %w(Rakefile) + Dir.glob("{lib}/**/*")
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.gem_spec = spec
-end
-
-desc "install the gem locally"
-task :install => [:package] do
-  sh %{sudo #{Gem.ruby} -S gem install pkg/#{GEM}-#{GEM_VERSION}}
-end
-
-desc "create a gemspec file"
-task :make_spec do
-  File.open("#{GEM}.gemspec", "w") do |file|
-    file.puts spec.to_ruby
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/fixtures/simple_gem_2/lib/simple_gem.rb b/spec10/public/core_ext/fixtures/simple_gem_2/lib/simple_gem.rb
deleted file mode 100644
index fb720cf..0000000
--- a/spec10/public/core_ext/fixtures/simple_gem_2/lib/simple_gem.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Merb
-  module SpecFixture
-    class SimpleGem2
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/immediate_spec.rb b/spec10/public/core_ext/immediate_spec.rb
deleted file mode 100644
index 1c73c2b..0000000
--- a/spec10/public/core_ext/immediate_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using depdendency to require a simple gem immediately" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-    dependency "simple_gem", :immediate => true
-  end
-  
-  it "loads it right away" do
-    defined?(Merb::SpecFixture::SimpleGem2).should_not be_nil
-  end
-  
-  it "is still loaded once Merb starts" do
-    startup_merb
-    defined?(Merb::SpecFixture::SimpleGem2).should_not be_nil
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/kernel_spec.rb b/spec10/public/core_ext/kernel_spec.rb
deleted file mode 100644
index 079c360..0000000
--- a/spec10/public/core_ext/kernel_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-$:.push File.join(File.dirname(__FILE__), "fixtures")
-
-describe Kernel, "#use_orm" do
-  
-  before do
-    Merb.orm = :none # reset orm
-  end
-  
-  it "should set Merb.orm" do
-    Kernel.use_orm(:activerecord)
-    Merb.orm.should == :activerecord
-  end
-  
-end
-
-describe Kernel, "#use_template_engine" do
-  
-  before do
-    Kernel.stub!(:dependency)
-    Merb.template_engine = :erb # reset template engine
-  end
-  
-  it "should set Merb.template_engine" do
-    Kernel.use_template_engine(:haml)
-    Merb.template_engine.should == :haml
-  end
-  
-end
-
-describe Kernel, "#use_test" do
-  
-  before do
-    Merb.test_framework = :rspec # reset test framework
-  end
-  
-  it "should set Merb.test_framework" do
-    Kernel.use_test(:test_unit)
-    Merb.test_framework.should == :test_unit
-  end
-  
-end
diff --git a/spec10/public/core_ext/multi_versions_spec.rb b/spec10/public/core_ext/multi_versions_spec.rb
deleted file mode 100644
index 46b2ec2..0000000
--- a/spec10/public/core_ext/multi_versions_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using dependency to update the version of a previously required dependency" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-    dependency "simple_gem", "= 0.0.1"
-    dependency "simple_gem", "= 0.0.2"
-  end
-  
-  it "loads it right away" do
-    defined?(Merb::SpecFixture::SimpleGem).should be_nil
-    defined?(Merb::SpecFixture::SimpleGem2).should_not be_nil
-  end
-end
diff --git a/spec10/public/core_ext/require_as_fail_spec.rb b/spec10/public/core_ext/require_as_fail_spec.rb
deleted file mode 100644
index d4f055b..0000000
--- a/spec10/public/core_ext/require_as_fail_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using dependency to require a bad gem" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-  end
-  
-  it "raises an error because it can't find the file" do
-    lambda { dependency "bad_require_gem" }.should raise_error(LoadError)
-  end
-end
diff --git a/spec10/public/core_ext/require_as_immediate_spec.rb b/spec10/public/core_ext/require_as_immediate_spec.rb
deleted file mode 100644
index ce7a381..0000000
--- a/spec10/public/core_ext/require_as_immediate_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using dependency to require a bad gem immediately" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-    dependency "bad_require_gem", :require_as => "BadRequireGem", :immediate => true
-  end
-  
-  it "loads it right away" do
-    defined?(Merb::SpecFixture::BadRequireGem).should_not be_nil
-  end
-  
-  it "loads the file once Merb is started" do
-    startup_merb
-    defined?(Merb::SpecFixture::BadRequireGem).should_not be_nil
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/core_ext/require_as_version_spec.rb b/spec10/public/core_ext/require_as_version_spec.rb
deleted file mode 100644
index 62ae2b1..0000000
--- a/spec10/public/core_ext/require_as_version_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using dependency to require a bad gem with a version" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-    dependency "bad_require_gem", "0.0.1", :require_as => "BadRequireGem"
-  end
-  
-  it "loads it right away" do
-    defined?(Merb::SpecFixture::BadRequireGem).should_not be_nil
-  end
-  
-  it "loads the file once Merb is started" do
-    startup_merb
-    defined?(Merb::SpecFixture::BadRequireGem).should_not be_nil
-  end
-end
diff --git a/spec10/public/core_ext/require_as_working_spec.rb b/spec10/public/core_ext/require_as_working_spec.rb
deleted file mode 100644
index c13a639..0000000
--- a/spec10/public/core_ext/require_as_working_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using dependency to require a bad gem" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-    dependency "bad_require_gem", :require_as => "BadRequireGem"
-  end
-  
-  it "loads it right away" do
-    defined?(Merb::SpecFixture::BadRequireGem).should_not be_nil
-  end
-  
-  it "loads the file once Merb is started" do
-    startup_merb
-    defined?(Merb::SpecFixture::BadRequireGem).should_not be_nil
-  end
-end
diff --git a/spec10/public/core_ext/simple_dependency_spec.rb b/spec10/public/core_ext/simple_dependency_spec.rb
deleted file mode 100644
index c350ca6..0000000
--- a/spec10/public/core_ext/simple_dependency_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using dependency to require a simple gem" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-    dependency "simple_gem"
-  end
-  
-  it "does load it right away" do
-    defined?(Merb::SpecFixture::SimpleGem2).should_not be_nil
-  end
-  
-  it "loads it when merb starts" do
-    startup_merb
-    defined?(Merb::SpecFixture::SimpleGem2).should_not be_nil
-  end
-end
diff --git a/spec10/public/core_ext/spec_helper.rb b/spec10/public/core_ext/spec_helper.rb
deleted file mode 100644
index 2088625..0000000
--- a/spec10/public/core_ext/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
\ No newline at end of file
diff --git a/spec10/public/core_ext/version_dependency_spec.rb b/spec10/public/core_ext/version_dependency_spec.rb
deleted file mode 100644
index 3fc428e..0000000
--- a/spec10/public/core_ext/version_dependency_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "using dependency to require a simple gem with a version" do
-  before(:all) do
-    Gem.use_paths(File.dirname(__FILE__) / "fixtures" / "gems")
-  end
-  
-  it "does load it right away" do
-    self.should_receive(:warn).twice
-    dependency "simple_gem", "= 0.0.1"
-    defined?(Merb::SpecFixture::SimpleGem).should be_nil
-    defined?(Merb::SpecFixture::SimpleGem2).should_not be_nil
-  end
-  
-  it "loads it when merb starts" do
-    startup_merb
-    defined?(Merb::SpecFixture::SimpleGem).should be_nil
-    defined?(Merb::SpecFixture::SimpleGem2).should_not be_nil    
-  end
-end
diff --git a/spec10/public/directory_structure/directory/app/controllers/application.rb b/spec10/public/directory_structure/directory/app/controllers/application.rb
deleted file mode 100644
index 17ae294..0000000
--- a/spec10/public/directory_structure/directory/app/controllers/application.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-class Application < Merb::Controller; end
\ No newline at end of file
diff --git a/spec10/public/directory_structure/directory/app/controllers/base.rb b/spec10/public/directory_structure/directory/app/controllers/base.rb
deleted file mode 100644
index a9c45b5..0000000
--- a/spec10/public/directory_structure/directory/app/controllers/base.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-class Base < Application
-
-  def string
-    "String"
-  end
-
-  def template
-    render
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/directory_structure/directory/app/controllers/custom.rb b/spec10/public/directory_structure/directory/app/controllers/custom.rb
deleted file mode 100644
index 156b374..0000000
--- a/spec10/public/directory_structure/directory/app/controllers/custom.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-class Custom < Application
-
-  def string
-    "String"
-  end
-
-  def template
-    render
-  end
-  
-  private
-  
-  def _template_location(context, type = nil, controller = controller_name)  
-    "wonderful/#{context}"
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/directory_structure/directory/app/views/base/template.html.erb b/spec10/public/directory_structure/directory/app/views/base/template.html.erb
deleted file mode 100644
index 4f48606..0000000
--- a/spec10/public/directory_structure/directory/app/views/base/template.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Template <%= "ERB" %>
\ No newline at end of file
diff --git a/spec10/public/directory_structure/directory/app/views/wonderful/template.erb b/spec10/public/directory_structure/directory/app/views/wonderful/template.erb
deleted file mode 100644
index 30f6337..0000000
--- a/spec10/public/directory_structure/directory/app/views/wonderful/template.erb
+++ /dev/null
@@ -1 +0,0 @@
-Wonderful <%= "Template" %>
\ No newline at end of file
diff --git a/spec10/public/directory_structure/directory/config/router.rb b/spec10/public/directory_structure/directory/config/router.rb
deleted file mode 100644
index 7c5237d..0000000
--- a/spec10/public/directory_structure/directory/config/router.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-Merb::Router.prepare do |r|
-  r.default_routes
-end
\ No newline at end of file
diff --git a/spec10/public/directory_structure/directory_spec.rb b/spec10/public/directory_structure/directory_spec.rb
deleted file mode 100644
index f340cd9..0000000
--- a/spec10/public/directory_structure/directory_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
-startup_merb(:merb_root => File.join(File.dirname(__FILE__), "directory"))
-
-describe "The default Merb directory structure" do
-
-  it "should load in controllers" do
-    calling { Base }.should_not raise_error
-  end
-
-  it "should be able to complete the dispatch cycle" do
-    controller = dispatch_to(Base, :string)
-    controller.body.should == "String"
-  end
-
-  it "should be able to complete the dispatch cycle with templates" do
-    controller = dispatch_to(Base, :template)
-    controller.body.should == "Template ERB"
-  end
-
-end
-
-describe "Modifying the _template_path" do
-
-  it "should move the templates to a new location" do
-    controller = dispatch_to(Custom, :template)
-    controller.body.should == "Wonderful Template"
-  end
-
-end
-
-describe "Merb.root_path" do
-
-  it "should return a path relative to Merb.root" do
-    path = Merb.root_path('/app/controllers/base.rb')
-    path.to_s.should == File.join(Merb.root, '/app/controllers/base.rb')
-  end
-
-  it "should accept multiple arguments like File.join" do
-    path = Merb.root_path('app', 'controllers', 'base.rb')
-    path.to_s.should == File.join(Merb.root, 'app', 'controllers', 'base.rb')
-  end
-
-end
diff --git a/spec10/public/logger/logger_spec.rb b/spec10/public/logger/logger_spec.rb
deleted file mode 100644
index 37a28cf..0000000
--- a/spec10/public/logger/logger_spec.rb
+++ /dev/null
@@ -1,283 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-describe Merb do
-
-  describe "Command Line Options" do
-
-    it "should allow -l / --log_level to set the log_level" do
-      pending("How do we spec these?")
-    end
-
-    it "should allow -L / --log_file  to set the log_file" do
-      pending("How do we spec these?")
-      # Run an instance of merb from the command line
-      # using system and test if the file was created?
-    end
-
-  end
-
-end
-
-describe Merb::Logger do
-
-  describe "#new" do
-    it "should call set_log with the arguments it was passed." do
-      logger = Merb::Logger.allocate # create an object sans initialization
-      logger.should_receive(:set_log).with('a partridge', 'a pear tree', 'a time bomb').and_return(true)
-      logger.send(:initialize, 'a partridge', 'a pear tree', 'a time bomb')
-    end
-  end
-
-  describe "#set_log" do
-
-    before(:each) do
-      # @logger = Merb::Logger.new(Merb.log_file)
-    end
-
-    it "should set the log level to :warn (4) when second parameter is :warn" do
-      Merb::Config[:log_level] = :warn
-      Merb.reset_logger!
-      Merb.logger.level.should == 4
-    end
-
-    it "should set the log level to :debug (0) when Merb.environment is development" do
-      Merb.environment = "development"
-      Merb::Config.delete(:log_level)
-      Merb.reset_logger!
-      Merb::BootLoader::Logger.run
-      Merb.logger.level.should == 0
-    end
-
-    it "should set the log level to :error (6) when Merb.environment is production" do
-      Merb.environment = "production"
-      Merb::Config.delete(:log_level)
-      Merb.reset_logger!
-      Merb::BootLoader::Logger.run
-      Merb.logger.level.should == 4
-    end
-
-    it "should default the delimiter to ' ~ '" do
-      Merb.logger.delimiter.should eql(" ~ ")
-    end
-
-    it 'allows level value be specified as a String' do
-      Merb::Config[:log_level] = 'warn'
-      Merb.reset_logger!
-      Merb.logger.level.should == 4
-    end
-  end
-
-
-  describe "#flush" do
-    it "should immediately return if the buffer is empty" do
-      Merb::Config[:log_stream] = StringIO.new
-      Merb.reset_logger!
-
-      Merb.logger.flush
-      Merb::Config[:log_stream].string.should == ""
-    end
-
-    it "should call the write_method with the stringified contents of the buffer if the buffer is non-empty" do
-      Merb::Config[:log_stream] = StringIO.new
-      Merb.reset_logger!
-
-      Merb.logger << "a message"
-      Merb.logger << "another message"
-      Merb.logger.flush
-
-      Merb::Config[:log_stream].string.should == " ~ a message\n ~ another message\n"
-    end
-
-  end
-
-  # There were close specs here, but the logger isn't an IO anymore, and
-  # shares a stream with other loggers, so it shouldn't be closing the
-  # stream.
-
-  def set_level(level)
-    Merb::Config[:log_level] = level
-    Merb.reset_logger!
-  end
-
-  # Spec examples below all use log_with_method
-  # matcher that is defined right here.
-  Spec::Matchers.create(:log_with_method) do
-    # logger is received, method is matcher argument
-    # So if you call Merb.logger.should log_with_method(:info),
-    # logger has value of Merb.logger and method has value of :info.
-    matches do |logger, method|
-      logger.send(method, "message")
-      logger.flush
-
-      logger.log.string == " ~ message\n"
-    end
-
-    message do |logger, method|
-      "Expected #{logger} NOT to log with method #{method}, but it did."
-    end
-
-    failure_message do |logger, method|
-      "Expected #{logger} to log with method #{method}, but it did not."
-    end
-  end
-
-  describe "#debug" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:debug)
-    end
-
-    it "does not add to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should_not log_with_method(:debug)
-    end
-
-    it "does not add to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should_not log_with_method(:debug)
-    end
-
-    it "does not add to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should_not log_with_method(:debug)
-    end
-
-    it "does not add to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should_not log_with_method(:debug)
-    end
-  end # #debug
-
-
-  describe "#info" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:info)
-    end
-
-    it "adds to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should log_with_method(:info)
-    end
-
-    it "does not add to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should_not log_with_method(:info)
-    end
-
-    it "does not add to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should_not log_with_method(:info)
-    end
-
-    it "does not add to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should_not log_with_method(:info)
-    end
-  end # #info
-
-
-  describe "#warn" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:warn)
-    end
-
-    it "adds to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should log_with_method(:warn)
-    end
-
-    it "adds to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should log_with_method(:warn)
-    end
-
-    it "does not add to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should_not log_with_method(:warn)
-    end
-
-    it "does not add to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should_not log_with_method(:warn)
-    end
-  end # #warn
-
-
-  describe "#error" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:error)
-    end
-
-    it "adds to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should log_with_method(:error)
-    end
-
-    it "adds to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should log_with_method(:error)
-    end
-
-    it "adds to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should log_with_method(:error)
-    end
-
-    it "does not add to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should_not log_with_method(:error)
-    end
-  end # #error
-
-
-  describe "#fatal" do
-    before(:each) do
-      @stream = Merb::Config[:log_stream] = StringIO.new
-    end
-
-    it "adds to the buffer with debug level" do
-      set_level(:debug)
-      Merb.logger.should log_with_method(:fatal)
-    end
-
-    it "adds to the buffer with info level" do
-      set_level(:info)
-      Merb.logger.should log_with_method(:fatal)
-    end
-
-    it "adds to the buffer with warn level" do
-      set_level(:warn)
-      Merb.logger.should log_with_method(:fatal)
-    end
-
-    it "adds to the buffer with error level" do
-      set_level(:error)
-      Merb.logger.should log_with_method(:fatal)
-    end
-
-    it "adds to the buffer with fatal level" do
-      set_level(:fatal)
-      Merb.logger.should log_with_method(:fatal)
-    end
-  end # #fatal
-end # Merb::Logger
diff --git a/spec10/public/logger/spec_helper.rb b/spec10/public/logger/spec_helper.rb
deleted file mode 100644
index 2088625..0000000
--- a/spec10/public/logger/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
\ No newline at end of file
diff --git a/spec10/public/rack/conditinal_get_middleware_spec.rb b/spec10/public/rack/conditinal_get_middleware_spec.rb
deleted file mode 100644
index 7192514..0000000
--- a/spec10/public/rack/conditinal_get_middleware_spec.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-require "sha1"
-
-class ConditionalGetTestController < Merb::Controller
-  def with_etag
-    response = "original message-body"
-    headers['ETag'] = Digest::SHA1.hexdigest(response)
-
-    response
-  end
-
-  def with_last_modified
-    headers[Merb::Const::LAST_MODIFIED] = :documents_last_modified_time
-    "original message-body"
-  end
-
-  def without
-    # sanity check
-    headers.delete('ETag')
-    headers.delete(Merb::Const::LAST_MODIFIED)
-    
-    "original message-body"
-  end
-end
-
-
-Merb::Router.prepare do |r|
-  r.match("/with_etag").to(
-    :controller => "conditional_get_test_controller", :action => "with_etag"
-  )
-  r.match("/with_last_modified").to(
-    :controller => "conditional_get_test_controller", :action => "with_last_modified"
-  )
-  r.match("/without").to(
-    :controller => "conditional_get_test_controller", :action => "without"
-  )
-end
-
-describe Merb::Rack::ConditionalGet do
-
-  describe(
-    "when the client already has an up-to-date document", 
-    :shared => true
-  ) do
-    it 'sets status to "304"' do
-      @status.should == 304
-    end
-
-    it 'returns no message-body' do
-      @body.should == ""
-    end
-  end
-
-  describe(
-    "when the client does NOT have an up-to-date document",
-    :shared => true
-  ) do
-    it 'does not modify status' do
-      @status.should == 200
-    end
-
-    it 'does not modify message-body' do
-      @body.should == "original message-body"
-    end
-  end
-  
-  before(:each) do
-    @app        = Merb::Rack::Application.new
-    @middleware = Merb::Rack::ConditionalGet.new(@app)
-  end
-  
-  describe "when response has no ETag header and no Last-Modified header" do
-    before(:each) do
-      env = Rack::MockRequest.env_for('/without')
-      @status, @headers, @body = @middleware.call(env)        
-    end
-    
-    it_should_behave_like "when the client does NOT have an up-to-date document"
-  end
-
-  describe "when response has ETag header" do
-    describe "and it == to HTTP_IF_NONE_MATCH of the request" do
-      before(:each) do
-        env = Rack::MockRequest.env_for('/with_etag')
-        env['HTTP_IF_NONE_MATCH'] =
-          Digest::SHA1.hexdigest("original message-body")
-        @status, @headers, @body = @middleware.call(env)        
-      end
-
-      it_should_behave_like "when the client already has an up-to-date document"
-    end
-
-    describe "and it IS NOT == to HTTP_IF_NONE_MATCH of the request" do
-      before(:each) do
-        env = Rack::MockRequest.env_for('/with_etag')
-        env['HTTP_IF_NONE_MATCH'] =
-          Digest::SHA1.hexdigest("a different message-body")
-        @status, @headers, @body = @middleware.call(env)
-      end
-      
-      it_should_behave_like "when the client does NOT have an up-to-date document"
-    end
-  end
-
-  describe "when response has Last-Modified header" do
-    describe "and it == to HTTP_IF_NOT_MODIFIED_SINCE of the request" do
-      before(:each) do
-        env = Rack::MockRequest.env_for('/with_last_modified')
-        env[Merb::Const::HTTP_IF_MODIFIED_SINCE] = :documents_last_modified_time
-        @status, @headers, @body = @middleware.call(env)
-      end
-      
-      it_should_behave_like "when the client already has an up-to-date document"
-    end
-
-    describe "and it IS NOT == to HTTP_IF_NOT_MODIFIED_SINCE of the request" do
-      before(:each) do
-        env = Rack::MockRequest.env_for('/with_last_modified')
-        env[Merb::Const::HTTP_IF_MODIFIED_SINCE] = :some_other_time
-        @status, @headers, @body = @middleware.call(env)
-      end
-
-      it_should_behave_like "when the client does NOT have an up-to-date document"
-    end
-  end
-end
diff --git a/spec10/public/rack/rack_middleware_spec.rb b/spec10/public/rack/rack_middleware_spec.rb
deleted file mode 100644
index 21069e1..0000000
--- a/spec10/public/rack/rack_middleware_spec.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-require File.join(File.dirname(__FILE__), "shared_example_groups")
-
-class RackyController < Merb::Controller
-  def index
-    body = "Everyone loves Rack"
-    headers['Content-Length'] = body.size.to_s
-    
-    body
-  end
-end
-
-Merb::Router.prepare do |r|
-  r.match("/heavy/lifting").to(:controller => "racky_controller")
-end
-
-
-describe Merb::Rack::Application do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @env = Rack::MockRequest.env_for('/heavy/lifting')
-    
-    @result = @app.call(@env)
-    @body   = "Everyone loves Rack"
-  end
-
-  it_should_behave_like "rack application"
-
-  it 'does not set Date header' do
-    status, headers, body = @app.call(@env)
-
-    headers.keys.should_not include(Merb::Const::DATE)
-  end
-  
-  describe "#deferred?" do
-    it "returns true when request path matches deferred actions regexp" do
-      Merb::Config[:deferred_actions] = ['/heavy/lifting']
-
-      @app.deferred?(@env).should be(true)
-    end
-
-    it "returns false when request path DOES NOT match deferred actions regexp" do
-      @app.deferred?(Rack::MockRequest.env_for('/not/deferred')).should be(false)
-    end
-  end
-end
-
-
-describe Merb::Rack::Middleware do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @middleware = Merb::Rack::Middleware.new(@app)
-    @env        = Rack::MockRequest.env_for('/heavy/lifting')
-    
-    @result = @middleware.call(@env)
-    @body   = "Everyone loves Rack"
-  end
-
-  it_should_behave_like "rack application"
-
-  it_should_behave_like "transparent middleware"
-end
-
-
-
-describe Merb::Rack::Tracer do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @middleware = Merb::Rack::Tracer.new(@app)
-    @env        = Rack::MockRequest.env_for('/heavy/lifting')
-    
-    @result = @middleware.call(@env)
-    @body   = "Everyone loves Rack"
-  end
-
-  it_should_behave_like "rack application"
-
-  it_should_behave_like "transparent middleware"  
-end
-
-
-describe Merb::Rack::ContentLength do
-  before(:each) do
-    @app = Merb::Rack::Application.new
-    @middleware = Merb::Rack::ContentLength.new(@app)
-    @env        = Rack::MockRequest.env_for('/heavy/lifting')
-    
-    @result = @middleware.call(@env)
-    @body   = "Everyone loves Rack"
-  end
-
-  it_should_behave_like "rack application"
-
-  it_should_behave_like "transparent middleware"
-
-  it 'sets Content-Length header to response body size' do
-    @result[1]['Content-Length'].should == @body.size.to_s
-  end
-end
diff --git a/spec10/public/rack/shared_example_groups.rb b/spec10/public/rack/shared_example_groups.rb
deleted file mode 100644
index 08424da..0000000
--- a/spec10/public/rack/shared_example_groups.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-describe "rack application", :shared => true do
-  it 'is callable' do
-    @app.should respond_to(:call)
-  end
-
-  it 'returns a 3-tuple' do
-    @result.size.should == 3
-  end
-
-  it 'returns status as first tuple element' do
-    @result.first.should == 200
-  end
-
-  it 'returns hash of headers as the second tuple element' do
-    @result[1].should be_an_instance_of(Hash)
-  end
-
-  it 'returns response body as third tuple element' do
-    @result.last.to_s.should == @body
-  end
-end
-
-describe "transparent middleware", :shared => true do
-  it "delegates request handling to wrapped Rack application" do
-    @result.last.to_s.should == @body
-  end
-
-  describe "#deferred?" do
-    it "is delegated to wrapped Rack application" do
-      @middleware.deferred?(@env).should be(true)
-      @middleware.deferred?(Rack::MockRequest.env_for('/not-deferred/')).should be(false)
-    end
-  end
-end
-
diff --git a/spec10/public/request/multipart_spec.rb b/spec10/public/request/multipart_spec.rb
deleted file mode 100644
index f15e71d..0000000
--- a/spec10/public/request/multipart_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-require "mongrel"
-
-describe Merb::Request do
-  it "should handle file upload for multipart/form-data posts" do
-    file = Struct.new(:read, :filename, :path).
-      new("This is a text file with some small content in it.", "sample.txt", "sample.txt")
-    m = Merb::Test::MultipartRequestHelper::Post.new :file => file
-    body, head = m.to_multipart
-    request = fake_request({:request_method => "POST", :content_type => head, :content_length => body.length}, :req => body)
-    request.params[:file].should_not be_nil
-    request.params[:file][:tempfile].class.should == Tempfile
-    request.params[:file][:content_type].should == 'text/plain'
-  end
-  
-  it "should accept env['rack.input'] as IO object (instead of StringIO)" do
-    file = Struct.new(:read, :filename, :path).
-      new("This is a text file with some small content in it.", "sample.txt", "sample.txt")
-    m = Merb::Test::MultipartRequestHelper::Post.new :file => file
-    body, head = m.to_multipart
-    
-    t = Tempfile.new("io")
-    t.write(body)
-    t.close
-    
-    fd = IO.sysopen(t.path)
-    io = IO.for_fd(fd,"r")
-    request = Merb::Test::RequestHelper::FakeRequest.new({:request_method => "POST", :content_type => 'multipart/form-data, boundary=----------0xKhTmLbOuNdArY', :content_length => body.length},io)
-
-    running {request.params}.should_not raise_error        
-    request.params[:file].should_not be_nil
-    request.params[:file][:tempfile].class.should == Tempfile
-    request.params[:file][:content_type].should == 'text/plain'
-  end    
-    
-  it "should handle GET with a content_type but an empty body (happens in some browsers such as safari after redirect)" do
-      request = fake_request({:request_method => "GET", :content_type => 'multipart/form-data, boundary=----------0xKhTmLbOuNdArY', :content_length => 0}, :req => '')      
-      running {request.params}.should_not raise_error        
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/request/request_spec.rb b/spec10/public/request/request_spec.rb
deleted file mode 100644
index ef59aa4..0000000
--- a/spec10/public/request/request_spec.rb
+++ /dev/null
@@ -1,252 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-startup_merb
-
-require "mongrel"
-
-describe Merb::Request, "#method" do
-  
-  [:get, :head, :put, :delete].each do |method|
-    it "should use the HTTP if it was a #{method.to_s.upcase}" do
-      fake_request(:request_method => method.to_s).method.should == method
-    end
-
-    it "should use the _method body params for #{method.to_s.upcase} when it came in as a POST" do
-      request = fake_request({:request_method => "POST"}, :post_body => "_method=#{method}")
-      request.method.should == method
-    end
-    
-    it "should use the _method query params for #{method.to_s.upcase} when it came in as a POST" do
-      Merb::Request.parse_multipart_params = false
-      request = fake_request(:request_method => "POST", :query_string => "_method=#{method}")
-      request.method.should == method      
-    end
-    
-    [:get, :head, :put, :delete].each do |meth|
-      it "should return #{method == meth} when calling #{meth}? and the method is :#{method}" do
-        request = fake_request({:request_method => method.to_s})
-        request.send("#{meth}?").should == (method == meth)
-      end
-    end
-  end
-
-  it "should not try to parse the request body as JSON on GET" do
-    request = fake_request({:request_method => "GET", :content_type => "application/json"}, :req => "")
-    lambda { request.params }.should_not raise_error(JSON::ParserError)
-    request.params.should == {}
-  end
-  
-  it "should return an empty hash when XML is not parsable" do
-    request = fake_request({:content_type => "application/xml"}, :req => '')
-    lambda { request.params }.should_not raise_error
-    request.params.should == {}
-  end
-  
-  it "should default to POST if the _method is not defined" do
-    request = fake_request({:request_method => "POST"}, :post_body => "_method=zed")
-    request.method.should == :post
-  end
-  
-  it "should raise an error if an unknown method is used" do
-    request = fake_request({:request_method => "foo"})
-    running {request.method}.should raise_error
-  end
-    
-end
-
-describe Merb::Request, " query and body params" do
-  
-  before(:all) { Merb::BootLoader::Dependencies.enable_json_gem }
-  
-  TEST_PARAMS = {
-    "foo=bar&baz=bat"                       => {"foo" => "bar", "baz" => "bat"},
-    "foo=bar&foo=baz"                       => {"foo" => "baz"},
-    "foo[]=bar&foo[]=baz"                   => {"foo" => ["bar", "baz"]},
-    "foo[][bar]=1&foo[][bar]=2"             => {"foo" => [{"bar" => "1"},{"bar" => "2"}]},
-    "foo[bar][][baz]=1&foo[bar][][baz]=2"   => {"foo" => {"bar" => [{"baz" => "1"},{"baz" => "2"}]}},
-    "foo[1]=bar&foo[2]=baz"                 => {"foo" => {"1" => "bar", "2" => "baz"}},
-    
-    "foo[bar][baz]=1&foo[bar][zot]=2&foo[bar][zip]=3&foo[bar][buz]=4" => {"foo" => {"bar" => {"baz" => "1", "zot" => "2", "zip" => "3", "buz" => "4"}}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][zip]=3&foo[bar][][buz]=4" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "zip" => "3", "buz" => "4"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][baz]=3&foo[bar][][zot]=4" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2"},{"baz" => "3", "zot" => "4"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][fuz]=A&foo[bar][][baz]=3&foo[bar][][zot]=4&foo[bar][][fuz]=B" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4", "fuz" => "B"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][fuz]=A&foo[bar][][baz]=3&foo[bar][][zot]=4&foo[bar][][foz]=C" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4", "foz" => "C"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][fuz]=A&foo[bar][][baz]=3&foo[bar][][zot]=4" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4"}]}},
-    "foo[bar][][baz]=1&foo[bar][][zot]=2&foo[bar][][fuz]=A&foo[bar][][baz]=3&foo[bar][][zot]=4&foo[bar][][fuz]=B&foo[bar][][foz]=C" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4", "fuz" => "B", "foz" => "C"}]}},
-    "foo[][bar][][baz]=1&foo[][bar][][zot]=2&foo[][bar][][fuz]=A&foo[][bar][][baz]=3&foo[][bar][][zot]=4&foo[][bar][][fuz]=B&foo[][bar][][foz]=C" => {"foo" => {"bar" => [{"baz" => "1", "zot" => "2", "fuz" => "A"},{"baz" => "3", "zot" => "4", "fuz" => "B", "foz" => "C"}]}}
-  }
-  
-  TEST_PARAMS.each do |query, parse|
-
-     it "should convert #{query.inspect} to #{parse.inspect} in the query string" do
-       request = fake_request({:query_string => query})
-       request.params.should == parse
-     end
-
-     it "should convert #{query.inspect} to #{parse.inspect} in the post body" do
-       request = fake_request({}, :post_body => query)
-       request.params.should == parse
-     end
-   
-   end
-   
-  it "should support JSON params" do
-    request = fake_request({:content_type => "application/json"}, :req => %{{"foo": "bar"}})
-    request.params.should == {"foo" => "bar"}
-  end
-  
-  it "should populated the inflated_object parameter if JSON params do not inflate to a hash" do
-    request = fake_request({:content_type => "application/json"}, :req => %{["foo", "bar"]})
-    request.params.should have_key(:inflated_object)
-    request.params[:inflated_object].should eql(["foo", "bar"])
-  end
-  
-  it "should support XML params" do
-    request = fake_request({:content_type => "application/xml"}, :req => %{<foo bar="baz"><baz/></foo>})
-    request.params.should == {"foo" => {"baz" => nil, "bar" => "baz"}}
-  end  
-  
-end
-
-describe Merb::Request, "#remote_ip" do
-  it "should be able to get the remote IP of a request with X_FORWARDED_FOR" do
-    request = fake_request({:http_x_forwarded_for => "www.example.com"})
-    request.remote_ip.should == "www.example.com"
-  end
-  
-  it "should be able to get the remote IP when some of the X_FORWARDED_FOR are local" do
-    request = fake_request({:http_x_forwarded_for => "192.168.2.1,127.0.0.1,www.example.com"})
-    request.remote_ip.should == "www.example.com"
-  end
-  
-  it "should be able to get the remote IP when it's in REMOTE_ADDR" do
-    request = fake_request({:remote_addr => "www.example.com"})
-    request.remote_ip.should == "www.example.com"    
-  end
-end
-
-describe Merb::Request, "#cookies" do
-  
-  it "should take cookies in the HTTP_COOKIE environment variable" do
-    request = fake_request({:http_cookie => "merb=canhascookie; version=1"})
-    request.cookies.should == {"merb" => "canhascookie", "version" => "1"}
-  end
-  
-  it "should handle badly formatted cookies" do
-    request = fake_request({:http_cookie => "merb=; ; also=hats"})
-    request.cookies.should == {"merb" => "", "also" => "hats"}
-  end
-  
-end
-
-describe Merb::Request, " misc" do
-  
-  it "should know if a request is an XHR" do
-    request = fake_request({:http_x_requested_with => "XMLHttpRequest"})
-    request.should be_xhr
-  end
-  
-  it "should know if the protocol is http or https (when HTTPS is on)" do
-    request = fake_request({:https => "on"})
-    request.protocol.should == "https"
-    request.should be_ssl
-  end
-
-  it "should know if the protocol is http or https (when HTTP_X_FORWARDED_PROTO is https)" do
-    request = fake_request({:http_x_forwarded_proto => "https"})
-    request.protocol.should == "https"
-    request.should be_ssl
-  end
-
-  it "should know if the protocol is http or https (when it's regular HTTP)" do
-    request = fake_request({})
-    request.protocol.should == "http"
-  end
-  
-  it "should get the content-length" do
-    request = fake_request({:content_length => "300"})
-    request.content_length.should == 300
-  end
-  
-  it "should be able to get the path from the URI (stripping trailing /)" do
-    request = fake_request({:request_uri => "foo/bar/baz/?bat"})
-    request.path.should == "foo/bar/baz"
-  end
-  
-  it "should be able to get the path from the URI (joining multiple //)" do
-    request = fake_request({:request_uri => "foo/bar//baz/?bat"})
-    request.path.should == "foo/bar/baz"
-  end
-  
-  it "should get the remote port" do
-    request = fake_request({:server_port => "80"})
-    request.port.should == 80
-  end
-  
-  it "should get the parts of the remote subdomain" do
-    request = fake_request({:http_host => "zoo.boom.foo.com"})
-    request.subdomains.should == ["zoo", "boom"]
-  end
-  
-  it "should get the parts of the remote subdomain when there's an irregular TLD number" do
-    request = fake_request({:http_host => "foo.bar.co.uk"})
-    request.subdomains(2).should == ["foo"]
-  end
-  
-  it "should get the full domain (not including subdomains and not including the port)" do
-    request = fake_request({:http_host => "www.foo.com:80"})
-    request.domain.should == "foo.com"
-  end
-
-  it "should get the full domain from an irregular TLD" do
-    request = fake_request({:http_host => "www.foo.co.uk:80"})
-    request.domain(2).should == "foo.co.uk"
-  end
-
-  it "should get the host (with X_FORWARDED_HOST)" do
-    request = fake_request({:http_x_forwarded_host => "www.example.com"})
-    request.host.should == "www.example.com"
-  end
-
-  it "should get the host (without X_FORWARDED_HOST)" do
-    request = fake_request({:http_host => "www.example.com"})
-    request.host.should == "www.example.com"
-  end
-    
-  {:http_referer            => ["referer", "http://referer.com"],
-   :request_uri             => ["uri", "http://uri.com/uri"],
-   :http_user_agent         => ["user_agent", "mozilla"],
-   :server_name             => ["server_name", "apache"],
-   :http_accept_encoding    => ["accept_encoding", "application/json"],
-   :script_name             => ["script_name", "foo"],
-   :http_cache_control      => ["cache_control", "no-cache"],
-   :http_accept_language    => ["accept_language", "en"],
-   :server_software         => ["server_software", "apache"],
-   :http_keep_alive         => ["keep_alive", "300"],
-   :http_accept_charset     => ["accept_charset", "UTF-8"],
-   :http_version            => ["version", "1.1"],
-   :gateway_interface       => ["gateway", "CGI/1.2"],
-   :http_connection         => ["connection", "keep-alive"],
-   :path_info               => ["path_info", "foo/bar/baz"],
-  }.each do |env, vars|
-    
-    it "should be able to get the #{env.to_s.upcase}" do
-      request = fake_request({env => vars[1]})
-      request.send(vars[0]).should == vars[1]
-    end
-    
-  end
-  
-end
-
-describe Merb::Request, "#if_none_match" do
-  it 'returns value of If-None-Match request header' do
-    fake_request(Merb::Const::HTTP_IF_NONE_MATCH => "dc1562a133").if_none_match.should == "dc1562a133"
-  end
-end
-
-describe Merb::Request, "#if_modified_since" do
-  it 'returns value of If-Modified-Since request header' do
-    t = '05 Sep 2008 22:00:27 GMT'
-    fake_request(Merb::Const::HTTP_IF_MODIFIED_SINCE => t).if_modified_since.should == Time.rfc2822(t)
-  end
-end
diff --git a/spec10/public/router/behavior_spec.rb b/spec10/public/router/behavior_spec.rb
deleted file mode 100644
index 904d19a..0000000
--- a/spec10/public/router/behavior_spec.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Router::Behavior do
-  
-  describe "#capture" do
-    
-    it "should capture the named routes defined in the block" do
-      Merb::Router.prepare do
-        match("/one").register
-        match("/two").name(:two)
-        
-        # --- self. is to get around a helper method
-        captured = self.capture do
-          match("/three").register
-          match("/four").name(:four)
-        end
-        
-        captured.should == Merb::Router.named_routes.reject { |key, _| key == :two }
-      end
-    end
-    
-    it "should retain the same names if there are no name_prefixes set" do
-      Merb::Router.prepare do
-        captured = self.capture do
-          match('/one').name(:one)
-          match('/two/three').name(:two_three)
-        end
-        
-        Merb::Router.named_routes[:one].should       == captured[:one]
-        Merb::Router.named_routes[:two_three].should == captured[:two_three]
-      end
-    end
-    
-    it "should still recognize the routes generated before, inside, and after a capture block" do
-      Merb::Router.prepare do
-        match("/one").to(:controller => "one")
-        self.capture do
-          match("/two").to(:controller => "two")
-        end
-        match("/three").to(:controller => "three")
-      end
-      
-      route_for("/one").should   have_route(:controller => "one")
-      route_for("/two").should   have_route(:controller => "two")
-      route_for("/three").should have_route(:controller => 'three')
-    end
-    
-    it "should not return anything if nothing was defined inside of the block" do
-      captured = {}
-      
-      Merb::Router.prepare do
-        captured = self.capture { }
-      end
-      
-      captured.should be_empty
-    end
-    
-    it "should ignore the namespaces that capture is wrapped around" do
-      Merb::Router.prepare do
-        namespace :admin do
-          captured = self.capture do
-            match("/one").to(:controller => "hi").name(:one)
-            match("/two/three").to(:controller => "hi").name(:two_three)
-          end
-          
-          captured[:one].should       == Merb::Router.named_routes[:admin_one]
-          captured[:two_three].should == Merb::Router.named_routes[:admin_two_three]
-        end
-      end
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/conditions_spec.rb b/spec10/public/router/generation/conditions_spec.rb
deleted file mode 100644
index f4603fe..0000000
--- a/spec10/public/router/generation/conditions_spec.rb
+++ /dev/null
@@ -1,134 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a route with one condition" do
-    
-    it "should generate when the string condition is met" do
-      Merb::Router.prepare do
-        match("/:account", :account => "walruses").name(:condition)
-      end
-
-      url(:condition, :account => "walruses").should == "/walruses"
-    end
-    
-    it "should generate when the regexp condition that is met" do
-      Merb::Router.prepare do
-        match("/:account", :account => /[a-z]+/).name(:condition)
-      end
-
-      url(:condition, :account => "walruses").should == "/walruses"
-    end
-
-    it "should not generate if the String condition is not met" do
-      Merb::Router.prepare do
-        match("/:account", :account => "walruses").name(:condition)
-      end
-
-      lambda { url(:condition, :account => "pecans") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should not generate if the Regexp condition is not met" do
-      Merb::Router.prepare do
-        match("/:account", :account => /[a-z]+/).name(:condition)
-      end
-
-      lambda { url(:condition, :account => "29") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should respect Regexp anchors" do
-      Merb::Router.prepare do
-        match("/:account") do
-          match(:account => /^[a-z]+$/).name(:both )
-          match(:account => /^[a-z]+/ ).name(:start)
-          match(:account => /[a-z]+$/ ).name(:end  )
-          match(:account => /[a-z]+/  ).name(:none )
-        end
-      end
-
-      # Success
-      url(:both,  :account => "abc").should == "/abc"
-      url(:start, :account => "abc").should == "/abc"
-      url(:start, :account => "ab1").should == "/ab1"
-      url(:end,   :account => "abc").should == "/abc"
-      url(:end,   :account => "1ab").should == "/1ab"
-      url(:none,  :account => "abc").should == "/abc"
-      url(:none,  :account => "1ab").should == "/1ab"
-      url(:none,  :account => "ab1").should == "/ab1"
-
-      # Failure
-      lambda { url(:both,  :account => "1ab") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:both,  :account => "ab1") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:both,  :account => "123") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:start, :account => "1ab") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:start, :account => "123") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:end,   :account => "ab1") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:end,   :account => "123") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:none,  :account => "123") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should work with Regexp conditions that contain capturing parentheses" do
-      Merb::Router.prepare do
-        match("/:domain", :domain => /[a-z]+\.(com|net)/).name(:condition)
-      end
-
-      url(:condition, :domain => "foobar.com").should == "/foobar.com"
-      lambda { url(:condition, :domain => "foobar.org") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should work with Regexp conditions that contain non-capturing parentheses" do
-      Merb::Router.prepare do
-        match("/:domain", :domain => /[a-z]+\.(com|net)/).name(:condition)
-      end
-
-      url(:condition, :domain => "foobar.com").should == "/foobar.com"
-      lambda { url(:condition, :domain => "foobar.org") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should not take into consideration conditions on request methods" do
-      Merb::Router.prepare do
-        match("/one/two", :method => :post).name(:simple)
-      end
-      
-      url(:simple).should == "/one/two"
-    end
-  end
-  
-  describe "a route with multiple conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:one/:two", :one => "hello", :two => %r[^(world|moon)$]).name(:condition)
-      end
-    end
-
-    it "should generate if all the conditions are met" do
-      url(:condition, :one => "hello", :two => "moon").should == "/hello/moon"
-    end
-
-    it "should not generate if any of the conditions fail" do
-      lambda { url(:condition, :one => "hello") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:condition, :two => "world") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should append any extra elements to the query string" do
-      url(:condition, :one => "hello", :two => "world", :three => "moon").should == "/hello/world?three=moon"
-    end
-    
-  end
-  
-  describe "a route with nested condition blocks" do
-    it "should use both condition blocks to generate" do
-      Merb::Router.prepare do
-        match("/prefix") do
-          to(:controller => "prefix", :action => "show").name(:prefix)
-          match("/second").to(:controller => "second").name(:second)
-        end
-      end
-      
-      url(:prefix).should == "/prefix"
-      url(:second).should == "/prefix/second"
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/default_route_spec.rb b/spec10/public/router/generation/default_route_spec.rb
deleted file mode 100644
index eda3dc4..0000000
--- a/spec10/public/router/generation/default_route_spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "the default route" do
-    
-    it "should be able to generate from the various combinations" do
-      Merb::Router.prepare do
-        default_routes
-      end
-
-      url(:controller => "hello").should                              == "/hello"
-      url(:controller => "hello", :action => "index").should          == "/hello/index"
-      url(:controller => "hello", :action => "world").should          == "/hello/world"
-      url(:controller => "hello", :format => :html).should            == "/hello.html"
-      url(:controller => "zomg", :action => "hi2u", :id => 12).should == "/zomg/hi2u/12"
-    end
-    
-    # it "should be able to generate spiced up default routes" do
-    #   Merb::Router.prepare do |r|
-    #     r.match("/:account/:controller(/:action(/:id))(.:format)").to.name(:default)
-    #   end
-    #   
-    #   url(:account => "ohyeah", :controller => "hello").should == "/ohyeah/hello"
-    #   url(:account => "ohyeah", :controller => "hello", :action => "world").should == "/ohyeah/hello/world"
-    #   url(:account => "ohyeah", :controller => "hello", :format => :html).should == "/ohyeah/hello.html"
-    #   
-    #   url(:account => "ohyeah", :controller => "zomg", :action => "hi2u", :id => 12).should == "/ohyeah/zomg/hi2u/12"
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/defaults_spec.rb b/spec10/public/router/generation/defaults_spec.rb
deleted file mode 100644
index 6c572de..0000000
--- a/spec10/public/router/generation/defaults_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a route default values for variable segments" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/(:foobar)").defaults(:foobar => "foo").name(:with_default)
-      end
-    end
-    
-    it "should generate the route normally" do
-      url(:with_default).should                     == "/"
-      url(:with_default, :foobar => "hello").should == "/hello"
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/identify_spec.rb b/spec10/public/router/generation/identify_spec.rb
deleted file mode 100644
index 263c0e5..0000000
--- a/spec10/public/router/generation/identify_spec.rb
+++ /dev/null
@@ -1,163 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-# Namespacing everything so that all the spec classes aren't shared
-# across other specs
-module ID
-  class ORM ; end
-
-  module Resource
-    def identifier
-      "included"
-    end
-  end
-
-  class Article < ORM 
-    def id   ; 10        ; end
-    def to_s ; "article" ; end
-  end
-
-  class Account < ORM
-    def to_s ; "account"  ; end
-    def url  ; "awesome" ; end
-  end
-
-  class User < ORM
-    def id         ; 10     ; end
-    def to_s       ; "user" ; end
-    def name       ; "carl" ; end
-    def first_name ; "john" ; end
-    def last_name  ; "doe"  ; end
-  end
-
-  class Something
-    def to_s ; "hello" ; end
-  end
-
-  class WithInclusions
-    include Resource
-  end
-  
-  describe "When generating URLs," do
-
-    before(:each) do
-      Merb::Router.prepare do
-        identify Account => :url, User => :name, ORM => :id, Resource => :identifier do
-          match("/:account") do
-            resources :users
-          end
-        end
-
-        match("/resources/:id").name(:resource)
-      end
-    end
-
-    describe "a route with custom identifiers" do
-
-      it "should use #to_s if no other identifier is set" do
-        url(:resource, :id => Article.new).should   == "/resources/article"
-        url(:resource, :id => Account.new).should   == "/resources/account"
-        url(:resource, :id => User.new).should      == "/resources/user"
-        url(:resource, :id => Something.new).should == "/resources/hello"
-      end
-      
-      it "should use #to_s if no other identifier is set when params are anonymous" do
-        url(:resource, Article.new).should   == "/resources/article"
-        url(:resource, Account.new).should   == "/resources/account"
-        url(:resource, User.new).should      == "/resources/user"
-        url(:resource, Something.new).should == "/resources/hello"
-      end
-
-      it "should use the identifier for the object" do
-        url(:user, :account => Account.new, :id => User.new).should == "/awesome/users/carl"
-      end
-      
-      it "should use the identifier for the object when the params are anonymous" do
-        url(:user, Account.new, User.new).should == "/awesome/users/carl"
-      end
-
-      it "should be able to use identifiers for parent classes" do
-        url(:user, :account => Article.new, :id => 1).should == "/10/users/1"
-      end
-      
-      it "should be able to use identifiers for parent classes when the params are anonymous" do
-        url(:user, Article.new, 1).should == "/10/users/1"
-      end
-
-      it "should be able to use identifiers for included modules" do
-        url(:user, :account => WithInclusions.new, :id => '1').should == "/included/users/1"
-      end
-      
-      it "should be able to use identifiers for included modules when the params are anonymous" do
-        url(:user, WithInclusions.new, '1').should == "/included/users/1"
-      end
-      
-      it "should be able to specify an array of identifiers" do
-        Merb::Router.prepare do
-          identify(User => [:last_name, :first_name]) do
-            match("/users/:last_name/:first_name").name(:users)
-          end
-        end
-        
-        url(:users, :last_name => User.new, :first_name => User.new).should == "/users/doe/john"
-      end
-      
-      it "should be able to specify an array of identifiers when the params are anonymous" do
-        Merb::Router.prepare do
-          identify(User => [:last_name, :first_name]) do
-            match("/users/:last_name/:first_name").name(:users)
-          end
-        end
-        
-        url(:users, User.new).should == "/users/doe/john"
-      end
-      
-      it "should be able to treat :id correctly with Array identifiers" do
-        Merb::Router.prepare do
-          identify(User => [:name, :id]) do
-            resources :users, :keys => [:name, :id] do
-              resources :comments
-            end
-          end
-        end
-        
-        url(:user_comments, :name => User.new, :user_id => User.new).should == "/users/carl/10/comments"
-      end
-
-      it "should not require a block" do
-        Merb::Router.prepare do
-          identify(Account => :url).match("/:account").name(:account)
-        end
-
-        url(:account, :account => Account.new).should == "/awesome"
-      end
-
-      it "should combine identifiers when nesting" do
-        Merb::Router.prepare do
-          identify Account => :url do
-            identify User => :name do
-              match("/:account").resources :users
-            end
-          end
-        end
-
-        url(:user, :account => Account.new, :id => User.new).should == "/awesome/users/carl"
-      end
-
-      it "should retain previously set conditions" do
-        Merb::Router.prepare do
-          match("/:account") do
-            register.name(:account)
-            identify Account => :url do
-              resources :users
-            end
-          end
-        end
-
-        url(:account, :account => Account.new).should == "/account"
-        url(:user, :account => Account.new, :id => User.new).should == "/awesome/users/user"
-      end
-
-    end
-
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/namespace_spec.rb b/spec10/public/router/generation/namespace_spec.rb
deleted file mode 100644
index de00c3e..0000000
--- a/spec10/public/router/generation/namespace_spec.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a namespaced named route" do
-    
-    it "should add the prefix to the route name and url" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          match("/login").to(:controller => "home").name(:login)
-        end
-      end
-
-      url(:admin_login).should == "/admin/login"
-    end
-    
-    it "should be able to specify the path prefix as an option" do
-      Merb::Router.prepare do
-        namespace(:admin, :path => "supauser") do
-          match("/login").to(:controller => "home").name(:login)
-        end
-      end
-      
-      url(:admin_login).should == "/supauser/login"
-    end
-    
-    it "should be able to specify the name prefix as an option" do
-      Merb::Router.prepare do
-        namespace(:admin, :name_prefix => "supa") do
-          match("/login").to(:controller => "home").name(:login)
-        end
-      end
-      
-      url(:supa_login).should == "/admin/login"
-    end
-    
-    it "should be able to not add a path prefix" do
-      Merb::Router.prepare do
-        namespace(:admin, :path => "") do
-          match("/login").to(:controller => "home").name(:login)
-        end
-      end
-      
-      url(:admin_login).should == "/login"
-    end
-    
-    it "should not use the name prefix if the route is named with #full_name" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          match("/:controller").full_name(:controller)
-          match("/login").to(:controller => "home").full_name(:login)
-        end
-      end
-      
-      url(:controller, :controller => 'foobar').should == "/admin/foobar"
-      url(:login).should                               == "/admin/login"
-    end
-    
-    it "should be able to prepend to the name_prefix" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          match("/login").to(:controller => "home").name(:do, :login)
-        end
-      end
-      
-      url(:do_admin_login).should == "/admin/login"
-    end
-  end
-  
-  describe "a nested namespaced named route" do
-    it "should combine the namespaces" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          namespace(:bar) do
-            match("/login").to(:controller => "home").name(:login)
-          end
-        end
-      end
-      
-      url(:foo_bar_login).should == "/foo/bar/login"
-    end
-    
-    it "should only use the first namespace" do
-      Merb::Router.prepare do
-        namespace(:foo) do |f|
-          namespace(:bar) do
-            f.match("/login").to(:controller => "home").name(:login)
-          end
-        end
-      end
-      
-      url(:foo_login).should == "/foo/login"
-    end
-    
-    # This is broken :(
-    # ---
-    # it "should only use the second namespace" do
-    #   pending "This doesn't work for now"
-    #   Merb::Router.prepare do |r|
-    #     r.namespace(:foo) do |f|
-    #       r.namespace(:bar) do |b|
-    #         b.match("/login").to(:controller => "home").name(:login)
-    #       end
-    #     end
-    #   end
-    #   
-    #   url(:bar_login).should == "/bar/login"
-    # end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/optional_segments_spec.rb b/spec10/public/router/generation/optional_segments_spec.rb
deleted file mode 100644
index 15c3f68..0000000
--- a/spec10/public/router/generation/optional_segments_spec.rb
+++ /dev/null
@@ -1,163 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a named route with a single optional segment" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:foo(/:bar)").name(:optional)
-      end
-    end
-
-    it "should not generate the optional segment when all segments are just strings" do
-      Merb::Router.prepare do
-        match("/hello(/world)").name(:optional)
-      end
-
-      url(:optional).should == "/hello"
-    end
-
-    it "should not add the optional segment when the optional segment is just a string" do
-      Merb::Router.prepare do
-        match("/:greets(/world)").name(:optional)
-      end
-
-      url(:optional, :greets => "goodbye").should == "/goodbye"
-    end
-
-    it "should only generate the route's required segment if it contains no variables" do
-      Merb::Router.prepare do
-        match("/hello(/:optional)").name(:optional)
-      end
-
-      url(:optional).should == "/hello"
-    end
-
-    it "should only generate the required segment of the route if the optional parameter is not provided" do
-      url(:optional, :foo => "hello").should == "/hello"
-    end
-
-    it "should only generate the required segment of the route and add all extra parameters to the query string if the optional parameter is not provided" do
-      url(:optional, :foo => "hello", :extra => "world").should == "/hello?extra=world"
-    end
-
-    it "should also generate the optional segment of the route if the parameter is provied" do
-      url(:optional, :foo => "hello", :bar => "world").should == "/hello/world"
-    end
-
-    it "should generate the full optional segment of the route when there are multiple variables in the optional segment" do
-      Merb::Router.prepare do
-        match("/hello(/:foo/:bar)").name(:long_optional)
-      end
-
-      url(:long_optional, :foo => "world", :bar => "hello").should == "/hello/world/hello"
-    end
-
-    it "should not generate the optional segment of the route if all the parameters of that optional segment are not provided" do
-      Merb::Router.prepare do
-        match("/hello(/:foo/:bar)").name(:long_optional)
-      end
-
-      url(:long_optional, :foo => "world").should == "/hello?foo=world"
-    end
-
-    it "should raise an error if the required parameters are not provided" do
-      lambda { url(:optional) }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should raise an error if the required parameters are not provided even if optional parameters are" do
-      lambda { url(:optional, :bar => "hello") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-  describe "a named route with nested optional egments" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:controller(/:action(/:id))").name(:nested)
-      end
-    end
-
-    it "should generate the full route if all the necessary paramters are supplied" do
-      url(:nested, :controller => "users", :action => "show", :id => 5).should == "/users/show/5"
-    end
-
-    it "should generate only the required segment if no optional paramters are supplied" do
-      url(:nested, :controller => "users").should == "/users"
-    end
-
-    it "should generate the first optional level when deeper levels are not provided" do
-      url(:nested, :controller => "users", :action => "show").should == "/users/show"
-    end
-
-    it "should add deeper level of optional parameters to the query string if a middle level is not provided" do
-      url(:nested, :controller => "users", :id => 5).should == "/users?id=5"
-    end
-
-    it "should raise an error if the required segment is not provided" do
-      lambda { url(:nested, :action => "show") }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:nested, :id => 5) }.should raise_error(Merb::Router::GenerationError)
-      lambda { url(:nested, :action => "show", :id => 5) }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should add extra parameters to the query string" do
-      url(:nested, :controller => "users", :foo => "bar").should == "/users?foo=bar"
-      url(:nested, :controller => "users", :action => "show", :foo => "bar").should == "/users/show?foo=bar"
-      url(:nested, :controller => "users", :action => "show", :id => "2", :foo => "bar").should == "/users/show/2?foo=bar"
-    end
-    
-  end
-  
-  describe "a named route with multiple optional segments" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:controller(/:action)(.:format)").name(:multi)
-      end
-    end
-
-    it "should generate the full route if all the parameters are provided" do
-      url(:multi, :controller => "articles", :action => "recent", :format => "rss").should == "/articles/recent.rss"
-    end
-
-    it "should be able to generate the first optional segment without the second" do
-      url(:multi, :controller => "articles", :action => "recent").should == "/articles/recent"
-    end
-
-    it "should be able to generate the second optional segment without the first" do
-      url(:multi, :controller => "articles", :format => "xml").should == "/articles.xml"
-    end
-    
-  end
-  
-  describe "a named route with multiple optional segments containing nested optional segments" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:controller(/:action(/:id))(.:format)").name(:default)
-      end
-    end
-
-    it "should generate the full route when all the parameters are provided" do
-      url(:default, :controller => "posts", :action => "show", :id => "5", :format => :js).should ==
-        "/posts/show/5.js"
-    end
-
-    it "should generate with just the required parameter" do
-      url(:default, :controller => "posts").should == "/posts"
-    end
-
-    it "should be able to generate the first optional segment without the second" do
-      url(:default, :controller => "posts", :action => "show").should == "/posts/show"
-      url(:default, :controller => "posts", :action => "show", :id => "5").should == "/posts/show/5"
-    end
-
-    it "should be able to generate the second optional segment without the first" do
-      url(:default, :controller => "posts", :format => "html").should == "/posts.html"
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/other_spec.rb b/spec10/public/router/generation/other_spec.rb
deleted file mode 100644
index 2d9a39e..0000000
--- a/spec10/public/router/generation/other_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a route with a Regexp path" do
-    
-    it "should not generate" do
-      Merb::Router.prepare do
-        match(%r[/hello/world]).name(:regexp)
-      end
-      
-      lambda { url(:regexp) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/params_spec.rb b/spec10/public/router/generation/params_spec.rb
deleted file mode 100644
index d690f06..0000000
--- a/spec10/public/router/generation/params_spec.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "passing params in anonymously to routes" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:first/:second/:third").name(:ordered)
-      end
-    end
-    
-    it "should match the params to the segment variables in the order that they were declared" do
-      url(:ordered, "one", "two", "three").should == "/one/two/three"
-    end
-    
-    it "should not generate unless all the params are present" do
-      lambda { url(:ordered, "one", "two") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should not generate if there are too many anonymous params" do
-      lambda { url(:ordered, "one", "two", "three", "four") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should be able to mix and match with the params hash" do
-      url(:ordered, "one", "two", :third => "three").should == "/one/two/three"
-    end
-    
-    it "should be able to set query params with the params hash" do
-      url(:ordered, "one", "two", "three", :fourth => "four").should == "/one/two/three?fourth=four"
-    end
-    
-    it "should give precedence to the params hash" do
-      url(:ordered, "one", "two", :first => "un").should             == "/un/one/two"
-      url(:ordered, "one", :first => "un", :second => "deux").should == "/un/deux/one"
-      url(:ordered, "one", :first => "un", :third => "trois").should == "/un/one/trois"
-      url(:ordered, "one", "two", :second => "deux").should          == "/one/deux/two"
-    end
-    
-    it "should raise an exception when there are two many anonymous params after the named params were placed" do
-      lambda { url(:ordered, "one", "two", :first => "un", :second => "deux") }.should raise_error(Merb::Router::GenerationError)
-    end
-  end
-  
-  describe "passing params anonymously to resource routes with identifiers" do
-    
-    module AP
-      class ORM ; end
-      class User    < ORM ; def id ; 10 ; end ; end
-      class Comment < ORM ; def id ; 25 ; end ; end
-    end
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify AP::ORM => :id do
-          resources :users do
-            resources :comments
-          end
-        end
-      end
-    end
-    
-    it "should work the same as normal routes" do
-      url(:user,         AP::User.new                 ).should == "/users/10"
-      url(:user_comment, AP::User.new, AP::Comment.new).should == "/users/10/comments/25"
-      url(:user_comment, 30,           AP::Comment.new).should == "/users/30/comments/25"
-      url(:user_comment, AP::User.new, "42"           ).should == "/users/10/comments/42"
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/resources_spec.rb b/spec10/public/router/generation/resources_spec.rb
deleted file mode 100644
index 836596a..0000000
--- a/spec10/public/router/generation/resources_spec.rb
+++ /dev/null
@@ -1,320 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-class User
-  def id    ; 5  ; end
-  def ohhai ; 10 ; end
-end
-
-describe "When generating URLs," do
-  
-  describe "a resource collection route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        identify :id do
-          resources :users
-          identify :ohhai do
-            resources :admins
-          end
-        end
-      end
-    end
-    
-    it "should provide an index route" do
-      url(:users).should == "/users"
-    end
-    
-    it "should provide a new route" do
-      url(:new_user).should == "/users/new"
-    end
-    
-    it "should provide a show route" do
-      url(:user, :id => 1).should   == "/users/1"
-    end
-    
-    it "should be able to provide a string to generate a show route" do
-      url(:user, :id => "1").should == "/users/1"
-    end
-    
-    it "should be able to provide an object that responds to the default identifier method" do
-      url(:user, :id => User.new).should == "/users/5"
-    end
-    
-    it "should be able to provide an object that responds to a custom identifier method" do
-      url(:admin, :id => User.new).should == "/admins/10"
-    end
-    
-    it "should provide an edit route" do
-      url(:edit_user, :id => 1).should   == "/users/1/edit"
-    end
-    
-    it "should be able to provide a string to generate a show route" do
-      url(:edit_user, :id => "1").should == "/users/1/edit"
-    end
-    
-    it "should be able to provide an object that responds to the default identifier method" do
-      url(:edit_user, :id => User.new).should == "/users/5/edit"
-    end
-    
-    it "should be able to provide an object that responds to a custom identifier method" do
-      url(:edit_admin, :id => User.new).should == "/admins/10/edit"
-    end
-    
-    it "should provide a delete route" do
-      url(:delete_user, :id => 1).should   == "/users/1/delete"
-    end
-    
-    it "should be able to provide a string to generate a delete route" do
-      url(:delete_user, :id => "1").should == "/users/1/delete"
-    end
-    
-    it "should be able to provide an object that responds to the default identifier method" do
-      url(:delete_user, :id => User.new).should == "/users/5/delete"
-    end
-    
-    it "should be able to provide an object that responds to a custom identifier method" do
-      url(:delete_admin, :id => User.new).should == "/admins/10/delete"
-    end
-    
-    it "should be able to specify a class that does not exist" do
-      lambda do
-        Merb::Router.prepare do
-          resources :emails, "EmailBlahBlah"
-        end
-      end.should_not raise_error
-    end
-    
-    it "should be able to specify different keys than :id" do
-      Merb::Router.prepare do
-        resources :users, :keys => [:account, :name]
-      end
-      
-      url(:users).should                                               == "/users"
-      url(:new_user).should                                            == "/users/new"
-      url(:user, :account => "github", :name => "foo").should          == "/users/github/foo"
-      url(:edit_user, :account => "lighthouse", :name => "bar").should == "/users/lighthouse/bar/edit"
-      url(:delete_user, :account => "hello", :name => "world").should  == "/users/hello/world/delete"
-      # -- Bad --
-      lambda { url(:user, :id => 1) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    [:key, :keys].each do |option|
-      it "should work with a single #{option.inspect} entry" do
-        Merb::Router.prepare do
-          resources :users, option => :name
-        end
-
-        url(:users).should                          == "/users"
-        url(:new_user).should                       == "/users/new"
-        url(:user,        :name => "foo").should    == "/users/foo"
-        url(:edit_user,   :name => "bar").should    == "/users/bar/edit"
-        url(:delete_user, :name => "world").should  == "/users/world/delete"
-        # -- Bad --
-        lambda { url(:user, :id => 1) }.should raise_error(Merb::Router::GenerationError)
-      end
-    end
-    
-    it "should be able to specify the path of the resource" do
-      Merb::Router.prepare do
-        resources :users, :path => "admins"
-      end
-      
-      url(:users).should == "/admins"
-    end
-    
-    it "should be able to prepend the name" do
-      Merb::Router.prepare do
-        resources :users, :name_prefix => :admin
-      end
-      
-      url(:admin_users).should                 == "/users"
-      url(:new_admin_user).should              == "/users/new"
-      url(:admin_user, :id => 1).should        == "/users/1"
-      url(:edit_admin_user, :id => 1).should   == "/users/1/edit"
-      url(:delete_admin_user, :id => 1).should == "/users/1/delete"
-    end
-    
-    it "should be able to add extra collection routes through the options" do
-      Merb::Router.prepare do
-        resources :users, :collection => {:hello => :get, :goodbye => :post}
-      end
-      
-      url(:hello_users).should   == "/users/hello"
-      url(:goodbye_users).should == "/users/goodbye"
-    end
-    
-    it "should be able to add extra collection routes in the block" do
-      Merb::Router.prepare do
-        resources :users do
-          collection :hello
-          collection :goodbye
-        end
-      end
-      
-      url(:hello_users).should   == "/users/hello"
-      url(:goodbye_users).should == "/users/goodbye"
-    end
-    
-    it "should be able to add extra member routes" do
-      Merb::Router.prepare do
-        resources :users, :member => {:hello => :get, :goodbye => :post}
-      end
-      
-      url(:hello_user, :id => 1).should   == "/users/1/hello"
-      url(:goodbye_user, :id => 1).should == "/users/1/goodbye"
-    end
-    
-    it "should be able to add extra member routes" do
-      Merb::Router.prepare do
-        resources :users do
-          member :hello
-          member :goodbye
-        end
-      end
-      
-      url(:hello_user, :id => 1).should   == "/users/1/hello"
-      url(:goodbye_user, :id => 1).should == "/users/1/goodbye"
-    end
-    
-    it "should be able to specify arbitrary sub routes" do
-      Merb::Router.prepare do
-        resources :users do
-          match("/:foo", :foo => %r[^foo-\d+$]).to(:action => "foo").name(:foo)
-        end
-      end
-      
-      url(:user_foo, :user_id => 2, :foo => "foo-123").should == "/users/2/foo-123"
-    end
-    
-    it "should allow the singular name to be set" do
-      Merb::Router.prepare do
-        resources :blogposts, :singular => :blogpoost
-      end
-      
-      url(:blogposts).should == "/blogposts"
-      url(:blogpoost, 1).should == "/blogposts/1"
-    end
-    
-  end
-  
-  describe "a resource object route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :form
-      end
-    end
-    
-    it "should provide a show route" do
-      url(:form).should == "/form"
-    end
-    
-    it "should provide a new route" do
-      url(:new_form).should == "/form/new"
-    end
-    
-    it "should provide an edit route" do
-      url(:edit_form).should == "/form/edit"
-    end
-    
-    it "should provide a delete route" do
-      url(:delete_form).should == "/form/delete"
-    end
-    
-    it "should not provide an index route" do
-      lambda { url(:forms) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should be able to specify extra actions through the options" do
-      Merb::Router.prepare do
-        resource :form, :member => { :hello => :get, :goodbye => :post }
-      end
-      
-      url(:hello_form).should   == "/form/hello"
-      url(:goodbye_form).should == "/form/goodbye"
-    end
-    
-    it "should be able to specify extra actions through the block" do
-      Merb::Router.prepare do
-        resource :form do
-          member :hello
-          member :goodbye
-        end
-      end
-      
-      url(:hello_form).should   == "/form/hello"
-      url(:goodbye_form).should == "/form/goodbye"
-    end
-    
-    it "should be able to specify arbitrary sub routes" do
-      Merb::Router.prepare do
-        resource :form do
-          match("/:foo", :foo => %r[^foo-\d+$]).to(:action => "foo").name(:foo)
-        end
-      end
-      
-      url(:form_foo, :foo => "foo-123").should == "/form/foo-123"
-    end
-    
-  end
-  
-  describe "a nested resource route" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resources :users do
-          collection :gaga
-          resources :comments do
-            collection :hello
-            member     :goodbye
-          end
-        end
-      end
-    end
-    
-    it "should provide an index route" do
-      url(:user_comments, :user_id => 5).should == "/users/5/comments"
-    end
-    
-    it "should provide a new route" do
-      url(:new_user_comment, :user_id => 5).should == "/users/5/comments/new"
-    end
-    
-    it "should provide a show route" do
-      url(:user_comment, :user_id => 5, :id => 1).should == "/users/5/comments/1"
-    end
-    
-    it "should provide an edit route" do
-      url(:edit_user_comment, :user_id => 5, :id => 1).should == "/users/5/comments/1/edit"
-    end
-    
-    it "should provide a delete route" do
-      url(:delete_user_comment, :user_id => 5, :id => 1).should == "/users/5/comments/1/delete"
-    end
-    
-    it "should not have a gaga route" do
-      lambda { url(:gaga_user_comments, :user_id => 5) }
-    end
-    
-    it "should provide a hello collection route" do
-      url(:hello_user_comments, :user_id => 5).should == "/users/5/comments/hello"
-    end
-    
-    it "should provide a goodbye member route" do
-      url(:goodbye_user_comment, :user_id => 5, :id => 1).should == "/users/5/comments/1/goodbye"
-    end
-    
-  end
-  
-  describe "a resource route nested in a conditional block" do
-    it "should use previously set conditions" do
-      Merb::Router.prepare do
-        match("/prefix") do
-          resources :users
-        end
-      end
-      
-      url(:users).should == "/prefix/users"
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/string_spec.rb b/spec10/public/router/generation/string_spec.rb
deleted file mode 100644
index ff2148c..0000000
--- a/spec10/public/router/generation/string_spec.rb
+++ /dev/null
@@ -1,125 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs," do
-  
-  describe "a plain named route with no variables" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/hello/world").to(:controller => "hello", :action => "world").name(:simple)
-      end
-    end
-
-    it "should generate with no parameters" do
-      url(:simple).should == "/hello/world"
-    end
-
-    it "should append any parameters to the query string" do
-      url(:simple, :foo => "bar").should == "/hello/world?foo=bar"
-    end
-    
-  end
-  
-  describe "a named route with a variable and no conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:account/welcome").to(:controller => "home", :action => "welcome").name(:welcome)
-      end
-    end
-
-    it "should generate a URL with a paramter passed for the variable" do
-      url(:welcome, :account => "walruses").should == "/walruses/welcome"
-    end
-    
-    it "should generate with a blank parameter" do
-      url(:welcome, :account => "").should == "//welcome"
-    end
-
-    it "should append any extra parameters to the query string" do
-      url(:welcome, :account => "seagulls", :like_walruses => "true").should == "/seagulls/welcome?like_walruses=true"
-    end
-
-    it "should raise an error if no parameters are passed" do
-      lambda { url(:welcome) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should raise an error if a nil parameter is passed" do
-      lambda { url(:welcome, :account => nil) }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should raise an error if parameters are passed without :account" do
-      lambda { url(:welcome, :foo => "bar") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-  describe "a named route with multiple variables and no conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:foo/:bar").to(:controller => "one", :action => "two").name(:foobar)
-      end
-    end
-
-    it "should generate URL with parameters passed for both variables" do
-      url(:foobar, :foo => "omg", :bar => "hi2u").should == "/omg/hi2u"
-    end
-
-    it "should append any extra parameters to the query string" do
-      url(:foobar, :foo => "omg", :bar => "hi2u", :fiz => "what", :biz => "bat").should =~ %r[\?(fiz=what&biz=bat|biz=bat&fiz=what)$] # "/omg/hi2u?fiz=what&biz=bat"
-    end
-    
-    it "should not append nil parameters to the query string" do
-      url(:foobar, :foo => "omg", :bar => "hi2u", :fiz => nil).should == "/omg/hi2u"
-    end
-
-    it "should raise an error if the first variable is missing" do
-      lambda { url(:foobar, :bar => "hi2u") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should raise an error if the second variable is missing" do
-      lambda { url(:foobar, :foo => "omg") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should raise an error no variables are passed" do
-      lambda { url(:foobar) }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-  describe "a named route that has :controller and :action in the path and no conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:controller/:action").name(:default)
-      end
-    end
-
-    it "should generate from any controller and action" do
-      url(:default, :controller => "ilove", :action => "lamb").should == "/ilove/lamb"
-    end
-
-    it "should append any extra parameters to the query string" do
-      url(:default, :controller => "di", :action => "fm", :quality => "rocks").should == "/di/fm?quality=rocks"
-    end
-
-    it "should require the controller" do
-      lambda { url(:default, :action => "fm") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should require the controller even if extra parameters are passed" do
-      lambda { url(:default, :action => "fm", :random => "station") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should require the action" do
-      lambda { url(:default, :controller => "di") }.should raise_error(Merb::Router::GenerationError)
-    end
-
-    it "should require the action even if extra parameters are passed" do
-      lambda { url(:default, :controller => "di", :random => "station") }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/generation/using_request_params_spec.rb b/spec10/public/router/generation/using_request_params_spec.rb
deleted file mode 100644
index 1a4afb1..0000000
--- a/spec10/public/router/generation/using_request_params_spec.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When generating URLs when there are request params available," do
-  
-  describe "a simple route" do
-    
-    before(:each) do
-      @request_params = { :project => "awesomo" }
-    end
-    
-    it "should always try to pull required params from the request if they are missing" do
-      Merb::Router.prepare do
-        match("/:project/:article").name(:article)
-      end
-      
-      url(:article, :article => "why-carl-is-awesome").should == "/awesomo/why-carl-is-awesome"
-    end
-    
-    it "should not require any params when all the required params are available in the request" do
-      Merb::Router.prepare do
-        match("/:project").name(:account)
-      end
-      
-      url(:account).should == "/awesomo"
-    end
-    
-    it "should not append the extra request parameters to the query string" do
-      @request_params.merge! :never => "see"
-      
-      Merb::Router.prepare do
-        match("/hello").name(:simple)
-      end
-      
-      url(:simple).should == "/hello"
-    end
-    
-    it "should not generate optional segments even if all the params are availabe in the request if no element is provided" do
-      @request_params.merge! :one => "uno", :two => "dos", :three => "tres"
-      
-      Merb::Router.prepare do
-        match("/hello(/:one/:two/:three)").name(:sequential)
-        match("/hello(/:one(/:two(/:three)))").name(:nested)
-      end
-      
-      url(:sequential).should == "/hello"
-      url(:nested).should     == "/hello"
-    end
-    
-    it "should generate the optional segments if an element from it is specified" do
-      @request_params.merge! :one => "uno", :two => "dos", :three => "tres"
-      
-      Merb::Router.prepare do
-        match("/hello(/:one/:two/:three)").name(:sequential)
-        match("/hello(/:one(/:two(/:three)))").name(:nested)
-      end
-      
-      url(:sequential, :one   => "hi").should == "/hello/hi/dos/tres"
-      url(:sequential, :two   => "hi").should == "/hello/uno/hi/tres"
-      url(:sequential, :three => "hi").should == "/hello/uno/dos/hi"
-      url(:nested,     :one   => "hi").should == "/hello/hi"
-      url(:nested,     :two   => "hi").should == "/hello/uno/hi"
-      url(:nested,     :three => "hi").should == "/hello/uno/dos/hi"
-    end
-    
-  end
-  
-  describe "a route with segment conditions" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:one(/:two/:three(/:four))", :one => /^\d+$/, :two => /^\d+$/, :three => /^\d+$/, :four => /^\d+$/).name(:numbers)
-      end
-    end
-    
-    it "should use the request params if using it will satisfy all the routes' conditions" do
-      @request_params = { :one => '1', :two => '2' }
-      url(:numbers, :three => '3').should == "/1/2/3"
-    end
-    
-    it "should never generate paths that don't match the conditions and append passed params that didn't match to the query string" do
-      @request_params = { :one => '1', :two => 'two' }
-      url(:numbers, :three => '3').should == '/1?three=3'
-      
-      @request_params = { :one => "1", :two => "2", :three => "3" }
-      url(:numbers, :four => "fouryo").should == "/1/2/3?four=fouryo"
-    end
-    
-  end
-  
-  describe "a default route generated when there are request params available" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        default_routes
-      end
-      
-      @request_params = { :controller => "articles", :action => "show", :id => "10" }
-    end
-    
-    [ :including, :excluding ].each do |option|
-      
-      describe "#{option} a :format param" do
-        
-        before(:each) do
-          @request_params.merge! :format => :xml if option == :including
-        end
-        
-        it "should generate the route just the same when all params are supplied" do
-          url(:controller => "articles", :action => "edit", :id => "8").should == "/articles/edit/8"
-          url(:controller => "articles", :action => "index").should            == "/articles/index"
-          url(:controller => "users").should                                   == "/users"
-          url(:controller => "users", :action => "show").should                == "/users/show"
-          url(:controller => "users", :action => "show", :id => 1).should      == "/users/show/1"
-        end
-
-        it "should use the :controller request parameter when :action is provided" do
-          url(:action => "show").should              == "/articles/show"
-          url(:action => "show", :id => "15").should == "/articles/show/15"
-        end
-
-        it "should use the :action parameter when :id is present" do
-          url(:id => "8").should == "/articles/show/8"
-        end
-      end
-      
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/conditions_spec.rb b/spec10/public/router/recognition/conditions_spec.rb
deleted file mode 100644
index 5d04356..0000000
--- a/spec10/public/router/recognition/conditions_spec.rb
+++ /dev/null
@@ -1,395 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a route with a String path condition" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/info").to(:controller => "info", :action => "foo")
-      end
-    end
-    
-    it "should match the path and return the parameters passed to #to" do
-      route_for("/info").should have_route(:controller => "info", :action => "foo", :id => nil)
-    end
-    
-    it "should not match a different path" do
-      lambda { route_for("/notinfo") }.should raise_not_found
-    end
-    
-    it "should ignore trailing slashes" do
-      Merb::Router.prepare do
-        match("/hello/").to(:controller => "world")
-      end
-      
-      route_for("/hello").should have_route(:controller => "world")
-    end
-    
-    it "should ignore repeated slashes" do
-      Merb::Router.prepare do
-        match("/foo///bar").to(:controller => "fubar")
-        match("/hello//world").to(:controller => "greetings")
-      end
-      
-      route_for("/foo/bar").should have_route(:controller => "fubar")
-      route_for("/hello/world").should have_route(:controller => "greetings")
-    end
-  end
-  
-  describe "a route with a Request method condition" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match(:method => :post).to(:controller => "all", :action => "posting")
-      end
-    end
-    
-    it "should match any path with a post method" do
-      route_for("/foo/create/12", :method => "post").should have_route(:controller => "all", :action => "posting")
-      route_for("", :method => "post").should have_route(:controller => "all", :action => "posting")
-    end
-    
-    it "should not match any paths that don't have a post method" do
-      lambda { route_for("/foo/create/12", :method => "get") }.should raise_not_found
-      lambda { route_for("", :method => "get") }.should raise_not_found
-    end
-    
-    it "should combine Array elements using OR" do
-      Merb::Router.prepare do
-        match(:method => [:get, :post]).to(:controller => "hello")
-      end
-      
-      route_for('/anything', :method => "get").should        have_route(:controller => "hello")
-      route_for('/anything', :method => "post").should       have_route(:controller => "hello")
-      lambda { route_for('/anything', :method => "put")    }.should raise_not_found
-      lambda { route_for('/anything', :method => "delete") }.should raise_not_found
-    end
-    
-    it "should be able to handle Regexps inside of condition arrays" do
-      Merb::Router.prepare do
-        match(:method => [/^g[aeiou]?t$/, :post]).to(:controller => "hello")
-      end
-      
-      route_for('/anything', :method => "get").should        have_route(:controller => "hello")
-      route_for('/anything', :method => "post").should       have_route(:controller => "hello")
-      lambda { route_for('/anything', :method => "put")    }.should raise_not_found
-      lambda { route_for('/anything', :method => "delete") }.should raise_not_found
-    end
-    
-    it "should ignore nil values" do
-      Merb::Router.prepare do
-        match("/hello", :method => nil).to(:controller => "all")
-      end
-      
-      [:get, :post, :puts, :delete].each do |method|
-        route_for("/hello", :method => method).should have_route(:controller => "all")
-      end
-    end
-  end
-  
-  describe "a route with Request method condition and a path condition" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        match("/foo", :protocol => "http").to(:controller => "plain", :action => "text")
-      end
-    end
-    
-    it "should match the route if the path and the protocol match" do
-      route_for("/foo", :protocol => "http").should have_route(:controller => "plain", :action => "text")
-    end
-    
-    it "should not match if the route does not match" do
-      lambda { route_for("/bar", :protocol => "http") }.should raise_not_found
-    end
-    
-    it "should not match if the protocol does not match" do
-      lambda { route_for("/foo", :protocol => "https") }.should raise_not_found
-    end
-    
-    it "should combine Array elements using OR" do
-      Merb::Router.prepare do
-        match("/hello", :method => [:get, :post]).to(:controller => "hello")
-      end
-      
-      route_for("/hello", :method => "get").should          have_route(:controller => "hello")
-      route_for("/hello", :method => "post").should         have_route(:controller => "hello")
-      lambda { route_for("/hello",   :method => "put")    }.should raise_not_found
-      lambda { route_for("/hello",   :method => "delete") }.should raise_not_found
-      lambda { route_for("/goodbye", :method => "get")    }.should raise_not_found
-      lambda { route_for("/goodbye", :method => "post")   }.should raise_not_found
-      lambda { route_for("/goodbye", :method => "put")    }.should raise_not_found
-      lambda { route_for("/goodbye", :method => "delete") }.should raise_not_found
-    end
-  end
-  
-  describe "a route containing path variable conditions" do
-    
-    it "should match only if the condition is satisfied" do
-      Merb::Router.prepare do
-        match("/foo/:bar", :bar => /\d+/).register
-      end
-      
-      route_for("/foo/123").should have_route(:bar => "123")
-      lambda { route_for("/foo/abc") }.should raise_not_found
-    end
-    
-    it "should be able to handle conditions with anchors" do
-      Merb::Router.prepare do
-        match("/foo/:bar") do
-          match(:bar => /^\d+$/).to(:controller => "both")
-          match(:bar => /^\d+/ ).to(:controller => "start")
-          match(:bar => /\d+$/ ).to(:controller => "end")
-          match(:bar => /\d+/  ).to(:controller => "none")
-        end
-      end
-      
-      route_for("/foo/123456").should have_route(:controller => "both",  :bar => "123456")
-      route_for("/foo/123abc").should have_route(:controller => "start", :bar => "123abc")
-      route_for("/foo/abc123").should have_route(:controller => "end",   :bar => "abc123")
-      route_for("/foo/ab123c").should have_route(:controller => "none",  :bar => "ab123c")
-      lambda { route_for("/foo/abcdef") }.should raise_not_found
-    end
-    
-    it "should match only if all conditions are satisied" do
-      Merb::Router.prepare do
-        match("/:foo/:bar", :foo => /abc/, :bar => /123/).register
-      end
-      
-      route_for("/abc/123").should   have_route(:foo => "abc",  :bar => "123")
-      route_for("/abcd/123").should  have_route(:foo => "abcd", :bar => "123")
-      route_for("/abc/1234").should  have_route(:foo => "abc",  :bar => "1234")
-      route_for("/abcd/1234").should have_route(:foo => "abcd", :bar => "1234")
-      lambda { route_for("/ab/123") }.should raise_not_found
-      lambda { route_for("/abc/12") }.should raise_not_found
-      lambda { route_for("/ab/12") }.should raise_not_found
-    end
-    
-    it "should allow creating conditions that span default segment dividers" do
-      Merb::Router.prepare do
-        match("/:controller", :controller => %r[^[a-z]+/[a-z]+$]).register
-      end
-      
-      lambda { route_for("/somewhere") }.should raise_not_found
-      route_for("/somewhere/somehow").should have_route(:controller => "somewhere/somehow")
-    end
-    
-    it "should allow creating conditions that match everything" do
-      Merb::Router.prepare do
-        match("/:glob", :glob => /.*/).register
-      end
-      
-      %w(somewhere somewhere/somehow 123/456/789 i;just/dont-understand).each do |path|
-        route_for("/#{path}").should have_route(:glob => path)
-      end
-    end
-    
-    it "should allow greedy matches to preceed segments" do
-      Merb::Router.prepare do
-        match("/foo/:bar/something/:else", :bar => /.*/).register
-      end
-      
-      %w(somewhere somewhere/somehow 123/456/789 i;just/dont-understand).each do |path|
-        route_for("/foo/#{path}/something/wonderful").should have_route(:bar => path, :else => "wonderful")
-      end
-    end
-    
-    it "should allow creating conditions that proceed a glob" do
-      Merb::Router.prepare do
-        match("/:foo/bar/:glob", :glob => /.*/).register
-      end
-      
-      %w(somewhere somewhere/somehow 123/456/789 i;just/dont-understand).each do |path|
-        route_for("/superblog/bar/#{path}").should have_route(:foo => "superblog", :glob => path)
-        lambda { route_for("/notablog/foo/#{path}") }.should raise_not_found
-      end
-    end
-    
-    it "should match only if all mixed conditions are satisied" do
-      Merb::Router.prepare do
-        match("/:blog/post/:id", :blog => %r{^[a-zA-Z]+$}, :id => %r{^[0-9]+$}).register
-      end
-      
-      route_for("/superblog/post/123").should  have_route(:blog => "superblog",  :id => "123")
-      route_for("/superblawg/post/321").should have_route(:blog => "superblawg", :id => "321")
-      lambda { route_for("/superblog/post/asdf") }.should raise_not_found
-      lambda { route_for("/superblog1/post/123") }.should raise_not_found
-      lambda { route_for("/ab/12") }.should raise_not_found
-    end
-    
-    it "should raise an error when :path is used as a variable in the path" do
-      bad_path = lambda do
-        Merb::Router.prepare do
-          match("/:path").register
-        end
-      end
-      
-      bad_path.should raise_error(Merb::Router::Behavior::Error)
-    end
-  end
-  
-  describe "a route built with nested conditions" do
-    
-    it "should support block matchers as a path namespace" do
-      Merb::Router.prepare do
-        match("/foo") do
-          match("/bar").to(:controller => "one/two", :action => "baz")
-        end
-      end
-      
-      route_for("/foo/bar").should have_route(:controller => "one/two", :action => "baz")
-    end
-    
-    it "should yield the builder object" do
-      Merb::Router.prepare do
-        match("/foo") do |path|
-          path.match("/bar").to(:controller => "one/two", :action => "baz")
-        end
-      end
-      
-      route_for("/foo/bar").should have_route(:controller => "one/two", :action => "baz")
-    end
-    
-    it "should be able to nest named segment variables" do
-      Merb::Router.prepare do
-        match("/:first") do
-          match("/:second").register
-        end
-      end
-      
-      route_for("/one/two").should have_route(:first => "one", :second => "two")
-      lambda { route_for("/one") }.should raise_not_found
-    end
-    
-    it "should ignore trailing slashes" do
-      Merb::Router.prepare do
-        match("/hello") do
-          match("/").to(:controller => "greetings")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "greetings")
-    end
-    
-    it "should ignore double slashes" do
-      Merb::Router.prepare do
-        match("/hello/") do
-          match("/world").to(:controller => "greetings")
-        end
-      end
-      
-      route_for("/hello/world").should have_route(:controller => "greetings")
-    end
-    
-    it "should be able to define a route and still use the context for more route definition" do
-      Merb::Router.prepare do
-        match("/hello") do
-          to(:controller => "foo", :action => "bar")
-          match("/world").to(:controller => "hello", :action => "world")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "foo", :action => "bar")
-      route_for("/hello/world").should have_route(:controller => "hello", :action => "world")
-    end
-    
-    it "should be able to add blank paths without effecting the actual path" do
-      Merb::Router.prepare do
-        match("/foo") do
-          match("").to(:controller => "one/two", :action => "index")
-        end
-      end
-      
-      route_for("/foo").should have_route(:controller => "one/two", :action => "index")
-    end
-    
-    it "should be able to merge path and request method conditions" do
-      Merb::Router.prepare do
-        match("/:controller") do
-          match(:protocol => "https").to(:action => "bar")
-        end
-      end
-      
-      lambda { route_for("/foo") }.should raise_not_found
-      route_for("/foo", :protocol => "https").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should be able to override previously set Request method conditions" do
-      Merb::Router.prepare do
-        match(:domain => "foo.com") do
-          match("/", :domain => "bar.com").to(:controller => "bar", :action => "com")
-        end
-      end
-      
-      lambda { route_for("/") }.should raise_not_found
-      lambda { route_for("/", :domain => "foo.com") }.should raise_not_found
-      route_for("/", :domain => "bar.com").should have_route(:controller => "bar", :action => "com")
-    end
-    
-    it "should be able to override previously set named segment variable conditions" do
-      Merb::Router.prepare do
-        match("/:account", :account => /^\d+$/) do
-          match(:account => /^[a-z]+$/).register
-        end
-      end
-      
-      route_for("/abc").should have_route(:account => "abc")
-      lambda { route_for("/123") }.should raise_not_found
-    end
-    
-    it "should be able to set conditions on named segment variables that haven't been used yet" do
-      Merb::Router.prepare do
-        match(:account => /^[a-z]+$/) do
-          match("/:account").register
-        end
-      end
-      
-      route_for("/abc").should have_route(:account => "abc")
-      lambda { route_for("/123") }.should raise_not_found
-    end
-    
-    it "should be able to merge path and request method conditions when both kinds are specified in the parent match statement" do
-      Merb::Router.prepare do
-        match("/:controller", :protocol => "https") do
-          match("/greets").to(:action => "bar")
-        end
-      end
-      
-      lambda { route_for("/foo") }.should raise_not_found
-      lambda { route_for("/foo/greets") }.should raise_not_found
-      lambda { route_for("/foo", :protocol => "https") }.should raise_not_found
-      route_for("/foo/greets", :protocol => "https").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "allows wrapping of nested routes all having shared argument with PREDEFINED VALUES" do
-      Merb::Router.prepare do
-        match(%r{/?(en|es|fr|be|nl)?}).to(:language => "[1]") do
-          match("/guides/:action/:id").to(:controller => "tour_guides")
-        end
-      end
-
-      route_for('/nl/guides/search/denboss').should   have_route(:controller => 'tour_guides', :action => "search", :id => "denboss", :language => "nl")
-      route_for('/es/guides/search/barcelona').should have_route(:controller => 'tour_guides', :action => "search", :id => "barcelona", :language => "es")
-      route_for('/fr/guides/search/lille').should     have_route(:controller => 'tour_guides', :action => "search", :id => "lille", :language => "fr")
-      route_for('/en/guides/search/london').should    have_route(:controller => 'tour_guides', :action => "search", :id => "london", :language => "en")
-      route_for('/be/guides/search/brussels').should  have_route(:controller => 'tour_guides', :action => "search", :id => "brussels", :language => "be")
-      route_for('/guides/search/brussels').should     have_route(:controller => 'tour_guides', :action => "search", :id => "brussels")
-    end
-    
-  end
-
-  describe "multiple routes" do
-    # --- Catches a weird bug ---
-    it "should not leak conditions" do
-      Merb::Router.prepare do
-        match("/root") do |r|
-          r.match('/foo').to
-          r.match('/bar').to(:hello => "world")
-        end
-      end
-      
-      route_for("/root/bar").should have_route(:hello => "world")
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/default_routes_spec.rb b/spec10/public/router/recognition/default_routes_spec.rb
deleted file mode 100644
index 462cac0..0000000
--- a/spec10/public/router/recognition/default_routes_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for the default routes" do
-  
-  before :each do
-    Merb::Router.prepare do
-      default_routes
-    end
-  end
-    
-  it "should match /foo to the Foo controller and index action" do
-    route_for("/foo").should have_route(:controller => "foo", :action => "index", :id => nil)
-  end
-  
-  it "should match /foo/bar to the Foo controller and the bar action" do
-    route_for("/foo/bar").should have_route(:controller => "foo", :action => "bar", :id => nil)
-  end
-  
-  it "should match /foo/bar/12 to the Foo controller, the bar action, and id of 12" do
-    route_for("/foo/bar/12").should have_route(:controller => "foo", :action => "bar", :id => "12")
-  end
-  
-  it "should match /foo.xml to the Foo controller, index action, and xml format" do
-    route_for("/foo.xml").should have_route(:controller => "foo", :action => "index", :format => "xml")
-  end
-  
-  it "should match /foo.xml to the Foo controller, bar action, and xml format" do
-    route_for("/foo/bar.xml").should have_route(:controller => "foo", :action => "bar", :format => "xml")
-  end
-  
-  it "should match /foo.xml to the Foo controller, bar action, id 10, and xml format" do
-    route_for("/foo/bar/10.xml").should have_route(:controller => "foo", :action => "bar", :id => "10", :format => "xml")
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/defaults_spec.rb b/spec10/public/router/recognition/defaults_spec.rb
deleted file mode 100644
index 3453f3e..0000000
--- a/spec10/public/router/recognition/defaults_spec.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for the routes with default values for variables" do
-  
-  it "should use the specified default value if the variable is not included in the path" do
-    Merb::Router.prepare do
-      defaults(:controller => "foos", :action => "bars").match("/").register
-    end
-    
-    route_for("/").should have_route(:controller => "foos", :action => "bars")
-  end
-  
-  it "should use the specified default value if the variable is included in the path but wasn't matched" do
-    Merb::Router.prepare do
-      defaults(:action => "index").match("/:controller(/:action)").register
-    end
-    
-    route_for("/foos").should have_route(:controller => "foos", :action => "index")
-  end
-  
-  it "should use the matched value for required variables" do
-    Merb::Router.prepare do
-      defaults(:action => "index").match("/:controller/:action").register
-    end
-    
-    route_for("/foos/bar").should have_route(:controller => "foos", :action => "bar")
-  end
-  
-  it "should use the matched value for optional variables" do
-    Merb::Router.prepare do
-      defaults(:action => "index").match("/:controller(/:action)").register
-    end
-    
-    route_for("/foos/bar").should have_route(:controller => "foos", :action => "bar")
-  end
-  
-  it "should use the params when there are some set" do
-    Merb::Router.prepare do
-      match("/go").defaults(:foo => "bar").to(:foo => "baz")
-    end
-    
-    route_for("/go").should have_route(:foo => "baz")
-  end
-  
-  it "should be used in constructed params when the optional segment wasn't matched" do
-    Merb::Router.prepare do
-      match("/go(/:foo)").defaults(:foo => "bar").to(:foo => "foo/:foo")
-    end
-    
-    route_for("/go").should have_route(:foo => "foo/bar")
-  end
-  
-  it "should combine multiple default params when nesting defaults" do
-    Merb::Router.prepare do
-      defaults(:controller => "home") do
-        defaults(:action => "index").match("/(:controller/:action)").register
-      end
-    end
-    
-    route_for("/").should have_route(:controller => "home", :action => "index")
-  end
-  
-  it "should yield the new builder object to the block" do
-    Merb::Router.prepare do
-      defaults(:controller => "home") do |d|
-        d.defaults(:action => "index").match("/(:controller/:action)").register
-      end
-    end
-    
-    route_for("/").should have_route(:controller => "home", :action => "index")
-  end
-  
-  it "should overwrite previously set default params with the new ones when nesting" do
-    Merb::Router.prepare do
-      defaults(:action => "index") do
-        defaults(:action => "notindex").match("/:account(/:action)").register
-      end
-    end
-    
-    route_for("/awesome").should have_route(:account => "awesome", :action => "notindex")
-  end
-  
-  it "should preserve previously set conditions" do
-    Merb::Router.prepare do
-      match("/blah") do
-        defaults(:foo => "bar").to(:controller => "baz")
-      end
-    end
-    
-    route_for("/blah").should have_route(:controller => "baz", :foo => "bar")
-  end
-  
-  it "should be preserved through condition blocks" do
-    Merb::Router.prepare do
-      defaults(:foo => "bar") do
-        match("/go").register
-      end
-    end
-    
-    route_for("/go").should have_route(:foo => "bar")
-  end
-  
-  it "should preserve previously set params" do
-    Merb::Router.prepare do
-      to(:controller => "bar") do
-        defaults(:action => "baz").match("/go").register
-      end
-    end
-    
-    route_for("/go").should have_route(:controller => "bar", :action => "baz")
-  end
-  
-  it "should be preserved through params blocks" do
-    Merb::Router.prepare do
-      defaults(:foo => "bar") do
-        match("/go").to(:controller => "gos")
-      end
-    end
-    
-    route_for("/go").should have_route(:controller => "gos", :foo => "bar")
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/deferred_spec.rb b/spec10/public/router/recognition/deferred_spec.rb
deleted file mode 100644
index bcd8792..0000000
--- a/spec10/public/router/recognition/deferred_spec.rb
+++ /dev/null
@@ -1,209 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for deferred routes" do
-
-  describe "that route the request to a controller" do
-    before :each do
-      Merb::Router.prepare do      
-        match("/deferred/:zoo").defer_to do |request, params|
-          params.merge(:controller => "w00t") if params[:zoo]
-        end
-      end    
-    end
-
-    it "should match routes based on the incoming params" do
-      route_for("/deferred/baz", :boo => "12").should have_route(:controller => "w00t", :zoo => "baz")
-    end
-
-    it "should not use the route if it does not match the defered block" do
-      lambda { route_for("/deferred") }.should raise_not_found
-    end
-
-    it "should return the param hash returned by the block" do
-      Merb::Router.prepare do
-        match("/deferred").defer_to do |request, params|
-          { :hello => "world" }
-        end
-      end
-
-      route_for("/deferred").should have_route(:hello => "world")
-    end
-
-    it "should accept params" do
-      Merb::Router.prepare do
-        match("/").defer_to(:controller => "accounts") do |request, params|
-          params.update(:action => "hello")
-        end
-      end
-
-      route_for("/").should have_route(:controller => "accounts", :action => "hello")
-    end
-
-    it "should be able to define routes after the deferred route" do
-      Merb::Router.prepare do
-        match("/deferred").defer_to do
-          { :hello => "world" }
-        end
-
-        match("/").to(:foo => "bar")
-      end
-
-      route_for("/deferred").should have_route(:hello => "world")
-      route_for("/").should         have_route(:foo => "bar")
-    end
-  end
-  
-  describe "that redirect to request to another path" do
-    
-    it "should be able to redirect from inside the deferred block" do
-      Merb::Router.prepare do
-        match("/").defer_to do
-          redirect "/hello"
-        end
-      end
-      
-      route_for("/").should have_rack(:status => 302, :headers => { "Location" => "/hello" })
-    end
-    
-    it "should be able to set the redirect status" do
-      Merb::Router.prepare do
-        match("/").defer_to do
-          redirect "/hello"
-        end
-      end
-      
-      route_for("/").should have_rack(:status => 302, :headers => { "Location" => "/hello" })
-    end
-    
-    it "should be able to use #url in deferred blocks" do
-      Merb::Router.prepare do
-        match("/").defer_to { redirect url(:homepage) }
-        match("/home").to(:controller => "home").name(:homepage)
-      end
-      
-      route_for("/").should have_rack(:headers => { "Location" => "/home" })
-    end
-    
-  end
-  
-end
-
-describe "Recognizing requests for stacked deferred routes" do
-  
-  it "should route the request normally" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| p }
-      second = Proc.new { |req, p| p }
-      third  = Proc.new { |req, p| p }
-      
-      defer(first).defer(second).defer(third) do
-        match("/hello").to(:controller => "greetings")
-      end
-    end
-    
-    route_for("/hello").should have_route(:controller => "greetings")
-  end
-  
-  it "should run all the deferred procs in order" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| req.first_proc!  ; p }
-      second = Proc.new { |req, p| req.second_proc! ; p }
-      third  = Proc.new { |req, p| req.third_proc!  ; p }
-      
-      defer(first).defer(second).defer(third) do
-        match("/hello").to(:controller => "greetings")
-      end
-    end
-    
-    route_for("/hello") do |req|
-      req.should_receive(:first_proc!)
-      req.should_receive(:second_proc!)
-      req.should_receive(:third_proc!)
-    end
-  end
-  
-  it "should abort the deferred stack if one of the procs marks the request as matched" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| req.first_proc!  ; p }
-      second = Proc.new { |req, p| req.second_proc! ; req.matched! ; p }
-      third  = Proc.new { |req, p| req.third_proc!  ; p }
-      
-      defer(first).defer(second).defer(third) do
-        match("/hello").to(:controller => "greetings")
-      end
-    end
-    
-    route_for("/hello") do |req|
-      req.should_receive(:first_proc!)
-      req.should_receive(:second_proc!)
-      req.should_not_receive(:third_proc!)
-    end
-  end
-  
-  it "should abort the deferred stack if one of the procs redirects the request" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| req.first_proc!  ; p }
-      second = Proc.new { |req, p| req.second_proc! ; redirect("/goodbye") }
-      third  = Proc.new { |req, p| req.third_proc!  ; p }
-      
-      defer(first).defer(second).defer(third) do
-        match("/hello").to(:controller => "greetings")
-      end
-    end
-    
-    route_for("/hello") do |req|
-      req.should_receive(:first_proc!)
-      req.should_receive(:second_proc!)
-      req.should_not_receive(:third_proc!)
-    end
-  end
-  
-  it "should match the deferred route if none of the blocks return false / nil" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| p }
-      second = Proc.new { |req, p| p }
-      
-      match("/hello").defer(first).defer(second).to(:controller => "deferred")
-      match("/hello").to(:controller => "not_deferred")
-    end
-    
-    route_for("/hello").should have_route(:controller => "deferred")
-  end
-  
-  it "should not match the deferred route if any of the blocks return false / nil" do
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| nil }
-      second = Proc.new { |req, p| p }
-      
-      match("/hello").defer(first).defer(second).to(:controller => "deferred")
-      match("/hello").to(:controller => "not_deferred")
-    end
-    
-    route_for("/hello").should have_route(:controller => "not_deferred")
-    
-    Merb::Router.prepare do
-      first  = Proc.new { |req, p| p }
-      second = Proc.new { |req, p| nil }
-      
-      match("/hello").defer(first).defer(second).to(:controller => "deferred")
-      match("/hello").to(:controller => "not_deferred")
-    end
-    
-    route_for("/hello").should have_route(:controller => "not_deferred")
-  end
-  
-  it "should be able to use the same deferred block in multiple routes" do
-    Merb::Router.prepare do
-      block = Proc.new { |req, p| req.in_block! ; p }
-
-      defer(block).with(:controller => "deferred") do
-        match("/first").register
-        match("/second").register
-      end
-    end
-    
-    route_for("/first")  { |req| req.should_receive(:in_block!) }
-    route_for("/second") { |req| req.should_receive(:in_block!) }
-  end
-  
-end
diff --git a/spec10/public/router/recognition/fixation_spec.rb b/spec10/public/router/recognition/fixation_spec.rb
deleted file mode 100644
index 73419c9..0000000
--- a/spec10/public/router/recognition/fixation_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a route with fixation configured" do
-    
-    predicate_matchers[:allow_fixation] = :allow_fixation?
-
-    it "should be able to allow fixation" do
-      Merb::Router.prepare do
-        match("/hello/:action/:id").to(:controller => "foo", :action => "fixoid").fixatable
-      end
-
-      matched_route_for("/hello/goodbye/tagging").should allow_fixation
-    end
-
-    it "should be able to disallow fixation" do
-      Merb::Router.prepare do
-        match("/hello/:action/:id").to(:controller => "foo", :action => "fixoid")
-      end
-
-      matched_route_for("/hello/goodbye/tagging").should_not allow_fixation
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/identify_spec.rb b/spec10/public/router/recognition/identify_spec.rb
deleted file mode 100644
index 96e917e..0000000
--- a/spec10/public/router/recognition/identify_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  it "should retain previously set params" do
-    Merb::Router.prepare do
-      with(:controller => "hellos") do
-        identify :id do
-          match("/:world").register
-        end
-      end
-    end
-    
-    route_for("/worlds").should have_route(:controller => "hellos", :world => "worlds")
-  end
-  
-  it "should retain previously set options" do
-    Merb::Router.prepare do
-     options(:controller_prefix => "hello") do
-        identify :id do
-          match("/").to(:controller => "world")
-        end
-      end
-    end
-    
-    route_for("/").should have_route(:controller => "hello/world")
-  end
-  
-  it "should retain previously set namespaces" do
-    Merb::Router.prepare do
-      namespace :admin do
-        identify :id do
-          match("/hello").to(:controller => "world")
-        end
-      end
-    end
-    
-    route_for("/admin/hello").should have_route(:controller => "admin/world")
-  end
-  
-  it "should retain previously set defaults" do
-    Merb::Router.prepare do
-      defaults(:foo => "bar") do
-        identify :id do
-          match("/(:foo)").to(:controller => "hello")
-        end
-      end
-    end
-    
-    route_for("/").should have_route(:controller => "hello", :foo => "bar")
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/namespace_spec.rb b/spec10/public/router/recognition/namespace_spec.rb
deleted file mode 100644
index 517c03f..0000000
--- a/spec10/public/router/recognition/namespace_spec.rb
+++ /dev/null
@@ -1,353 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-
-  describe "a namespaced route" do
-    
-    it "should add to the path and prepend the controller with the namespace" do
-      Merb::Router.prepare do
-        namespace :admin do
-          match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      lambda { route_for("/foo") }.should raise_not_found
-      route_for("/admin/foo").should have_route(:controller => "admin/foos")
-    end
-    
-    it "should yield the new behavior object to the block" do
-      Merb::Router.prepare do
-        namespace :admin do |a|
-          a.match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      route_for("/admin/foo").should have_route(:controller => "admin/foos")
-    end
-    
-    it "should be able to prepend the namespace even if the :controller param has been specified already" do
-      Merb::Router.prepare do
-        to(:controller => "bars") do
-          namespace(:admin) do
-            match("/foo").register
-          end
-        end
-      end
-      
-      route_for("/admin/foo").should have_route(:controller => "admin/bars")
-    end
-    
-    it "should be able to prepend the namespace even if :controller has been used in the path already" do
-      Merb::Router.prepare do
-        match("/:controller") do
-          namespace(:marketing).register
-        end
-      end
-      
-      route_for("/something/marketing").should have_route(:controller => "marketing/something")
-    end
-    
-    it "should be able to specify the path prefix" do
-      Merb::Router.prepare do
-        namespace :admin, :path => "administration" do
-          match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      lambda { route_for("/admin/foo") }.should raise_not_found
-      route_for("/administration/foo").should have_route(:controller => "admin/foos")
-    end
-    
-    it "should be able to escape the controller namespace" do
-      Merb::Router.prepare do
-        namespace :admin do
-          match("/login").to(:controller => "/sessions")
-        end
-      end
-      
-      route_for("/admin/login").should have_route(:controller => "sessions")
-    end
-    
-    it "should be able to set a namespace without a path prefix" do
-      Merb::Router.prepare do
-        namespace :admin, :path => "" do
-          match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      lambda { route_for("/admin/foo") }.should raise_not_found
-      route_for("/foo").should       have_route(:controller => "admin/foos")
-    end
-    
-    it "should be able to use nil to set a namespace without a path prefix" do
-      Merb::Router.prepare do
-        namespace :admin, :path => nil do
-          match("/foo").to(:controller => "foos")
-        end
-      end
-      
-      lambda { route_for("/admin/foo") }.should raise_not_found
-      route_for("/foo").should       have_route(:controller => "admin/foos")
-    end
-    
-    it "should preserve previous conditions" do
-      Merb::Router.prepare do
-        match :domain => "foo.com" do
-          namespace :admin do
-            match("/foo").to(:controller => "foos")
-          end
-        end
-      end
-      
-      lambda { route_for("/admin/foo") }.should raise_not_found
-      route_for("/admin/foo", :domain => "foo.com").should have_route(:controller => "admin/foos")
-    end
-    
-    it "should preserve previous params" do
-      Merb::Router.prepare do
-        to(:awesome => "true") do
-          namespace :administration do
-            match("/something").to(:controller => "home")
-          end
-        end
-      end
-      
-      route_for("/administration/something").should have_route(:controller => "administration/home", :awesome => "true")
-    end
-    
-    it "should preserve previous defaults" do
-      Merb::Router.prepare do
-        defaults(:action => "awesome", :foo => "bar") do
-          namespace :baz do
-            match("/users").to(:controller => "users")
-          end
-        end
-      end
-      
-      route_for("/baz/users").should have_route(:controller => "baz/users", :action => "awesome", :foo => "bar")
-    end
-    
-    it "should be preserved through match blocks" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          match(:host => "admin.domain.com").to(:controller => "welcome")
-        end
-      end
-      
-      route_for("/admin", :host => "admin.domain.com").should have_route(:controller => "admin/welcome")
-    end
-    
-    it "should be preserved through to blocks" do
-      Merb::Router.prepare do
-        namespace(:blah) do
-          to(:action => "overload") do
-            match("/blah").to(:controller => "weeeee")
-          end
-        end
-      end
-      
-      route_for("/blah/blah").should have_route(:controller => "blah/weeeee", :action => "overload")
-    end
-    
-    it "should be preserved through defaults blocks" do
-      Merb::Router.prepare do
-        namespace(:blah) do
-          defaults(:action => "overload") do
-            match("/blah").to(:controller => "weeeee")
-          end
-        end
-      end
-      
-      route_for("/blah/blah").should have_route(:controller => "blah/weeeee", :action => "overload")
-    end
-  end
-  
-  describe "a nested namespaced route" do
-    it "should append the paths and controller namespaces together" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          namespace(:bar) do
-            match("/blah").to(:controller => "weeeee")
-          end
-        end
-      end
-      
-      route_for('/foo/bar/blah').should have_route(:controller => 'foo/bar/weeeee', :action => 'index')
-    end
-    
-    it "should respec the custom path prefixes set on each namespace" do
-      Merb::Router.prepare do
-        namespace(:foo, :path => "superfoo") do
-          namespace(:bar, :path => "superbar") do
-            match("/blah").to(:controller => "weeeee")
-          end
-        end
-      end
-      
-      route_for('/superfoo/superbar/blah').should have_route(:controller => 'foo/bar/weeeee', :action => 'index')
-    end
-    
-    it "should preserve previous conditions" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          match(:protocol => 'https') do
-            namespace(:bar) do
-              match("/blah").to(:controller => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/bar/blah', :protocol => 'https').should have_route(:controller => 'foo/bar/weeeee', :action => 'index')
-    end
-    
-    it "should preserve previous params" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          match('/:first') do
-            namespace(:bar) do
-              match("/blah").to(:controller => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/one/bar/blah').should have_route(:controller => 'foo/bar/weeeee', :first => 'one', :action => 'index')
-    end
-    
-    it "should preserve previous defaults" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          defaults(:action => "megaweee") do
-            namespace(:bar) do
-              match("/blah").to(:controller => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/bar/blah').should have_route(:controller => 'foo/bar/weeeee', :action => 'megaweee')
-    end
-      
-    it "should be preserved through match blocks" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          match('/bar') do
-            namespace(:baz) do
-              match("/blah").to(:controller => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/bar/baz/blah').should have_route(:controller => 'foo/baz/weeeee')
-    end
-    
-    it "should be preserved through to blocks" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          match('/bar').to(:controller => 'bar') do
-            namespace(:baz) do
-              match("/blah").to(:action => "weeeee")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/bar/baz/blah').should have_route(:controller => 'foo/baz/bar', :action => "weeeee")
-    end
-    
-    it "should be preserved through defaults blocks" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          defaults(:action => "default_action") do
-            namespace(:baz) do
-              match("/blah").to(:controller => "blah")
-            end
-          end
-        end
-      end
-      
-      route_for('/foo/baz/blah').should have_route(:controller => 'foo/baz/blah', :action => "default_action")
-    end
-    
-    it "should use the controller prefix from the last time the prefix started with /" do
-      Merb::Router.prepare do
-        namespace(:foo) do
-          namespace(:bar, :controller_prefix => "/bar") do
-            match("/home").to(:controller => "home")
-          end
-        end
-      end
-      
-      route_for("/foo/bar/home").should have_route(:controller => "bar/home")
-    end
-  end
-
-  # I'm not sure if a) these are in the right spec file and b) if they are needed at all
-  describe "a namespaced resource" do
-    
-    it "should match a get to /admin/foo/blogposts to the blogposts controller and index action" do
-      Merb::Router.prepare do
-        namespace :admin do
-          resource :foo do
-            resources :blogposts
-          end
-        end
-      end
-      
-      route_for('/admin/foo/blogposts', :method => :get).should have_route(:controller => 'admin/blogposts', :action => 'index', :id => nil)
-    end
-
-    it "should match a get to /admin/blogposts/1/foo to the foo controller and the show action" do
-      Merb::Router.prepare do
-        namespace :admin do
-          resources :blogposts do
-            resource :foo
-          end
-        end
-      end
-      
-      route_for('/admin/blogposts/1/foo', :method => :get).should have_route(:controller => 'admin/foos', :action => 'show', :blogpost_id => '1', :id => nil)
-    end
-  
-    it "should match a get to /my_admin/blogposts to the blogposts controller with a custom patch setting" do
-      Merb::Router.prepare do
-        namespace(:admin, :path => "my_admin") do
-          resources :blogposts
-        end
-      end
-      
-      route_for('/my_admin/blogposts', :method => :get).should have_route(:controller => 'admin/blogposts', :action => 'index', :id => nil)
-    end
-
-    it "should match a get to /admin/blogposts/1/foo to the foo controller and the show action with namespace admin" do
-      Merb::Router.prepare do
-        namespace(:admin, :path => "") do
-          resources :blogposts do
-            resource :foo
-          end
-        end
-      end
-      
-      route_for('/blogposts/1/foo', :method => :get).should have_route(:controller => 'admin/foos', :action => 'show', :blogpost_id => '1', :id => nil)
-    end
-  end
-
-  # This doesn't work anymore
-  # ---
-  # describe "a nested namespaced resource" do
-  #   it "should match a get to /admin/superadmin/blogposts to the blogposts controller and index action and a nested namespace" do
-  #     pending "Awww crap, this is the single spec that instance_eval fails on"
-  #     Merb::Router.prepare do
-  #       namespace :admin do |admin|
-  #         r.namespace :superadmin do |superadmin|
-  #           admin.resources :blogposts
-  #         end
-  #       end
-  #     end
-  #     
-  #     route_for('/admin/blogposts', :method => :get).should have_route(:controller => 'admin/blogposts', :action => 'index', :id => nil)
-  #   end
-  # end
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/nested_resources_spec.rb b/spec10/public/router/recognition/nested_resources_spec.rb
deleted file mode 100644
index 01853a5..0000000
--- a/spec10/public/router/recognition/nested_resources_spec.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for nested resources routes" do
-  
-  before(:each) do
-    Merb::Router.prepare do
-      
-      resources :users do
-        
-        resources :comments, :collection => { :one => :get }, :member => { :two => :get } do
-          collection :three, :to => "awesome"
-          member     :four,  :to => "awesome"
-          
-          resources :replies, :collection => { :one => :get }, :member => { :two => :get } do
-            collection :three, :to => "awesome"
-            member     :four,  :to => "awesome"
-          end
-        end
-        
-        resource :profile, :member => { :one => :get } do
-          member :two, :to => "awesome"
-        end
-      end
-      
-      resource :account do
-        resources :images, :collection => { :one => :get }, :member => { :two => :get } do
-          collection :three, :to => "awesome"
-          member     :four,  :to => "awesome"
-        end
-        
-        resource  :preference, :member => { :one => :get } do
-          member :two, :to => "awesome"
-        end
-      end
-      
-      resources :domains, :keys => :domain do
-        resources :emails, :keys => :username
-      end
-    end
-  end
-  
-  it_should_be_a_resource_collection_route :comments, "/users/9", :user_id => "9"
-  
-  it_should_be_a_resource_collection_route :replies,  "/users/9/comments/5", :user_id => "9", :comment_id => "5"
-  
-  it_should_be_a_resource_object_route :profile, "/users/8", :user_id => "8"
-  
-  it_should_be_a_resource_collection_route :images, "/account"
-  
-  it_should_be_a_resource_object_route :preference, "/account"
-  
-  it "should match a get to /domains/merbivore_com/emails to the emails controller and index action with domain => 'merbivore_com" do
-    route_for('/domains/merbivore_com/emails', :method => :get).should have_route(:controller => 'emails', :action => 'index', :username => nil, :domain => 'merbivore_com')
-  end
-  
-end
-
-describe "Recognizing requests for nested resources routes with custom matchers" do
-  
-  it "should convert the :id condition to :user_id" do
-    Merb::Router.prepare do
-      resources :users, :id => /[a-z]+/ do
-        resources :comments
-      end
-    end
-    
-    route_for("/users/abc/comments/1").should have_route(:user_id => "abc")
-    lambda { route_for('/users/123/comments/1') }.should raise_not_found
-  end
-  
-  it "should leave single keys not named :id alone" do
-    Merb::Router.prepare do
-      resources :users, :key => :name, :name => /[a-z]+/ do
-        resources :comments
-      end
-    end
-    
-    route_for("/users/abc/comments/1").should have_route(:name => "abc")
-    lambda { route_for('/users/123/comments/1') }.should raise_not_found
-  end
-  
-  it "should work with multi-key resources that have an :id as part of the identifier" do
-    Merb::Router.prepare do
-      resources :users, :key => [:name, :id], :id => /[a-z]+/ do
-        resources :comments
-      end
-    end
-    
-    route_for("/users/abc/efg/comments/1").should have_route(:name => "abc", :user_id => "efg")
-    lambda { route_for('/users/abc/123/comments/1') }.should raise_not_found
-  end
-  
-  it "should work with mult-key resources" do
-    Merb::Router.prepare do
-      resources :users, :key => [:first, :last], :first => /[a-z]+/, :last => /[a-z]+\/[a-z]+/ do
-        resources :comments
-      end
-    end
-    
-    route_for("/users/abc/efg/hij/comments/1").should have_route(:first => "abc", :last => "efg/hij")
-    lambda { route_for('/users/abc/123/comments/1') }.should raise_not_found
-    lambda { route_for('/users/abc/efg/comments/1') }.should raise_not_found
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/optional_segments_spec.rb b/spec10/public/router/recognition/optional_segments_spec.rb
deleted file mode 100644
index 78d573a..0000000
--- a/spec10/public/router/recognition/optional_segments_spec.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "Recognizing requests for the routes with" do
-  
-  describe "a route with optional segments", :shared => true do
-    
-    it "should match when the required segment matches" do
-      route_for("/hello").should have_route(:first => 'hello', :second => nil, :third => nil)
-    end
-    
-    it "should match when the required and optional segment(s) match" do
-      route_for("/hello/world/sweet").should have_route(:first => "hello", :second => "world", :third => "sweet")
-    end
-    
-  end
-  
-  describe "a single optional segment" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:first(/:second/:third)").register
-      end
-    end
-    
-    it_should_behave_like "a route with optional segments"
-    
-    it "should not match the route if the optional segment is only partially present" do
-      lambda { route_for("/hello/world") }.should raise_not_found
-    end
-    
-    it "should not match the optional segment if the optional segment is present but doesn't match a named segment condition" do
-      Merb::Router.prepare do
-        match("/:first(/:second)", :second => /^\d+$/).register
-      end
-      
-      lambda { route_for("/hello/world") }.should raise_not_found
-    end
-    
-    it "should not match if the optional segment is present but not the required segment" do
-      Merb::Router.prepare do
-        match("/:first(/:second)", :first => /^[a-z]+$/, :second => /^\d+$/).register
-      end
-      
-      lambda { route_for("/123") }.should raise_not_found
-    end
-  end
-  
-  describe "multiple optional segments" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:first(/:second)(/:third)").register
-      end
-    end
-    
-    it_should_behave_like "a route with optional segments"
-    
-    it "should match when one optional segment matches" do
-      route_for("/hello/sweet").should have_route(:first => "hello", :second => "sweet")
-    end
-    
-    it "should be able to distinguish the optional segments when there are conditions on them" do
-      Merb::Router.prepare do
-        match("/:first(/:second)(/:third)", :second => /^\d+$/).register
-      end
-      
-      route_for("/hello/world").should have_route(:first => "hello", :second => nil, :third => "world")
-      route_for("/hello/123").should have_route(:first => "hello", :second => "123", :third => nil)
-    end
-    
-    it "should not match any of the optional segments if the segments can't be matched" do
-      Merb::Router.prepare do
-        match("(/:first/abc)(/:bar)").register
-      end
-      
-      lambda { route_for("/abc/hello") }.should raise_not_found
-      lambda { route_for("/hello/world/abc") }.should raise_not_found
-    end
-  end
-  
-  describe "nested optional segments" do
-    before(:each) do
-      Merb::Router.prepare do
-        match("/:first(/:second(/:third))").register
-      end
-    end
-    
-    it_should_behave_like "a route with optional segments"
-    
-    it "should match when the first optional segment matches" do
-      route_for("/hello/world").should have_route(:first => "hello", :second => "world")
-    end
-    
-    it "should not match the nested optional group unless the containing optional group matches" do
-      Merb::Router.prepare do
-        match("/:first(/:second(/:third))", :second => /^\d+$/).to
-      end
-      
-      lambda { route_for("/hello/world") }.should raise_not_found
-    end
-  end
-  
-  describe "nested match blocks with optional segments" do
-    it "should allow wrapping of nested routes all having a shared optional segment" do
-      Merb::Router.prepare do
-        match("(/:language)") do
-          match("/guides/:action/:id").to(:controller => "tour_guides")
-        end
-      end
-
-      route_for('/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :id => "london")
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/params_spec.rb b/spec10/public/router/recognition/params_spec.rb
deleted file mode 100644
index 439bc0f..0000000
--- a/spec10/public/router/recognition/params_spec.rb
+++ /dev/null
@@ -1,228 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a route a simple param builder" do
-    
-    it "should provide the params specified in 'to' statements" do
-      Merb::Router.prepare do
-        match('/hello').to(:foo => "bar")
-      end
-
-      route_for("/hello").should have_route(:foo => "bar")
-    end
-    
-    it "should be able to handle Numeric params" do
-      Merb::Router.prepare do
-        match("/hello").to(:integer => 10, :float => 5.5)
-      end
-      
-      route_for("/hello").should have_route(:integer => 10, :float => 5.5)
-    end
-    
-    it "should be able to handle Boolean params" do
-      Merb::Router.prepare do
-        match("/hello").to(:true => true, :false => false)
-      end
-    end
-
-    it "should only contain an :action key if no params are defined" do
-      # This because all routes have :action => "index" as a default
-      Merb::Router.prepare do
-        match('/hello').register
-      end
-
-      route_for('/hello').should have_exact_route(:action => "index")
-    end
-
-    it "should be able to extract named segments as params" do
-      Merb::Router.prepare do
-        match('/:foo').register
-      end
-
-      route_for('/bar').should have_route(:foo => "bar")
-    end
-
-    it "should be able to extract multiple named segments as params" do
-      Merb::Router.prepare do
-        match("/:foo/:faz").register
-      end
-
-      route_for("/bar/baz").should have_route(:foo => "bar", :faz => "baz")
-    end
-
-    it "should not extract a named segment if it did not match the condition assigned to it" do
-      Merb::Router.prepare do
-        match("/:foo", :foo => /^[a-z]$/).register
-      end
-
-      lambda { route_for("/123") }.should raise_not_found
-    end
-  end
-  
-  describe "a route a complex param builder" do
-    
-    it "should be able to prepend to the named segment" do
-      Merb::Router.prepare do
-        match('/:foo').to(:foo => 'bar/:foo')
-      end
-      
-      route_for("/hello").should have_route(:foo => 'bar/hello')
-    end
-    
-    it "should be able to append to the named segment" do
-      Merb::Router.prepare do
-        match('/:foo').to(:foo => ':foo/bar')
-      end
-      
-      route_for("/hello").should have_route(:foo => "hello/bar")
-    end
-    
-    it "should be able to not alter the named segment" do
-      Merb::Router.prepare do
-        match('/:foo').to(:foo => ':foo')
-      end
-      
-      route_for("/hello").should have_route(:foo => "hello")
-    end
-    
-    it "should be able to insert the named segment into phrases" do
-      Merb::Router.prepare do
-        match("/:greetings").to(:greetings => "I say :greetings to you good sir!")
-      end
-      
-      route_for("/good-day").should have_route(:greetings => "I say good-day to you good sir!")
-    end
-    
-    it "should be able to extract a specified capture from a regular expression path condition" do
-      Merb::Router.prepare do
-        match(%r[/([a-z]+)/world]).to(:greetings => "[1]")
-      end
-      
-      route_for("/hello/world").should have_route(:greetings => "hello")
-    end
-    
-    it "should be able to extract a specified capture from a regular expression named segment" do
-      Merb::Router.prepare do
-        match("/:foo", :foo => %r[\d+([a-z]*)\d+]).to(:foo => "[2]")
-      end
-      
-      route_for("/123abc1").should have_route(:foo => "abc")
-    end
-    
-    it "should be able to extract a specified capture from a regular expression condition on an arbitrary request method" do
-      Merb::Router.prepare do
-        match(:host => %r[([a-z]+)\.world\.com]).to(:greetings => ":host[1]")
-      end
-      
-      route_for("/blah", :host => "hello.world.com").should have_route(:greetings => "hello")
-    end
-    
-    it "should be able to combine multiple regular expression extractions into a single param" do
-      Merb::Router.prepare do
-        match(%r[/([a-z]+)/world], :host => %r[([a-z]+)\.world\.com]).to(:combined => ":host[1] :path[1]")
-      end
-      
-      route_for("/goodbye/world", :host => "hello.world.com").should have_route(:combined => "hello goodbye")
-    end
-    
-    it "should strip the trailing slash from :controller" do
-      Merb::Router.prepare do
-        match("/").to(:controller => "/home")
-      end
-      
-      route_for("/").should have_route(:controller => "home")
-    end
-    
-    it "should accept a Symbol for :controller" do
-      Merb::Router.prepare do
-        match("/").to(:controller => :home)
-      end
-      
-      route_for("/").should have_route(:controller => "home")
-    end
-    
-    it "should accept a Symbol for :controller in a namespace" do
-      Merb::Router.prepare do
-        namespace(:admin) do
-          to(:controller => :home)
-        end
-      end
-      
-      route_for("/admin").should have_route(:controller => "admin/home")
-    end
-  end
-  
-  describe "a route with nested to blocks" do
-    
-    it "should merge all the params together" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do
-          match("/hello").to(:action => "bar")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should yield the new behavior object to the block" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do |builder|
-          builder.match("/hello").to(:action => "bar")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should overwrite previous params with newer params" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do
-          match("/hello").to(:controller => "bar")
-        end
-      end
-      
-      route_for("/hello").should have_route(:controller => "bar")
-    end
-  
-    it "should preserve existing conditions" do
-      Merb::Router.prepare do
-        match("/foo").to(:controller => "foo") do
-          to(:action => "bar")
-        end
-      end
-      
-      route_for("/foo").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should be preserved through condition blocks" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do
-          match('/blah').to
-        end
-      end
-      
-      route_for("/blah").should have_route(:controller => "foo")
-    end
-    
-    it "should preserve existing defaults" do
-      Merb::Router.prepare do
-        defaults(:action => "bar").to(:controller => "foo") do
-          match("/(:action)").to
-        end
-      end
-      
-      route_for("/").should have_route(:controller => "foo", :action => "bar")
-    end
-    
-    it "should be preserved through defaults blocks" do
-      Merb::Router.prepare do
-        to(:controller => "foo") do
-          defaults(:action => "bar").match("/blah").to
-        end
-      end
-      
-      route_for("/blah").should have_route(:controller => "foo")
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/redirect_spec.rb b/spec10/public/router/recognition/redirect_spec.rb
deleted file mode 100644
index 76487db..0000000
--- a/spec10/public/router/recognition/redirect_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-
-  # predicate_matchers[:redirects] = :redirect
-  
-  describe "a route that redirects" do
-    
-    it "should set the request as a redirect" do
-      Merb::Router.prepare do
-        match("/foo").redirect("/bar")
-      end
-      
-      route_for("/foo").should have_rack(:status => 302, :headers => { "Location" => "/bar" })
-    end
-    
-    it "should be able to set the redirect as a temporary redirect" do
-      Merb::Router.prepare do
-        match("/foo").redirect("/bar", :permanent => true)
-      end
-      
-      route_for("/foo").should have_rack(:status => 301, :headers => { "Location" => "/bar" })
-    end
-    
-    it "should still redirect even if there was a deferred block assigned to the route" do
-      Merb::Router.prepare do
-        block = Proc.new { |r,p| p }
-        defer(block) do
-          match("/hello").redirect("/goodbye")
-        end
-      end
-      
-      route_for("/hello").should have_rack(:status => 302, :headers => { "Location" => "/goodbye" })
-    end
-    
-    it "should redirect to the URL in the deferred block" do
-      Merb::Router.prepare do
-        block = Proc.new { |r,p| redirect("/deferred-goodbye") }
-        defer(block) do
-          match("/hello").redirect("/goodbye")
-        end
-      end
-      
-      route_for("/hello").should have_rack(:status => 302, :headers => { "Location" => "/deferred-goodbye" })
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/regexp_paths_spec.rb b/spec10/public/router/recognition/regexp_paths_spec.rb
deleted file mode 100644
index 7e63056..0000000
--- a/spec10/public/router/recognition/regexp_paths_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require File.join(File.dirname(__FILE__), '..', "spec_helper")
-
-describe "When recognizing requests," do
-
-  describe "a route with a Regexp path condition" do
-    
-    it "should allow a regex expression" do
-      Merb::Router.prepare do
-        match(%r{^/foos?/(bar|baz)/([a-z0-9]+)}).to(:controller => "foo", :action => "[1]", :id => "[2]")
-      end
-      
-      route_for("/foo/bar/baz").should  have_route(:controller => "foo", :action => "bar", :id => "baz")
-      route_for("/foos/bar/baz").should have_route(:controller => "foo", :action => "bar", :id => "baz")
-      lambda { route_for("/bars/foo/baz") }.should raise_not_found
-    end
-    
-    it "should allow mixing regular expression paths with string paths" do
-      Merb::Router.prepare do
-        match(%r{^/(foo|bar)}).match("/baz").match(%r{/([a-z0-9]+)}).to(:controller => "[1]", :action => "baz", :id => "[2]")
-      end
-      
-      route_for("/foo/baz/bar").should have_route(:controller => "foo", :action => "baz", :id => "bar")
-      route_for("/bar/baz/foo").should have_route(:controller => "bar", :action => "baz", :id => "foo")
-      lambda { route_for("/for/bar/baz") }.should raise_not_found
-    end
-    
-    it "should allow mixing regular expression paths with string paths when nesting match blocks" do
-      Merb::Router.prepare do
-        match(%r{^/(foo|bar)}) do
-          match("/baz") do
-            match(%r{/([a-z0-9]+)}).to(:controller => "[1]", :action => "baz", :id => "[2]")
-          end
-        end
-        
-      end
-      
-      route_for("/foo/baz/bar").should have_route(:controller => "foo", :action => "baz", :id => "bar")
-      route_for("/bar/baz/foo").should have_route(:controller => "bar", :action => "baz", :id => "foo")
-      lambda { route_for("/for/bar/baz") }.should raise_not_found
-    end
-    
-    it "should support inbound user agents" do
-      Merb::Router.prepare do
-        match(%r[^/foo/(.+)], :user_agent => /(MSIE|Gecko)/).to(:controller => "foo", :title => "[1]", :action => "show", :agent => ":user_agent[1]")
-      end
-      route_for("/foo/bar", :user_agent => "MSIE").should have_route(:controller => "foo", :action => "show", :title => "bar", :agent => "MSIE")
-      lambda { route_for("/foo/bar", :user_agent => "Firefox") }.should raise_error(Merb::ControllerExceptions::NotFound)
-    end
-    
-    it "should allow wrapping of nested routes all having shared OPTIONAL argument" do
-      Merb::Router.prepare do
-        match(/\/?(.*)?/).to(:language => "[1]") do
-          match("/guides/:action/:id").to(:controller => "tour_guides")
-        end
-      end
-
-      route_for('/guides/search/london').should have_route(:controller => 'tour_guides', :action => "search", :id => "london")
-    end
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/resource_spec.rb b/spec10/public/router/recognition/resource_spec.rb
deleted file mode 100644
index 3fd971e..0000000
--- a/spec10/public/router/recognition/resource_spec.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a basic singular resource route" do
-    
-    before :each do
-      Merb::Router.prepare do
-        resource :foo
-      end
-    end
-
-    it "should match a get to /foo to the blogposts controller and show action" do
-      route_for('/foo', :method => :get).should have_route(:controller => 'foos', :action => 'show', :id => nil)
-    end
-
-    it "should match a post to /foo to the blogposts controller and create action" do
-      route_for('/foo', :method => :post).should have_route(:controller => 'foos', :action => 'create', :id => nil)
-    end
-
-    it "should match a put to /foo to the blogposts controller and update action" do
-      route_for('/foo', :method => :put).should have_route(:controller => 'foos', :action => 'update', :id => nil)
-    end
-
-    it "should match a delete to /foo to the blogposts controller and show action" do
-      route_for('/foo', :method => :delete).should have_route(:controller => 'foos', :action => 'destroy', :id => nil)
-    end
-
-    it "should match a get to /foo/new to the blogposts controller and new action" do
-      route_for('/foo/new', :method => :get).should have_route(:controller => 'foos', :action => 'new', :id => nil)
-    end
-
-    it "should match a get to /foo/edit to the blogposts controller and edit action" do
-      route_for('/foo/edit', :method => :get).should have_route(:controller => 'foos', :action => 'edit', :id => nil)
-    end
-
-    it "should match a get to /foo/delete to the blogposts controller and delete action" do
-      route_for('/foo/delete', :method => :get).should have_route(:controller => 'foos', :action => 'delete', :id => nil)
-    end
-    
-  end
-  
-  describe "a customized singular resource route" do
-    
-    it "should be able to change the controller that the resource points to" do
-      Merb::Router.prepare do
-        resource :foo, :controller => :bars
-      end
-      
-      route_for('/foo').should                   have_route(:controller => "bars")
-      route_for('/foo', :method => :post).should have_route(:controller => "bars")
-    end
-    
-    [:controller_prefix, :namespace].each do |option|
-      it "should be able to specify the namespace with #{option.inspect}" do
-        Merb::Router.prepare do
-          resource :foo, option => "admin"
-        end
-        
-        route_for('/foo').should have_route(:controller => "admin/foos")
-      end
-    end
-    
-    it "should be able to set the path prefix" do
-      Merb::Router.prepare do
-        resource :foo, :path => "bar"
-      end
-      
-      route_for("/bar").should have_route(:controller => "foos", :action => "show")
-    end
-    
-  end
-  
-  member_routes = { :five => :get, :six => :post, :seven => :put, :eight => :delete }
-  
-  describe "a singular resource route with extra actions", :shared => true do
-    
-    member_routes.each_pair do |action, method|
-      
-      it "should be able to add extra #{method} methods on the member with an optional :format" do
-        route_for("/foo/#{action}",     :method => method).should have_route(:controller => "foos", :action => "#{action}", :format => nil)
-        route_for("/foo/#{action}.xml", :method => method).should have_route(:controller => "foos", :action => "#{action}", :format => "xml")
-      end
-      
-      other_methods = [:get, :post, :put, :delete] - [method]
-      other_methods.each do |other|
-        
-        it "should not route /#{action} on #{other} to anything" do
-          lambda { route_for("/foo/#{action}", :method => other) }.should raise_not_found
-        end
-        
-      end
-    end
-    
-  end
-  
-  describe "a singular resource with extra actions specified through the options" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :foo, :member => member_routes
-      end
-    end
-    
-    it_should_behave_like "a singular resource route with extra actions"
-    
-  end
-  
-  describe "a singular resource with extra actions specified in the block" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resource :foo do
-          member_routes.each { |name, method| member name, :method => method, :to => "#{name}" }
-        end
-      end
-    end
-    
-    it_should_behave_like "a singular resource route with extra actions"
-    
-    it "should work without the :to option" do
-      Merb::Router.prepare do
-        resource :foo do
-          member :hello, :method => :get
-        end
-      end
-      
-      route_for("/foo/hello").should have_route(:action => "hello")
-    end
-    
-    it "should work without the :method option" do
-      Merb::Router.prepare do
-        resource :foo do
-          member :hello, :to => "goodbye"
-        end
-      end
-      
-      [:get, :post, :put, :delete].each do |method|
-        route_for("/foo/hello", :method => method).should have_route(:action => "goodbye")
-      end
-    end
-    
-    it "should be able to map the same path with different methods to different actions for member routes" do
-      Merb::Router.prepare do
-        resource :foo do
-          member :hello, :method => :get, :to => "member_get_hello"
-          member :hello, :method => :put, :to => "member_put_hello"
-        end
-      end
-      
-      route_for("/foo/hello", :method => :get).should have_route(:controller => "foos", :action => "member_get_hello")
-      route_for("/foo/hello", :method => :put).should have_route(:controller => "foos", :action => "member_put_hello")
-    end
-    
-  end
-  
-end
diff --git a/spec10/public/router/recognition/resources_spec.rb b/spec10/public/router/recognition/resources_spec.rb
deleted file mode 100644
index fab5724..0000000
--- a/spec10/public/router/recognition/resources_spec.rb
+++ /dev/null
@@ -1,346 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a basic resource collection route" do
-    
-    before :each do
-      Merb::Router.prepare do
-        resources :blogposts
-      end
-    end
-    
-    it_should_be_a_resource_collection_route :blogposts, { :extra => false }, { }
-    
-    it "should not match put or delete on the collection" do
-      [:put, :delete].each do |method|
-        lambda { route_for('/blogposts',    :method => method) }.should raise_not_found
-        lambda { route_for('/blogposts.js', :method => method) }.should raise_not_found
-      end
-    end
-    
-    it "should not match post on the new action" do
-      lambda { route_for('/blogposts/new',     :method => :post) }.should raise_not_found
-      lambda { route_for('/blogposts/new.xml', :method => :post) }.should raise_not_found
-    end
-    
-    it "should not match post, put, or delete on the edit action" do
-      [:put, :post, :delete].each do |method|
-        lambda { route_for('/blogposts/edit',    :method => :post) }.should raise_not_found
-        lambda { route_for('/blogposts/edit.hi', :method => :post) }.should raise_not_found
-      end
-    end
-    
-    it "should not match post, put, or delete on the delete action" do
-      [:put, :post, :delete].each do |method|
-        lambda { route_for('/blogposts/delete',     :method => :post) }.should raise_not_found
-        lambda { route_for('/blogposts/delete.flv', :method => :post) }.should raise_not_found
-      end
-    end
-    
-  end
-  
-  describe "a basic resource collection with custom " do
-    
-    before :each do
-      Merb::Router.prepare do
-        resources :blogposts, :id => %r([a-z]+/\d+)
-      end
-    end
-    
-    it_should_be_a_resource_collection_route :blogposts, { :extra => false, :id => "abc/123" }, { }
-    
-    it "should not match a numeric ID for the routes" do
-      lambda { route_for("/blogposts/10") }.should                     raise_not_found
-      lambda { route_for("/blogposts/10", :method => :put) }.should    raise_not_found
-      lambda { route_for("/blogposts/10", :method => :delete) }.should raise_not_found
-      lambda { route_for("/blogposts/10/edit") }.should                raise_not_found
-      lambda { route_for("/blogposts/10/delete") }.should              raise_not_found
-    end
-    
-  end
-  
-  describe "a customized resource collection route" do
-    
-    it "should be able to change the controller that the resource points to" do
-      Merb::Router.prepare do
-        resources :blogposts, :controller => :posts
-      end
-      
-      route_for('/blogposts').should                   have_route(:controller => "posts")
-      route_for('/blogposts/1').should                 have_route(:controller => "posts")
-      route_for('/blogposts', :method => :post).should have_route(:controller => "posts")
-    end
-    
-    [:controller_prefix, :namespace].each do |option|
-      it "should be able to specify the namespace with #{option.inspect}" do
-        Merb::Router.prepare do
-          resources :blogposts, option => "admin"
-        end
-        
-        route_for('/blogposts').should have_route(:controller => "admin/blogposts")
-      end
-    end
-    
-    it "should be able to set the path prefix" do
-      Merb::Router.prepare do
-        resources :users, :path => "admins"
-      end
-      
-      route_for("/admins").should have_route(:controller => "users", :action => "index")
-    end
-  end
-  
-  collection_routes = { :one  => :get, :two => :post, :three => :put, :four  => :delete }
-  member_routes     = { :five => :get, :six => :post, :seven => :put, :eight => :delete }
-  
-  describe "a plural resource route with extra actions", :shared => true do
-    
-    # Loop through each method declared on the collection and make sure that they
-    # are available only when the request is using the specified method
-    collection_routes.each_pair do |action, method|
-      it "should be able to add extra #{method} methods on the collection with an optional :format" do
-        route_for("/users/#{action}",     :method => method).should have_route(:controller => "users", :action => "#{action}", :id => nil, :format => nil)
-        route_for("/users/#{action}.xml", :method => method).should have_route(:controller => "users", :action => "#{action}", :id => nil, :format => "xml")
-      end
-      
-      it "should still route /#{action} on get to show" do
-        route_for("/users/#{action}").should have_route(:controller => "users", :action => "show", :id => "#{action}")
-      end unless method == :get
-      
-      it "should still route /#{action} on put to update" do
-        route_for("/users/#{action}", :method => :put).should have_route(:controller => "users", :action => "update", :id => "#{action}")
-      end unless method == :put
-      
-      it "should still route /#{action} on delete to destroy" do
-        route_for("/users/#{action}", :method => :delete).should have_route(:controller => "users", :action => "destroy", :id => "#{action}")
-      end unless method == :delete
-      
-      it "should not match /#{action} on post to anything" do
-        lambda { route_for("/users/#{action}", :method => :post) }.should raise_not_found
-      end unless method == :post
-    end
-    
-    member_routes.each_pair do |action, method|
-      
-      it "should be able to add extra #{method} methods on the member with an optional :format" do
-        route_for("/users/2/#{action}",     :method => method).should have_route(:controller => "users", :action => "#{action}", :id => "2", :format => nil)
-        route_for("/users/2/#{action}.xml", :method => method).should have_route(:controller => "users", :action => "#{action}", :id => "2", :format => "xml")
-      end
-      
-      other_methods = [:get, :post, :put, :delete] - [method]
-      other_methods.each do |other|
-        
-        it "should not route /#{action} on #{other} to anything" do
-          lambda { route_for("/users/2/#{action}", :method => other) }.should raise_not_found
-        end
-        
-      end
-    end
-    
-  end
-  
-  describe "a plural resource with extra actions specified through the options" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resources :users, :collection => collection_routes, :member => member_routes
-      end
-    end
-    
-    it_should_behave_like "a plural resource route with extra actions"
-    
-  end
-  
-  describe "a plural resource with extra actions specified in the block" do
-    
-    before(:each) do
-      Merb::Router.prepare do
-        resources :users do
-          collection_routes.each { |name, method| collection name, :method => method, :to => "#{name}" }
-          member_routes.each     { |name, method| member     name, :method => method, :to => "#{name}" }
-        end
-      end
-    end
-    
-    it_should_behave_like "a plural resource route with extra actions"
-    
-    it "should work without the :to option" do
-      Merb::Router.prepare do
-        resources :users do
-          collection :hello, :method => :get
-          member     :hello, :method => :get
-        end
-      end
-      
-      route_for("/users/hello").should   have_route(:action => "hello")
-      route_for("/users/1/hello").should have_route(:action => "hello")
-    end
-    
-    it "should work without the :method option" do
-      Merb::Router.prepare do
-        resources :users do
-          collection :hello, :to => "goodbye"
-          member     :hello, :to => "goodbye"
-        end
-      end
-      
-      [:get, :post, :put, :delete].each do |method|
-        route_for("/users/hello",   :method => method).should have_route(:action => "goodbye")
-        route_for("/users/1/hello", :method => method).should have_route(:action => "goodbye")
-      end
-    end
-    
-    it "should be able to map the same path with different methods to different actions for collection routes" do
-      Merb::Router.prepare do
-        resources :users do
-          collection :hello, :method => :get, :to => "collection_get_hello"
-          collection :hello, :method => :put, :to => "collection_put_hello"
-        end
-      end
-      
-      route_for("/users/hello", :method => :get).should have_route(:controller => "users", :action => "collection_get_hello")
-      route_for("/users/hello", :method => :put).should have_route(:controller => "users", :action => "collection_put_hello")
-    end
-    
-    it "should be able to map the same path with different methods to different actions for member routes" do
-      Merb::Router.prepare do
-        resources :users do
-          member :hello, :method => :get, :to => "member_get_hello"
-          member :hello, :method => :put, :to => "member_put_hello"
-        end
-      end
-      
-      route_for("/users/9/hello", :method => :get).should have_route(:controller => "users", :id => "9", :action => "member_get_hello")
-      route_for("/users/9/hello", :method => :put).should have_route(:controller => "users", :id => "9", :action => "member_put_hello")
-    end
-    
-  end
-
-  describe "a resource route with multiple custom keys" do
-  
-    before :each do
-      Merb::Router.prepare do
-        resources :emails, :keys => ["username", "domain"]
-      end 
-    end
-    
-    it "should match a get to /emails/bidule/merbivore_com to the  emails controller and the show action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com', :method => :get).should have_route(:controller => 'emails', :action => 'show', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should match a put to /emails/bidule/merbivore_com to the  emails controller and the update action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com', :method => :put).should have_route(:controller => 'emails', :action => 'update', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should match a delete to /emails/bidule/merbivore_com to the  emails controller and the destroy action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com', :method => :delete).should have_route(:controller => 'emails', :action => 'destroy', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should match a get to /emails/bidule/merbivore_com/edit to the  emails controller and the destroy action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com/edit', :method => :get).should have_route(:controller => 'emails', :action => 'edit', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should not match a put to /emails/bidule/merbivore_com/edit" do
-      lambda { route_for('/emails/bidule/merbivore_com/edit', :method => :put) }.should raise_not_found
-    end
-    
-    it "should match a get to /emails/bidule/merbivore_com/delete to the emails controller and the delete action with username => 'bidule', domain => 'merbivore_com'" do
-      route_for('/emails/bidule/merbivore_com/delete', :method => :get).should have_route(:controller => 'emails', :action => 'delete', :username => "bidule", :domain => "merbivore_com")
-    end
-    
-    it "should be able to set matches on each key" do
-      Merb::Router.prepare do
-        resources :emails, :keys => ["username", "domain"], :username => /[a-z]+/, :domain => /[a-z]+\.com/
-      end
-      
-      route_for("/emails/abc/abc.com").should have_route(:username => "abc", :domain => "abc.com")
-      lambda { route_for("/emails/123/456")     }.should raise_not_found
-      lambda { route_for("/emails/abc/123")     }.should raise_not_found
-      lambda { route_for("/emails/123/abc.com") }.should raise_not_found
-    end
-    
-    it "should be able to set matches on a single key" do
-      Merb::Router.prepare do
-        resources :emails, :keys => ["username", "domain"], :username => /[a-z]+/
-      end
-      
-      route_for("/emails/abc/123").should have_route(:username => "abc", :domain => "123")
-      route_for("/emails/abc/abc").should have_route(:username => "abc", :domain => "abc")
-      lambda { route_for("/emails/123/456") }.should raise_not_found
-      lambda { route_for("/emails/123/abc") }.should raise_not_found
-    end
- 
-  end
-  
-  describe "a resource an identify" do
-    
-    class Email ; end
-    
-    it "should set the keys for the resource when the identify wraps the resource declaration" do
-      Merb::Router.prepare do
-        identify Email => :address do
-          resources :emails
-        end
-      end
-      
-      route_for('/emails/hello').should have_route(:id => nil, :address => "hello")
-    end
-    
-    it "should set the keys for the resource when the identify is specified inline" do
-      Merb::Router.prepare do
-        resources :emails, :identify => :address
-      end
-      
-      route_for('/emails/hello').should have_route(:id => nil, :address => "hello")
-    end
-    
-    it "should give precedance to the :keys option over a parent #identify" do
-      Merb::Router.prepare do
-        identify Email => :address do
-          resources :emails, :key => :email
-        end
-      end
-      
-      route_for('/emails/hello').should have_route(:id => nil, :address => nil, :email => "hello")
-    end
-    
-    it "should give precedance to the :keys option over the :identify option" do
-      Merb::Router.prepare do
-        resources :emails, :identify => :address, :key => :email
-      end
-      
-      route_for('/emails/hello').should have_route(:id => nil, :address => nil, :email => "hello")
-    end
-    
-  end
-  
-  describe "a resource route with a single custom key" do
-    
-    [:key, :keys].each do |option|
-      it "should use the specified key specified with #{option.inspect} in the params hash" do
-        Merb::Router.prepare do
-          resources :emails, option => :address
-        end
-        
-        route_for("/emails/foobar",        :method => :get).should have_route(:controller => "emails", :action => "show",   :address => "foobar")
-        route_for("/emails/foobar",        :method => :put).should have_route(:controller => "emails", :action => "update", :address => "foobar")
-        route_for("/emails/foobar/edit",   :method => :get).should have_route(:controller => "emails", :action => "edit",   :address => "foobar")
-        route_for("/emails/foobar/delete", :method => :get).should have_route(:controller => "emails", :action => "delete", :address => "foobar")
-      end
-    end
-    
-    it "should give precedence to :keys" do
-      Merb::Router.prepare do
-        resources :emails, :keys => :address, :key => :zomg
-      end
-      
-      route_for("/emails/foobar",        :method => :get).should have_route(:controller => "emails", :action => "show",   :address => "foobar")
-      route_for("/emails/foobar",        :method => :put).should have_route(:controller => "emails", :action => "update", :address => "foobar")
-      route_for("/emails/foobar/edit",   :method => :get).should have_route(:controller => "emails", :action => "edit",   :address => "foobar")
-      route_for("/emails/foobar/delete", :method => :get).should have_route(:controller => "emails", :action => "delete", :address => "foobar")
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/recognition/variables_spec.rb b/spec10/public/router/recognition/variables_spec.rb
deleted file mode 100644
index 509556c..0000000
--- a/spec10/public/router/recognition/variables_spec.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-require File.join(File.dirname(__FILE__), "..", "spec_helper")
-
-describe "When recognizing requests," do
-  
-  describe "a route with variables in the path" do
-    
-    it "should create keys for each named variable" do
-      Merb::Router.prepare do
-        match("/:foo/:bar").register
-      end
-      
-      route_for("/one/two").should have_route(:foo => "one", :bar => "two")
-    end
-    
-    it "should be able to match :controller, :action, and :id from the route" do
-      Merb::Router.prepare do
-        match("/:controller/:action/:id").register
-      end
-      
-      route_for("/foo/bar/baz").should have_route(:controller => "foo", :action => "bar", :id => "baz")
-    end
-    
-    it "should be able to set :controller with #to" do
-      Merb::Router.prepare do
-        match("/:action").to(:controller => "users")
-      end
-      
-      route_for("/show").should have_route(:controller => "users", :action => "show")
-    end
-    
-    it "should be able to combine multiple named variables into a param" do
-      Merb::Router.prepare do
-        match("/:foo/:bar").to(:controller => ":foo/:bar")
-      end
-      
-      route_for("/one/two").should have_route(:controller => "one/two", :foo => "one", :bar => "two")
-    end
-    
-    it "should be able to overwrite matched named variables in the params" do
-      Merb::Router.prepare do
-        match("/:foo/:bar").to(:foo => "foo", :bar => "bar")
-      end
-      
-      route_for("/one/two").should have_route(:foo => "foo", :bar => "bar")
-    end
-    
-    it "should be able to block named variables from being present in the params" do
-      Merb::Router.prepare do
-        match("/:foo/:bar").to(:foo => nil, :bar => nil)
-      end
-      
-      route_for("/one/two").should have_route(:foo => nil, :bar => nil)
-    end
-    
-    it "should match single character names" do
-      Merb::Router.prepare do
-        match("/:x/:y").register
-      end
-      
-      route_for("/40/20").should have_route(:x => "40", :y => "20")
-    end
-    
-    it "should not swallow trailing underscores in the segment name" do
-      Merb::Router.prepare do
-        match("/:foo_").register
-      end
-      
-      route_for("/buh_").should have_route(:foo => "buh")
-      lambda { route_for("/buh").should }.should raise_error(Merb::ControllerExceptions::NotFound)
-    end
-    
-  end
-  
-  describe "a route with variables spread across match blocks" do
-    
-    it "should combine the path conditions from each match statement" do
-      Merb::Router.prepare do
-        match("/:foo") do
-          match("/:bar").register
-        end
-      end
-      
-      route_for("/one/two").should have_route(:foo => "one", :bar => "two")
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/router/router_spec.rb b/spec10/public/router/router_spec.rb
deleted file mode 100644
index 182d0f8..0000000
--- a/spec10/public/router/router_spec.rb
+++ /dev/null
@@ -1,134 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe Merb::Router do
-  
-  describe "#prepare" do
-    
-    it "should be able to compile an empty route table" do
-      lambda do
-        Merb::Router.prepare { }
-      end.should_not raise_error(SyntaxError)
-    end
-    
-    it "should evaluate the prepare block in context an object that provides builder methods" do
-      Merb::Router.prepare do
-        %w(
-          match to defaults options fixatable
-          name full_name defer_to default_routes
-          namespace redirect resources resource
-        ).each do |method|
-          respond_to?(method).should == true
-        end
-      end
-    end
-    
-    it "should use the default root_behavior if none is specified" do
-      Merb::Router.prepare do
-        match("/hello").to(:controller => "hello")
-      end
-      
-      route_for("/hello").should have_route(:controller => "hello", :action => "index")
-    end
-    
-    it "should use the root_behavior specified externally" do
-      Merb::Router.root_behavior = Merb::Router.root_behavior.defaults(:controller => "default")
-      Merb::Router.prepare do
-        match("/hello").register
-      end
-      
-      route_for("/hello").should have_route(:controller => "default", :action => "index")
-    end
-    
-    it "should be able to chain root_behaviors" do
-      Merb::Router.root_behavior = Merb::Router.root_behavior.defaults(:controller => "default")
-      Merb::Router.root_behavior = Merb::Router.root_behavior.defaults(:action     => "default")
-      Merb::Router.prepare do
-        match("/hello").register
-      end
-      
-      route_for("/hello").should have_route(:controller => "default", :action => "default")
-    end
-    
-    it "should raise a friendly error when there is some :controller mismatching going on" do
-      lambda {
-        Merb::Router.prepare do
-          match("/").to(:controller => "hello/:controller")
-        end
-      }.should raise_error(Merb::Router::GenerationError)
-    end
-    
-    it "should empty previously set #routes, #resource_routes, and #named_routes" do
-      Merb::Router.prepare do
-        resources :users
-      end
-      Merb::Router.prepare { }
-      
-      Merb::Router.routes.should be_empty
-      Merb::Router.named_routes.should be_empty
-      Merb::Router.resource_routes.should be_empty
-    end
-    
-    it "should not be able to match routes anymore" do
-      lambda { route_for("/users") }.should raise_error(Merb::Router::NotCompiledError)
-    end
-    
-    it "should log at the debug level when it cannot find a resource model" do
-      with_level(:info) do
-        Merb::Router.prepare { resources :zomghi2u }
-      end.should_not include_log("Could not find resource model Zonghi2u")
-      
-      with_level(:debug) do
-        Merb::Router.prepare { resources :zomghi2u }
-      end.should include_log("Could not find resource model Zomghi2u")
-    end
-  end
-
-  describe "#match" do
-    
-    it "should raise an error if the routes were not compiled yet" do
-      lambda { Merb::Router.match(simple_request) }.should raise_error(Merb::Router::NotCompiledError)
-    end
-
-  end
-  
-  describe "#extensions" do
-    it "should be able to extend the router" do
-      Merb::Router.extensions do
-        def hello_world
-          match("/hello").to(:controller => "world")
-        end
-      end
-      
-      Merb::Router.prepare do
-        hello_world
-      end
-      
-      route_for("/hello").should have_route(:controller => "world")
-    end
-  end
-  
-  describe "#around_match" do
-    
-    it "should set a class method of Router to be called around request matching" do
-      class Merb::Router
-        def self.my_awesome_thang(request)
-          before!
-          retval = yield
-          after!
-          retval
-        end
-      end
-      
-      Merb::Router.around_match = :my_awesome_thang
-      Merb::Router.prepare do
-        match("/").to(:controller => "home")
-      end
-      
-      Merb::Router.should_receive(:before!)
-      Merb::Router.should_receive(:after!)
-      route_for("/").should have_route(:controller => "home")
-    end
-    
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/router/spec_helper.rb b/spec10/public/router/spec_helper.rb
deleted file mode 100644
index d733a07..0000000
--- a/spec10/public/router/spec_helper.rb
+++ /dev/null
@@ -1,287 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-require 'ostruct'
-require 'rubygems'
-gem "rspec"
-require "spec"
-
-module Spec
-  module Matchers
-    class HaveRoute
-      def initialize(expected, exact = false)
-        @expected = expected
-        @exact = exact
-      end
-
-      def matches?(target)
-        @target = target[1]
-        @errors = []
-        @expected.all? { |param, value| @target[param] == value } && (!@exact || @expected.length == @target.length)
-      end
-
-      def failure_message
-        @target.each do |param, value|
-          @errors << "Expected :#{param} to be #{@expected[param].inspect}, but was #{value.inspect}" unless
-            @expected[param] == value
-        end
-        @errors << "Got #{@target.inspect}"
-        @errors.join("\n")
-      end
-
-      def negative_failure_message
-        "Expected #{@expected.inspect} not to be #{@target.inspect}, but it was."
-      end
-
-      def description() "have_route #{@target.inspect}" end
-    end
-
-    def have_route(expected)
-      HaveRoute.new(expected)
-    end
-    
-    def have_exact_route(expected)
-      HaveRoute.new(expected, true)
-    end
-    
-    class HaveRack
-      def initialize(expected)
-        @expected = expected
-      end
-
-      def matches?(rack)
-        return false unless rack.last.is_a?(Array)
-        @actual = Struct.new(:status, :headers, :body).new(rack.last[0], rack.last[1], rack.last[2])
-        @expected.all? { |k, v| @actual[k] == v }
-      end
-
-      def failure_message
-        "#{@actual.inspect} does not match #{@expected.inspect}"
-      end
-
-      def negative_failure_message
-        "#{@actual.inspect} does match #{@expected.inspect}"
-      end
-
-      def description() "have_rack #{@actual.inspect}" end
-    end
-    
-    def have_rack(expected)
-      HaveRack.new(expected)
-    end
-    
-    # class HaveNilRoute
-    # 
-    #   def matches?(target)
-    #     @target = target
-    #     target.last.empty?
-    #   end
-    # 
-    #   def failure_message
-    #     "Expected a nil route. Got #{@target.inspect}."
-    #   end
-    # 
-    #   def negative_failure_message
-    #     "Expected not to get a nil route."
-    #   end
-    # end
-    # 
-    def raise_not_found
-      raise_error(Merb::ControllerExceptions::NotFound)
-    end
-  end
-  
-  module Helpers
-    #
-    # Creates a single route with the passed conditions and parameters without
-    # registering it with Router
-    # def route(conditions, params = {})
-    #   conditions = {:path => conditions} unless Hash === conditions
-    #   Merb::Router::Route.new(conditions, params)
-    # end
-    # 
-    # #
-    # # A shortcut for creating a single route and registering it with Router
-    # def prepare_named_route(name, from, conditions = {}, to = nil)
-    #   to, conditions = conditions, {} unless to
-    #   Merb::Router.prepare {|r| r.match(from, conditions).to(to).name(name) }
-    # end
-    # 
-    # def prepare_conditional_route(name, from, conditions, to = {})
-    #   Merb::Router.prepare {|r| r.match(from, conditions).to(to).name(name) }
-    # end
-    # 
-    def prepare_route(from = {}, to = {})
-      name = :default
-      Merb::Router.prepare {|r| r.match(from).to(to).name(name) }
-    end
-    
-    def env_for(path, orig_env = {})
-      env = orig_env.dup
-      env["REQUEST_METHOD"]  = env.delete(:method).to_s if env[:method]
-      env["HTTP_USER_AGENT"] = env.delete(:user_agent)  if env[:user_agent]
-      env["HTTPS"]           = "on"                     if env.delete(:protocol) =~ /https/i
-      env["REQUEST_PATH"]    = path
-      
-      if env[:host]
-        env["HTTP_HOST"] = env.delete(:host)
-      elsif env[:domain]
-        env["HTTP_HOST"] = env.delete(:domain)
-      end
-      
-      env
-    end
-    
-    def simple_request(env = {})
-      env_for("/", env)
-    end
-
-    #
-    # Returns the dispatch parameters for a request by passing the request
-    # through Router#match.
-    def route_for(path, env = {}, &block)
-      request = fake_request(env_for(path, env))
-      yield request if block_given?
-      Merb::Router.route_for(request)
-    end
-    
-    def request_for(path, env = {}, &block)
-      request = fake_request(env_for(path, env))
-      yield request if block_given?
-      Merb::Router.route_for(request)
-      request
-    end
-    
-    def matched_route_for(*args)
-      route_for(*args).first
-    end
-
-  end
-end
-
-def it_should_be_a_resource_collection_route(name, *args)
-  params = extract_options_from_args!(args) || {}
-  prefix = args.first.is_a?(String) ? args.shift : ""
-  opts   = args.first.is_a?(Hash)   ? args.shift : {}
-  
-  id = opts[:id] || "45"
-  
-  it "should provide #{name} with an 'index' route" do
-    route_for("#{prefix}/#{name}").should          have_route({:action => "index", :controller => "#{name}",  :id => nil, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/index").should    have_route({:action => "index", :controller => "#{name}",  :id => nil, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}.js").should       have_route({:action => "index", :controller => "#{name}",  :id => nil, :format => "js"}.merge(params))
-    route_for("#{prefix}/#{name}/index.js").should have_route({:action => "index", :controller => "#{name}",  :id => nil, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'new' route" do
-    route_for("#{prefix}/#{name}/new").should    have_route({:action => "new", :controller => "#{name}", :id => nil, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/new.js").should have_route({:action => "new", :controller => "#{name}", :id => nil, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'create' route" do
-    route_for("#{prefix}/#{name}",    :method => :post).should have_route({:action => "create", :controller => "#{name}", :id => nil, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}.js", :method => :post).should have_route({:action => "create", :controller => "#{name}", :id => nil, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'show' route" do
-    route_for("#{prefix}/#{name}/#{id}").should    have_route({:action => "show", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}.js").should have_route({:action => "show", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with an 'edit' route" do
-    route_for("#{prefix}/#{name}/#{id}/edit").should    have_route({:action => "edit", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}/edit.js").should have_route({:action => "edit", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with an 'update' route" do
-    route_for("#{prefix}/#{name}/#{id}",    :method => :put).should have_route({:action => "update", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}.js", :method => :put).should have_route({:action => "update", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'delete' route" do
-    route_for("#{prefix}/#{name}/#{id}/delete").should    have_route({:action => "delete", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}/delete.js").should have_route({:action => "delete", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'destroy' route" do
-    route_for("#{prefix}/#{name}/#{id}",    :method => :delete).should have_route({:action => "destroy", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/#{id}.js", :method => :delete).should have_route({:action => "destroy", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-  end
-
-  # --- I decided that all the routes here will have the following ---
-  
-  if !opts.has_key?(:extra) || opts[:extra]
-    
-    it "should provide #{name} with a 'one' collection route" do
-      route_for("#{prefix}/#{name}/one").should    have_route({:action => "one", :controller => "#{name}", :format => nil }.merge(params))
-      route_for("#{prefix}/#{name}/one.js").should have_route({:action => "one", :controller => "#{name}", :format => "js"}.merge(params))
-    end
-
-    it "should provide #{name} with a 'two' member route" do
-      route_for("#{prefix}/#{name}/#{id}/two").should    have_route({:action => "two", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-      route_for("#{prefix}/#{name}/#{id}/two.js").should have_route({:action => "two", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-    end
-
-    it "should provide #{name} with a 'three' collection route that maps the 'awesome' method" do
-      route_for("#{prefix}/#{name}/three").should    have_route({:action => "awesome", :controller => "#{name}", :format => nil }.merge(params))
-      route_for("#{prefix}/#{name}/three.js").should have_route({:action => "awesome", :controller => "#{name}", :format => "js"}.merge(params))
-    end
-
-    it "should provide #{name} with a 'four' member route that maps to the 'awesome' method" do
-      route_for("#{prefix}/#{name}/#{id}/four").should    have_route({:action => "awesome", :controller => "#{name}", :id => id, :format => nil }.merge(params))
-      route_for("#{prefix}/#{name}/#{id}/four.js").should have_route({:action => "awesome", :controller => "#{name}", :id => id, :format => "js"}.merge(params))
-    end
-  end
-end
-
-def it_should_be_a_resource_object_route(name, *args)
-  controller = "#{name}s"
-  params     = extract_options_from_args!(args) || {}
-  prefix     = args.first.is_a?(String) ? args.shift : ""
-  opts       = args.first.is_a?(Hash)   ? args.shift : {}
-
-  it "should provide #{name} with a 'show' route" do
-    route_for("#{prefix}/#{name}").should    have_route({:action => "show", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}.js").should have_route({:action => "show", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with an 'edit' route" do
-    route_for("#{prefix}/#{name}/edit").should    have_route({:action => "edit", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/edit.js").should have_route({:action => "edit", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with an 'update' route" do
-    route_for("#{prefix}/#{name}",    :method => :put).should have_route({:action => "update", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}.js", :method => :put).should have_route({:action => "update", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'delete' route" do
-    route_for("#{prefix}/#{name}/delete").should    have_route({:action => "delete", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/delete.js").should have_route({:action => "delete", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'destroy' route" do
-    route_for("#{prefix}/#{name}",    :method => :delete).should have_route({:action => "destroy", :controller => controller, :format => nil}.merge(params))
-    route_for("#{prefix}/#{name}.js", :method => :delete).should have_route({:action => "destroy", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'one' member route" do
-    route_for("#{prefix}/#{name}/one").should    have_route({:action => "one", :controller => controller, :format => nil}.merge(params))
-    route_for("#{prefix}/#{name}/one.js").should have_route({:action => "one", :controller => controller, :format => "js"}.merge(params))
-  end
-
-  it "should provide #{name} with a 'two' member route that maps to the 'awesome' method" do
-    route_for("#{prefix}/#{name}/two").should    have_route({:action => "awesome", :controller => controller, :format => nil }.merge(params))
-    route_for("#{prefix}/#{name}/two.js").should have_route({:action => "awesome", :controller => controller, :format => "js"}.merge(params))
-  end
-end
-
-Spec::Runner.configure do |config|
-  config.include(Spec::Helpers)
-  config.include(Spec::Matchers)
-  config.before(:each) do
-    @_root_behavior = Merb::Router.root_behavior
-  end
-  config.after(:each) do
-    Merb::Router.root_behavior = @_root_behavior
-    Merb::Router.reset!
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/router/spec_helper_spec.rb b/spec10/public/router/spec_helper_spec.rb
deleted file mode 100644
index 034eaf3..0000000
--- a/spec10/public/router/spec_helper_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-
-describe "env_for" do
-  describe "with :method" do
-    before(:each) do
-      @orig_env = { :method => "POST" }
-    end
-  
-    it "should preserve the passed environment" do
-      env_for("/", @orig_env)
-      @orig_env.should == { :method => "POST" }
-    end
-
-    it "should return REQUEST_PATH and REQUEST_METHOD" do
-      env_for("/", @orig_env).should == { "REQUEST_PATH" => "/", "REQUEST_METHOD" => "POST" }
-    end
-  end
-
-  describe "with :user_agent" do
-    before(:each) do
-      @orig_env = { :user_agent => "Safari" }
-    end
-  
-    it "should preserve the passed environment" do
-      env_for("/", @orig_env)
-      @orig_env.should == { :user_agent => "Safari" }
-    end
-
-    it "should return REQUEST_PATH and HTTP_USER_AGENT" do
-      env_for("/", @orig_env).should == { "REQUEST_PATH" => "/", "HTTP_USER_AGENT" => "Safari" }
-    end
-  end
-end
diff --git a/spec10/public/session/controllers/sessions.rb b/spec10/public/session/controllers/sessions.rb
deleted file mode 100644
index 0238bf2..0000000
--- a/spec10/public/session/controllers/sessions.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-module Merb
-  
-  module Test
-    module Fixtures
-  
-      module Controllers
-
-        class Testing < Merb::Controller
-          self._template_root = File.dirname(__FILE__) / "views"
-        end
-
-        class SessionsController < Testing
-    
-          def index
-            request.session[:foo] = params[:foo]
-            Merb::Config[:session_store]
-          end
-      
-          def regenerate
-            request.session.regenerate
-          end
-      
-          def retrieve
-          end
-      
-          def destroy
-            request.session.clear!
-          end
-    
-        end
-    
-        class MultipleSessionsController < Testing
-    
-          def store_in_cookie
-            request.session(:cookie)[:foo] = 'cookie-bar'
-          end
-      
-          def store_in_memory
-            request.session(:memory)[:foo] = 'memory-bar'
-          end
-      
-          def store_in_memcache
-            request.session(:memcache)[:foo] = 'memcache-bar'
-          end
-      
-          def store_in_multiple
-            request.session(:memcache)[:foo] = 'memcache-baz'
-            request.session(:memory)[:foo] = 'memory-baz'
-            request.session(:cookie)[:foo] = 'cookie-baz'
-          end
-      
-          def retrieve
-          end
-      
-        end
-  
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/session/cookie_session_spec.rb b/spec10/public/session/cookie_session_spec.rb
deleted file mode 100644
index 9ed4c89..0000000
--- a/spec10/public/session/cookie_session_spec.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb(:session_store => "cookie", :session_secret_key => "session-secret-key-here")
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-describe Merb::CookieSession do
-  
-  before do 
-    @session_class = Merb::CookieSession
-    @session = @session_class.generate
-  end
-  
-  it_should_behave_like "All session-store backends"
-  
-  it "should have a session_store_type class attribute" do
-    @session.class.session_store_type.should == :cookie
-  end
-  
-end
-
-describe Merb::CookieSession, "mixed into Merb::Controller" do
-  
-  before(:all) { @controller_klass = Merb::Test::Fixtures::Controllers::SessionsController }
-  
-  it "should represent the controller session" do
-    controller = dispatch_to(@controller_klass, :index)
-    controller.body.should == "cookie"
-    controller.request.session.should be_kind_of(Merb::CookieSession)
-  end
-  
-  it "should store and retrieve session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-      controller.request.session[:foo].should == "cookie"
-    
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == "cookie"
-    end
-  end
-  
-  it "should allow regeneration of the session" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-      controller = dispatch_to(@controller_klass, :regenerate)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == "cookie"
-    end    
-  end
-    
-  it "shouldn't allow tampering with cookie data" do
-    with_cookies(@controller_klass) do |cookie_jar|
-      controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-      cookie_data, cookie_checksum = controller.cookies[Merb::Request._session_id_key].split('--')
-      cookie_data = 'tampered-with-data'
-      cookie_jar[Merb::Request._session_id_key] = "#{cookie_data}--#{cookie_checksum}"
-      controller = dispatch_to(@controller_klass, :retrieve)
-      lambda { controller.request.session }.should raise_error(Merb::CookieSession::TamperedWithCookie)
-    end
-  end
-    
-  it "shouldn't allow tampering with cookie fingerprints" do
-    with_cookies(@controller_klass) do |cookie_jar|
-      controller = dispatch_to(@controller_klass, :index, :foo => "cookie")
-      cookie_data, cookie_checksum = controller.cookies[Merb::Request._session_id_key].split('--')
-      cookie_checksum = 'tampered-with-checksum'
-      cookie_jar[Merb::Request._session_id_key] = "#{cookie_data}--#{cookie_checksum}"
-      controller = dispatch_to(@controller_klass, :retrieve)
-      lambda { controller.request.session }.should raise_error(Merb::CookieSession::TamperedWithCookie)
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/session/memcached_session_spec.rb b/spec10/public/session/memcached_session_spec.rb
deleted file mode 100644
index 70e9f2e..0000000
--- a/spec10/public/session/memcached_session_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb(:session_store => "memcache")
-
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-require 'memcache'
-Merb::MemcacheSession.store = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })
-
-begin
-  Merb::MemcacheSession.store.stats  
-rescue MemCache::MemCacheError
-  puts "\nWarning: no connection to MemCache server at 127.0.0.1:11211 - some specs will fail!\n\n"
-end
-
-describe Merb::MemcacheSession do
-  
-  before do 
-    @session_class = Merb::MemcacheSession
-    @session = @session_class.generate
-  end
-  
-  it_should_behave_like "All session-store backends"
-  
-  it "should have a session_store_type class attribute" do
-    @session.class.session_store_type.should == :memcache
-  end
-  
-end
-
-describe Merb::MemcacheSession, "mixed into Merb::Controller" do
-  
-  before(:all) { @session_class = Merb::MemcacheSession }
-  
-  it_should_behave_like "All session-stores mixed into Merb::Controller"
-  
-end
diff --git a/spec10/public/session/memory_session_spec.rb b/spec10/public/session/memory_session_spec.rb
deleted file mode 100644
index db609a0..0000000
--- a/spec10/public/session/memory_session_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb(:session_store => "memory")
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-describe Merb::MemorySession do
-  
-  before do 
-    @session_class = Merb::MemorySession
-    @session = @session_class.generate
-  end
-  
-  it_should_behave_like "All session-store backends"
-  
-  it "should have a session_store_type class attribute" do
-    @session.class.session_store_type.should == :memory
-  end
-  
-end
-
-describe Merb::MemorySession, "mixed into Merb::Controller" do
-
-  before(:all) { @session_class = Merb::MemorySession }
-  
-  it_should_behave_like "All session-stores mixed into Merb::Controller"
-
-end
\ No newline at end of file
diff --git a/spec10/public/session/multiple_sessions_spec.rb b/spec10/public/session/multiple_sessions_spec.rb
deleted file mode 100644
index bb74ec2..0000000
--- a/spec10/public/session/multiple_sessions_spec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb(:session_stores => ["cookie", "memory", "memcache"], :session_secret_key => "session-secret-key-here")
-
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-require 'memcache'
-Merb::MemcacheSession.store = MemCache.new('127.0.0.1:11211', { :namespace => 'my_app' })
-
-begin
-  Merb::MemcacheSession.store.stats  
-rescue MemCache::MemCacheError
-  puts "\nWarning: no connection to MemCache server at 127.0.0.1:11211 - some specs will fail!\n\n"
-end
-
-describe "An app with multiple session stores configured" do
-  
-  before(:all) { @controller_klass = Merb::Test::Fixtures::Controllers::MultipleSessionsController }
-  
-  it "should store cookie-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_cookie)
-      controller.request.session(:cookie)[:foo].should == "cookie-bar"
-      controller.request.session[:foo].should == "cookie-bar" # defaults to the first registered store
-    end
-  end
-  
-  it "should retrieve cookie-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_cookie)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session(:cookie)[:foo].should == "cookie-bar"
-      controller.request.session[:foo].should == "cookie-bar" # defaults to the first registered store
-    end
-  end
-  
-  it "should store memory-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_memory)
-      controller.request.session(:memory)[:foo].should == "memory-bar"
-    end
-  end
-  
-  it "should retrieve memory-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_memory)
-      controller = dispatch_to(@controller_klass, :retrieve)    
-      controller.request.session(:memory)[:foo].should == "memory-bar"
-    end
-  end
-  
-
-  
-  it "should store memcache-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_memcache)
-      controller.request.session(:memcache)[:foo].should == "memcache-bar"
-    end
-  end
-  
-  it "should retrieve memcache-based session data" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :store_in_memcache)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session(:memcache)[:foo].should == "memcache-bar"
-    end
-  end
-   
-  # TODO - _session_id cookies are clobbered atm - so this doesn't work yet
-  # it "should allow you to use them simultaneously" do
-  #   with_cookies(@controller_klass) do
-  #     controller = dispatch_to(@controller_klass, :store_in_multiple)
-  #     controller.request.session(:cookie)[:foo].should == "cookie-baz"
-  #     
-  #     controller = dispatch_to(@controller_klass, :retrieve)
-  #     controller.request.session(:cookie)[:foo].should =="cookie-baz"
-  #     controller.request.session(:memory)[:foo].should == "memory-baz"  
-  #     controller.request.session(:memcache)[:foo].should == "memcache-baz"
-  #   end
-  # end
-    
-end
\ No newline at end of file
diff --git a/spec10/public/session/no_session_spec.rb b/spec10/public/session/no_session_spec.rb
deleted file mode 100644
index 043a70d..0000000
--- a/spec10/public/session/no_session_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-startup_merb
-
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-describe "An app without sessions enabled" do
-  
-  it "should raise an exception when accessing request.session" do
-    lambda {
-      controller = dispatch_to(Merb::Test::Fixtures::Controllers::SessionsController, :index)
-    }.should raise_error(Merb::SessionMixin::NoSessionContainer)
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/session/session_shared.rb b/spec10/public/session/session_shared.rb
deleted file mode 100644
index 46ee612..0000000
--- a/spec10/public/session/session_shared.rb
+++ /dev/null
@@ -1,108 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper")
-require File.join(File.dirname(__FILE__), "controllers", "sessions")
-
-# The Merb::Session module gets mixed into Merb::SessionContainer to allow 
-# app-level functionality (usually found in app/models/merb/session.rb)
-module Merb
-  module Session
-    
-    def awesome?
-      self[:foo] == 'awesome'
-    end
-    
-  end
-end
-
-describe "All session-store backends", :shared => true do
-  
-  it "should be instanciated using the 'generate' method" do
-    @session_class.generate.should be_kind_of(@session_class)
-  end
-      
-  it "should store the session_id" do
-    @session.session_id.should match(/^[0-9a-f]{32}$/)
-  end
-  
-  it "should have bracket accessors for setting data" do
-    @session.should respond_to(:[]=)
-    @session.should respond_to(:[])
-    @session[:foo] = 'bar'
-    @session[:foo].should == 'bar'
-  end
-
-end
-
-describe "All session-stores mixed into Merb::Controller", :shared => true do
-  
-  before(:all) { @controller_klass = Merb::Test::Fixtures::Controllers::SessionsController }
-  
-  it "should represent the controller session" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index)
-      controller.request.session.should be_kind_of(@session_class)
-    end
-  end
-  
-  it "should store session data" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller.request.session[:foo].should == session_store_type
-      cookie_header = controller.headers["Set-Cookie"].first
-      cookie_header.should_not match(/expires/) # sessions expire when browser quits
-    end
-  end
-  
-  it "should retrieve session data" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == session_store_type
-    end    
-  end
-  
-  it "should allow regeneration of the session" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller = dispatch_to(@controller_klass, :regenerate)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == session_store_type
-    end    
-  end
-  
-  it "should allow the session to be destroyed" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.request.session[:foo].should == session_store_type
-      
-      controller = dispatch_to(@controller_klass, :destroy)
-      controller.request.session.should be_empty
-      cookie_header = controller.headers["Set-Cookie"].first
-      cookie_header.should match(/_session_id=;/)
-      cookie_header.should match(/01-Jan-1970/)
-    end
-  end
-  
-  it "should not set the Set-Cookie header when the session(_id) didn't change" do
-    session_store_type = @session_class.session_store_type.to_s
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => session_store_type)
-      controller.headers["Set-Cookie"].should_not be_blank
-      controller = dispatch_to(@controller_klass, :retrieve)
-      controller.headers["Set-Cookie"].should be_blank
-    end
-  end
-  
-  it "should have mixed in Merb::Session methods" do
-    with_cookies(@controller_klass) do
-      controller = dispatch_to(@controller_klass, :index, :foo => 'awesome')
-      controller.request.session.should respond_to(:awesome?)
-      controller.request.session.should be_awesome
-    end
-  end
-    
-end
\ No newline at end of file
diff --git a/spec10/public/session/spec_helper.rb b/spec10/public/session/spec_helper.rb
deleted file mode 100644
index 3c3eef9..0000000
--- a/spec10/public/session/spec_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-require File.expand_path(File.join(File.dirname(__FILE__), "session_shared"))
diff --git a/spec10/public/template/template_spec.rb b/spec10/public/template/template_spec.rb
deleted file mode 100644
index 7bf4d94..0000000
--- a/spec10/public/template/template_spec.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-# ==== Public Template API
-# Merb::Template.register_extensions(engine<Class>, extenstions<Array[String]>)
-#
-# ==== Semipublic Template API
-# Merb::Template.engine_for(path<String>)
-# Merb::Template.template_name(path<String>)
-# Merb::Template.inline_template(path<String>, mod<Module>)
-#
-# ==== Requirements for a new Template Engine
-# A Template Engine must have at least a single class method called compile_template
-# with the following parameters:
-# * path<String>:: the full path to the template being compiled
-# * name<String>:: the name of the method that will be inlined
-# * mod<Module>:: the module that the method will be inlined into
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-
-# A small structure to hold the templates so we can test the templating system in isolation
-# from the framework
-
-module Merb::Test::Fixtures
-  # This is a fake templating engine that just copies the text of the template
-  # exactly from the file
-  
-  class MyTemplateEngine
-    
-    def self.compile_template(io, name, locals, mod)
-      text = io.read
-      table = { "\r"=>"\\r", "\n"=>"\\n", "\t"=>"\\t", '"'=>'\\"', "\\"=>"\\\\" }      
-      text = (text.split("\n").map {|x| '"' + (x.gsub(/[\r\n\t"\\]/) { |m| table[m] }) + '"'}).join(" +\n")
-      mod.class_eval <<-EOS, File.expand_path(io.path)
-        def #{name}
-          #{text}
-        end
-      EOS
-    end
-    
-    module Mixin
-    end
-  end
-
-  module MyHelpers
-  end
-
-  class Environment
-    include MyHelpers
-  end
-end
-
-describe Merb::Template do
-  
-  # @public
-  it "should accept template-type registrations via #register_extensions" do
-    Merb::Template.register_extensions(Merb::Test::Fixtures::MyTemplateEngine, %w[myt])
-    Merb::Template.engine_for("foo.myt").should == Merb::Test::Fixtures::MyTemplateEngine
-    Merb::Template.template_extensions.should include("myt")
-  end
-  
-  # @semipublic
-  
-  def rendering_template(template_path)
-    Merb::Template.inline_template(File.open(template_path), [], Merb::Test::Fixtures::MyHelpers)
-    Merb::Test::Fixtures::Environment.new.
-      send(Merb::Template.template_name(template_path))  
-  end
-  alias_method :render_template, :rendering_template
-  
-  it "should compile and inline templates via #inline methods for custom languages" do
-    template_path = File.dirname(__FILE__) / "templates" / "template.html.myt"
-    rendering_template(template_path).should == "Hello world!"
-  end
-  
-  it "should compile and inline templates via #inline_template for erubis" do
-    template_path = File.dirname(__FILE__) / "templates" / "template.html.erb"
-    rendering_template(template_path).should == "Hello world!"
-  end
-  
-  it "should compile and inline templates that comes through via VirtualFile" do
-    Merb::Template.inline_template(VirtualFile.new("Hello", 
-      File.dirname(__FILE__) / "templates" / "template.html.erb"), 
-      [],
-      Merb::Test::Fixtures::MyHelpers)
-      
-    res = Merb::Test::Fixtures::Environment.new.
-      send(Merb::Template.template_name(File.dirname(__FILE__) / "templates" / "template.html.erb"))
-      
-    res.should == "Hello"
-  end
-  
-  it "should know how to correctly report errors" do
-    template_path = File.dirname(__FILE__) / "templates" / "error.html.erb"
-    running { render_template(template_path) }.should raise_error(NameError, /`foo'/)
-    begin
-      render_template(template_path)
-    rescue Exception => e
-      e.backtrace.first.match(/\/([^:\/]*:\d*)/)[1].should == "error.html.erb:2"
-    end
-  end
-  
-  it "should find the full template name for a path via #template_for" do
-    template_path = File.dirname(__FILE__) / "templates" / "template.html.erb"
-    name = Merb::Template.inline_template(File.open(template_path), [], Merb::Test::Fixtures::MyHelpers)
-    Merb::Test::Fixtures::Environment.new.should respond_to(name)
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/template/templates/error.html.erb b/spec10/public/template/templates/error.html.erb
deleted file mode 100644
index 9328606..0000000
--- a/spec10/public/template/templates/error.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-Hello
-<%= foo %>
\ No newline at end of file
diff --git a/spec10/public/template/templates/template.html.erb b/spec10/public/template/templates/template.html.erb
deleted file mode 100644
index 6769dd6..0000000
--- a/spec10/public/template/templates/template.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-Hello world!
\ No newline at end of file
diff --git a/spec10/public/template/templates/template.html.myt b/spec10/public/template/templates/template.html.myt
deleted file mode 100644
index 6769dd6..0000000
--- a/spec10/public/template/templates/template.html.myt
+++ /dev/null
@@ -1 +0,0 @@
-Hello world!
\ No newline at end of file
diff --git a/spec10/public/test/controller_matchers_spec.rb b/spec10/public/test/controller_matchers_spec.rb
deleted file mode 100644
index 1765ae4..0000000
--- a/spec10/public/test/controller_matchers_spec.rb
+++ /dev/null
@@ -1,422 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
-
-Merb.start :environment => 'test', :log_level => :fatal
-
-class TestController < Merb::Controller
-  attr_accessor :redirect_to
-  def redirect_action; redirect(@redirect_to || "/"); end
-  def success_action; end
-  def missing_action; render("i can has errorz", :status => 404); end
-
-  def redirect_with_message_action
-    redirect(@redirect_to, :message => "okey dookey")
-  end
-end
-
-describe Merb::Test::Rspec::ControllerMatchers do
-  include Merb::Test::ControllerHelper
-  before(:each) do
-    Merb::Router.prepare do |r|
-      r.match("/redirect").to(:controller => "test_controller", :action => "redirect_action")
-      r.match("/success").to(:controller => "test_controller", :action => "success_action")
-      r.match("/missing").to(:controller => "test_controller", :action => "missing_action")
-    end
-  end
-  
-  describe "#redirect" do
-    it "should work with the result of a dispatch_to helper call" do
-      dispatch_to(TestController, :redirect_action).should redirect
-    end
-    
-    it "should work with the result of a get helper call" do
-      get("/redirect").should redirect
-    end
-    
-    it "should work with a redirection code" do
-      dispatch_to(TestController, :redirect_action).status.should redirect
-    end
-  end
-  
-  describe "#redirect_to" do
-    it "should work with the result of a dispatch_to helper call" do
-      dispatch_to(TestController, :redirect_action).should redirect_to("/")
-      dispatch_to(TestController, :redirect_action){ |controller| controller.redirect_to = "http://example.com/" }.should redirect_to("http://example.com/")
-    end
-    
-    it "should work with the result of a get helper call" do
-      get("/redirect"){|controller| controller.redirect_to = "http://example.com/" }.should redirect_to("http://example.com/")
-    end
-
-    it 'takes :message option' do
-      dispatch_to(TestController, :redirect_with_message_action) { |controller|
-        controller.redirect_to = "http://example.com/"
-      }.should redirect_to("http://example.com/", :message => "okey dookey")
-    end
-  end
-  
-  describe "#respond_successfully" do
-    it "should work with the result of a dispatch_to helper call" do
-      dispatch_to(TestController, :success_action).should respond_successfully
-    end
-    
-    it "should work with the result of a get helper call" do
-      get("/success").should respond_successfully
-    end
-    
-    it "should work with a redirection code" do
-      dispatch_to(TestController, :success_action).status.should be_successful
-    end
-  end
-  
-  describe "#be_missing" do
-    it "should work with the result of a dispatch_to helper call" do
-      dispatch_to(TestController, :missing_action).should be_missing
-    end
-    
-    it "should work with the result of a get helper call" do
-      get("/missing").should be_client_error
-    end
-    
-    it "should work with a redirection code" do
-      dispatch_to(TestController, :missing_action).status.should be_missing
-    end
-  end
-end
-
-module Merb::Test::Rspec
-  module ControllerMatchers
-    class RedirectableTarget
-      attr_accessor :status, :headers
-      def initialize; @headers = {}; end
-    end
-    
-    describe BeRedirect do
-      before(:each) do
-        @target = RedirectableTarget.new
-      end
-      
-      it "should match a 301 'Moved Permanently' redirect code" do
-        BeRedirect.new.matches?(301).should be_true
-      end
-      
-      it "should match a 302 'Found' redirect code" do
-        BeRedirect.new.matches?(302).should be_true
-      end
-      
-      it "should match a 303 'See Other' redirect code" do
-        BeRedirect.new.matches?(303).should be_true
-      end
-      
-      it "should match a 304 'Not Modified' redirect code" do
-        BeRedirect.new.matches?(304).should be_true
-      end
-      
-      it "should match a 307 'Temporary Redirect' redirect code" do
-        BeRedirect.new.matches?(307).should be_true
-      end
-      
-      it "should match a target with a valid redirect code" do
-        @target.status = 301
-        
-        BeRedirect.new.matches?(@target).should be_true
-      end
-      
-      it "should not match a target with an unused redirect code" do
-        @target.status = 399
-        
-        BeRedirect.new.matches?(@target).should_not be_true
-      end
-      
-      it "should not match a target with a non redirect code" do
-        @target.status = 200
-        
-        BeRedirect.new.matches?(@target).should_not be_true
-      end
-      
-      describe "#failure_message" do
-        it "should be 'expected to redirect' when the target is a status code" do
-          matcher = BeRedirect.new
-          matcher.matches?(200)
-          matcher.failure_message.should == "expected to redirect"
-        end
-        
-        it "should be 'expected Foo#bar to redirect' when the target's controller is Foo and action is bar" do
-          matcher = BeRedirect.new
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          matcher.matches?(@target)
-          matcher.failure_message.should == "expected Foo#bar to redirect"
-        end
-      end
-      
-      describe "#negative_failure_message" do
-        it "should be 'expected not to redirect' when the target is a status code" do
-          matcher = BeRedirect.new
-          matcher.matches?(200)
-          matcher.negative_failure_message.should == "expected not to redirect"
-        end
-        
-        it "should be 'expected Foo#bar to redirect' when the target's controller is Foo and action is bar" do
-          matcher = BeRedirect.new
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          matcher.matches?(@target)
-          matcher.negative_failure_message.should == "expected Foo#bar not to redirect"
-        end
-      end
-    end
-    
-    describe "redirect_to" do
-      before(:each) do
-        @target = RedirectableTarget.new
-      end
-      
-      it "should match a target if the status code is 300 level and the locations match" do
-        @target.status = 301
-        @target.headers['Location'] = "http://example.com/"
-
-        @target.should redirect_to("http://example.com/")
-      end
-      
-      it "should not match a target if the status code is not 300 level but the locations match" do
-        @target.status = 404
-        @target.headers['Location'] = "http://example.com/"
-
-        @target.should_not redirect_to("http://example.com/")
-      end
-      
-      it "should not match a target if the status code is 300 level but the locations do not match" do
-        @target.status = 301
-        @target.headers['Location'] = "http://merbivore.com/"
-
-        @target.should_not redirect_to("http://example.com/")
-      end
-      
-      describe "#failure_message" do
-        it "should be 'expected Foo#bar to redirect to " \
-           "<http://expected.com/>, but was <http://target.com/>' " \
-           "when the expected url is http://expected.com/ and the " \
-           "target url is http://target.com/" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 301
-          @target.headers['Location'] = "http://target.com/"
-          
-          lambda { @target.should redirect_to("http://expected.com/") }.
-            should fail_with("Expected Foo#bar to redirect to " \
-                             "<http://expected.com/>, but it " \
-                             "redirected to <http://target.com/>")
-        end
-        
-        it "should be 'expected Foo#bar to redirect, but there was " \
-           "no redirection' when the target is not redirected" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 200
-          @target.headers['Location'] = "http://target.com/"
-          
-          lambda { @target.should redirect_to("http://expected.com/")}.
-            should fail_with("Expected Foo#bar to be a redirect, " \
-                             "but it returned status code 200.")
-        end
-      end
-      
-      describe "#negative_failure_message" do
-        it "should be 'expected Foo#bar not to redirect to " \
-           "<http://expected.com/>, but it did anyways" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 302
-          @target.headers['Location'] = "http://expected.com/"
-          
-          lambda { @target.should_not redirect_to("http://expected.com/") }.
-            should fail_with("Expected Foo#bar not to redirect to " \
-                             "<http://expected.com/> but it did.")
-        end
-      end
-    end
-    
-    describe "be_successful" do
-      before(:each) do
-        @target = RedirectableTarget.new
-      end
-      
-      it "should match a target with a 200 'OK' status code" do
-        200.should be_successful
-      end
-      
-      it "should match a target with a 201 'Created' status code" do
-        201.should be_successful
-      end
-      
-      it "should match a target with a 202 'Accepted' status code" do
-        202.should be_successful
-      end
-      
-      it "should match a target with a 203 'Non-Authoritative Information' status code" do
-        203.should be_successful
-      end
-      
-      it "should match a target with a 204 'No Content' status code" do
-        204.should be_successful
-      end
-      
-      it "should match a target with a 205 'Reset Content' status code" do
-        205.should be_successful
-      end
-      
-      it "should match a target with a 206 'Partial Content' status code" do
-        206.should be_successful
-      end
-      
-      it "should match a target with a 207 'Multi-Status' status code" do
-        207.should be_successful
-      end
-      
-      it "should not match a target with an unused 200 level status code" do
-        299.should_not be_successful
-      end
-      
-      it "should not match a target with a non 200 level status code" do
-        301.should_not be_successful
-      end
-      
-      describe "#failure_message" do
-        it "should be 'expected to be successful but was 300' when the target is status code 300" do
-          lambda { 300.should be_successful }.should fail_with(
-            "Expected status code to be successful, but it was 300")
-        end
-        
-        it "should be 'expected Foo#bar to be successful but was 404' when the target is controller-ish" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 404
-          
-          lambda { @target.should be_successful }.
-            should fail_with("Expected Foo#bar to be successful, " \
-                             "but it returned a 404")
-        end
-      end
-      
-      describe "#negative_failure_message" do
-        it "should be 'expected not to be successful but it was' when the target is a 200 status code" do
-          
-          lambda { 302.should be_successful }.
-            should fail_with("Expected status code to be successful, " \
-                             "but it was 302")
-        end
-        
-        it "should be 'expected Foo#bar not to be successful but it was 200' when the target is controller-ish" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 200
-          
-          lambda { @target.should_not be_successful }.
-            should fail_with("Expected Foo#bar not to be successful, " \
-                             "but it returned a 200")
-        end
-      end
-    end
-    
-    describe "be_missing" do
-      before(:each) do
-        @target = RedirectableTarget.new
-      end
-      
-      it "should match a 400 'Bad Request'" do
-        400.should be_missing
-      end
-      
-      it "should match a 401 'Unauthorized'" do
-        401.should be_missing
-      end
-      
-      it "should match a 403 'Forbidden'" do
-        402.should be_missing
-      end
-      
-      it "should match a 404 'Not Found'" do
-        404.should be_missing
-      end
-      
-      it "should match a 409 'Conflict'" do
-        409.should be_missing
-      end
-      
-      it "should match a target with a valid client side error code" do
-        @target.status = 404
-        @target.should be_missing
-      end
-      
-      it "should not match a target with an unused client side error code" do
-        @target.status = 499
-        @target.should_not be_missing
-      end
-      
-      it "should not match a target with a non client side error code" do
-        @target.status = 200
-        @target.should_not be_missing
-      end
-      
-      describe "#failure_message" do
-        it "should be 'expected to be missing but was 300' when the target is status code 300" do
-          lambda { 300.should be_missing }.
-            should fail_with("Expected a missing error code, but got 300")
-        end
-        
-        it "should be 'expected Foo#bar to be successful but was 301' when the target is controller-ish" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 301
-          
-          lambda { @target.should be_missing }.
-            should fail_with("Expected Foo#bar to be missing, " \
-                             "but it returned a 301")
-        end
-      end
-      
-      describe "#negative_failure_message" do
-        it "should be 'expected not to be successful but it was' when the target is a 400 status code" do
-          
-          lambda { 400.should_not be_missing }.
-            should fail_with("Expected not to get a missing error code, " \
-                             "but got 400")
-        end
-        
-        it "should be 'expected Foo#bar not to be missing but it was 404' when the target is controller-ish" do
-          @target.stub!(:controller_name).and_return :Foo
-          @target.stub!(:action_name).and_return :bar
-          @target.status = 404
-          
-          lambda { @target.should_not be_missing }.
-            should fail_with("Expected Foo#bar not to be missing, " \
-                             "but it returned a 404")
-        end
-      end
-    end
-
-    describe Provide do
-      class TestController < Merb::Controller
-        provides :xml
-      end
-
-      it 'should match for formats a controller class provides' do
-        Provide.new( :xml ).matches?( TestController ).should be_true
-      end
-
-      it 'should match for formats a controller instance provides' do
-        t = TestController.new( fake_request )
-        Provide.new( :xml ).matches?( t ).should be_true
-      end
-
-      it 'should not match for formats a controller class does not provide' do
-        Provide.new( :yaml ).matches?( TestController ).should be_false
-      end
-
-      it 'should not match for formats a controller instance does not provide' do
-        t = TestController.new( fake_request )
-        Provide.new( :yaml ).matches?( t ).should be_false
-      end
-    end
-  end
-end
diff --git a/spec10/public/test/controllers/controller_assertion_mock.rb b/spec10/public/test/controllers/controller_assertion_mock.rb
deleted file mode 100644
index f157222..0000000
--- a/spec10/public/test/controllers/controller_assertion_mock.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class Merb::Test::ControllerAssertionMock
-  
-  def self.called(action)
-    return action
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/test/controllers/dispatch_controller.rb b/spec10/public/test/controllers/dispatch_controller.rb
deleted file mode 100644
index f74187c..0000000
--- a/spec10/public/test/controllers/dispatch_controller.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class Merb::Test::DispatchController < Merb::Controller
-  
-  def index
-    Merb::Test::ControllerAssertionMock.called(:index)
-  end
-  
-  def show
-    Merb::Test::ControllerAssertionMock.called(:show)
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/test/controllers/request_controller.rb b/spec10/public/test/controllers/request_controller.rb
deleted file mode 100644
index eecaa76..0000000
--- a/spec10/public/test/controllers/request_controller.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-module Merb::Test
-  class RequestController < Merb::Controller
-    
-    def request_method
-      "Method - #{request.method.to_s.upcase}"
-    end
-    
-    def document
-      '<html><body><div id="out"><div class="in">Hello</div></div></body></html>'
-    end
-    
-    def counter
-      value = (cookies[:counter] || 0).to_i + 1
-      cookies[:counter] = value
-      value
-    end
-    
-    def delete
-      cookies.delete(:counter)
-      "Delete"
-    end
-    
-    def domain
-      value = (cookies[:counter] || 0).to_i + 1
-      set_cookie :counter, value, :domain => "foo.example.org"
-      value
-    end
-    
-    def path
-      value = (cookies[:counter] || 0).to_i + 1
-      set_cookie :counter, value, :path => "/path/zomg"
-      value
-    end
-    
-    def expires
-      value = (cookies[:counter] || 0).to_i + 1
-      set_cookie :counter, value, :expires => Time.now
-      value
-    end
-    
-    def set
-      set_cookie :cookie, request.path, :path => request.path
-      "Setting"
-    end
-    
-    def get
-      cookies[:cookie]
-    end
-    
-    def domain_set
-      set_cookie :cookie, request.host, :domain => request.host
-      "SET"
-    end
-    
-    def domain_get
-      cookies[:cookie]
-    end
-    
-    # Don't actually set any cookies
-    def void
-      "Void"
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/test/controllers/spec_helper_controller.rb b/spec10/public/test/controllers/spec_helper_controller.rb
deleted file mode 100644
index 96851d6..0000000
--- a/spec10/public/test/controllers/spec_helper_controller.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-class SpecHelperController < Merb::Controller
-  
-  def index
-    Merb::Test::ControllerAssertionMock.called(:index)
-  end
-  
-  def show
-    Merb::Test::ControllerAssertionMock.called(:show)
-  end
-  
-  def edit
-    Merb::Test::ControllerAssertionMock.called(:edit)
-  end
-  
-  def new
-    Merb::Test::ControllerAssertionMock.called(:new)
-  end
-  
-  def create
-    Merb::Test::ControllerAssertionMock.called(:create)
-  end
-  
-  def update
-    Merb::Test::ControllerAssertionMock.called(:update)
-  end
-  
-  def destroy
-    Merb::Test::ControllerAssertionMock.called(:destroy)
-  end  
-end
-
-module Namespaced
-  class SpecHelperController < Merb::Controller
-    def index
-      Merb::Test::ControllerAssertionMock.called(:index)
-    end
-  end
-end  
-        
\ No newline at end of file
diff --git a/spec10/public/test/mock_request_helper_spec.rb b/spec10/public/test/mock_request_helper_spec.rb
deleted file mode 100644
index be1c43e..0000000
--- a/spec10/public/test/mock_request_helper_spec.rb
+++ /dev/null
@@ -1,269 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-Merb.start :environment => 'test', :log_level => :fatal
-
-Dir[File.join(File.dirname(__FILE__), "controllers/**/*.rb")].each do |f|
-  require f
-end
-
-describe Merb::Test::RequestHelper do
-  
-  describe Merb::Test::RequestHelper::CookieJar do
-    
-    it "should update its values from a request object" do
-      cookie_jar = Merb::Test::RequestHelper::CookieJar.new
-      cookie_jar.should be_empty
-      request = fake_request
-      request.cookies[:foo] = "bar+baz" # escaped by default
-      cookie_jar.update_from_request request
-      cookie_jar[:foo].should == 'bar baz'
-    end
-    
-  end  
-  
-  describe "#dispatch_to" do
-
-    before(:all) do
-      @controller_klass = Merb::Test::DispatchController
-    end
-
-    it "should dispatch to the given controller and action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-
-      dispatch_to(@controller_klass, :index)
-    end
-
-    it "should dispatch to the given controller and action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_to(@controller_klass, :show, :name => "Fred")
-      controller.params[:name].should == "Fred"
-    end
-
-    it "should dispatch to the given controller and action with the query string merged into the params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-      controller = dispatch_to(@controller_klass, :show, {:name => "Fred"}, {'QUERY_STRING' => "last_name=Jones&age=42"} )
-      
-      controller.params[:name].should == "Fred"
-      controller.params[:last_name].should == "Jones"
-      controller.params[:age].should == "42"   
-    end
-
-    it "should not hit the router to match its route" do
-      Merb::Router.should_not_receive(:match)
-      dispatch_to(@controller_klass, :index)
-    end
-    
-    it "merges :controller into params" do
-      controller = dispatch_to(@controller_klass, :show, :name => "Fred")
-      
-      controller.params[:controller].should == @controller_klass.name.to_const_path
-    end
-    
-    it "merges :action into params" do
-      controller = dispatch_to(@controller_klass, :show, :name => "Fred")
-      
-      controller.params[:action].should == "show"
-    end
-
-    it "should support setting request.raw_post" do
-      controller = dispatch_to(@controller_klass, :show, {}, {:post_body => 'some XML'})
-      controller.request.raw_post.should == 'some XML'
-    end
-  end
-  
-  describe "#dispatch_with_basic_authentication_to" do
-
-    before(:all) do
-      @controller_klass = Merb::Test::DispatchController
-    end
-
-    it "should dispatch to the given controller and action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-
-      dispatch_with_basic_authentication_to(@controller_klass, :index, "Fred", "secret")
-    end
-
-    it "should dispatch to the given controller and action with authentication token" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_with_basic_authentication_to(@controller_klass, :show, "Fred", "secret")
-
-      controller.request.env["X_HTTP_AUTHORIZATION"].should == "Basic #{Base64.encode64("Fred:secret")}"
-    end
-    
-    it "should dispatch to the given controller and action with authentication token and params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_with_basic_authentication_to(@controller_klass, :show, "Fred", "secret", :name => "Fred")
-
-      controller.request.env["X_HTTP_AUTHORIZATION"].should == "Basic #{Base64.encode64("Fred:secret")}"
-      controller.params[:name].should == "Fred"
-    end
-
-    it "should not hit the router to match its route" do
-      Merb::Router.should_not_receive(:match)
-      dispatch_with_basic_authentication_to(@controller_klass, :index, "Fred", "secret")
-    end
-  end
-
-  describe "#get" do
-    before(:each) do 
-      Merb::Router.prepare do |r| 
-        r.resources :spec_helper_controller
-        r.match("/:controller/:action/:custom").to(:controller => ":controller") 
-      end
-    end
-
-    it "should perform the index action when used with a get" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-      get("/spec_helper_controller")  
-    end
-
-    it "should perform the index action and have params available" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-      controller = get("/spec_helper_controller", :name => "Harry")
-      controller.params[:name].should == "Harry"    
-    end
-    
-    it "should perform the index action and have params available from the query string" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-      controller = get("/spec_helper_controller?last_name=Oswald&age=25", :name => "Harry")
-      controller.params[:name].should == "Harry"
-      controller.params[:last_name].should == "Oswald"
-      controller.params[:age].should == "25"
-    end
-
-    it "should evaluate in the context of the controller in the block" do
-      get("/spec_helper_controller") do |controller|
-        controller.class.should == SpecHelperController
-      end    
-    end
-
-    it "should allow for custom router params" do
-      controller = get("/spec_helper_controller/index/my_custom_stuff")
-      controller.params[:custom].should == "my_custom_stuff"    
-    end   
-
-    it "should get the show action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-      controller = get("/spec_helper_controller/my_id")
-      controller.params[:id].should == "my_id"    
-    end
-  end
-
-  describe "#post" do
-    before(:each) do
-      Merb::Router.prepare do |r|
-        r.resources :spec_helper_controller
-      end
-    end
-
-    it "should post to the create action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      post("/spec_helper_controller")
-    end
-
-    it "should post to the create action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      controller = post("/spec_helper_controller", :name => "Harry")
-      controller.params[:name].should == "Harry"
-    end
-  end
-
-  describe "#put" do
-    before(:each) do
-      Merb::Router.prepare do |r|
-        r.resources :spec_helper_controller
-      end
-    end
-    it "should put to the update action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      put("/spec_helper_controller/1")
-    end
-
-    it "should put to the update action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      controller = put("/spec_helper_controller/my_id", :name => "Harry")
-      controller.params[:name].should == "Harry"
-      controller.params[:id].should   == "my_id"
-    end
-  end
-
-  describe "#delete" do
-    before(:each) do
-      Merb::Router.prepare do |r|
-        r.resources :spec_helper_controller
-      end
-    end
-    it "should put to the update action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:destroy)
-      delete("/spec_helper_controller/1")
-    end
-
-    it "should put to the update action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:destroy)
-      controller = delete("/spec_helper_controller/my_id", :name => "Harry")
-      controller.params[:name].should == "Harry"
-      controller.params[:id].should   == "my_id"
-    end
-  end
-  
-  describe "#request" do
-    before(:each) do 
-      Merb::Router.prepare do |r| 
-        r.namespace :namespaced do |namespaced|
-          namespaced.resources :spec_helper_controller
-        end
-      end
-    end
-    
-    it "should support setting request.raw_post" do
-      controller = mock_request("/namespaced/spec_helper_controller", {}, {:post_body => 'some XML'})
-      controller.request.raw_post.should == 'some XML'
-    end
-
-    it "should get namespaced index action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-      controller = mock_request("/namespaced/spec_helper_controller")
-      controller.class.should == Namespaced::SpecHelperController
-    end
-
-    it "should make the post body available in the request on deferred routing" do
-      Merb::Router.prepare do |r|
-        r.match('/xmlrpc').defer_to do |request, params|
-          request.raw_post.should == 'XMLRPC request body'
-          {:controller => 'spec_helper_controller', :action => :index}
-        end
-      end
-
-      mock_request('/xmlrpc', {}, {:post_body => 'XMLRPC request body'})
-    end
-  end
-  
-end
-
-module Merb::Test::RequestHelper
-  describe FakeRequest, ".new(env = {}, req = StringIO.new)" do
-    it "should create request with default enviroment, minus rack.input" do
-      @mock = FakeRequest.new
-      @mock.env.except('rack.input').should == FakeRequest::DEFAULT_ENV
-    end
-
-    it "should override default env values passed in HTTP format" do
-      @mock = FakeRequest.new('HTTP_ACCEPT' => 'nothing')
-      @mock.env['HTTP_ACCEPT'].should == 'nothing'
-    end
-
-    it "should override default env values passed in symbol format" do
-      @mock = FakeRequest.new(:http_accept => 'nothing')
-      @mock.env['HTTP_ACCEPT'].should == 'nothing'
-    end
-
-    it "should set rack input to an empty StringIO" do
-      @mock = FakeRequest.new
-      @mock.env['rack.input'].should be_kind_of(StringIO)
-      @mock.env['rack.input'].read.should == ''
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/test/multipart_request_helper_spec.rb b/spec10/public/test/multipart_request_helper_spec.rb
deleted file mode 100644
index 11e1d13..0000000
--- a/spec10/public/test/multipart_request_helper_spec.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-Merb.start :environment => 'test', :log_level => :fatal
-
-Dir[File.join(File.dirname(__FILE__), "controllers/**/*.rb")].each do |f|
-  require f
-end
-
-describe Merb::Test::MultipartRequestHelper do
-
-  describe "#dispatch_multipart_to" do
-
-    before(:all) do 
-      @controller_klass = Merb::Test::DispatchController
-    end
-
-    it "should dispatch to the given controller and action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:index)
-
-      dispatch_multipart_to(@controller_klass, :index)    
-    end
-
-    it "should dispatch to the given controller and action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-
-      controller = dispatch_multipart_to(@controller_klass, :show, :name => "Fred")
-      controller.params[:name].should == "Fred"
-    end
-
-    it "should handle a file object when used as a param" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:show)
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        controller = dispatch_multipart_to(@controller_klass, :show, :my_file => file)
-        file_params = controller.params[:my_file]
-        file_params[:content_type].should == "text/plain"
-        file_params[:size].should == File.size(file_name)
-        file_params[:tempfile].should be_a_kind_of(Tempfile)
-        file_params[:filename].should == "multipart_upload_text_file.txt"
-      end
-    end
-  end
-
-  describe "#multipart_post" do
-    before(:each) do
-      Merb::Router.prepare do |r|
-        r.resources :spec_helper_controller
-      end
-    end
-  
-    it "should post to the create action" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      multipart_post("/spec_helper_controller")
-    end
-  
-    it "should post to the create action with params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      controller = multipart_post("/spec_helper_controller", :name => "Harry")
-      controller.params[:name].should == "Harry"
-    end
-  
-    it "should upload a file to the action using multipart" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:create)
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        controller = multipart_post("/spec_helper_controller", :my_file => file)
-        file_params = controller.params[:my_file]
-        file_params[:content_type].should == "text/plain"
-        file_params[:size].should == File.size(file_name)
-        file_params[:tempfile].should be_a_kind_of(Tempfile)
-        file_params[:filename].should == "multipart_upload_text_file.txt"
-      end
-    end
-  
-  end
-
-  describe "#multipart_put" do
-    before(:each) do
-      Merb::Router.prepare do |r|
-        r.resources :spec_helper_controller
-      end
-    end
-    it "should put to the update action multipart" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      multipart_put("/spec_helper_controller/1")
-    end
-  
-    it "should put to the update action with multipart params" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      controller = multipart_put("/spec_helper_controller/my_id", :name => "Harry")
-      controller.params[:name].should == "Harry"
-      controller.params[:id].should   == "my_id"
-    end
-  
-    it "should upload a file to the action using multipart" do
-      Merb::Test::ControllerAssertionMock.should_receive(:called).with(:update)
-      file_name = File.join(File.dirname(__FILE__), "multipart_upload_text_file.txt")
-      File.open( file_name ) do |file|
-        controller = multipart_put("/spec_helper_controller/my_id", :my_file => file)
-        controller.params[:id].should == "my_id"
-        file_params = controller.params[:my_file]
-        file_params[:content_type].should == "text/plain"
-        file_params[:size].should == File.size(file_name)
-        file_params[:tempfile].should be_a_kind_of(Tempfile)
-        file_params[:filename].should == "multipart_upload_text_file.txt"
-      end
-    end
-  end
-end
-
-module Merb::Test::MultipartRequestHelper
-  describe Param, '#to_multipart' do
-    it "should represent the key and value correctly" do
-      param = Param.new('foo', 'bar')
-      param.to_multipart.should == %(Content-Disposition: form-data; name="foo"\r\n\r\nbar\r\n)
-    end
-  end
-
-  describe FileParam, '#to_multipart' do
-    it "should represent the key, filename and content correctly" do
-      param = FileParam.new('foo', '/bar.txt', 'baz')
-      param.to_multipart.should == %(Content-Disposition: form-data; name="foo"; filename="/bar.txt"\r\nContent-Type: text/plain\r\n\r\nbaz\r\n)
-    end
-  end
-
-  describe Post, '#push_params(params) param parsing' do
-    before(:each) do
-      @fake_return_param = mock('fake return_param')
-    end
-
-    it "should create Param from params when param doesn't respond to read" do
-      params = { 'normal' => 'normal_param' }
-      Param.should_receive(:new).with('normal', 'normal_param').and_return(@fake_return_param)
-      Post.new.push_params(params)
-    end
-  
-    it "should create FileParam from params when param does response to read" do
-      file_param = mock('file param')
-      file_param.should_receive(:read).and_return('file contents')
-      file_param.should_receive(:path).and_return('file.txt')
-      params = { 'file' => file_param }
-      FileParam.should_receive(:new).with('file', 'file.txt', 'file contents').and_return(@fake_return_param)
-      Post.new.push_params(params)
-    end
-  end
-  
-  describe Post, '#to_multipart' do
-    it "should create a multipart request from the params" do
-      file_param = mock('file param')
-      file_param.should_receive(:read).and_return('file contents')
-      file_param.should_receive(:path).and_return('file.txt')
-      params = { 'file' => file_param, 'normal' => 'normal_param' }
-      multipart = Post.new(params)
-      query, content_type = multipart.to_multipart
-      content_type.should == "multipart/form-data, boundary=----------0xKhTmLbOuNdArY"
-      query.should == "------------0xKhTmLbOuNdArY\r\nContent-Disposition: form-data; name=\"file\"; filename=\"file.txt\"\r\nContent-Type: text/plain\r\n\r\nfile contents\r\n------------0xKhTmLbOuNdArY\r\nContent-Disposition: form-data; name=\"normal\"\r\n\r\nnormal_param\r\n------------0xKhTmLbOuNdArY--"
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/test/multipart_upload_text_file.txt b/spec10/public/test/multipart_upload_text_file.txt
deleted file mode 100644
index 1875338..0000000
--- a/spec10/public/test/multipart_upload_text_file.txt
+++ /dev/null
@@ -1 +0,0 @@
-File With Some Text In It For Testing Multipart Uploads
diff --git a/spec10/public/test/request_helper_spec.rb b/spec10/public/test/request_helper_spec.rb
deleted file mode 100644
index 43b0512..0000000
--- a/spec10/public/test/request_helper_spec.rb
+++ /dev/null
@@ -1,124 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-Merb.start :environment => 'test', :log_level => :fatal
-
-require File.dirname(__FILE__) / "controllers/request_controller"
-
-describe Merb::Test::RequestHelper do
-  
-  before(:each) do
-    Merb::Controller._default_cookie_domain = "example.org"
-    
-    Merb::Router.prepare do
-      with(:controller => "merb/test/request_controller") do
-        match("/set/short/long/read").to(:action => "get")
-        match("/:action(/:junk)", :junk => ".*").register
-      end
-    end
-  end
-  
-  it "should dispatch a request using GET by defalt" do
-    request("/request_method").should have_body("Method - GET")
-  end
-  
-  it "should work with have_selector" do
-    request("/document").should have_selector("div div")
-  end
-  
-  it "should work with have_xpath" do
-    request("/document").should have_xpath("//div/div")
-  end
-  
-  it "should work with have_content" do
-    request("/request_method").should contain("Method")
-  end
-  
-  it "should persist cookies across sequential cookie setting requests" do
-    request("/counter").should have_body("1")
-    request("/counter").should have_body("2")
-  end
-  
-  it "should persist cookies across requests that don't return any cookie headers" do
-    request("/counter").should have_body("1")
-    request("/void").should    have_body("Void")
-    request('/counter').should have_body("2")
-  end
-  
-  it "should delete cookies from the jar" do
-    request("/counter").should have_body("1")
-    request("/delete").should  have_body("Delete")
-    request("/counter").should have_body("1")
-  end
-  
-  it "should be able to disable the cookie jar" do
-    request("/counter", :jar => nil).should have_body("1")
-    request("/counter", :jar => nil).should have_body("1")
-    request("/counter").should have_body("1")
-    request("/counter").should have_body("2")
-  end
-  
-  it "should be able to specify separate jars" do
-    request("/counter", :jar => :one).should have_body("1")
-    request("/counter", :jar => :two).should have_body("1")
-    request("/counter", :jar => :one).should have_body("2")
-    request("/counter", :jar => :two).should have_body("2")
-  end
-  
-  it "should respect cookie domains when no domain is explicitly set" do
-    request("http://example.org/counter").should     have_body("1")
-    request("http://www.example.org/counter").should have_body("2")
-    request("http://example.org/counter").should     have_body("3")
-    request("http://www.example.org/counter").should have_body("4")
-  end
-  
-  it "should respect the domain set in the cookie" do
-    request("http://example.org/domain").should     have_body("1")
-    request("http://foo.example.org/domain").should have_body("1")
-    request("http://example.org/domain").should     have_body("1")
-    request("http://foo.example.org/domain").should have_body("2")
-  end
-  
-  it "should respect the path set in the cookie" do
-    request("/path").should      have_body("1")
-    request("/path/zomg").should have_body("1")
-    request("/path").should      have_body("1")
-    request("/path/zomg").should have_body("2")
-  end
-  
-  it "should use the most specific path cookie" do
-    request("/set/short")
-    request("/set/short/long")
-    request("/set/short/long/read").should have_body("/set/short/long")
-  end
-  
-  it "should use the most specific path cookie even if it was defined first" do
-    request("/set/short/long")
-    request("/set/short")
-    request("/set/short/long/read").should have_body("/set/short/long")
-  end
-  
-  it "should leave the least specific cookie intact when specifying a more specific path" do
-    request("/set/short")
-    request("/set/short/long/zomg/what/hi")
-    request("/set/short/long/read").should have_body("/set/short")
-  end
-  
-  it "should use the most specific domain cookie" do
-    request("http://test.com/domain_set")
-    request("http://one.test.com/domain_set")
-    request("http://one.test.com/domain_get").should have_body("one.test.com")
-  end
-  
-  it "should keep the less specific domain cookie" do
-    request("http://test.com/domain_set").should be_successful
-    request("http://one.test.com/domain_set").should be_successful
-    request("http://test.com/domain_get").should have_body("test.com")
-  end
-  
-  it "should respect the expiration" do
-    request("/expires").should have_body("1")
-    sleep(1)
-    request("/expires").should have_body("1")
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/test/route_helper_spec.rb b/spec10/public/test/route_helper_spec.rb
deleted file mode 100644
index b28426c..0000000
--- a/spec10/public/test/route_helper_spec.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-class TestController < Merb::Controller
-  def get(id = nil); end
-  def post; end
-end
-
-describe Merb::Test::RouteHelper do
-  include Merb::Test::RouteHelper
-  
-  before(:each) do
-    Merb::Router.prepare do
-      match("/").defer_to do |request, params|
-        { :controller => 'test_controller', :action => request.raw_post } unless request.raw_post.blank?
-      end
-      match("/", :method => :get).to(:controller => "test_controller", :action => "get").name(:getter)
-      match("/", :method => :post).to(:controller => "test_controller", :action => "post")
-      match("/:id").to(:controller => "test_controller", :action => "get").name(:with_id)
-      default_routes
-    end
-  end
-  
-  describe "#url" do
-    it "should use Merb::Router" do
-      url(:getter).should == "/"
-    end
-    
-    it "should work with a parameters hash" do
-      url(:with_id, :id => 123).should == "/123"
-    end
-    
-    it "should turn extra hash items into query params" do
-      generated_url = url(:getter, :id => 123, :color => 'red', :size => 'large')
-      lambda {
-        generated_url.match(/\bid=123\b/) &&
-        generated_url.match(/\bsize=large\b/) &&
-        generated_url.match(/\bcolor=red\b/)
-      }.call.should_not be_nil
-    end
-    
-    it "should remove items with nil values from query params" do
-      url(:getter, :color => nil, :size => 'large').should == "/?size=large"
-    end
-    
-    it "should remove items with nil values from query params when named route isn't specified" do
-      url(:controller => 'cont', :action => 'act', :color => nil, :size => 'large').should == "/cont/act?size=large"
-    end
-  end
-  
-  describe "#request_to" do
-    it "should GET if no method is given" do
-      request_to("/")[:action].should == "get"
-    end
-    
-    it "should return a hash" do
-      Hash.should === request_to("/")
-    end
-    
-    it "should contain the controller in the result" do
-      request_to("/")[:controller].should == "test_controller"
-    end
-    
-    it "should contain the action in the result" do
-      request_to("/")[:action].should == "get"
-    end
-    
-    it "should contain any parameters in the result" do
-      request_to("/123")[:id].should == "123"
-    end
-
-    it "should play nice with raw_post in deferred routing" do
-      request_to("/", :post, {:post_body => 'deferred'})[:action].should == 'deferred'
-    end
-  end
-end
diff --git a/spec10/public/test/route_matchers_spec.rb b/spec10/public/test/route_matchers_spec.rb
deleted file mode 100644
index 4a9d70c..0000000
--- a/spec10/public/test/route_matchers_spec.rb
+++ /dev/null
@@ -1,168 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-Merb.start :environment => 'test', :log_level => :fatal
-
-class TestController < Merb::Controller
-  def get(id = nil); end
-  def post(version = nil); end
-end
-
-class IDish
-  attr_accessor :id
-  alias_method :to_param, :id
-
-  def initialize(id)
-    @id = id
-  end
-end
-
-describe Merb::Test::Rspec::RouteMatchers do
-  include Merb::Test::RouteHelper
-
-  before(:each) do
-    Merb::Router.prepare do |r|
-      r.match(%r"/v(\d+\.\d+)", :method => :post).to(:controller => "test_controller", :action => "post", :version => "[1]")
-      r.match("/", :method => :get).to(:controller => "test_controller", :action => "get").name(:getter)
-      r.match("/", :method => :post).to(:controller => "test_controller", :action => "post")
-      identify :id do
-        r.match("/:id").to(:controller => "test_controller", :action => "get").name(:with_id)
-      end
-    end
-  end
-
-  describe "#route_to" do
-    it "should work with the request_to helper" do
-      request_to("/", :get).should route_to(TestController, :get)
-      request_to("/", :post).should_not route_to(TestController, :get)
-    end
-
-    it "should work with the url helper and ParamMatcher" do
-      idish = IDish.new(rand(1000).to_s)
-      
-      request_to(url(:with_id, idish)).should route_to(TestController, :get).with(idish)
-    end
-
-    it "should work with a negative ParamMatcher" do
-      request_to(url(:with_id, :id => 100)).should_not route_to(TestController, :get).with(:id => 1)
-    end
-
-    it "should work with a route containing a regexp" do
-      request_to("/v1.2", :post).should route_to(TestController, :post).with(:version => "1.2")
-      request_to("/v1.0", :post).should_not route_to(TestController, :post).with(:version => "3.14")
-    end
-  end
-
-  module Merb::Test::Rspec::RouteMatchers
-
-    describe RouteToMatcher do
-
-      it "should work with snake cased controllers" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "test_controller", :action => "get").should be_true
-      end
-
-      it "should work with camel cased controllers" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "TestController", :action => "get").should be_true
-      end
-
-      it "should work with symbol or string controller name" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "test_controller", :action => "get").should be_true
-        RouteToMatcher.new(TestController, :get).matches?(:controller => :test_controller, :action => :get)
-      end
-
-      it "should not pass if the controllers do not match" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "other_controller", :action => "get").should be_false
-      end
-
-      it "should not pass if the actions do not match" do
-        RouteToMatcher.new(TestController, :get).matches?(:controller => "test_controller", :action => "post").should be_false
-      end
-
-      it "should not pass if the parameters do not the ParameterMatcher" do
-        route_matcher = RouteToMatcher.new(TestController, :get)
-        route_matcher.with(:id => "123")
-
-        route_matcher.matches?(:controller => "test_case", :action => "get", :id => "456").should be_false
-      end
-
-      describe "#with" do
-        it "should add a ParameterMatcher" do
-          ParameterMatcher.should_receive(:new).with(:id => "123")
-
-          route_matcher = RouteToMatcher.new(TestController, :get)
-          route_matcher.with(:id => "123")
-        end
-
-        it "should work with an empty expectation" do
-          ParameterMatcher.new({}).matches?(:param => "abc").should be_false
-        end
-      end
-
-      describe "#failure_message" do
-        it "should include the expected controller and action" do
-          matcher = RouteToMatcher.new(TestController, :any_action)
-          matcher.matches?(:controller => "target_controller", :action => "target_action")
-          matcher.failure_message.should include("TestController#any_action")
-        end
-
-        it "should include the target controller and action in camel case" do
-          matcher = RouteToMatcher.new(TestController, :any_action)
-          matcher.matches?(:controller => "target_controller", :action => "target_action")
-          matcher.failure_message.should include("TargetController#target_action")
-        end
-
-        it "should include the expected parameters" do
-          expected_parameters = {:id => '123', :page => '2'}
-          matcher = RouteToMatcher.new(TestController, :any_action)
-          matcher.with(expected_parameters)
-          matcher.matches?(:controller => "target_controller", :action => "target_action")
-          matcher.failure_message.should include(expected_parameters.inspect)
-        end
-
-        it "should include the actual paramters" do
-          expected_parameters, actual_parameters = {:id => '123', :page => '2'}, {:id => '2', :page => '321'}
-          matcher = RouteToMatcher.new(TestController, :any_action)
-          matcher.with(expected_parameters)
-          matcher.matches?(actual_parameters.merge(:controller => "test_controller", :action => "any_action"))
-          matcher.failure_message.should include(actual_parameters.inspect)
-        end
-      end
-
-      describe "#negative_failure_message" do
-        it "should include the expected controller and action" do
-          RouteToMatcher.new(TestController, :any_action).negative_failure_message.should include("TestController#any_action")
-        end
-      end
-    end
-
-    describe ParameterMatcher do
-      it "should work with a Hash as the parameter argument" do
-        ParameterMatcher.new(:param => "abc").matches?(:param => "abc").should be_true
-      end
-
-      it "should work with an object as the parameter argument" do
-        ParameterMatcher.new(IDish.new(1234)).matches?(:id => 1234).should be_true
-      end
-
-      describe "#failure_message" do
-        it "should include the expected parameters hash" do
-          parameter_hash = {:parent_id => "123", :child_id => "abc"}
-          ParameterMatcher.new(parameter_hash).failure_message.should include(parameter_hash.inspect)
-        end
-
-        it "should include the actual parameters hash" do
-          parameter_hash = {:parent_id => "123", :child_id => "abc"}
-          matcher = ParameterMatcher.new(:id => 123)
-          matcher.matches?(parameter_hash)
-          matcher.failure_message.should include(parameter_hash.inspect)
-        end
-      end
-
-      describe "#negative_failure_message" do
-        it "should include the expected parameters hash" do
-          parameter_hash = {:parent_id => "123", :child_id => "abc"}
-          ParameterMatcher.new(parameter_hash).negative_failure_message.should include(parameter_hash.inspect)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/test/rspec_ext_spec.rb b/spec10/public/test/rspec_ext_spec.rb
deleted file mode 100644
index 0c32618..0000000
--- a/spec10/public/test/rspec_ext_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-given "we set an ivar" do
-  @foo = 7
-end
-
-describe "a spec that reuses a given block", :given => "we set an ivar" do
-  it "sees the results of the given block" do
-    @foo.should == 7
-  end
-end
-
-describe "a spec that does not reuse a given block" do
-  it "does not see the given block" do
-    @foo.should == nil
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/test/spec_helper.rb b/spec10/public/test/spec_helper.rb
deleted file mode 100644
index 2088625..0000000
--- a/spec10/public/test/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
\ No newline at end of file
diff --git a/spec10/public/webrat/spec_helper.rb b/spec10/public/webrat/spec_helper.rb
deleted file mode 100644
index 2088625..0000000
--- a/spec10/public/webrat/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec_helper"))
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/Rakefile b/spec10/public/webrat/test_app/Rakefile
deleted file mode 100644
index a760c99..0000000
--- a/spec10/public/webrat/test_app/Rakefile
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'rubygems'
-require 'rake/rdoctask'
-
-require 'merb-core'
-require 'merb-core/tasks/merb'
-
-include FileUtils
-
-# Load the basic runtime dependencies; this will include 
-# any plugins and therefore plugin rake tasks.
-init_env = ENV['MERB_ENV'] || 'rake'
-Merb.load_dependencies(:environment => init_env)
-     
-# Get Merb plugins and dependencies
-Merb::Plugins.rakefiles.each { |r| require r } 
-
-# Load any app level custom rakefile extensions from lib/tasks
-tasks_path = File.join(File.dirname(__FILE__), "lib", "tasks")
-rake_files = Dir["#{tasks_path}/*.rake"]
-rake_files.each{|rake_file| load rake_file }
-
-desc "Start runner environment"
-task :merb_env do
-  Merb.start_environment(:environment => init_env, :adapter => 'runner')
-end
-
-require 'spec/rake/spectask'
-require 'merb-core/test/tasks/spectasks'
-desc 'Default: run spec examples'
-task :default => 'spec'
-
-##############################################################################
-# ADD YOUR CUSTOM TASKS IN /lib/tasks
-# NAME YOUR RAKE FILES file_name.rake
-##############################################################################
diff --git a/spec10/public/webrat/test_app/app/controllers/application.rb b/spec10/public/webrat/test_app/app/controllers/application.rb
deleted file mode 100644
index 5ce39a0..0000000
--- a/spec10/public/webrat/test_app/app/controllers/application.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class Application < Merb::Controller
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/app/controllers/exceptions.rb b/spec10/public/webrat/test_app/app/controllers/exceptions.rb
deleted file mode 100644
index 4fdb566..0000000
--- a/spec10/public/webrat/test_app/app/controllers/exceptions.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-class Exceptions < Merb::Controller
-  
-  # handle NotFound exceptions (404)
-  def not_found
-    render :format => :html
-  end
-
-  # handle NotAcceptable exceptions (406)
-  def not_acceptable
-    render :format => :html
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/app/controllers/testing.rb b/spec10/public/webrat/test_app/app/controllers/testing.rb
deleted file mode 100644
index 81417d6..0000000
--- a/spec10/public/webrat/test_app/app/controllers/testing.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-class Testing < Application
-
-  # ...and remember, everything returned from an action
-  # goes to the client...
-  def index
-    render
-  end
-  
-  def next
-    "<p>Got to next</p>"
-  end
-  
-  def show_form
-    render
-  end
-  
-  def submit_form
-    render(params.map do |param, value|
-      "<p>#{param}: #{value}</p>"
-    end.join("\n"))
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/app/helpers/global_helpers.rb b/spec10/public/webrat/test_app/app/helpers/global_helpers.rb
deleted file mode 100644
index 9c9e5aa..0000000
--- a/spec10/public/webrat/test_app/app/helpers/global_helpers.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module Merb
-  module GlobalHelpers
-    # helpers defined here available to all views.  
-  end
-end
diff --git a/spec10/public/webrat/test_app/app/helpers/testing_helper.rb b/spec10/public/webrat/test_app/app/helpers/testing_helper.rb
deleted file mode 100644
index 9ee922a..0000000
--- a/spec10/public/webrat/test_app/app/helpers/testing_helper.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module Merb
-  module TestingHelper
-
-  end
-end # Merb
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/app/models/user.rb b/spec10/public/webrat/test_app/app/models/user.rb
deleted file mode 100644
index 97d82e8..0000000
--- a/spec10/public/webrat/test_app/app/models/user.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# This is a default user class used to activate merb-auth.  Feel free to change from a User to 
-# Some other class, or to remove it altogether.  If removed, merb-auth may not work by default.
-#
-# Don't forget that by default the salted_user mixin is used from merb-more
-# You'll need to setup your db as per the salted_user mixin, and you'll need
-# To use :password, and :password_confirmation when creating a user
-#
-# see merb/merb-auth/setup.rb to see how to disable the salted_user mixin
-# 
-# You will need to setup your database and create a user.
-# class User
-#   include DataMapper::Resource
-#   
-#   property :id,     Serial
-#   property :login,  String
-#   
-# end
diff --git a/spec10/public/webrat/test_app/app/views/exceptions/not_acceptable.html.erb b/spec10/public/webrat/test_app/app/views/exceptions/not_acceptable.html.erb
deleted file mode 100644
index a7b7752..0000000
--- a/spec10/public/webrat/test_app/app/views/exceptions/not_acceptable.html.erb
+++ /dev/null
@@ -1,63 +0,0 @@
-<div id="container">
-  <div id="header-container">
-    <img src="/images/merb.jpg" />
-    <!-- <h1>Mongrel + Erb</h1> -->
-    <h2>pocket rocket web framework</h2>
-    <hr />
-  </div>
-
-  <div id="left-container">
-    <h3>Exception:</h3>
-    <p><%= request.exceptions.first.message %></p>
-  </div>
-
-  <div id="main-container">
-    <h3>Why am I seeing this page?</h3>
-    <p>Merb couldn't find an appropriate content_type to return,
-      based on what you said was available via provides() and
-      what the client requested.</p>
-
-    <h3>How to add a mime-type</h3>
-    <pre><code>
-      Merb.add_mime_type :pdf, :to_pdf, %w[application/pdf], "Content-Encoding" => "gzip"
-    </code></pre>
-    <h3>What this means is:</h3>
-    <ul>
-      <li>Add a mime-type for :pdf</li>
-      <li>Register the method for converting objects to PDF as <code>#to_pdf</code>.</li>
-      <li>Register the incoming mime-type "Accept" header as <code>application/pdf</code>.</li>
-      <li>Specify a new header for PDF types so it will set <code>Content-Encoding</code> to gzip.</li>
-    </ul>
-
-    <h3>You can then do:</h3>
-    <pre><code>
-      class Foo < Application
-        provides :pdf
-      end
-    </code></pre>
-
-    <h3>Where can I find help?</h3>
-    <p>If you have any questions or if you can't figure something out, please take a
-      look at our <a href="http://merbivore.com/"> project page</a>,
-      feel free to come chat at irc.freenode.net, channel #merb,
-      or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
-      on Google Groups.</p>
-      
-    <h3>What if I've found a bug?</h3>
-    <p>If you want to file a bug or make your own contribution to Merb,
-      feel free to register and create a ticket at our
-      <a href="http://merb.lighthouseapp.com/">project development page</a>
-      on Lighthouse.</p>
-
-    <h3>How do I edit this page?</h3>
-    <p>You can change what people see when this happens by editing <tt>app/views/exceptions/not_acceptable.html.erb</tt>.</p> 
-
-  </div>
-
-  <div id="footer-container">
-    <hr />
-    <div class="left"></div>
-    <div class="right">© 2008 the merb dev team</div>
-    <p> </p>
-  </div>
-</div>
diff --git a/spec10/public/webrat/test_app/app/views/exceptions/not_found.html.erb b/spec10/public/webrat/test_app/app/views/exceptions/not_found.html.erb
deleted file mode 100644
index 42b41a8..0000000
--- a/spec10/public/webrat/test_app/app/views/exceptions/not_found.html.erb
+++ /dev/null
@@ -1,47 +0,0 @@
-<div id="container">
-  <div id="header-container">
-    <img src="/images/merb.jpg" />
-    <!-- <h1>Mongrel + Erb</h1> -->
-    <h2>pocket rocket web framework</h2>
-    <hr />
-  </div>
-
-  <div id="left-container">
-    <h3>Exception:</h3>
-    <p><%= request.exceptions.first.message %></p>
-  </div>
-
-  <div id="main-container">
-    <h3>Welcome to Merb!</h3>
-    <p>Merb is a light-weight MVC framework written in Ruby.  We hope you enjoy it.</p>
-    
-    <h3>Where can I find help?</h3>
-    <p>If you have any questions or if you can't figure something out, please take a
-      look at our <a href="http://merbivore.com/"> project page</a>,
-      feel free to come chat at irc.freenode.net, channel #merb,
-      or post to <a href="http://groups.google.com/group/merb">merb mailing list</a>
-      on Google Groups.</p>
-      
-    <h3>What if I've found a bug?</h3>
-    <p>If you want to file a bug or make your own contribution to Merb,
-      feel free to register and create a ticket at our
-      <a href="http://merb.lighthouseapp.com/">project development page</a>
-      on Lighthouse.</p>
-
-    <h3>How do I edit this page?</h3>
-    <p>You're seeing this page because you need to edit the following files:
-      <ul>
-        <li>config/router.rb <strong><em>(recommended)</em></strong></li>
-        <li>app/views/exceptions/not_found.html.erb <strong><em>(recommended)</em></strong></li>
-        <li>app/views/layout/application.html.erb <strong><em>(change this layout)</em></strong></li>
-      </ul>
-    </p>
-  </div>
-
-  <div id="footer-container">
-    <hr />
-    <div class="left"></div>
-    <div class="right">© 2008 the merb dev team</div>
-    <p> </p>
-  </div>
-</div>
diff --git a/spec10/public/webrat/test_app/app/views/layout/application.html.erb b/spec10/public/webrat/test_app/app/views/layout/application.html.erb
deleted file mode 100644
index 4637ef2..0000000
--- a/spec10/public/webrat/test_app/app/views/layout/application.html.erb
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
-  <head>
-    <title>Fresh Merb App</title>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <link rel="stylesheet" href="/stylesheets/master.css" type="text/css" media="screen" charset="utf-8" />
-  </head>
-  <body>
-    <%#= message[:notice] %>
-    <%= catch_content :for_layout %>
-  </body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/app/views/testing/index.html.erb b/spec10/public/webrat/test_app/app/views/testing/index.html.erb
deleted file mode 100644
index 5256b34..0000000
--- a/spec10/public/webrat/test_app/app/views/testing/index.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-You're in index of the Testing controller.
-
-<a href="/testing/next">Next</a>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/app/views/testing/show_form.html.erb b/spec10/public/webrat/test_app/app/views/testing/show_form.html.erb
deleted file mode 100644
index a78e6be..0000000
--- a/spec10/public/webrat/test_app/app/views/testing/show_form.html.erb
+++ /dev/null
@@ -1,6 +0,0 @@
-<%= form(:action => "/testing/submit_form") do %>
-  <%= text_field :name, :label => "Name" %>
-  <%= text_field :address, :label => "Address" %>
-  <%= check_box :truez, :label => "Tis truez" %>
-  <%= submit "Submit!" %>
-<% end =%>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/autotest/discover.rb b/spec10/public/webrat/test_app/autotest/discover.rb
deleted file mode 100644
index fddd126..0000000
--- a/spec10/public/webrat/test_app/autotest/discover.rb
+++ /dev/null
@@ -1 +0,0 @@
-Autotest.add_discovery { "merb" }
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/autotest/merb.rb b/spec10/public/webrat/test_app/autotest/merb.rb
deleted file mode 100644
index b5d8ccb..0000000
--- a/spec10/public/webrat/test_app/autotest/merb.rb
+++ /dev/null
@@ -1,149 +0,0 @@
-# Adapted from Autotest::Rails
-require 'autotest'
-
-class Autotest::Merb < Autotest
-  
-  # +model_tests_dir+::      the directory to find model-centric tests
-  # +controller_tests_dir+:: the directory to find controller-centric tests
-  # +view_tests_dir+::       the directory to find view-centric tests
-  # +fixtures_dir+::         the directory to find fixtures in
-  attr_accessor :model_tests_dir, :controller_tests_dir, :view_tests_dir, :fixtures_dir
-  
-  def initialize
-    super
-    
-    initialize_test_layout
-    
-    # Ignore any happenings in these directories
-    add_exception %r%^\./(?:doc|log|public|tmp)%
-    
-    # Ignore any mappings that Autotest may have already set up
-    clear_mappings
-    
-    # Any changes to a file in the root of the 'lib' directory will run any 
-    # model test with a corresponding name.
-    add_mapping %r%^lib\/.*\.rb% do |filename, _|
-      files_matching Regexp.new(["^#{model_test_for(filename)}$"])
-    end
-    
-    # Any changes to a fixture will run corresponding view, controller and 
-    # model tests
-    add_mapping %r%^#{fixtures_dir}/(.*)s.yml% do |_, m|
-      [
-        model_test_for(m[1]), 
-        controller_test_for(m[1]), 
-        view_test_for(m[1])
-      ]
-    end
-    
-    # Any change to a test or test will cause it to be run
-    add_mapping %r%^test/(unit|models|integration|controllers|views|functional)/.*rb$% do |filename, _|
-      filename
-    end
-    
-    # Any change to a model will cause it's corresponding test to be run
-    add_mapping %r%^app/models/(.*)\.rb$% do |_, m|
-      model_test_for(m[1])
-    end
-    
-    # Any change to the global helper will result in all view and controller 
-    # tests being run
-    add_mapping %r%^app/helpers/global_helpers.rb% do
-      files_matching %r%^test/(views|functional|controllers)/.*_test\.rb$%
-    end
-    
-    # Any change to a helper will run it's corresponding view and controller 
-    # tests, unless the helper is the global helper. Changes to the global 
-    # helper run all view and controller tests.
-    add_mapping %r%^app/helpers/(.*)_helper(s)?.rb% do |_, m|
-      if m[1] == "global" then
-        files_matching %r%^test/(views|functional|controllers)/.*_test\.rb$%
-      else
-        [
-          view_test_for(m[1]), 
-          controller_test_for(m[1])
-        ]
-      end
-    end
-    
-    # Changes to views result in their corresponding view and controller test 
-    # being run
-    add_mapping %r%^app/views/(.*)/% do |_, m|
-      [
-        view_test_for(m[1]), 
-        controller_test_for(m[1])
-      ]
-    end
-    
-    # Changes to a controller result in its corresponding test being run. If 
-    # the controller is the exception or application controller, all 
-    # controller tests are run.
-    add_mapping %r%^app/controllers/(.*)\.rb$% do |_, m|
-      if ["application", "exception"].include?(m[1])
-        files_matching %r%^test/(controllers|views|functional)/.*_test\.rb$%
-      else
-        controller_test_for(m[1])
-      end
-    end
-
-    # If a change is made to the router, run all controller and view tests
-    add_mapping %r%^config/router.rb$% do # FIX
-      files_matching %r%^test/(controllers|views|functional)/.*_test\.rb$%
-    end
-
-    # If any of the major files governing the environment are altered, run 
-    # everything
-    add_mapping %r%^test/test_helper.rb|config/(init|rack|environments/test.rb|database.yml)% do # FIX
-      files_matching %r%^test/(unit|models|controllers|views|functional)/.*_test\.rb$%
-    end
-  end
-  
-private
-
-  # Determines the paths we can expect tests or specs to reside, as well as 
-  # corresponding fixtures.
-  def initialize_test_layout
-    self.model_tests_dir      = "test/unit"
-    self.controller_tests_dir = "test/functional"
-    self.view_tests_dir       = "test/views"
-    self.fixtures_dir         = "test/fixtures"
-  end
-  
-  # Given a filename and the test type, this method will return the 
-  # corresponding test's or spec's name.
-  # 
-  # ==== Arguments
-  # +filename+<String>:: the file name of the model, view, or controller
-  # +kind_of_test+<Symbol>:: the type of test we that we should run
-  # 
-  # ==== Returns
-  # String:: the name of the corresponding test or spec
-  # 
-  # ==== Example
-  # 
-  #   > test_for("user", :model)
-  #   => "user_test.rb"
-  #   > test_for("login", :controller)
-  #   => "login_controller_test.rb"
-  #   > test_for("form", :view)
-  #   => "form_view_spec.rb" # If you're running a RSpec-like suite
-  def test_for(filename, kind_of_test)
-    name  = [filename]
-    name << kind_of_test.to_s if kind_of_test == :view
-    name << "test"
-    return name.join("_") + ".rb"
-  end
-  
-  def model_test_for(filename)
-    [model_tests_dir, test_for(filename, :model)].join("/")
-  end
-  
-  def controller_test_for(filename)
-    [controller_tests_dir, test_for(filename, :controller)].join("/")
-  end
-  
-  def view_test_for(filename)
-    [view_tests_dir, test_for(filename, :view)].join("/")
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/autotest/merb_rspec.rb b/spec10/public/webrat/test_app/autotest/merb_rspec.rb
deleted file mode 100644
index a991a65..0000000
--- a/spec10/public/webrat/test_app/autotest/merb_rspec.rb
+++ /dev/null
@@ -1,165 +0,0 @@
-# Adapted from Autotest::Rails, RSpec's autotest class, as well as merb-core's.
-require 'autotest'
-
-class RspecCommandError < StandardError; end
-
-# This class maps your application's structure so Autotest can understand what 
-# specs to run when files change.
-#
-# Fixtures are _not_ covered by this class. If you change a fixture file, you 
-# will have to run your spec suite manually, or, better yet, provide your own 
-# Autotest map explaining how your fixtures are set up.
-class Autotest::MerbRspec < Autotest
-  def initialize
-    super
-
-    # Ignore any happenings in these directories
-    add_exception %r%^\./(?:doc|log|public|tmp|\.git|\.hg|\.svn|framework|gems|schema|\.DS_Store|autotest|bin|.*\.sqlite3)% 
-    # Ignore SCM directories and custom Autotest mappings
-    %w[.svn .hg .git .autotest].each { |exception| add_exception(exception) }
-
-    # Ignore any mappings that Autotest may have already set up
-    clear_mappings
-
-    # Anything in /lib could have a spec anywhere, if at all. So, look for
-    # files with roughly the same name as the file in /lib
-    add_mapping %r%^lib\/(.*)\.rb% do |_, m|
-      files_matching %r%^spec\/#{m[1]}%
-    end
-
-    add_mapping %r%^spec/(spec_helper|shared/.*)\.rb$% do
-      all_specs
-    end
-
-    # Changing a spec will cause it to run itself
-    add_mapping %r%^spec/.*\.rb$% do |filename, _|
-      filename
-    end
-
-    # Any change to a model will cause it's corresponding test to be run
-    add_mapping %r%^app/models/(.*)\.rb$% do |_, m|
-      spec_for(m[1], 'model')
-    end
-
-    # Any change to global_helpers will result in all view and controller
-    # tests being run
-    add_mapping %r%^app/helpers/global_helpers\.rb% do
-      files_matching %r%^spec/(views|controllers|helpers)/.*_spec\.rb$%
-    end
-
-    # Any change to a helper will cause its spec to be run
-    add_mapping %r%^app/helpers/((.*)_helper(s)?)\.rb% do |_, m|
-      spec_for(m[1], 'helper')
-    end
-
-    # Changes to a view cause its spec to be run
-    add_mapping %r%^app/views/(.*)/% do |_, m|
-      spec_for(m[1], 'view')
-    end
-
-    # Changes to a controller result in its corresponding spec being run. If
-    # the controller is the exception or application controller, all
-    # controller specs are run.
-    add_mapping %r%^app/controllers/(.*)\.rb$% do |_, m|
-      if ["application", "exception"].include?(m[1])
-        files_matching %r%^spec/controllers/.*_spec\.rb$%
-      else
-        spec_for(m[1], 'controller')
-      end
-    end
-
-    # If a change is made to the router, run controller, view and helper specs
-    add_mapping %r%^config/router.rb$% do
-      files_matching %r%^spec/(controllers|views|helpers)/.*_spec\.rb$%
-    end
-
-    # If any of the major files governing the environment are altered, run
-    # everything
-    add_mapping %r%^config/(init|rack|environments/test).*\.rb|database\.yml% do 
-      all_specs
-    end
-  end
-
-  def failed_results(results)
-    results.scan(/^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m)
-  end
-
-  def handle_results(results)
-    @failures      = failed_results(results)
-    @files_to_test = consolidate_failures(@failures)
-    @files_to_test.empty? && !$TESTING ? hook(:green) : hook(:red)
-    @tainted = !@files_to_test.empty?
-  end
-
-  def consolidate_failures(failed)
-    filters = Hash.new { |h,k| h[k] = [] }
-    failed.each do |spec, failed_trace|
-      if f = test_files_for(failed).find { |f| f =~ /spec\// }
-        filters[f] << spec
-        break
-      end
-    end
-    filters
-  end
-
-  def make_test_cmd(specs_to_runs)
-    [
-      ruby,
-      "-S",
-      spec_command,
-      add_options_if_present,
-      files_to_test.keys.flatten.join(' ')
-    ].join(' ')
-  end
-
-  def add_options_if_present
-    File.exist?("spec/spec.opts") ? "-O spec/spec.opts " : ""
-  end
-
-  # Finds the proper spec command to use. Precendence is set in the
-  # lazily-evaluated method spec_commands.  Alias + Override that in
-  # ~/.autotest to provide a different spec command then the default
-  # paths provided.
-  def spec_command(separator=File::ALT_SEPARATOR)
-    unless defined?(@spec_command)
-      @spec_command = spec_commands.find { |cmd| File.exists?(cmd) }
-
-      raise RspecCommandError, "No spec command could be found" unless @spec_command
-
-      @spec_command.gsub!(File::SEPARATOR, separator) if separator
-    end
-    @spec_command
-  end
-
-  # Autotest will look for spec commands in the following
-  # locations, in this order:
-  #
-  #   * default spec bin/loader installed in Rubygems
-  #   * any spec command found in PATH
-  def spec_commands
-    [File.join(Config::CONFIG['bindir'], 'spec'), 'spec']
-  end
-
-private
-
-  # Runs +files_matching+ for all specs
-  def all_specs
-    files_matching %r%^spec/.*_spec\.rb$%
-  end
-
-  # Generates a path to some spec given its kind and the match from a mapping
-  #
-  # ==== Arguments
-  # match<String>:: the match from a mapping
-  # kind<String>:: the kind of spec that the match represents
-  #
-  # ==== Returns
-  # String
-  #
-  # ==== Example
-  #   > spec_for('post', :view')
-  #   => "spec/views/post_spec.rb"
-  def spec_for(match, kind)
-    File.join("spec", kind + 's', "#{match}_spec.rb")
-  end
-end
diff --git a/spec10/public/webrat/test_app/bin/autospec b/spec10/public/webrat/test_app/bin/autospec
deleted file mode 100755
index f7b3fbb..0000000
--- a/spec10/public/webrat/test_app/bin/autospec
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'rspec' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/autospec
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "rspec-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'rspec', version
-load 'autospec'
diff --git a/spec10/public/webrat/test_app/bin/edit_json.rb b/spec10/public/webrat/test_app/bin/edit_json.rb
deleted file mode 100755
index b6d3e9b..0000000
--- a/spec10/public/webrat/test_app/bin/edit_json.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'json_pure' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/edit_json.rb
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "json_pure-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'json_pure', version
-load 'edit_json.rb'
diff --git a/spec10/public/webrat/test_app/bin/erubis b/spec10/public/webrat/test_app/bin/erubis
deleted file mode 100755
index d42f026..0000000
--- a/spec10/public/webrat/test_app/bin/erubis
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'erubis' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/erubis
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "erubis-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'erubis', version
-load 'erubis'
diff --git a/spec10/public/webrat/test_app/bin/gpgen b/spec10/public/webrat/test_app/bin/gpgen
deleted file mode 100755
index 3ebc7e9..0000000
--- a/spec10/public/webrat/test_app/bin/gpgen
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'gem_plugin' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/gpgen
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "gem_plugin-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'gem_plugin', version
-load 'gpgen'
diff --git a/spec10/public/webrat/test_app/bin/merb b/spec10/public/webrat/test_app/bin/merb
deleted file mode 100755
index 3bbeae1..0000000
--- a/spec10/public/webrat/test_app/bin/merb
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'merb-core' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/merb
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "merb-core-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'merb-core', version
-load 'merb'
diff --git a/spec10/public/webrat/test_app/bin/mongrel_rails b/spec10/public/webrat/test_app/bin/mongrel_rails
deleted file mode 100755
index 4ec5fdd..0000000
--- a/spec10/public/webrat/test_app/bin/mongrel_rails
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'mongrel' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/mongrel_rails
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "mongrel-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'mongrel', version
-load 'mongrel_rails'
diff --git a/spec10/public/webrat/test_app/bin/rackup b/spec10/public/webrat/test_app/bin/rackup
deleted file mode 100755
index 77f7556..0000000
--- a/spec10/public/webrat/test_app/bin/rackup
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'rack' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/rackup
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "rack-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'rack', version
-load 'rackup'
diff --git a/spec10/public/webrat/test_app/bin/rake b/spec10/public/webrat/test_app/bin/rake
deleted file mode 100755
index 8257d5c..0000000
--- a/spec10/public/webrat/test_app/bin/rake
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'rake' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/rake
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "rake-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'rake', version
-load 'rake'
diff --git a/spec10/public/webrat/test_app/bin/rake2thor b/spec10/public/webrat/test_app/bin/rake2thor
deleted file mode 100755
index 913f7c5..0000000
--- a/spec10/public/webrat/test_app/bin/rake2thor
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'thor' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/rake2thor
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "thor-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'thor', version
-load 'rake2thor'
diff --git a/spec10/public/webrat/test_app/bin/spec b/spec10/public/webrat/test_app/bin/spec
deleted file mode 100755
index 7575d37..0000000
--- a/spec10/public/webrat/test_app/bin/spec
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'rspec' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/spec
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "rspec-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'rspec', version
-load 'spec'
diff --git a/spec10/public/webrat/test_app/bin/thor b/spec10/public/webrat/test_app/bin/thor
deleted file mode 100755
index 946f5de..0000000
--- a/spec10/public/webrat/test_app/bin/thor
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application 'thor' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require 'minigems'
-rescue LoadError 
-  require 'rubygems'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/thor
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "#{File.dirname(__FILE__)}:#{gems_dir}/bin:#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "thor-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
-  end
-end
-
-version ||= ">= 0"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem 'thor', version
-load 'thor'
diff --git a/spec10/public/webrat/test_app/config/database.yml b/spec10/public/webrat/test_app/config/database.yml
deleted file mode 100644
index ba3a4f8..0000000
--- a/spec10/public/webrat/test_app/config/database.yml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-# This is a sample database file for the DataMapper ORM
-development: &defaults
-  # These are the settings for repository :default
-  adapter:  sqlite3
-  database: sample_development.db
- 
-  # Add more repositories
-  # repositories:
-  #   repo1:
-  #     adapter:  sqlite3
-  #     database: sample_1_development.db
-  #   repo2:
-  #     ...
- 
-test:
-  <<:       *defaults
-  database: sample_test.db
- 
-  # repositories:
-  #   repo1:
-  #     database: sample_1_test.db
- 
-production:
-  <<:       *defaults
-  database: production.db
- 
-  # repositories:
-  #   repo1:
-  #     database: sample_production.db
- 
-rake:
-  <<: *defaults
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/config/dependencies.rb b/spec10/public/webrat/test_app/config/dependencies.rb
deleted file mode 100644
index b9ccb58..0000000
--- a/spec10/public/webrat/test_app/config/dependencies.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# dependencies are generated using a strict version, don't forget to edit the dependency versions when upgrading.
-
-# For more information about each component, please read http://wiki.merbivore.com/faqs/merb_components
-# dependency "merb-action-args", merb_gems_version
-# dependency "merb-assets", merb_gems_version  
-# dependency "merb-cache", merb_gems_version   
-Merb::BootLoader.before_app_loads do
-  require Merb.framework_root / ".." / ".." / "merb-helpers" / "lib" / "merb-helpers.rb"
-end
-# dependency "merb-mailer", merb_gems_version  
-# dependency "merb-slices", merb_gems_version  
-# dependency "merb-auth-core", merb_gems_version
-# dependency "merb-auth-more", merb_gems_version
-# dependency "merb-auth-slice-password", merb_gems_version
-# dependency "merb-param-protection", merb_gems_version
-# dependency "merb-exceptions", merb_gems_version
- 
-# dependency "dm-core", dm_gems_version         
-# dependency "dm-aggregates", dm_gems_version   
-# dependency "dm-migrations", dm_gems_version   
-# dependency "dm-timestamps", dm_gems_version   
-# dependency "dm-types", dm_gems_version        
-# dependency "dm-validations", dm_gems_version  
diff --git a/spec10/public/webrat/test_app/config/environments/development.rb b/spec10/public/webrat/test_app/config/environments/development.rb
deleted file mode 100644
index d6d4ab3..0000000
--- a/spec10/public/webrat/test_app/config/environments/development.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-Merb.logger.info("Loaded DEVELOPMENT Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_templates] = true
-  c[:reload_classes] = true
-  c[:reload_time] = 0.5
-  c[:ignore_tampered_cookies] = true
-  c[:log_auto_flush ] = true
-  c[:log_level] = :debug
-
-  c[:log_stream] = STDOUT
-  c[:log_file]   = nil
-  # Or redirect logging into a file:
-  # c[:log_file]  = Merb.root / "log" / "development.log"
-}
diff --git a/spec10/public/webrat/test_app/config/environments/production.rb b/spec10/public/webrat/test_app/config/environments/production.rb
deleted file mode 100644
index 17a2d4b..0000000
--- a/spec10/public/webrat/test_app/config/environments/production.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-Merb.logger.info("Loaded PRODUCTION Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = false
-  c[:reload_classes] = false
-  c[:log_level] = :error
-  
-  c[:log_file]  = Merb.root / "log" / "production.log"
-  # or redirect logger using IO handle
-  # c[:log_stream] = STDOUT
-}
diff --git a/spec10/public/webrat/test_app/config/environments/rake.rb b/spec10/public/webrat/test_app/config/environments/rake.rb
deleted file mode 100644
index 5e4b9a7..0000000
--- a/spec10/public/webrat/test_app/config/environments/rake.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-Merb.logger.info("Loaded RAKE Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_classes]  = false
-  c[:log_auto_flush ] = true
-
-  c[:log_stream] = STDOUT
-  c[:log_file]   = nil
-  # Or redirect logging into a file:
-  # c[:log_file]  = Merb.root / "log" / "development.log"
-}
diff --git a/spec10/public/webrat/test_app/config/environments/staging.rb b/spec10/public/webrat/test_app/config/environments/staging.rb
deleted file mode 100644
index f5b5058..0000000
--- a/spec10/public/webrat/test_app/config/environments/staging.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-Merb.logger.info("Loaded STAGING Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = false
-  c[:reload_classes]    = false
-  c[:log_level]         = :error
-
-  c[:log_file]  = Merb.root / "log" / "staging.log"
-  # or redirect logger using IO handle
-  # c[:log_stream] = STDOUT
-}
diff --git a/spec10/public/webrat/test_app/config/environments/test.rb b/spec10/public/webrat/test_app/config/environments/test.rb
deleted file mode 100644
index 671ec76..0000000
--- a/spec10/public/webrat/test_app/config/environments/test.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-Merb.logger.info("Loaded TEST Environment...")
-Merb::Config.use { |c|
-  c[:testing]           = true
-  c[:exception_details] = true
-  c[:log_auto_flush ]   = true
-  # log less in testing environment
-  c[:log_level]         = :error
-
-  #c[:log_file]  = Merb.root / "log" / "test.log"
-  # or redirect logger using IO handle
-  c[:log_stream] = STDOUT
-}
diff --git a/spec10/public/webrat/test_app/config/init.rb b/spec10/public/webrat/test_app/config/init.rb
deleted file mode 100644
index d275349..0000000
--- a/spec10/public/webrat/test_app/config/init.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# Go to http://wiki.merbivore.com/pages/init-rb
- 
-::Gem.clear_paths; ::Gem.path.unshift(File.dirname(__FILE__) + "/../gems/")
- 
-require 'config/dependencies.rb'
- 
-use_test :rspec
-use_template_engine :erb
-
-Merb::Config.use do |c|
-  c[:use_mutex] = false
-  c[:session_store] = 'cookie'  # can also be 'memory', 'memcache', 'container', 'datamapper
-  
-  # cookie session store configuration
-  c[:session_secret_key]  = 'aac0966e584824077b8c4e0442dca5a97f91d007'  # required for cookie session store
-  # c[:session_id_key] = '_session_id' # cookie session id key, defaults to "_session_id"
-end
- 
-Merb::BootLoader.before_app_loads do
-  # This will get executed after dependencies have been loaded but before your app's classes have loaded.
-end
- 
-Merb::BootLoader.after_app_loads do
-  # This will get executed after your app's classes have been loaded.
-end
diff --git a/spec10/public/webrat/test_app/config/rack.rb b/spec10/public/webrat/test_app/config/rack.rb
deleted file mode 100644
index 494c687..0000000
--- a/spec10/public/webrat/test_app/config/rack.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# use PathPrefix Middleware if :path_prefix is set in Merb::Config
-if prefix = ::Merb::Config[:path_prefix]
-  use Merb::Rack::PathPrefix, prefix
-end
-
-# comment this out if you are running merb behind a load balancer
-# that serves static files
-use Merb::Rack::Static, Merb.dir_for(:public)
-
-# this is our main merb application
-run Merb::Rack::Application.new
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/config/router.rb b/spec10/public/webrat/test_app/config/router.rb
deleted file mode 100644
index 214910c..0000000
--- a/spec10/public/webrat/test_app/config/router.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# Merb::Router is the request routing mapper for the merb framework.
-#
-# You can route a specific URL to a controller / action pair:
-#
-#   match("/contact").
-#     to(:controller => "info", :action => "contact")
-#
-# You can define placeholder parts of the url with the :symbol notation. These
-# placeholders will be available in the params hash of your controllers. For example:
-#
-#   match("/books/:book_id/:action").
-#     to(:controller => "books")
-#   
-# Or, use placeholders in the "to" results for more complicated routing, e.g.:
-#
-#   match("/admin/:module/:controller/:action/:id").
-#     to(:controller => ":module/:controller")
-#
-# You can specify conditions on the placeholder by passing a hash as the second
-# argument of "match"
-#
-#   match("/registration/:course_name", :course_name => /^[a-z]{3,5}-\d{5}$/).
-#     to(:controller => "registration")
-#
-# You can also use regular expressions, deferred routes, and many other options.
-# See merb/specs/merb/router.rb for a fairly complete usage sample.
-
-Merb.logger.info("Compiling routes...")
-Merb::Router.prepare do
-  # RESTful routes
-  # resources :posts
-  
-  # Adds the required routes for merb-auth using the password slice
-  # slice(:merb_auth_slice_password, :name_prefix => nil, :path_prefix => "")
-
-  # This is the default route for /:controller/:action/:id
-  # This is fine for most cases.  If you're heavily using resource-based
-  # routes, you may want to comment/remove this line to prevent
-  # clients from calling your create or destroy actions with a GET
-  default_routes
-  
-  # Change this for your home page to be available at /
-  # match('/').to(:controller => 'whatever', :action =>'index')
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/doc/rdoc/generators/merb_generator.rb b/spec10/public/webrat/test_app/doc/rdoc/generators/merb_generator.rb
deleted file mode 100644
index 544c273..0000000
--- a/spec10/public/webrat/test_app/doc/rdoc/generators/merb_generator.rb
+++ /dev/null
@@ -1,1362 +0,0 @@
-
-# # We're responsible for generating all the HTML files
-# from the object tree defined in code_objects.rb. We
-# generate:
-#
-# [files]   an html file for each input file given. These
-#           input files appear as objects of class
-#           TopLevel
-#
-# [classes] an html file for each class or module encountered.
-#           These classes are not grouped by file: if a file
-#           contains four classes, we'll generate an html
-#           file for the file itself, and four html files 
-#           for the individual classes. 
-#
-# Method descriptions appear in whatever entity (file, class,
-# or module) that contains them.
-#
-# We generate files in a structure below a specified subdirectory,
-# normally +doc+.
-#
-#  opdir
-#     |
-#     |___ files
-#     |       |__  per file summaries
-#     |
-#     |___ classes
-#             |__ per class/module descriptions
-#
-# HTML is generated using the Template class.
-#
-
-require 'ftools'
-
-require 'rdoc/options'
-require 'rdoc/template'
-require 'rdoc/markup/simple_markup'
-require 'rdoc/markup/simple_markup/to_html'
-require 'cgi'
-
-module Generators
-
-    # Name of sub-direcories that hold file and class/module descriptions
-
-    FILE_DIR  = "files"
-    CLASS_DIR = "classes"
-    CSS_NAME  = "stylesheet.css"
-
-
-    ##
-    # Build a hash of all items that can be cross-referenced.
-    # This is used when we output required and included names: 
-    # if the names appear in this hash, we can generate
-    # an html cross reference to the appropriate description.
-    # We also use this when parsing comment blocks: any decorated 
-    # words matching an entry in this list are hyperlinked.
-
-    class AllReferences
-        @@refs = {}
-
-        def AllReferences::reset
-            @@refs = {}
-        end
-
-        def AllReferences.add(name, html_class)
-            @@refs[name] = html_class
-        end
-
-        def AllReferences.[](name)
-            @@refs[name]
-        end
-
-        def AllReferences.keys
-            @@refs.keys
-        end
-    end
-
-
-    ##
-    # Subclass of the SM::ToHtml class that supports looking
-    # up words in the AllReferences list. Those that are
-    # found (like AllReferences in this comment) will
-    # be hyperlinked
-
-    class HyperlinkHtml < SM::ToHtml
-        # We need to record the html path of our caller so we can generate
-        # correct relative paths for any hyperlinks that we find
-        def initialize(from_path, context)
-            super()
-            @from_path = from_path
-
-            @parent_name = context.parent_name
-            @parent_name += "::" if @parent_name
-            @context = context
-        end
-
-        # We're invoked when any text matches the CROSSREF pattern
-        # (defined in MarkUp). If we fine the corresponding reference,
-        # generate a hyperlink. If the name we're looking for contains
-        # no punctuation, we look for it up the module/class chain. For
-        # example, HyperlinkHtml is found, even without the Generators::
-        # prefix, because we look for it in module Generators first.
-
-        def handle_special_CROSSREF(special)
-            name = special.text
-            if name[0,1] == '#'
-                lookup = name[1..-1]
-                name = lookup unless Options.instance.show_hash
-            else
-                lookup = name
-            end
-
-            if /([A-Z].*)[.\#](.*)/ =~ lookup
-                container = $1
-                method = $2
-                ref = @context.find_symbol(container, method)
-            else
-                ref = @context.find_symbol(lookup)
-            end
-
-            if ref and ref.document_self
-                "<a href=\"index.html?a=#{ref.aref}&name=#{name}\">#{name}</a>"
-            else
-                name #it does not need to be a link
-            end
-        end
-
-
-        # Generate a hyperlink for url, labeled with text. Handle the
-        # special cases for img: and link: described under handle_special_HYPEDLINK
-        def gen_url(url, text)
-            if url =~ /([A-Za-z]+):(.*)/
-                type = $1
-                path = $2
-            else
-                type = "http"
-                path = url
-                url  = "http://#{url}"
-            end
-
-            if type == "link"
-                url = path
-            end
-
-            if (type == "http" || type == "link") && url =~ /\.(gif|png|jpg|jpeg|bmp)$/
-                "<img src=\"#{url}\">"
-            elsif (type == "http" || type == "link")
-                "<a href=\"#{url}\" target=\"_blank\">#{text}</a>"
-            else
-                "<a href=\"#\" onclick=\"jsHref('#{url}');\">#{text.sub(%r{^#{type}:/*}, '')}</a>"
-
-            end
-        end
-
-        # And we're invoked with a potential external hyperlink mailto:
-        # just gets inserted. http: links are checked to see if they
-        # reference an image. If so, that image gets inserted using an
-        # <img> tag. Otherwise a conventional <a href> is used.  We also
-        # support a special type of hyperlink, link:, which is a reference
-        # to a local file whose path is relative to the --op directory.
-
-        def handle_special_HYPERLINK(special)
-            url = special.text
-            gen_url(url, url)
-        end
-
-        # HEre's a hypedlink where the label is different to the URL
-        #  <label>[url]
-        #
-
-        def handle_special_TIDYLINK(special)
-            text = special.text
-            #      unless text =~ /(\S+)\[(.*?)\]/
-            unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/ 
-                return text
-            end
-            label = $1
-            url   = $2
-            gen_url(url, label)
-        end
-
-    end
-
-
-
-    #####################################################################
-    #
-    # Handle common markup tasks for the various Html classes
-    #
-
-    module MarkUp
-
-        # Convert a string in markup format into HTML. We keep a cached
-        # SimpleMarkup object lying around after the first time we're
-        # called per object.
-
-        def markup(str, remove_para=false)
-            return '' unless str
-            unless defined? @markup
-                @markup = SM::SimpleMarkup.new
-
-                # class names, variable names, file names, or instance variables
-                @markup.add_special(/(
-                \b([A-Z]\w*(::\w+)*[.\#]\w+)  #    A::B.meth
-                | \b([A-Z]\w+(::\w+)*)       #    A::B..
-                | \#\w+[!?=]?                #    #meth_name 
-                | \b\w+([_\/\.]+\w+)+[!?=]?  #    meth_name
-                )/x, :CROSSREF)
-
-                # external hyperlinks
-                @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK)
-
-                # and links of the form  <text>[<url>]
-                @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK)
-                #        @markup.add_special(/\b(\S+?\[\S+?\.\S+?\])/, :TIDYLINK)
-
-            end
-            unless defined? @html_formatter
-                @html_formatter = HyperlinkHtml.new(self.path, self)
-            end
-
-            # Convert leading comment markers to spaces, but only
-            # if all non-blank lines have them
-
-            if str =~ /^(?>\s*)[^\#]/
-                content = str
-            else
-                content = str.gsub(/^\s*(#+)/)  { $1.tr('#',' ') }
-            end
-
-            res = @markup.convert(content, @html_formatter)
-            if remove_para
-                res.sub!(/^<p>/, '')
-                res.sub!(/<\/p>$/, '')
-            end
-            res
-        end
-
-
-        def style_url(path, css_name=nil)
-            css_name ||= CSS_NAME      
-        end
-
-        # Build a webcvs URL with the given 'url' argument. URLs with a '%s' in them
-        # get the file's path sprintfed into them; otherwise they're just catenated
-        # together.
-
-        def cvs_url(url, full_path)
-            if /%s/ =~ url
-                return sprintf( url, full_path )
-            else
-                return url + full_path
-            end
-        end
-    end
-
-
-    #####################################################################
-    #
-    # A Context is built by the parser to represent a container: contexts
-    # hold classes, modules, methods, require lists and include lists.
-    # ClassModule and TopLevel are the context objects we process here
-    # 
-    class ContextUser
-
-        include MarkUp
-
-        attr_reader :context
-
-        def initialize(context, options)
-            @context = context
-            @options = options
-
-        end
-
-        # convenience method to build a hyperlink # Where's the DRY in this?? Put this in the template where it belongs
-       def href(link, cls, name)
-         %{"<a href=\"#\" onclick=\"jsHref('#{link}');\" class=\"#{cls}\">#{name}</a>"}
-       end
-
-        # Create a list of HtmlMethod objects for each method
-        # in the corresponding context object. If the @options.show_all
-        # variable is set (corresponding to the <tt>--all</tt> option,
-        # we include all methods, otherwise just the public ones.
-
-        def collect_methods
-            list = @context.method_list
-            unless @options.show_all
-                list = list.find_all {|m| m.visibility == :public || m.visibility == :protected || m.force_documentation }
-            end
-            @methods = list.collect {|m| HtmlMethod.new(m, self, @options) }
-        end
-
-        # Build a summary list of all the methods in this context
-        def build_method_summary_list(path_prefix="")
-            collect_methods unless @methods
-            meths = @methods.sort
-            res = []
-            meths.each do |meth|
-                res << {
-                    "name" => CGI.escapeHTML(meth.name),
-                    "aref" => meth.aref,
-                    "href" => meth.path
-                }
-            end
-            res
-        end
-
-
-        # Build a list of aliases for which we couldn't find a
-        # corresponding method
-        def build_alias_summary_list(section)
-            values = []
-            @context.aliases.each do |al|
-                next unless al.section == section
-                res = {
-                    'old_name' => al.old_name,
-                    'new_name' => al.new_name,
-                }
-                if al.comment && !al.comment.empty?
-                    res['desc'] = markup(al.comment, true)
-                end
-                values << res
-            end
-            values
-        end
-
-        # Build a list of constants
-        def build_constants_summary_list(section)
-            values = []
-            @context.constants.each do |co|
-                next unless co.section == section
-                res = {
-                    'name'  => co.name,
-                    'value' => CGI.escapeHTML(co.value)
-                }
-                res['desc'] = markup(co.comment, true) if co.comment && !co.comment.empty?
-                values << res
-            end
-            values
-        end
-
-        def build_requires_list(context)
-            potentially_referenced_list(context.requires) {|fn| [fn + ".rb"] }
-        end
-
-        def build_include_list(context)
-            potentially_referenced_list(context.includes)
-        end
-
-        # Build a list from an array of <i>Htmlxxx</i> items. Look up each
-        # in the AllReferences hash: if we find a corresponding entry,
-        # we generate a hyperlink to it, otherwise just output the name.
-        # However, some names potentially need massaging. For example,
-        # you may require a Ruby file without the .rb extension,
-        # but the file names we know about may have it. To deal with
-        # this, we pass in a block which performs the massaging,
-        # returning an array of alternative names to match
-
-        def potentially_referenced_list(array)
-            res = []
-            array.each do |i|
-                ref = AllReferences[i.name] 
-                #         if !ref
-                #           container = @context.parent
-                #           while !ref && container
-                #             name = container.name + "::" + i.name
-                #             ref = AllReferences[name] 
-                #             container = container.parent
-                #           end
-                #         end
-
-                ref = @context.find_symbol(i.name)
-                ref = ref.viewer if ref
-
-                if !ref && block_given?
-                    possibles = yield(i.name)
-                    while !ref and !possibles.empty?
-                        ref = AllReferences[possibles.shift]
-                    end
-                end
-                h_name = CGI.escapeHTML(i.name)
-                if ref and ref.document_self
-                    path = ref.path
-                    res << { "name" => h_name, "href" => path }
-                else
-                    res << { "name" => h_name, "href" => "" }
-                end
-            end
-            res
-        end
-
-        # Build an array of arrays of method details. The outer array has up
-        # to six entries, public, private, and protected for both class
-        # methods, the other for instance methods. The inner arrays contain
-        # a hash for each method
-
-        def build_method_detail_list(section)
-            outer = []
-
-            methods = @methods.sort
-            for singleton in [true, false]
-                for vis in [ :public, :protected, :private ] 
-                    res = []
-                    methods.each do |m|
-                        if m.section == section and
-                            m.document_self and 
-                            m.visibility == vis and 
-                            m.singleton == singleton
-                            row = {}
-                            if m.call_seq
-                                row["callseq"] = m.call_seq.gsub(/->/, '→')
-                            else
-                                row["name"]        = CGI.escapeHTML(m.name)
-                                row["params"]      = m.params
-                            end
-                            desc = m.description.strip
-                            row["m_desc"]      = desc unless desc.empty?
-                            row["aref"]        = m.aref
-                            row["href"]        = m.path
-                            row["m_seq"]       = m.seq
-                            row["visibility"]  = m.visibility.to_s
-
-                            alias_names = []
-                            m.aliases.each do |other|
-                                if other.viewer   # won't be if the alias is private
-                                    alias_names << {
-                                        'name' => other.name,
-                                        'href' => other.viewer.path,
-                                        'aref'  => other.viewer.aref
-                                    } 
-                                end
-                            end
-                            unless alias_names.empty?
-                                row["aka"] = alias_names
-                            end
-
-                            #if @options.inline_source
-                            code = m.source_code
-                            row["sourcecode"] = code if code
-                            #else
-                            # code = m.src_url
-                            #if code
-                            #  row["codeurl"] = code
-                            # row["imgurl"]  = m.img_url
-                            #end
-                            #end
-                            res << row
-                        end
-                    end
-                    if res.size > 0 
-                        outer << {
-                            "type"    => vis.to_s.capitalize,
-                            "category"    => singleton ? "Class" : "Instance",
-                            "methods" => res
-                        }
-                    end
-                end
-            end
-            outer
-        end
-
-        # Build the structured list of classes and modules contained
-        # in this context. 
-
-        def build_class_list(level, from, section, infile=nil)
-            res = ""
-            prefix = "  ::" * level;
-
-            from.modules.sort.each do |mod|
-                next unless mod.section == section
-                next if infile && !mod.defined_in?(infile)
-                if mod.document_self
-                    res << 
-                    prefix <<
-                    "Module " <<
-                    href(mod.viewer.path, "link", mod.full_name) <<
-                    "<br />\n" <<
-                    build_class_list(level + 1, mod, section, infile)
-                end
-            end
-
-            from.classes.sort.each do |cls|
-                next unless cls.section == section
-                next if infile && !cls.defined_in?(infile)
-                if cls.document_self
-                    res      <<
-                    prefix << 
-                    "Class " <<
-                     href(cls.viewer.path, "link", cls.full_name) <<
-                    "<br />\n" <<
-                    build_class_list(level + 1, cls, section, infile)
-                end
-            end
-
-            res
-        end
-
-        def document_self
-            @context.document_self
-        end
-
-        def diagram_reference(diagram)
-            res = diagram.gsub(/((?:src|href)=")(.*?)"/) {
-                $1 + $2 + '"'
-            }
-            res
-        end
-
-
-        # Find a symbol in ourselves or our parent
-        def find_symbol(symbol, method=nil)
-            res = @context.find_symbol(symbol, method)
-            if res
-                res = res.viewer
-            end
-            res
-        end
-
-        # create table of contents if we contain sections
-
-        def add_table_of_sections
-            toc = []
-            @context.sections.each do |section|
-                if section.title
-                    toc << {
-                        'secname' => section.title,
-                        'href'    => section.sequence
-                    }
-                end
-            end
-
-            @values['toc'] = toc unless toc.empty?
-        end
-
-
-    end
-
-    #####################################################################
-    #
-    # Wrap a ClassModule context
-
-    class HtmlClass < ContextUser
-
-        @@c_seq = "C00000000"
-
-        attr_reader :path
-
-        def initialize(context, html_file, prefix, options)
-            super(context, options)
-            @@c_seq  = @@c_seq.succ
-            @c_seq   = @@c_seq
-            @html_file = html_file
-            @is_module = context.is_module?
-            @values    = {}
-
-            context.viewer = self
-
-            @path = http_url(context.full_name, prefix)
-
-            collect_methods
-
-            AllReferences.add(name, self)
-        end
-
-        # return the relative file name to store this class in,
-        # which is also its url
-        def http_url(full_name, prefix)
-            path = full_name.dup
-            if path['<<']
-                path.gsub!(/<<\s*(\w*)/) { "from-#$1" }
-            end
-            File.join(prefix, path.split("::")) + ".html"
-        end
-
-        def seq
-            @c_seq
-        end
-
-        def aref
-            @c_seq
-        end
-
-        def scope
-            a = @context.full_name.split("::")
-            if a.length > 1
-                a.pop
-                a.join("::")
-            else
-                "" 
-            end
-        end
-
-        def name
-            @context.full_name.gsub("#{scope}::", '')
-        end
-
-        def full_name
-            @context.full_name
-        end
-
-        def parent_name
-            @context.parent.full_name
-        end
-
-        def write_on(f)
-            value_hash
-            template = TemplatePage.new(RDoc::Page::BODY,
-            RDoc::Page::CLASS_PAGE,
-            RDoc::Page::METHOD_LIST)
-            template.write_html_on(f, @values)
-        end
-
-        def value_hash
-            class_attribute_values
-            add_table_of_sections
-
-            @values["charset"] = @options.charset
-            @values["style_url"] = style_url(path, @options.css)
-
-            # Convert README to html
-            unless File.exist?('files/README.html')
-              File.open('files/README.html', 'w') do |file|
-                file << markup(File.read(File.expand_path(@options.main_page)))
-              end
-            end
-
-            d = markup(@context.comment)
-            @values["description"] = d unless d.empty?
-
-            ml = build_method_summary_list
-            @values["methods"] = ml unless ml.empty?
-
-            il = build_include_list(@context)
-            @values["includes"] = il unless il.empty?
-
-            @values["sections"] = @context.sections.map do |section|
-
-                secdata = {
-                    "sectitle" => section.title,
-                    "secsequence" => section.sequence,
-                    "seccomment" => markup(section.comment)
-                }
-
-                al = build_alias_summary_list(section)
-                secdata["aliases"] = al unless al.empty?
-
-                co = build_constants_summary_list(section)
-                secdata["constants"] = co unless co.empty?
-
-                al = build_attribute_list(section)
-                secdata["attributes"] = al unless al.empty?
-
-                cl = build_class_list(0, @context, section)
-                secdata["classlist"] = cl unless cl.empty?
-
-                mdl = build_method_detail_list(section)
-                secdata["method_list"] = mdl unless mdl.empty?
-
-                secdata
-            end
-
-            @values
-        end
-
-        def build_attribute_list(section)
-            atts = @context.attributes.sort
-            res = []
-            atts.each do |att|
-                next unless att.section == section
-                if att.visibility == :public || att.visibility == :protected || @options.show_all
-                    entry = {
-                        "name"   => CGI.escapeHTML(att.name), 
-                        "rw"     => att.rw, 
-                        "a_desc" => markup(att.comment, true)
-                    }
-                    unless att.visibility == :public || att.visibility == :protected
-                        entry["rw"] << "-"
-                    end
-                    res << entry
-                end
-            end
-            res
-        end
-
-        def class_attribute_values
-            h_name = CGI.escapeHTML(name)
-
-            @values["classmod"]  = @is_module ? "Module" : "Class"
-            @values["title"]     = "#{@values['classmod']}: #{h_name}"
-
-            c = @context
-            c = c.parent while c and !c.diagram
-            if c && c.diagram
-                @values["diagram"] = diagram_reference(c.diagram)
-            end
-
-            @values["full_name"] = h_name
-            @values["class_seq"] = seq
-            parent_class = @context.superclass
-
-            if parent_class
-                @values["parent"] = CGI.escapeHTML(parent_class)
-
-                if parent_name
-                    lookup = parent_name + "::" + parent_class
-                else
-                    lookup = parent_class
-                end
-
-                parent_url = AllReferences[lookup] || AllReferences[parent_class]
-
-                if parent_url and parent_url.document_self
-                    @values["par_url"] = parent_url.path
-                end
-            end
-
-            files = []
-            @context.in_files.each do |f|
-                res = {}
-                full_path = CGI.escapeHTML(f.file_absolute_name)
-
-                res["full_path"]     = full_path
-                res["full_path_url"] = f.viewer.path if f.document_self
-
-                if @options.webcvs
-                    res["cvsurl"] = cvs_url( @options.webcvs, full_path )
-                end
-
-                files << res
-            end
-
-            @values['infiles'] = files
-        end
-
-        def <=>(other)
-            self.name <=> other.name
-        end
-
-    end
-
-    #####################################################################
-    #
-    # Handles the mapping of a file's information to HTML. In reality,
-    # a file corresponds to a +TopLevel+ object, containing modules,
-    # classes, and top-level methods. In theory it _could_ contain
-    # attributes and aliases, but we ignore these for now.
-
-    class HtmlFile < ContextUser
-
-        @@f_seq = "F00000000"
-
-        attr_reader :path
-        attr_reader :name
-
-        def initialize(context, options, file_dir)
-            super(context, options)
-            @@f_seq  = @@f_seq.succ
-            @f_seq   = @@f_seq
-            @values = {}
-
-            @path = http_url(file_dir)
-            @source_file_path = File.expand_path(@context.file_relative_name).gsub("\/doc\/", "/")
-            @name = @context.file_relative_name
-
-            collect_methods
-            AllReferences.add(name, self)
-            context.viewer = self
-        end
-
-        def http_url(file_dir)
-            File.join(file_dir, @context.file_relative_name.tr('.', '_')) + ".html"
-        end
-
-        def filename_to_label
-            @context.file_relative_name.gsub(/%|\/|\?|\#/) {|s| '%' + ("%x" % s[0]) }
-        end
-
-        def seq
-            @f_seq
-        end
-
-        def aref
-            @f_seq
-        end
-
-        def name
-            full_path = @context.file_absolute_name
-            short_name = File.basename(full_path)
-        end
-
-        def full_name
-            @context.file_absolute_name
-        end
-
-        def scope
-            @context.file_relative_name.gsub(/\/#{name}$/, '')
-        end
-
-        def parent_name
-            nil
-        end
-
-        def full_file_source
-            ret_str = ""
-            File.open(@source_file_path, 'r') do |f| 
-                while(!f.eof?) do
-                    ret_str += f.readline()
-                end
-            end
-            ret_str
-        rescue
-            "file not found -#{@source_file_path}-"
-            #@source_file_path
-        end
-
-        def value_hash
-            file_attribute_values
-            add_table_of_sections
-
-            @values["charset"]   = @options.charset
-            @values["href"]      = path
-            @values["style_url"] = style_url(path, @options.css)
-            @values["file_seq"] =  seq
-
-            #pulling in the source for this file
-            #@values["source_code"] = @context.token_stream
-
-            @values["file_source_code"] = CGI.escapeHTML(full_file_source)
-
-            if @context.comment
-                d = markup(@context.comment)
-                @values["description"] = d if d.size > 0
-            end
-
-            ml = build_method_summary_list
-            @values["methods"] = ml unless ml.empty?
-
-            il = build_include_list(@context)
-            @values["includes"] = il unless il.empty?
-
-            rl = build_requires_list(@context)
-            @values["requires"] = rl unless rl.empty?
-
-
-            file_context = @context
-
-            @values["sections"] = @context.sections.map do |section|
-
-                secdata = {
-                    "sectitle" => section.title,
-                    "secsequence" => section.sequence,
-                    "seccomment" => markup(section.comment)
-                }
-
-                cl = build_class_list(0, @context, section, file_context)
-                @values["classlist"] = cl unless cl.empty?
-
-                mdl = build_method_detail_list(section)
-                secdata["method_list"] = mdl unless mdl.empty?
-
-                al = build_alias_summary_list(section)
-                secdata["aliases"] = al unless al.empty?
-
-                co = build_constants_summary_list(section)
-                @values["constants"] = co unless co.empty?
-
-                secdata
-            end
-
-            @values
-        end
-
-        def write_on(f)
-            value_hash
-            template = TemplatePage.new(RDoc::Page::SRC_BODY,RDoc::Page::FILE_PAGE, RDoc::Page::METHOD_LIST)
-            template.write_html_on(f, @values)
-        end
-
-        def file_attribute_values
-            full_path = @context.file_absolute_name
-            short_name = File.basename(full_path)
-
-            @values["title"] = CGI.escapeHTML("File: #{short_name}")
-
-            if @context.diagram
-                @values["diagram"] = diagram_reference(@context.diagram)
-            end
-
-            @values["short_name"]   = CGI.escapeHTML(short_name)
-            @values["full_path"]    = CGI.escapeHTML(full_path)
-            @values["dtm_modified"] = @context.file_stat.mtime.to_s
-
-            if @options.webcvs
-                @values["cvsurl"] = cvs_url( @options.webcvs, @values["full_path"] )
-            end
-        end
-
-        def <=>(other)
-            self.name <=> other.name
-        end
-    end
-
-    #####################################################################
-
-    class HtmlMethod
-        include MarkUp
-
-        attr_reader :context
-        attr_reader :src_url
-        attr_reader :img_url
-        attr_reader :source_code
-
-        @@m_seq = "M000000"
-
-        @@all_methods = []
-
-        def HtmlMethod::reset
-            @@all_methods = []
-        end
-
-        def initialize(context, html_class, options)
-            @context    = context
-            @html_class = html_class
-            @options    = options
-            @@m_seq       = @@m_seq.succ
-            @m_seq        = @@m_seq
-            @@all_methods << self
-
-            context.viewer = self
-
-            if (ts = @context.token_stream)
-                @source_code = markup_code(ts)
-                #unless @options.inline_source
-                # @src_url = create_source_code_file(@source_code)
-                # @img_url = MERBGenerator.gen_url(path, 'source.png')
-                #end
-            end
-            AllReferences.add(name, self)
-        end
-
-        def seq
-            @m_seq
-        end
-
-        def aref
-            @m_seq
-        end
-
-        def scope
-            @html_class.full_name
-        end
-
-        # return a reference to outselves to be used as an href=
-        # the form depends on whether we're all in one file
-        # or in multiple files
-
-        def name
-            @context.name
-        end
-
-        def section
-            @context.section
-        end
-
-        def parent_name
-            if @context.parent.parent
-                @context.parent.parent.full_name
-            else
-                nil
-            end
-        end
-
-        def path
-            @html_class.path
-        end
-
-        def description
-            markup(@context.comment)
-        end
-
-        def visibility
-            @context.visibility
-        end
-
-        def singleton
-            @context.singleton
-        end
-
-        def call_seq
-            cs = @context.call_seq
-            if cs
-                cs.gsub(/\n/, "<br />\n")
-            else
-                nil
-            end
-        end
-
-        def params
-            # params coming from a call-seq in 'C' will start with the
-            # method name
-            p = @context.params
-            if p !~ /^\w/
-                p = @context.params.gsub(/\s*\#.*/, '')
-                p = p.tr("\n", " ").squeeze(" ")
-                p = "(" + p + ")" unless p[0] == ?(
-
-                if (block = @context.block_params)
-                    # If this method has explicit block parameters, remove any
-                    # explicit &block
-
-                    p.sub!(/,?\s*&\w+/, '')
-
-                    block.gsub!(/\s*\#.*/, '')
-                    block = block.tr("\n", " ").squeeze(" ")
-                    if block[0] == ?(
-                        block.sub!(/^\(/, '').sub!(/\)/, '')
-                    end
-                    p << " {|#{block.strip}| ...}"
-                end
-            end
-            CGI.escapeHTML(p)
-        end
-
-        def create_source_code_file(code_body)
-            meth_path = @html_class.path.sub(/\.html$/, '.src')
-            File.makedirs(meth_path)
-            file_path = File.join(meth_path, seq) + ".html"
-
-            template = TemplatePage.new(RDoc::Page::SRC_PAGE)
-            File.open(file_path, "w") do |f|
-                values = {
-                    'title'     => CGI.escapeHTML(name),
-                    'code'      => code_body,
-                    'style_url' => style_url(file_path, @options.css),
-                    'charset'   => @options.charset
-                }
-                template.write_html_on(f, values)
-            end
-            file_path
-        end
-
-        def HtmlMethod.all_methods
-            @@all_methods
-        end
-
-        def <=>(other)
-            @context <=> other.context
-        end
-
-        ##
-        # Given a sequence of source tokens, mark up the source code
-        # to make it look purty.
-
-
-        def markup_code(tokens)
-            src = ""
-            tokens.each do |t|
-                next unless t
-                #    p t.class
-                #        style = STYLE_MAP[t.class]
-                style = case t
-                when RubyToken::TkCONSTANT then "ruby-constant"
-                when RubyToken::TkKW       then "ruby-keyword kw"
-                when RubyToken::TkIVAR     then "ruby-ivar"
-                when RubyToken::TkOp       then "ruby-operator"
-                when RubyToken::TkId       then "ruby-identifier"
-                when RubyToken::TkNode     then "ruby-node"
-                when RubyToken::TkCOMMENT  then "ruby-comment cmt"
-                when RubyToken::TkREGEXP   then "ruby-regexp re"
-                when RubyToken::TkSTRING   then "ruby-value str"
-                when RubyToken::TkVal      then "ruby-value"
-                else
-                    nil
-                end
-
-                text = CGI.escapeHTML(t.text)
-
-                if style
-                    src << "<span class=\"#{style}\">#{text}</span>"
-                else
-                    src << text
-                end
-            end
-
-            add_line_numbers(src)
-            src
-        end
-
-        # we rely on the fact that the first line of a source code
-        # listing has 
-        #    # File xxxxx, line dddd
-
-        def add_line_numbers(src)
-            if src =~ /\A.*, line (\d+)/
-                first = $1.to_i - 1
-                last  = first + src.count("\n")
-                size = last.to_s.length
-                real_fmt = "%#{size}d: "
-                fmt = " " * (size+2)
-                src.gsub!(/^/) do
-                    res = sprintf(fmt, first) 
-                    first += 1
-                    fmt = real_fmt
-                    res
-                end
-            end
-        end
-
-        def document_self
-            @context.document_self
-        end
-
-        def aliases
-            @context.aliases
-        end
-
-        def find_symbol(symbol, method=nil)
-            res = @context.parent.find_symbol(symbol, method)
-            if res
-                res = res.viewer
-            end
-            res
-        end
-    end
-
-    #####################################################################
-
-    class MERBGenerator
-
-        include MarkUp
-
-        # Generators may need to return specific subclasses depending
-        # on the options they are passed. Because of this
-        # we create them using a factory
-
-        def MERBGenerator.for(options)
-            AllReferences::reset
-            HtmlMethod::reset
-
-            MERBGenerator.new(options)
-
-        end
-
-        class <<self
-            protected :new
-        end
-
-        # Set up a new HTML generator. Basically all we do here is load
-        # up the correct output temlate
-
-        def initialize(options) #:not-new:
-            @options    = options
-            load_html_template
-        end
-
-
-        ##
-        # Build the initial indices and output objects
-        # based on an array of TopLevel objects containing
-        # the extracted information. 
-
-        def generate(toplevels)
-            @toplevels  = toplevels
-            @files      = []
-            @classes    = []
-
-            write_style_sheet
-            write_javascript
-            gen_sub_directories()
-            build_indices
-            generate_html
-        end
-
-        private
-
-        ##
-        # Load up the AJAX HTML template specified in the options.
-        # If the template name contains a slash, use it literally
-        #
-        def load_html_template
-            template = @options.template
-            unless template =~ %r{/|\\}
-                template = File.join("rdoc/generators/template", @options.generator.key, template)
-            end
-            require template
-            extend RDoc::Page
-        rescue LoadError
-            $stderr.puts "Could not find AJAX template '#{template}'"
-            exit 99
-        end
-
-        ##
-        # Write out the style sheet used by the main frames
-        #
-
-        def write_style_sheet
-            template = TemplatePage.new(RDoc::Page::STYLE)
-            File.open(CSS_NAME, "w") do |f|
-                values = { "font" => "helvetica"} #this is not used anywhere but the template function demands a hash of values
-                template.write_html_on(f, values)
-            end
-        end
-        
-        def write_javascript
-            #Argh... I couldn't figure out how to copy these from the template dir so they were copied into
-            # the template file "ajax.rb" and processed similarlly to the style sheets. Not exactly a good thing to do with
-            # external library code. Not very DRY.
-                
-            File.open("api_grease.js", "w") do |f|
-                f << RDoc::Page::API_GREASE_JS
-            end
-            
-            File.open("prototype.js", "w") do |f|
-                f << RDoc::Page::PROTOTYPE_JS
-            end
-            
-        rescue LoadError
-            $stderr.puts "Could not find AJAX template"
-            exit 99
-        end
-
-        ##
-        # See the comments at the top for a description of the
-        # directory structure
-
-        def gen_sub_directories
-            File.makedirs(FILE_DIR, CLASS_DIR)
-        rescue 
-            $stderr.puts $!.message
-            exit 1
-        end
-
-        ##
-        # Generate:
-        #
-        # * a list of HtmlFile objects for each TopLevel object.
-        # * a list of HtmlClass objects for each first level
-        #   class or module in the TopLevel objects
-        # * a complete list of all hyperlinkable terms (file,
-        #   class, module, and method names)
-
-        def build_indices
-
-            @toplevels.each do |toplevel|
-                @files << HtmlFile.new(toplevel, @options, FILE_DIR)
-            end
-
-            RDoc::TopLevel.all_classes_and_modules.each do |cls|
-                build_class_list(cls, @files[0], CLASS_DIR)
-            end
-        end
-
-        def build_class_list(from, html_file, class_dir)
-            @classes << HtmlClass.new(from, html_file, class_dir, @options)
-            from.each_classmodule do |mod|
-                build_class_list(mod, html_file, class_dir)
-            end
-        end
-
-        ##
-        # Generate all the HTML
-        #
-        def generate_html
-            # the individual descriptions for files and classes
-            gen_into(@files)
-            gen_into(@classes)
-            # and the index files
-            gen_file_index
-            gen_class_index
-            gen_method_index
-            gen_main_index
-
-            # this method is defined in the template file
-            write_extra_pages if defined? write_extra_pages
-        end
-
-        def gen_into(list)
-            list.each do |item|
-                if item.document_self
-                    op_file = item.path
-                    File.makedirs(File.dirname(op_file))
-                    File.open(op_file, "w") { |file| item.write_on(file) }
-                end
-            end
-
-        end
-
-        def gen_file_index
-            gen_an_index(@files, 'Files', 
-            RDoc::Page::FILE_INDEX, 
-            "fr_file_index.html")
-        end
-
-        def gen_class_index
-            gen_an_index(@classes, 'Classes',
-            RDoc::Page::CLASS_INDEX,
-            "fr_class_index.html")
-        end
-
-        def gen_method_index
-            gen_an_index(HtmlMethod.all_methods, 'Methods', 
-            RDoc::Page::METHOD_INDEX,
-            "fr_method_index.html")
-        end
-
-
-        def gen_an_index(collection, title, template, filename)
-            template = TemplatePage.new(RDoc::Page::FR_INDEX_BODY, template)
-            res = []
-            collection.sort.each do |f|
-                if f.document_self
-                    res << { "href" => f.path, "name" => f.name, "scope" => f.scope, "seq_id" => f.seq }
-                end
-            end
-
-            values = {
-                "entries"    => res,
-                'list_title' => CGI.escapeHTML(title),
-                'index_url'  => main_url,
-                'charset'    => @options.charset,
-                'style_url'  => style_url('', @options.css),
-            }
-
-            File.open(filename, "w") do |f|
-                template.write_html_on(f, values)
-            end
-        end
-
-        # The main index page is mostly a template frameset, but includes
-        # the initial page. If the <tt>--main</tt> option was given,
-        # we use this as our main page, otherwise we use the
-        # first file specified on the command line.
-
-        def gen_main_index
-            template = TemplatePage.new(RDoc::Page::INDEX)
-            File.open("index.html", "w") do |f|
-                tStr = ""
-                #File.open(main_url, 'r') do |g|
-                #    tStr = markup(g)
-                #end
-                values = {
-                    "initial_page" => tStr,
-                    'title'        => CGI.escapeHTML(@options.title),
-                    'charset'      => @options.charset,
-                    'content'      => File.read('files/README.html')
-                }
-            
-                values['inline_source'] = true
-                template.write_html_on(f, values)
-            end
-        end
-
-        # return the url of the main page
-        def main_url
-            "files/README.html"
-        end
-
-
-    end
-
-end
diff --git a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/api_grease.js b/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/api_grease.js
deleted file mode 100644
index 3df710e..0000000
--- a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/api_grease.js
+++ /dev/null
@@ -1,640 +0,0 @@
-
-function setupPage(){
-	hookUpActiveSearch();
-	hookUpTabs();
-	suppressPostbacks();
-	var url_params = getUrlParams();
-	if (url_params != null){
-		loadUrlParams(url_params);
-	}else{
-		loadDefaults();
-	}
-	resizeDivs();
-	window.onresize = function(){  resizeDivs(); };
-}
-
-function getUrlParams(){
-	var window_location = window.location.href
-	var param_pos = window_location.search(/\?/)
-	if (param_pos > 0){
-		return(window_location.slice(param_pos, window_location.length));
-	}else{
-		return(null);
-	}
-}
-
-function loadUrlParams(url_param){
-	//get the tabs
-	var t = getTabs();
-	// now find our variables
-	var s_params = /(\?)(a=.+?)(&)(name=.*)/;
-	var results = url_param.match(s_params);
-	url_anchor = results[2].replace(/a=/,'');
-
-	if (url_anchor.match(/M.+/)){//load the methods tab and scroller content
-		setActiveTabAndLoadContent(t[0]);
-	}else{
-		if(url_anchor.match(/C.+/)){ //load the classes tab and scroller content
-			setActiveTabAndLoadContent(t[1]);
-		}else{
-			if (url_anchor.match(/F.+/)){//load the files tab
-				setActiveTabAndLoadContent(t[2]);
-			}else{
-				// default to loading the methods
-				setActiveTabAndLoadContent(t[0]);
-			}
-		}
-	}
-	paramLoadOfContentAnchor(url_anchor + "_link");
-}
-
-function updateUrlParams(anchor_id, name){
-	//Also setting the page title
-	//window.document.title = name + " method - MerbBrain.com ";
-	
-	//updating the window location
-	var current_href = window.location.href;
-	//var m_name = name.replace("?","?");
-	var rep_str = ".html?a=" + anchor_id + "&name=" + name;
-	var new_href = current_href.replace(/\.html.*/, rep_str);
-	if (new_href != current_href){
-		window.location.href = new_href;
-	}
-}
-
-//does as it says...
-function hookUpActiveSearch(){
-	
-	var s_field = $('searchForm').getInputs('text')[0];
-	//var s_field = document.forms[0].searchText;
-	Event.observe(s_field, 'keydown', function(event) {
-		var el = Event.element(event);
-		var key = event.which || event.keyCode;
-		
-		switch (key) {
-			case Event.KEY_RETURN:
-				forceLoadOfContentAnchor(getCurrentAnchor());
-				Event.stop(event);
-			break;
-			
-			case Event.KEY_UP:
-				scrollListToElementOffset(getCurrentAnchor(),-1);
-			break;
-			
-			case Event.KEY_DOWN:
-				scrollListToElementOffset(getCurrentAnchor(),1);
-			break;
-			
-			default:
-			break;
-		}
-
-	});
-	
-	Event.observe(s_field, 'keyup', function(event) {
-		var el = Event.element(event);
-		var key = event.which || event.keyCode;
-		switch (key) {
-			case Event.KEY_RETURN:
-				Event.stop(event);
-			break;
-			
-			case Event.KEY_UP:
-			break;
-			
-			case Event.KEY_DOWN:
-			break;
-			
-			default:
-				scrollToName(el.value);
-				setSavedSearch(getCurrentTab(), el.value);
-			break;
-		}
-		
-	});
-	
-	Event.observe(s_field, 'keypress', function(event){
-		var el = Event.element(event);
-		var key = event.which || event.keyCode;
-		switch (key) {
-			case Event.KEY_RETURN:
-				Event.stop(event);
-			break;
-			
-			default:
-			break;
-		}
-		
-	});
-	
-	//Event.observe(document, 'keypress', function(event){
-	//	var key = event.which || event.keyCode;
-	//	if (key == Event.KEY_TAB){
-	//		cycleNextTab();
-	//		Event.stop(event);
-	//	}
-	//});
-}
-
-function hookUpTabs(){
-	
-	var tabs = getTabs();
-	for(x=0; x < tabs.length; x++)
-	{
-		Event.observe(tabs[x], 'click', function(event){
-			    var el = Event.element(event);
-         		setActiveTabAndLoadContent(el);
-			});
-		//tabs[x].onclick = function (){ return setActiveTabAndLoadContent(this);};	 //the prototype guys say this is bad..
-	}
-
-}
-
-function suppressPostbacks(){
-	Event.observe('searchForm', 'submit', function(event){
-		Event.stop(event);
-	});
-}
-
-function loadDefaults(){
-	var t = getTabs();
-	setActiveTabAndLoadContent(t[0]); //default loading of the first tab
-}
-
-function resizeDivs(){
-	var inner_height = 700; 
-	if (window.innerHeight){
-		inner_height = window.innerHeight; //all browsers except IE use this to determine the space available inside a window. Thank you Microsoft!!
-	}else{
-		if(document.documentElement.clientHeight > 0){ //IE uses this in 'strict' mode
-		inner_height = document.documentElement.clientHeight;
-		}else{
-			inner_height = document.body.clientHeight; //IE uses this in 'quirks' mode 
-		}
-	}
-	$('rdocContent').style.height = (inner_height - 92) + "px";//Thankfully all browsers can agree on how to set the height of a div
-	$('listScroller').style.height = (inner_height - 88) + "px";
-}
-
-//The main function for handling clicks on the tabs
-function setActiveTabAndLoadContent(current_tab){
-	changeLoadingStatus("on");
-	var tab_string = String(current_tab.innerHTML).strip(); //thank you ProtoType!
-	switch (tab_string){
-		case "classes":
-			setCurrentTab("classes");
-		    loadScrollerContent('fr_class_index.html');
-			setSearchFieldValue(getSavedSearch("classes"));
-			scrollToName(getSavedSearch("classes"));
-			setSearchFocus();
-			break;
-		
-		case "files":
-			setCurrentTab("files");
-		    loadScrollerContent('fr_file_index.html');
-			setSearchFieldValue(getSavedSearch("files"));
-			scrollToName(getSavedSearch("files"));
-			setSearchFocus();
-			break;
-			
-		case "methods":
-			setCurrentTab("methods");
-			loadScrollerContent('fr_method_index.html');
-			setSearchFieldValue(getSavedSearch("methods"));
-			scrollToName(getSavedSearch("methods"));
-			setSearchFocus();
-			break;
-		
-		default:
-			break;
-	}
-	changeLoadingStatus("off");
-}
-
-function cycleNextTab(){
-	var currentT = getCurrentTab();
-	var tabs = getTabs();
-	if (currentT == "methods"){
-		setActiveTabAndLoadContent(tabs[1]);
-		setSearchFocus();
-	}else{
-		if (currentT == "classes"){
-			setActiveTabAndLoadContent(tabs[2]);
-			setSearchFocus();
-		}else{
-			if (currentT == "files"){
-				setActiveTabAndLoadContent(tabs[0]);
-				setSearchFocus();
-			}
-		}
-	}
-}
-
-function getTabs(){
-	return($('groupType').getElementsByTagName('li'));
-}
-
-var Active_Tab = "";
-function getCurrentTab(){
-	return Active_Tab;
-}
-
-function setCurrentTab(tab_name){
-	var tabs = getTabs();
-	for(x=0; x < tabs.length; x++)
-	{
-		if(tabs[x].innerHTML.strip() == tab_name) //W00t!!! String.prototype.strip!
-		{
-			tabs[x].className = "activeLi";
-			Active_Tab = tab_name;
-		}
-		else
-		{
-			tabs[x].className = "";
-		}
-	}
-}
-
-//These globals should not be used globally (hence the getters and setters)
-var File_Search = "";
-var Method_Search = "";
-var Class_Search = "";
-function setSavedSearch(tab_name, s_val){
-	switch(tab_name){
-		case "methods":
-			Method_Search = s_val;
-			break;
-		case "files":
-			File_Search = s_val;
-			break;
-		case "classes":
-			Class_Search = s_val;
-			break;
-	}
-}
-
-function getSavedSearch(tab_name){
-	switch(tab_name){
-		case "methods":
-			return (Method_Search);
-			break;
-		case "files":
-			return (File_Search);
-			break;
-		case "classes":
-			return (Class_Search);
-			break;
-	}
-}
-
-//These globals handle the history stack
-
-
-function setListScrollerContent(s){
-	
-	$('listScroller').innerHTML = s;
-}
-
-function setMainContent(s){
-	
-	$('rdocContent').innerHTML = s;
-}
-
-function setSearchFieldValue(s){
-	
-	document.forms[0].searchText.value = s;
-}
-
-function getSearchFieldValue(){
-	
-	return Form.Element.getValue('searchText');
-}
-
-function setSearchFocus(){
-	
-	document.forms[0].searchText.focus();
-}
-
-var Anchor_ID_Of_Current = null; // holds the last highlighted anchor tag in the scroll lsit
-function getCurrentAnchor(){
-	return(Anchor_ID_Of_Current);
-}
-
-function setCurrentAnchor(a_id){
-	Anchor_ID_Of_Current = a_id;
-}
-
-//var Index_Of_Current = 0; //holds the last highlighted index
-//function getCurrentIndex(){
-//	return (Index_Of_Current);
-//}
-
-//function setCurrentIndex(new_i){
-//	Index_Of_Current = new_i;
-//}
-
-function loadScrollerContent(url){
-
-	var scrollerHtml = new Ajax.Request(url, {
-	  asynchronous: false,
-	  method: 'get',
-	  onComplete: function(method_data) {
-	   	setListScrollerContent(method_data.responseText);
-	  }
-	});
-
-}
-
-//called primarily from the links inside the scroller list
-//loads the main page div then jumps to the anchor/element with id
-function loadContent(url, anchor_id){
-	
-	var mainHtml = new Ajax.Request(url, {
-	 method: 'get',
-	  onLoading: changeLoadingStatus("on"),
-	  onSuccess: function(method_data) {
-	   	setMainContent(method_data.responseText);},
-	  onComplete: function(request) {
-			changeLoadingStatus("off");
-			new jumpToAnchor(anchor_id);
-		}
-	});
-}
-
-//An alternative function that also will stuff the index history for methods, files, classes
-function loadIndexContent(url, anchor_id, name, scope)
-{
-	if (From_URL_Param == true){
-		var mainHtml = new Ajax.Request(url, {
-			method: 'get',
-			onLoading: changeLoadingStatus("on"),
-			onSuccess: function(method_data) {
-				setMainContent(method_data.responseText);},
-				onComplete: function(request) {
-					changeLoadingStatus("off");
-					updateBrowserBar(name, anchor_id, scope);
-					new jumpToAnchor(anchor_id);}
-			});
-		From_URL_Param = false;
-	}else{
-		updateUrlParams(anchor_id, name);
-	}
-
-}
-
-function updateBrowserBar(name, anchor_id, scope){
-	if (getCurrentTab() == "methods"){
-		$('browserBarInfo').update("<small>class/module:</small> <a href=\"#\" onclick=\"jumpToTop();\">" + scope + "</a>  <small>method:</small> <strong><a href=\"#\" onclick=\"jumpToAnchor('"+ anchor_id +"')\">" + name + "</a></strong> ");
-	}else{ if(getCurrentTab() == "classes"){
-			$('browserBarInfo').update("<small>class/module:</small> <a href=\"#\" onclick=\"jumpToTop();\">" + scope + "::" + name + "</strong> ");
-		}else{
-			$('browserBarInfo').update("<small>file:</small> <a href=\"#\" onclick=\"jumpToTop();\">" + scope + "/" + name + "</strong> ");
-		}
-	}
-}
-
-
-// Force loads the contents of the index of the current scroller list. It does this by
-// pulling the onclick method out and executing it manually.
-function forceLoadOfContent(index_to_load){
-	var scroller = $('listScroller');
-	var a_array = scroller.getElementsByTagName('a');
-	if ((index_to_load >= 0) && (index_to_load < a_array.length)){
-		var load_element = a_array[index_to_load];
-		var el_text = load_element.innerHTML.strip();
-		setSearchFieldValue(el_text);
-		setSavedSearch(getCurrentTab(), el_text);
-		eval("new " + load_element.onclick);
-	}
-}
-
-function forceLoadOfContentAnchor(anchor_id){
-	
-	var load_element = $(anchor_id);
-	if (load_element != null){
-		var el_text = load_element.innerHTML.strip();
-		setSearchFieldValue(el_text);
-		scrollToAnchor(anchor_id);
-		setSavedSearch(getCurrentTab(), el_text);
-		eval("new " + load_element.onclick);
-	}
-}
-
-var From_URL_Param = false;
-function paramLoadOfContentAnchor(anchor_id){
-	From_URL_Param = true;
-	forceLoadOfContentAnchor(anchor_id);
-}
-
-//this handles the up/down keystrokes to move the selection of items in the list
-function scrollListToElementOffset(anchor_id, offset){
-	var scroller = $('listScroller');
-	var a_array = scroller.getElementsByTagName('a');
-	var current_index = findIndexOfAnchor(a_array, anchor_id);
-	if ((current_index >= 0) && (current_index < a_array.length)){
-		scrollListToAnchor(a_array[current_index + offset].id);
-		setListActiveAnchor(a_array[current_index + offset].id);
-	}
-}
-
-function findIndexOfAnchor(a_array, anchor_id){
-	var found=false;
-	var counter = 0;
-	while(!found && counter < a_array.length){
-		if (a_array[counter].id == anchor_id){
-			found = true;
-		}else{
-			counter +=1;
-		}
-	}
-	return(counter);
-}
-
-function scrollToName(searcher_name){
-
-	var scroller = $('listScroller');
-	var a_array = scroller.getElementsByTagName('a');
-
-	if (!searcher_name.match(new RegExp(/\s+/))){ //if searcher name is blank
-		
-		var searcher_pattern = new RegExp("^"+searcher_name, "i"); //the "i" is for case INsensitive
-		var found_index = -1;
-
-		var found = false;
-		var x = 0;
-		while(!found && x < a_array.length){
-			if(a_array[x].innerHTML.match(searcher_pattern)){
-				found = true;
-				found_index = x;
-			}
-			else{
-				x++;
-			}
-		}
-
-		// // an attempt at binary searching... have not given up on this yet...
-		//found_index = binSearcher(searcher_pattern, a_array, 0, a_array.length);
-
-		if ((found_index >= 0) && (found_index < a_array.length)){
-
-			scrollListToAnchor(a_array[found_index].id);//scroll to the item
-			setListActiveAnchor(a_array[found_index].id);//highlight the item
-		}
-	}else{ //since searcher name is blank 
-		//scrollListToIndex(a_array, 0);//scroll to the item
-		//setListActiveItem(a_array, 0);//highlight the item
-	}
-}
-
-function scrollToAnchor(anchor_id){
-	var scroller = $('listScroller');
-	if ($(anchor_id) != null){
-		scrollListToAnchor(anchor_id);
-		setListActiveAnchor(anchor_id);
-	}
-}
-
-function getY(element){
-	
-	var y = 0;
-	for( var e = element; e; e = e.offsetParent)//iterate the offset Parents
-	{
-		y += e.offsetTop; //add up the offsetTop values
-	}
-	//for( e = element.parentNode; e && e != document.body; e = e.parentNode)
-	//	if (e.scrollTop) y -= e.scrollTop; //subtract scrollbar values
-	return y;
-}
-
-//function setListActiveItem(item_array, active_index){
-//	
-//	item_array[getCurrentIndex()].className = "";
-//	setCurrentIndex(active_index);
-//	item_array[getCurrentIndex()].className = "activeA"; //setting the active class name
-//}
-
-function setListActiveAnchor(active_anchor){
-	if ((getCurrentAnchor() != null) && ($(getCurrentAnchor()) != null)){
-		$(getCurrentAnchor()).className = "";
-	}
-	setCurrentAnchor(active_anchor);
-	$(getCurrentAnchor()).className = "activeA";
-	
-}
-
-//handles the scrolling of the list and setting of the current index
-//function scrollListToIndex(a_array, scroll_index){
-//	if (scroll_index > 0){
-//	    var scroller = $('listScroller');
-//		scroller.scrollTop = getY(a_array[scroll_index]) - 120; //the -120 is what keeps it from going to the top...
-//	}
-//}
-
-function scrollListToAnchor(scroll2_anchor){
-	var scroller = $('listScroller');
-	scroller.scrollTop = getY($(scroll2_anchor)) - 120;
-}
-
-function jumpToAnchor(anchor_id){
-
-	var contentScroller = $('rdocContent');
-	var a_div = $(anchor_id);
-	contentScroller.scrollTop = getY(a_div) - 80; //80 is the offset to adjust scroll point
-	var a_title = $(anchor_id + "_title");
-  a_title.style.backgroundColor = "#222";
-  a_title.style.color = "#FFF";
-  a_title.style.padding = "3px";
-  // a_title.style.borderBottom = "2px solid #ccc";
-
-	//other attempts
-	//a_div.className = "activeMethod"; //setting the active class name
-	//a_div.style.backgroundColor = "#ffc";
-	//var titles = a_div.getElementsByClassName("title");
-	//titles[0].className = "activeTitle";
-
-}
-
-function jumpToTop(){
-	$('rdocContent').scrollTop = 0;
-}
-
-function changeLoadingStatus(status){
-	if (status == "on"){
-		$('loadingStatus').show();
-	}
-	else{
-		$('loadingStatus').hide();
-	}
-}
-
-//************* Misc functions (mostly from the old rdocs) ***********************
-//snagged code from the old templating system
-function toggleSource( id ){
-	
-         var elem
-         var link
-
-         if( document.getElementById )
-         {
-           elem = document.getElementById( id )
-           link = document.getElementById( "l_" + id )
-         }
-         else if ( document.all )
-         {
-           elem = eval( "document.all." + id )
-           link = eval( "document.all.l_" + id )
-         }
-         else
-           return false;
-
-         if( elem.style.display == "block" )
-         {
-           elem.style.display = "none"
-           link.innerHTML = "show source"
-         }
-         else
-         {
-           elem.style.display = "block"
-           link.innerHTML = "hide source"
-         }
-}
-
-function openCode( url ){
-     window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
-}	
-
-//this function handles the ajax calling and afterits loaded the jumping to the anchor...
-function jsHref(url){
-	//alert(url);
-    var mainHtml = new Ajax.Request(url, {
-	  method: 'get',
-	  onSuccess: function(method_data) {
-	   	setMainContent(method_data.responseText);}
-		});
-}
-
-//function comparePatterns(string, regexp){
-//	var direction = 0;
-//	
-//	
-//	return (direction)
-//}
-
-////returns the index of the element 
-//function binSearcher(regexp_pattern, list, start_index, stop_index){
-//	//divide the list in half
-//	var split_point = 0;
-//	split_point = parseInt((stop_index - start_index)/2);
-//	direction = comparePatterns(list[split_point].innerHTML, regexp_pattern);
-//	if(direction < 0)
-//		return (binSearcher(regexp_pattern, list, start_index, split_point));
-//	else
-//		if(direction > 0)
-//			return (binSearcher(regexp_pattern, list, split_point, stop_index));
-//		else
-//			return(split_point);
-//	
-//}
-
-
-
diff --git a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/index.html.erb b/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/index.html.erb
deleted file mode 100644
index 5c8e798..0000000
--- a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/index.html.erb
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
-  <head>
-    <title>Documentation</title>
-    <meta content='text/html;charset=UTF-8' http-equiv='content-type' />
-    <meta content='all' name='robots' />
-    <meta content='text/html;charset=utf-8' http-equiv='content-type' />
-    <meta content='no' http-equiv='msthemecompatible' />
-    <meta content='false' http-equiv='imagetoolbar' />
-    <link href="generators/template/merb/merb.css" media="screen" rel="stylesheet" type="text/css" />
-  </head>
-  <body>
-    <div id='content'>
-      <div class='wrap_to_center'>
-          <div class='full_width' id='content_top'>
-            <div id='content_bottom'>
-              <div id='content_full'>
-                <h1>Documentation</h1>
-                <ul>
-                <% @directories.each do |directory| %>
-                  <li id="merb-core"><a href="<%= directory %>/index.html"><%= directory.capitalize %></a></li>
-                <% end %>
-                </ul>
-              </div> 
-            </div>
-          </div>
-      </div>
-      <div id='footer'>
-        <div class='wrap_to_center'>
-            <p>
-              © 2008, Merb Team | Merb is released under the <a href="http://www.opensource.org/licenses/mit-license.php">MIT License</a>
-            </p>
-        </div>
-      </div>
-    </div>
-  </body>
-</html>
diff --git a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb.css b/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb.css
deleted file mode 100644
index e4f5531..0000000
--- a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb.css
+++ /dev/null
@@ -1,252 +0,0 @@
-html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, font, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td {
-  margin: 0;
-  padding: 0;
-  border: 0;
-  font-weight: inherit;
-  font-style: inherit;
-  font-size: 100%;
-  font-family: inherit;
-  vertical-align: baseline; }
-
-/*  GENERAL RULES  */
-
-body {
-  background: #000 url(../img/body.gif) repeat-x bottom center;
-  color: #000;
-  font: normal 12px "Lucida Grande", "Arial", sans-serif;
-  line-height: 1;
-}  
-ul {list-style-type: none;}
-#content_full ul.revisions{list-style-type: disc;}
-#content_full ul.revisions li{margin-left: 15px;padding: 3px 0;}
-li a {display: block;}
-#content_full ul.revisions li a{display: inline;}
-strong {font-weight: bold;}
-table {border-collapse: separate;border-spacing: 0; }
-caption, th, td {text-align: left;font-weight: normal; }
-.invisible {display: none;}
-.full_width {width:100%;}
-
-/*  LAYOUT  */
-  
-.wrap_to_center, #foot {
-  margin: 0 auto;
-  display: block;
-  width: 800px;
-}
-
-#content {width: 100%;}
-
-#content_top {
-  background: #fff url(../img/content_top.gif) no-repeat top center;  
-  float:left;
-  margin:25px 0px;
-  width:100%;
-}
-#content_bottom {
-  background: url(../img/content_bottom.gif) no-repeat bottom center;
-  width:100%;
-  float:left;
-}
-#content_main {
-  float:left;
-  margin: 10px 20px 20px 20px;
-  width:506px;
-}
-#content p {
-  line-height:17px;
-}
-#content_full {margin: 10px 20px 20px 20px;}
-
-/*  HEADER & NAVIGATION  */
-
-#header {
-  background: #1db900 url(../img/header_waves.gif) repeat-x top center;
-  height:74px;
-  width: 100%;
-}
-#waves {
-  background: url(../img/header_waves.gif)no-repeat top left;
-  height:74px;
-  width:980px;
-}  
-#header img {margin-top:8px; float:left;}
-#header a {color:#fff; text-decoration:none;}
-#header a:hover {color:#000;}
-ul#nav {float:right;display:block;width:43.3em;margin-top:25px;}
-ul#nav li {display:block;float:left;}
-ul#nav li a {display:block;float:left;margin:0px 5px;padding:6px 9px 31px 9px;}
-ul#nav li a:hover {background:url(../img/header_hover.gif) repeat-x bottom center;}
-ul#nav li a#active {background:url(../img/header_arrow.gif)no-repeat bottom center;}
-ul#nav li.last a {margin-right:0;}
-
-/*  TEXT FORMATTING  */
-
-h1 {
-  border-bottom:2px solid #ccc;
-  color:#000;
-  font:bold 28px "Arial" sans-serif;
-  letter-spacing:1px;
-  margin:20px 0px;
-  text-align:left;
-  width:100%;
-}  
-h1.home {
-  border:0;
-  color:#fff;
-  font-size:36px;
-  margin:20px 0px;
-  text-align:center;
-}
-h2 {
-  color:#7aad00;
-  font:bold 22px "Lucida Grande" sans-serif;
-  margin:10px 0px;
-}
-h3 {
-  font:bold 16px "Lucida Grande";
-  margin:10px 0px;
-}
-#content a {color:#d7ff00;}
-#content a:hover {background:#d7ff00;color:#000;}
-#content_main ul {margin:10px 0px;}
-#content_main ul li {
-  background: url(../img/li.gif) no-repeat left center;
-  padding: 4px 4px 4px 16px;
-  font-weight:bold;
-}
-p {margin-bottom:12px;}
-#content_main a,#content_full a {color:#11b716;font-weight:bold;}
-#content_main a:hover,#content_full a:hover {background:#22d716;}
-pre {
-  background:#222;
-  color:#fff;
-  font:12px "Courier" serif;
-  line-height:18px;
-  padding: 12px;
-  margin-bottom: 10px;
-}
-code {
-  font:bold 12px "Courier" serif;
-}
-pre code {font-weight:normal;}
-
-/*  SIDEBAR FOR CONTENT  */
-
-#content_sidebar {
-  float: left;
-  margin: 20px 20px 15px 10px;
-  width: 224px;
-}
-.sidebar_top {
-  background:#868686 url(../img/sidebar_top.gif) no-repeat top center;
-  margin-bottom:12px;
-  width:224px;
-}
-dl.sidebar_bottom {
-  background: url(../img/sidebar_bottom.gif) no-repeat bottom center;
-  padding:12px;
-}
-dl.sidebar_bottom dt {
-  color:#fff;
-  font:bold 14px "Lucida Grande" sans-serif;
-  margin-bottom:6px;
-}
-dl.sidebar_bottom dd {padding:3px 0px;}
-#content_sidebar p {padding:10px 0px;}
-p#rss a {
-  background: url(../img/rss.gif) no-repeat left center;
-  color:#000;
-  font:bold 14px "Lucida Grande";
-  padding: 8px 6px 8px 34px;
-  text-decoration:none;
-}
-p#rss a:hover {
-  background: url(../img/rss.gif) no-repeat left center;
-  background-color:#fff;
-  text-decoration:underline;
-}
-
-/*  FOOTER  */
-
-#footer {background:#444; clear:both;}
-#footer p {padding:12px; color:#999; margin:0; text-align:center;}
-
-/*  FEATURES PAGE  */
-.feature {
-  background-repeat:no-repeat;
-  background-position:top left;
-  border-bottom:2px solid #ccc;
-  padding-left:150px;
-}
-div#speed {background-image: url(../img/feature_speed.gif);}                        
-div#light {background-image: url(../img/feature_light.gif);}                        
-div#power {background-image: url(../img/feature_power.gif);}
-
-.quicklinks_top {
-  background:#868686 url(../img/quicklinks_top.gif) no-repeat top center;
-  float:right;
-  margin-bottom:12px;
-  width:169px;  
-}               
-ul.quicklinks_bottom {
-  background: url(../img/quicklinks_bottom.gif) no-repeat bottom center;
-  padding:12px;
-}
-ul.quicklinks_bottom li {
-  display:block;
-  padding:3px 0px;
-}
-#content_full ul.quicklinks_bottom li a{
-  color:#d7ff00;
-  display:inline;
-}
-#content_full ul.quicklinks_bottom li a:hover {
-  background:#d7ff00;
-  color:#000;
-}
-
-/*  DOCUMENTATION PAGE  */
-.sub-framework {
-  border-bottom:2px solid #ccc;
-  margin-bottom: 20px;
-  padding-bottom: 10px;
-}
-
-
-/*  ICONS FOR HOMEPAGE  */
-
-#icons_top {
-  background: url(../img/icons_top.gif) no-repeat top center;
-  float:left;
-  width:800px;
-}
-#icons_bottom {
-  background: url(../img/icons_bottom.gif) no-repeat bottom center;
-  float:left;
-  width:800px;
-}
-#icons_top dl {
-  color:#fff;
-  float:left;
-  width: 224px;
-  padding: 15px 20px;
-}
-#icons_top dt {
-  background-repeat:no-repeat;
-  background-position:center 2.5em;
-  color:#35d726;
-  font:bold 18px 'Lucida Grande' sans-serif;
-  padding: 6px 6px 150px 6px;
-  text-align:center;
-}
-#icons_top dd {
-  font: 11px "Lucida Grande";
-  line-height:18px;
-  text-align:center;
-}
-dl#speed, dl#light {border-right:1px solid #444;}
-dl#light, dl#power {border-left:1px solid #000;}
-dl#speed dt {background-image: url(../img/icon_speed.gif);}
-dl#light dt {background-image: url(../img/icon_light.gif);}
-dl#power dt {background-image: url(../img/icon_power.gif);}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb.rb b/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb.rb
deleted file mode 100644
index 36a77ed..0000000
--- a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb.rb
+++ /dev/null
@@ -1,351 +0,0 @@
-module RDoc
-module Page
-
-STYLE = File.read(File.join(File.dirname(__FILE__), 'merb_doc_styles.css'))
-FONTS = ""
-
-###################################################################
-
-CLASS_PAGE = <<HTML
-<div id="%class_seq%">
-<div class='banner'>
-  <span class="file-title-prefix">%classmod%</span><br />%full_name%<br/>
-  In:
-START:infiles
-<a href="#" onclick="jsHref('%full_path_url%');">%full_path%</a>
-IF:cvsurl
- (<a href="#" onclick="jsHref('%cvsurl%');">CVS</a>)
-ENDIF:cvsurl
-END:infiles
-
-IF:parent
-Parent: 
-IF:par_url
-        <a href="#" onclick="jsHref('%par_url%');">
-ENDIF:par_url
-%parent%
-IF:par_url
-         </a>
-ENDIF:par_url
-ENDIF:parent
-</div>
-HTML
-
-###################################################################
-
-METHOD_LIST = <<HTML
-  <div id="content">
-IF:diagram
-  <table cellpadding='0' cellspacing='0' border='0' width="100%"><tr><td align="center">
-    %diagram%
-  </td></tr></table>
-ENDIF:diagram
-
-IF:description
-  <div class="description">%description%</div>
-ENDIF:description
-
-IF:requires
-  <div class="sectiontitle">Required Files</div>
-  <ul>
-START:requires
-  <li><a href="#" onclick="jsHref('%href%');">%name%</a></li>
-END:requires
-  </ul>
-ENDIF:requires
-
-IF:toc
-  <div class="sectiontitle">Contents</div>
-  <ul>
-START:toc
-  <li><a href="#" onclick="jsHref('%href%');">%secname%</a></li>
-END:toc
-  </ul>
-ENDIF:toc
-
-IF:methods
-  <div class="sectiontitle">Methods</div>
-  <ul>
-START:methods
-  <li><a href="index.html?a=%href%&name=%name%" >%name%</a></li>
-END:methods
-  </ul>
-ENDIF:methods
-
-IF:includes
-<div class="sectiontitle">Included Modules</div>
-<ul>
-START:includes
-  <li><a href="#" onclick="jsHref('%href%');">%name%</a></li>
-END:includes
-</ul>
-ENDIF:includes
-
-START:sections
-IF:sectitle
-<div class="sectiontitle"><a href="%secsequence%">%sectitle%</a></div>
-IF:seccomment
-<div class="description">
-%seccomment%
-</div>
-ENDIF:seccomment
-ENDIF:sectitle
-
-IF:classlist
-  <div class="sectiontitle">Classes and Modules</div>
-  %classlist%
-ENDIF:classlist
-
-IF:constants
-  <div class="sectiontitle">Constants</div>
-  <table border='0' cellpadding='5'>
-START:constants
-  <tr valign='top'>
-    <td class="attr-name">%name%</td>
-    <td>=</td>
-    <td class="attr-value">%value%</td>
-  </tr>
-IF:desc
-  <tr valign='top'>
-    <td> </td>
-    <td colspan="2" class="attr-desc">%desc%</td>
-  </tr>
-ENDIF:desc
-END:constants
-  </table>
-ENDIF:constants
-
-IF:attributes
-  <div class="sectiontitle">Attributes</div>
-  <table border='0' cellpadding='5'>
-START:attributes
-  <tr valign='top'>
-    <td class='attr-rw'>
-IF:rw
-[%rw%]
-ENDIF:rw
-    </td>
-    <td class='attr-name'>%name%</td>
-    <td class='attr-desc'>%a_desc%</td>
-  </tr>
-END:attributes
-  </table>
-ENDIF:attributes
-
-IF:method_list
-START:method_list
-IF:methods
-<div class="sectiontitle">%type% %category% methods</div>
-START:methods
-<div id="%m_seq%" class="method">
-  <div id="%m_seq%_title" class="title">
-IF:callseq
-    <b>%callseq%</b>
-ENDIF:callseq
-IFNOT:callseq
-    <b>%name%</b>%params%
-ENDIF:callseq
-IF:codeurl
-[ <a href="javascript:openCode('%codeurl%')">source</a> ]
-ENDIF:codeurl
-  </div>
-IF:m_desc
-  <div class="description">
-  %m_desc%
-  </div>
-ENDIF:m_desc
-IF:aka
-<div class="aka">
-  This method is also aliased as
-START:aka
-  <a href="index.html?a=%aref%&name=%name%">%name%</a>
-END:aka
-</div>
-ENDIF:aka
-IF:sourcecode
-<div class="sourcecode">
-  <p class="source-link">[ <a href="javascript:toggleSource('%aref%_source')" id="l_%aref%_source">show source</a> ]</p>
-  <div id="%aref%_source" class="dyn-source">
-<pre>
-%sourcecode%
-</pre>
-  </div>
-</div>
-ENDIF:sourcecode
-</div>
-END:methods
-ENDIF:methods
-END:method_list
-ENDIF:method_list
-END:sections
-</div>
-HTML
-
-
-
-
-BODY = <<ENDBODY
-  !INCLUDE! <!-- banner header -->
-
-  <div id="bodyContent" >
-    #{METHOD_LIST}
-  </div>
-
-ENDBODY
-
-
-
-SRC_BODY = <<ENDSRCBODY
-  !INCLUDE! <!-- banner header -->
-
-  <div id="bodyContent" >
-    <h2>Source Code</h2>
-    <pre>%file_source_code%</pre>
-    </div>
-ENDSRCBODY
-
-
-###################### File Page ##########################
-FILE_PAGE = <<HTML
-<div id="fileHeader">
-    <h1>%short_name%</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>%full_path%
-IF:cvsurl
-         (<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
-ENDIF:cvsurl
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>%dtm_modified%</td>
-    </tr>
-    </table>
-  </div>
-HTML
-
-
-#### This is not used but kept for historical purposes
-########################## Source code ########################## 
-# Separate page onlye
-
-SRC_PAGE = <<HTML
-<html>
-<head><title>%title%</title>
-<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
-<style>
-.ruby-comment    { color: green; font-style: italic }
-.ruby-constant   { color: #4433aa; font-weight: bold; }
-.ruby-identifier { color: #222222;  }
-.ruby-ivar       { color: #2233dd; }
-.ruby-keyword    { color: #3333FF; font-weight: bold }
-.ruby-node       { color: #777777; }
-.ruby-operator   { color: #111111;  }
-.ruby-regexp     { color: #662222; }
-.ruby-value      { color: #662222; font-style: italic }
-  .kw { color: #3333FF; font-weight: bold }
-  .cmt { color: green; font-style: italic }
-  .str { color: #662222; font-style: italic }
-  .re  { color: #662222; }
-</style>
-</head>
-<body bgcolor="white">
-<pre>%code%</pre>
-</body>
-</html>
-HTML
-
-########################### source page body ###################
-
-SCR_CODE_BODY = <<HTML
-    <div id="source">
-    %source_code%
-    </div>
-
-HTML
-
-########################## Index ################################
-
-FR_INDEX_BODY = <<HTML
-!INCLUDE!
-HTML
-
-FILE_INDEX = <<HTML
-<ul>
-START:entries
-<li><a id="%seq_id%_link" href="index.html?a=%seq_id%&name=%name%" onclick="loadIndexContent('%href%','%seq_id%','%name%', '%scope%');">%name%</a><small>%scope%</small></li>
-END:entries
-</ul>
-HTML
-
-CLASS_INDEX = FILE_INDEX
-METHOD_INDEX = FILE_INDEX
-
-INDEX = <<HTML
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <meta name="description" content="A nifty way to interact with the Merb API" />
- 	<meta name="author" content="created by Brian Chamberlain. You can contact me using 'blchamberlain' on the gmail." />
-	<meta name="keywords" content="merb, ruby, purple, monkey, dishwasher" />
-	<title>Merb | %title% API Documentation</title>
-	<link rel="stylesheet" href="http://merbivore.com/documentation/stylesheet.css" type="text/css" media="screen" />    
-	<script type="text/javascript" src="http://merbivore.com/documentation/prototype.js" ></script>
-	<script type="text/javascript" src="http://merbivore.com/documentation/api_grease.js" ></script>
-</head>
-<body onload="setupPage();">
-<ul id="groupType">
-	<li>methods</li>
-	<li>classes</li>
-	<li>files</li>
-	<li id="loadingStatus" style="display:none;">	loading...</li>
-</ul>	
-<div id="listFrame">
-	<div id="listSearch">
-		<form id="searchForm" method="get" action="#" onsubmit="return false">
-			<input type="text" name="searchText" id="searchTextField" size="30" autocomplete="off" />
-	 	</form>
-	</div>
-	<div id="listScroller">
-	    Loading via ajax... this could take a sec.
-	</div>	
-</div>
-<div id="browserBar">
-	   <span id="browserBarInfo">%title% README</span>
-</div>
-<div id="rdocContent">
-  %content%
-</div>
-<div id="floater">
-<strong>Documentation for %title% </strong><a href="#" onmouseover="$('tips').show();" onmouseout="$('tips').hide();">usage tips</a>
-<div id="tips" style="position:absolute;width:350px;top:15px;right:20px;padding:5px;border:1px solid #333;background-color:#fafafa;display:none;">
-	<p><strong>Some tips</strong> 
-		<ul>
-			<li> Up/Down keys move through the search list</li>
-			<li> Return/enter key loads selected item</li>
-			<li> Want to use this RDOC template for your own project? Check out <br /> http://rubyforge.org/projects/jaxdoc</li>
-		</ul>
-	</p>
-</div>
-<div id="blowOutListBox" style="display:none;"> </div>
-<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
-</script>
-<script type="text/javascript">
-_uacct = "UA-3085184-1";
-urchinTracker();
-</script>
-</body>
-</html>
-HTML
-
-API_GREASE_JS = File.read(File.join(File.dirname(__FILE__), 'api_grease.js'))
-
-PROTOTYPE_JS = File.read(File.join(File.dirname(__FILE__), 'prototype.js'))
-end
-end
-
diff --git a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb_doc_styles.css b/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb_doc_styles.css
deleted file mode 100644
index cb01bb7..0000000
--- a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/merb_doc_styles.css
+++ /dev/null
@@ -1,492 +0,0 @@
-html, body {
-	padding:10px 0px 0px 5px;
-	margin: 0px;
-	font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif;
-	font-size: 14px;
-}
-
-body {
-  background: #000000 url(http://merbivore.com/img/header_waves.gif) repeat-x scroll center top;
-}
-
-td, p {
-  background: #FFF;
-  color: #000;
-  margin: 0px;
-  font-size: small;
-  line-height: 17px;
-  margin-bottom 12px;
-}
-
-#floater {
-  position: absolute;
-  top: 5px;
-  right: 5px;
-}
-
-#floater strong {
-  color: white;
-}
-
-#floater a {
-  color: black;
-}
-
-#floater a:hover {
-  background-color: transparent;
-}
-
-
-/*holds the whole searching/drill down stuff */
-#listFrame{
-	float:left;
-	padding: 2px;
-	width: 350px;
-	background-color: #868686;
-	border: 1px solid #999;
-	border-right: none;
-}
-
-#browserBar{
-	height: 25px;
-	padding:11px 0px 0px 0px;
-	margin:0px;
-	background-color: #868686;	
-  border-top: 1px solid #999;
-	color: white;
-}
-
-#browserBar a{
-	text-decoration: none;
-}
-
-.button{
-	text-decoration: none;
-	padding:3px 8px 3px 8px;
-	border: 1px solid #66a;
-	background-color: #ccf;
-	color: #66a;
-}
-
-.buttonInactive{
-	text-decoration: none;
-	padding:3px 8px 3px 8px;
-	border: 1px solid #999;
-	background-color: #ccc;
-	color: #999;
-}
-
-.miniButton{
-	text-decoration: none;
-	padding:3px 2px 3px 2px;
-	border: 1px solid #66a;
-	background-color: #ccf;
-	color: #66a;
-}
-
-.miniButtonInactive{
-	text-decoration: none;
-	padding:3px 2px 3px 2px;
-	border: 1px solid #999;
-	background-color: #ccc;
-	color: #999;
-}
-
-#blowOutListBox{
-	position: absolute;
-	top: 63px;
-	left: 399px;
-	border: 1px solid #999;
-	padding: 0px;
-	margin: 0px;
-	z-index: 1000;
-	background-color: #ccf;
-	color: #66a;
-}
-
-#blowOutListBox ul{
-	list-style-type:none;
-	padding: 0px;
-	margin: 0px;
-}
-
-#blowOutListBox ul li{
-	padding: 3px;
-	margin: 0px;
-	line-height: 1.1em;
-	
-}
-
-#blowOutListBox ul li a{
-	text-decoration: none;
-	padding: 3px;
-}
-#blowOutListBox ul li a:hover{
-	background-color: #ddf;
-}
-
-/*holds the content for browsing etc... also is the target of method/class/file name clicks */
-#rdocContent{
-	height: 600px;
-	background-color: #fff;
-	border: 1px solid #999;
-	border-left: 0px;
-	padding:5px;
-	overflow: auto;
-}
-
-/*the grouping for methods,files,class,all... i.e. the tabs */
-ul#groupType{
-	list-style-type: none;
-	padding: 0px;
-	padding-left: 5px;
-	margin: 0px;
-}
-
-ul#groupType li{
-  color: white;
-	display:inline;
-	padding: 5px 5px 0px 5px;
-	cursor: pointer;
-}
-
-ul#groupType li#loadingStatus{
-	margin: 3px;
-	border: 0px;
-	padding: 3px 3px 6px 3px;
-	color: #666;
-}
-
-ul#groupType li.activeLi{
-  border: 1px solid #999;
-	border-bottom: 0px;
-	background-color: #868686;
-	font-weight: bold;
-	padding-bottom: 1px;
-}
-
-#listSearch{
-	height: 25px;
-	padding: 3px;
-}
-
-#listSearch input[type=text]{
-	width: 340px;
-	font-size: 1.2em;
-}
-
-#listScroller{
-	width: 342px;
-	height: 700px;
-	margin: 3px;
-	background-color: #fcfcfc;
-	border: 1px solid #999;
-	overflow: auto;
-}
-
-#listScroller ul{
-	width: 500px;
-	padding:0px;
-	margin:0px;
-	list-style: none;
-}
-
-#listScroller li{
-	padding: 0px;
-	margin: 0px;
-	display: block;
-	line-height: 1.1em;
-}
-
-a, h1 a, h2 a, .sectiontitle a, #listScroller a{
-  color: #11B716;
-  font-weight: bold;
-  text-decoration: none;
-	padding: 0px 1px 1px 1px;
-	margin: 3px;
-	font-weight: bold;
-}
-
-a:hover, h1 a:hover, h2 a:hover, .sectiontitle a:hover, #listScroller a:hover{
-	background-color: #22D716;
-	color: black;
-}
-
-#browserBar a, .banner a {
-  color: #D7FF00;
-}
-
-#browserBar a:hover, .banner a:hover {
-  background-color: #D7FF00;
-  color: #000;
-}
-
-#listScroller a.activeA {
-	background-color: #22D716;
-	color: black ;
-	border: 1px solid #ccc;
-	padding: 0px 1px 1px 1px; 
-}
-
-#listScroller small{
-	color: #999;
-}
-
-.activeTitle{
-  font-family: monospace;
-  font-size: large;
-  border-bottom: 1px dashed black;
-  margin-bottom: 0.3em;
-  padding-bottom: 0.1em;
-  background-color: #ffc;
-}
-
-.activeMethod{
-  margin-left: 1em;
-  margin-right: 1em;
-  margin-bottom: 1em;
-}
-
-
-.activeMethod .title {
-  font-family: monospace;
-  font-size: large;
-  border-bottom: 1px dashed black;
-  margin-bottom: 0.3em;
-  padding-bottom: 0.1em;
-  background-color: #ffa;
-}
-
-.activeMethod .description, .activeMethod .sourcecode {
-  margin-left: 1em;
-}
-
-.activeMethod .sourcecode p.source-link {
-  text-indent: 0em;
-  margin-top: 0.5em;
-}
-
-.activeMethod .aka {
-  margin-top: 0.3em;
-  margin-left: 1em;
-  font-style: italic;
-  text-indent: 2em;
-}
-
-#content {
-  margin: 0.5em;
-}
-
-#description p {
-  margin-bottom: 0.5em;
-}
-
-.sectiontitle {
-  color: black;
-  font-size: 28px;
-  margin: 20px 0px;
-  border-bottom: 2px solid #CCCCCC;
-  
-/*  margin-top: 1em;
-  margin-bottom: 1em;
-  padding: 0.5em;
-  padding-left: 2em;
-  background: #005;
-  color: #FFF;
-  font-weight: bold;
-  border: 1px dotted black;*/
-}
-
-.attr-rw {
-  padding-left: 1em;
-  padding-right: 1em;
-  text-align: center;
-  color: #7AAD00;
-}
-
-.attr-name {
-  font-weight: bold;
-}
-
-.attr-desc {
-}
-
-.attr-value {
-  font-family: monospace;
-}
-
-.file-title-prefix {
-  font-size: large;
-}
-
-.file-title {
-  font-size: large;
-  font-weight: bold;
-  background: #005;
-  color: #FFF;
-}
-
-.banner {
-  background: #888;
-  color: #FFF;
-/*  border: 1px solid black;*/
-  padding: 1em;
-}
-
-.banner td {
-  background: transparent;
-  color: #FFF;
-}
-
-.dyn-source {
-  display: none;
-  color: #000;
-  border: 0px;
-  border-left: 1px dotted #CCC;
-  border-top: 1px dotted #CCC;
-  margin: 0em;
-  padding: 0em;
-}
-
-.dyn-source .cmt {
-  color: #7AAD00;
-  font-style: italic;
-}
-
-.dyn-source .kw {
-  color: #11B716;
-  font-weight: bold;
-}
-
-.method {
-  margin-left: 1em;
-  margin-right: 1em;
-  margin-bottom: 2em;
-}
-
-.description pre, .description td {
-  font-family:"Courier",serif;
-}
-pre, .description pre {
-  font-size: 12px;
-  line-height: 18px;
-  color: white;
-  padding: 12px;
-  background: #222;
-  overflow: auto;
-}
-
-h2.title, .method .title {
-  color: #7AAD00;
-  font-size: 22px;
-  margin: 10px 0px;
-  
-/*  font-size: large;
-  border-bottom: 1px dashed black;
-  margin: 0.3em;
-  padding: 0.2em;
-*/}
-
-.method .description, .method .sourcecode {
-  margin-left: 1em;
-}
-
-.description p, .sourcecode p {
-  margin-bottom: 0.5em;
-}
-
-.method .sourcecode p.source-link {
-  text-indent: 0em;
-  margin-top: 0.5em;
-}
-
-.method .aka {
-  margin-top: 0.3em;
-  margin-left: 1em;
-  font-style: italic;
-  text-indent: 2em;
-}
-
-h1 {
-  padding: 1em;
-  font-size: x-large;
-}
-
-h2 {
-  padding: 0.5em 1em 0.5em 1em;
-  font-size: large;
-}
-
-
-h1, h2, h3, h4, h5, h6 {
-  color: white;
-  background-color: #868686;
-}
-
-h3, h4, h5, h6 {
-  padding: 0.2em 1em 0.2em 1em;
-  font-weight: bold;
-}
-
-h4 {
-  margin-bottom: 2px;
-}
-
-.sourcecode > pre {
-  padding: 0px;
-  margin: 0px;
-  border: 1px dotted black;
-  background: #FFE;
-}
-
-/* ============= */
-/* = home page = */
-/* ============= */
-
-body#home {
-  margin: 0;
-  padding: 0;
-}
-
-#content {
-  margin: 0 auto;
-  width: 800px;
-}
-
-#content h1.home {
-  background-color: transparent;
-  border:0pt none;
-  color:#FFFFFF;
-  font-size:36px;
-  margin:20px 0px;
-  padding: 0;
-  text-align:center;
-}
-
-#content #documentation-links h2.title {
-  background-color: transparent;
-}
-
-#documentation-links {
-  background-color : white;
-  margin-bottom: 20px;
-  padding-bottom: 10px;
-}
-
-#documentation-links p {
-  margin: 22px;
-}
-
-body#home #footer {
-  background:#444444 none repeat scroll 0%;
-  clear:both;
-}
-
-#footer p {
-  background-color: transparent;
-  color:#999999;
-  margin:0 auto;
-  padding:12px;
-  text-align:center;
-  width: 800px;
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/prototype.js b/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/prototype.js
deleted file mode 100644
index 5058221..0000000
--- a/spec10/public/webrat/test_app/doc/rdoc/generators/template/merb/prototype.js
+++ /dev/null
@@ -1,2515 +0,0 @@
-/*  Prototype JavaScript framework, version 1.5.0
- *  (c) 2005-2007 Sam Stephenson
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://prototype.conio.net/
- *
-/*--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.5.0',
-  BrowserFeatures: {
-    XPath: !!document.evaluate
-  },
-
-  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
-  emptyFunction: function() {},
-  K: function(x) { return x }
-}
-
-var Class = {
-  create: function() {
-    return function() {
-      this.initialize.apply(this, arguments);
-    }
-  }
-}
-
-var Abstract = new Object();
-
-Object.extend = function(destination, source) {
-  for (var property in source) {
-    destination[property] = source[property];
-  }
-  return destination;
-}
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (object === undefined) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : object.toString();
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({}, object);
-  }
-});
-
-Function.prototype.bind = function() {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function() {
-    return __method.apply(object, args.concat($A(arguments)));
-  }
-}
-
-Function.prototype.bindAsEventListener = function(object) {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function(event) {
-    return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));
-  }
-}
-
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    var digits = this.toString(16);
-    if (this < 16) return '0' + digits;
-    return digits;
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  }
-});
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) {}
-    }
-
-    return returnValue;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create();
-PeriodicalExecuter.prototype = {
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  stop: function() {
-    if (!this.timer) return;
-    clearInterval(this.timer);
-    this.timer = null;
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.callback(this);
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-}
-String.interpret = function(value){
-  return value == null ? '' : String(value);
-}
-
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
-    var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
-
-    while (source.length > 0) {
-      if (match = source.match(pattern)) {
-        result += source.slice(0, match.index);
-        result += String.interpret(replacement(match));
-        source  = source.slice(match.index + match[0].length);
-      } else {
-        result += source, source = '';
-      }
-    }
-    return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
-    count = count === undefined ? 1 : count;
-
-    return this.gsub(pattern, function(match) {
-      if (--count < 0) return match[0];
-      return replacement(match);
-    });
-  },
-
-  scan: function(pattern, iterator) {
-    this.gsub(pattern, iterator);
-    return this;
-  },
-
-  truncate: function(length, truncation) {
-    length = length || 30;
-    truncation = truncation === undefined ? '...' : truncation;
-    return this.length > length ?
-      this.slice(0, length - truncation.length) + truncation : this;
-  },
-
-  strip: function() {
-    return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var div = document.createElement('div');
-    var text = document.createTextNode(this);
-    div.appendChild(text);
-    return div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = document.createElement('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
-    var match = this.strip().match(/([^?#]*)(#.*)?$/);
-    if (!match) return {};
-
-    return match[1].split(separator || '&').inject({}, function(hash, pair) {
-      if ((pair = pair.split('='))[0]) {
-        var name = decodeURIComponent(pair[0]);
-        var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;
-
-        if (hash[name] !== undefined) {
-          if (hash[name].constructor != Array)
-            hash[name] = [hash[name]];
-          if (value) hash[name].push(value);
-        }
-        else hash[name] = value;
-      }
-      return hash;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  succ: function() {
-    return this.slice(0, this.length - 1) +
-      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function(){
-    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.replace(/\\/g, '\\\\');
-    if (useDoubleQuotes)
-      return '"' + escapedString.replace(/"/g, '\\"') + '"';
-    else
-      return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (typeof replacement == 'function') return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-}
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-var Template = Class.create();
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-Template.prototype = {
-  initialize: function(template, pattern) {
-    this.template = template.toString();
-    this.pattern  = pattern || Template.Pattern;
-  },
-
-  evaluate: function(object) {
-    return this.template.gsub(this.pattern, function(match) {
-      var before = match[1];
-      if (before == '\\') return match[2];
-      return before + String.interpret(object[match[3]]);
-    });
-  }
-}
-
-var $break    = new Object();
-var $continue = new Object();
-
-var Enumerable = {
-  each: function(iterator) {
-    var index = 0;
-    try {
-      this._each(function(value) {
-        try {
-          iterator(value, index++);
-        } catch (e) {
-          if (e != $continue) throw e;
-        }
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-    return this;
-  },
-
-  eachSlice: function(number, iterator) {
-    var index = -number, slices = [], array = this.toArray();
-    while ((index += number) < array.length)
-      slices.push(array.slice(index, index+number));
-    return slices.map(iterator);
-  },
-
-  all: function(iterator) {
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!(iterator || Prototype.K)(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator) {
-    var result = false;
-    this.each(function(value, index) {
-      if (result = !!(iterator || Prototype.K)(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push((iterator || Prototype.K)(value, index));
-    });
-    return results;
-  },
-
-  detect: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(pattern, iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      var stringValue = value.toString();
-      if (stringValue.match(pattern))
-        results.push((iterator || Prototype.K)(value, index));
-    })
-    return results;
-  },
-
-  include: function(object) {
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
-    fillWith = fillWith === undefined ? null : fillWith;
-    return this.eachSlice(number, function(slice) {
-      while(slice.length < number) slice.push(fillWith);
-      return slice;
-    });
-  },
-
-  inject: function(memo, iterator) {
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.map(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value >= result)
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value < result)
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator) {
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      ((iterator || Prototype.K)(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator) {
-    return this.map(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.map();
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (typeof args.last() == 'function')
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      return iterator(collections.pluck(index));
-    });
-  },
-
-  size: function() {
-    return this.toArray().length;
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-}
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray
-});
-var $A = Array.from = function(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) {
-    return iterable.toArray();
-  } else {
-    var results = [];
-    for (var i = 0, length = iterable.length; i < length; i++)
-      results.push(iterable[i]);
-    return results;
-  }
-}
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse)
-  Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(value && value.constructor == Array ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  indexOf: function(object) {
-    for (var i = 0, length = this.length; i < length; i++)
-      if (this[i] == object) return i;
-    return -1;
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function() {
-    return this.inject([], function(array, value) {
-      return array.include(value) ? array : array.concat([value]);
-    });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
-    return this.length;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  }
-});
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string){
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if(window.opera){
-  Array.prototype.concat = function(){
-    var array = [];
-    for(var i = 0, length = this.length; i < length; i++) array.push(this[i]);
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      if(arguments[i].constructor == Array) {
-        for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
-      } else {
-        array.push(arguments[i]);
-      }
-    }
-    return array;
-  }
-}
-var Hash = function(obj) {
-  Object.extend(this, obj || {});
-};
-
-Object.extend(Hash, {
-  toQueryString: function(obj) {
-    var parts = [];
-
-	  this.prototype._each.call(obj, function(pair) {
-      if (!pair.key) return;
-
-      if (pair.value && pair.value.constructor == Array) {
-        var values = pair.value.compact();
-        if (values.length < 2) pair.value = values.reduce();
-        else {
-        	key = encodeURIComponent(pair.key);
-          values.each(function(value) {
-            value = value != undefined ? encodeURIComponent(value) : '';
-            parts.push(key + '=' + encodeURIComponent(value));
-          });
-          return;
-        }
-      }
-      if (pair.value == undefined) pair[1] = '';
-      parts.push(pair.map(encodeURIComponent).join('='));
-	  });
-
-    return parts.join('&');
-  }
-});
-
-Object.extend(Hash.prototype, Enumerable);
-Object.extend(Hash.prototype, {
-  _each: function(iterator) {
-    for (var key in this) {
-      var value = this[key];
-      if (value && value == Hash.prototype[key]) continue;
-
-      var pair = [key, value];
-      pair.key = key;
-      pair.value = value;
-      iterator(pair);
-    }
-  },
-
-  keys: function() {
-    return this.pluck('key');
-  },
-
-  values: function() {
-    return this.pluck('value');
-  },
-
-  merge: function(hash) {
-    return $H(hash).inject(this, function(mergedHash, pair) {
-      mergedHash[pair.key] = pair.value;
-      return mergedHash;
-    });
-  },
-
-  remove: function() {
-    var result;
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      var value = this[arguments[i]];
-      if (value !== undefined){
-        if (result === undefined) result = value;
-        else {
-          if (result.constructor != Array) result = [result];
-          result.push(value)
-        }
-      }
-      delete this[arguments[i]];
-    }
-    return result;
-  },
-
-  toQueryString: function() {
-    return Hash.toQueryString(this);
-  },
-
-  inspect: function() {
-    return '#<Hash:{' + this.map(function(pair) {
-      return pair.map(Object.inspect).join(': ');
-    }).join(', ') + '}>';
-  }
-});
-
-function $H(object) {
-  if (object && object.constructor == Hash) return object;
-  return new Hash(object);
-};
-ObjectRange = Class.create();
-Object.extend(ObjectRange.prototype, Enumerable);
-Object.extend(ObjectRange.prototype, {
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    while (this.include(value)) {
-      iterator(value);
-      value = value.succ();
-    }
-  },
-
-  include: function(value) {
-    if (value < this.start)
-      return false;
-    if (this.exclusive)
-      return value < this.end;
-    return value <= this.end;
-  }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-}
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new XMLHttpRequest()},
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-}
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responder) {
-    if (!this.include(responder))
-      this.responders.push(responder);
-  },
-
-  unregister: function(responder) {
-    this.responders = this.responders.without(responder);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (typeof responder[callback] == 'function') {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) {}
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate: function() {
-    Ajax.activeRequestCount++;
-  },
-  onComplete: function() {
-    Ajax.activeRequestCount--;
-  }
-});
-
-Ajax.Base = function() {};
-Ajax.Base.prototype = {
-  setOptions: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      contentType:  'application/x-www-form-urlencoded',
-      encoding:     'UTF-8',
-      parameters:   ''
-    }
-    Object.extend(this.options, options || {});
-
-    this.options.method = this.options.method.toLowerCase();
-    if (typeof this.options.parameters == 'string')
-      this.options.parameters = this.options.parameters.toQueryParams();
-  }
-}
-
-Ajax.Request = Class.create();
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
-  _complete: false,
-
-  initialize: function(url, options) {
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-    this.request(url);
-  },
-
-  request: function(url) {
-    this.url = url;
-    this.method = this.options.method;
-    var params = this.options.parameters;
-
-    if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
-      this.method = 'post';
-    }
-
-    params = Hash.toQueryString(params);
-    if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_='
-
-    // when GET, append parameters to URL
-    if (this.method == 'get' && params)
-      this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params;
-
-    try {
-      Ajax.Responders.dispatch('onCreate', this, this.transport);
-
-      this.transport.open(this.method.toUpperCase(), this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous)
-        setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
-
-      this.transport.onreadystatechange = this.onStateChange.bind(this);
-      this.setRequestHeaders();
-
-      var body = this.method == 'post' ? (this.options.postBody || params) : null;
-
-      this.transport.send(body);
-
-      /* Force Firefox to handle ready state 4 for synchronous requests */
-      if (!this.options.asynchronous && this.transport.overrideMimeType)
-        this.onStateChange();
-
-    }
-    catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState > 1 && !((readyState == 4) && this._complete))
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  setRequestHeaders: function() {
-    var headers = {
-      'X-Requested-With': 'XMLHttpRequest',
-      'X-Prototype-Version': Prototype.Version,
-      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
-    };
-
-    if (this.method == 'post') {
-      headers['Content-type'] = this.options.contentType +
-        (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
-      /* Force "Connection: close" for older Mozilla browsers to work
-       * around a bug where XMLHttpRequest sends an incorrect
-       * Content-length header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType &&
-          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
-            headers['Connection'] = 'close';
-    }
-
-    // user-defined headers
-    if (typeof this.options.requestHeaders == 'object') {
-      var extras = this.options.requestHeaders;
-
-      if (typeof extras.push == 'function')
-        for (var i = 0, length = extras.length; i < length; i += 2)
-          headers[extras[i]] = extras[i+1];
-      else
-        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
-    }
-
-    for (var name in headers)
-      this.transport.setRequestHeader(name, headers[name]);
-  },
-
-  success: function() {
-    return !this.transport.status
-        || (this.transport.status >= 200 && this.transport.status < 300);
-  },
-
-  respondToReadyState: function(readyState) {
-    var state = Ajax.Request.Events[readyState];
-    var transport = this.transport, json = this.evalJSON();
-
-    if (state == 'Complete') {
-      try {
-        this._complete = true;
-        (this.options['on' + this.transport.status]
-         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(transport, json);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      if ((this.getHeader('Content-type') || 'text/javascript').strip().
-        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
-          this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
-      Ajax.Responders.dispatch('on' + state, this, transport, json);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-    }
-  },
-
-  getHeader: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) { return null }
-  },
-
-  evalJSON: function() {
-    try {
-      var json = this.getHeader('X-JSON');
-      return json ? eval('(' + json + ')') : null;
-    } catch (e) { return null }
-  },
-
-  evalResponse: function() {
-    try {
-      return eval(this.transport.responseText);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Updater = Class.create();
-
-Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
-  initialize: function(container, url, options) {
-    this.container = {
-      success: (container.success || container),
-      failure: (container.failure || (container.success ? null : container))
-    }
-
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-
-    var onComplete = this.options.onComplete || Prototype.emptyFunction;
-    this.options.onComplete = (function(transport, param) {
-      this.updateContent();
-      onComplete(transport, param);
-    }).bind(this);
-
-    this.request(url);
-  },
-
-  updateContent: function() {
-    var receiver = this.container[this.success() ? 'success' : 'failure'];
-    var response = this.transport.responseText;
-
-    if (!this.options.evalScripts) response = response.stripScripts();
-
-    if (receiver = $(receiver)) {
-      if (this.options.insertion)
-        new this.options.insertion(receiver, response);
-      else
-        receiver.update(response);
-    }
-
-    if (this.success()) {
-      if (this.onComplete)
-        setTimeout(this.onComplete.bind(this), 10);
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create();
-Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
-  initialize: function(container, url, options) {
-    this.setOptions(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = {};
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.options.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(request) {
-    if (this.options.decay) {
-      this.decay = (request.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = request.responseText;
-    }
-    this.timer = setTimeout(this.onTimerEvent.bind(this),
-      this.decay * this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-function $(element) {
-  if (arguments.length > 1) {
-    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
-      elements.push($(arguments[i]));
-    return elements;
-  }
-  if (typeof element == 'string')
-    element = document.getElementById(element);
-  return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
-  document._getElementsByXPath = function(expression, parentElement) {
-    var results = [];
-    var query = document.evaluate(expression, $(parentElement) || document,
-      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-    for (var i = 0, length = query.snapshotLength; i < length; i++)
-      results.push(query.snapshotItem(i));
-    return results;
-  };
-}
-
-document.getElementsByClassName = function(className, parentElement) {
-  if (Prototype.BrowserFeatures.XPath) {
-    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
-    return document._getElementsByXPath(q, parentElement);
-  } else {
-    var children = ($(parentElement) || document.body).getElementsByTagName('*');
-    var elements = [], child;
-    for (var i = 0, length = children.length; i < length; i++) {
-      child = children[i];
-      if (Element.hasClassName(child, className))
-        elements.push(Element.extend(child));
-    }
-    return elements;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Element)
-  var Element = new Object();
-
-Element.extend = function(element) {
-  if (!element || _nativeExtensions || element.nodeType == 3) return element;
-
-  if (!element._extended && element.tagName && element != window) {
-    var methods = Object.clone(Element.Methods), cache = Element.extend.cache;
-
-    if (element.tagName == 'FORM')
-      Object.extend(methods, Form.Methods);
-    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))
-      Object.extend(methods, Form.Element.Methods);
-
-    Object.extend(methods, Element.Methods.Simulated);
-
-    for (var property in methods) {
-      var value = methods[property];
-      if (typeof value == 'function' && !(property in element))
-        element[property] = cache.findOrStore(value);
-    }
-  }
-
-  element._extended = true;
-  return element;
-};
-
-Element.extend.cache = {
-  findOrStore: function(value) {
-    return this[value] = this[value] || function() {
-      return value.apply(null, [this].concat($A(arguments)));
-    }
-  }
-};
-
-Element.Methods = {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function(element) {
-    element = $(element);
-    Element[Element.visible(element) ? 'hide' : 'show'](element);
-    return element;
-  },
-
-  hide: function(element) {
-    $(element).style.display = 'none';
-    return element;
-  },
-
-  show: function(element) {
-    $(element).style.display = '';
-    return element;
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-    return element;
-  },
-
-  update: function(element, html) {
-    html = typeof html == 'undefined' ? '' : html.toString();
-    $(element).innerHTML = html.stripScripts();
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  replace: function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    if (element.outerHTML) {
-      element.outerHTML = html.stripScripts();
-    } else {
-      var range = element.ownerDocument.createRange();
-      range.selectNodeContents(element);
-      element.parentNode.replaceChild(
-        range.createContextualFragment(html.stripScripts()), element);
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  inspect: function(element) {
-    element = $(element);
-    var result = '<' + element.tagName.toLowerCase();
-    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
-      if (value) result += ' ' + attribute + '=' + value.inspect(true);
-    });
-    return result + '>';
-  },
-
-  recursivelyCollect: function(element, property) {
-    element = $(element);
-    var elements = [];
-    while (element = element[property])
-      if (element.nodeType == 1)
-        elements.push(Element.extend(element));
-    return elements;
-  },
-
-  ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
-  },
-
-  descendants: function(element) {
-    return $A($(element).getElementsByTagName('*'));
-  },
-
-  immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
-  },
-
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
-  },
-
-  nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
-  },
-
-  siblings: function(element) {
-    element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
-  },
-
-  match: function(element, selector) {
-    if (typeof selector == 'string')
-      selector = new Selector(selector);
-    return selector.match($(element));
-  },
-
-  up: function(element, expression, index) {
-    return Selector.findElement($(element).ancestors(), expression, index);
-  },
-
-  down: function(element, expression, index) {
-    return Selector.findElement($(element).descendants(), expression, index);
-  },
-
-  previous: function(element, expression, index) {
-    return Selector.findElement($(element).previousSiblings(), expression, index);
-  },
-
-  next: function(element, expression, index) {
-    return Selector.findElement($(element).nextSiblings(), expression, index);
-  },
-
-  getElementsBySelector: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
-  },
-
-  getElementsByClassName: function(element, className) {
-    return document.getElementsByClassName(className, element);
-  },
-
-  readAttribute: function(element, name) {
-    element = $(element);
-    if (document.all && !window.opera) {
-      var t = Element._attributeTranslations;
-      if (t.values[name]) return t.values[name](element, name);
-      if (t.names[name])  name = t.names[name];
-      var attribute = element.attributes[name];
-      if(attribute) return attribute.nodeValue;
-    }
-    return element.getAttribute(name);
-  },
-
-  getHeight: function(element) {
-    return $(element).getDimensions().height;
-  },
-
-  getWidth: function(element) {
-    return $(element).getDimensions().width;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    var elementClassName = element.className;
-    if (elementClassName.length == 0) return false;
-    if (elementClassName == className ||
-        elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
-      return true;
-    return false;
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).add(className);
-    return element;
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).remove(className);
-    return element;
-  },
-
-  toggleClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
-    return element;
-  },
-
-  observe: function() {
-    Event.observe.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  stopObserving: function() {
-    Event.stopObserving.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    var node = element.firstChild;
-    while (node) {
-      var nextNode = node.nextSibling;
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        element.removeChild(node);
-      node = nextNode;
-    }
-    return element;
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.match(/^\s*$/);
-  },
-
-  descendantOf: function(element, ancestor) {
-    element = $(element), ancestor = $(ancestor);
-    while (element = element.parentNode)
-      if (element == ancestor) return true;
-    return false;
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var pos = Position.cumulativeOffset(element);
-    window.scrollTo(pos[0], pos[1]);
-    return element;
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    if (['float','cssFloat'].include(style))
-      style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat');
-    style = style.camelize();
-    var value = element.style[style];
-    if (!value) {
-      if (document.defaultView && document.defaultView.getComputedStyle) {
-        var css = document.defaultView.getComputedStyle(element, null);
-        value = css ? css[style] : null;
-      } else if (element.currentStyle) {
-        value = element.currentStyle[style];
-      }
-    }
-
-    if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none'))
-      value = element['offset'+style.capitalize()] + 'px';
-
-    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
-      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
-    if(style == 'opacity') {
-      if(value) return parseFloat(value);
-      if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
-        if(value[1]) return parseFloat(value[1]) / 100;
-      return 1.0;
-    }
-    return value == 'auto' ? null : value;
-  },
-
-  setStyle: function(element, style) {
-    element = $(element);
-    for (var name in style) {
-      var value = style[name];
-      if(name == 'opacity') {
-        if (value == 1) {
-          value = (/Gecko/.test(navigator.userAgent) &&
-            !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0;
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
-        } else if(value == '') {
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
-        } else {
-          if(value < 0.00001) value = 0;
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +
-              'alpha(opacity='+value*100+')';
-        }
-      } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat';
-      element.style[name.camelize()] = value;
-    }
-    return element;
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    var display = $(element).getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-    return element;
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-    return element;
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return element;
-    element._overflow = element.style.overflow || 'auto';
-    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
-      element.style.overflow = 'hidden';
-    return element;
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (!element._overflow) return element;
-    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
-    element._overflow = null;
-    return element;
-  }
-};
-
-Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});
-
-Element._attributeTranslations = {};
-
-Element._attributeTranslations.names = {
-  colspan:   "colSpan",
-  rowspan:   "rowSpan",
-  valign:    "vAlign",
-  datetime:  "dateTime",
-  accesskey: "accessKey",
-  tabindex:  "tabIndex",
-  enctype:   "encType",
-  maxlength: "maxLength",
-  readonly:  "readOnly",
-  longdesc:  "longDesc"
-};
-
-Element._attributeTranslations.values = {
-  _getAttr: function(element, attribute) {
-    return element.getAttribute(attribute, 2);
-  },
-
-  _flag: function(element, attribute) {
-    return $(element).hasAttribute(attribute) ? attribute : null;
-  },
-
-  style: function(element) {
-    return element.style.cssText.toLowerCase();
-  },
-
-  title: function(element) {
-    var node = element.getAttributeNode('title');
-    return node.specified ? node.nodeValue : null;
-  }
-};
-
-Object.extend(Element._attributeTranslations.values, {
-  href: Element._attributeTranslations.values._getAttr,
-  src:  Element._attributeTranslations.values._getAttr,
-  disabled: Element._attributeTranslations.values._flag,
-  checked:  Element._attributeTranslations.values._flag,
-  readonly: Element._attributeTranslations.values._flag,
-  multiple: Element._attributeTranslations.values._flag
-});
-
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    var t = Element._attributeTranslations;
-    attribute = t.names[attribute] || attribute;
-    return $(element).getAttributeNode(attribute).specified;
-  }
-};
-
-// IE is missing .innerHTML support for TABLE-related elements
-if (document.all && !window.opera){
-  Element.Methods.update = function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    var tagName = element.tagName.toUpperCase();
-    if (['THEAD','TBODY','TR','TD'].include(tagName)) {
-      var div = document.createElement('div');
-      switch (tagName) {
-        case 'THEAD':
-        case 'TBODY':
-          div.innerHTML = '<table><tbody>' +  html.stripScripts() + '</tbody></table>';
-          depth = 2;
-          break;
-        case 'TR':
-          div.innerHTML = '<table><tbody><tr>' +  html.stripScripts() + '</tr></tbody></table>';
-          depth = 3;
-          break;
-        case 'TD':
-          div.innerHTML = '<table><tbody><tr><td>' +  html.stripScripts() + '</td></tr></tbody></table>';
-          depth = 4;
-      }
-      $A(element.childNodes).each(function(node){
-        element.removeChild(node)
-      });
-      depth.times(function(){ div = div.firstChild });
-
-      $A(div.childNodes).each(
-        function(node){ element.appendChild(node) });
-    } else {
-      element.innerHTML = html.stripScripts();
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  }
-};
-
-Object.extend(Element, Element.Methods);
-
-var _nativeExtensions = false;
-
-if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {
-    var className = 'HTML' + tag + 'Element';
-    if(window[className]) return;
-    var klass = window[className] = {};
-    klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__;
-  });
-
-Element.addMethods = function(methods) {
-  Object.extend(Element.Methods, methods || {});
-
-  function copy(methods, destination, onlyIfAbsent) {
-    onlyIfAbsent = onlyIfAbsent || false;
-    var cache = Element.extend.cache;
-    for (var property in methods) {
-      var value = methods[property];
-      if (!onlyIfAbsent || !(property in destination))
-        destination[property] = cache.findOrStore(value);
-    }
-  }
-
-  if (typeof HTMLElement != 'undefined') {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
-    copy(Form.Methods, HTMLFormElement.prototype);
-    [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) {
-      copy(Form.Element.Methods, klass.prototype);
-    });
-    _nativeExtensions = true;
-  }
-}
-
-var Toggle = new Object();
-Toggle.display = Element.toggle;
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.Insertion = function(adjacency) {
-  this.adjacency = adjacency;
-}
-
-Abstract.Insertion.prototype = {
-  initialize: function(element, content) {
-    this.element = $(element);
-    this.content = content.stripScripts();
-
-    if (this.adjacency && this.element.insertAdjacentHTML) {
-      try {
-        this.element.insertAdjacentHTML(this.adjacency, this.content);
-      } catch (e) {
-        var tagName = this.element.tagName.toUpperCase();
-        if (['TBODY', 'TR'].include(tagName)) {
-          this.insertContent(this.contentFromAnonymousTable());
-        } else {
-          throw e;
-        }
-      }
-    } else {
-      this.range = this.element.ownerDocument.createRange();
-      if (this.initializeRange) this.initializeRange();
-      this.insertContent([this.range.createContextualFragment(this.content)]);
-    }
-
-    setTimeout(function() {content.evalScripts()}, 10);
-  },
-
-  contentFromAnonymousTable: function() {
-    var div = document.createElement('div');
-    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
-    return $A(div.childNodes[0].childNodes[0].childNodes);
-  }
-}
-
-var Insertion = new Object();
-
-Insertion.Before = Class.create();
-Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
-  initializeRange: function() {
-    this.range.setStartBefore(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment, this.element);
-    }).bind(this));
-  }
-});
-
-Insertion.Top = Class.create();
-Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(true);
-  },
-
-  insertContent: function(fragments) {
-    fragments.reverse(false).each((function(fragment) {
-      this.element.insertBefore(fragment, this.element.firstChild);
-    }).bind(this));
-  }
-});
-
-Insertion.Bottom = Class.create();
-Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.appendChild(fragment);
-    }).bind(this));
-  }
-});
-
-Insertion.After = Class.create();
-Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
-  initializeRange: function() {
-    this.range.setStartAfter(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment,
-        this.element.nextSibling);
-    }).bind(this));
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set($A(this).concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set($A(this).without(classNameToRemove).join(' '));
-  },
-
-  toString: function() {
-    return $A(this).join(' ');
-  }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-var Selector = Class.create();
-Selector.prototype = {
-  initialize: function(expression) {
-    this.params = {classNames: []};
-    this.expression = expression.toString().strip();
-    this.parseExpression();
-    this.compileMatcher();
-  },
-
-  parseExpression: function() {
-    function abort(message) { throw 'Parse error in selector: ' + message; }
-
-    if (this.expression == '')  abort('empty expression');
-
-    var params = this.params, expr = this.expression, match, modifier, clause, rest;
-    while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
-      params.attributes = params.attributes || [];
-      params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
-      expr = match[1];
-    }
-
-    if (expr == '*') return this.params.wildcard = true;
-
-    while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
-      modifier = match[1], clause = match[2], rest = match[3];
-      switch (modifier) {
-        case '#':       params.id = clause; break;
-        case '.':       params.classNames.push(clause); break;
-        case '':
-        case undefined: params.tagName = clause.toUpperCase(); break;
-        default:        abort(expr.inspect());
-      }
-      expr = rest;
-    }
-
-    if (expr.length > 0) abort(expr.inspect());
-  },
-
-  buildMatchExpression: function() {
-    var params = this.params, conditions = [], clause;
-
-    if (params.wildcard)
-      conditions.push('true');
-    if (clause = params.id)
-      conditions.push('element.readAttribute("id") == ' + clause.inspect());
-    if (clause = params.tagName)
-      conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
-    if ((clause = params.classNames).length > 0)
-      for (var i = 0, length = clause.length; i < length; i++)
-        conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
-    if (clause = params.attributes) {
-      clause.each(function(attribute) {
-        var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
-        var splitValueBy = function(delimiter) {
-          return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
-        }
-
-        switch (attribute.operator) {
-          case '=':       conditions.push(value + ' == ' + attribute.value.inspect()); break;
-          case '~=':      conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
-          case '|=':      conditions.push(
-                            splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
-                          ); break;
-          case '!=':      conditions.push(value + ' != ' + attribute.value.inspect()); break;
-          case '':
-          case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
-          default:        throw 'Unknown operator ' + attribute.operator + ' in selector';
-        }
-      });
-    }
-
-    return conditions.join(' && ');
-  },
-
-  compileMatcher: function() {
-    this.match = new Function('element', 'if (!element.tagName) return false; \
-      element = $(element); \
-      return ' + this.buildMatchExpression());
-  },
-
-  findElements: function(scope) {
-    var element;
-
-    if (element = $(this.params.id))
-      if (this.match(element))
-        if (!scope || Element.childOf(element, scope))
-          return [element];
-
-    scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
-
-    var results = [];
-    for (var i = 0, length = scope.length; i < length; i++)
-      if (this.match(element = scope[i]))
-        results.push(Element.extend(element));
-
-    return results;
-  },
-
-  toString: function() {
-    return this.expression;
-  }
-}
-
-Object.extend(Selector, {
-  matchElements: function(elements, expression) {
-    var selector = new Selector(expression);
-    return elements.select(selector.match.bind(selector)).map(Element.extend);
-  },
-
-  findElement: function(elements, expression, index) {
-    if (typeof expression == 'number') index = expression, expression = false;
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    return expressions.map(function(expression) {
-      return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
-        var selector = new Selector(expr);
-        return results.inject([], function(elements, result) {
-          return elements.concat(selector.findElements(result || element));
-        });
-      });
-    }).flatten();
-  }
-});
-
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
-  reset: function(form) {
-    $(form).reset();
-    return form;
-  },
-
-  serializeElements: function(elements, getHash) {
-    var data = elements.inject({}, function(result, element) {
-      if (!element.disabled && element.name) {
-        var key = element.name, value = $(element).getValue();
-        if (value != undefined) {
-          if (result[key]) {
-            if (result[key].constructor != Array) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
-        }
-      }
-      return result;
-    });
-
-    return getHash ? data : Hash.toQueryString(data);
-  }
-};
-
-Form.Methods = {
-  serialize: function(form, getHash) {
-    return Form.serializeElements(Form.getElements(form), getHash);
-  },
-
-  getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name) return $A(inputs).map(Element.extend);
-
-    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) || (name && input.name != name))
-        continue;
-      matchingInputs.push(Element.extend(input));
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    form = $(form);
-    form.getElements().each(function(element) {
-      element.blur();
-      element.disabled = 'true';
-    });
-    return form;
-  },
-
-  enable: function(form) {
-    form = $(form);
-    form.getElements().each(function(element) {
-      element.disabled = '';
-    });
-    return form;
-  },
-
-  findFirstElement: function(form) {
-    return $(form).getElements().find(function(element) {
-      return element.type != 'hidden' && !element.disabled &&
-        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    form = $(form);
-    form.findFirstElement().activate();
-    return form;
-  }
-}
-
-Object.extend(Form, Form.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
-  focus: function(element) {
-    $(element).focus();
-    return element;
-  },
-
-  select: function(element) {
-    $(element).select();
-    return element;
-  }
-}
-
-Form.Element.Methods = {
-  serialize: function(element) {
-    element = $(element);
-    if (!element.disabled && element.name) {
-      var value = element.getValue();
-      if (value != undefined) {
-        var pair = {};
-        pair[element.name] = value;
-        return Hash.toQueryString(pair);
-      }
-    }
-    return '';
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    return Form.Element.Serializers[method](element);
-  },
-
-  clear: function(element) {
-    $(element).value = '';
-    return element;
-  },
-
-  present: function(element) {
-    return $(element).value != '';
-  },
-
-  activate: function(element) {
-    element = $(element);
-    element.focus();
-    if (element.select && ( element.tagName.toLowerCase() != 'input' ||
-      !['button', 'reset', 'submit'].include(element.type) ) )
-      element.select();
-    return element;
-  },
-
-  disable: function(element) {
-    element = $(element);
-    element.disabled = true;
-    return element;
-  },
-
-  enable: function(element) {
-    element = $(element);
-    element.blur();
-    element.disabled = false;
-    return element;
-  }
-}
-
-Object.extend(Form.Element, Form.Element.Methods);
-var Field = Form.Element;
-var $F = Form.Element.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
-  input: function(element) {
-    switch (element.type.toLowerCase()) {
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element);
-      default:
-        return Form.Element.Serializers.textarea(element);
-    }
-  },
-
-  inputSelector: function(element) {
-    return element.checked ? element.value : null;
-  },
-
-  textarea: function(element) {
-    return element.value;
-  },
-
-  select: function(element) {
-    return this[element.type == 'select-one' ?
-      'selectOne' : 'selectMany'](element);
-  },
-
-  selectOne: function(element) {
-    var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
-    var values, length = element.length;
-    if (!length) return null;
-
-    for (var i = 0, values = []; i < length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
-    }
-    return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = function() {}
-Abstract.TimedObserver.prototype = {
-  initialize: function(element, frequency, callback) {
-    this.frequency = frequency;
-    this.element   = $(element);
-    this.callback  = callback;
-
-    this.lastValue = this.getValue();
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    var value = this.getValue();
-    var changed = ('string' == typeof this.lastValue && 'string' == typeof value
-      ? this.lastValue != value : String(this.lastValue) != String(value));
-    if (changed) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-}
-
-Form.Element.Observer = Class.create();
-Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create();
-Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = function() {}
-Abstract.EventObserver.prototype = {
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    Form.getElements(this.element).each(this.registerCallback.bind(this));
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        default:
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-}
-
-Form.Element.EventObserver = Class.create();
-Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create();
-Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) {
-  var Event = new Object();
-}
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-
-  element: function(event) {
-    return event.target || event.srcElement;
-  },
-
-  isLeftClick: function(event) {
-    return (((event.which) && (event.which == 1)) ||
-            ((event.button) && (event.button == 1)));
-  },
-
-  pointerX: function(event) {
-    return event.pageX || (event.clientX +
-      (document.documentElement.scrollLeft || document.body.scrollLeft));
-  },
-
-  pointerY: function(event) {
-    return event.pageY || (event.clientY +
-      (document.documentElement.scrollTop || document.body.scrollTop));
-  },
-
-  stop: function(event) {
-    if (event.preventDefault) {
-      event.preventDefault();
-      event.stopPropagation();
-    } else {
-      event.returnValue = false;
-      event.cancelBubble = true;
-    }
-  },
-
-  // find the first node with the given tagName, starting from the
-  // node the event was triggered on; traverses the DOM upwards
-  findElement: function(event, tagName) {
-    var element = Event.element(event);
-    while (element.parentNode && (!element.tagName ||
-        (element.tagName.toUpperCase() != tagName.toUpperCase())))
-      element = element.parentNode;
-    return element;
-  },
-
-  observers: false,
-
-  _observeAndCache: function(element, name, observer, useCapture) {
-    if (!this.observers) this.observers = [];
-    if (element.addEventListener) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.addEventListener(name, observer, useCapture);
-    } else if (element.attachEvent) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.attachEvent('on' + name, observer);
-    }
-  },
-
-  unloadCache: function() {
-    if (!Event.observers) return;
-    for (var i = 0, length = Event.observers.length; i < length; i++) {
-      Event.stopObserving.apply(this, Event.observers[i]);
-      Event.observers[i][0] = null;
-    }
-    Event.observers = false;
-  },
-
-  observe: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.attachEvent))
-      name = 'keydown';
-
-    Event._observeAndCache(element, name, observer, useCapture);
-  },
-
-  stopObserving: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.detachEvent))
-      name = 'keydown';
-
-    if (element.removeEventListener) {
-      element.removeEventListener(name, observer, useCapture);
-    } else if (element.detachEvent) {
-      try {
-        element.detachEvent('on' + name, observer);
-      } catch (e) {}
-    }
-  }
-});
-
-/* prevent memory leaks in IE */
-if (navigator.appVersion.match(/\bMSIE\b/))
-  Event.observe(window, 'unload', Event.unloadCache, false);
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  realOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if(element.tagName=='BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  offsetParent: function(element) {
-    if (element.offsetParent) return element.offsetParent;
-    if (element == document.body) return element;
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return element;
-
-    return document.body;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = this.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = this.realOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = this.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  page: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent==document.body)
-        if (Element.getStyle(element,'position')=='absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!window.opera || element.tagName=='BODY') {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return [valueL, valueT];
-  },
-
-  clone: function(source, target) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || {})
-
-    // find page position of source
-    source = $(source);
-    var p = Position.page(source);
-
-    // find coordinate system to use
-    target = $(target);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(target,'position') == 'absolute') {
-      parent = Position.offsetParent(target);
-      delta = Position.page(parent);
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
-    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.style.position == 'absolute') return;
-    Position.prepare();
-
-    var offsets = Position.positionedOffset(element);
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.style.position == 'relative') return;
-    Position.prepare();
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-  }
-}
-
-// Safari returns margins on body which is incorrect if the child is absolutely
-// positioned.  For performance reasons, redefine Position.cumulativeOffset for
-// KHTML/WebKit only.
-if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
-  Position.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return [valueL, valueT];
-  }
-}
-
-Element.addMethods();
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/ChangeLog b/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/ChangeLog
deleted file mode 100644
index 1e8a805..0000000
--- a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/ChangeLog
+++ /dev/null
@@ -1,3 +0,0 @@
-: release 1.0.0 (2006-03-12)
-    - first release (1.0.0)
-
diff --git a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/README.txt b/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/README.txt
deleted file mode 100644
index 444dd7d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/README.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-= README
-
-revision::	$Rev: 1 $
-release::	$Release: 1.0.0 $
-copyright::	copyright(c) 2006 kuwata-lab.com all rights reserved.
-
-
-== Introduction
-
-'abstract.rb' is a library which enable you to define abstract method in Ruby.
-
-The followings are examples:
-
-  ## example1. (shorter notation)
-  require 'rubygems'   # if installed with 'gem install'
-  require 'abstract'
-  class Foo
-    abstract_method 'arg1, arg2=""', :method1, :method2, :method3
-  end
-  
-  ## example2. (RDoc friendly notation)
-  require 'rubygems'   # if installed with 'gem install'
-  require 'abstract'
-  class Bar
-    # ... method1 description ...
-    def method1(arg1, arg2="")
-      not_implemented
-    end
-    # ... method2 description ...
-    def method2(arg1, arg2="")
-      not_implemented
-    end
-  end
-
-
-Abstract method makes your code more descriptive.
-It is useful even for dynamic language such as Ruby.
-
-
-== Installation
-
-
-* Type 'gem install -r abstract' with root account if you have installed RubyGems.
-
-* Or type 'ruby setup.rb' with root account if you can be root account.
-
-* Or copy lib/abstract.rb into proper directory such as '/usr/local/lib/ruby/site_ruby'.
-
-
-== License
-
-Ruby's
-
-
-== Copyright
-
-copyright(c) 2006 kuwata-lab.com all rights reserved.
diff --git a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/abstract.gemspec b/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/abstract.gemspec
deleted file mode 100644
index 5f7a406..0000000
--- a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/abstract.gemspec
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env ruby
-
-###
-### RubyGems Specification file for abstract.rb
-###
-### $Rev: 1 $
-### $Release: 1.0.0 $
-### copyright(c) 2006 kuwata-lab.com all rights reserved.
-###
-
-require 'rubygems'
-
-spec = Gem::Specification.new do |s|
-  ## package information
-  s.name        = 'abstract'
-  s.author      = 'makoto kuwata'
-  s.version     = ("$Release: 1.0.0 $" =~ /[\.\d]+/) && $&
-  s.platform    = Gem::Platform::RUBY
-  s.homepage    = 'http://rubyforge.org/projects/abstract'
-  s.summary     = "a library which enable you to define abstract method in Ruby"
-  s.description = <<-'END'
-  'abstract.rb' is a library which enable you to define abstract method in Ruby.
-  END
-
-  ## files
-  files = []
-  files += Dir.glob('lib/**/*')
-  files += Dir.glob('test/**/*')
-  files += %w[README.txt ChangeLog setup.rb abstract.gemspec]
-  #s.files       = files.delete_if { |path| path =~ /\.svn/ }
-  s.files       = files
-  s.test_file   = 'test/test.rb'
-end
-
-# Quick fix for Ruby 1.8.3 / YAML bug   (thanks to Ross Bamford)
-if (RUBY_VERSION == '1.8.3')
-   def spec.to_yaml
-      out = super
-      out = '--- ' + out unless out =~ /^---/
-      out
-   end
-end
-
-if $0 == __FILE__
-  Gem::manage_gems
-  Gem::Builder.new(spec).build
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/lib/abstract.rb b/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/lib/abstract.rb
deleted file mode 100644
index 6267036..0000000
--- a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/lib/abstract.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-##
-## $Rev: 1 $
-## $Release: 1.0.0 $
-## copyright(c) 2006 kuwata-lab.com all rights reserved.
-##
-##
-## helper to define abstract method in Ruby.
-##
-##
-## example1. (shorter notation)
-##
-##   require 'abstract'
-##   class Foo
-##     abstract_method 'arg1, arg2=""', :method1, :method2, :method3
-##   end
-##
-##
-## example2. (RDoc friendly notation)
-##
-##   require 'abstract'
-##   class Bar
-##     # ... method1 description ...
-##     def method1(arg1, arg2="")
-##       not_implemented
-##     end
-##
-##     # ... method2 description ...
-##     def method2(arg1, arg2="")
-##       not_implemented
-##     end
-##   end
-##
-
-
-##
-class Module
-
-  ##
-  ## define abstract methods
-  ##
-  def abstract_method args_str, *method_names
-    method_names.each do |name|
-      module_eval <<-END
-        def #{name}(#{args_str})
-          mesg = "class \#{self.class.name} must implement abstract method `#{self.name}##{name}()'."
-          #mesg = "\#{self.class.name}##{name}() is not implemented."
-          err = NotImplementedError.new mesg
-          err.set_backtrace caller()
-          raise err
-        end
-      END
-    end
-  end
-
-end
-
-
-##
-module Kernel
-
-  ##
-  ## raise NotImplementedError
-  ##
-  def not_implemented     #:doc:
-    backtrace = caller()
-    method_name = (backtrace.shift =~ /`(\w+)'$/) && $1
-    mesg = "class #{self.class.name} must implement abstract method '#{method_name}()'."
-    #mesg = "#{self.class.name}##{method_name}() is not implemented."
-    err = NotImplementedError.new mesg
-    err.set_backtrace backtrace
-    raise err
-  end
-  private :not_implemented
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/setup.rb b/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/setup.rb
deleted file mode 100644
index f1c9d9a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/setup.rb
+++ /dev/null
@@ -1,1331 +0,0 @@
-#
-# setup.rb
-#
-# Copyright (c) 2000-2004 Minero Aoki
-#
-# This program is free software.
-# You can distribute/modify this program under the terms of
-# the GNU Lesser General Public License version 2.1.
-#
-
-#
-# For backward compatibility
-#
-
-unless Enumerable.method_defined?(:map)
-  module Enumerable
-    alias map collect
-  end
-end
-
-unless Enumerable.method_defined?(:detect)
-  module Enumerable
-    alias detect find
-  end
-end
-
-unless Enumerable.method_defined?(:select)
-  module Enumerable
-    alias select find_all
-  end
-end
-
-unless Enumerable.method_defined?(:reject)
-  module Enumerable
-    def reject
-      result = []
-      each do |i|
-        result.push i unless yield(i)
-      end
-      result
-    end
-  end
-end
-
-unless Enumerable.method_defined?(:inject)
-  module Enumerable
-    def inject(result)
-      each do |i|
-        result = yield(result, i)
-      end
-      result
-    end
-  end
-end
-
-unless Enumerable.method_defined?(:any?)
-  module Enumerable
-    def any?
-      each do |i|
-        return true if yield(i)
-      end
-      false
-    end
-  end
-end
-
-unless File.respond_to?(:read)
-  def File.read(fname)
-    open(fname) {|f|
-      return f.read
-    }
-  end
-end
-
-#
-# Application independent utilities
-#
-
-def File.binread(fname)
-  open(fname, 'rb') {|f|
-    return f.read
-  }
-end
-
-# for corrupted windows stat(2)
-def File.dir?(path)
-  File.directory?((path[-1,1] == '/') ? path : path + '/')
-end
-
-#
-# Config
-#
-
-if arg = ARGV.detect{|arg| /\A--rbconfig=/ =~ arg }
-  ARGV.delete(arg)
-  require arg.split(/=/, 2)[1]
-  $".push 'rbconfig.rb'
-else
-  require 'rbconfig'
-end
-
-def multipackage_install?
-  FileTest.directory?(File.dirname($0) + '/packages')
-end
-
-
-class ConfigTable
-
-  c = ::Config::CONFIG
-
-  rubypath = c['bindir'] + '/' + c['ruby_install_name']
-
-  major = c['MAJOR'].to_i
-  minor = c['MINOR'].to_i
-  teeny = c['TEENY'].to_i
-  version = "#{major}.#{minor}"
-
-  # ruby ver. >= 1.4.4?
-  newpath_p = ((major >= 2) or
-               ((major == 1) and
-                ((minor >= 5) or
-                 ((minor == 4) and (teeny >= 4)))))
-  
-  subprefix = lambda {|path|
-    path.sub(/\A#{Regexp.quote(c['prefix'])}/o, '$prefix')
-  }
-
-  if c['rubylibdir']
-    # V < 1.6.3
-    stdruby    = subprefix.call(c['rubylibdir'])
-    siteruby   = subprefix.call(c['sitedir'])
-    versite    = subprefix.call(c['sitelibdir'])
-    sodir      = subprefix.call(c['sitearchdir'])
-  elsif newpath_p
-    # 1.4.4 <= V <= 1.6.3
-    stdruby    = "$prefix/lib/ruby/#{version}"
-    siteruby   = subprefix.call(c['sitedir'])
-    versite    = siteruby + '/' + version
-    sodir      = "$site-ruby/#{c['arch']}"
-  else
-    # V < 1.4.4
-    stdruby    = "$prefix/lib/ruby/#{version}"
-    siteruby   = "$prefix/lib/ruby/#{version}/site_ruby"
-    versite    = siteruby
-    sodir      = "$site-ruby/#{c['arch']}"
-  end
-
-  if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
-    makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
-  else
-    makeprog = 'make'
-  end
-
-  common_descripters = [
-    [ 'prefix',    [ c['prefix'],
-                     'path',
-                     'path prefix of target environment' ] ],
-    [ 'std-ruby',  [ stdruby,
-                     'path',
-                     'the directory for standard ruby libraries' ] ],
-    [ 'site-ruby-common', [ siteruby,
-                     'path',
-                     'the directory for version-independent non-standard ruby libraries' ] ],
-    [ 'site-ruby', [ versite,
-                     'path',
-                     'the directory for non-standard ruby libraries' ] ],
-    [ 'bin-dir',   [ '$prefix/bin',
-                     'path',
-                     'the directory for commands' ] ],
-    [ 'rb-dir',    [ '$site-ruby',
-                     'path',
-                     'the directory for ruby scripts' ] ],
-    [ 'so-dir',    [ sodir,
-                     'path',
-                     'the directory for ruby extentions' ] ],
-    [ 'data-dir',  [ '$prefix/share',
-                     'path',
-                     'the directory for shared data' ] ],
-    [ 'ruby-path', [ rubypath,
-                     'path',
-                     'path to set to #! line' ] ],
-    [ 'ruby-prog', [ rubypath,
-                     'name',
-                     'the ruby program using for installation' ] ],
-    [ 'make-prog', [ makeprog,
-                     'name',
-                     'the make program to compile ruby extentions' ] ],
-    [ 'without-ext', [ 'no',
-                       'yes/no',
-                       'does not compile/install ruby extentions' ] ]
-  ]
-  multipackage_descripters = [
-    [ 'with',      [ '',
-                     'name,name...',
-                     'package names that you want to install',
-                     'ALL' ] ],
-    [ 'without',   [ '',
-                     'name,name...',
-                     'package names that you do not want to install',
-                     'NONE' ] ]
-  ]
-  if multipackage_install?
-    DESCRIPTER = common_descripters + multipackage_descripters
-  else
-    DESCRIPTER = common_descripters
-  end
-
-  SAVE_FILE = 'config.save'
-
-  def ConfigTable.each_name(&block)
-    keys().each(&block)
-  end
-
-  def ConfigTable.keys
-    DESCRIPTER.map {|name, *dummy| name }
-  end
-
-  def ConfigTable.each_definition(&block)
-    DESCRIPTER.each(&block)
-  end
-
-  def ConfigTable.get_entry(name)
-    name, ent = DESCRIPTER.assoc(name)
-    ent
-  end
-
-  def ConfigTable.get_entry!(name)
-    get_entry(name) or raise ArgumentError, "no such config: #{name}"
-  end
-
-  def ConfigTable.add_entry(name, vals)
-    ConfigTable::DESCRIPTER.push [name,vals]
-  end
-
-  def ConfigTable.remove_entry(name)
-    get_entry(name) or raise ArgumentError, "no such config: #{name}"
-    DESCRIPTER.delete_if {|n, arr| n == name }
-  end
-
-  def ConfigTable.config_key?(name)
-    get_entry(name) ? true : false
-  end
-
-  def ConfigTable.bool_config?(name)
-    ent = get_entry(name) or return false
-    ent[1] == 'yes/no'
-  end
-
-  def ConfigTable.value_config?(name)
-    ent = get_entry(name) or return false
-    ent[1] != 'yes/no'
-  end
-
-  def ConfigTable.path_config?(name)
-    ent = get_entry(name) or return false
-    ent[1] == 'path'
-  end
-
-
-  class << self
-    alias newobj new
-  end
-
-  def ConfigTable.new
-    c = newobj()
-    c.initialize_from_table
-    c
-  end
-
-  def ConfigTable.load
-    c = newobj()
-    c.initialize_from_file
-    c
-  end
-
-  def initialize_from_table
-    @table = {}
-    DESCRIPTER.each do |k, (default, vname, desc, default2)|
-      @table[k] = default
-    end
-  end
-
-  def initialize_from_file
-    raise InstallError, "#{File.basename $0} config first"\
-        unless File.file?(SAVE_FILE)
-    @table = {}
-    File.foreach(SAVE_FILE) do |line|
-      k, v = line.split(/=/, 2)
-      @table[k] = v.strip
-    end
-  end
-
-  def save
-    File.open(SAVE_FILE, 'w') {|f|
-      @table.each do |k, v|
-        f.printf "%s=%s\n", k, v if v
-      end
-    }
-  end
-
-  def []=(k, v)
-    raise InstallError, "unknown config option #{k}"\
-        unless ConfigTable.config_key?(k)
-    @table[k] = v
-  end
-    
-  def [](key)
-    return nil unless @table[key]
-    @table[key].gsub(%r<\$([^/]+)>) { self[$1] }
-  end
-
-  def set_raw(key, val)
-    @table[key] = val
-  end
-
-  def get_raw(key)
-    @table[key]
-  end
-
-end
-
-
-module MetaConfigAPI
-
-  def eval_file_ifexist(fname)
-    instance_eval File.read(fname), fname, 1 if File.file?(fname)
-  end
-
-  def config_names
-    ConfigTable.keys
-  end
-
-  def config?(name)
-    ConfigTable.config_key?(name)
-  end
-
-  def bool_config?(name)
-    ConfigTable.bool_config?(name)
-  end
-
-  def value_config?(name)
-    ConfigTable.value_config?(name)
-  end
-
-  def path_config?(name)
-    ConfigTable.path_config?(name)
-  end
-
-  def add_config(name, argname, default, desc)
-    ConfigTable.add_entry name,[default,argname,desc]
-  end
-
-  def add_path_config(name, default, desc)
-    add_config name, 'path', default, desc
-  end
-
-  def add_bool_config(name, default, desc)
-    add_config name, 'yes/no', default ? 'yes' : 'no', desc
-  end
-
-  def set_config_default(name, default)
-    if bool_config?(name)
-      ConfigTable.get_entry!(name)[0] = (default ? 'yes' : 'no')
-    else
-      ConfigTable.get_entry!(name)[0] = default
-    end
-  end
-
-  def remove_config(name)
-    ent = ConfigTable.get_entry(name)
-    ConfigTable.remove_entry name
-    ent
-  end
-
-end
-
-#
-# File Operations
-#
-
-module FileOperations
-
-  def mkdir_p(dirname, prefix = nil)
-    dirname = prefix + dirname if prefix
-    $stderr.puts "mkdir -p #{dirname}" if verbose?
-    return if no_harm?
-
-    # does not check '/'... it's too abnormal case
-    dirs = dirname.split(%r<(?=/)>)
-    if /\A[a-z]:\z/i =~ dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless File.dir?(path)
-    end
-  end
-
-  def rm_f(fname)
-    $stderr.puts "rm -f #{fname}" if verbose?
-    return if no_harm?
-
-    if File.exist?(fname) or File.symlink?(fname)
-      File.chmod 0777, fname
-      File.unlink fname
-    end
-  end
-
-  def rm_rf(dn)
-    $stderr.puts "rm -rf #{dn}" if verbose?
-    return if no_harm?
-
-    Dir.chdir dn
-    Dir.foreach('.') do |fn|
-      next if fn == '.'
-      next if fn == '..'
-      if File.dir?(fn)
-        verbose_off {
-          rm_rf fn
-        }
-      else
-        verbose_off {
-          rm_f fn
-        }
-      end
-    end
-    Dir.chdir '..'
-    Dir.rmdir dn
-  end
-
-  def move_file(src, dest)
-    File.unlink dest if File.exist?(dest)
-    begin
-      File.rename src, dest
-    rescue
-      File.open(dest, 'wb') {|f| f.write File.binread(src) }
-      File.chmod File.stat(src).mode, dest
-      File.unlink src
-    end
-  end
-
-  def install(from, dest, mode, prefix = nil)
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix + dest if prefix
-    realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
-    str = File.binread(from)
-    if diff?(str, realdest)
-      verbose_off {
-        rm_f realdest if File.exist?(realdest)
-      }
-      File.open(realdest, 'wb') {|f|
-        f.write str
-      }
-      File.chmod mode, realdest
-
-      File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
-        if prefix
-          f.puts realdest.sub(prefix, '')
-        else
-          f.puts realdest
-        end
-      }
-    end
-  end
-
-  def diff?(new_content, path)
-    return true unless File.exist?(path)
-    new_content != File.binread(path)
-  end
-
-  def command(str)
-    $stderr.puts str if verbose?
-    system str or raise RuntimeError, "'system #{str}' failed"
-  end
-
-  def ruby(str)
-    command config('ruby-prog') + ' ' + str
-  end
-  
-  def make(task = '')
-    command config('make-prog') + ' ' + task
-  end
-
-  def extdir?(dir)
-    File.exist?(dir + '/MANIFEST')
-  end
-
-  def all_files_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|ent| File.file?("#{dirname}/#{ent}") }
-    }
-  end
-
-  REJECT_DIRS = %w(
-    CVS SCCS RCS CVS.adm
-  )
-
-  def all_dirs_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|n| File.dir?("#{dirname}/#{n}") } - %w(. ..) - REJECT_DIRS
-    }
-  end
-
-end
-
-#
-# Main Installer
-#
-
-class InstallError < StandardError; end
-
-
-module HookUtils
-
-  def run_hook(name)
-    try_run_hook "#{curr_srcdir()}/#{name}" or
-    try_run_hook "#{curr_srcdir()}/#{name}.rb"
-  end
-
-  def try_run_hook(fname)
-    return false unless File.file?(fname)
-    begin
-      instance_eval File.read(fname), fname, 1
-    rescue
-      raise InstallError, "hook #{fname} failed:\n" + $!.message
-    end
-    true
-  end
-
-end
-
-
-module HookScriptAPI
-
-  def get_config(key)
-    @config[key]
-  end
-
-  alias config get_config
-
-  def set_config(key, val)
-    @config[key] = val
-  end
-
-  #
-  # srcdir/objdir (works only in the package directory)
-  #
-
-  #abstract srcdir_root
-  #abstract objdir_root
-  #abstract relpath
-
-  def curr_srcdir
-    "#{srcdir_root()}/#{relpath()}"
-  end
-
-  def curr_objdir
-    "#{objdir_root()}/#{relpath()}"
-  end
-
-  def srcfile(path)
-    "#{curr_srcdir()}/#{path}"
-  end
-
-  def srcexist?(path)
-    File.exist?(srcfile(path))
-  end
-
-  def srcdirectory?(path)
-    File.dir?(srcfile(path))
-  end
-  
-  def srcfile?(path)
-    File.file? srcfile(path)
-  end
-
-  def srcentries(path = '.')
-    Dir.open("#{curr_srcdir()}/#{path}") {|d|
-      return d.to_a - %w(. ..)
-    }
-  end
-
-  def srcfiles(path = '.')
-    srcentries(path).select {|fname|
-      File.file?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-  def srcdirectories(path = '.')
-    srcentries(path).select {|fname|
-      File.dir?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-end
-
-
-class ToplevelInstaller
-
-  Version   = '3.2.4'
-  Copyright = 'Copyright (c) 2000-2004 Minero Aoki'
-
-  TASKS = [
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles ruby extentions and others' ],
-    [ 'install',  'installs files' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-  def ToplevelInstaller.invoke
-    instance().invoke
-  end
-
-  @singleton = nil
-
-  def ToplevelInstaller.instance
-    @singleton ||= new(File.dirname($0))
-    @singleton
-  end
-
-  include MetaConfigAPI
-
-  def initialize(ardir_root)
-    @config = nil
-    @options = { 'verbose' => true }
-    @ardir = File.expand_path(ardir_root)
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__()}>"
-  end
-
-  def invoke
-    run_metaconfigs
-    task = parsearg_global()
-    @config = load_config(task)
-    __send__ "parsearg_#{task}"
-    init_installers
-    __send__ "exec_#{task}"
-  end
-
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-  end
-
-  def load_config(task)
-    case task
-    when 'config'
-      ConfigTable.new
-    when 'clean', 'distclean'
-      if File.exist?('config.save')
-      then ConfigTable.load
-      else ConfigTable.new
-      end
-    else
-      ConfigTable.load
-    end
-  end
-
-  def init_installers
-    @installer = Installer.new(@config, @options, @ardir, File.expand_path('.'))
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @ardir
-  end
-
-  def objdir_root
-    '.'
-  end
-
-  def relpath
-    '.'
-  end
-
-  #
-  # Option Parsing
-  #
-
-  def parsearg_global
-    valid_task = /\A(?:#{TASKS.map {|task,desc| task }.join '|'})\z/
-
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        raise InstallError, "invalid task: #{arg}" unless valid_task =~ arg
-        return arg
-
-      when '-q', '--quiet'
-        @options['verbose'] = false
-
-      when       '--verbose'
-        @options['verbose'] = true
-
-      when '-h', '--help'
-        print_usage $stdout
-        exit 0
-
-      when '-v', '--version'
-        puts "#{File.basename($0)} version #{Version}"
-        exit 0
-      
-      when '--copyright'
-        puts Copyright
-        exit 0
-
-      else
-        raise InstallError, "unknown global option '#{arg}'"
-      end
-    end
-
-    raise InstallError, <<EOS
-No task or global option given.
-Typical installation procedure is:
-    $ ruby #{File.basename($0)} config
-    $ ruby #{File.basename($0)} setup
-    # ruby #{File.basename($0)} install  (may require root privilege)
-EOS
-  end
-
-
-  def parsearg_no_options
-    raise InstallError, "#{task}:  unknown options: #{ARGV.join ' '}"\
-        unless ARGV.empty?
-  end
-
-  alias parsearg_show       parsearg_no_options
-  alias parsearg_setup      parsearg_no_options
-  alias parsearg_clean      parsearg_no_options
-  alias parsearg_distclean  parsearg_no_options
-
-  def parsearg_config
-    re = /\A--(#{ConfigTable.keys.join '|'})(?:=(.*))?\z/
-    @options['config-opt'] = []
-
-    while i = ARGV.shift
-      if /\A--?\z/ =~ i
-        @options['config-opt'] = ARGV.dup
-        break
-      end
-      m = re.match(i) or raise InstallError, "config: unknown option #{i}"
-      name, value = m.to_a[1,2]
-      if value
-        if ConfigTable.bool_config?(name)
-          raise InstallError, "config: --#{name} allows only yes/no for argument"\
-              unless /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i =~ value
-          value = (/\Ay(es)?|\At(rue)/i =~ value) ? 'yes' : 'no'
-        end
-      else
-        raise InstallError, "config: --#{name} requires argument"\
-            unless ConfigTable.bool_config?(name)
-        value = 'yes'
-      end
-      @config[name] = value
-    end
-  end
-
-  def parsearg_install
-    @options['no-harm'] = false
-    @options['install-prefix'] = ''
-    while a = ARGV.shift
-      case a
-      when /\A--no-harm\z/
-        @options['no-harm'] = true
-      when /\A--prefix=(.*)\z/
-        path = $1
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @options['install-prefix'] = path
-      else
-        raise InstallError, "install: unknown option #{a}"
-      end
-    end
-  end
-
-  def print_usage(out)
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-20s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '-h,--help',    'print this message'
-    out.printf fmt, '-v,--version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf "  %-10s  %s\n", name, desc
-    end
-
-    out.puts
-    out.puts 'Options for config:'
-    ConfigTable.each_definition do |name, (default, arg, desc, default2)|
-      out.printf "  %-20s %s [%s]\n",
-                 '--'+ name + (ConfigTable.bool_config?(name) ? '' : '='+arg),
-                 desc,
-                 default2 || default
-    end
-    out.printf "  %-20s %s [%s]\n",
-        '--rbconfig=path', 'your rbconfig.rb to load', "running ruby's"
-
-    out.puts
-    out.puts 'Options for install:'
-    out.printf "  %-20s %s [%s]\n",
-        '--no-harm', 'only display what to do if given', 'off'
-    out.printf "  %-20s %s [%s]\n",
-        '--prefix',  'install path prefix', '$prefix'
-
-    out.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    @installer.exec_config
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    @installer.exec_setup
-  end
-
-  def exec_install
-    @installer.exec_install
-  end
-
-  def exec_show
-    ConfigTable.each_name do |k|
-      v = @config.get_raw(k)
-      if not v or v.empty?
-        v = '(not specified)'
-      end
-      printf "%-10s %s\n", k, v
-    end
-  end
-
-  def exec_clean
-    @installer.exec_clean
-  end
-
-  def exec_distclean
-    @installer.exec_distclean
-  end
-
-end
-
-
-class ToplevelInstallerMulti < ToplevelInstaller
-
-  include HookUtils
-  include HookScriptAPI
-  include FileOperations
-
-  def initialize(ardir)
-    super
-    @packages = all_dirs_in("#{@ardir}/packages")
-    raise 'no package exists' if @packages.empty?
-  end
-
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-    @packages.each do |name|
-      eval_file_ifexist "#{@ardir}/packages/#{name}/metaconfig"
-    end
-  end
-
-  def init_installers
-    @installers = {}
-    @packages.each do |pack|
-      @installers[pack] = Installer.new(@config, @options,
-                                       "#{@ardir}/packages/#{pack}",
-                                       "packages/#{pack}")
-    end
-
-    with    = extract_selection(config('with'))
-    without = extract_selection(config('without'))
-    @selected = @installers.keys.select {|name|
-                  (with.empty? or with.include?(name)) \
-                      and not without.include?(name)
-                }
-  end
-
-  def extract_selection(list)
-    a = list.split(/,/)
-    a.each do |name|
-      raise InstallError, "no such package: #{name}" \
-              unless @installers.key?(name)
-    end
-    a
-  end
-
-  def print_usage(f)
-    super
-    f.puts 'Inluded packages:'
-    f.puts '  ' + @packages.sort.join(' ')
-    f.puts
-  end
-
-  #
-  # multi-package metaconfig API
-  #
-
-  attr_reader :packages
-
-  def declare_packages(list)
-    raise 'package list is empty' if list.empty?
-    list.each do |name|
-      raise "directory packages/#{name} does not exist"\
-              unless File.dir?("#{@ardir}/packages/#{name}")
-    end
-    @packages = list
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    run_hook 'pre-config'
-    each_selected_installers {|inst| inst.exec_config }
-    run_hook 'post-config'
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    run_hook 'pre-setup'
-    each_selected_installers {|inst| inst.exec_setup }
-    run_hook 'post-setup'
-  end
-
-  def exec_install
-    run_hook 'pre-install'
-    each_selected_installers {|inst| inst.exec_install }
-    run_hook 'post-install'
-  end
-
-  def exec_clean
-    rm_f 'config.save'
-    run_hook 'pre-clean'
-    each_selected_installers {|inst| inst.exec_clean }
-    run_hook 'post-clean'
-  end
-
-  def exec_distclean
-    rm_f 'config.save'
-    run_hook 'pre-distclean'
-    each_selected_installers {|inst| inst.exec_distclean }
-    run_hook 'post-distclean'
-  end
-
-  #
-  # lib
-  #
-
-  def each_selected_installers
-    Dir.mkdir 'packages' unless File.dir?('packages')
-    @selected.each do |pack|
-      $stderr.puts "Processing the package `#{pack}' ..." if @options['verbose']
-      Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
-      Dir.chdir "packages/#{pack}"
-      yield @installers[pack]
-      Dir.chdir '../..'
-    end
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-end
-
-
-class Installer
-
-  FILETYPES = %w( bin lib ext data )
-
-  include HookScriptAPI
-  include HookUtils
-  include FileOperations
-
-  def initialize(config, opt, srcroot, objroot)
-    @config = config
-    @options = opt
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{File.basename(@srcdir)}>"
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @srcdir
-  end
-
-  def objdir_root
-    @objdir
-  end
-
-  def relpath
-    @currdir
-  end
-
-  #
-  # configs/options
-  #
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def verbose_off
-    begin
-      save, @options['verbose'] = @options['verbose'], false
-      yield
-    ensure
-      @options['verbose'] = save
-    end
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  def config_dir_bin(rel)
-  end
-
-  def config_dir_lib(rel)
-  end
-
-  def config_dir_ext(rel)
-    extconf if extdir?(curr_srcdir())
-  end
-
-  def extconf
-    opt = @options['config-opt'].join(' ')
-    command "#{config('ruby-prog')} #{curr_srcdir()}/extconf.rb #{opt}"
-  end
-
-  def config_dir_data(rel)
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin(rel)
-    all_files_in(curr_srcdir()).each do |fname|
-      adjust_shebang "#{curr_srcdir()}/#{fname}"
-    end
-  end
-
-  # modify: #!/usr/bin/ruby
-  # modify: #! /usr/bin/ruby
-  # modify: #!ruby
-  # not modify: #!/usr/bin/env ruby
-  SHEBANG_RE = /\A\#!\s*\S*ruby\S*/
-
-  def adjust_shebang(path)
-    return if no_harm?
-
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(path, 'rb') {|r|
-        File.open(tmpfile, 'wb') {|w|
-          first = r.gets
-          return unless SHEBANG_RE =~ first
-
-          $stderr.puts "adjusting shebang: #{File.basename path}" if verbose?
-          w.print first.sub(SHEBANG_RE, '#!' + config('ruby-path'))
-          w.write r.read
-        }
-      }
-      move_file tmpfile, File.basename(path)
-    ensure
-      File.unlink tmpfile if File.exist?(tmpfile)
-    end
-  end
-
-  def setup_dir_lib(rel)
-  end
-
-  def setup_dir_ext(rel)
-    make if extdir?(curr_srcdir())
-  end
-
-  def setup_dir_data(rel)
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin(rel)
-    install_files collect_filenames_auto(), "#{config('bin-dir')}/#{rel}", 0755
-  end
-
-  def install_dir_lib(rel)
-    install_files ruby_scripts(), "#{config('rb-dir')}/#{rel}", 0644
-  end
-
-  def install_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    install_files ruby_extentions('.'),
-                  "#{config('so-dir')}/#{File.dirname(rel)}",
-                  0555
-  end
-
-  def install_dir_data(rel)
-    install_files collect_filenames_auto(), "#{config('data-dir')}/#{rel}", 0644
-  end
-
-  def install_files(list, dest, mode)
-    mkdir_p dest, @options['install-prefix']
-    list.each do |fname|
-      install fname, dest, mode, @options['install-prefix']
-    end
-  end
-
-  def ruby_scripts
-    collect_filenames_auto().select {|n| /\.rb\z/ =~ n }
-  end
-  
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  reject_patterns = %w( 
-    core RCSLOG tags TAGS .make.state
-    .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
-    *~ *.old *.bak *.BAK *.orig *.rej _$* *$
-
-    *.org *.in .*
-  )
-  mapping = {
-    '.' => '\.',
-    '$' => '\$',
-    '#' => '\#',
-    '*' => '.*'
-  }
-  REJECT_PATTERNS = Regexp.new('\A(?:' +
-                               reject_patterns.map {|pat|
-                                 pat.gsub(/[\.\$\#\*]/) {|ch| mapping[ch] }
-                               }.join('|') +
-                               ')\z')
-
-  def collect_filenames_auto
-    mapdir((existfiles() - hookfiles()).reject {|fname|
-             REJECT_PATTERNS =~ fname
-           })
-  end
-
-  def existfiles
-    all_files_in(curr_srcdir()) | all_files_in('.')
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-      %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def mapdir(filelist)
-    filelist.map {|fname|
-      if File.exist?(fname)   # objdir
-        fname
-      else                    # srcdir
-        File.join(curr_srcdir(), fname)
-      end
-    }
-  end
-
-  def ruby_extentions(dir)
-    _ruby_extentions(dir) or
-        raise InstallError, "no ruby extention exists: 'ruby #{$0} setup' first"
-  end
-
-  DLEXT = /\.#{ ::Config::CONFIG['DLEXT'] }\z/
-
-  def _ruby_extentions(dir)
-    Dir.open(dir) {|d|
-      return d.select {|fname| DLEXT =~ fname }
-    }
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f 'config.save'
-    rm_f 'InstalledFiles'
-  end
-
-  def clean_dir_bin(rel)
-  end
-
-  def clean_dir_lib(rel)
-  end
-
-  def clean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'clean' if File.file?('Makefile')
-  end
-
-  def clean_dir_data(rel)
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f 'config.save'
-    rm_f 'InstalledFiles'
-  end
-
-  def distclean_dir_bin(rel)
-  end
-
-  def distclean_dir_lib(rel)
-  end
-
-  def distclean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'distclean' if File.file?('Makefile')
-  end
-
-  #
-  # lib
-  #
-
-  def exec_task_traverse(task)
-    run_hook "pre-#{task}"
-    FILETYPES.each do |type|
-      if config('without-ext') == 'yes' and type == 'ext'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, "#{task}_dir_#{type}"
-    end
-    run_hook "post-#{task}"
-  end
-
-  def traverse(task, rel, mid)
-    dive_into(rel) {
-      run_hook "pre-#{task}"
-      __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-      all_dirs_in(curr_srcdir()).each do |d|
-        traverse task, "#{rel}/#{d}", mid
-      end
-      run_hook "post-#{task}"
-    }
-  end
-
-  def dive_into(rel)
-    return unless File.dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless File.dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-end
-
-
-if $0 == __FILE__
-  begin
-    if multipackage_install?
-      ToplevelInstallerMulti.invoke
-    else
-      ToplevelInstaller.invoke
-    end
-  rescue
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/test/test.rb b/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/test/test.rb
deleted file mode 100644
index f53e799..0000000
--- a/spec10/public/webrat/test_app/gems/gems/abstract-1.0.0/test/test.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-##
-## $Rev: 1 $
-## $Release: 1.0.0 $
-## copyright(c) 2006 kuwata-lab.com all rights reserved.
-##
-
-testdir = File.dirname(File.expand_path(__FILE__))
-libdir  = File.dirname(testdir) + "/lib"
-$: << libdir
-
-
-require 'test/unit'
-require 'abstract'
-
-
-class Foo
-  abstract_method "arg1, arg2=''", :m1, :m2, :m3
-end
-
-
-class Bar
-  def m1(arg1, arg2='')
-    not_implemented
-  end
-end
-
-
-
-class AbstractTest < Test::Unit::TestCase
-
-
-  def _test(obj)
-    assert_raise(NotImplementedError) do
-      begin
-        obj = Foo.new
-        obj.m1 'a'
-      rescue => ex
-        linenum = (ex.backtrace[0] =~ /:(\d+)/) && $1
-        raise ex
-      end
-    end
-  end
-
-
-  def test_abstract_method1
-    obj = Foo.new
-    assert_raise(NotImplementedError) { obj.m1 'a' }
-    assert_raise(NotImplementedError) { obj.m2 'a', 'b' }
-  end
-
-
-  def test_abstract_method2
-    begin
-      obj = Foo.new
-      linenum = __LINE__; obj.m1 'a'
-    rescue NotImplementedError => ex
-      actual_linenum = (ex.backtrace[0] =~ /:(\d+)/) && $1.to_i
-    end
-    assert_equal linenum, actual_linenum
-  end
-
-
-  def test_not_implemented1
-    obj = Bar.new
-    assert_raise(NotImplementedError) { obj.m1 123 }
-  end
-
-
-  def test_not_implemented2
-    begin
-      obj = Bar.new
-      linenum = __LINE__; obj.m1 'a'
-    rescue NotImplementedError => ex
-      actual_linenum = (ex.backtrace[0] =~ /:(\d+)/) && $1.to_i
-    end
-    assert_equal linenum, actual_linenum
-  end
-
-
-  def test_not_implemented3
-    begin
-      obj = Bar.new
-      obj.not_implemented
-    rescue Exception => ex
-      assert_instance_of(NoMethodError, ex)
-      assert_match(/private method/, ex.message)
-    end
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/CHANGELOG b/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/CHANGELOG
deleted file mode 100644
index 0a11961..0000000
--- a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/CHANGELOG
+++ /dev/null
@@ -1,14 +0,0 @@
-
-v2.5.0. Not required for JRuby.
-
-v2.4.0. Signed gem.
-
-v2.3.0. Use STDERR, not $stderr, just like Mongrel; tests now use Test::Unit; moving to the mongrel project on RubyForge.
-
-v2.2.0. Don't load on Ruby > 1.8.5; copyright correction.
-
-v2.1.0. License change due to no provision for use in original Ruby license (prevents installation in Florida).
-
-v2.0.0. Updated for second cgi.rb vulnerability.
-
-v1.0.0. Original single-patch release by Zed Shaw, et. al.
diff --git a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/LICENSE b/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/LICENSE
deleted file mode 100644
index e7ada7d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/LICENSE
+++ /dev/null
@@ -1,55 +0,0 @@
-Mongrel Web Server (Mongrel) is copyrighted free software by Zed A. Shaw
-<zedshaw at zedshaw dot com> You can redistribute it and/or modify it under
-either the terms of the GPL or the conditions below:
-
-1. You may make and give away verbatim copies of the source form of the
-   software without restriction, provided that you duplicate all of the
-   original copyright notices and associated disclaimers.
-
-2. You may modify your copy of the software in any way, provided that
-   you do at least ONE of the following:
-
-     a) place your modifications in the Public Domain or otherwise make them
-     Freely Available, such as by posting said modifications to Usenet or an
-     equivalent medium, or by allowing the author to include your
-     modifications in the software.
-
-     b) use the modified software only within your corporation or
-        organization.
-
-     c) rename any non-standard executables so the names do not conflict with
-     standard executables, which must also be provided.
-
-     d) make other distribution arrangements with the author.
-
-3. You may distribute the software in object code or executable
-   form, provided that you do at least ONE of the following:
-
-     a) distribute the executables and library files of the software,
-     together with instructions (in the manual page or equivalent) on where
-     to get the original distribution.
-
-     b) accompany the distribution with the machine-readable source of the
-     software.
-
-     c) give non-standard executables non-standard names, with
-        instructions on where to get the original software distribution.
-
-     d) make other distribution arrangements with the author.
-
-4. You may modify and include the part of the software into any other
-   software (possibly commercial).  But some files in the distribution
-   are not written by the author, so that they are not under this terms.
-
-5. The scripts and library files supplied as input to or produced as 
-   output from the software do not automatically fall under the
-   copyright of the software, but belong to whomever generated them, 
-   and may be sold commercially, and may be aggregated with this
-   software.
-
-6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-   PURPOSE.
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/Manifest b/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/Manifest
deleted file mode 100644
index b0004d6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/Manifest
+++ /dev/null
@@ -1,6 +0,0 @@
-CHANGELOG
-lib/cgi_multipart_eof_fix.rb
-LICENSE
-Manifest
-README
-test/test_cgi_multipart_eof_fix.rb
diff --git a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/README b/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/README
deleted file mode 100644
index a70f21b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/README
+++ /dev/null
@@ -1,40 +0,0 @@
-
-cgi_multipart_eof_fix
-
-Fix an exploitable bug in CGI multipart parsing.
-
-== License
-
-Copyright 2006, 2007 Cloudburst, LLC. Portions copyright 2006 Jeremy Kemper, Jamis Buck, Zed A. Shaw, and Yukihiro Matsumoto, and used with permission. See the included LICENSE file. 
-
-== Description
-
-Fixes an exploitable bug in CGI multipart parsing which affects Ruby <= 1.8.5. When multipart boundary attributes contain non-halting regular expression strings, the boundary searcher in the CGI module does not properly escape the parameter and will execute arbitrary regular expressions. This fix adds escaping for the user data.
-
-* Affected application servers: standalone CGI, Mongrel, WEBrick
-* Unaffected: FastCGI, Ruby 1.8.6 (all servers)
-* Unknown: mod_ruby
-
-This fix will not modify versions of Ruby greater than 1.8.5, and is cumulative with previous CGI multipart vulnerability fixes.
-
-== Usage
-
-Install the gem:
-  sudo gem install cgi_multipart_eof_fix
-
-Run the included test to verify that the patch works as intended. Then, <tt>require</tt> the gem in every affected application, as follows:
-
-  require 'rubygems' 
-  require 'cgi_multipart_eof_fix'
-  
-Currently <tt>mongrel_rails</tt> requires this gem automatically. However, Mongrel may change in the future.
-
-== Reporting problems
-
-* http://rubyforge.org/tracker/?group_id=1306
-
-== Further resources
-
-* http://rubyforge.org/mailman/listinfo/mongrel-users
-* http://blog.evanweaver.com/articles/2006/12/05/cgi-rb-vulnerability-hotfix
-* http://www.ruby-lang.org/en/news/2006/12/04/another-dos-vulnerability-in-cgi-library/
diff --git a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/cgi_multipart_eof_fix.gemspec b/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/cgi_multipart_eof_fix.gemspec
deleted file mode 100644
index d78cf5b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/cgi_multipart_eof_fix.gemspec
+++ /dev/null
@@ -1,44 +0,0 @@
-
-# Gem::Specification for Cgi_multipart_eof_fix-2.5.0
-# Originally generated by Echoe
-
-Gem::Specification.new do |s|
-  s.name = %q{cgi_multipart_eof_fix}
-  s.version = "2.5.0"
-
-  s.specification_version = 2 if s.respond_to? :specification_version=
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Evan Weaver"]
-  s.date = %q{2007-10-26}
-  s.description = %q{Fix an exploitable bug in CGI multipart parsing.}
-  s.email = %q{}
-  s.files = ["CHANGELOG", "lib/cgi_multipart_eof_fix.rb", "LICENSE", "Manifest", "README", "test/test_cgi_multipart_eof_fix.rb", "cgi_multipart_eof_fix.gemspec"]
-  s.has_rdoc = true
-  s.homepage = %q{http://blog.evanweaver.com/pages/code#cgi_multipart_eof_fix}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{mongrel}
-  s.rubygems_version = %q{0.9.4.6}
-  s.summary = %q{Fix an exploitable bug in CGI multipart parsing.}
-  s.test_files = ["test/test_cgi_multipart_eof_fix.rb"]
-end
-
-
-# # Original Rakefile source (requires the Echoe gem):
-# 
-# 
-# require 'echoe'
-# 
-# Echoe.new("cgi_multipart_eof_fix") do |p|
-#   p.author = "Evan Weaver" 
-#   p.rubyforge_name = "mongrel"
-#   p.summary = p.description = "Fix an exploitable bug in CGI multipart parsing."    
-#   p.url = "http://blog.evanweaver.com/pages/code#cgi_multipart_eof_fix"
-#   p.docs_host = "blog.evanweaver.com:~/www/bax/public/files/doc/"
-#   p.rdoc_pattern = /CHANGELOG|LICENSE|README|lib\/cgi_multipart_eof_fix/
-# 
-#   p.need_tar_gz = false
-#   p.need_tgz = true
-#   p.require_signed = true
-# end
-# 
diff --git a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/lib/cgi_multipart_eof_fix.rb b/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/lib/cgi_multipart_eof_fix.rb
deleted file mode 100644
index a968594..0000000
--- a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/lib/cgi_multipart_eof_fix.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-
-# unfortunately: 
-# >> "1.8.6" < "1.8.10"
-# => false
-
-version = RUBY_VERSION.split(".").map {|i| i.to_i }
-
-if version [0] < 2 and version [1] < 9 and version [2] < 6 and RUBY_PLATFORM !~ /java/
-
-  STDERR.puts "** Ruby version is not up-to-date; loading cgi_multipart_eof_fix"  
-
-  require 'cgi'  
-  
-  class CGI
-    module QueryExtension
-      def read_multipart(boundary, content_length)
-        params = Hash.new([])
-        boundary = "--" + boundary
-        quoted_boundary = Regexp.quote(boundary, "n")
-        buf = ""
-        bufsize = 10 * 1024
-        boundary_end=""
-  
-        # start multipart/form-data
-        stdinput.binmode if defined? stdinput.binmode
-        boundary_size = boundary.size + EOL.size
-        content_length -= boundary_size
-        status = stdinput.read(boundary_size)
-        if nil == status
-          raise EOFError, "no content body"
-        elsif boundary + EOL != status
-          raise EOFError, "bad content body #{status.inspect} expected, got #{(boundary + EOL).inspect}"
-        end
-  
-        loop do
-          head = nil
-          if 10240 < content_length
-            require "tempfile"
-            body = Tempfile.new("CGI")
-          else
-            begin
-              require "stringio"
-              body = StringIO.new
-            rescue LoadError
-              require "tempfile"
-              body = Tempfile.new("CGI")
-            end
-          end
-          body.binmode if defined? body.binmode
-  
-          until head and /#{quoted_boundary}(?:#{EOL}|--)/n.match(buf)
-  
-            if (not head) and /#{EOL}#{EOL}/n.match(buf)
-              buf = buf.sub(/\A((?:.|\n)*?#{EOL})#{EOL}/n) do
-                head = $1.dup
-                ""
-              end
-              next
-            end
-  
-            if head and ( (EOL + boundary + EOL).size < buf.size )
-              body.print buf[0 ... (buf.size - (EOL + boundary + EOL).size)]
-              buf[0 ... (buf.size - (EOL + boundary + EOL).size)] = ""
-            end
-  
-            c = if bufsize < content_length
-                  stdinput.read(bufsize)
-                else
-                  stdinput.read(content_length)
-                end
-            if c.nil? || c.empty?
-              raise EOFError, "bad content body"
-            end
-            buf.concat(c)
-            content_length -= c.size
-          end
-  
-          buf = buf.sub(/\A((?:.|\n)*?)(?:[\r\n]{1,2})?#{quoted_boundary}([\r\n]{1,2}|--)/n) do
-            body.print $1
-            if "--" == $2
-              content_length = -1
-            end
-           boundary_end = $2.dup
-            ""
-          end
-  
-          body.rewind
-  
-          /Content-Disposition:.* filename="?([^\";]*)"?/ni.match(head)
-  	filename = ($1 or "")
-  	if /Mac/ni.match(env_table['HTTP_USER_AGENT']) and
-  	    /Mozilla/ni.match(env_table['HTTP_USER_AGENT']) and
-  	    (not /MSIE/ni.match(env_table['HTTP_USER_AGENT']))
-  	  filename = CGI::unescape(filename)
-  	end
-          
-          /Content-Type: (.*)/ni.match(head)
-          content_type = ($1 or "")
-  
-          (class << body; self; end).class_eval do
-            alias local_path path
-            define_method(:original_filename) {filename.dup.taint}
-            define_method(:content_type) {content_type.dup.taint}
-          end
-  
-          /Content-Disposition:.* name="?([^\";]*)"?/ni.match(head)
-          name = $1.dup
-  
-          if params.has_key?(name)
-            params[name].push(body)
-          else
-            params[name] = [body]
-          end
-          break if buf.size == 0
-          break if content_length === -1
-        end
-        raise EOFError, "bad boundary end of body part" unless boundary_end=~/--/
-  
-        params
-      end # read_multipart
-      private :read_multipart
-    end
-  end
-
-else
-  # Ruby version is up-to-date; cgi_multipart_eof_fix was not loaded
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/test/test_cgi_multipart_eof_fix.rb b/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/test/test_cgi_multipart_eof_fix.rb
deleted file mode 100644
index fc2ac16..0000000
--- a/spec10/public/webrat/test_app/gems/gems/cgi_multipart_eof_fix-2.5.0/test/test_cgi_multipart_eof_fix.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'cgi'
-require 'stringio'
-require 'timeout'
-
-BOUNDARY = '%?%(\w*)\\((\w*)\\)'
-PAYLOAD = "--#{BOUNDARY}\r\nContent-Disposition: form-data; name=\"a_field\"\r\n\r\nBang!\r\n--#{BOUNDARY}--\r\n"
-ENV['REQUEST_METHOD'] = "POST"
-ENV['CONTENT_TYPE']   = "multipart/form-data; boundary=\"#{BOUNDARY}\""
-ENV['CONTENT_LENGTH'] = PAYLOAD.length.to_s
-
-Object.send(:remove_const, :STDERR)
-STDERR = StringIO.new # hide the multipart load warnings
-
-version  = RUBY_VERSION.split(".").map {|i| i.to_i }
-IS_VULNERABLE = (version [0] < 2 and version [1] < 9 and version [2] < 6 and RUBY_PLATFORM !~ /java/)
-
-class CgiMultipartTestError < StandardError
-end
-
-class CgiMultipartEofFixTest < Test::Unit::TestCase
-
-  def read_multipart  
-    # can't use STDIN because of the dynamic constant assignment rule
-    $stdin = StringIO.new(PAYLOAD) 
-  
-    begin
-      Timeout.timeout(3) do 
-        CGI.new
-      end
-      "CGI is safe: read_multipart does not hang on malicious multipart requests."
-    rescue TimeoutError
-      raise CgiMultipartTestError, "CGI is exploitable: read_multipart hangs on malicious multipart requests."
-    end
-  end
-  
-  def test_exploitable
-    if IS_VULNERABLE
-      assert_raises CgiMultipartTestError do
-        read_multipart
-      end
-    else
-      # we're on 1.8.6 or higher already
-      assert_nothing_raised do
-        read_multipart      
-      end      
-    end
-  end
-  
-  def test_fixed
-    assert_nothing_raised do
-      load "#{File.dirname(__FILE__)}/../lib/cgi_multipart_eof_fix.rb"
-      read_multipart
-    end
-  end  
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/LICENSE b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/LICENSE
deleted file mode 100644
index 44887f3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/LICENSE
+++ /dev/null
@@ -1,29 +0,0 @@
-Copyright (c) 2005-2007 Thomas Uehlinger
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-This license does not apply to daemonize.rb, which is was written by 
-Travis Whitton und published under the following license:
-
-The Daemonize extension module is copywrited free software by Travis Whitton
-<whitton at atlantic.net>. You can redistribute it under the terms specified in
-the COPYING file of the Ruby distribution.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/README b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/README
deleted file mode 100644
index 27297c8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/README
+++ /dev/null
@@ -1,223 +0,0 @@
-= Daemons Version 1.0.10
-
-(See Releases for release-specific information)
-
-== What is Daemons?
-
-Daemons provides an easy way to wrap existing ruby scripts (for example a self-written server) 
-to be <i>run as a daemon</i> and to be <i>controlled by simple start/stop/restart commands</i>.
-
-If you want, you can also use daemons to <i>run blocks of ruby code in a daemon process</i> and to control
-these processes from the main application.
-
-Besides this basic functionality, daemons offers many advanced features like <i>exception backtracing</i> 
-and logging (in case your ruby script crashes) and <i>monitoring</i> and automatic restarting of your processes
-if they crash.
-
-Daemons includes the <tt>daemonize.rb</tt> script written by <i>Travis Whitton</i> to do the daemonization
-process.
-
-== Basic Usage
-
-You can use Daemons in four differet ways:
-
-=== 1. Create wrapper scripts for your server scripts or applications
-
-Layout: suppose you have your self-written server <tt>myserver.rb</tt>:
-
-  # this is myserver.rb
-  # it does nothing really useful at the moment
-  
-  loop do
-    sleep(5)
-  end
-  
-To use <tt>myserver.rb</tt> in a production environment, you need to be able to
-run <tt>myserver.rb</tt> in the _background_ (this means detach it from the console, fork it
-in the background, release all directories and file descriptors).
-
-Just create <tt>myserver_control.rb</tt> like this:
-
-  # this is myserver_control.rb
-  
-  require 'rubygems'        # if you use RubyGems
-  require 'daemons'
-  
-  Daemons.run('myserver.rb')
-  
-And use it like this from the console:
-
-  $ ruby myserver_control.rb start
-      (myserver.rb is now running in the background)
-  $ ruby myserver_control.rb restart
-      (...)
-  $ ruby myserver_control.rb stop
-  
-For testing purposes you can even run <tt>myserver.rb</tt> <i>without forking</i> in the background:
-
-  $ ruby myserver_control.rb run
-
-An additional nice feature of Daemons is that you can pass <i>additional arguments</i> to the script that 
-should be daemonized by seperating them by two _hyphens_:
-  
-  $ ruby myserver_control.rb start -- --file=anyfile --a_switch another_argument
-  
-
-=== 2. Create wrapper scripts that include your server procs
-
-Layout: suppose you have some code you want to run in the background and control that background process
-from a script:
-
-  # this is your code
-  # it does nothing really useful at the moment
-  
-  loop do
-    sleep(5)
-  end
-  
-To run this code as a daemon create <tt>myproc_control.rb</tt> like this and include your code:
-
-  # this is myproc_control.rb
-  
-  require 'rubygems'        # if you use RubyGems
-  require 'daemons'
-  
-  Daemons.run_proc('myproc.rb') do
-    loop do
-      sleep(5)
-    end
-  end
-  
-And use it like this from the console:
-
-  $ ruby myproc_control.rb start
-      (myproc.rb is now running in the background)
-  $ ruby myproc_control.rb restart
-      (...)
-  $ ruby myproc_control.rb stop
-  
-For testing purposes you can even run <tt>myproc.rb</tt> <i>without forking</i> in the background:
-
-  $ ruby myproc_control.rb run
-  
-=== 3. Control a bunch of daemons from another application
-
-Layout: you have an application <tt>my_app.rb</tt> that wants to run a bunch of 
-server tasks as daemon processes.
-
-  # this is my_app.rb
-  
-  require 'rubygems'        # if you use RubyGems
-  require 'daemons'
-  
-  task1 = Daemons.call(:multiple => true) do
-    # first server task
-    
-    loop {
-      conn = accept_conn()
-      serve(conn)
-    }
-  end
-  
-  task2 = Daemons.call do
-    # second server task
-    
-    loop {
-      something_different()
-    }
-  end
-  
-  # the parent process continues to run
-  
-  # we can even control our tasks, for example stop them
-  task1.stop
-  task2.stop
-  
-  exit
-  
-=== 4. Daemonize the currently running process
-
-Layout: you have an application <tt>my_daemon.rb</tt> that wants to run as a daemon
-(but without the ability to be controlled by daemons via start/stop commands)
-
-  # this is my_daemons.rb
-  
-  require 'rubygems'        # if you use RubyGems
-  require 'daemons'
-  
-  # Initialize the app while we're not a daemon
-  init()
-  
-  # Become a daemon
-  Daemons.daemonize
-  
-  # The server loop
-  loop {
-    conn = accept_conn()
-    serve(conn)
-  }
-
-  
-<b>For further documentation, refer to the module documentation of Daemons.</b>
-
-  
-== Download and Installation
-
-*Download*: just go to http://rubyforge.org/projects/daemons/
-
-Installation *with* RubyGems:
-  $ su
-  # gem install daemons
-  
-Installation *without* RubyGems:
-  $ tar xfz daemons-x.x.x.tar.gz
-  $ cd daemons-x.x.x
-  $ su
-  # ruby setup.rb
-  
-== Documentation
-
-For further documentation, refer to the module documentation of Daemons (click on Daemons).
-
-The RDoc documentation is also online at http://daemons.rubyforge.org
-
-
-== Author
-
-Written in 2005-2008 by Thomas Uehlinger <mailto:th.uehlinger at gmx.ch>.
-
-== License
-
-Copyright (c) 2005-2008 Thomas Uehlinger
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-This license does not apply to daemonize.rb, which is was written by 
-Travis Whitton und published under the following license:
-
-The Daemonize extension module is copywrited free software by Travis Whitton
-<whitton at atlantic.net>. You can redistribute it under the terms specified in
-the COPYING file of the Ruby distribution.
-
-== Feedback and other resources
-
-At http://rubyforge.org/projects/daemons.
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/Rakefile b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/Rakefile
deleted file mode 100644
index 15234f8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/Rakefile
+++ /dev/null
@@ -1,84 +0,0 @@
-require 'rubygems'
-Gem::manage_gems
-
-require 'rake/gempackagetask'
-#require 'rake/testtask'
-require 'rake/packagetask'
-require 'rake/rdoctask'
-
-$LOAD_PATH << './lib'
-require 'daemons'
-
-
-PKG_NAME = "daemons"
-
-PKG_FILES = FileList[
-  "Rakefile", "Releases", "TODO", "README", "LICENSE",
-  "setup.rb",
-  "lib/**/*.rb",
-  #"test/**/*",
-  "examples/**/*"
-]
-#PKG_FILES.exclude(%r(^test/tmp/.+))
-PKG_FILES.exclude(%r(\.pid$))
-PKG_FILES.exclude(%r(\.log$))
-
-spec = Gem::Specification.new do |s|
-  s.name = PKG_NAME
-  s.version = Daemons::VERSION
-  s.author = "Thomas Uehlinger"
-  s.email = "th.uehlinger at gmx.ch"
-  s.rubyforge_project = "daemons"
-  s.homepage = "http://daemons.rubyforge.org"
-  s.platform  = Gem::Platform::RUBY
-  s.summary = "A toolkit to create and control daemons in different ways"
-  s.description = <<-EOF
-    Daemons provides an easy way to wrap existing ruby scripts (for example a self-written server) 
-    to be run as a daemon and to be controlled by simple start/stop/restart commands.
-    
-    You can also call blocks as daemons and control them from the parent or just daemonize the current
-    process.
-    
-    Besides this basic functionality, daemons offers many advanced features like exception 
-    backtracing and logging (in case your ruby script crashes) and monitoring and automatic
-    restarting of your processes if they crash.
-  EOF
-    
-  #s.files = FileList["{test,lib}/**/*"].exclude("rdoc").to_a
-  s.files = PKG_FILES
-  s.require_path = "lib"
-  s.autorequire = "daemons"
-  s.has_rdoc = true
-  s.extra_rdoc_files = ["README", "Releases", "TODO"]
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.need_tar = true
-end
-
-
-#Rake::PackageTask.new("package") do |p|
-#  p.name = PKG_NAME
-#  p.version = Daemons::VERSION
-#  p.need_tar = true
-#  p.need_zip = true
-#  p.package_files = PKG_FILES
-#end
-
- 
-task :default => [:package]
-
-
-task :upload do
-  sh "scp -r html/* uehli at rubyforge.org:/var/www/gforge-projects/daemons"
-end
-
-
-desc "Create the RDOC html files"
-rd = Rake::RDocTask.new("rdoc") { |rdoc|
-  rdoc.rdoc_dir = 'html'
-  rdoc.title    = "Daemons"
-  rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README'
-  rdoc.rdoc_files.include('README', 'TODO', 'Releases')
-  rdoc.rdoc_files.include('lib/**/*.rb')
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/Releases b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/Releases
deleted file mode 100644
index 2926c84..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/Releases
+++ /dev/null
@@ -1,126 +0,0 @@
-= Daemons Release History
-
-== Release 1.0.10: November 16, 2007
-
-* By default, we now delete stray pid-files (i.e. pid-files which result for 
-  example from a killed daemon) automatically. This function can be deactivated by
-  passing :keep_pid_files => true as an option.
-* All pid files of :multiple daemons new get deleted correctly upon exit of the daemons (reported by Han Holl).
-* Use the signal 'KILL' instead of 'TERM' on Windows platforms.
-* Use exit! in trap('TERM') instead of exit when option :hard_exit is given (thanks to Han Holl).
-* Did some clarification on the exception log.
-
-== Release 1.0.9: October 29, 2007
-
-* fixed a severe bug in the new Pid.running? function: function returned true if the process did not exist (thanks to Jeremy Lawler).
-
-== Release 1.0.8: September 24, 2007
-
-* new Pid.running? function. Checking whether a process exists by sending signal '0' (thanks to Dru Nelson).
-
-== Release 1.0.7: July 7, 2007
-
-* Patch to fix wrong ARGV when using :exec (in def start_exec: Kernel.exec(script(), *(@app_argv || []))) (thanks to Alex McGuire).
-
-== Release 1.0.6: Mai 8, 2007
-
-* New option to pass an ARGV-style array to run and run_proc (thanks to Marc Evans).
-* Additional patches for '/var/log' (thanks to Marc Evans).
-
-== Release 1.0.5: February 24, 2007
-
-* Applied patch that makes daemons to use '/var/log' as logfile 
-  directory if you use :dir_mode = :system (thanks to Han Holl).
-* Daemons should now work with Ruby 1.9 (at least the basic features).
-
-== Release 1.0.4: January 17, 2007
-
-* Document the :log_output option (thanks to Andrew Kuklewicz).
-* Set STDOUT.sync = true when redirecting to a logfile (thanks to Andrew Kuklewicz).
-* Should now run also correctly when there is no working 'ps ax' on the system (thanks to Daniel Kehoe).
-
-== Release 1.0.3: November 1, 2006
-
-* Set the app_name correctly also for the monitor process (thanks to Ilya Novoselov).
-
-== Release 1.0.2: September 26, 2006
-
-* Changed the 'ps -ax' call back to 'ps ax'.
-* Fixed the documentation for the :normal :dir_mode.
-* As a default for Daemons.run_proc, the pid file is now saved in the current directory.
-* In :ontop mode for running a proc (this is equal to calling something like 'ruby ctrl_proc.rb run'), 
-  the proc now runs directly in the calling script, not in a forked process anymore (thanks to Paul Butcher).
-* Set $0 to app_name in the daemons (thanks to Ilya Novoselov).
-
-== Release 1.0.1: August 30, 2006
-
-* Fixed a regex for parsing the 'ps ax' system call. (thanks to Garance Alistair Drosehn)
-
-== Release 1.0.0: August 29, 2006
-
-* Fix the parsing of the 'ps ax' system call. (thanks to Garance Alistair Drosehn)
-
-== Release 0.4.4: February 14, 2006
-
-* Several fixes that allow us to use the Daemons::Controller 
-  with a proc instead of wrapping a script file. This gives us all the
-  PID file management, monitoring, command line options, etc. without having
-  to specify a path to our script which can be tricky, especially when using
-  RubyGems. (thanks to John-Mason Shackelford)
-
-== Release 0.4.3: November 29, 2005
-
-* New Option: You can specify the name of the application with :app_name
-  on calling Daemons.run. This will be used to contruct the name of the pid files
-  and log files. Defaults to the basename of the script. (thanks to Stephen R. Veit)
-
-* Bugfix: Handle the case where no controller options are given when calling Daemons, 
-  just options after "--". (thanks to Stephen R. Veit)
-
-
-== Release 0.4.2: November 15, 2005
-
-* Bugfix for problem with :normal pid-file directory mode (pid.rb), fixed (thanks to Stephen R. Veit)
-
-
-== Release 0.4.1: September 11, 2005
-
-* Bugfix for 'run' command line mode: didn't work anymore in 0.4.0, fixed
-
-
-== Release 0.4.0: July 30, 2005
-
-* Two completely new operation modes:
-  1. Call a block as a daemon (<tt>Daemons.call { my_daemon_code }</tt>)
-     and control it from the parent process.
-  2. Daemonize the currently running process (<tt>Daemons.daemonize</tt>)
-  plus the already existing mode to control your scripts (<tt>Daemons.run("script.rb")</tt>)
-* Improved documentation (for example "How does the daemonization process work?")
-* Improved "simulation mode" (<tt>:ontop</tt> option)
-* Some minor bugfixes
-
-
-== Release 0.3.0: April 21, 2005
-
-* New monitor functionality: automatic restarting of your applications if they crash
-* 'restart' command fixed
-* '--force' command modifier (please refer to the documentation)
-* Some more bugfixes and improvements
-
-
-== Release 0.2.1: Mar 21, 2005
-
-* Bugfix for a problem with the 'status' command
-
-
-== Release 0.2.0: Mar 21, 2005
-
-* Exception backtrace functionality added
-* Exec functionality added
-* More examples added
-* New commands: status, zap
-
-
-== Release 0.0.1: Feb 8, 2005
-
-* Initial release
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/TODO b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/TODO
deleted file mode 100644
index 81e4d2e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/TODO
+++ /dev/null
@@ -1,6 +0,0 @@
-* write the README (2005-02-07) *DONE*
-* write some real tests (2005-02-08)
-* document the new options (2005-03-14) *DONE*
-* start/stop with --force options (2005-04-05)
-* option to give some console output on start/stop commands (2005-04-05)
-
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/call/call.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/call/call.rb
deleted file mode 100644
index 0738cf5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/call/call.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-
-require 'daemons'
-
-testfile = File.expand_path(__FILE__) + '.log'
-
-
-# On the first call to <tt<call</tt>, an application group (accessible by <tt>Daemons.group</tt>)
-# will be created an the options will be kept within, so you only have to specify
-# <tt>:multiple</tt> once.
-#
-
-options = {
-#  :ontop => true,
-  :multiple => true
-}
-
-
-Daemons.call(options) do
-  File.open(testfile, 'w') {|f|
-    f.puts "test"
-  }
-
-  loop { puts "1"; sleep 5 }
-end
-puts "first task started"
-
-Daemons.call do
-  loop { puts "2"; sleep 4 }
-end
-puts "second task started"
-
-# NOTE: this process will exit after 5 seconds
-Daemons.call do
-  puts "3"
-  sleep 5
-end
-puts "third task started"
-
-puts "waiting 20 seconds..."
-sleep(20)
-
-# This call would result in an exception as it will try to kill the third process 
-# which has already terminated by that time; but using the 'true' parameter forces the
-# stop_all procedure.
-puts "trying to stop all tasks..."
-Daemons.group.stop_all(true)
-
-puts "done"
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/call/call_monitor.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/call/call_monitor.rb
deleted file mode 100644
index f58430f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/call/call_monitor.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-
-require 'daemons'
-
-testfile = File.expand_path(__FILE__) + '.log'
-
-
-# On the first call to <tt<call</tt>, an application group (accessible by <tt>Daemons.group</tt>)
-# will be created an the options will be kept within, so you only have to specify
-# <tt>:multiple</tt> once.
-#
-
-options = {
-#  :ontop => true,
-  :multiple => true,
-  :monitor => true
-}
-
-
-Daemons.call(options) do
-  loop { puts "1"; sleep 20 }
-end
-puts "first task started"
-
-
-# NOTE: this process will exit after 5 seconds
-Daemons.call do
-  File.open(testfile, 'a') {|f|
-    f.puts "started..."
-    puts "2"
-  
-    sleep 5
-
-    f.puts "...exit"
-  }
-end
-puts "second task started"
-
-puts "waiting 100 seconds..."
-sleep(100)
-
-# This call would result in an exception as it will try to kill the third process 
-# which has already terminated by that time; but using the 'true' parameter forces the
-# stop_all procedure.
-puts "trying to stop all tasks..."
-Daemons.group.stop_all(true)
-
-puts "done"
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/daemonize/daemonize.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/daemonize/daemonize.rb
deleted file mode 100644
index 749ae80..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/daemonize/daemonize.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-
-
-require 'daemons'
-
-
-testfile = File.expand_path(__FILE__) + '.log'
-
-Daemons.daemonize
-
-File.open(testfile, 'w') {|f|
-  f.write("test")
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_crash.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_crash.rb
deleted file mode 100644
index 97d024a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_crash.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-  :log_output => true,
-  :backtrace => true
-}
-
-Daemons.run(File.join(File.dirname(__FILE__), 'myserver_crashing.rb'), options)
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_exec.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_exec.rb
deleted file mode 100644
index ccc8f72..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_exec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-  :mode => :exec
-}
-
-Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'), options)
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_exit.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_exit.rb
deleted file mode 100644
index 9983a03..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_exit.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-}
-
-Daemons.run(File.join(File.dirname(__FILE__), 'myserver_exiting.rb'), options)
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_keep_pid_files.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_keep_pid_files.rb
deleted file mode 100644
index fd3c9c5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_keep_pid_files.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-  :keep_pid_files => true
-}
-
-
-Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'), options)
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_monitor.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_monitor.rb
deleted file mode 100644
index 48c2827..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_monitor.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-  :monitor => true
-}
-
-Daemons.run(File.join(File.dirname(__FILE__), 'myserver_crashing.rb'), options)
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_multiple.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_multiple.rb
deleted file mode 100644
index fa8e776..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_multiple.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-  :multiple => true
-}
-
-Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'), options)
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_normal.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_normal.rb
deleted file mode 100644
index 2b6517d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_normal.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'))
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_ontop.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_ontop.rb
deleted file mode 100644
index ca36222..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_ontop.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-  :ontop => true
-}
-
-Daemons.run(File.join(File.dirname(__FILE__), 'myserver.rb'), options)
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_optionparser.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_optionparser.rb
deleted file mode 100644
index a84c69b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_optionparser.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-require 'optparse'
-require 'logger'
-require 'ostruct'
-
-
-class MyApp < Logger::Application
-  def initialize(args)
-    super(self.class)
-    @options = OpenStruct.new(:daemonize => true)
-    opts = OptionParser.new do |opts|
-      opts.banner = 'Usage: myapp [options]'
-      opts.separator ''
-      opts.on('-N','--no-daemonize',"Don't run as a daemon") do
-        @options.daemonize = false
-      end
-    end
-    @args = opts.parse!(args)
-  end
-  
-  def run
-    Daemons.run_proc('myapp',{:ARGV => @args, :ontop => !@options.daemonize}) do
-      puts "@options.daemonize: #{@options.daemonize}"
-      STDOUT.sync = true
-      loop do
-        print '.'
-        sleep(2)
-      end
-    end
-  end
-end
-
-
-myapp = MyApp.new(ARGV)
-myapp.run
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc.rb
deleted file mode 100644
index 7bd1fac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-             :multiple   => false,
-             :ontop      => false,
-             :backtrace  => true,
-             :log_output => true,
-             :monitor    => true
-           }
-           
-Daemons.run_proc('ctrl_proc.rb', options) do
-  loop do
-    puts 'ping from proc!'
-    sleep(3)
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc.rb.output b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc.rb.output
deleted file mode 100644
index f9aeae8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc.rb.output
+++ /dev/null
@@ -1,101 +0,0 @@
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
-ping from proc!
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_multiple.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_multiple.rb
deleted file mode 100644
index 8c3b0a2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_multiple.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-
-options = {
-  :log_output => true,
-  :multiple => true, 
-}
-
-
-Daemons.run_proc('ctrl_proc_multiple.rb', options) do
-  puts "hello"
-  sleep(5)
-  puts "done"
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_multiple.rb.output b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_multiple.rb.output
deleted file mode 100644
index 3e23ae4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_multiple.rb.output
+++ /dev/null
@@ -1,2 +0,0 @@
-
-hello
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_simple.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_simple.rb
deleted file mode 100644
index a26fe14..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/ctrl_proc_simple.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-lib_dir = File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
-
-if File.exist?(File.join(lib_dir, 'daemons.rb'))
-  $LOAD_PATH.unshift lib_dir
-else
-  begin; require 'rubygems'; rescue ::Exception; end
-end
-
-require 'daemons'
-
-           
-Daemons.run_proc('ctrl_proc_simple.rb') do
-  loop do
-    puts 'ping from proc!'
-    sleep(3)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver.rb
deleted file mode 100644
index 12430b2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env ruby
-
-
-# This is myserver.rb, an example server that is to be controlled by daemons
-# and that does nothing really useful at the moment.
-#
-# Don't run this script by yourself, it can be controlled by the ctrl*.rb scripts.
-
-loop do
-  puts 'ping from myserver.rb!'
-  sleep(3)
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_crashing.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_crashing.rb
deleted file mode 100644
index f158e7b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_crashing.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# This is myserver.rb, an example server that is to be controlled by daemons
-# and that does nothing really useful at the moment.
-#
-# Don't run this script by yourself, it can be controlled by the ctrl*.rb scripts.
-
-loop do
-  puts 'ping from myserver.rb!'
-  puts 'this example server will crash in 3 seconds...'
-  
-  sleep(3)
-  
-  puts 'CRASH!'
-  raise 'CRASH!'
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_crashing.rb.output b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_crashing.rb.output
deleted file mode 100644
index cd5ca5d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_crashing.rb.output
+++ /dev/null
@@ -1,30 +0,0 @@
-/home/uehli/Desktop/daemons-current/examples/myserver_crashing.rb:13: CRASH! (RuntimeError)
-	from /home/uehli/Desktop/daemons-current/examples/myserver_crashing.rb:6:in `loop'
-	from /home/uehli/Desktop/daemons-current/examples/myserver_crashing.rb:6
-	from /home/uehli/Desktop/daemons-current/lib/daemons.rb:116:in `load'
-	from /home/uehli/Desktop/daemons-current/lib/daemons.rb:116:in `run_via_load'
-	from /home/uehli/Desktop/daemons-current/lib/daemons.rb:90:in `start'
-	from /home/uehli/Desktop/daemons-current/lib/daemons.rb:359:in `run'
-	from /home/uehli/Desktop/daemons-current/lib/daemons.rb:469:in `run'
-	from /home/uehli/Desktop/daemons-current/lib/daemons.rb:468:in `call'
-	from /home/uehli/Desktop/daemons-current/lib/daemons/cmdline.rb:94:in `catch_exceptions'
-	from /home/uehli/Desktop/daemons-current/lib/daemons.rb:468:in `run'
-	from ctrl_crash.rb:17
-ping from myserver.rb!
-this example server will crash in 3 seconds...
-CRASH!
-ping from myserver.rb!
-this example server will crash in 3 seconds...
-CRASH!
-/Users/uehli/Projects/daemons-proj/examples/run/myserver_crashing.rb:13: CRASH! (RuntimeError)
-	from /Users/uehli/Projects/daemons-proj/examples/run/myserver_crashing.rb:6:in `loop'
-	from /Users/uehli/Projects/daemons-proj/examples/run/myserver_crashing.rb:6
-	from /Users/uehli/Projects/daemons-proj/lib/daemons/application.rb:176:in `load'
-	from /Users/uehli/Projects/daemons-proj/lib/daemons/application.rb:176:in `start_load'
-	from /Users/uehli/Projects/daemons-proj/lib/daemons/application.rb:257:in `start'
-	from /Users/uehli/Projects/daemons-proj/lib/daemons/controller.rb:69:in `run'
-	from /Users/uehli/Projects/daemons-proj/lib/daemons.rb:139:in `run'
-	from /Users/uehli/Projects/daemons-proj/lib/daemons/cmdline.rb:105:in `call'
-	from /Users/uehli/Projects/daemons-proj/lib/daemons/cmdline.rb:105:in `catch_exceptions'
-	from /Users/uehli/Projects/daemons-proj/lib/daemons.rb:138:in `run'
-	from ctrl_crash.rb:17
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_exiting.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_exiting.rb
deleted file mode 100644
index e5c6fe7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/examples/run/myserver_exiting.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-loop do
-  puts 'ping from myserver.rb!'
-  puts 'this example server will exit in 3 seconds...'
-  
-  sleep(3)
-  
-  Process.exit
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons.rb
deleted file mode 100644
index 2de1e0c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons.rb
+++ /dev/null
@@ -1,283 +0,0 @@
-require 'optparse'
-require 'optparse/time'
-
-
-require 'daemons/pidfile'  
-require 'daemons/cmdline'
-require 'daemons/exceptions'
-require 'daemons/monitor'
-
-
-require 'daemons/application'
-require 'daemons/application_group'
-require 'daemons/controller'
-
-
-# All functions and classes that Daemons provides reside in this module.
-#
-# Daemons is normally invoked by one of the following four ways:
-#
-# 1.  <tt>Daemons.run(script, options)</tt>:
-#     This is used in wrapper-scripts that are supposed to control other ruby scripts or
-#     external applications. Control is completely passed to the daemons library.
-#     Such wrapper script need to be invoked with command line options like 'start' or 'stop'
-#     to do anything useful.
-#
-# 2.  <tt>Daemons.run_proc(app_name, options) { (...) }</tt>:
-#     This is used in wrapper-scripts that are supposed to control a proc. 
-#     Control is completely passed to the daemons library.
-#     Such wrapper script need to be invoked with command line options like 'start' or 'stop'
-#     to do anything useful.
-#
-# 3.  <tt>Daemons.call(options) { block }</tt>:
-#     Execute the block in a new daemon. <tt>Daemons.call</tt> will return immediately
-#     after spawning the daemon with the new Application object as a return value.
-#
-# 4.  <tt>Daemons.daemonize(options)</tt>:
-#     Daemonize the currently runnig process, i.e. the calling process will become a daemon.
-#
-# == What does daemons internally do with my daemons?
-# *or*:: why do my daemons crash when they try to open a file?
-# *or*:: why can I not see any output from the daemon on the console (when using for example +puts+)?
-#
-# From a technical aspect of view, daemons does the following when creating a daemon:
-#
-# 1.  Forks a child (and exits the parent process, if needed)
-# 2.  Becomes a session leader (which detaches the program from
-#     the controlling terminal).
-# 3.  Forks another child process and exits first child. This prevents
-#     the potential of acquiring a controlling terminal.
-# 4.  Changes the current working directory to "/".
-# 5.  Clears the file creation mask (sets +umask+ to 0000).
-# 6.  Closes file descriptors (reopens +STDOUT+ and +STDERR+ to point to a logfile if
-#     possible).
-#
-# So what does this mean for your daemons:
-# - the current directory is '/'
-# - you cannot receive any input from the console (for example no +gets+)
-# - you cannot output anything from the daemons with +puts+/+print+ unless a logfile is used
-#
-# == How do PidFiles work? Where are they stored?
-#
-# Also, you are maybe interested in reading the documentation for the class PidFile.
-# There you can find out about how Daemons works internally and how and where the so
-# called <i>PidFiles</i> are stored.
-#
-module Daemons
-
-  VERSION = "1.0.10"
-  
-  require 'daemons/daemonize'
-  
-  
-  # Passes control to Daemons.
-  # This is used in wrapper-scripts that are supposed to control other ruby scripts or
-  # external applications. Control is completely passed to the daemons library.
-  # Such wrapper script should be invoked with command line options like 'start' or 'stop'
-  # to do anything useful.
-  #
-  # +script+::  This is the path to the script that should be run as a daemon.
-  #             Please note that Daemons runs this script with <tt>load <script></tt>.
-  #             Also note that Daemons cannot detect the directory in which the controlling
-  #             script resides, so this has to be either an absolute path or you have to run
-  #             the controlling script from the appropriate directory.
-  #
-  # +options+:: A hash that may contain one or more of the options listed below
-  #
-  # === Options:
-  # <tt>:app_name</tt>::  The name of the application. This will be
-  #                       used to contruct the name of the pid files
-  #                       and log files. Defaults to the basename of
-  #                       the script.
-  # <tt>:ARGV</tt>::      An array of strings containing parameters and switches for Daemons.
-  #                       This includes both parameters for Daemons itself and the controlled scripted.
-  #                       These are assumed to be separated by an array element '--', .e.g.
-  #                       ['start', 'f', '--', 'param1_for_script', 'param2_for_script'].
-  #                       If not given, ARGV (the parameters given to the Ruby process) will be used.
-  # <tt>:dir_mode</tt>::  Either <tt>:script</tt> (the directory for writing the pid files to 
-  #                       given by <tt>:dir</tt> is interpreted relative
-  #                       to the script location given by +script+) or <tt>:normal</tt> (the directory given by 
-  #                       <tt>:dir</tt> is interpreted as a (absolute or relative) path) or <tt>:system</tt> 
-  #                       (<tt>/var/run</tt> is used as the pid file directory)
-  #
-  # <tt>:dir</tt>::       Used in combination with <tt>:dir_mode</tt> (description above)
-  # <tt>:multiple</tt>::  Specifies whether multiple instances of the same script are allowed to run at the
-  #                       same time
-  # <tt>:ontop</tt>::     When given (i.e. set to true), stay on top, i.e. do not daemonize the application 
-  #                       (but the pid-file and other things are written as usual)
-  # <tt>:mode</tt>::      <tt>:load</tt> Load the script with <tt>Kernel.load</tt>;
-  #                       <tt>:exec</tt> Execute the script file with <tt>Kernel.exec</tt>
-  # <tt>:backtrace</tt>:: Write a backtrace of the last exceptions to the file '[app_name].log' in the 
-  #                       pid-file directory if the application exits due to an uncaught exception
-  # <tt>:monitor</tt>::   Monitor the programs and restart crashed instances
-  # <tt>:log_output</tt>:: When given (i.e. set to true), redirect both STDOUT and STDERR to a logfile named '[app_name].output' in the pid-file directory
-  # <tt>:keep_pid_files</tt>:: When given do not delete lingering pid-files (files for which the process is no longer running).
-  # <tt>:hard_exit</tt>:: When given use exit! to end a daemons instead of exit (this will for example
-  #                       not call at_exit handlers).
-  # -----
-  # 
-  # === Example:
-  #   options = {
-  #     :app_name   => "my_app",
-  #     :ARGV       => ['start', '-f', '--', 'param_for_myscript']
-  #     :dir_mode   => :script,
-  #     :dir        => 'pids',
-  #     :multiple   => true,
-  #     :ontop      => true,
-  #     :mode       => :exec,
-  #     :backtrace  => true,
-  #     :monitor    => true
-  #   }
-  #
-  #   Daemons.run(File.join(File.dirname(__FILE__), 'myscript.rb'), options)
-  #
-  def run(script, options = {})
-    options[:script] = script
-    @controller = Controller.new(options, options[:ARGV] || ARGV)
-    
-    @controller.catch_exceptions {
-      @controller.run
-    }
-    
-    # I don't think anybody will ever use @group, as this location should not be reached under non-error conditions
-    @group = @controller.group
-  end
-  module_function :run
-  
-  
-  # Passes control to Daemons.
-  # This function does the same as Daemons.run except that not a script but a proc
-  # will be run as a daemon while this script provides command line options like 'start' or 'stop'
-  # and the whole pid-file management to control the proc.
-  #
-  # +app_name+::  The name of the application. This will be
-  #               used to contruct the name of the pid files
-  #               and log files. Defaults to the basename of
-  #               the script.
-  # 
-  # +options+::   A hash that may contain one or more of the options listed in the documentation for Daemons.run
-  #
-  # A block must be given to this function. The block will be used as the :proc entry in the options hash.
-  # -----
-  # 
-  # === Example:
-  #
-  #   Daemons.run_proc('myproc.rb') do
-  #     loop do
-  #       accept_connection()
-  #       read_request()
-  #       send_response()
-  #       close_connection()
-  #     end
-  #   end
-  #
-  def run_proc(app_name, options = {}, &block)
-    options[:app_name] = app_name
-    options[:mode] = :proc
-    options[:proc] = block
-    
-    # we do not have a script location so the the :script :dir_mode cannot be used, change it to :normal
-    if [nil, :script].include? options[:dir_mode]
-      options[:dir_mode] = :normal
-      options[:dir] = File.expand_path('.')
-    end
-    
-    @controller = Controller.new(options, options[:ARGV] || ARGV)
-    
-    @controller.catch_exceptions {
-      @controller.run
-    }
-    
-    # I don't think anybody will ever use @group, as this location should not be reached under non-error conditions
-    @group = @controller.group
-  end
-  module_function :run_proc
-  
-  
-  # Execute the block in a new daemon. <tt>Daemons.call</tt> will return immediately
-  # after spawning the daemon with the new Application object as a return value.
-  #
-  # +options+:: A hash that may contain one or more of the options listed below
-  #
-  # +block+::   The block to call in the daemon.
-  #
-  # === Options:
-  # <tt>:multiple</tt>::  Specifies whether multiple instances of the same script are allowed to run at the
-  #                       same time
-  # <tt>:ontop</tt>::     When given, stay on top, i.e. do not daemonize the application 
-  # <tt>:backtrace</tt>:: Write a backtrace of the last exceptions to the file '[app_name].log' in the 
-  #                       pid-file directory if the application exits due to an uncaught exception
-  # -----
-  # 
-  # === Example:
-  #   options = {
-  #     :backtrace  => true,
-  #     :monitor    => true,
-  #     :ontop      => true
-  #   }
-  #
-  #   Daemons.call(options) begin
-  #     # Server loop:
-  #     loop {
-  #       conn = accept_conn()
-  #       serve(conn)
-  #     }
-  #   end
-  #
-  def call(options = {}, &block)
-    unless block_given?
-      raise "Daemons.call: no block given"
-    end
-    
-    options[:proc] = block
-    options[:mode] = :proc
-    
-    @group ||= ApplicationGroup.new('proc', options)
-    
-    new_app = @group.new_application(options)
-    new_app.start
-
-    return new_app
-  end
-  module_function :call
-  
-  
-  # Daemonize the currently runnig process, i.e. the calling process will become a daemon.
-  #
-  # +options+:: A hash that may contain one or more of the options listed below
-  #
-  # === Options:
-  # <tt>:ontop</tt>::     When given, stay on top, i.e. do not daemonize the application 
-  # <tt>:backtrace</tt>:: Write a backtrace of the last exceptions to the file '[app_name].log' in the 
-  #                       pid-file directory if the application exits due to an uncaught exception
-  # -----
-  # 
-  # === Example:
-  #   options = {
-  #     :backtrace  => true,
-  #     :ontop      => true
-  #   }
-  #
-  #   Daemons.daemonize(options)
-  #
-  #   # Server loop:
-  #   loop {
-  #     conn = accept_conn()
-  #     serve(conn)
-  #   }
-  #
-  def daemonize(options = {})
-    @group ||= ApplicationGroup.new('self', options)
-    
-    @group.new_application(:mode => :none).start
-  end
-  module_function :daemonize
-  
-  # Return the internal ApplicationGroup instance.
-  def group; @group; end
-  module_function :group
-  
-  # Return the internal Controller instance.
-  def controller; @controller; end
-  module_function :controller
-end 
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/application.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/application.rb
deleted file mode 100644
index c4e928d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/application.rb
+++ /dev/null
@@ -1,372 +0,0 @@
-require 'daemons/pidfile'
-require 'daemons/pidmem'
-
-
-module Daemons
-
-  class Application
-  
-    attr_accessor :app_argv
-    attr_accessor :controller_argv
-    
-    # the Pid instance belonging to this application
-    attr_reader :pid
-    
-    # the ApplicationGroup the application belongs to
-    attr_reader :group
-    
-    # my private options
-    attr_reader :options
-    
-    
-    SIGNAL = (RUBY_PLATFORM =~ /win32/ ? 'KILL' : 'TERM')
-    
-    
-    def initialize(group, add_options = {}, pid = nil)
-      @group = group
-      @options = group.options.dup
-      @options.update(add_options)
-      
-      @dir_mode = @dir = @script = nil
-      
-      unless @pid = pid
-        if dir = pidfile_dir
-          @pid = PidFile.new(dir, @group.app_name, @group.multiple)
-        else
-          @pid = PidMem.new
-        end
-      end
-    end
-    
-    def script
-      @script || @group.script
-    end
-    
-    def pidfile_dir
-      Pid.dir(@dir_mode || @group.dir_mode, @dir || @group.dir, @script || @group.script)
-    end
-    
-    def output_logfile
-      logdir = options[:dir_mode] == :system ? '/var/log' : pidfile_dir
-      (options[:log_output] && logdir) ? File.join(logdir, @group.app_name + '.output') : nil
-    end
-    
-    def logfile
-      logdir = options[:dir_mode] == :system ? '/var/log' : pidfile_dir
-      logdir ? File.join(logdir, @group.app_name + '.log') : nil
-    end
-    
-    # this function is only used to daemonize the currently running process (Daemons.daemonize)
-    def start_none
-      unless options[:ontop]
-        Daemonize.daemonize(nil, @group.app_name) #(logfile)
-      else
-        Daemonize.simulate
-      end
-      
-      @pid.pid = Process.pid
-      
-      
-      # We need this to remove the pid-file if the applications exits by itself.
-      # Note that <tt>at_text</tt> will only be run if the applications exits by calling 
-      # <tt>exit</tt>, and not if it calls <tt>exit!</tt> (so please don't call <tt>exit!</tt>
-      # in your application!
-      #
-      at_exit {
-        begin; @pid.cleanup; rescue ::Exception; end
-        
-        # If the option <tt>:backtrace</tt> is used and the application did exit by itself
-        # create a exception log.
-        if options[:backtrace] and not options[:ontop] and not $daemons_sigterm
-          begin; exception_log(); rescue ::Exception; end
-        end
-          
-      }
-      
-      # This part is needed to remove the pid-file if the application is killed by 
-      # daemons or manually by the user.
-      # Note that the applications is not supposed to overwrite the signal handler for
-      # 'TERM'.
-      #
-      trap(SIGNAL) {
-        begin; @pid.cleanup; rescue ::Exception; end
-        $daemons_sigterm = true
-        
-        if options[:hard_exit]
-          exit!
-        else
-          exit
-        end
-      }
-    end
-    
-    def start_exec
-      if options[:backtrace]
-        puts "option :backtrace is not supported with :mode => :exec, ignoring"
-      end
-      
-      unless options[:ontop]
-        Daemonize.daemonize(output_logfile, @group.app_name)
-      else
-        Daemonize.simulate(output_logfile)
-      end
-      
-      # note that we cannot remove the pid file if we run in :ontop mode (i.e. 'ruby ctrl_exec.rb run')
-      @pid.pid = Process.pid
-        
-      ENV['DAEMONS_ARGV'] = @controller_argv.join(' ')      
-      # haven't tested yet if this is really passed to the exec'd process...
-      
-      
-      
-      Kernel.exec(script(), *(@app_argv || []))
-      #Kernel.exec(script(), *ARGV)
-    end
-    
-    def start_load
-      unless options[:ontop]
-        Daemonize.daemonize(output_logfile, @group.app_name)
-      else
-        Daemonize.simulate(output_logfile)
-      end
-      
-      @pid.pid = Process.pid
-      
-      
-      # We need this to remove the pid-file if the applications exits by itself.
-      # Note that <tt>at_text</tt> will only be run if the applications exits by calling 
-      # <tt>exit</tt>, and not if it calls <tt>exit!</tt> (so please don't call <tt>exit!</tt>
-      # in your application!
-      #
-      at_exit {
-        begin; @pid.cleanup; rescue ::Exception; end
-        
-        # If the option <tt>:backtrace</tt> is used and the application did exit by itself
-        # create a exception log.
-        if options[:backtrace] and not options[:ontop] and not $daemons_sigterm
-          begin; exception_log(); rescue ::Exception; end
-        end
-          
-      }
-      
-      # This part is needed to remove the pid-file if the application is killed by 
-      # daemons or manually by the user.
-      # Note that the applications is not supposed to overwrite the signal handler for
-      # 'TERM'.
-      #
-      trap(SIGNAL) {
-        begin; @pid.cleanup; rescue ::Exception; end
-        $daemons_sigterm = true
-        
-        if options[:hard_exit]
-          exit!
-        else
-          exit
-        end
-      }
-      
-      # Now we really start the script...
-      $DAEMONS_ARGV = @controller_argv
-      ENV['DAEMONS_ARGV'] = @controller_argv.join(' ')
-      
-      ARGV.clear
-      ARGV.concat @app_argv if @app_argv
-      
-      # TODO: begin - rescue - end around this and exception logging
-      load script()
-    end
-    
-    def start_proc
-      return unless p = options[:proc]
-    
-      myproc = proc do 
-        # We need this to remove the pid-file if the applications exits by itself.
-        # Note that <tt>at_text</tt> will only be run if the applications exits by calling 
-        # <tt>exit</tt>, and not if it calls <tt>exit!</tt> (so please don't call <tt>exit!</tt>
-        # in your application!
-        #
-        at_exit {
-          begin; @pid.cleanup; rescue ::Exception; end
-
-          # If the option <tt>:backtrace</tt> is used and the application did exit by itself
-          # create a exception log.
-          if options[:backtrace] and not options[:ontop] and not $daemons_sigterm
-            begin; exception_log(); rescue ::Exception; end
-          end
-
-        }
-
-        # This part is needed to remove the pid-file if the application is killed by 
-        # daemons or manually by the user.
-        # Note that the applications is not supposed to overwrite the signal handler for
-        # 'TERM'.
-        #
-        trap(SIGNAL) {
-          begin; @pid.cleanup; rescue ::Exception; end
-          $daemons_sigterm = true
-
-          if options[:hard_exit]
-            exit!
-          else
-            exit
-          end
-        }
-        
-        p.call()
-      end
-      
-      unless options[:ontop]
-        @pid.pid = Daemonize.call_as_daemon(myproc, output_logfile, @group.app_name)
-      else
-        Daemonize.simulate(output_logfile)
-        
-        @pid.pid = Process.pid
-        
-        myproc.call
-        
-# why did we use this??
-#         Thread.new(&options[:proc])
-
-# why did we use the code below??
-        # unless pid = Process.fork
-        #   @pid.pid = pid
-        #   Daemonize.simulate(logfile)
-        #   options[:proc].call
-        #   exit
-        # else
-        #   Process.detach(@pid.pid)
-        # end
-      end
-    end
-    
-    
-    def start
-      @group.create_monitor(@group.applications[0] || self) unless options[:ontop]  # we don't monitor applications in the foreground
-      
-      case options[:mode]
-        when :none
-          # this is only used to daemonize the currently running process
-          start_none
-        when :exec
-          start_exec
-        when :load
-          start_load
-        when :proc
-          start_proc
-        else
-          start_load
-      end
-    end
-    
-#     def run
-#       if @group.controller.options[:exec]
-#         run_via_exec()
-#       else
-#         run_via_load()
-#       end
-#     end
-#      
-#     def run_via_exec
-#       
-#     end
-#     
-#     def run_via_load
-#       
-#     end
-
-
-    # This is a nice little function for debugging purposes:
-    # In case a multi-threaded ruby script exits due to an uncaught exception
-    # it may be difficult to find out where the exception came from because
-    # one cannot catch exceptions that are thrown in threads other than the main
-    # thread.
-    #
-    # This function searches for all exceptions in memory and outputs them to STDERR
-    # (if it is connected) and to a log file in the pid-file directory.
-    #
-    def exception_log
-      return unless logfile
-      
-      require 'logger'
-      
-      l_file = Logger.new(logfile)
-      
-      # the code below finds the last exception
-      e = nil
-      
-      ObjectSpace.each_object {|o|
-        if ::Exception === o
-          e = o
-        end
-      }
-     
-      l_file.info "*** below you find the most recent exception thrown, this will be likely (but not certainly) the exception that made the application exit abnormally ***"
-      l_file.error e
-      
-      l_file.info "*** below you find all exception objects found in memory, some of them may have been thrown in your application, others may just be in memory because they are standard exceptions ***"
-      
-      # this code logs every exception found in memory
-      ObjectSpace.each_object {|o|
-        if ::Exception === o
-          l_file.error o
-        end
-      }
-      
-      l_file.close
-    end
-    
-    
-    def stop
-      if options[:force] and not running?
-        self.zap
-        return
-      end
-      
-      # Catch errors when trying to kill a process that doesn't
-      # exist. This happens when the process quits and hasn't been
-      # restarted by the monitor yet. By catching the error, we allow the
-      # pid file clean-up to occur.
-      begin
-        Process.kill(SIGNAL, @pid.pid)
-      rescue Errno::ESRCH => e
-        puts "#{e} #{@pid.pid}"
-        puts "deleting pid-file."
-      end
-      
-      # We try to remove the pid-files by ourselves, in case the application
-      # didn't clean it up.
-      begin; @pid.cleanup; rescue ::Exception; end
-      
-    end
-    
-    def zap
-      @pid.cleanup
-    end
-    
-    def zap!
-      begin; @pid.cleanup; rescue ::Exception; end
-    end
-    
-    def show_status
-      running = self.running?
-      
-      puts "#{self.group.app_name}: #{running ? '' : 'not '}running#{(running and @pid.exist?) ? ' [pid ' + @pid.pid.to_s + ']' : ''}#{(@pid.exist? and not running) ? ' (but pid-file exists: ' + @pid.pid.to_s + ')' : ''}"
-    end
-    
-    # This function implements a (probably too simle) method to detect
-    # whether the program with the pid found in the pid-file is still running.
-    # It just searches for the pid in the output of <tt>ps ax</tt>, which
-    # is probably not a good idea in some cases.
-    # Alternatives would be to use a direct access method the unix process control
-    # system.
-    #
-    def running?
-      if @pid.exist?
-        return Pid.running?(@pid.pid)
-      end
-      
-      return false
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/application_group.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/application_group.rb
deleted file mode 100644
index 6689d99..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/application_group.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-
-module Daemons
-  class ApplicationGroup
-  
-    attr_reader :app_name
-    attr_reader :script
-    
-    attr_reader :monitor
-    
-    #attr_reader :controller
-    
-    attr_reader :options
-    
-    attr_reader :applications
-    
-    attr_accessor :controller_argv
-    attr_accessor :app_argv
-    
-    attr_accessor :dir_mode
-    attr_accessor :dir
-    
-    # true if the application is supposed to run in multiple instances
-    attr_reader :multiple
-    
-    
-    def initialize(app_name, options = {})
-      @app_name = app_name
-      @options = options
-      
-      if options[:script]
-        @script = File.expand_path(options[:script])
-      end
-      
-      #@controller = controller
-      @monitor = nil
-      
-      #options = controller.options
-      
-      @multiple = options[:multiple] || false
-      
-      @dir_mode = options[:dir_mode] || :script
-      @dir = options[:dir] || ''
-      
-      @keep_pid_files = options[:keep_pid_files] || false
-      
-      #@applications = find_applications(pidfile_dir())
-      @applications = []
-    end
-    
-    # Setup the application group.
-    # Currently this functions calls <tt>find_applications</tt> which finds
-    # all running instances of the application and populates the application array.
-    #
-    def setup
-      @applications = find_applications(pidfile_dir())
-    end
-    
-    def pidfile_dir
-      PidFile.dir(@dir_mode, @dir, script)
-    end  
-    
-    def find_applications(dir)
-      pid_files = PidFile.find_files(dir, app_name, ! @keep_pid_files)
-      
-      #pp pid_files
-      
-      @monitor = Monitor.find(dir, app_name + '_monitor')
-      
-      pid_files.reject! {|f| f =~ /_monitor.pid$/}
-      
-      return pid_files.map {|f|
-        app = Application.new(self, {}, PidFile.existing(f))
-        setup_app(app)
-        app
-      }
-    end
-    
-    def new_application(add_options = {})
-      if @applications.size > 0 and not @multiple
-        if options[:force]
-          @applications.delete_if {|a|
-            unless a.running?
-              a.zap
-              true
-            end
-          }
-        end
-        
-        raise RuntimeException.new('there is already one or more instance(s) of the program running') unless @applications.empty?
-      end
-      
-      app = Application.new(self, add_options)
-      
-      setup_app(app)
-      
-      @applications << app
-      
-      return app
-    end
-    
-    def setup_app(app)
-      app.controller_argv = @controller_argv
-      app.app_argv = @app_argv
-    end
-    private :setup_app
-    
-    def create_monitor(an_app)
-      return if @monitor
-      
-      if options[:monitor]
-        @monitor = Monitor.new(an_app)
-
-        @monitor.start(@applications)
-      end
-    end
-    
-    def start_all
-      @monitor.stop if @monitor
-      @monitor = nil
-      
-      @applications.each {|a| 
-        fork { 
-          a.start 
-        } 
-      }
-    end
-    
-    def stop_all(force = false)
-      @monitor.stop if @monitor
-      
-      @applications.each {|a| 
-        if force
-          begin; a.stop; rescue ::Exception; end
-        else
-          a.stop
-        end
-      }
-    end
-    
-    def zap_all
-      @monitor.stop if @monitor
-      
-      @applications.each {|a| a.zap}
-    end
-    
-    def show_status
-      @applications.each {|a| a.show_status}
-    end
-    
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/cmdline.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/cmdline.rb
deleted file mode 100644
index fd45698..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/cmdline.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-
-module Daemons
-
-  class Optparse
-  
-    attr_reader :usage
-
-    def initialize(controller)
-      @controller = controller
-      @options = {}
-      
-      @opts = OptionParser.new do |opts|
-        #opts.banner = "Usage: example.rb [options]"
-        opts.banner = ""
-        
-        # Boolean switch.
-#         opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
-#           @options[:verbose] = v
-#         end
-        
-        opts.on("-t", "--ontop", "Stay on top (does not daemonize)") do |t|
-          @options[:ontop] = t
-        end
-        
-        opts.on("-f", "--force", "Force operation") do |t|
-          @options[:force] = t
-        end
-        
-        #opts.separator ""
-        #opts.separator "Specific options:"
-
-        
-        opts.separator ""
-        opts.separator "Common options:"
-
-        # No argument, shows at tail.  This will print an options summary.
-        # Try it and see!
-        opts.on_tail("-h", "--help", "Show this message") do
-          #puts opts
-          #@usage = 
-          controller.print_usage()
-          
-          exit
-        end
-
-        # Another typical switch to print the version.
-        opts.on_tail("--version", "Show version") do
-          puts "daemons version #{Daemons::VERSION}"
-          exit
-        end
-      end  
-      
-      begin
-        @usage = @opts.to_s
-      rescue ::Exception # work around a bug in ruby 1.9
-        @usage = <<END
-            -t, --ontop                      Stay on top (does not daemonize)
-            -f, --force                      Force operation
-
-        Common options:
-            -h, --help                       Show this message
-                --version                    Show version
-END
-      end
-    end
-    
-    
-    #
-    # Return a hash describing the options.
-    #
-    def parse(args)
-      # The options specified on the command line will be collected in *options*.
-      # We set default values here.
-      #options = {}
-      
-      
-      ##pp args
-      @opts.parse(args)
-      
-      return @options
-    end
-
-  end
-  
-  
-  class Controller
-  
-    def print_usage
-      puts "Usage: #{@app_name} <command> <options> -- <application options>"
-      puts
-      puts "* where <command> is one of:"
-      puts "  start         start an instance of the application"
-      puts "  stop          stop all instances of the application"
-      puts "  restart       stop all instances and restart them afterwards"
-      puts "  run           start the application and stay on top"
-      puts "  zap           set the application to a stopped state"
-      puts
-      puts "* and where <options> may contain several of the following:"
-      
-      puts @optparse.usage
-    end
-    
-    def catch_exceptions(&block)
-      begin
-        block.call
-      rescue CmdException, OptionParser::ParseError => e
-        puts "ERROR: #{e.to_s}"
-        puts
-        print_usage()
-      rescue RuntimeException => e
-        puts "ERROR: #{e.to_s}"
-      end
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/controller.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/controller.rb
deleted file mode 100644
index a8668a9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/controller.rb
+++ /dev/null
@@ -1,134 +0,0 @@
-
-module Daemons
-  class Controller
-    
-    attr_reader :app_name
-    
-    attr_reader :group
-    
-    attr_reader :options
-    
-    
-    COMMANDS = [
-      'start',
-      'stop',
-      'restart',
-      'run',
-      'zap',
-      'status'
-    ]
-    
-    def initialize(options = {}, argv = [])
-      @options = options
-      @argv = argv
-      
-      # Allow an app_name to be specified. If not specified use the
-      # basename of the script.
-      @app_name = options[:app_name]
-      
-      if options[:script]
-        @script = File.expand_path(options[:script])
-    
-        @app_name ||= File.split(@script)[1]
-      end
-    
-      @app_name ||= 'unknown_application'
-      
-      @command, @controller_part, @app_part = Controller.split_argv(argv)
-    
-      #@options[:dir_mode] ||= :script
-    
-      @optparse = Optparse.new(self)
-    end
-    
-    
-    # This function is used to do a final update of the options passed to the application
-    # before they are really used.
-    #
-    # Note that this function should only update <tt>@options</tt> and no other variables.
-    #
-    def setup_options
-      #@options[:ontop] ||= true
-    end
-    
-    def run
-      @options.update @optparse.parse(@controller_part).delete_if {|k,v| !v}
-      
-      setup_options()
-      
-      #pp @options
-
-      @group = ApplicationGroup.new(@app_name, @options)
-      @group.controller_argv = @controller_part
-      @group.app_argv = @app_part
-      
-      @group.setup
-      
-      case @command
-        when 'start'
-          @group.new_application.start
-        when 'run'
-          @options[:ontop] ||= true
-          @group.new_application.start
-        when 'stop'
-          @group.stop_all
-        when 'restart'
-          unless @group.applications.empty?
-            @group.stop_all
-            sleep 1
-            @group.start_all
-          end
-        when 'zap'
-          @group.zap_all
-        when 'status'
-          unless @group.applications.empty?
-            @group.show_status
-          else
-            puts "#{@group.app_name}: no instances running"
-          end
-        when nil
-          raise CmdException.new('no command given')
-          #puts "ERROR: No command given"; puts
-          
-          #print_usage()
-          #raise('usage function not implemented')
-        else
-          raise Error.new("command '#{@command}' not implemented")
-      end
-    end
-    
-    
-    # Split an _argv_ array.
-    # +argv+ is assumed to be in the following format:
-    #   ['command', 'controller option 1', 'controller option 2', ..., '--', 'app option 1', ...]
-    #
-    # <tt>command</tt> must be one of the commands listed in <tt>COMMANDS</tt>
-    #
-    # *Returns*: the command as a string, the controller options as an array, the appliation options
-    # as an array
-    #
-    def Controller.split_argv(argv)
-      argv = argv.dup
-      
-      command = nil
-      controller_part = []
-      app_part = []
-       
-      if COMMANDS.include? argv[0]
-        command = argv.shift
-      end
-      
-      if i = argv.index('--')
-        # Handle the case where no controller options are given, just
-        # options after "--" as well (i == 0)
-        controller_part = (i == 0 ? [] : argv[0..i-1])
-        app_part = argv[i+1..-1]
-      else
-        controller_part = argv[0..-1]
-      end
-       
-      return command, controller_part, app_part
-    end
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/daemonize.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/daemonize.rb
deleted file mode 100644
index 197a5a6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/daemonize.rb
+++ /dev/null
@@ -1,263 +0,0 @@
-#--
-###############################################################################
-# daemonize.rb is a slightly modified version of daemonize.rb was             #
-# from the Daemonize Library written by Travis Whitton                        #
-# for details, read the notice below                                          #
-###############################################################################
-#++
-#
-#
-# =Daemonize Library
-# 
-# February. 4, 2005 Travis Whitton <whitton at atlantic.net>
-# 
-# Daemonize allows you to easily modify any existing Ruby program to run
-# as a daemon. See README.rdoc for more details.
-# 
-# == How to install
-# 1. su to root
-# 2. ruby install.rb
-# build the docs if you want to
-# 3. rdoc --main README.rdoc daemonize.rb README.rdoc
-# 
-# == Copying
-# The Daemonize extension module is copywrited free software by Travis Whitton
-# <whitton at atlantic.net>. You can redistribute it under the terms specified in
-# the COPYING file of the Ruby distribution.
-# 
-# == WARRANTY
-# THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE.
-#
-#
-# ----
-#
-# == Purpose
-# 
-# Daemonize is a module derived from Perl's Proc::Daemon module. This module
-# allows you to easily modify any existing Ruby program to run as a daemon.
-# A daemon is a process that runs in the background with no controlling terminal.
-# Generally servers (like FTP and HTTP servers) run as daemon processes.
-# Note, do not make the mistake that a daemon == server. Converting a program
-# to a daemon by hand is a relatively simple process; however, this module will
-# save you the effort of repeatedly looking up the procedure, and it will also
-# insure that your programs are daemonized in the safest and most corrects
-# fashion possible.
-# 
-# == Procedure
-# 
-# The Daemonize module does the following:
-# 
-# Forks a child and exits the parent process.
-# 
-# Becomes a session leader (which detaches the program from
-# the controlling terminal).
-# 
-# Forks another child process and exits first child. This prevents
-# the potential of acquiring a controlling terminal.
-# 
-# Changes the current working directory to "/".
-# 
-# Clears the file creation mask.
-# 
-# Closes file descriptors.
-# 
-# == Example usage
-# 
-# Using the Daemonize module is extremely simple:
-# 
-#     require 'daemonize'
-# 
-#     class TestDaemon
-#       include Daemonize
-# 
-#       def initialize
-#         daemonize()
-#         loop do
-#           # do some work here
-#         end
-#       end
-#     end
-# 
-# == Credits
-# 
-# Daemonize was written by Travis Whitton and is based on Perl's
-# Proc::Daemonize, which was written by Earl Hood. The above documentation
-# is also partially borrowed from the Proc::Daemonize POD documentation.
-
-
-
-module Daemonize
-  VERSION = "0.1.1m"
-
-  # Try to fork if at all possible retrying every 5 sec if the
-  # maximum process limit for the system has been reached
-  def safefork
-    tryagain = true
-
-    while tryagain
-      tryagain = false
-      begin
-        if pid = fork
-          return pid
-        end
-      rescue Errno::EWOULDBLOCK
-        sleep 5
-        tryagain = true
-      end
-    end
-  end
-  module_function :safefork
-  
-  
-  def simulate(logfile_name = nil)
-    # NOTE: STDOUT and STDERR will not be redirected to the logfile, because in :ontop mode, we normally want to see the output
-    
-    Dir.chdir "/"   # Release old working directory
-    File.umask 0000 # Insure sensible umask
-
-    # Make sure all file descriptors are closed
-    ObjectSpace.each_object(IO) do |io|
-      unless [STDIN, STDOUT, STDERR].include?(io)
-        begin
-          unless io.closed?
-            io.close
-          end
-        rescue ::Exception
-        end
-      end
-    end
-
-    # Free file descriptors and
-    # point them somewhere sensible
-    # STDOUT/STDERR should go to a logfile
-    
-    begin; STDIN.reopen "/dev/null"; rescue ::Exception; end       
-  end
-  module_function :simulate
-  
-  
-  def call_as_daemon(block, logfile_name = nil, app_name = nil)
-    rd, wr = IO.pipe
-    
-    if tmppid = safefork
-      # parent
-      wr.close
-      pid = rd.read.to_i
-      rd.close
-      
-      Process.waitpid(tmppid)
-      
-      return pid
-    else
-      # child
-      
-      rd.close
-      
-      # Detach from the controlling terminal
-      unless sess_id = Process.setsid
-        raise Daemons.RuntimeException.new('cannot detach from controlling terminal')
-      end
-  
-      # Prevent the possibility of acquiring a controlling terminal
-      #if oldmode.zero?
-        trap 'SIGHUP', 'IGNORE'
-        exit if pid = safefork
-      #end
-  
-      wr.write Process.pid
-      wr.close
-      
-      $0 = app_name if app_name
-      
-      Dir.chdir "/"   # Release old working directory
-      File.umask 0000 # Insure sensible umask
-  
-      # Make sure all file descriptors are closed
-      ObjectSpace.each_object(IO) do |io|
-        unless [STDIN, STDOUT, STDERR].include?(io)
-          begin
-            unless io.closed?
-              io.close
-            end
-          rescue ::Exception
-          end
-        end
-      end
-  
-      redirect_io(logfile_name)  
-    
-      block.call
-      
-      exit
-    end
-  end
-  module_function :call_as_daemon
-  
-  
-  # This method causes the current running process to become a daemon
-  def daemonize(logfile_name = nil, app_name = nil)
-    srand # Split rand streams between spawning and daemonized process
-    safefork and exit # Fork and exit from the parent
-
-    # Detach from the controlling terminal
-    unless sess_id = Process.setsid
-      raise Daemons.RuntimeException.new('cannot detach from controlling terminal')
-    end
-
-    # Prevent the possibility of acquiring a controlling terminal
-    #if oldmode.zero?
-      trap 'SIGHUP', 'IGNORE'
-      exit if pid = safefork
-    #end
-
-    $0 = app_name if app_name
-    
-    Dir.chdir "/"   # Release old working directory
-    File.umask 0000 # Insure sensible umask
-
-    # Make sure all file descriptors are closed
-    ObjectSpace.each_object(IO) do |io|
-      unless [STDIN, STDOUT, STDERR].include?(io)
-        begin
-          unless io.closed?
-            io.close
-          end
-        rescue ::Exception
-        end
-      end
-    end
-
-    redirect_io(logfile_name)
-    
-    #return oldmode ? sess_id : 0   # Return value is mostly irrelevant
-    return sess_id
-  end
-  module_function :daemonize
-  
-  
-  # Free file descriptors and
-  # point them somewhere sensible
-  # STDOUT/STDERR should go to a logfile
-  def redirect_io(logfile_name)
-    begin; STDIN.reopen "/dev/null"; rescue ::Exception; end       
-     
-    if logfile_name
-      begin
-        STDOUT.reopen logfile_name, "a" 
-        STDOUT.sync = true
-      rescue ::Exception
-        begin; STDOUT.reopen "/dev/null"; rescue ::Exception; end
-      end
-    else
-      begin; STDOUT.reopen "/dev/null"; rescue ::Exception; end
-    end
-    
-    begin; STDERR.reopen STDOUT; rescue ::Exception; end
-    STDERR.sync = true
-  end
-  module_function :redirect_io
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/exceptions.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/exceptions.rb
deleted file mode 100644
index 956cb91..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/exceptions.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-
-module Daemons
-
-  class Exception < ::RuntimeError
-  end
-  
-  class RuntimeException < Exception
-  end
-  
-  class CmdException < Exception
-  end
-  
-  class Error < Exception
-  end
-  
-  class SystemError < Error
-  
-    attr_reader :system_error
-    
-    def initialize(msg, system_error)
-      super(msg)
-      
-      @system_error = system_error
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/monitor.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/monitor.rb
deleted file mode 100644
index 3082862..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/monitor.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-
-module Daemons
-
-  require 'daemons/daemonize'
-   
-  class Monitor
-    
-    def self.find(dir, app_name)
-      pid = PidFile.find_files(dir, app_name, false)[0]
-      
-      if pid
-        pid = PidFile.existing(pid)
-        
-        unless PidFile.running?(pid.pid)
-          begin; pid.cleanup; rescue ::Exception; end
-          return
-        end
-        
-        monitor = self.allocate
-      
-        monitor.instance_variable_set(:@pid, pid)
-        
-        return monitor
-      end
-      
-      return nil
-    end
-    
-    
-    def initialize(an_app)
-      @app = an_app
-      @app_name = an_app.group.app_name + '_monitor'
-      
-      if an_app.pidfile_dir
-        @pid = PidFile.new(an_app.pidfile_dir, @app_name, false)
-      else
-        @pid = PidMem.new
-      end
-    end
-    
-    def watch(applications)
-      sleep(30)
-      
-      loop do
-        applications.each {|a|
-          sleep(10)
-          
-          unless a.running?
-            a.zap!
-            
-            Process.detach(fork { a.start })
-            
-            sleep(10)
-          end
-        }
-        
-        sleep(30)
-      end
-    end
-    private :watch
-    
-    
-    def start_with_pidfile(applications)
-      fork do
-        Daemonize.daemonize(nil, @app_name)
-        
-        begin  
-          @pid.pid = Process.pid
-          
-  #         at_exit {
-  # begin; @pid.cleanup; rescue ::Exception; end
-  #         }
-          
-          # This part is needed to remove the pid-file if the application is killed by 
-          # daemons or manually by the user.
-          # Note that the applications is not supposed to overwrite the signal handler for
-          # 'TERM'.
-          #
-  #         trap('TERM') {
-  # begin; @pid.cleanup; rescue ::Exception; end
-  #           exit
-  #         }
-          
-          watch(applications)
-        rescue ::Exception => e
-          begin
-            File.open(@app.logfile, 'a') {|f|
-              f.puts Time.now
-              f.puts e
-              f.puts e.backtrace.inspect
-            }
-          ensure 
-            begin; @pid.cleanup; rescue ::Exception; end
-            exit!
-          end
-        end
-      end
-    end
-    private :start_with_pidfile
-    
-    def start_without_pidfile(applications)
-      Thread.new { watch(applications) }
-    end
-    private :start_without_pidfile
-    
-    
-    def start(applications)
-      return if applications.empty?
-      
-      if @pid.kind_of?(PidFile)
-        start_with_pidfile(applications)
-      else
-        start_without_pidfile(applications)
-      end
-    end
-    
-    
-    def stop
-      begin; Process.kill(Application::SIGNAL, @pid.pid); rescue ::Exception; end
-      
-      # We try to remove the pid-files by ourselves, in case the application
-      # didn't clean it up.
-      begin; @pid.cleanup; rescue ::Exception; end
-    end
-    
-  end 
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pid.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pid.rb
deleted file mode 100644
index c7d9bce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pid.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-require 'open3'
-
-
-module Daemons
-
-  class Pid
-  
-    def Pid.running?(pid)
-      # Check if process is in existence
-      # The simplest way to do this is to send signal '0'
-      # (which is a single system call) that doesn't actually
-      # send a signal
-      begin
-        Process.kill(0, pid)
-        return true
-      rescue Errno::ESRCH
-        return false
-      rescue ::Exception   # for example on EPERM (process exists but does not belong to us)
-        return true
-      #rescue Errno::EPERM
-      #  return false
-      end
-    end
-    
-  #  def Pid.running?(pid, additional = nil)
-  #    match_pid = Regexp.new("^\\s*#{pid}\\s")
-  #    got_match = false
-  #
-  #    #ps_all = IO.popen('ps ax') # the correct syntax is without a dash (-) !
-  #    ps_in, ps_out, ps_err = Open3.popen3('ps ax') # the correct syntax is without a dash (-) !
-  #    
-  #    return true unless ps_out.gets
-  #    
-  #    begin
-  #      ps_out.each { |psline|
-  #        next unless psline =~ match_pid
-  #        got_match = true
-  #        got_match = false if additional and psline !~ /#{additional}/
-  #        break
-  #      }
-  #    ensure
-  #      begin; begin; ps_in.close; rescue ::Exception; end; begin; ps_out.close; rescue ::Exception; end; ps_err.close; rescue ::Exception; end
-  #    end
-  #    
-  #    # an alternative would be to use the code below, but I don't know whether this is portable
-  #    # `ps axo pid=`.split.include? pid.to_s
-  #     
-  #    return got_match
-  #  end
-    
-    
-    # Returns the directory that should be used to write the pid file to
-    # depending on the given mode.
-    # 
-    # Some modes may require an additionaly hint, others may determine 
-    # the directory automatically.
-    #
-    # If no valid directory is found, returns nil.
-    #
-    def Pid.dir(dir_mode, dir, script)
-      # nil script parameter is allowed as long as dir_mode is not :script
-      return nil if dir_mode == :script && script.nil?                         
-      
-      case dir_mode
-        when :normal
-          return File.expand_path(dir)
-        when :script
-          return File.expand_path(File.join(File.dirname(script),dir))
-        when :system  
-          return '/var/run'
-        else
-          raise Error.new("pid file mode '#{dir_mode}' not implemented")
-      end
-    end
-    
-    # Initialization method
-    def initialize
-    end
-    
-    
-    # Get method
-    def pid
-    end
-    
-    # Set method
-    def pid=(p)
-    end
-    
-    # Cleanup method
-    def cleanup
-    end
-    
-    # Exists? method
-    def exist?
-      true
-    end
-    
-  end  
-  
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pidfile.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pidfile.rb
deleted file mode 100644
index dcc0f00..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pidfile.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-require 'daemons/pid'
-
-
-module Daemons
-
-  # === What is a Pid-File?
-  # A <i>Pid-File</i> is a file containing the <i>process identification number</i>
-  # (pid) that is stored in a well-defined location of the filesystem thus allowing other
-  # programs to find out the pid of a running script.
-  #
-  # Daemons needs the pid of the scripts that are currently running in the background
-  # to send them so called _signals_. Daemons uses the +TERM+ signal to tell the script
-  # to exit when you issue a +stop+ command.
-  #
-  # === How does a Pid-File look like?
-  #
-  # Pid-Files generated by Daemons have to following format:
-  #   <scriptname>.rb<number>.pid
-  # (Note that <tt><number></tt> is omitted if only one instance of the script can
-  # run at any time)
-  #
-  # Each file just contains one line with the pid as string (for example <tt>6432</tt>).
-  #  
-  # === Where are the Pid-Files stored?
-  # 
-  # Daemons is configurable to store the Pid-Files relative to three different locations:
-  # 1.  in a directory relative to the directory where the script (the one that is supposed to run
-  #     as a daemon) resides (<tt>:script</tt> option for <tt>:dir_mode</tt>)
-  # 2.  in a directory given by <tt>:dir</tt> (<tt>:normal</tt> option for <tt>:dir_mode</tt>)
-  # 3.  in the preconfigured directory <tt>/var/run</tt> (<tt>:system</tt> option for <tt>:dir_mode</tt>)
-  #
-  class PidFile < Pid
-
-    attr_reader :dir, :progname, :multiple, :number
-
-    def PidFile.find_files(dir, progname, delete = false)
-      files = Dir[File.join(dir, "#{progname}*.pid")]
-      
-      files.delete_if {|f| not (File.file?(f) and File.readable?(f))}
-      if delete 
-        files.delete_if do |f|
-          pid = File.open(f) {|h| h.read}.to_i
-          rsl =  ! Pid.running?(pid)
-          if rsl
-            puts "pid-file for killed process #{pid} found (#{f}), deleting."
-            begin; File.unlink(f); rescue ::Exception; end
-          end
-          rsl
-        end
-      end
-    
-      return files
-    end
-    
-    def PidFile.existing(path)
-      new_instance = PidFile.allocate
-      
-      new_instance.instance_variable_set(:@path, path)
-      
-      def new_instance.filename
-        return @path
-      end
-      
-      return new_instance
-    end
-    
-    def initialize(dir, progname, multiple = false)
-      @dir = File.expand_path(dir)
-      @progname = progname
-      @multiple = multiple
-      @number = nil
-      @number = 0 if multiple
-      
-      if multiple
-        while File.exist?(filename) and @number < 1024
-          @number += 1
-        end
-        
-        if @number == 1024
-          raise RuntimeException('cannot run more than 1024 instances of the application')
-        end
-      end
-    end
-    
-    def filename
-      File.join(@dir, "#{@progname}#{ @number or '' }.pid")
-    end
-    
-    def exist?
-      File.exist? filename
-    end
-    
-    def pid=(p)
-      File.open(filename, 'w') {|f|
-        f.puts p   #Process.pid
-      }
-    end
-
-    def cleanup
-      File.delete(filename)
-    end
-
-    def pid
-      File.open(filename) {|f|
-        return f.gets.to_i
-      }
-    end
-
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pidmem.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pidmem.rb
deleted file mode 100644
index e0c9d40..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/lib/daemons/pidmem.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'daemons/pid'
-
-
-module Daemons
-
-  class PidMem < Pid
-    attr_accessor :pid
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/setup.rb b/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/setup.rb
deleted file mode 100644
index 0807023..0000000
--- a/spec10/public/webrat/test_app/gems/gems/daemons-1.0.10/setup.rb
+++ /dev/null
@@ -1,1360 +0,0 @@
-#
-# setup.rb
-#
-# Copyright (c) 2000-2004 Minero Aoki
-#
-# This program is free software.
-# You can distribute/modify this program under the terms of
-# the GNU LGPL, Lesser General Public License version 2.1.
-#
-
-unless Enumerable.method_defined?(:map)   # Ruby 1.4.6
-  module Enumerable
-    alias map collect
-  end
-end
-
-unless File.respond_to?(:read)   # Ruby 1.6
-  def File.read(fname)
-    open(fname) {|f|
-      return f.read
-    }
-  end
-end
-
-def File.binread(fname)
-  open(fname, 'rb') {|f|
-    return f.read
-  }
-end
-
-# for corrupted windows stat(2)
-def File.dir?(path)
-  File.directory?((path[-1,1] == '/') ? path : path + '/')
-end
-
-
-class SetupError < StandardError; end
-
-def setup_rb_error(msg)
-  raise SetupError, msg
-end
-
-#
-# Config
-#
-
-if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg }
-  ARGV.delete(arg)
-  require arg.split(/=/, 2)[1]
-  $".push 'rbconfig.rb'
-else
-  require 'rbconfig'
-end
-
-def multipackage_install?
-  FileTest.directory?(File.dirname($0) + '/packages')
-end
-
-
-class ConfigItem
-  def initialize(name, template, default, desc)
-    @name = name.freeze
-    @template = template
-    @value = default
-    @default = default.dup.freeze
-    @description = desc
-  end
-
-  attr_reader :name
-  attr_reader :description
-
-  attr_accessor :default
-  alias help_default default
-
-  def help_opt
-    "--#{@name}=#{@template}"
-  end
-
-  def value
-    @value
-  end
-
-  def eval(table)
-    @value.gsub(%r<\$([^/]+)>) { table[$1] }
-  end
-
-  def set(val)
-    @value = check(val)
-  end
-
-  private
-
-  def check(val)
-    setup_rb_error "config: --#{name} requires argument" unless val
-    val
-  end
-end
-
-class BoolItem < ConfigItem
-  def config_type
-    'bool'
-  end
-
-  def help_opt
-    "--#{@name}"
-  end
-
-  private
-
-  def check(val)
-    return 'yes' unless val
-    unless /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i =~ val
-      setup_rb_error "config: --#{@name} accepts only yes/no for argument"
-    end
-    (/\Ay(es)?|\At(rue)/i =~ value) ? 'yes' : 'no'
-  end
-end
-
-class PathItem < ConfigItem
-  def config_type
-    'path'
-  end
-
-  private
-
-  def check(path)
-    setup_rb_error "config: --#{@name} requires argument"  unless path
-    path[0,1] == '$' ? path : File.expand_path(path)
-  end
-end
-
-class ProgramItem < ConfigItem
-  def config_type
-    'program'
-  end
-end
-
-class SelectItem < ConfigItem
-  def initialize(name, template, default, desc)
-    super
-    @ok = template.split('/')
-  end
-
-  def config_type
-    'select'
-  end
-
-  private
-
-  def check(val)
-    unless @ok.include?(val.strip)
-      setup_rb_error "config: use --#{@name}=#{@template} (#{val})"
-    end
-    val.strip
-  end
-end
-
-class PackageSelectionItem < ConfigItem
-  def initialize(name, template, default, help_default, desc)
-    super name, template, default, desc
-    @help_default = help_default
-  end
-
-  attr_reader :help_default
-
-  def config_type
-    'package'
-  end
-
-  private
-
-  def check(val)
-    unless File.dir?("packages/#{val}")
-      setup_rb_error "config: no such package: #{val}"
-    end
-    val
-  end
-end
-
-class ConfigTable_class
-
-  def initialize(items)
-    @items = items
-    @table = {}
-    items.each do |i|
-      @table[i.name] = i
-    end
-    ALIASES.each do |ali, name|
-      @table[ali] = @table[name]
-    end
-  end
-
-  include Enumerable
-
-  def each(&block)
-    @items.each(&block)
-  end
-
-  def key?(name)
-    @table.key?(name)
-  end
-
-  def lookup(name)
-    @table[name] or raise ArgumentError, "no such config item: #{name}"
-  end
-
-  def add(item)
-    @items.push item
-    @table[item.name] = item
-  end
-
-  def remove(name)
-    item = lookup(name)
-    @items.delete_if {|i| i.name == name }
-    @table.delete_if {|name, i| i.name == name }
-    item
-  end
-
-  def new
-    dup()
-  end
-
-  def savefile
-    '.config'
-  end
-
-  def load
-    begin
-      t = dup()
-      File.foreach(savefile()) do |line|
-        k, v = *line.split(/=/, 2)
-        t[k] = v.strip
-      end
-      t
-    rescue Errno::ENOENT
-      setup_rb_error $!.message + "#{File.basename($0)} config first"
-    end
-  end
-
-  def save
-    @items.each {|i| i.value }
-    File.open(savefile(), 'w') {|f|
-      @items.each do |i|
-        f.printf "%s=%s\n", i.name, i.value if i.value
-      end
-    }
-  end
-
-  def [](key)
-    lookup(key).eval(self)
-  end
-
-  def []=(key, val)
-    lookup(key).set val
-  end
-
-end
-
-c = ::Config::CONFIG
-
-rubypath = c['bindir'] + '/' + c['ruby_install_name']
-
-major = c['MAJOR'].to_i
-minor = c['MINOR'].to_i
-teeny = c['TEENY'].to_i
-version = "#{major}.#{minor}"
-
-# ruby ver. >= 1.4.4?
-newpath_p = ((major >= 2) or
-             ((major == 1) and
-              ((minor >= 5) or
-               ((minor == 4) and (teeny >= 4)))))
-
-if c['rubylibdir']
-  # V < 1.6.3
-  _stdruby         = c['rubylibdir']
-  _siteruby        = c['sitedir']
-  _siterubyver     = c['sitelibdir']
-  _siterubyverarch = c['sitearchdir']
-elsif newpath_p
-  # 1.4.4 <= V <= 1.6.3
-  _stdruby         = "$prefix/lib/ruby/#{version}"
-  _siteruby        = c['sitedir']
-  _siterubyver     = "$siteruby/#{version}"
-  _siterubyverarch = "$siterubyver/#{c['arch']}"
-else
-  # V < 1.4.4
-  _stdruby         = "$prefix/lib/ruby/#{version}"
-  _siteruby        = "$prefix/lib/ruby/#{version}/site_ruby"
-  _siterubyver     = _siteruby
-  _siterubyverarch = "$siterubyver/#{c['arch']}"
-end
-libdir = '-* dummy libdir *-'
-stdruby = '-* dummy rubylibdir *-'
-siteruby = '-* dummy site_ruby *-'
-siterubyver = '-* dummy site_ruby version *-'
-parameterize = lambda {|path|
-  path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')\
-      .sub(/\A#{Regexp.quote(libdir)}/,      '$libdir')\
-      .sub(/\A#{Regexp.quote(stdruby)}/,     '$stdruby')\
-      .sub(/\A#{Regexp.quote(siteruby)}/,    '$siteruby')\
-      .sub(/\A#{Regexp.quote(siterubyver)}/, '$siterubyver')
-}
-libdir          = parameterize.call(c['libdir'])
-stdruby         = parameterize.call(_stdruby)
-siteruby        = parameterize.call(_siteruby)
-siterubyver     = parameterize.call(_siterubyver)
-siterubyverarch = parameterize.call(_siterubyverarch)
-
-if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
-  makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
-else
-  makeprog = 'make'
-end
-
-common_conf = [
-  PathItem.new('prefix', 'path', c['prefix'],
-               'path prefix of target environment'),
-  PathItem.new('bindir', 'path', parameterize.call(c['bindir']),
-               'the directory for commands'),
-  PathItem.new('libdir', 'path', libdir,
-               'the directory for libraries'),
-  PathItem.new('datadir', 'path', parameterize.call(c['datadir']),
-               'the directory for shared data'),
-  PathItem.new('mandir', 'path', parameterize.call(c['mandir']),
-               'the directory for man pages'),
-  PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']),
-               'the directory for man pages'),
-  PathItem.new('stdruby', 'path', stdruby,
-               'the directory for standard ruby libraries'),
-  PathItem.new('siteruby', 'path', siteruby,
-      'the directory for version-independent aux ruby libraries'),
-  PathItem.new('siterubyver', 'path', siterubyver,
-               'the directory for aux ruby libraries'),
-  PathItem.new('siterubyverarch', 'path', siterubyverarch,
-               'the directory for aux ruby binaries'),
-  PathItem.new('rbdir', 'path', '$siterubyver',
-               'the directory for ruby scripts'),
-  PathItem.new('sodir', 'path', '$siterubyverarch',
-               'the directory for ruby extentions'),
-  PathItem.new('rubypath', 'path', rubypath,
-               'the path to set to #! line'),
-  ProgramItem.new('rubyprog', 'name', rubypath,
-                  'the ruby program using for installation'),
-  ProgramItem.new('makeprog', 'name', makeprog,
-                  'the make program to compile ruby extentions'),
-  SelectItem.new('shebang', 'all/ruby/never', 'ruby',
-                 'shebang line (#!) editing mode'),
-  BoolItem.new('without-ext', 'yes/no', 'no',
-               'does not compile/install ruby extentions')
-]
-class ConfigTable_class   # open again
-  ALIASES = {
-    'std-ruby'         => 'stdruby',
-    'site-ruby-common' => 'siteruby',     # For backward compatibility
-    'site-ruby'        => 'siterubyver',  # For backward compatibility
-    'bin-dir'          => 'bindir',
-    'bin-dir'          => 'bindir',
-    'rb-dir'           => 'rbdir',
-    'so-dir'           => 'sodir',
-    'data-dir'         => 'datadir',
-    'ruby-path'        => 'rubypath',
-    'ruby-prog'        => 'rubyprog',
-    'ruby'             => 'rubyprog',
-    'make-prog'        => 'makeprog',
-    'make'             => 'makeprog'
-  }
-end
-multipackage_conf = [
-  PackageSelectionItem.new('with', 'name,name...', '', 'ALL',
-                           'package names that you want to install'),
-  PackageSelectionItem.new('without', 'name,name...', '', 'NONE',
-                           'package names that you do not want to install')
-]
-if multipackage_install?
-  ConfigTable = ConfigTable_class.new(common_conf + multipackage_conf)
-else
-  ConfigTable = ConfigTable_class.new(common_conf)
-end
-
-
-module MetaConfigAPI
-
-  def eval_file_ifexist(fname)
-    instance_eval File.read(fname), fname, 1 if File.file?(fname)
-  end
-
-  def config_names
-    ConfigTable.map {|i| i.name }
-  end
-
-  def config?(name)
-    ConfigTable.key?(name)
-  end
-
-  def bool_config?(name)
-    ConfigTable.lookup(name).config_type == 'bool'
-  end
-
-  def path_config?(name)
-    ConfigTable.lookup(name).config_type == 'path'
-  end
-
-  def value_config?(name)
-    case ConfigTable.lookup(name).config_type
-    when 'bool', 'path'
-      true
-    else
-      false
-    end
-  end
-
-  def add_config(item)
-    ConfigTable.add item
-  end
-
-  def add_bool_config(name, default, desc)
-    ConfigTable.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc)
-  end
-
-  def add_path_config(name, default, desc)
-    ConfigTable.add PathItem.new(name, 'path', default, desc)
-  end
-
-  def set_config_default(name, default)
-    ConfigTable.lookup(name).default = default
-  end
-
-  def remove_config(name)
-    ConfigTable.remove(name)
-  end
-
-end
-
-
-#
-# File Operations
-#
-
-module FileOperations
-
-  def mkdir_p(dirname, prefix = nil)
-    dirname = prefix + File.expand_path(dirname) if prefix
-    $stderr.puts "mkdir -p #{dirname}" if verbose?
-    return if no_harm?
-
-    # does not check '/'... it's too abnormal case
-    dirs = File.expand_path(dirname).split(%r<(?=/)>)
-    if /\A[a-z]:\z/i =~ dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless File.dir?(path)
-    end
-  end
-
-  def rm_f(fname)
-    $stderr.puts "rm -f #{fname}" if verbose?
-    return if no_harm?
-
-    if File.exist?(fname) or File.symlink?(fname)
-      File.chmod 0777, fname
-      File.unlink fname
-    end
-  end
-
-  def rm_rf(dn)
-    $stderr.puts "rm -rf #{dn}" if verbose?
-    return if no_harm?
-
-    Dir.chdir dn
-    Dir.foreach('.') do |fn|
-      next if fn == '.'
-      next if fn == '..'
-      if File.dir?(fn)
-        verbose_off {
-          rm_rf fn
-        }
-      else
-        verbose_off {
-          rm_f fn
-        }
-      end
-    end
-    Dir.chdir '..'
-    Dir.rmdir dn
-  end
-
-  def move_file(src, dest)
-    File.unlink dest if File.exist?(dest)
-    begin
-      File.rename src, dest
-    rescue
-      File.open(dest, 'wb') {|f| f.write File.binread(src) }
-      File.chmod File.stat(src).mode, dest
-      File.unlink src
-    end
-  end
-
-  def install(from, dest, mode, prefix = nil)
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix ? prefix + File.expand_path(dest) : dest
-    realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
-    str = File.binread(from)
-    if diff?(str, realdest)
-      verbose_off {
-        rm_f realdest if File.exist?(realdest)
-      }
-      File.open(realdest, 'wb') {|f|
-        f.write str
-      }
-      File.chmod mode, realdest
-
-      File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
-        if prefix
-          f.puts realdest.sub(prefix, '')
-        else
-          f.puts realdest
-        end
-      }
-    end
-  end
-
-  def diff?(new_content, path)
-    return true unless File.exist?(path)
-    new_content != File.binread(path)
-  end
-
-  def command(str)
-    $stderr.puts str if verbose?
-    system str or raise RuntimeError, "'system #{str}' failed"
-  end
-
-  def ruby(str)
-    command config('rubyprog') + ' ' + str
-  end
-  
-  def make(task = '')
-    command config('makeprog') + ' ' + task
-  end
-
-  def extdir?(dir)
-    File.exist?(dir + '/MANIFEST')
-  end
-
-  def all_files_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|ent| File.file?("#{dirname}/#{ent}") }
-    }
-  end
-
-  REJECT_DIRS = %w(
-    CVS SCCS RCS CVS.adm .svn
-  )
-
-  def all_dirs_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|n| File.dir?("#{dirname}/#{n}") } - %w(. ..) - REJECT_DIRS
-    }
-  end
-
-end
-
-
-#
-# Main Installer
-#
-
-module HookUtils
-
-  def run_hook(name)
-    try_run_hook "#{curr_srcdir()}/#{name}" or
-    try_run_hook "#{curr_srcdir()}/#{name}.rb"
-  end
-
-  def try_run_hook(fname)
-    return false unless File.file?(fname)
-    begin
-      instance_eval File.read(fname), fname, 1
-    rescue
-      setup_rb_error "hook #{fname} failed:\n" + $!.message
-    end
-    true
-  end
-
-end
-
-
-module HookScriptAPI
-
-  def get_config(key)
-    @config[key]
-  end
-
-  alias config get_config
-
-  def set_config(key, val)
-    @config[key] = val
-  end
-
-  #
-  # srcdir/objdir (works only in the package directory)
-  #
-
-  #abstract srcdir_root
-  #abstract objdir_root
-  #abstract relpath
-
-  def curr_srcdir
-    "#{srcdir_root()}/#{relpath()}"
-  end
-
-  def curr_objdir
-    "#{objdir_root()}/#{relpath()}"
-  end
-
-  def srcfile(path)
-    "#{curr_srcdir()}/#{path}"
-  end
-
-  def srcexist?(path)
-    File.exist?(srcfile(path))
-  end
-
-  def srcdirectory?(path)
-    File.dir?(srcfile(path))
-  end
-  
-  def srcfile?(path)
-    File.file? srcfile(path)
-  end
-
-  def srcentries(path = '.')
-    Dir.open("#{curr_srcdir()}/#{path}") {|d|
-      return d.to_a - %w(. ..)
-    }
-  end
-
-  def srcfiles(path = '.')
-    srcentries(path).select {|fname|
-      File.file?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-  def srcdirectories(path = '.')
-    srcentries(path).select {|fname|
-      File.dir?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-end
-
-
-class ToplevelInstaller
-
-  Version   = '3.3.1'
-  Copyright = 'Copyright (c) 2000-2004 Minero Aoki'
-
-  TASKS = [
-    [ 'all',      'do config, setup, then install' ],
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles ruby extentions and others' ],
-    [ 'install',  'installs files' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-  def ToplevelInstaller.invoke
-    instance().invoke
-  end
-
-  @singleton = nil
-
-  def ToplevelInstaller.instance
-    @singleton ||= new(File.dirname($0))
-    @singleton
-  end
-
-  include MetaConfigAPI
-
-  def initialize(ardir_root)
-    @config = nil
-    @options = { 'verbose' => true }
-    @ardir = File.expand_path(ardir_root)
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__()}>"
-  end
-
-  def invoke
-    run_metaconfigs
-    case task = parsearg_global()
-    when nil, 'all'
-      @config = load_config('config')
-      parsearg_config
-      init_installers
-      exec_config
-      exec_setup
-      exec_install
-    else
-      @config = load_config(task)
-      __send__ "parsearg_#{task}"
-      init_installers
-      __send__ "exec_#{task}"
-    end
-  end
-  
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-  end
-
-  def load_config(task)
-    case task
-    when 'config'
-      ConfigTable.new
-    when 'clean', 'distclean'
-      if File.exist?(ConfigTable.savefile)
-      then ConfigTable.load
-      else ConfigTable.new
-      end
-    else
-      ConfigTable.load
-    end
-  end
-
-  def init_installers
-    @installer = Installer.new(@config, @options, @ardir, File.expand_path('.'))
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @ardir
-  end
-
-  def objdir_root
-    '.'
-  end
-
-  def relpath
-    '.'
-  end
-
-  #
-  # Option Parsing
-  #
-
-  def parsearg_global
-    valid_task = /\A(?:#{TASKS.map {|task,desc| task }.join '|'})\z/
-
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        setup_rb_error "invalid task: #{arg}" unless valid_task =~ arg
-        return arg
-
-      when '-q', '--quiet'
-        @options['verbose'] = false
-
-      when       '--verbose'
-        @options['verbose'] = true
-
-      when '-h', '--help'
-        print_usage $stdout
-        exit 0
-
-      when '-v', '--version'
-        puts "#{File.basename($0)} version #{Version}"
-        exit 0
-      
-      when '--copyright'
-        puts Copyright
-        exit 0
-
-      else
-        setup_rb_error "unknown global option '#{arg}'"
-      end
-    end
-
-    nil
-  end
-
-
-  def parsearg_no_options
-    unless ARGV.empty?
-      setup_rb_error "#{task}:  unknown options: #{ARGV.join ' '}"
-    end
-  end
-
-  alias parsearg_show       parsearg_no_options
-  alias parsearg_setup      parsearg_no_options
-  alias parsearg_clean      parsearg_no_options
-  alias parsearg_distclean  parsearg_no_options
-
-  def parsearg_config
-    re = /\A--(#{ConfigTable.map {|i| i.name }.join('|')})(?:=(.*))?\z/
-    @options['config-opt'] = []
-
-    while i = ARGV.shift
-      if /\A--?\z/ =~ i
-        @options['config-opt'] = ARGV.dup
-        break
-      end
-      m = re.match(i)  or setup_rb_error "config: unknown option #{i}"
-      name, value = *m.to_a[1,2]
-      @config[name] = value
-    end
-  end
-
-  def parsearg_install
-    @options['no-harm'] = false
-    @options['install-prefix'] = ''
-    while a = ARGV.shift
-      case a
-      when /\A--no-harm\z/
-        @options['no-harm'] = true
-      when /\A--prefix=(.*)\z/
-        path = $1
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @options['install-prefix'] = path
-      else
-        setup_rb_error "install: unknown option #{a}"
-      end
-    end
-  end
-
-  def print_usage(out)
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-24s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '-h,--help',    'print this message'
-    out.printf fmt, '-v,--version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf fmt, name, desc
-    end
-
-    fmt = "  %-24s %s [%s]\n"
-    out.puts
-    out.puts 'Options for CONFIG or ALL:'
-    ConfigTable.each do |item|
-      out.printf fmt, item.help_opt, item.description, item.help_default
-    end
-    out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's"
-    out.puts
-    out.puts 'Options for INSTALL:'
-    out.printf fmt, '--no-harm', 'only display what to do if given', 'off'
-    out.printf fmt, '--prefix=path',  'install path prefix', '$prefix'
-    out.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    @installer.exec_config
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    @installer.exec_setup
-  end
-
-  def exec_install
-    @installer.exec_install
-  end
-
-  def exec_show
-    ConfigTable.each do |i|
-      printf "%-20s %s\n", i.name, i.value
-    end
-  end
-
-  def exec_clean
-    @installer.exec_clean
-  end
-
-  def exec_distclean
-    @installer.exec_distclean
-  end
-
-end
-
-
-class ToplevelInstallerMulti < ToplevelInstaller
-
-  include HookUtils
-  include HookScriptAPI
-  include FileOperations
-
-  def initialize(ardir)
-    super
-    @packages = all_dirs_in("#{@ardir}/packages")
-    raise 'no package exists' if @packages.empty?
-  end
-
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-    @packages.each do |name|
-      eval_file_ifexist "#{@ardir}/packages/#{name}/metaconfig"
-    end
-  end
-
-  def init_installers
-    @installers = {}
-    @packages.each do |pack|
-      @installers[pack] = Installer.new(@config, @options,
-                                       "#{@ardir}/packages/#{pack}",
-                                       "packages/#{pack}")
-    end
-
-    with    = extract_selection(config('with'))
-    without = extract_selection(config('without'))
-    @selected = @installers.keys.select {|name|
-                  (with.empty? or with.include?(name)) \
-                      and not without.include?(name)
-                }
-  end
-
-  def extract_selection(list)
-    a = list.split(/,/)
-    a.each do |name|
-      setup_rb_error "no such package: #{name}"  unless @installers.key?(name)
-    end
-    a
-  end
-
-  def print_usage(f)
-    super
-    f.puts 'Inluded packages:'
-    f.puts '  ' + @packages.sort.join(' ')
-    f.puts
-  end
-
-  #
-  # multi-package metaconfig API
-  #
-
-  attr_reader :packages
-
-  def declare_packages(list)
-    raise 'package list is empty' if list.empty?
-    list.each do |name|
-      raise "directory packages/#{name} does not exist"\
-              unless File.dir?("#{@ardir}/packages/#{name}")
-    end
-    @packages = list
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    run_hook 'pre-config'
-    each_selected_installers {|inst| inst.exec_config }
-    run_hook 'post-config'
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    run_hook 'pre-setup'
-    each_selected_installers {|inst| inst.exec_setup }
-    run_hook 'post-setup'
-  end
-
-  def exec_install
-    run_hook 'pre-install'
-    each_selected_installers {|inst| inst.exec_install }
-    run_hook 'post-install'
-  end
-
-  def exec_clean
-    rm_f ConfigTable.savefile
-    run_hook 'pre-clean'
-    each_selected_installers {|inst| inst.exec_clean }
-    run_hook 'post-clean'
-  end
-
-  def exec_distclean
-    rm_f ConfigTable.savefile
-    run_hook 'pre-distclean'
-    each_selected_installers {|inst| inst.exec_distclean }
-    run_hook 'post-distclean'
-  end
-
-  #
-  # lib
-  #
-
-  def each_selected_installers
-    Dir.mkdir 'packages' unless File.dir?('packages')
-    @selected.each do |pack|
-      $stderr.puts "Processing the package `#{pack}' ..." if @options['verbose']
-      Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
-      Dir.chdir "packages/#{pack}"
-      yield @installers[pack]
-      Dir.chdir '../..'
-    end
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-end
-
-
-class Installer
-
-  FILETYPES = %w( bin lib ext data )
-
-  include HookScriptAPI
-  include HookUtils
-  include FileOperations
-
-  def initialize(config, opt, srcroot, objroot)
-    @config = config
-    @options = opt
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{File.basename(@srcdir)}>"
-  end
-
-  #
-  # Hook Script API base methods
-  #
-
-  def srcdir_root
-    @srcdir
-  end
-
-  def objdir_root
-    @objdir
-  end
-
-  def relpath
-    @currdir
-  end
-
-  #
-  # configs/options
-  #
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def verbose_off
-    begin
-      save, @options['verbose'] = @options['verbose'], false
-      yield
-    ensure
-      @options['verbose'] = save
-    end
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  def config_dir_bin(rel)
-  end
-
-  def config_dir_lib(rel)
-  end
-
-  def config_dir_ext(rel)
-    extconf if extdir?(curr_srcdir())
-  end
-
-  def extconf
-    opt = @options['config-opt'].join(' ')
-    command "#{config('rubyprog')} #{curr_srcdir()}/extconf.rb #{opt}"
-  end
-
-  def config_dir_data(rel)
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin(rel)
-    all_files_in(curr_srcdir()).each do |fname|
-      adjust_shebang "#{curr_srcdir()}/#{fname}"
-    end
-  end
-
-  def adjust_shebang(path)
-    return if no_harm?
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(path, 'rb') {|r|
-        first = r.gets
-        return unless File.basename(config('rubypath')) == 'ruby'
-        return unless File.basename(first.sub(/\A\#!/, '').split[0]) == 'ruby'
-        $stderr.puts "adjusting shebang: #{File.basename(path)}" if verbose?
-        File.open(tmpfile, 'wb') {|w|
-          w.print first.sub(/\A\#!\s*\S+/, '#! ' + config('rubypath'))
-          w.write r.read
-        }
-        move_file tmpfile, File.basename(path)
-      }
-    ensure
-      File.unlink tmpfile if File.exist?(tmpfile)
-    end
-  end
-
-  def setup_dir_lib(rel)
-  end
-
-  def setup_dir_ext(rel)
-    make if extdir?(curr_srcdir())
-  end
-
-  def setup_dir_data(rel)
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    rm_f 'InstalledFiles'
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin(rel)
-    install_files collect_filenames_auto(), "#{config('bindir')}/#{rel}", 0755
-  end
-
-  def install_dir_lib(rel)
-    install_files ruby_scripts(), "#{config('rbdir')}/#{rel}", 0644
-  end
-
-  def install_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    install_files ruby_extentions('.'),
-                  "#{config('sodir')}/#{File.dirname(rel)}",
-                  0555
-  end
-
-  def install_dir_data(rel)
-    install_files collect_filenames_auto(), "#{config('datadir')}/#{rel}", 0644
-  end
-
-  def install_files(list, dest, mode)
-    mkdir_p dest, @options['install-prefix']
-    list.each do |fname|
-      install fname, dest, mode, @options['install-prefix']
-    end
-  end
-
-  def ruby_scripts
-    collect_filenames_auto().select {|n| /\.rb\z/ =~ n }
-  end
-  
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  reject_patterns = %w( 
-    core RCSLOG tags TAGS .make.state
-    .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
-    *~ *.old *.bak *.BAK *.orig *.rej _$* *$
-
-    *.org *.in .*
-  )
-  mapping = {
-    '.' => '\.',
-    '$' => '\$',
-    '#' => '\#',
-    '*' => '.*'
-  }
-  REJECT_PATTERNS = Regexp.new('\A(?:' +
-                               reject_patterns.map {|pat|
-                                 pat.gsub(/[\.\$\#\*]/) {|ch| mapping[ch] }
-                               }.join('|') +
-                               ')\z')
-
-  def collect_filenames_auto
-    mapdir((existfiles() - hookfiles()).reject {|fname|
-             REJECT_PATTERNS =~ fname
-           })
-  end
-
-  def existfiles
-    all_files_in(curr_srcdir()) | all_files_in('.')
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-      %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def mapdir(filelist)
-    filelist.map {|fname|
-      if File.exist?(fname)   # objdir
-        fname
-      else                    # srcdir
-        File.join(curr_srcdir(), fname)
-      end
-    }
-  end
-
-  def ruby_extentions(dir)
-    Dir.open(dir) {|d|
-      ents = d.select {|fname| /\.#{::Config::CONFIG['DLEXT']}\z/ =~ fname }
-      if ents.empty?
-        setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first"
-      end
-      return ents
-    }
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f ConfigTable.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  def clean_dir_bin(rel)
-  end
-
-  def clean_dir_lib(rel)
-  end
-
-  def clean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'clean' if File.file?('Makefile')
-  end
-
-  def clean_dir_data(rel)
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f ConfigTable.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  def distclean_dir_bin(rel)
-  end
-
-  def distclean_dir_lib(rel)
-  end
-
-  def distclean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'distclean' if File.file?('Makefile')
-  end
-
-  #
-  # lib
-  #
-
-  def exec_task_traverse(task)
-    run_hook "pre-#{task}"
-    FILETYPES.each do |type|
-      if config('without-ext') == 'yes' and type == 'ext'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, "#{task}_dir_#{type}"
-    end
-    run_hook "post-#{task}"
-  end
-
-  def traverse(task, rel, mid)
-    dive_into(rel) {
-      run_hook "pre-#{task}"
-      __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-      all_dirs_in(curr_srcdir()).each do |d|
-        traverse task, "#{rel}/#{d}", mid
-      end
-      run_hook "post-#{task}"
-    }
-  end
-
-  def dive_into(rel)
-    return unless File.dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless File.dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-end
-
-
-if $0 == __FILE__
-  begin
-    if multipackage_install?
-      ToplevelInstallerMulti.invoke
-    else
-      ToplevelInstaller.invoke
-    end
-  rescue SetupError
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/CHANGES.txt b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/CHANGES.txt
deleted file mode 100644
index 15e6e3f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/CHANGES.txt
+++ /dev/null
@@ -1,717 +0,0 @@
-# -*- coding: utf-8 -*-
-# $Rev: 118 $
-# $Release: 2.6.2 $
-# copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-
-- release:   2.6.2
-  date:	2008-06-12
-  enhancements:
-
-    - |
-	Ruby 1.9 support.
-
-  bugfixes:
-
-    - |
-	Fixed a bug that it is not able to install Erubis on windows
-	(Thanks to Tim Morgan and Allen).
-
-
-- release:   2.6.1
-  date: 2008-06-06
-  enhancements:
-
-    - |
-	Rails 2.1 support. (special thanks José Valim)
-
-
-
-- release:   2.6.0
-  date: 2008-05-05
-  enhancements:
-
-    - |
-	Improved support of Ruby on Rails 2.0.2.
-	New class ActionView::TemplateHandlers::Erubis is defined and
-	registered as default handler of *.html.erb and *.rhtml.
-	
-    - |
-	'<%% %>' and '<%%= %>' are converted into '<% %>' and '<%= %>' respectively.
-	This is for compatibility with ERB.
-
-	ex1.rhtml:
-	    <ul>
-	    <%% for item in @list %>
-	      <li><%%= item %></li>
-	    <%% end %>
-	    </ul>
-
-	result:
-	    $ erubis ex1.rhtml
-	    <ul>
-	    <% for item in @list %>
-	      <li><%= item %></li>
-	    <% end %>
-	    </ul>
-
-    - |
-	'<%= -%>' removes tail spaces and newlines.
-	This is for compatibiliy with ERB when trim mode is '-'.
-	'<%= =%>' also removes tail spaces and newlines, and this is
-	Erubis-original enhancement (cooler than '<%= -%>', isn't it?).
-
-	ex2.rhtml:
-	   <div>
-	   <%= @var -%>          # or <%= @var =%>
-	   </div>
-
-	result (version 2.6.0):
-	    $ erubis -c '{var: "AAA\n"}' ex2.rhtml
-	    <div>
-	    AAA
-	    </div>
-
-	result (version 2.5.0):
-	    $ erubis -c '{var: "AAA\n"}' ex2.rhtml
-	    <div>
-	    AAA
-	    
-	    </div>
-
-    - |
-	Erubis::Eruby.load_file() now allows you to change cache filename.
-
-	ex.
-	    eruby = Erubis::Eruby.load_file("ex3.rhtml",
-		                            :cachename=>'ex3.rhtml.cache')
-
-
-- release:   2.5.0
-  date:	     2008-01-30
-  enhancements:
-
-    - |
-      Ruby on Rails 2.0 support.
-      If you are using preprocessing, notice that _?('foo.id') will be NG
-      because it contains period ('.') character.
-
-      --------------------
-      <!-- NG in Rails 2.0 -->
-      [%= link_to 'Edit', edit_user_path(_?('@user.id')) %]
-      [%= link_to 'Show', @user %]
-      [%= link_to 'Delete', @user, :confirm=>'OK?', :method=>:delete %]
-      
-      <!-- OK in Rails 2.0 -->
-      <%= user_id = @user.id %>
-      [%= link_to 'Edit', edit_user_path(_?('user_id')) %]
-      [%= link_to 'Show', :action=>'show', :id=>_?('user_id') %]
-      [%= link_to 'Delete', {:action=>'destroy', :id=>_?('user_id')},
-                            {:confirm=>'OK?', :method=>:delete} %]
-      --------------------
-	
-    - |
-      (experimental)
-      Rails form helper methods for preprocessing are added.
-      These helper methos are available with preprocessing.
-
-      ex. _form.rhtml
-      --------------------
-       Name: <%= text_field :user, :name %>
-       Name: [%= pp_text_field :user, :name %]
-      --------------------
-
-      preprocessed:
-      --------------------
-       Name: <%= text_field :user, :name %>
-       Name: <input id="stock_name" name="stock[name]" size="30" type="text" value="<%=h @stock.name%>" />
-      --------------------
-
-      Ruby code:
-      --------------------
-       _buf << '
-        Name: '; _buf << ( text_field :stock, :name ).to_s; _buf << '
-        Name: <input id="stock_name" name="stock[name]" size="30" type="text" value="'; _buf << (h @stock.name).to_s; _buf << '" />
-      ';
-      --------------------
-
-      This shows that text_filed() is called every time when rendering,
-      but pp_text_filed() is called only once when loading template,
-      so pp_text_field() with prepocessing is much faster than text_field().
-
-      See User's guide for details.
-      http://www.kuwata-lab.com/erubis/users-guide.05.html#rails-formhelpers
-
-#
-- release:   2.4.1
-  date:      2007-09-25
-  enhancements:
-
-    - |
-      Add new section 'evaluate(context) v.s. result(binding)' to user's guide.
-      This section describes why Erubis::Eruby#evaluate(context) is recommended
-      rather than Erubis::Eruby#result(binding).
-      User's Guide > Other Topics > evaluate(context) v.s. result(binding)
-      http://www.kuwata-lab.com/erubis/users-guide.06.html#topics-context-vs-binding
-
-    - |
-      Add new command-line property '--docwrite={true|false}' to
-      Erubis::Ejavascript.
-      If this property is true then 'document.write(_buf.join(""));' is used
-      as postamble and if it is false then '_buf.join("")' is used.
-      Default is true for compatibility reason but it will be false in the
-      future release.
-      (This feature was proposed by D.Dribin. Thank you.)
-
-  bugfix:
-
-    - |
-      When using Erubis::Eruby#evaluate(), changing local variables in
-      templates have affected to variables accessible with TOPLEVEL_BINDING.
-      It means that if you change variables in templates, it is possible to
-      change variables in main program.
-      This was a bug and is now fixed not to affect to variables in main
-      program.
-
-      ex. template.rhtml
-      --------------------
-      <% for x in @items %>
-      item = <%= x %>
-      <% end %>
-      --------------------
-
-      ex. main-program.rb
-      --------------------
-      require 'erubis'
-      x = 10
-      items = ['foo', 'bar', 'baz']
-      eruby = Erubis::Eruby.new(File.read('template.rhtml'))
-      s = eruby.evaluate(:items=>items)
-      print s
-      $stderr.puts "*** debug: x=#{x.inspect}"  #=> x="baz" (2.4.0)
-                                                #=> x=10    (2.4.1)
-      --------------------
-
-    - |
-      PercentLineEnhancer was very slow. Now performance problem is solved.
-
-
-#
-- release:   2.4.0
-  date: 2007-07-19
-  enhancements:
-
-    - |
-      Preprocessing is supported by Ruby on Rails helper.
-      Preprocessing makes Ruby on Rails application about 20-40 percent faster.
-
-      For example,
-
-         [%= link_to 'Show', :action=>'show', :id=>_?('@user.id') %]
-
-      is evaluate by preprocessor and expanded into the following
-      when template file is loaded.
-
-         <a href="/users/show/<%=@user.id%>">Show</a>
-
-      It means that link_to() is not called when template is rendered
-      and rendering speed will be much faster in the result.
-
-      See User's Guide for details.
-
-    - |
-      Erubis::Eruby#evaluate() (or Erubis::RubyEvaluator#evaluate()) now
-      creates Proc object from @src and eval it.
-
-        def evaluate(context=Context.new)
-          context = Context.new(context) if context.is_a?(Hash)
-          @_proc ||= eval("proc { #{@src} }", TOPLEVEL_BINDING, @filename || '(erubis)')
-          return context.instance_eval(&@_proc)
-        end
-
-      This makes evaluate() much faster when eruby object is reused.
-      
-    - |
-      Erubis::Eruby#def_method() is supported.
-      This method defines ruby code as instance method or singleton metod.
-
-        require 'erubis'
-        s = "hello <%= name %>"
-        eruby = Erubis::Eruby.new(s)
-	filename = 'hello.rhtml'
-        
-        ## define instance method to Dummy class (or module)
-        class Dummy; end
-        eruby.def_method(Dummy, 'render(name)', filename)  # filename is optional
-        p Dummy.new.render('world')    #=> "hello world"
-        
-        ## define singleton method to an object
-        obj = Object.new
-        eruby.def_method(obj, 'render(name)', filename)    # filename is optional
-        p obj.render('world')      #=> "hello world"
-
-      This is equivarent to ERB#def_method().
-
-    - |
-      Erubis::XmlHelper.url_escape() and u() which is alias of url_escape()
-      are added.
-      This is equivarent to ERB#Util.url_escape().
-
-
-  bugfix:
-    - Help message was not shown when '-h' is specified. Fixed.
-    - 'def method()' was not availabe in template file. Fixed.
-
-
-#
-- release:   2.3.1
-  date: 2007-05-26
-  bugfix:
-    - A serious bug in 'helpers/rails_helper.rb' is fixed.
-      You must be update if you are using Erubis with Ruby on Rails.
-
-
-#
-- release:   2.3.0
-  date: 2007-05-23
-  enhancements:
-    - |
-      New class 'Erubis::FastEruby' is added.
-      It is a subclass of Erubis::Eruby and includes InterpolationEnhancer.
-      Erubis::FastEruby is compatible with and faster than Erubis::Eruby.
-
-    - |
-      New enhancer 'InterpolationEnhancer' is added.
-      This enhancer uses expression interpolation to eliminate method call
-      of String#<<. In the result, this enhancer makes Eruby a little faster.
-
-      --------------------
-      ## Assume that input is '<a href="<%=url%>"><%=name%></a>'.
-      ## Eruby convert input into the following code.  String#<< is called 5 times.
-      _buf << '<a href="'; _buf << (url).to_s; _buf << '">'; _buf << (name).to_s; _buf << '</a>';
-      
-      ## When InterpolationEnhancer is used, String#<< is called only once.
-      _buf << %Q`<a href="#{url}">#{name}</a>`;
-      --------------------
-
-    - |
-      New enhancer 'ErboutEnhancer' is added.
-      ErboutEnhancer set '_erbout' as well as '_buf' to be compatible with ERB.
-
-      ex.
-      ====================
-      $ cat ex.rhtml
-      <p>Hello</p>
-      $ erubis -x ex.rhtml
-      _buf = ''; _buf << '<p>Hello</p>
-      ';
-      _buf.to_s
-      $ erubis -xE Erbout ex.rhtml
-      _erbout = _buf = ''; _buf << '<p>Hello</p>
-      ';
-      _buf.to_s
-      ====================
-
-    - |
-      [experimental]
-      New enhancer 'DeleteIndentEnhancer' is added.
-      This enhancer deletes indentation of HTML file.
-
-      ex.
-      ====================
-      $ cat ex.rhtml
-      <div>
-        <ul>
-        <% for item in ['AAA', 'BBB', 'CCC'] %>
-          <li><%= item %></li>
-        <% end %>
-        </ul>
-      </div>
-      $ erubis ex.rhtml
-      <div>
-        <ul>
-          <li>AAA</li>
-          <li>BBB</li>
-          <li>CCC</li>
-        </ul>
-      </div>
-      $ erubis -E DeleteIndent ex.rhtml
-      <div>
-      <ul>
-      <li>AAA</li>
-      <li>BBB</li>
-      <li>CCC</li>
-      </ul>
-      </div>
-      ====================
-
-    - |
-      Mod_ruby is supported (very thanks to Andrew R Jackson!).
-      See users-guide and 'contrib/erubis-run.rb' for details.
-      
-    - |
-      New command-line option '-X', '-N', '-U', and '-C' are added.
-      These are intended to be a replacement of 'notext' command.
-      '-X' shows only ruby statements and expressions.
-      '-N' adds line numbers.
-      '-U' compress empty lines into a line.
-      '-C' removes empty lines.
-
-
-  changes:
-
-    - |
-      'helpers/rails_helper.rb' is changed to use ErboutEnhancer.
-      The following is an examle to use Erubis with Ruby on Rails.
-
-      File 'config/environment.rb':
-      ----------------------------------------
-      require 'erubis/helpers/rails_helper'
-      #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby # or Erubis::FastEruby
-      #Erubis::Helpers::RailsHelper.init_properties = {}
-      #Erubis::Helpers::RailsHelper.show_src = false             # set true for debugging
-      ----------------------------------------
-      
-    - |
-      Command 'notext' has been removed. Use '-X', '-N', '-U', and '-C'
-      instead.
-
-    - |
-      Tab characters in YAML file are expaneded automatically.
-      If you want not to expand tab characters, add command-line optio '-T'.
-
-    - |
-      Benchmark scripts (benchmark/bench.*) are rewrited.
-
-    - |
-      Users-guide (doc/users-guide.html) is updated.
-
-    
-
-#
-- release:   2.2.0
-  date:      2007-02-11
-  enhancements:
-    - |
-      Performance tuned up. Release 2.2.0 works about 8 percent faster
-      than 2.1.0.
-      As a result, Erubis works more than 10 percent faster than eruby.
-      (eruby is the extension module of eRuby written in C.)
-
-    - |
-      Support of Ruby on Rails improved.
-      If you want to use Erubis with Ruby on Rails, add the following code
-      into your 'config/environment.rb' and restart web server.
-      This will set Erubis as eRuby compiler in Ruby on Rails instead of ERB.
-
-      --------------------
-      require 'erubis/helpers/rails_helper'
-      #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby
-      #Erubis::Helpers::RailsHelper.init_properties = {}
-      #Erubis::Helpers::RailsHelper.show_src = true
-      --------------------
-
-      Methods 'capture()' and 'content_for()' of ActionView::Helpers::CaptureHelper
-      are available. Methd ActionView::Helpers::TextHelper#concat() is also available.
-
-      If Erubis::Helpers::RailsHelper.show_src is ture, Erubis prints converted
-      Ruby code into log file (such as 'log/development.log').
-
-    - |
-      Erubis::Engine.load_file(filename) creates cache file (filename +
-      '.cache') automatically if cache file is old or not exist.
-      Caching makes Erubis about 40-50 percent faster.
-
-      ex.
-      --------------------
-      require 'erubis'
-      eruby = Erubis::Eruby.load_file('example.rhtml')
-         ## cache file 'example.rhtml.cache' is created automatically
-      --------------------
-
-    - |
-      Command-line option '-f datafile' can take Ruby script ('*.rb')
-      as well as YAML file ('*.yaml' or '*.yml').
-
-      ex.
-      ====================
-      $ cat context.rb
-      @title = 'Example'
-      @list  = %w[AAA BBB CCC]
-      $ cat example.rhtml
-      <h1><%= @title %></h1>
-      <ul>
-      <% for item in @list %>
-        <li><%= item %></li>
-      <% end %>
-      </ul>
-      $ erubis -f context.rb example.rhtml
-      <h1>Example</h1>
-      <ul>
-        <li>AAA</li>
-        <li>BBB</li>
-        <li>CCC</li>
-      </ul>
-      ====================
-
-    - |
-      New command-line option '-c context' support. It takes context string
-      in YAML inline style or Ruby code style.
-
-      ex. YAML inline style
-      ====================
-      $ erubis -c '{title: Example, list: [AAA, BBB, CCC]}' example.rhtml
-      ====================
-
-      ex. Ruby style
-      ====================
-      $ erubis -c '@title="Example"; @list=%w[AAA BBB CCC]' example.rhtml
-      ====================
-
-    - |
-      New command-line option '-z' (syntax checking) support. It is similar
-      to 'erubis -x file.rhtml | ruby -wc', but it can take several filenames.
-
-      ex.
-      ====================
-      $ erubis -z app/views/*/*.rhtml
-      Syntax OK
-      ====================
-
-    - |
-      New constant Erubis::VERSION added.
-
-
-  changes:
-    - |
-      Class Erubis::Eruby changed to include Erubis::StringBufferEnhancer
-      instead of Erubis::ArrayBufferEnhancer.
-      This is for Ruby on Rails support.
-
-      ex.
-      ====================
-      $ cat example.rhtml
-      <ul>
-      <% for item in @list %>
-        <li><%= item %></li>
-      <% end %>
-      </ul>
-      $ erubis -x example.rhtml
-      _buf = ''; _buf << '<ul>
-      '; for item in @list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      '; end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-      ====================
-
-    - |
-      Erubis::StringBufferEnhancer#add_postamble() prints "_buf.to_s"
-      instead of "_buf".
-      This is useful for 'erubis -x file.rhtml | ruby -wc'.
-
-    - |
-      Command-line option '-T' is removed. Use '--trim=false' instead.
-
-    - |
-      License is changed to MIT License.
-
-    - |
-      Embedded pattern '<%- -%>' can be handled.
-
-
-#
-- release:   2.1.0
-  date:      2006-09-23
-  enhancements:
-    - |
-      Ruby on Rails support. Add the following code to
-      your 'app/controllers/application.rb' and restart web server.
-      
-      --------------------
-      require 'erubis/helper/rails'
-      suffix = 'erubis' 
-      ActionView::Base.register_template_handler(suffix, Erubis::Helper::RailsTemplate)
-      #Erubis::Helper::RailsTemplate.engine_class = Erubis::EscapedEruby ## or Erubis::PI::Eruby
-      #Erubis::Helper::RailsTemplate.default_properties = { :escape=>true, :escapefunc=>'h' }
-      --------------------
-      
-      And rename your view template as 'xxx.erubis'.
-      If you got the "(eval):10:in `render': no block given" error,
-      use '@content_for_layout' instead 'yield' in your layout template.
-
-    - |
-      Another eRuby engine (PIEngine) support. This engine doesn't
-      break HTML design because it uses Processing Instructions (PI)
-      '<?rb .. ?>' as embedded pattern instead of '<% .. %>'.
-      
-      example.rhtml
-      --------------------
-      <table>
-      <?rb @list.each_with_index do |item, i| ?>
-      <?rb   klass = i % 2 == 0 ? 'odd' : 'even' ?>
-        <tr class="@{klass}@">
-          <td>@!{item}@</td>
-        </tr>
-      <?rb end ?>
-      </table>
-      --------------------
-      
-      compile:
-      ====================
-      $ erubis -x --pi example.rhtml
-      _buf = []; _buf << '<table>
-      '; @list.each_with_index do |item, i| 
-         klass = i % 2 == 0 ? 'odd' : 'even' 
-       _buf << '  <tr class="'; _buf << Erubis::XmlHelper.escape_xml(klass); _buf << '">
-          <td>'; _buf << (item).to_s; _buf << '</td>
-        </tr>
-      '; end 
-       _buf << '</table>
-      ';
-      _buf.join
-      ====================
- 
-    - |
-      Add new command 'notext' which remove text part from eRuby
-      script and leaves only Ruby code.
-      This is very useful for debug of eRuby script.
-      
-      example2.rhtml
-      --------------------
-      <html>
-       <body>
-        <table>
-      <% @list.each_with_index do |item, i| %>
-      <%   klass = i % 2 == 0 ? 'odd' : 'even' %>
-         <tr class="<%= klass %>">
-          <td><%== item %></td>
-         </tr>
-      <% end %>
-        </table>
-       </body>
-      </html>
-      --------------------
-      
-      command line example:
-      ====================
-      $ notext example2.rhtml
-      _buf = [];
-      
-      
-       @list.each_with_index do |item, i| ;
-         klass = i % 2 == 0 ? 'odd' : 'even' ;
-                     _buf << ( klass ).to_s;
-               _buf << Erubis::XmlHelper.escape_xml( item );
-      
-       end ;
-      
-      
-      
-      _buf.join
-      $ notext -nc example2.rhtml
-        1: _buf = [];
-        4:  @list.each_with_index do |item, i| ;
-        5:    klass = i % 2 == 0 ? 'odd' : 'even' ;
-        6:                _buf << ( klass ).to_s;
-        7:          _buf << Erubis::XmlHelper.escape_xml( item );
-        9:  end ;
-       13: _buf.join
-      ====================
- 
-    - |
-      Add new enhance 'NoCode' which removes ruby code from
-      eRuby script and leaves only HTML text part.
-      It is very useful to validate HTML of eRuby script.
-      
-      command-line example:
-      ====================
-      $ erubis -x -E NoCode example2.rhtml
-      <html>
-       <body>
-        <table>
-      
-      
-         <tr class="">
-          <td></td>
-         </tr>
-      
-        </table>
-       </body>
-      </html>
-      ====================
-
-  changes:
-    - License is changed to LGPL.
-    - Command-line property '--escape=name' is renamed to
-      '--escapefunc=name'.
-    - When command-line option '-l perl' is specified, function
-      'encode_entities()' is used ad escaping function which is
-      available wth HTML::Entities module.
-
-  bugfix:
-    - There is a certain pattern which makes Engine#convert()
-      too slow. Now Engne#convert() is fixed not to be slown.
-    - Command name is now displayed when '-h' is specified.
-
-
-#
-- release:   2.0.1
-  date:      2006-06-21
-  bugfix:
-    - some minor bugs are fixed
-
-
-#
-- release:   2.0.0
-  date:      2006-05-20
-  changes:
-    - module 'PrintEnhancer' is renamed to 'PrintEnabledEnahncer'
-    - module 'FastEnhancer' and class 'FastEruby' is obsolete because they are integrated into Eruby class
-    - Eruby#evaluate() calls instance_eval() instead of eval()
-    - XmlEruby.escape_xml() is moved to XmlHelper.escape_xml()
-  enhancements:
-    - multi programming language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript)
-    - class Eruby runs very fast because FastEnhancer module is integrated into Eruby by default
-    - TinyEruby class (tiny.rb) is added
-    - module ArrayBufferEnhancer added
-    - module ArrayEnhancer added
-    - module BiPatternEnhancer added
-    - module EscapeEnhancer added
-    - module HeaderFooterEnhancer added
-    - module NoTextEnhancer added
-    - module PercentLineEnhancer added
-    - module PrintEnabledEnhancer added
-    - module PrintOutEnhancer added
-    - module SimplifyEnhancer added
-    - module StringBufferEnhancer added
-    - module StringIOEnhancer added
-    - command-line option '-b' (body only) added
-    - command-line option '-e' (escape) added
-    - command-line option '-l' (lang) added
-    - command-line option '-E' (enhancer) added
-    - command-line option '-I' (require path) added
-    - command-line option '-K' (kanji code) added
-    - command-line option '-S' (string to symbol) added
-    - command-line option '-B' (call result(binding())) added
-
-
-#
-- release:   1.1.0
-  date:      2006-03-05
-  enhancements:
-    - '<%# ... %>' is supported
-    - PrintEnhancer, PrintEruby, and PrintXmlEruby added
-
-- release:   1.0.1
-  date:      2006-02-01
-  bugfixes:
-    - bin/erubis is available with RubyGems
-
-
-#
-- release:   1.0.0
-  date:      2006-02-01
-  bugfixes:
-    - first release
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/MIT-LICENSE b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/MIT-LICENSE
deleted file mode 100644
index a6652a5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/MIT-LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/README.txt b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/README.txt
deleted file mode 100644
index fbeebd3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/README.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-= README
-
-release::	2.6.2
-copyright::	copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-
-
-
-== About Erubis
-
-Erubis is an implementation of eRuby. It has the following features.
-* Very fast, almost three times faster than ERB and even 10% faster than eruby
-* Multi-language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript)
-* Auto escaping support
-* Auto trimming spaces around '<% %>'
-* Embedded pattern changeable (default '<% %>')
-* Enable to handle Processing Instructions (PI) as embedded pattern (ex. '<?rb ... ?>')
-* Context object available and easy to combine eRuby template with YAML datafile
-* Print statement available
-* Easy to extend and customize in subclass
-* Ruby on Rails support
-
-Erubis is implemented in pure Ruby.  It requires Ruby 1.8 or higher.
-Erubis now supports Ruby 1.9.
-
-See doc/users-guide.html for details.
-
-
-
-== Installation
-
-* If you have installed RubyGems, just type <tt>gem install erubis</tt>.
-
-    $ sudo gem install erubis
-
-* Else install abstract[http://rubyforge.org/projects/abstract/] at first,
-  and download erubis_X.X.X.tar.bz2 and install it by setup.rb.
-
-    $ tar xjf abstract_X.X.X.tar.bz2
-    $ cd abstract_X.X.X/
-    $ sudo ruby setup.rb
-    $ cd ..
-    $ tar xjf erubis_X.X.X.tar.bz2
-    $ cd erubis_X.X.X/
-    $ sudo ruby setup.rb
-
-* (Optional) It is able to merge 'lib/**/*.rb' into 'bin/erubis' by
-  'contrib/inline-require' script.
-
-    $ tar xjf erubis_X.X.X.tar.bz2
-    $ cd erubis_X.X.X/
-    $ cp /tmp/abstract_X.X.X/lib/abstract.rb lib
-    $ unset RUBYLIB
-    $ contrib/inline-require -I lib bin/erubis > contrib/erubis
-
-
-
-== Ruby on Rails Support
-
-Erubis supports Ruby on Rails.
-All you have to do is to add the following code into your 'config/environment.rb'
-and restart web server.
-
-     require 'erubis/helpers/rails_helper'
-     #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby
-     #Erubis::Helpers::RailsHelper.init_properties = {}
-     #Erubis::Helpers::RailsHelper.show_src = nil
-
-If Erubis::Helpers::RailsHelper.show_src is ture, Erubis prints converted Ruby code
-into log file ('log/development.log' or so).  It is useful for debug.
-
-
-
-== Exploring Guide
-
-If you are exploring Eruby, see the following class at first.
-* Erubis::TinyEruby (erubis/tiny.rb) --
-  the most simple eRuby implementation.
-* Erubis::Engine (erubis/engine.rb) --
-  base class of Eruby, Ephp, Ejava, and so on.
-* Erubis::Eruby (erubis/engine/eruby.rb) --
-  engine class for eRuby.
-* Erubis::Converter (erubis/converter.rb) --
-  convert eRuby script into Ruby code.
-
-
-
-== Benchmark
-
-'benchmark/erubybenchmark.rb' is a benchmark script of Erubis.
-Try 'ruby erubybenchmark.rb' in benchmark directory.
-
-
-
-== License
-
-MIT License
-
-
-
-== Author
-
-makoto kuwata <kwa(at)kuwata-lab.com>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/Makefile b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/Makefile
deleted file mode 100644
index fa740fe..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-bench:
-	ruby bench.rb -n 10000
-
-clean:
-	rm -rf bench_*.rhtml*
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/bench.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/bench.rb
deleted file mode 100644
index 867e26b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/bench.rb
+++ /dev/null
@@ -1,314 +0,0 @@
-#!/usr/bin/env ruby
-
-###
-### $Rev: 101 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-require 'erb'
-require 'erubis'
-require 'erubis/tiny'
-require 'erubis/engine/enhanced'
-require 'yaml'
-require 'cgi'
-include ERB::Util
-
-begin
-  require 'eruby'
-rescue LoadError
-  ERuby = nil
-end
-
-def File.write(filename, content)
-  File.open(filename, 'w') { |f| f.write(content) }
-end
-
-
-## change benchmark library to use $stderr instead of $stdout
-require 'benchmark'
-module Benchmark
-  class Report
-    def print(*args)
-      $stderr.print(*args)
-    end
-  end
-  module_function
-  def print(*args)
-    $stderr.print(*args)
-  end
-end
-
-
-class BenchmarkApplication
-
-  TARGETS = %w[eruby
-               ERB               ERB(cached)
-               Erubis::Eruby     Erubis::Eruby(cached)
-               Erubis::FastEruby Erubis::FastEruby(cached)
-               Erubis::TinyEruby
-               Erubis::ArrayBufferEruby
-               Erubis::PrintOutEruby
-               Erubis::StdoutEruby
-              ]
-
-  def initialize(ntimes, context, targets=nil, params={})
-    @ntimes      = ntimes
-    @context     = context
-    @targets     = targets && !targets.empty? ? targets : TARGETS.dup
-    @testmode    = params[:testmode]    || 'execute'
-    @erubyfile   = params[:erubyfile]   || 'erubybench.rhtml'
-    @printout    = params[:printout]    || false
-  end
-
-  attr_accessor :ntimes, :targets
-  attr_accessor :testmode, :erubyfile, :contextfile, :printout
-
-  def context2code(context, varname='context')
-    s = ''
-    context.each { |k, | s << "#{k} = #{varname}[#{k.inspect}]; " }
-    return s
-  end
-
-  def perform_benchmark
-    width = 30
-    $stderr.puts "*** ntimes=#{@ntimes}, testmode=#{@testmode}"
-    Benchmark.bm(width) do |job|
-      for target in @targets do
-        method = "#{@testmode}_#{target.gsub(/::|-|\(/, '_').gsub(/\)/, '').downcase}"
-        #$stderr.puts "*** debug: method=#{method.inspect}"
-        next unless self.respond_to?(method)
-        filename = "bench_#{(target =~ /^(\w+)/) && $1.downcase}.rhtml"
-        title = target
-        output = nil
-        job.report(title) do
-          output = self.__send__(method, filename, @context)
-        end
-        File.write("output.#{target.gsub(/[^\w]/,'')}", output) if @printout && output && !output.empty?
-      end
-    end
-  end
-
-  ##
-
-  def execute_eruby(filename, context)
-    return unless ERuby
-    #eval context2code(context)
-    list = context['list']
-    @ntimes.times do
-      ERuby.import(filename)
-    end
-    return nil
-  end
-
-  def execute_erb(filename, context)
-    #eval context2code(context)
-    list = context['list']
-    output = nil
-    @ntimes.times do
-      eruby = ERB.new(File.read(filename))
-      output = eruby.result(binding())
-      print output
-    end
-    return output
-  end
-
-  def execute_erb_cached(filename, context)
-    #eval context2code(context)
-    list = context['list']
-    output = nil
-    cachefile = filename + '.cache'
-    File.unlink(cachefile) if test(?f, cachefile)
-    @ntimes.times do
-      if !test(?f, cachefile) || File.mtime(filename) > File.mtime(cachefile)
-        eruby = ERB.new(File.read(filename))
-        File.write(cachefile, eruby.src)
-      else
-        eruby = ERB.new('')
-        #eruby.src = File.read(cachefile)
-        eruby.instance_variable_set("@src", File.read(cachefile))
-      end
-      output = eruby.result(binding())
-      print output
-    end
-    return output
-  end
-
-  ## no cached
-  for klass in %w[Eruby FastEruby TinyEruby ArrayBufferEruby PrintOutEruby StdoutEruby] do
-    s = <<-END
-    def execute_erubis_#{klass.downcase}(filename, context)
-      #eval context2code(context)
-      list = context['list']
-      output = nil
-      @ntimes.times do
-        eruby = Erubis::#{klass}.new(File.read(filename))
-        output = eruby.result(binding())
-        print output
-      end
-      return output
-    end
-    END
-    eval s
-  end
-
-  ## cached
-  for klass in %w[Eruby FastEruby] do
-    s = <<-END
-    def execute_erubis_#{klass.downcase}_cached(filename, context)
-      #eval context2code(context)
-      list = context['list']
-      cachefile = filename + '.cache'
-      File.unlink(cachefile) if test(?f, cachefile)
-      output = nil
-      @ntimes.times do
-        eruby = Erubis::#{klass}.load_file(filename)
-        output = eruby.result(binding())
-        print output
-      end
-      savefile = cachefile.sub(/\\.cache$/, '.#{klass.downcase}.cache')
-      File.rename(cachefile, savefile)
-      return output
-    end
-    END
-    eval s
-  end
-
-  ##
-
-  def convert_eruby(filename, context)
-    return unless ERuby
-    #eval context2code(context)
-    list = context['list']
-    output = nil
-    @ntimes.times do
-      output = ERuby::Compiler.new.compile_string(File.read(filename))
-    end
-    return output
-  end
-
-  def convert_erb(filename, context)
-    #eval context2code(context)
-    list = context['list']
-    output = nil
-    @ntimes.times do
-      eruby = ERB.new(File.read(filename))
-      output = eruby.src
-    end
-    return output
-  end
-
-  for klass in %w[Eruby FastEruby TinyEruby]
-    s = <<-END
-      def convert_erubis_#{klass.downcase}(filename, context)
-        #eval context2code(context)
-        list = context['list']
-        output = nil
-        @ntimes.times do
-          eruby = Erubis::#{klass}.new(File.read(filename))
-          output = eruby.src
-        end
-        return output
-      end
-    END
-    eval s
-  end
-
-end
-
-
-require 'optparse'
-
-class MainApplication
-
-  def parse_argv(argv=ARGV)
-    optparser = OptionParser.new
-    options = {}
-    ['-h', '-n N', '-t erubyfile', '-f contextfile', '-A', '-e',
-      '-x exclude', '-m testmode', '-X', '-p', '-D'].each do |opt|
-      optparser.on(opt) { |val| options[opt[1].chr] = val }
-    end
-    begin
-      targets = optparser.parse!(argv)
-    rescue => ex
-      $stderr.puts "#{@script}: #{ex.to_s}"
-      exit(1)
-    end
-    return options, targets
-  end
-
-  def execute
-    @script = File.basename($0)
-    ntimes = 1000
-    targets = BenchmarkApplication::TARGETS.dup
-    testmode = 'execute'
-    contextfile = 'bench_context.yaml'
-    #
-    options, args = parse_argv(ARGV)
-    ntimes      = options['n'].to_i if options['n']
-    targets     = args if args && !args.empty?
-    targets     = targets - options['x'].split(/,/) if options['x']
-    testmode    = options['m'] if options['m']
-    contextfile = options['f'] if options['f']
-    erubyfile   = options['t'] if options['t']
-    #
-    if options['h']
-      $stderr.puts "Usage: ruby #{@script} [..options..] [..targets..]"
-      $stderr.puts "  -h           :  help"
-      $stderr.puts "  -n N         :  loop N times"
-      $stderr.puts "  -f datafile  :  context data filename (*.yaml)"
-      $stderr.puts "  -x exclude   :  exclude target name"
-      $stdout.puts "  -m testmode  :  'execute' or 'convert' (default 'execute')"
-      $stderr.puts "  -p           :  print output to file (filename: 'output.TARGETNAME')"
-      return
-    end
-    #
-    #if ! options['t']
-    for item in %w[eruby erb erubis]
-      fname = "bench_#{item}.rhtml"
-      header = File.read("templates/_header.html")
-      #body   = File.read("templates/#{erubyfile}")
-      body   = File.read("templates/#{fname}")
-      footer = File.read("templates/_footer.html")
-      content = header + body + footer
-      File.write(fname, content)
-    end
-    #
-    if options['e']   # escape
-      tuples = [
-        [ 'bench_eruby.rhtml',  '<%= CGI.escapeHTML((\1).to_s) %>' ],
-        [ 'bench_erb.rhtml',    '<%=h \1 %>' ],
-        [ 'bench_erubis.rhtml', '<%== \1 %>' ],
-      ]
-      for fname, replace in tuples
-        content = File.read(fname).gsub(/<%= ?(.*?) ?%>/, replace)
-        File.write(fname, content)
-      end
-      targets.delete('Erubis::TinyEruby')   ## because TinyEruby doesn't support '<%== =>'
-    end
-    #
-    context = YAML.load_file(contextfile)
-    #
-    params = {
-      :printout=>options['p'],
-      :testmode=>testmode,
-    }
-    app = BenchmarkApplication.new(ntimes, context, targets, params)
-    app.perform_benchmark()
-  end
-
-end
-
-
-if __FILE__ == $0
-
-  ## open /dev/null
-  $stdout = File.open('/dev/null', 'w')
-  at_exit do
-    $stdout.close()
-  end
-
-  ## start benchmark
-  MainApplication.new().execute()
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/bench_context.yaml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/bench_context.yaml
deleted file mode 100644
index e0ab4e8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/bench_context.yaml
+++ /dev/null
@@ -1,141 +0,0 @@
-list:
-  - name:       Adobe Systems
-    name2:      Adobe Systems Inc.
-    url:        http://www.adobe.com
-    symbol:     ADBE
-    price:      39.26
-    change:     0.13
-    ratio:      0.33
-  - name:       Advanced Micro Devices
-    name2:      Advanced Micro Devices Inc.
-    url:        http://www.amd.com
-    symbol:     AMD
-    price:      16.22
-    change:     0.17
-    ratio:      1.06
-  - name:       Amazon.com
-    name2:      Amazon.com Inc
-    url:        http://www.amazon.com
-    symbol:     AMZN
-    price:      36.85
-    change:     -0.23
-    ratio:      -0.62
-  - name:       Apple
-    name2:      Apple Inc.
-    url:        http://www.apple.com
-    symbol:     AAPL
-    price:      85.38
-    change:     -0.87
-    ratio:      -1.01
-  - name:       BEA Systems
-    name2:      BEA Systems Inc.
-    url:        http://www.bea.com
-    symbol:     BEAS
-    price:      12.46
-    change:     0.09
-    ratio:      0.73
-  - name:       CA
-    name2:      CA, Inc.
-    url:        http://www.ca.com
-    symbol:     CA
-    price:      24.66
-    change:     0.38
-    ratio:      1.57
-  - name:       Cisco Systems
-    name2:      Cisco Systems Inc.
-    url:        http://www.cisco.com
-    symbol:     CSCO
-    price:      26.35
-    change:     0.13
-    ratio:      0.5
-  - name:       Dell
-    name2:      Dell Corp.
-    url:        http://www.dell.com/
-    symbol:     DELL
-    price:      23.73
-    change:     -0.42
-    ratio:      -1.74
-  - name:       eBay
-    name2:      eBay Inc.
-    url:        http://www.ebay.com
-    symbol:     EBAY
-    price:      31.65
-    change:     -0.8
-    ratio:      -2.47
-  - name:       Google
-    name2:      Google Inc.
-    url:        http://www.google.com
-    symbol:     GOOG
-    price:      495.84
-    change:     7.75
-    ratio:      1.59
-  - name:       Hewlett-Packard
-    name2:      Hewlett-Packard Co.
-    url:        http://www.hp.com
-    symbol:     HPQ
-    price:      41.69
-    change:     -0.02
-    ratio:      -0.05
-  - name:       IBM
-    name2:      International Business Machines Corp.
-    url:        http://www.ibm.com
-    symbol:     IBM
-    price:      97.45
-    change:     -0.06
-    ratio:      -0.06
-  - name:       Intel
-    name2:      Intel Corp.
-    url:        http://www.intel.com
-    symbol:     INTC
-    price:      20.53
-    change:     -0.07
-    ratio:      -0.34
-  - name:       Juniper Networks
-    name2:      Juniper Networks, Inc
-    url:        http://www.juniper.net/
-    symbol:     JNPR
-    price:      18.96
-    change:     0.5
-    ratio:      2.71
-  - name:       Microsoft
-    name2:      Microsoft Corp
-    url:        http://www.microsoft.com
-    symbol:     MSFT
-    price:      30.6
-    change:     0.15
-    ratio:      0.49
-  - name:       Oracle
-    name2:      Oracle Corp.
-    url:        http://www.oracle.com
-    symbol:     ORCL
-    price:      17.15
-    change:     0.17
-    ratio:      1.0
-  - name:       SAP
-    name2:      SAP AG
-    url:        http://www.sap.com
-    symbol:     SAP
-    price:      46.2
-    change:     -0.16
-    ratio:      -0.35
-  - name:       Seagate Technology
-    name2:      Seagate Technology
-    url:        http://www.seagate.com/
-    symbol:     STX
-    price:      27.35
-    change:     -0.36
-    ratio:      -1.3
-  - name:       Sun Microsystems
-    name2:      Sun Microsystems Inc.
-    url:        http://www.sun.com
-    symbol:     SUNW
-    price:      6.33
-    change:     -0.01
-    ratio:      -0.16
-  - name:       Yahoo
-    name2:      Yahoo! Inc.
-    url:        http://www.yahoo.com
-    symbol:     YHOO
-    price:      28.04
-    change:     -0.17
-    ratio:      -0.6
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/_footer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/_footer.html
deleted file mode 100644
index 3ae6d4d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/_footer.html
+++ /dev/null
@@ -1,4 +0,0 @@
-  </table>
-
- </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/_header.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/_header.html
deleted file mode 100644
index cbab956..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/_header.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
-  <title>Stock Prices</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-  <meta http-equiv="Content-Style-Type" content="text/css" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="shortcut icon" href="/images/favicon.ico" />
-  <link rel="stylesheet" type="text/css" href="/css/style.css" media="all" />
-  <script type="text/javascript" src="/js/util.js"></script>
-  <style type="text/css">
-  /*<![CDATA[*/
-
-body {
-    color: #333333;
-    line-height: 150%;
-}
-
-thead {
-    font-weight: bold;
-    background-color: #CCCCCC;
-}
-
-.odd {
-    background-color: #FFCCCC;
-}
-
-.even {
-    background-color: #CCCCFF;
-}
-
-.minus {
-    color: #FF0000;
-}
-
-  /*]]>*/
-  </style>
-
- </head>
-
- <body>
-
-  <h1>Stock Prices</h1>
-
-  <table>
-   <thead>
-    <tr>
-     <th>#</th><th>symbol</th><th>name</th><th>price</th><th>change</th><th>ratio</th>
-    </tr>
-   </thead>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_erb.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_erb.rhtml
deleted file mode 100644
index 3dde9d5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_erb.rhtml
+++ /dev/null
@@ -1,29 +0,0 @@
-   <tbody>
-<%
-n = 0
-for item in list
-    n += 1
- %>
-    <tr class="<%= n % 2 == 0 ? 'even' : 'odd' %>">
-     <td style="text-align: center"><%= n %></td>
-     <td>
-      <a href="/stocks/<%= item['symbol'] %>"><%= item['symbol'] %></a>
-     </td>
-     <td>
-      <a href="<%= item['url'] %>"><%= item['name'] %></a>
-     </td>
-     <td>
-      <strong><%= item['price'] %></strong>
-     </td>
-<% if item['change'] < 0.0 %>
-     <td class="minus"><%= item['change'] %></td>
-     <td class="minus"><%= item['ratio'] %></td>
-<% else %>
-     <td><%= item['change'] %></td>
-     <td><%= item['ratio'] %></td>
-<% end %>
-    </tr>
-<%
-end
- %>
-   </tbody>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_erubis.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_erubis.rhtml
deleted file mode 100644
index 3dde9d5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_erubis.rhtml
+++ /dev/null
@@ -1,29 +0,0 @@
-   <tbody>
-<%
-n = 0
-for item in list
-    n += 1
- %>
-    <tr class="<%= n % 2 == 0 ? 'even' : 'odd' %>">
-     <td style="text-align: center"><%= n %></td>
-     <td>
-      <a href="/stocks/<%= item['symbol'] %>"><%= item['symbol'] %></a>
-     </td>
-     <td>
-      <a href="<%= item['url'] %>"><%= item['name'] %></a>
-     </td>
-     <td>
-      <strong><%= item['price'] %></strong>
-     </td>
-<% if item['change'] < 0.0 %>
-     <td class="minus"><%= item['change'] %></td>
-     <td class="minus"><%= item['ratio'] %></td>
-<% else %>
-     <td><%= item['change'] %></td>
-     <td><%= item['ratio'] %></td>
-<% end %>
-    </tr>
-<%
-end
- %>
-   </tbody>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_eruby.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_eruby.rhtml
deleted file mode 100644
index 3dde9d5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/benchmark/templates/bench_eruby.rhtml
+++ /dev/null
@@ -1,29 +0,0 @@
-   <tbody>
-<%
-n = 0
-for item in list
-    n += 1
- %>
-    <tr class="<%= n % 2 == 0 ? 'even' : 'odd' %>">
-     <td style="text-align: center"><%= n %></td>
-     <td>
-      <a href="/stocks/<%= item['symbol'] %>"><%= item['symbol'] %></a>
-     </td>
-     <td>
-      <a href="<%= item['url'] %>"><%= item['name'] %></a>
-     </td>
-     <td>
-      <strong><%= item['price'] %></strong>
-     </td>
-<% if item['change'] < 0.0 %>
-     <td class="minus"><%= item['change'] %></td>
-     <td class="minus"><%= item['ratio'] %></td>
-<% else %>
-     <td><%= item['change'] %></td>
-     <td><%= item['ratio'] %></td>
-<% end %>
-    </tr>
-<%
-end
- %>
-   </tbody>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/bin/erubis b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/bin/erubis
deleted file mode 100755
index c1e8389..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/bin/erubis
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/ruby
-
-###
-### $Rev: 77 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-require 'erubis/main'
-
-Erubis::Main.main(ARGV)
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/erubis b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/erubis
deleted file mode 100755
index c1e8389..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/erubis
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/ruby
-
-###
-### $Rev: 77 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-require 'erubis/main'
-
-Erubis::Main.main(ARGV)
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/erubis-run.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/erubis-run.rb
deleted file mode 100644
index 44be6d4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/erubis-run.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-=begin
-
-= apache/erubis-run.rb
-
-Copyright (C) 2007 Andrew R Jackson <arjackson at acm dot org>
-
-Built from original by Shugo Maeda:
-Copyright (C) 2001 Shugo Maeda <shugo at modruby.net>
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-  notice, this list of conditions and the following disclaimer in the
-  documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WAreqANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WAreqANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTEreqUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
-== Overview
-
-Apache::ErubisRun handles eRuby files with erubis
-
-== Example of httpd.conf
-
- RubyRequire apache/erubis-run
- <Location /eruby>
- SetHandler ruby-object
- RubyHandler Apache::ErubisRun.instance
- </Location>
-
-=end
-
-require "singleton"
-require "tempfile"
-require "eruby"   # Still needed to bring in a couple useful helper methods
-require "erubis"
-
-module Erubis
- @@cgi = nil
-
- def self.cgi
-   return @@cgi
- end
-
- def self.cgi=(cgi)
-   @@cgi = cgi
- end
-end
-
-module Apache
- class ErubisRun
-   include Singleton
-
-   def handler(req)
-     status = check_request(req)
-     return status if(status != OK)
-
-     filename = req.filename.dup
-     filename.untaint
-     erubis = compile(filename)
-     prerun(req)
-     begin
-       run(erubis, filename)
-     ensure
-       postrun(req)
-     end
-
-     return OK
-   end
-
-   private
-
-   def initialize
-     @compiler = nil
-   end
-
-   def check_request(req)
-     if(req.method_number == M_OPTIONS)
-       req.allowed |= (1 << M_GET)
-       req.allowed |= (1 << M_POST)
-       return DECLINED
-     end
-     if(req.finfo.mode == 0)
-       return NOT_FOUND
-     end
-     return OK
-   end
-
-   def compile(filename)
-     @compiler = Erubis::Eruby.load_file(filename) # use caching version as much as possible
-     return @compiler
-   end
-
-   def prerun(req)
-     Erubis.cgi = nil
-     req.setup_cgi_env
-     Apache.chdir_file(req.filename)
-   end
-
-   def run(erubis, filename)
-     binding = eval_string_wrap("binding")
-     puts erubis.result(binding) # eval the code in the context of the same binding ERuby uses
-   end
-
-   def postrun(req)
-     if(cgi = Erubis.cgi)
-       # TODO: pull the content type header from the cgi object, if set there?
-     elsif(req.sync_output or req.sync_header)
-       # Do nothing: header has already been sent
-     else
-       unless(req.content_type)
-         req.content_type = format("text/html;")
-       end
-       req.send_http_header
-     end
-   end
- end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/inline-require b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/inline-require
deleted file mode 100755
index ac7a098..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/contrib/inline-require
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/env ruby
-
-###
-### inline-require - expand 'require "foo"' into inline code
-###
-### usage: inline-require [-h] [-I path[,path2,..]] script
-###
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-### 2.6.2
-### $Rev: 2 $
-###
-
-
-class InlineRequire
-
-   def expand(filename)
-      sbuf = ''
-      inlined = []
-      level = 0
-      expand_require(filename, sbuf, inlined, level)
-      return sbuf
-   end
-
-   private
-
-   def expand_require(filename, sbuf, inlined, level)
-      raise "*** assertion error" if inlined.include?(filename)
-      inlined << filename
-      prog = File.read(filename)
-      n = 0
-      flag_if_file = false
-      prog.each_line do |line|
-         n += 1
-
-         ## comment out from 'if __FILE__ == $0' to 'end'
-         if level > 0
-            if flag_if_file
-               sbuf << "#" << line
-               flag_if_file = false if line =~ /^end$/
-               next
-            end
-            if line =~ /^if\s+__FILE__\s*==\s*\$0(\s+then)?$/ || line =~ /^if\s+\$0\s*==\s*__FILE__(\s+then)?$/
-               flag_if_file = true
-               sbuf << "#" << line
-               next
-            end
-         end
-
-         ## find 'require "foo"' and expand it to inline code
-         flag_inline = false
-         if line =~ /^\s*require ['"](.*)["']\s*$/
-            libname = $1
-            libpath = find_library(libname)
-            $stderr.puts "*** debug: libpath=#{libpath.inspect}" if $debug_mode
-            unless libpath
-               #raise "file '#{filename}'(line #{n}): library '#{libname}' not found."
-               warn "file '#{filename}'(line #{n}): library '#{libname}' not found."
-            else
-              flag_inline = true if libpath =~ /\.rb$/ && local_library?(libpath)
-            end
-         end
-         if !flag_inline
-            sbuf << line
-         elsif inlined.include?(libpath)
-            sbuf << "#--already included #{line}"
-         else
-            sbuf << "#--begin of #{line}"
-            expand_require(libpath, sbuf, inlined, level+1)
-            sbuf << "#--end of #{line}"
-         end
-      end
-      #sbuf << "\n" if sbuf[-1] != ?\n
-   end
-
-   def local_library?(libpath)
-      return libpath !~ /^\//
-   end
-
-   def find_library(libname)
-      if libname =~ /^\.rb$/
-         libname_rb = libname
-         libname_so = nil
-      elsif libname =~ /^\.so$/
-         libname_rb = nil
-         libname_so = libname
-      else
-         libname_rb = libname + ".rb"
-         libname_so = libname + ".so"
-      end
-      $LOAD_PATH.each do |path|
-         if libname_rb
-            libpath = path + "/" + libname_rb
-            return libpath if test(?f, libpath)
-         end
-         if libname_so
-            libpath = path + "/" + libname_so
-            return libpath if test(?f, libpath)
-         end
-      end
-      return nil
-   end
-
-end
-
-if __FILE__ == $0
-
-   begin
-      rubylib_paths = []
-      flag_help = false
-      while ARGV[0] && ARGV[0][0] == ?-
-         opt = ARGV.shift
-         case opt
-         when '-h', '--help'
-            flag_help = true
-         when '-I'
-            arg = ARGV.shift
-            raise "-I: library path required." unless arg
-            rubylib_paths.concat(arg.split(/,/))
-         when '-D'
-            $debug_mode = true
-         else
-            raise "#{opt}: invalid option."
-         end
-      end
-
-      if flag_help
-         command = File.basename($0)
-         puts "Usage: #{command} [-h] [-I path[,path2,..]] script"
-         puts "  -h                   : help"
-         puts "  -I path[,path2,...]  : ruby library path"
-         exit(0)
-      end
-
-      $stderr.puts "*** debug: rubylib_paths=#{rubylib_paths.inspect}" if $debug_mode
-      $LOAD_PATH.concat(rubylib_paths)
-
-      filenames = ARGV
-
-      inline_require = InlineRequire.new
-      filenames.each do |filename|
-         print inline_require.expand(filename)
-      end
-
-   rescue => ex
-      if $debug_mode
-         raise ex
-      else
-         $stderr.puts ex.message
-      end
-
-   end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ActionView.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ActionView.html
deleted file mode 100644
index 2f9e153..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ActionView.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: ActionView</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">ActionView</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../files/erubis/helpers/rails_helper_rb.html">
-                erubis/helpers/rails_helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ActionView/TemplateHandlers/ErubisHandler.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ActionView/TemplateHandlers/ErubisHandler.html
deleted file mode 100644
index e6a866f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ActionView/TemplateHandlers/ErubisHandler.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: ActionView::TemplateHandlers::ErubisHandler</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">ActionView::TemplateHandlers::ErubisHandler</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/helpers/rails_helper_rb.html">
-                erubis/helpers/rails_helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                TemplateHandler
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000001">compile</a>  
-      <a href="#M000002">compile</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name">Compilable</span>
-        <span class="include-name"><a href="../../Erubis/Helpers/RailsHelper/TemplateConverter.html">Erubis::Helpers::RailsHelper::TemplateConverter</a></span>
-        <span class="include-name"><a href="../../Erubis/PreprocessingHelper.html">Erubis::PreprocessingHelper</a></span>
-        <span class="include-name"><a href="../../Erubis/Helpers/RailsHelper/TemplateConverter.html">Erubis::Helpers::RailsHelper::TemplateConverter</a></span>
-        <span class="include-name"><a href="../../Erubis/PreprocessingHelper.html">Erubis::PreprocessingHelper</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000001" class="method-detail">
-        <a name="M000001"></a>
-
-        <div class="method-heading">
-          <a href="#M000001" class="method-signature">
-          <span class="method-name">compile</span><span class="method-args">(template)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000001-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 150</span>
-          <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">compile</span>(<span class="ruby-identifier">template</span>)
-            <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_convert_template</span>(<span class="ruby-identifier">template</span>.<span class="ruby-identifier">source</span>)   <span class="ruby-comment cmt"># template.is_a?(ActionView::Template)</span>
-          <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000002" class="method-detail">
-        <a name="M000002"></a>
-
-        <div class="method-heading">
-          <a href="#M000002" class="method-signature">
-          <span class="method-name">compile</span><span class="method-args">(template)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000002-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 180</span>
-          <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">compile</span>(<span class="ruby-identifier">template</span>)
-            <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_convert_template</span>(<span class="ruby-identifier">template</span>)     <span class="ruby-comment cmt"># template.is_a?(String)</span>
-          <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ERB.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ERB.html
deleted file mode 100644
index 93ade5a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/ERB.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: ERB</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">ERB</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis.html
deleted file mode 100644
index 854974e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis.html
+++ /dev/null
@@ -1,353 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../files/erubis/context_rb.html">
-                erubis/context.rb
-                </a>
-        <br />
-                <a href="../files/erubis/converter_rb.html">
-                erubis/converter.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/ec_rb.html">
-                erubis/engine/ec.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/ejava_rb.html">
-                erubis/engine/ejava.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/ejavascript_rb.html">
-                erubis/engine/ejavascript.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/eperl_rb.html">
-                erubis/engine/eperl.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/ephp_rb.html">
-                erubis/engine/ephp.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/eruby_rb.html">
-                erubis/engine/eruby.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/escheme_rb.html">
-                erubis/engine/escheme.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine/optimized_rb.html">
-                erubis/engine/optimized.rb
-                </a>
-        <br />
-                <a href="../files/erubis/engine_rb.html">
-                erubis/engine.rb
-                </a>
-        <br />
-                <a href="../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-                <a href="../files/erubis/error_rb.html">
-                erubis/error.rb
-                </a>
-        <br />
-                <a href="../files/erubis/evaluator_rb.html">
-                erubis/evaluator.rb
-                </a>
-        <br />
-                <a href="../files/erubis/generator_rb.html">
-                erubis/generator.rb
-                </a>
-        <br />
-                <a href="../files/erubis/helper_rb.html">
-                erubis/helper.rb
-                </a>
-        <br />
-                <a href="../files/erubis/helpers/rails_form_helper_rb.html">
-                erubis/helpers/rails_form_helper.rb
-                </a>
-        <br />
-                <a href="../files/erubis/helpers/rails_helper_rb.html">
-                erubis/helpers/rails_helper.rb
-                </a>
-        <br />
-                <a href="../files/erubis/main_rb.html">
-                erubis/main.rb
-                </a>
-        <br />
-                <a href="../files/erubis/preprocessing_rb.html">
-                erubis/preprocessing.rb
-                </a>
-        <br />
-                <a href="../files/erubis/tiny_rb.html">
-                erubis/tiny.rb
-                </a>
-        <br />
-                <a href="../files/erubis_rb.html">
-                erubis.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-an implementation of eRuby
-</p>
-<p>
-ex.
-</p>
-<pre>
-  input = <<'END'
-   <ul>
-    <% for item in @list %>
-     <li><%= item %>
-         <%== item %></li>
-    <% end %>
-   </ul>
-  END
-  list = ['<aaa>', 'b&b', '"ccc"']
-  eruby = Erubis::Eruby.new(input)
-  puts "--- code ---"
-  puts eruby.src
-  puts "--- result ---"
-  context = Erubis::Context.new()   # or new(:list=>list)
-  context[:list] = list
-  puts eruby.evaluate(context)
-</pre>
-<p>
-result:
-</p>
-<pre>
-  --- source ---
-  _buf = ''; _buf << '<ul>
-  ';  for item in @list
-   _buf << '  <li>'; _buf << ( item ).to_s; _buf << '
-  '; _buf << '      '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</li>
-  ';  end
-   _buf << '</ul>
-  ';
-  _buf.to_s
-  --- result ---
-   <ul>
-     <li><aaa>
-         &lt;aaa&gt;</li>
-     <li>b&b
-         b&amp;b</li>
-     <li>"ccc"
-         &quot;ccc&quot;</li>
-   </ul>
-</pre>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-    <div id="class-list">
-      <h3 class="section-bar">Classes and Modules</h3>
-
-      Module <a href="Erubis/ArrayBufferEnhancer.html" class="link">Erubis::ArrayBufferEnhancer</a><br />
-Module <a href="Erubis/ArrayEnhancer.html" class="link">Erubis::ArrayEnhancer</a><br />
-Module <a href="Erubis/Basic.html" class="link">Erubis::Basic</a><br />
-Module <a href="Erubis/BiPatternEnhancer.html" class="link">Erubis::BiPatternEnhancer</a><br />
-Module <a href="Erubis/CGenerator.html" class="link">Erubis::CGenerator</a><br />
-Module <a href="Erubis/Converter.html" class="link">Erubis::Converter</a><br />
-Module <a href="Erubis/DeleteIndentEnhancer.html" class="link">Erubis::DeleteIndentEnhancer</a><br />
-Module <a href="Erubis/ErboutEnhancer.html" class="link">Erubis::ErboutEnhancer</a><br />
-Module <a href="Erubis/EscapeEnhancer.html" class="link">Erubis::EscapeEnhancer</a><br />
-Module <a href="Erubis/Evaluator.html" class="link">Erubis::Evaluator</a><br />
-Module <a href="Erubis/Generator.html" class="link">Erubis::Generator</a><br />
-Module <a href="Erubis/HeaderFooterEnhancer.html" class="link">Erubis::HeaderFooterEnhancer</a><br />
-Module <a href="Erubis/Helpers.html" class="link">Erubis::Helpers</a><br />
-Module <a href="Erubis/InterpolationEnhancer.html" class="link">Erubis::InterpolationEnhancer</a><br />
-Module <a href="Erubis/JavaGenerator.html" class="link">Erubis::JavaGenerator</a><br />
-Module <a href="Erubis/JavascriptGenerator.html" class="link">Erubis::JavascriptGenerator</a><br />
-Module <a href="Erubis/NoCodeEnhancer.html" class="link">Erubis::NoCodeEnhancer</a><br />
-Module <a href="Erubis/NoTextEnhancer.html" class="link">Erubis::NoTextEnhancer</a><br />
-Module <a href="Erubis/OptimizedGenerator.html" class="link">Erubis::OptimizedGenerator</a><br />
-Module <a href="Erubis/PI.html" class="link">Erubis::PI</a><br />
-Module <a href="Erubis/PercentLineEnhancer.html" class="link">Erubis::PercentLineEnhancer</a><br />
-Module <a href="Erubis/PerlGenerator.html" class="link">Erubis::PerlGenerator</a><br />
-Module <a href="Erubis/PhpGenerator.html" class="link">Erubis::PhpGenerator</a><br />
-Module <a href="Erubis/PreprocessingHelper.html" class="link">Erubis::PreprocessingHelper</a><br />
-Module <a href="Erubis/PrintEnabledEnhancer.html" class="link">Erubis::PrintEnabledEnhancer</a><br />
-Module <a href="Erubis/PrintOutEnhancer.html" class="link">Erubis::PrintOutEnhancer</a><br />
-Module <a href="Erubis/RubyEvaluator.html" class="link">Erubis::RubyEvaluator</a><br />
-Module <a href="Erubis/RubyGenerator.html" class="link">Erubis::RubyGenerator</a><br />
-Module <a href="Erubis/SchemeGenerator.html" class="link">Erubis::SchemeGenerator</a><br />
-Module <a href="Erubis/SimplifyEnhancer.html" class="link">Erubis::SimplifyEnhancer</a><br />
-Module <a href="Erubis/StdoutEnhancer.html" class="link">Erubis::StdoutEnhancer</a><br />
-Module <a href="Erubis/StringBufferEnhancer.html" class="link">Erubis::StringBufferEnhancer</a><br />
-Module <a href="Erubis/XmlHelper.html" class="link">Erubis::XmlHelper</a><br />
-Class <a href="Erubis/ArrayBufferEruby.html" class="link">Erubis::ArrayBufferEruby</a><br />
-Class <a href="Erubis/ArrayEruby.html" class="link">Erubis::ArrayEruby</a><br />
-Class <a href="Erubis/BiPatternEruby.html" class="link">Erubis::BiPatternEruby</a><br />
-Class <a href="Erubis/CommandOptionError.html" class="link">Erubis::CommandOptionError</a><br />
-Class <a href="Erubis/Context.html" class="link">Erubis::Context</a><br />
-Class <a href="Erubis/DeleteIndentEruby.html" class="link">Erubis::DeleteIndentEruby</a><br />
-Class <a href="Erubis/Ec.html" class="link">Erubis::Ec</a><br />
-Class <a href="Erubis/Ejava.html" class="link">Erubis::Ejava</a><br />
-Class <a href="Erubis/Ejavascript.html" class="link">Erubis::Ejavascript</a><br />
-Class <a href="Erubis/Engine.html" class="link">Erubis::Engine</a><br />
-Class <a href="Erubis/Eperl.html" class="link">Erubis::Eperl</a><br />
-Class <a href="Erubis/Ephp.html" class="link">Erubis::Ephp</a><br />
-Class <a href="Erubis/ErboutEruby.html" class="link">Erubis::ErboutEruby</a><br />
-Class <a href="Erubis/ErubisError.html" class="link">Erubis::ErubisError</a><br />
-Class <a href="Erubis/Eruby.html" class="link">Erubis::Eruby</a><br />
-Class <a href="Erubis/EscapedEc.html" class="link">Erubis::EscapedEc</a><br />
-Class <a href="Erubis/EscapedEjava.html" class="link">Erubis::EscapedEjava</a><br />
-Class <a href="Erubis/EscapedEjavascript.html" class="link">Erubis::EscapedEjavascript</a><br />
-Class <a href="Erubis/EscapedEperl.html" class="link">Erubis::EscapedEperl</a><br />
-Class <a href="Erubis/EscapedEphp.html" class="link">Erubis::EscapedEphp</a><br />
-Class <a href="Erubis/EscapedEruby.html" class="link">Erubis::EscapedEruby</a><br />
-Class <a href="Erubis/EscapedEscheme.html" class="link">Erubis::EscapedEscheme</a><br />
-Class <a href="Erubis/Escheme.html" class="link">Erubis::Escheme</a><br />
-Class <a href="Erubis/FastEruby.html" class="link">Erubis::FastEruby</a><br />
-Class <a href="Erubis/HeaderFooterEruby.html" class="link">Erubis::HeaderFooterEruby</a><br />
-Class <a href="Erubis/InterpolationEruby.html" class="link">Erubis::InterpolationEruby</a><br />
-Class <a href="Erubis/Main.html" class="link">Erubis::Main</a><br />
-Class <a href="Erubis/NoCodeEruby.html" class="link">Erubis::NoCodeEruby</a><br />
-Class <a href="Erubis/NoTextEruby.html" class="link">Erubis::NoTextEruby</a><br />
-Class <a href="Erubis/NotSupportedError.html" class="link">Erubis::NotSupportedError</a><br />
-Class <a href="Erubis/OptimizedEruby.html" class="link">Erubis::OptimizedEruby</a><br />
-Class <a href="Erubis/OptimizedXmlEruby.html" class="link">Erubis::OptimizedXmlEruby</a><br />
-Class <a href="Erubis/PercentLineEruby.html" class="link">Erubis::PercentLineEruby</a><br />
-Class <a href="Erubis/PreprocessingEruby.html" class="link">Erubis::PreprocessingEruby</a><br />
-Class <a href="Erubis/PrintEnabledEruby.html" class="link">Erubis::PrintEnabledEruby</a><br />
-Class <a href="Erubis/PrintOutEruby.html" class="link">Erubis::PrintOutEruby</a><br />
-Class <a href="Erubis/PrintOutSimplifiedEruby.html" class="link">Erubis::PrintOutSimplifiedEruby</a><br />
-Class <a href="Erubis/SimplifiedEruby.html" class="link">Erubis::SimplifiedEruby</a><br />
-Class <a href="Erubis/StdoutEruby.html" class="link">Erubis::StdoutEruby</a><br />
-Class <a href="Erubis/StdoutSimplifiedEruby.html" class="link">Erubis::StdoutSimplifiedEruby</a><br />
-Class <a href="Erubis/StringBufferEruby.html" class="link">Erubis::StringBufferEruby</a><br />
-Class <a href="Erubis/StringIOEruby.html" class="link">Erubis::StringIOEruby</a><br />
-Class <a href="Erubis/TinyEruby.html" class="link">Erubis::TinyEruby</a><br />
-Class <a href="Erubis/XmlEruby.html" class="link">Erubis::XmlEruby</a><br />
-
-    </div>
-
-    <div id="constants-list">
-      <h3 class="section-bar">Constants</h3>
-
-      <div class="name-list">
-        <table summary="Constants">
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">EMPTY_BINDING</td>
-          <td>=</td>
-          <td class="context-item-value">binding()</td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">Ejs</td>
-          <td>=</td>
-          <td class="context-item-value">Ejavascript</td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">EscapedEjs</td>
-          <td>=</td>
-          <td class="context-item-value">EscapedEjavascript</td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">VERSION</td>
-          <td>=</td>
-          <td class="context-item-value">('$Release: 2.6.2 $' =~ /([.\d]+)/) && $1</td>
-        </tr>
-        </table>
-      </div>
-    </div>
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayBufferEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayBufferEnhancer.html
deleted file mode 100644
index c9b837a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayBufferEnhancer.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::ArrayBufferEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::ArrayBufferEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-use an Array object as buffer (included in <a href="Eruby.html">Eruby</a>
-by default)
-</p>
-<p>
-this is only for <a href="Eruby.html">Eruby</a>.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000009">add_postamble</a>  
-      <a href="#M000008">add_preamble</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000009" class="method-detail">
-        <a name="M000009"></a>
-
-        <div class="method-heading">
-          <a href="#M000009" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000009-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 192</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf.join\n"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000008" class="method-detail">
-        <a name="M000008"></a>
-
-        <div class="method-heading">
-          <a href="#M000008" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000008-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 188</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf = [];"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayBufferEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayBufferEruby.html
deleted file mode 100644
index e4ee23a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayBufferEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::ArrayBufferEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::ArrayBufferEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="ArrayBufferEnhancer.html">ArrayBufferEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayEnhancer.html
deleted file mode 100644
index 06d91c0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayEnhancer.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::ArrayEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::ArrayEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-return array instead of string
-</p>
-<p>
-this is only for <a href="Eruby.html">Eruby</a>.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000193">add_postamble</a>  
-      <a href="#M000192">add_preamble</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000193" class="method-detail">
-        <a name="M000193"></a>
-
-        <div class="method-heading">
-          <a href="#M000193" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000193-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000193-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 169</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf\n"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000192" class="method-detail">
-        <a name="M000192"></a>
-
-        <div class="method-heading">
-          <a href="#M000192" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000192-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000192-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 165</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf = [];"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayEruby.html
deleted file mode 100644
index 6d0c5d7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ArrayEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::ArrayEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::ArrayEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="ArrayEnhancer.html">ArrayEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic.html
deleted file mode 100644
index 068332e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Basic</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Basic</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/converter_rb.html">
-                erubis/converter.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-    <div id="class-list">
-      <h3 class="section-bar">Classes and Modules</h3>
-
-      Module <a href="Basic/Converter.html" class="link">Erubis::Basic::Converter</a><br />
-Class <a href="Basic/Engine.html" class="link">Erubis::Basic::Engine</a><br />
-
-    </div>
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic/Converter.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic/Converter.html
deleted file mode 100644
index 09ca7f2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic/Converter.html
+++ /dev/null
@@ -1,327 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Basic::Converter</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Basic::Converter</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/converter_rb.html">
-                erubis/converter.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-basic converter which supports ’<% … %>’ notation.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000061">add_expr</a>  
-      <a href="#M000060">convert_input</a>  
-      <a href="#M000058">init_converter</a>  
-      <a href="#M000059">pattern_regexp</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../Converter.html">Erubis::Converter</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-    <div id="constants-list">
-      <h3 class="section-bar">Constants</h3>
-
-      <div class="name-list">
-        <table summary="Constants">
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">DEFAULT_REGEXP</td>
-          <td>=</td>
-          <td class="context-item-value">pattern_regexp('<% %>')</td>
-          <td width="3em"> </td>
-          <td class="context-item-desc">
-DEFAULT_REGEXP = /(.*?)(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
-DEFAULT_REGEXP = /(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
-DEFAULT_REGEXP = /<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
-
-</td>
-        </tr>
-        </table>
-      </div>
-    </div>
-
-
-
-    <div id="attribute-list">
-      <h3 class="section-bar">Attributes</h3>
-
-      <div class="name-list">
-        <table>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">pattern</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">trim</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        </table>
-      </div>
-    </div>
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000061" class="method-detail">
-        <a name="M000061"></a>
-
-        <div class="method-heading">
-          <a href="#M000061" class="method-signature">
-          <span class="method-name">add_expr</span><span class="method-args">(src, code, indicator)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-add expression code to src
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000061-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000061-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 177</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">indicator</span>)
-      <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">indicator</span>
-      <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'='</span>
-        <span class="ruby-ivar">@escape</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>) <span class="ruby-operator">:</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'=='</span>
-        <span class="ruby-ivar">@escape</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>) <span class="ruby-operator">:</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'==='</span>
-        <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000060" class="method-detail">
-        <a name="M000060"></a>
-
-        <div class="method-heading">
-          <a href="#M000060" class="method-signature">
-          <span class="method-name">convert_input</span><span class="method-args">(src, input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000060-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000060-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 128</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert_input</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">pat</span> = <span class="ruby-ivar">@pattern</span>
-      <span class="ruby-identifier">regexp</span> = <span class="ruby-identifier">pat</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">pat</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'<% %>'</span> <span class="ruby-operator">?</span> <span class="ruby-constant">DEFAULT_REGEXP</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pattern_regexp</span>(<span class="ruby-identifier">pat</span>)
-      <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">is_bol</span> = <span class="ruby-keyword kw">true</span>     <span class="ruby-comment cmt"># is beginning of line</span>
-      <span class="ruby-identifier">input</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">regexp</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">indicator</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">tailch</span>, <span class="ruby-identifier">rspace</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">match</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>()
-        <span class="ruby-identifier">len</span>  = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">begin</span>(<span class="ruby-value">0</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">pos</span>
-        <span class="ruby-identifier">text</span> = <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">len</span>]
-        <span class="ruby-identifier">pos</span>  = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)
-        <span class="ruby-identifier">ch</span>   = <span class="ruby-identifier">indicator</span> <span class="ruby-value">? </span><span class="ruby-identifier">indicator</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
-        <span class="ruby-identifier">lspace</span> = <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-value">?=</span> <span class="ruby-operator">?</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">detect_spaces_at_bol</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">is_bol</span>)
-        <span class="ruby-identifier">is_bol</span> = <span class="ruby-identifier">rspace</span> <span class="ruby-value">? </span><span class="ruby-keyword kw">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">false</span>
-        <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-        <span class="ruby-comment cmt">## * when '<%= %>', do nothing</span>
-        <span class="ruby-comment cmt">## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'</span>
-        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-value">?=</span>              <span class="ruby-comment cmt"># <%= %></span>
-          <span class="ruby-identifier">rspace</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tailch</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">tailch</span>.<span class="ruby-identifier">empty?</span>
-          <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">lspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span>
-          <span class="ruby-identifier">add_expr</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">indicator</span>)
-          <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rspace</span>
-        <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-value">?\#</span>          <span class="ruby-comment cmt"># <%# %></span>
-          <span class="ruby-identifier">n</span> = <span class="ruby-identifier">code</span>.<span class="ruby-identifier">count</span>(<span class="ruby-value str">"\n"</span>) <span class="ruby-operator">+</span> (<span class="ruby-identifier">rspace</span> <span class="ruby-value">? </span><span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span>)
-          <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@trim</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">lspace</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span>
-            <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">n</span>)
-          <span class="ruby-keyword kw">else</span>
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">lspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span>
-            <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">n</span>)
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rspace</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-value">?%</span>           <span class="ruby-comment cmt"># <%% %></span>
-          <span class="ruby-identifier">s</span> = <span class="ruby-node">"#{lspace}#{@prefix||='<%'}#{code}#{tailch}#{@postfix||='%>'}#{rspace}"</span>
-          <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">s</span>)
-        <span class="ruby-keyword kw">else</span>                     <span class="ruby-comment cmt"># <% %></span>
-          <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@trim</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">lspace</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span>
-            <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-node">"#{lspace}#{code}#{rspace}"</span>)
-          <span class="ruby-keyword kw">else</span>
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">lspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span>
-            <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rspace</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = $' || input                        # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">pos</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">input</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]   <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rest</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000058" class="method-detail">
-        <a name="M000058"></a>
-
-        <div class="method-heading">
-          <a href="#M000058" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000058-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000058-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 104</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-      <span class="ruby-ivar">@pattern</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:pattern</span>]
-      <span class="ruby-ivar">@trim</span>    = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:trim</span>] <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">false</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Protected Instance methods</h3>
-
-      <div id="method-M000059" class="method-detail">
-        <a name="M000059"></a>
-
-        <div class="method-heading">
-          <a href="#M000059" class="method-signature">
-          <span class="method-name">pattern_regexp</span><span class="method-args">(pattern)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-return regexp of pattern to parse eRuby script
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000059-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000059-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 113</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pattern_regexp</span>(<span class="ruby-identifier">pattern</span>)
-      <span class="ruby-ivar">@prefix</span>, <span class="ruby-ivar">@postfix</span> = <span class="ruby-identifier">pattern</span>.<span class="ruby-identifier">split</span>()   <span class="ruby-comment cmt"># '<% %>' => '<%', '%>'</span>
-      <span class="ruby-comment cmt">#return /(.*?)(^[ \t]*)?#{@prefix}(=+|\#)?(.*?)-?#{@postfix}([ \t]*\r?\n)?/m</span>
-      <span class="ruby-comment cmt">#return /(^[ \t]*)?#{@prefix}(=+|\#)?(.*?)-?#{@postfix}([ \t]*\r?\n)?/m</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-node">/#{@prefix}(=+|-|\#|%)?(.*?)([-=])?#{@postfix}([ \t]*\r?\n)?/</span><span class="ruby-identifier">m</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic/Engine.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic/Engine.html
deleted file mode 100644
index 3562b6f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Basic/Engine.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Basic::Engine</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Basic::Engine</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine_rb.html">
-                erubis/engine.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Engine.html">
-                Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-(abstract) base engine class for <a href="../Eruby.html">Eruby</a>, <a
-href="../Eperl.html">Eperl</a>, <a href="../Ejava.html">Ejava</a>, and so
-on. subclass must include generator.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../Evaluator.html">Evaluator</a></span>
-        <span class="include-name"><a href="Converter.html">Basic::Converter</a></span>
-        <span class="include-name"><a href="../Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/BiPatternEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/BiPatternEnhancer.html
deleted file mode 100644
index 65a5fd9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/BiPatternEnhancer.html
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::BiPatternEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::BiPatternEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-enable to use other embedded expression pattern (default is ’\[=
-=\]’).
-</p>
-<p>
-notice! this is an experimental. spec may change in the future.
-</p>
-<p>
-ex.
-</p>
-<pre>
-  input = <<END
-  <% for item in list %>
-    <%= item %> : <%== item %>
-    [= item =] : [== item =]
-  <% end %>
-  END
-
-  class BiPatternEruby
-    include BiPatternEnhancer
-  end
-  eruby = BiPatternEruby.new(input, :bipattern=>'\[= =\]')
-  list = ['<a>', 'b&b', '"c"']
-  print eruby.result(binding())
-
-  ## output
-    <a> : &lt;a&gt;
-    <a> : &lt;a&gt;
-    b&b : b&amp;b
-    b&b : b&amp;b
-    "c" : &quot;c&quot;
-    "c" : &quot;c&quot;
-</pre>
-<p>
-this is language independent.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000165">add_text</a>  
-      <a href="#M000164">new</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Class methods</h3>
-
-      <div id="method-M000164" class="method-detail">
-        <a name="M000164"></a>
-
-        <div class="method-heading">
-          <a href="#M000164" class="method-signature">
-          <span class="method-name">new</span><span class="method-args">(input, properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000164-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000164-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 409</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">input</span>, <span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">bipattern</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:bipattern</span>]    <span class="ruby-comment cmt"># or '\$\{ \}'</span>
-      <span class="ruby-keyword kw">super</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000165" class="method-detail">
-        <a name="M000165"></a>
-
-        <div class="method-heading">
-          <a href="#M000165" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000165-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000165-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 421</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>
-      <span class="ruby-identifier">m</span> = <span class="ruby-keyword kw">nil</span>
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-ivar">@bipattern_regexp</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">txt</span>, <span class="ruby-identifier">indicator</span>, <span class="ruby-identifier">code</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">m</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>
-        <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">txt</span>)
-        <span class="ruby-identifier">add_expr</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>, <span class="ruby-value str">'='</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">indicator</span>)
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = $' || text                    # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">m</span> <span class="ruby-value">? </span><span class="ruby-identifier">text</span>[<span class="ruby-identifier">m</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)<span class="ruby-operator">..</span><span class="ruby-value">-1</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">text</span>  <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rest</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/BiPatternEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/BiPatternEruby.html
deleted file mode 100644
index 802420e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/BiPatternEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::BiPatternEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::BiPatternEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="BiPatternEnhancer.html">BiPatternEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/CGenerator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/CGenerator.html
deleted file mode 100644
index 59ef2e9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/CGenerator.html
+++ /dev/null
@@ -1,386 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::CGenerator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::CGenerator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ec_rb.html">
-                erubis/engine/ec.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000162">add_expr_debug</a>  
-      <a href="#M000161">add_expr_escaped</a>  
-      <a href="#M000160">add_expr_literal</a>  
-      <a href="#M000163">add_postamble</a>  
-      <a href="#M000155">add_preamble</a>  
-      <a href="#M000159">add_stmt</a>  
-      <a href="#M000158">add_text</a>  
-      <a href="#M000156">escape_text</a>  
-      <a href="#M000157">escaped_expr</a>  
-      <a href="#M000154">init_generator</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000162" class="method-detail">
-        <a name="M000162"></a>
-
-        <div class="method-heading">
-          <a href="#M000162" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000162-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000162-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 73</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">s</span> = <span class="ruby-keyword kw">nil</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">code</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/\A\".*?\"\s*,\s*(.*)/</span>
-        <span class="ruby-identifier">s</span> = <span class="ruby-identifier">$1</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/[%"]/</span>, <span class="ruby-value str">'\\\1'</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">'='</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">" fprintf(stderr, \"*** debug: #{s}\" #{code});"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000161" class="method-detail">
-        <a name="M000161"></a>
-
-        <div class="method-heading">
-          <a href="#M000161" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000161-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000161-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 68</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">' '</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">';'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000160" class="method-detail">
-        <a name="M000160"></a>
-
-        <div class="method-heading">
-          <a href="#M000160" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000160-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000160-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 63</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">" fprintf(#{@out}, "</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">');'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000163" class="method-detail">
-        <a name="M000163"></a>
-
-        <div class="method-heading">
-          <a href="#M000163" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000163-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000163-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 83</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-comment cmt"># empty</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000155" class="method-detail">
-        <a name="M000155"></a>
-
-        <div class="method-heading">
-          <a href="#M000155" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000155-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000155-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 31</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#line 1 \"#{self.filename}\"\n"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">filename</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000159" class="method-detail">
-        <a name="M000159"></a>
-
-        <div class="method-heading">
-          <a href="#M000159" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000159-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000159-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 59</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000158" class="method-detail">
-        <a name="M000158"></a>
-
-        <div class="method-heading">
-          <a href="#M000158" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000158-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000158-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 45</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">src</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@indent</span> <span class="ruby-operator">:</span> <span class="ruby-value str">' '</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"fputs("</span>
-      <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">each_line</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'      '</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
-        <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'"'</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">line</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">'"'</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">", #{@out});"</span>   <span class="ruby-comment cmt">#<< (text[-1] == ?\n ? "\n" : "")</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000156" class="method-detail">
-        <a name="M000156"></a>
-
-        <div class="method-heading">
-          <a href="#M000156" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000156-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000156-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 35</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-ivar">@@table_</span> <span class="ruby-operator">||=</span> { <span class="ruby-value str">"\r"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\r"</span>, <span class="ruby-value str">"\n"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\n"</span>, <span class="ruby-value str">"\t"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\t"</span>, <span class="ruby-value str">'"'</span>=<span class="ruby-operator">></span><span class="ruby-value str">'\\"'</span>, <span class="ruby-value str">"\\"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\\\"</span> }
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/[\r\n\t"\\]/</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@@table_</span>[<span class="ruby-identifier">m</span>] }
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">text</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000157" class="method-detail">
-        <a name="M000157"></a>
-
-        <div class="method-heading">
-          <a href="#M000157" class="method-signature">
-          <span class="method-name">escaped_expr</span><span class="method-args">(code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000157-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000157-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 41</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-node">"#{@escapefunc}(#{code.strip}, #{@out})"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000154" class="method-detail">
-        <a name="M000154"></a>
-
-        <div class="method-heading">
-          <a href="#M000154" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000154-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000154-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 24</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">"escape"</span>
-      <span class="ruby-ivar">@indent</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:indent</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>
-      <span class="ruby-ivar">@out</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:out</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'stdout'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/CommandOptionError.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/CommandOptionError.html
deleted file mode 100644
index e5d32a9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/CommandOptionError.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::CommandOptionError</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::CommandOptionError</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/main_rb.html">
-                erubis/main.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="ErubisError.html">
-                ErubisError
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Context.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Context.html
deleted file mode 100644
index bc4e18b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Context.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Context</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Context</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/context_rb.html">
-                erubis/context.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                Object
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-context object for Engine#evaluate
-</p>
-<p>
-ex.
-</p>
-<pre>
-  template = <<'END'
-  Hello <%= @user %>!
-  <% for item in @list %>
-   - <%= item %>
-  <% end %>
-  END
-
-  context = Erubis::Context.new(:user=>'World', :list=>['a','b','c'])
-  # or
-  # context = Erubis::Context.new
-  # context[:user] = 'World'
-  # context[:list] = ['a', 'b', 'c']
-
-  eruby = Erubis::Eruby.new(template)
-  print eruby.evaluate(context)
-</pre>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000216">[]</a>  
-      <a href="#M000217">[]=</a>  
-      <a href="#M000219">each</a>  
-      <a href="#M000218">keys</a>  
-      <a href="#M000215">new</a>  
-      <a href="#M000220">to_hash</a>  
-      <a href="#M000221">update</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name">Enumerable</span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Class methods</h3>
-
-      <div id="method-M000215" class="method-detail">
-        <a name="M000215"></a>
-
-        <div class="method-heading">
-          <a href="#M000215" class="method-signature">
-          <span class="method-name">new</span><span class="method-args">(hash=nil)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000215-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000215-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/context.rb, line 34</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">hash</span>=<span class="ruby-keyword kw">nil</span>)
-      <span class="ruby-identifier">hash</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
-        <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">value</span>
-      <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hash</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000216" class="method-detail">
-        <a name="M000216"></a>
-
-        <div class="method-heading">
-          <a href="#M000216" class="method-signature">
-          <span class="method-name">[]</span><span class="method-args">(key)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000216-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000216-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/context.rb, line 40</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">key</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-node">"@#{key}"</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000217" class="method-detail">
-        <a name="M000217"></a>
-
-        <div class="method-heading">
-          <a href="#M000217" class="method-signature">
-          <span class="method-name">[]=</span><span class="method-args">(key, value)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000217-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000217-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/context.rb, line 44</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-node">"@#{key}"</span>, <span class="ruby-identifier">value</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000219" class="method-detail">
-        <a name="M000219"></a>
-
-        <div class="method-heading">
-          <a href="#M000219" class="method-signature">
-          <span class="method-name">each</span><span class="method-args">() {|key, value| ...}</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000219-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000219-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/context.rb, line 52</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each</span>
-      <span class="ruby-identifier">instance_variables</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">key</span> = <span class="ruby-identifier">name</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
-        <span class="ruby-identifier">value</span> = <span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">name</span>)
-        <span class="ruby-keyword kw">yield</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>)
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000218" class="method-detail">
-        <a name="M000218"></a>
-
-        <div class="method-heading">
-          <a href="#M000218" class="method-signature">
-          <span class="method-name">keys</span><span class="method-args">()</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000218-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000218-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/context.rb, line 48</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">keys</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">instance_variables</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span> <span class="ruby-identifier">name</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>] }
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000220" class="method-detail">
-        <a name="M000220"></a>
-
-        <div class="method-heading">
-          <a href="#M000220" class="method-signature">
-          <span class="method-name">to_hash</span><span class="method-args">()</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000220-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000220-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/context.rb, line 60</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_hash</span>
-      <span class="ruby-identifier">hash</span> = {}
-      <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span> <span class="ruby-identifier">hash</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">key</span>] }
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">hash</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000221" class="method-detail">
-        <a name="M000221"></a>
-
-        <div class="method-heading">
-          <a href="#M000221" class="method-signature">
-          <span class="method-name">update</span><span class="method-args">(context_or_hash)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000221-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000221-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/context.rb, line 66</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">update</span>(<span class="ruby-identifier">context_or_hash</span>)
-      <span class="ruby-identifier">arg</span> = <span class="ruby-identifier">context_or_hash</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
-        <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
-          <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">val</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">instance_variables</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">varname</span><span class="ruby-operator">|</span>
-          <span class="ruby-identifier">key</span> = <span class="ruby-identifier">varname</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
-          <span class="ruby-identifier">val</span> = <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">varname</span>)
-          <span class="ruby-keyword kw">self</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">val</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Converter.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Converter.html
deleted file mode 100644
index 13cd7c7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Converter.html
+++ /dev/null
@@ -1,283 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Converter</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Converter</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/converter_rb.html">
-                erubis/converter.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-<a href="Converter.html#M000081">convert</a>
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000081">convert</a>  
-      <a href="#M000083">convert_input</a>  
-      <a href="#M000082">detect_spaces_at_bol</a>  
-      <a href="#M000080">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-    <div id="attribute-list">
-      <h3 class="section-bar">Attributes</h3>
-
-      <div class="name-list">
-        <table>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">escape</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">postamble</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">preamble</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        </table>
-      </div>
-    </div>
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000081" class="method-detail">
-        <a name="M000081"></a>
-
-        <div class="method-heading">
-          <a href="#M000081" class="method-signature">
-          <span class="method-name">convert</span><span class="method-args">(input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-<a href="Converter.html#M000081">convert</a> input string into target
-language
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000081-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000081-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 34</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">codebuf</span> = <span class="ruby-value str">""</span>    <span class="ruby-comment cmt"># or []</span>
-      <span class="ruby-ivar">@preamble</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-value">? </span><span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">codebuf</span>) <span class="ruby-operator">:</span> (<span class="ruby-ivar">@preamble</span> <span class="ruby-operator">&&</span> (<span class="ruby-identifier">codebuf</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@preamble</span>))
-      <span class="ruby-identifier">convert_input</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">input</span>)
-      <span class="ruby-ivar">@postamble</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-value">? </span><span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">codebuf</span>) <span class="ruby-operator">:</span> (<span class="ruby-ivar">@postamble</span> <span class="ruby-operator">&&</span> (<span class="ruby-identifier">codebuf</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@postamble</span>))
-      <span class="ruby-ivar">@_proc</span> = <span class="ruby-keyword kw">nil</span>    <span class="ruby-comment cmt"># clear cached proc object</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">codebuf</span>  <span class="ruby-comment cmt"># or codebuf.join()</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000080" class="method-detail">
-        <a name="M000080"></a>
-
-        <div class="method-heading">
-          <a href="#M000080" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000080-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000080-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 27</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@preamble</span>  = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:preamble</span>]
-      <span class="ruby-ivar">@postamble</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:postamble</span>]
-      <span class="ruby-ivar">@escape</span>    = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:escape</span>]
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Protected Instance methods</h3>
-
-      <div id="method-M000083" class="method-detail">
-        <a name="M000083"></a>
-
-        <div class="method-heading">
-          <a href="#M000083" class="method-signature">
-          <span class="method-name">convert_input</span><span class="method-args">(codebuf, input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) <a href="Converter.html#M000081">convert</a> input to code
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000083-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000083-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 78</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert_input</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000082" class="method-detail">
-        <a name="M000082"></a>
-
-        <div class="method-heading">
-          <a href="#M000082" class="method-signature">
-          <span class="method-name">detect_spaces_at_bol</span><span class="method-args">(text, is_bol)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-detect spaces at beginning of line
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000082-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000082-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 48</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">detect_spaces_at_bol</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">is_bol</span>)
-      <span class="ruby-identifier">lspace</span> = <span class="ruby-keyword kw">nil</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-        <span class="ruby-identifier">lspace</span> = <span class="ruby-value str">""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">is_bol</span>
-      <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">text</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-        <span class="ruby-identifier">lspace</span> = <span class="ruby-value str">""</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">rindex</span> = <span class="ruby-identifier">text</span>.<span class="ruby-identifier">rindex</span>(<span class="ruby-value">?\n</span>)
-        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rindex</span>
-          <span class="ruby-identifier">s</span> = <span class="ruby-identifier">text</span>[<span class="ruby-identifier">rindex</span><span class="ruby-operator">+</span><span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
-          <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/\A[ \t]*\z/</span>
-            <span class="ruby-identifier">lspace</span> = <span class="ruby-identifier">s</span>
-            <span class="ruby-comment cmt">#text = text[0..rindex]</span>
-            <span class="ruby-identifier">text</span>[<span class="ruby-identifier">rindex</span><span class="ruby-operator">+</span><span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>] = <span class="ruby-value str">''</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">else</span>
-          <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">is_bol</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">text</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/\A[ \t]*\z/</span>
-            <span class="ruby-comment cmt">#lspace = text</span>
-            <span class="ruby-comment cmt">#text = nil</span>
-            <span class="ruby-identifier">lspace</span> = <span class="ruby-identifier">text</span>.<span class="ruby-identifier">dup</span>
-            <span class="ruby-identifier">text</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>] = <span class="ruby-value str">''</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">lspace</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/DeleteIndentEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/DeleteIndentEnhancer.html
deleted file mode 100644
index 0433bdd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/DeleteIndentEnhancer.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::DeleteIndentEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::DeleteIndentEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-delete indentation of HTML.
-</p>
-<p>
-this is language-independent.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000194">convert_input</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000194" class="method-detail">
-        <a name="M000194"></a>
-
-        <div class="method-heading">
-          <a href="#M000194" class="method-signature">
-          <span class="method-name">convert_input</span><span class="method-args">(src, input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000194-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000194-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 579</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert_input</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">input</span> = <span class="ruby-identifier">input</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/^[ \t]+</</span>, <span class="ruby-value str">'<'</span>)
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">input</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/DeleteIndentEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/DeleteIndentEruby.html
deleted file mode 100644
index 80720b9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/DeleteIndentEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::DeleteIndentEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::DeleteIndentEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="DeleteIndentEnhancer.html">DeleteIndentEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ec.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ec.html
deleted file mode 100644
index 9e880ba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ec.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Ec</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Ec</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ec_rb.html">
-                erubis/engine/ec.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Basic/Engine.html">
-                Basic::Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-engine for C
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="CGenerator.html">CGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ejava.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ejava.html
deleted file mode 100644
index 6e9e2b3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ejava.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Ejava</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Ejava</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ejava_rb.html">
-                erubis/engine/ejava.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Basic/Engine.html">
-                Basic::Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-engine for Java
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="JavaGenerator.html">JavaGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ejavascript.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ejavascript.html
deleted file mode 100644
index e065ab6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ejavascript.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Ejavascript</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Ejavascript</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ejavascript_rb.html">
-                erubis/engine/ejavascript.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Basic/Engine.html">
-                Basic::Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-engine for JavaScript
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="JavascriptGenerator.html">JavascriptGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Engine.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Engine.html
deleted file mode 100644
index dad2f81..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Engine.html
+++ /dev/null
@@ -1,305 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Engine</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Engine</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine_rb.html">
-                erubis/engine.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                Object
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-(abstract) abstract engine class. subclass must include evaluator and
-converter module.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000207">convert!</a>  
-      <a href="#M000208">load_file</a>  
-      <a href="#M000206">new</a>  
-      <a href="#M000209">process</a>  
-      <a href="#M000210">process_proc</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Class methods</h3>
-
-      <div id="method-M000208" class="method-detail">
-        <a name="M000208"></a>
-
-        <div class="method-heading">
-          <a href="#M000208" class="method-signature">
-          <span class="method-name">load_file</span><span class="method-args">(filename, properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-load file, write cache file, and return engine object. this method create
-code cache file automatically. cachefile name can be specified with
-properties[:cachename], or filname + ‘cache’ is used as
-default.
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000208-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000208-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine.rb, line 49</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">load_file</span>(<span class="ruby-identifier">filename</span>, <span class="ruby-identifier">properties</span>={})
-      <span class="ruby-identifier">cachename</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:cachename</span>] <span class="ruby-operator">||</span> (<span class="ruby-identifier">filename</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.cache'</span>)
-      <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:filename</span>] = <span class="ruby-identifier">filename</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">test</span>(<span class="ruby-value">?f</span>, <span class="ruby-identifier">cachename</span>) <span class="ruby-operator">&&</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">filename</span>) <span class="ruby-operator"><=</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">cachename</span>)
-        <span class="ruby-identifier">engine</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">properties</span>)
-        <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">src</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cachename</span>)
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">input</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">filename</span>, <span class="ruby-value str">'rb'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span> }
-        <span class="ruby-identifier">engine</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">input</span>, <span class="ruby-identifier">properties</span>)
-        <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">cachename</span>, <span class="ruby-value str">'wb'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
-          <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_EX</span>)
-          <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">engine</span>.<span class="ruby-identifier">src</span>)
-          <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flush</span>()
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">src</span>.<span class="ruby-identifier">untaint</span>   <span class="ruby-comment cmt"># ok?</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">engine</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000206" class="method-detail">
-        <a name="M000206"></a>
-
-        <div class="method-heading">
-          <a href="#M000206" class="method-signature">
-          <span class="method-name">new</span><span class="method-args">(input=nil, properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-include <a href="Evaluator.html">Evaluator</a> include <a
-href="Converter.html">Converter</a> include <a
-href="Generator.html">Generator</a>
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000206-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000206-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine.rb, line 26</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">input</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">properties</span>={})
-      <span class="ruby-comment cmt">#@input = input</span>
-      <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>)
-      <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>)
-      <span class="ruby-identifier">init_evaluator</span>(<span class="ruby-identifier">properties</span>)
-      <span class="ruby-ivar">@src</span>    = <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">input</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000207" class="method-detail">
-        <a name="M000207"></a>
-
-        <div class="method-heading">
-          <a href="#M000207" class="method-signature">
-          <span class="method-name">convert!</span><span class="method-args">(input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-convert input string and set it to @src
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000207-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000207-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine.rb, line 38</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert!</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-ivar">@src</span> = <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000209" class="method-detail">
-        <a name="M000209"></a>
-
-        <div class="method-heading">
-          <a href="#M000209" class="method-signature">
-          <span class="method-name">process</span><span class="method-args">(input, context=nil, filename=nil)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-helper method to convert and evaluate input text with context object.
-context may be Binding, Hash, or Object.
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000209-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000209-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine.rb, line 73</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process</span>(<span class="ruby-identifier">input</span>, <span class="ruby-identifier">context</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">filename</span>=<span class="ruby-keyword kw">nil</span>)
-      <span class="ruby-identifier">code</span> = <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">filename</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'(erubis)'</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">context</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Binding</span>)
-        <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-identifier">code</span>, <span class="ruby-identifier">context</span>, <span class="ruby-identifier">filename</span>)
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">context</span> = <span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">context</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">context</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
-        <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">context</span>.<span class="ruby-identifier">instance_eval</span>(<span class="ruby-identifier">code</span>, <span class="ruby-identifier">filename</span>)
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000210" class="method-detail">
-        <a name="M000210"></a>
-
-        <div class="method-heading">
-          <a href="#M000210" class="method-signature">
-          <span class="method-name">process_proc</span><span class="method-args">(proc_obj, context=nil, filename=nil)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-helper method evaluate Proc object with contect object. context may be
-Binding, Hash, or Object.
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000210-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000210-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine.rb, line 89</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process_proc</span>(<span class="ruby-identifier">proc_obj</span>, <span class="ruby-identifier">context</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">filename</span>=<span class="ruby-keyword kw">nil</span>)
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">context</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Binding</span>)
-        <span class="ruby-identifier">filename</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'(erubis)'</span>
-        <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-identifier">proc_obj</span>, <span class="ruby-identifier">context</span>, <span class="ruby-identifier">filename</span>)
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">context</span> = <span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">context</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">context</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
-        <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">context</span>.<span class="ruby-identifier">instance_eval</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">proc_obj</span>)
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Eperl.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Eperl.html
deleted file mode 100644
index 60c491c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Eperl.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Eperl</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Eperl</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/eperl_rb.html">
-                erubis/engine/eperl.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Basic/Engine.html">
-                Basic::Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-engine for Perl
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="PerlGenerator.html">PerlGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ephp.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ephp.html
deleted file mode 100644
index 8486dd6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Ephp.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Ephp</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Ephp</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ephp_rb.html">
-                erubis/engine/ephp.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Basic/Engine.html">
-                Basic::Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-engine for PHP
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="PhpGenerator.html">PhpGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErboutEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErboutEnhancer.html
deleted file mode 100644
index 4a31c10..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErboutEnhancer.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::ErboutEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::ErboutEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-set buffer variable name to ‘_erbout’ as well as
-‘_buf‘
-</p>
-<p>
-this is only for <a href="Eruby.html">Eruby</a>.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000191">add_postamble</a>  
-      <a href="#M000190">add_preamble</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000191" class="method-detail">
-        <a name="M000191"></a>
-
-        <div class="method-heading">
-          <a href="#M000191" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000191-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000191-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 261</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf.to_s\n"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000190" class="method-detail">
-        <a name="M000190"></a>
-
-        <div class="method-heading">
-          <a href="#M000190" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000190-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000190-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 257</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_erbout = _buf = '';"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErboutEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErboutEruby.html
deleted file mode 100644
index 662e9f1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErboutEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::ErboutEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::ErboutEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="ErboutEnhancer.html">ErboutEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErubisError.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErubisError.html
deleted file mode 100644
index 5e7732b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/ErubisError.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::ErubisError</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::ErubisError</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/error_rb.html">
-                erubis/error.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                StandardError
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-base error class
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Eruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Eruby.html
deleted file mode 100644
index c5da50d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Eruby.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Eruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Eruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/eruby_rb.html">
-                erubis/engine/eruby.rb
-                </a>
-        <br />
-                <a href="../../files/erubis/helpers/rails_helper_rb.html">
-                erubis/helpers/rails_helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Basic/Engine.html">
-                Basic::Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-engine for Ruby
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="RubyEvaluator.html">RubyEvaluator</a></span>
-        <span class="include-name"><a href="RubyGenerator.html">RubyGenerator</a></span>
-        <span class="include-name"><a href="ErboutEnhancer.html">ErboutEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapeEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapeEnhancer.html
deleted file mode 100644
index 5079978..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapeEnhancer.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::EscapeEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::EscapeEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-switch ’<%= … %>’ to escaped and ’<%==
-… %>’ to unescaped
-</p>
-<p>
-ex.
-</p>
-<pre>
-  class XmlEruby < Eruby
-    include EscapeEnhancer
-  end
-</pre>
-<p>
-this is language-indenedent.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000132">add_expr</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000132" class="method-detail">
-        <a name="M000132"></a>
-
-        <div class="method-heading">
-          <a href="#M000132" class="method-signature">
-          <span class="method-name">add_expr</span><span class="method-args">(src, code, indicator)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000132-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000132-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 38</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">indicator</span>)
-      <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">indicator</span>
-      <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'='</span>
-        <span class="ruby-ivar">@escape</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>) <span class="ruby-operator">:</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'=='</span>
-        <span class="ruby-ivar">@escape</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>) <span class="ruby-operator">:</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">when</span> <span class="ruby-value str">'==='</span>
-        <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEc.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEc.html
deleted file mode 100644
index b83d688..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEc.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::EscapedEc</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::EscapedEc</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ec_rb.html">
-                erubis/engine/ec.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Ec.html">
-                Ec
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEjava.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEjava.html
deleted file mode 100644
index 1a59c7e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEjava.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::EscapedEjava</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::EscapedEjava</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ejava_rb.html">
-                erubis/engine/ejava.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Ejava.html">
-                Ejava
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEjavascript.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEjavascript.html
deleted file mode 100644
index d376314..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEjavascript.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::EscapedEjavascript</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::EscapedEjavascript</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ejavascript_rb.html">
-                erubis/engine/ejavascript.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Ejavascript.html">
-                Ejavascript
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEperl.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEperl.html
deleted file mode 100644
index 10bdb71..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEperl.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::EscapedEperl</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::EscapedEperl</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/eperl_rb.html">
-                erubis/engine/eperl.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eperl.html">
-                Eperl
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEphp.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEphp.html
deleted file mode 100644
index e58b86d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEphp.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::EscapedEphp</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::EscapedEphp</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ephp_rb.html">
-                erubis/engine/ephp.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Ephp.html">
-                Ephp
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEruby.html
deleted file mode 100644
index f9362d6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEruby.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::EscapedEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::EscapedEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/eruby_rb.html">
-                erubis/engine/eruby.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-swtich ’<%= %>’ to escaped and ’<%==
-%>’ to not escaped
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEscheme.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEscheme.html
deleted file mode 100644
index 8c5e970..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/EscapedEscheme.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::EscapedEscheme</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::EscapedEscheme</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/escheme_rb.html">
-                erubis/engine/escheme.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Escheme.html">
-                Escheme
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Escheme.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Escheme.html
deleted file mode 100644
index 53424ba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Escheme.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Escheme</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Escheme</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/escheme_rb.html">
-                erubis/engine/escheme.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Basic/Engine.html">
-                Basic::Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-engine for Scheme
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="SchemeGenerator.html">SchemeGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Evaluator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Evaluator.html
deleted file mode 100644
index a85ba4f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Evaluator.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Evaluator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Evaluator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/evaluator_rb.html">
-                erubis/evaluator.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-<a href="Evaluator.html#M000068">evaluate</a> code
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000068">evaluate</a>  
-      <a href="#M000066">init_evaluator</a>  
-      <a href="#M000067">result</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-    <div id="attribute-list">
-      <h3 class="section-bar">Attributes</h3>
-
-      <div class="name-list">
-        <table>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">filename</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">src</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        </table>
-      </div>
-    </div>
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000068" class="method-detail">
-        <a name="M000068"></a>
-
-        <div class="method-heading">
-          <a href="#M000068" class="method-signature">
-          <span class="method-name">evaluate</span><span class="method-args">(*args)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000068-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000068-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/evaluator.rb, line 35</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">evaluate</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
-      <span class="ruby-identifier">raise</span> <span class="ruby-constant">NotSupportedError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">"evaluation of code except Ruby is not supported."</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000066" class="method-detail">
-        <a name="M000066"></a>
-
-        <div class="method-heading">
-          <a href="#M000066" class="method-signature">
-          <span class="method-name">init_evaluator</span><span class="method-args">(properties)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000066-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000066-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/evaluator.rb, line 27</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_evaluator</span>(<span class="ruby-identifier">properties</span>)
-      <span class="ruby-ivar">@filename</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:filename</span>]
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000067" class="method-detail">
-        <a name="M000067"></a>
-
-        <div class="method-heading">
-          <a href="#M000067" class="method-signature">
-          <span class="method-name">result</span><span class="method-args">(*args)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000067-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000067-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/evaluator.rb, line 31</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">result</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
-      <span class="ruby-identifier">raise</span> <span class="ruby-constant">NotSupportedError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">"evaluation of code except Ruby is not supported."</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/FastEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/FastEruby.html
deleted file mode 100644
index 2585291..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/FastEruby.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::FastEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::FastEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/eruby_rb.html">
-                erubis/engine/eruby.rb
-                </a>
-        <br />
-                <a href="../../files/erubis/helpers/rails_helper_rb.html">
-                erubis/helpers/rails_helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-fast engine for Ruby
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="InterpolationEnhancer.html">InterpolationEnhancer</a></span>
-        <span class="include-name"><a href="ErboutEnhancer.html">ErboutEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Generator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Generator.html
deleted file mode 100644
index 8348cdf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Generator.html
+++ /dev/null
@@ -1,416 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Generator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Generator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/generator_rb.html">
-                erubis/generator.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-code generator, called by <a href="Converter.html">Converter</a> module
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000018">add_expr_debug</a>  
-      <a href="#M000017">add_expr_escaped</a>  
-      <a href="#M000016">add_expr_literal</a>  
-      <a href="#M000019">add_postamble</a>  
-      <a href="#M000013">add_preamble</a>  
-      <a href="#M000015">add_stmt</a>  
-      <a href="#M000014">add_text</a>  
-      <a href="#M000011">escape_text</a>  
-      <a href="#M000012">escaped_expr</a>  
-      <a href="#M000010">init_generator</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-    <div id="attribute-list">
-      <h3 class="section-bar">Attributes</h3>
-
-      <div class="name-list">
-        <table>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">escapefunc</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        </table>
-      </div>
-    </div>
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000018" class="method-detail">
-        <a name="M000018"></a>
-
-        <div class="method-heading">
-          <a href="#M000018" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) add expression code to src for debug. this is called by
-add_expr().
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000018-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000018-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 73</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000017" class="method-detail">
-        <a name="M000017"></a>
-
-        <div class="method-heading">
-          <a href="#M000017" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) add escaped expression code to src. this is called by
-add_expr().
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000017-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000017-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 68</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000016" class="method-detail">
-        <a name="M000016"></a>
-
-        <div class="method-heading">
-          <a href="#M000016" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) add expression literal code to src. this is called by
-add_expr().
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000016-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 63</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000019" class="method-detail">
-        <a name="M000019"></a>
-
-        <div class="method-heading">
-          <a href="#M000019" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) add @postamble to src
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000019-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000019-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 78</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000013" class="method-detail">
-        <a name="M000013"></a>
-
-        <div class="method-heading">
-          <a href="#M000013" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) add @preamble to src
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000013-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 48</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000015" class="method-detail">
-        <a name="M000015"></a>
-
-        <div class="method-heading">
-          <a href="#M000015" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) add statement code to src
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000015-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000015-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 58</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000014" class="method-detail">
-        <a name="M000014"></a>
-
-        <div class="method-heading">
-          <a href="#M000014" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) add text string to src
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000014-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 53</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000011" class="method-detail">
-        <a name="M000011"></a>
-
-        <div class="method-heading">
-          <a href="#M000011" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-(abstract) escape text string
-</p>
-<p>
-ex.
-</p>
-<pre>
-  def escape_text(text)
-    return text.dump
-    # or return "'" + text.gsub(/['\\]/, '\\\\\&') + "'"
-  end
-</pre>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000011-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 37</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">not_implemented</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000012" class="method-detail">
-        <a name="M000012"></a>
-
-        <div class="method-heading">
-          <a href="#M000012" class="method-signature">
-          <span class="method-name">escaped_expr</span><span class="method-args">(code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-return escaped expression code (ex. ‘h(…)’ or
-‘htmlspecialchars(…)’)
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000012-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 42</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-node">"#{@escapefunc}(#{code})"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000010" class="method-detail">
-        <a name="M000010"></a>
-
-        <div class="method-heading">
-          <a href="#M000010" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000010-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/generator.rb, line 25</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@escapefunc</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:escapefunc</span>]
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/HeaderFooterEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/HeaderFooterEnhancer.html
deleted file mode 100644
index ba9b0f6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/HeaderFooterEnhancer.html
+++ /dev/null
@@ -1,267 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::HeaderFooterEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::HeaderFooterEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <dl>
-<dt>experimental</dt><dd>allow header and footer in eRuby script
-
-</dd>
-</dl>
-<p>
-ex.
-</p>
-<pre>
-  ====================
-  ## without header and footer
-  $ cat ex1.eruby
-  <% def list_items(list) %>
-  <%   for item in list %>
-  <li><%= item %></li>
-  <%   end %>
-  <% end %>
-
-  $ erubis -s ex1.eruby
-  _buf = []; def list_items(list)
-  ;   for item in list
-  ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
-  ';   end
-  ; end
-  ;
-  _buf.join
-
-  ## with header and footer
-  $ cat ex2.eruby
-  <!--#header:
-  def list_items(list)
-   #-->
-  <%  for item in list %>
-  <li><%= item %></li>
-  <%  end %>
-  <!--#footer:
-  end
-   #-->
-
-  $ erubis -s -c HeaderFooterEruby ex4.eruby
-
-  def list_items(list)
-   _buf = []; _buf << '
-  ';  for item in list
-  ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
-  ';  end
-  ; _buf << '
-  ';
-  _buf.join
-  end
-
-  ====================
-</pre>
-<p>
-this is language-independent.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000125">add_text</a>  
-      <a href="#M000126">convert</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-    <div id="constants-list">
-      <h3 class="section-bar">Constants</h3>
-
-      <div class="name-list">
-        <table summary="Constants">
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">HEADER_FOOTER_PATTERN</td>
-          <td>=</td>
-          <td class="context-item-value">/(.*?)(^[ \t]*)?<!--\#(\w+):(.*?)\#-->([ \t]*\r?\n)?/m</td>
-        </tr>
-        </table>
-      </div>
-    </div>
-
-
-
-    <div id="attribute-list">
-      <h3 class="section-bar">Attributes</h3>
-
-      <div class="name-list">
-        <table>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">footer</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">header</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        </table>
-      </div>
-    </div>
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000125" class="method-detail">
-        <a name="M000125"></a>
-
-        <div class="method-heading">
-          <a href="#M000125" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000125-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000125-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 542</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">m</span> = <span class="ruby-keyword kw">nil</span>
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-constant">HEADER_FOOTER_PATTERN</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">txt</span>, <span class="ruby-identifier">lspace</span>, <span class="ruby-identifier">word</span>, <span class="ruby-identifier">content</span>, <span class="ruby-identifier">rspace</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">m</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>
-        <span class="ruby-identifier">flag_trim</span> = <span class="ruby-ivar">@trim</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">lspace</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span>
-        <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">txt</span>)
-        <span class="ruby-identifier">content</span> = <span class="ruby-node">"#{lspace}#{content}#{rspace}"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">flag_trim</span>
-        <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">lspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">flag_trim</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">lspace</span>
-        <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-node">"@#{word}"</span>, <span class="ruby-identifier">content</span>)
-        <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">flag_trim</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = $' || text                    # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">m</span> <span class="ruby-value">? </span><span class="ruby-identifier">text</span>[<span class="ruby-identifier">m</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)<span class="ruby-operator">..</span><span class="ruby-value">-1</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">text</span>  <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rest</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000126" class="method-detail">
-        <a name="M000126"></a>
-
-        <div class="method-heading">
-          <a href="#M000126" class="method-signature">
-          <span class="method-name">convert</span><span class="method-args">(input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000126-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000126-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 560</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">source</span> = <span class="ruby-keyword kw">super</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@src</span> = <span class="ruby-node">"#{@header}#{source}#{@footer}"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/HeaderFooterEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/HeaderFooterEruby.html
deleted file mode 100644
index 465ac8b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/HeaderFooterEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::HeaderFooterEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::HeaderFooterEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="HeaderFooterEnhancer.html">HeaderFooterEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers.html
deleted file mode 100644
index 8079c6b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Helpers</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Helpers</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/helpers/rails_form_helper_rb.html">
-                erubis/helpers/rails_form_helper.rb
-                </a>
-        <br />
-                <a href="../../files/erubis/helpers/rails_helper_rb.html">
-                erubis/helpers/rails_helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-    <div id="class-list">
-      <h3 class="section-bar">Classes and Modules</h3>
-
-      Module <a href="Helpers/RailsFormHelper.html" class="link">Erubis::Helpers::RailsFormHelper</a><br />
-Module <a href="Helpers/RailsHelper.html" class="link">Erubis::Helpers::RailsHelper</a><br />
-
-    </div>
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsFormHelper.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsFormHelper.html
deleted file mode 100644
index c047215..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsFormHelper.html
+++ /dev/null
@@ -1,787 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Helpers::RailsFormHelper</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Helpers::RailsFormHelper</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/helpers/rails_form_helper_rb.html">
-                erubis/helpers/rails_form_helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000108">_pp_check_box_checked?</a>  
-      <a href="#M000098">_pp_error_tags</a>  
-      <a href="#M000110">_pp_radio_button_checked?</a>  
-      <a href="#M000099">_pp_remove_error_div</a>  
-      <a href="#M000111">_pp_select</a>  
-      <a href="#M000112">_pp_select_options</a>  
-      <a href="#M000107">pp_check_box</a>  
-      <a href="#M000114">pp_collection_select</a>  
-      <a href="#M000115">pp_country_select</a>  
-      <a href="#M000097">pp_error_on</a>  
-      <a href="#M000105">pp_file_field</a>  
-      <a href="#M000101">pp_form_tag</a>  
-      <a href="#M000104">pp_hidden_field</a>  
-      <a href="#M000118">pp_image_submit_tag</a>  
-      <a href="#M000103">pp_password_field</a>  
-      <a href="#M000109">pp_radio_button</a>  
-      <a href="#M000096">pp_render_partial</a>  
-      <a href="#M000113">pp_select</a>  
-      <a href="#M000117">pp_submit_tag</a>  
-      <a href="#M000100">pp_tag_helper</a>  
-      <a href="#M000095">pp_template_filename</a>  
-      <a href="#M000094">pp_template_filename</a>  
-      <a href="#M000106">pp_text_area</a>  
-      <a href="#M000102">pp_text_field</a>  
-      <a href="#M000116">pp_time_zone_select</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000108" class="method-detail">
-        <a name="M000108"></a>
-
-        <div class="method-heading">
-          <a href="#M000108" class="method-signature">
-          <span class="method-name">_pp_check_box_checked?</span><span class="method-args">(value, checked_value)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000108-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000108-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 107</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_pp_check_box_checked?</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">checked_value</span>)
-    <span class="ruby-keyword kw">return</span> <span class="ruby-constant">ActionView</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span><span class="ruby-operator">::</span><span class="ruby-constant">InstanceTag</span><span class="ruby-operator">::</span><span class="ruby-identifier">check_box_checked?</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">checked_value</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000098" class="method-detail">
-        <a name="M000098"></a>
-
-        <div class="method-heading">
-          <a href="#M000098" class="method-signature">
-          <span class="method-name">_pp_error_tags</span><span class="method-args">(value)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000098-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000098-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 47</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_pp_error_tags</span>(<span class="ruby-identifier">value</span>)
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">value</span> <span class="ruby-operator">?</span> [<span class="ruby-value str">'<div class="fieldWithErrors">'</span>, <span class="ruby-value str">'</div>'</span>] <span class="ruby-operator">:</span> [<span class="ruby-value str">''</span>, <span class="ruby-value str">''</span>]
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000110" class="method-detail">
-        <a name="M000110"></a>
-
-        <div class="method-heading">
-          <a href="#M000110" class="method-signature">
-          <span class="method-name">_pp_radio_button_checked?</span><span class="method-args">(value, tag_value)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000110-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000110-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 118</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_pp_radio_button_checked?</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">tag_value</span>)
-    <span class="ruby-keyword kw">return</span> <span class="ruby-constant">ActionView</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span><span class="ruby-operator">::</span><span class="ruby-constant">InstanceTag</span><span class="ruby-operator">::</span><span class="ruby-identifier">radio_button_checked?</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">tag_value</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000099" class="method-detail">
-        <a name="M000099"></a>
-
-        <div class="method-heading">
-          <a href="#M000099" class="method-signature">
-          <span class="method-name">_pp_remove_error_div</span><span class="method-args">(s)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000099-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000099-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 51</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_pp_remove_error_div</span>(<span class="ruby-identifier">s</span>)
-    <span class="ruby-identifier">s</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp re">/\A<div class="fieldWithErrors">(.*)<\/div>\z/</span>, <span class="ruby-value str">'\1'</span>)
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s</span>
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000111" class="method-detail">
-        <a name="M000111"></a>
-
-        <div class="method-heading">
-          <a href="#M000111" class="method-signature">
-          <span class="method-name">_pp_select</span><span class="method-args">(object, method, collection, priority_collection, options={}, html_options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000111-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000111-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 122</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_pp_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-identifier">priority_collection</span>, <span class="ruby-identifier">options</span>={}, <span class="ruby-identifier">html_options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_error_on</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>) <span class="ruby-keyword kw">do</span>
-      <span class="ruby-identifier">s</span> = <span class="ruby-value str">""</span>
-      <span class="ruby-comment cmt">## start tag</span>
-      <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"<select id=\"#{object}_#{method}\" name=\"#{object}[#{method}]\""</span>
-      <span class="ruby-keyword kw">for</span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">val</span> <span class="ruby-keyword kw">in</span> <span class="ruby-identifier">html_options</span><span class="ruby-operator">:</span>
-          <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-node">" #{key}=\"#{val}\""</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">">\n"</span>
-      <span class="ruby-comment cmt">## selected table</span>
-      <span class="ruby-identifier">key</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">:value</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">:value</span> <span class="ruby-operator">:</span> (<span class="ruby-identifier">options</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-value str">'value'</span>) <span class="ruby-operator">?</span> <span class="ruby-value str">'value'</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>)
-      <span class="ruby-keyword kw">if</span>    <span class="ruby-identifier">key</span>.<span class="ruby-identifier">nil?</span>                ;  <span class="ruby-identifier">selected</span> = <span class="ruby-node">"@#{object}.#{method}"</span>
-      <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">val</span>=<span class="ruby-identifier">options</span>[<span class="ruby-identifier">key</span>]).<span class="ruby-identifier">nil?</span> ;  <span class="ruby-identifier">selected</span> = <span class="ruby-keyword kw">nil</span>
-      <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">val</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/\A<%=(.*)%>\z/</span>  ;  <span class="ruby-identifier">selected</span> = <span class="ruby-identifier">$1</span>
-      <span class="ruby-keyword kw">else</span>                          ;  <span class="ruby-identifier">selected</span> = <span class="ruby-identifier">val</span>.<span class="ruby-identifier">inspect</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"<% _table = {#{selected}=>' selected=\"selected\"'} %>\n"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">selected</span>
-      <span class="ruby-comment cmt">## <option> tags</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:include_blank</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>[<span class="ruby-value str">'include_blank'</span>]
-        <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"<option value=\"\"></option>\n"</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">priority_collection</span>.<span class="ruby-identifier">blank?</span>
-        <span class="ruby-identifier">_pp_select_options</span>(<span class="ruby-identifier">s</span>, <span class="ruby-identifier">priority_collection</span>, <span class="ruby-identifier">selected</span>, <span class="ruby-value str">'delete'</span>)
-        <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"<option value=\"\">-------------</option>\n"</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">_pp_select_options</span>(<span class="ruby-identifier">s</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-identifier">selected</span>, <span class="ruby-value str">'[]'</span>)
-      <span class="ruby-comment cmt">## end tag</span>
-      <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"</select>"</span>
-      <span class="ruby-identifier">s</span>
-    <span class="ruby-keyword kw">end</span>
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000112" class="method-detail">
-        <a name="M000112"></a>
-
-        <div class="method-heading">
-          <a href="#M000112" class="method-signature">
-          <span class="method-name">_pp_select_options</span><span class="method-args">(s, collection, selected, operator)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000112-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000112-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 154</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_pp_select_options</span>(<span class="ruby-identifier">s</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-identifier">selected</span>, <span class="ruby-identifier">operator</span>)
-    <span class="ruby-keyword kw">for</span> <span class="ruby-identifier">item</span> <span class="ruby-keyword kw">in</span> <span class="ruby-identifier">collection</span>
-      <span class="ruby-identifier">value</span>, <span class="ruby-identifier">text</span> = <span class="ruby-identifier">item</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">item</span> <span class="ruby-operator">:</span> [<span class="ruby-identifier">item</span>, <span class="ruby-identifier">item</span>]
-      <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">selected</span>
-        <span class="ruby-identifier">t</span> = <span class="ruby-value str">''</span>
-      <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">operator</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'delete'</span>
-        <span class="ruby-identifier">t</span> = <span class="ruby-node">"<%= _table.delete(#{value.inspect}) %>"</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">t</span> = <span class="ruby-node">"<%= _table[#{value.inspect}] %>"</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"<option value=\"#{h value}\"#{t}>#{h text}</option>\n"</span>
-    <span class="ruby-keyword kw">end</span>
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000107" class="method-detail">
-        <a name="M000107"></a>
-
-        <div class="method-heading">
-          <a href="#M000107" class="method-signature">
-          <span class="method-name">pp_check_box</span><span class="method-args">(object_name, method, options={}, checked_value="1", unchecked_value="0")</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000107-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000107-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 100</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_check_box</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>={}, <span class="ruby-identifier">checked_value</span>=<span class="ruby-value str">"1"</span>, <span class="ruby-identifier">unchecked_value</span>=<span class="ruby-value str">"0"</span>)
-    <span class="ruby-identifier">s</span> = <span class="ruby-identifier">check_box</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>, <span class="ruby-identifier">checked_value</span>, <span class="ruby-identifier">unchecked_value</span>)
-    <span class="ruby-identifier">s</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp re">/\schecked=\"checked\"/</span>, <span class="ruby-value str">''</span>)
-    <span class="ruby-identifier">s</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp re">/type="checkbox"/</span>, <span class="ruby-node">"\\&<%= _pp_check_box_checked?(@#{object_name}.#{method}, #{checked_value.inspect}) ? ' checked=\"checked\"' : '' %>"</span>)
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_error_on</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>) { <span class="ruby-identifier">_pp_remove_error_div</span>(<span class="ruby-identifier">s</span>) }
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000114" class="method-detail">
-        <a name="M000114"></a>
-
-        <div class="method-heading">
-          <a href="#M000114" class="method-signature">
-          <span class="method-name">pp_collection_select</span><span class="method-args">(object, method, collection, value_method, text_method, options={}, html_options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000114-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000114-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 172</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_collection_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-identifier">value_method</span>, <span class="ruby-identifier">text_method</span>, <span class="ruby-identifier">options</span>={}, <span class="ruby-identifier">html_options</span>={})
-    <span class="ruby-identifier">collection2</span> = <span class="ruby-identifier">collection</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
-      [<span class="ruby-identifier">e</span>.<span class="ruby-identifier">__send__</span>(<span class="ruby-identifier">value_method</span>), <span class="ruby-identifier">e</span>.<span class="ruby-identifier">__send__</span>(<span class="ruby-identifier">text_method</span>)]
-    }
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_pp_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">collection2</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">options</span>, <span class="ruby-identifier">html_options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000115" class="method-detail">
-        <a name="M000115"></a>
-
-        <div class="method-heading">
-          <a href="#M000115" class="method-signature">
-          <span class="method-name">pp_country_select</span><span class="method-args">(object, method, priority_countries=nil, options={}, html_options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000115-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000115-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 179</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_country_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">priority_countries</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">options</span>={}, <span class="ruby-identifier">html_options</span>={})
-    <span class="ruby-identifier">collection</span> = <span class="ruby-constant">ActionView</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span><span class="ruby-operator">::</span><span class="ruby-constant">FormOptionsHelper</span><span class="ruby-operator">::</span><span class="ruby-constant">COUNTRIES</span>
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_pp_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-identifier">priority_countries</span>, <span class="ruby-identifier">options</span>, <span class="ruby-identifier">html_options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000097" class="method-detail">
-        <a name="M000097"></a>
-
-        <div class="method-heading">
-          <a href="#M000097" class="method-signature">
-          <span class="method-name">pp_error_on</span><span class="method-args">(object_name, method) {|object_name, method| ...}</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000097-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000097-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 38</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_error_on</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>)
-    <span class="ruby-identifier">s</span> = <span class="ruby-value str">''</span>
-    <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"<% _stag, _etag = _pp_error_tags(@#{object_name}.errors.on('#{method}')) %>"</span>
-    <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"<%= _stag %>"</span>
-    <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-keyword kw">yield</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>)
-    <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"<%= _etag %>"</span>
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s</span>
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000105" class="method-detail">
-        <a name="M000105"></a>
-
-        <div class="method-heading">
-          <a href="#M000105" class="method-signature">
-          <span class="method-name">pp_file_field</span><span class="method-args">(object_name, method, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000105-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000105-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 92</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_file_field</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_tag_helper</span>(<span class="ruby-identifier">:file_field</span>, <span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000101" class="method-detail">
-        <a name="M000101"></a>
-
-        <div class="method-heading">
-          <a href="#M000101" class="method-signature">
-          <span class="method-name">pp_form_tag</span><span class="method-args">(url_for_options={}, options={}, *parameters_for_url, &block)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000101-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000101-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 70</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_form_tag</span>(<span class="ruby-identifier">url_for_options</span>={}, <span class="ruby-identifier">options</span>={}, <span class="ruby-operator">*</span><span class="ruby-identifier">parameters_for_url</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">form_tag</span>(<span class="ruby-identifier">url_for_options</span>, <span class="ruby-identifier">options</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">parameters_for_url</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000104" class="method-detail">
-        <a name="M000104"></a>
-
-        <div class="method-heading">
-          <a href="#M000104" class="method-signature">
-          <span class="method-name">pp_hidden_field</span><span class="method-args">(object_name, method, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000104-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000104-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 88</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_hidden_field</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_tag_helper</span>(<span class="ruby-identifier">:hidden_field</span>, <span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000118" class="method-detail">
-        <a name="M000118"></a>
-
-        <div class="method-heading">
-          <a href="#M000118" class="method-signature">
-          <span class="method-name">pp_image_submit_tag</span><span class="method-args">(source, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000118-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000118-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 194</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_image_submit_tag</span>(<span class="ruby-identifier">source</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">image_submit_tag</span>(<span class="ruby-identifier">source</span>, <span class="ruby-identifier">options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000103" class="method-detail">
-        <a name="M000103"></a>
-
-        <div class="method-heading">
-          <a href="#M000103" class="method-signature">
-          <span class="method-name">pp_password_field</span><span class="method-args">(object_name, method, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000103-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000103-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 84</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_password_field</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_tag_helper</span>(<span class="ruby-identifier">:password_field</span>, <span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000109" class="method-detail">
-        <a name="M000109"></a>
-
-        <div class="method-heading">
-          <a href="#M000109" class="method-signature">
-          <span class="method-name">pp_radio_button</span><span class="method-args">(object_name, method, tag_value, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000109-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000109-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 111</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_radio_button</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">tag_value</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-identifier">s</span> = <span class="ruby-identifier">radio_button</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">tag_value</span>, <span class="ruby-identifier">options</span>)
-    <span class="ruby-identifier">s</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp re">/\schecked=\"checked\"/</span>, <span class="ruby-value str">''</span>)
-    <span class="ruby-identifier">s</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp re">/type="radio"/</span>, <span class="ruby-node">"\\&<%= _pp_radio_button_checked?(@#{object_name}.#{method}, #{tag_value.inspect}) ? ' checked=\"checked\"' : '' %>"</span>)
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_error_on</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>) { <span class="ruby-identifier">_pp_remove_error_div</span>(<span class="ruby-identifier">s</span>) }
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000096" class="method-detail">
-        <a name="M000096"></a>
-
-        <div class="method-heading">
-          <a href="#M000096" class="method-signature">
-          <span class="method-name">pp_render_partial</span><span class="method-args">(basename)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000096-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000096-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 31</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_render_partial</span>(<span class="ruby-identifier">basename</span>)
-    <span class="ruby-identifier">basename</span> = <span class="ruby-node">"_#{basename}"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">basename</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?_</span>
-    <span class="ruby-identifier">filename</span> = <span class="ruby-identifier">pp_template_filename</span>(<span class="ruby-identifier">basename</span>)
-    <span class="ruby-identifier">preprocessor</span> = <span class="ruby-identifier">_create_preprocessor</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">filename</span>))
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">preprocessor</span>.<span class="ruby-identifier">evaluate</span>(<span class="ruby-identifier">_preprocessing_context_object</span>())
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000113" class="method-detail">
-        <a name="M000113"></a>
-
-        <div class="method-heading">
-          <a href="#M000113" class="method-signature">
-          <span class="method-name">pp_select</span><span class="method-args">(object, method, collection, options={}, html_options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000113-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000113-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 168</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-identifier">options</span>={}, <span class="ruby-identifier">html_options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_pp_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">options</span>, <span class="ruby-identifier">html_options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000117" class="method-detail">
-        <a name="M000117"></a>
-
-        <div class="method-heading">
-          <a href="#M000117" class="method-signature">
-          <span class="method-name">pp_submit_tag</span><span class="method-args">(value="Save changes", options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000117-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000117-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 190</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_submit_tag</span>(<span class="ruby-identifier">value</span>=<span class="ruby-value str">"Save changes"</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">submit_tag</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000100" class="method-detail">
-        <a name="M000100"></a>
-
-        <div class="method-heading">
-          <a href="#M000100" class="method-signature">
-          <span class="method-name">pp_tag_helper</span><span class="method-args">(helper, object_name, method, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000100-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000100-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 56</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_tag_helper</span>(<span class="ruby-identifier">helper</span>, <span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">object_name</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">ActionView</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span><span class="ruby-operator">::</span><span class="ruby-constant">FormHelper</span>)
-      <span class="ruby-identifier">object_name</span> = <span class="ruby-identifier">object_name</span>.<span class="ruby-identifier">object_name</span>
-    <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">:value</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-value str">'value'</span>)
-      <span class="ruby-identifier">options</span>[<span class="ruby-value str">'value'</span>] = <span class="ruby-identifier">_?</span>(<span class="ruby-node">"h @#{object_name}.#{method}"</span>)
-    <span class="ruby-keyword kw">end</span>
-    <span class="ruby-comment cmt">#$stderr.puts "*** debug: pp_tag_helper(): options=#{options.inspect}"</span>
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_error_on</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>) {
-      <span class="ruby-identifier">s</span> = <span class="ruby-identifier">__send__</span>(<span class="ruby-identifier">helper</span>, <span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>)
-      <span class="ruby-identifier">_pp_remove_error_div</span>(<span class="ruby-identifier">s</span>)
-    }
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000095" class="method-detail">
-        <a name="M000095"></a>
-
-        <div class="method-heading">
-          <a href="#M000095" class="method-signature">
-          <span class="method-name">pp_template_filename</span><span class="method-args">(basename)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000095-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000095-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 24</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_template_filename</span>(<span class="ruby-identifier">basename</span>)
-    <span class="ruby-identifier">fname</span> = <span class="ruby-node">"#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.html.erb"</span>
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">fname</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">test</span>(<span class="ruby-value">?f</span>, <span class="ruby-identifier">fname</span>)
-    <span class="ruby-keyword kw">return</span>  <span class="ruby-node">"#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.rhtml"</span>
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000094" class="method-detail">
-        <a name="M000094"></a>
-
-        <div class="method-heading">
-          <a href="#M000094" class="method-signature">
-          <span class="method-name">pp_template_filename</span><span class="method-args">(basename)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000094-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000094-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 20</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_template_filename</span>(<span class="ruby-identifier">basename</span>)
-    <span class="ruby-keyword kw">return</span> <span class="ruby-node">"#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.rhtml"</span>
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000106" class="method-detail">
-        <a name="M000106"></a>
-
-        <div class="method-heading">
-          <a href="#M000106" class="method-signature">
-          <span class="method-name">pp_text_area</span><span class="method-args">(object_name, method, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000106-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000106-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 96</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_text_area</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_tag_helper</span>(<span class="ruby-identifier">:text_area</span>, <span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000102" class="method-detail">
-        <a name="M000102"></a>
-
-        <div class="method-heading">
-          <a href="#M000102" class="method-signature">
-          <span class="method-name">pp_text_field</span><span class="method-args">(object_name, method, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000102-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000102-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 80</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_text_field</span>(<span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>={})
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">pp_tag_helper</span>(<span class="ruby-identifier">:text_field</span>, <span class="ruby-identifier">object_name</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000116" class="method-detail">
-        <a name="M000116"></a>
-
-        <div class="method-heading">
-          <a href="#M000116" class="method-signature">
-          <span class="method-name">pp_time_zone_select</span><span class="method-args">(object, method, priority_zones=nil, options={}, html_options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000116-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000116-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_form_helper.rb, line 184</span>
-  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pp_time_zone_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">priority_zones</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">options</span>={}, <span class="ruby-identifier">html_options</span>={})
-    <span class="ruby-identifier">model</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:model</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>[<span class="ruby-value str">'model'</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">TimeZone</span>
-    <span class="ruby-identifier">collection</span> = <span class="ruby-identifier">model</span>.<span class="ruby-identifier">all</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">e</span>.<span class="ruby-identifier">name</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>] }
-    <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_pp_select</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method</span>, <span class="ruby-identifier">collection</span>, <span class="ruby-identifier">priority_zones</span>, <span class="ruby-identifier">options</span>, <span class="ruby-identifier">html_options</span>)
-  <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsHelper.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsHelper.html
deleted file mode 100644
index c53b665..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsHelper.html
+++ /dev/null
@@ -1,349 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Helpers::RailsHelper</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Helpers::RailsHelper</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/helpers/rails_helper_rb.html">
-                erubis/helpers/rails_helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-helper module for Ruby on Rails
-</p>
-<p>
-howto:
-</p>
-<ol>
-<li>add the folliwng code in your ‘config/environment.rb‘
-
-<pre>
-  require 'erubis/helpers/rails_helper'
-  #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby # or Erubis::FastEruby
-  #Erubis::Helpers::RailsHelper.init_properties = {}
-  #Erubis::Helpers::RailsHelper.show_src = false       # set true for debugging
-  #Erubis::Helpers::RailsHelper.preprocessing = true   # set true to enable preprocessing
-</pre>
-</li>
-<li>restart web server.
-
-</li>
-</ol>
-<p>
-if Erubis::Helper::Rails.show_src is true, <a
-href="../../Erubis.html">Erubis</a> prints converted Ruby code into log
-file (‘log/development.log’ or so). if false, it doesn‘t.
-if nil, <a href="../../Erubis.html">Erubis</a> prints converted Ruby code
-if ENV[‘RAILS_ENV’] == ‘development’.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000084">engine_class</a>  
-      <a href="#M000085">engine_class=</a>  
-      <a href="#M000086">init_properties</a>  
-      <a href="#M000087">init_properties=</a>  
-      <a href="#M000090">preprocessing</a>  
-      <a href="#M000091">preprocessing=</a>  
-      <a href="#M000088">show_src</a>  
-      <a href="#M000089">show_src=</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-    <div id="class-list">
-      <h3 class="section-bar">Classes and Modules</h3>
-
-      Module <a href="RailsHelper/TemplateConverter.html" class="link">Erubis::Helpers::RailsHelper::TemplateConverter</a><br />
-
-    </div>
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Class methods</h3>
-
-      <div id="method-M000084" class="method-detail">
-        <a name="M000084"></a>
-
-        <div class="method-heading">
-          <a href="#M000084" class="method-signature">
-          <span class="method-name">engine_class</span><span class="method-args">()</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-@@<a href="RailsHelper.html#M000084">engine_class</a> = ::<a
-href="../FastEruby.html">Erubis::FastEruby</a>
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000084-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000084-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 48</span>
-      <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">engine_class</span>
-        <span class="ruby-ivar">@@engine_class</span>
-      <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000085" class="method-detail">
-        <a name="M000085"></a>
-
-        <div class="method-heading">
-          <a href="#M000085" class="method-signature">
-          <span class="method-name">engine_class=</span><span class="method-args">(klass)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000085-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000085-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 51</span>
-      <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">engine_class=</span>(<span class="ruby-identifier">klass</span>)
-        <span class="ruby-ivar">@@engine_class</span> = <span class="ruby-identifier">klass</span>
-      <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000086" class="method-detail">
-        <a name="M000086"></a>
-
-        <div class="method-heading">
-          <a href="#M000086" class="method-signature">
-          <span class="method-name">init_properties</span><span class="method-args">()</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000086-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000086-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 57</span>
-      <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">init_properties</span>
-        <span class="ruby-ivar">@@init_properties</span>
-      <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000087" class="method-detail">
-        <a name="M000087"></a>
-
-        <div class="method-heading">
-          <a href="#M000087" class="method-signature">
-          <span class="method-name">init_properties=</span><span class="method-args">(hash)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000087-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000087-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 60</span>
-      <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">init_properties=</span>(<span class="ruby-identifier">hash</span>)
-        <span class="ruby-ivar">@@init_properties</span> = <span class="ruby-identifier">hash</span>
-      <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000090" class="method-detail">
-        <a name="M000090"></a>
-
-        <div class="method-heading">
-          <a href="#M000090" class="method-signature">
-          <span class="method-name">preprocessing</span><span class="method-args">()</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000090-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000090-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 75</span>
-      <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">preprocessing</span>
-        <span class="ruby-ivar">@@preprocessing</span>
-      <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000091" class="method-detail">
-        <a name="M000091"></a>
-
-        <div class="method-heading">
-          <a href="#M000091" class="method-signature">
-          <span class="method-name">preprocessing=</span><span class="method-args">(flag)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000091-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000091-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 78</span>
-      <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">preprocessing=</span>(<span class="ruby-identifier">flag</span>)
-        <span class="ruby-ivar">@@preprocessing</span> = <span class="ruby-identifier">flag</span>
-      <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000088" class="method-detail">
-        <a name="M000088"></a>
-
-        <div class="method-heading">
-          <a href="#M000088" class="method-signature">
-          <span class="method-name">show_src</span><span class="method-args">()</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000088-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000088-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 66</span>
-      <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">show_src</span>
-        <span class="ruby-ivar">@@show_src</span>
-      <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000089" class="method-detail">
-        <a name="M000089"></a>
-
-        <div class="method-heading">
-          <a href="#M000089" class="method-signature">
-          <span class="method-name">show_src=</span><span class="method-args">(flag)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000089-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000089-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 69</span>
-      <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">show_src=</span>(<span class="ruby-identifier">flag</span>)
-        <span class="ruby-ivar">@@show_src</span> = <span class="ruby-identifier">flag</span>
-      <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html
deleted file mode 100644
index c552994..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::Helpers::RailsHelper::TemplateConverter</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::Helpers::RailsHelper::TemplateConverter</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../../files/erubis/helpers/rails_helper_rb.html">
-                erubis/helpers/rails_helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000092">_create_preprocessor</a>  
-      <a href="#M000093">_preprocessing_context_object</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000092" class="method-detail">
-        <a name="M000092"></a>
-
-        <div class="method-heading">
-          <a href="#M000092" class="method-signature">
-          <span class="method-name">_create_preprocessor</span><span class="method-args">(template)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000092-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000092-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 108</span>
-        <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_create_preprocessor</span>(<span class="ruby-identifier">template</span>)
-          <span class="ruby-keyword kw">return</span> <span class="ruby-constant">PreprocessingEruby</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">template</span>, <span class="ruby-identifier">:escape=</span><span class="ruby-operator">></span><span class="ruby-keyword kw">true</span>)
-        <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000093" class="method-detail">
-        <a name="M000093"></a>
-
-        <div class="method-heading">
-          <a href="#M000093" class="method-signature">
-          <span class="method-name">_preprocessing_context_object</span><span class="method-args">()</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000093-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000093-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helpers/rails_helper.rb, line 111</span>
-        <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_preprocessing_context_object</span>
-          <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>
-        <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/InterpolationEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/InterpolationEnhancer.html
deleted file mode 100644
index d407dcc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/InterpolationEnhancer.html
+++ /dev/null
@@ -1,306 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::InterpolationEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::InterpolationEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-convert "<h1><%=title%></h1>" into "_buf
-<< %Q`<h1>#{title}</h1>`"
-</p>
-<p>
-this is only for <a href="Eruby.html">Eruby</a>.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000022">_add_text_to_str</a>  
-      <a href="#M000023">add_expr_escaped</a>  
-      <a href="#M000024">add_expr_literal</a>  
-      <a href="#M000021">add_text</a>  
-      <a href="#M000020">convert_input</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000022" class="method-detail">
-        <a name="M000022"></a>
-
-        <div class="method-heading">
-          <a href="#M000022" class="method-signature">
-          <span class="method-name">_add_text_to_str</span><span class="method-args">(str, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000022-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000022-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 664</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_add_text_to_str</span>(<span class="ruby-identifier">str</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">text</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/['\#\\]/</span>, <span class="ruby-value str">'\\\\\&'</span>)
-      <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000023" class="method-detail">
-        <a name="M000023"></a>
-
-        <div class="method-heading">
-          <a href="#M000023" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(str, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000023-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000023-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 670</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">str</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"\#{#{escaped_expr(code)}}"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000024" class="method-detail">
-        <a name="M000024"></a>
-
-        <div class="method-heading">
-          <a href="#M000024" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(str, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000024-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 674</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">str</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"\#{#{code}}"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000021" class="method-detail">
-        <a name="M000021"></a>
-
-        <div class="method-heading">
-          <a href="#M000021" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000021-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 653</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">text</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-comment cmt">#src << " _buf << %Q`" << text << "`;"</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-        <span class="ruby-identifier">text</span>[<span class="ruby-value">-1</span>] = <span class="ruby-value str">"\\n"</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << %Q`"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"`\n"</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << %Q`"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"`;"</span>
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000020" class="method-detail">
-        <a name="M000020"></a>
-
-        <div class="method-heading">
-          <a href="#M000020" class="method-signature">
-          <span class="method-name">convert_input</span><span class="method-args">(src, input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000020-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000020-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 598</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert_input</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">pat</span> = <span class="ruby-ivar">@pattern</span>
-      <span class="ruby-identifier">regexp</span> = <span class="ruby-identifier">pat</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">pat</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'<% %>'</span> <span class="ruby-operator">?</span> <span class="ruby-constant">Basic</span><span class="ruby-operator">::</span><span class="ruby-constant">Converter</span><span class="ruby-operator">::</span><span class="ruby-constant">DEFAULT_REGEXP</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">pattern_regexp</span>(<span class="ruby-identifier">pat</span>)
-      <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">is_bol</span> = <span class="ruby-keyword kw">true</span>     <span class="ruby-comment cmt"># is beginning of line</span>
-      <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
-      <span class="ruby-identifier">input</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">regexp</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">indicator</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">tailch</span>, <span class="ruby-identifier">rspace</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">match</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>()
-        <span class="ruby-identifier">len</span>  = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">begin</span>(<span class="ruby-value">0</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">pos</span>
-        <span class="ruby-identifier">text</span> = <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">len</span>]
-        <span class="ruby-identifier">pos</span>  = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)
-        <span class="ruby-identifier">ch</span>   = <span class="ruby-identifier">indicator</span> <span class="ruby-value">? </span><span class="ruby-identifier">indicator</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
-        <span class="ruby-identifier">lspace</span> = <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-value">?=</span> <span class="ruby-operator">?</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">detect_spaces_at_bol</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">is_bol</span>)
-        <span class="ruby-identifier">is_bol</span> = <span class="ruby-identifier">rspace</span> <span class="ruby-value">? </span><span class="ruby-keyword kw">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">false</span>
-        <span class="ruby-identifier">_add_text_to_str</span>(<span class="ruby-identifier">str</span>, <span class="ruby-identifier">text</span>)
-        <span class="ruby-comment cmt">## * when '<%= %>', do nothing</span>
-        <span class="ruby-comment cmt">## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'</span>
-        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-value">?=</span>              <span class="ruby-comment cmt"># <%= %></span>
-          <span class="ruby-identifier">rspace</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tailch</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">tailch</span>.<span class="ruby-identifier">empty?</span>
-          <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">lspace</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span>
-          <span class="ruby-identifier">add_expr</span>(<span class="ruby-identifier">str</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">indicator</span>)
-          <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">rspace</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rspace</span>
-        <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">ch</span> <span class="ruby-operator">==</span> <span class="ruby-value">?\#</span>          <span class="ruby-comment cmt"># <%# %></span>
-          <span class="ruby-identifier">n</span> = <span class="ruby-identifier">code</span>.<span class="ruby-identifier">count</span>(<span class="ruby-value str">"\n"</span>) <span class="ruby-operator">+</span> (<span class="ruby-identifier">rspace</span> <span class="ruby-value">? </span><span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span>)
-          <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@trim</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">lspace</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span>
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">str</span>)
-            <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
-            <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">n</span>)
-          <span class="ruby-keyword kw">else</span>
-            <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">lspace</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span>
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">str</span>)
-            <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
-            <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">n</span>)
-            <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">rspace</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rspace</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">else</span>                     <span class="ruby-comment cmt"># <% %></span>
-          <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@trim</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">lspace</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span>
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">str</span>)
-            <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
-            <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-node">"#{lspace}#{code}#{rspace}"</span>)
-          <span class="ruby-keyword kw">else</span>
-            <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">lspace</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span>
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">str</span>)
-            <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
-            <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-            <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">rspace</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rspace</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = $' || input                       # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">pos</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">input</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]  <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-identifier">_add_text_to_str</span>(<span class="ruby-identifier">str</span>, <span class="ruby-identifier">rest</span>)
-      <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">str</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/InterpolationEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/InterpolationEruby.html
deleted file mode 100644
index 8716d80..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/InterpolationEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::InterpolationEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::InterpolationEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="InterpolationEnhancer.html">InterpolationEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/JavaGenerator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/JavaGenerator.html
deleted file mode 100644
index 25cbd87..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/JavaGenerator.html
+++ /dev/null
@@ -1,359 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::JavaGenerator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::JavaGenerator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ejava_rb.html">
-                erubis/engine/ejava.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000186">add_expr_debug</a>  
-      <a href="#M000185">add_expr_escaped</a>  
-      <a href="#M000184">add_expr_literal</a>  
-      <a href="#M000187">add_postamble</a>  
-      <a href="#M000180">add_preamble</a>  
-      <a href="#M000183">add_stmt</a>  
-      <a href="#M000182">add_text</a>  
-      <a href="#M000181">escape_text</a>  
-      <a href="#M000179">init_generator</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000186" class="method-detail">
-        <a name="M000186"></a>
-
-        <div class="method-heading">
-          <a href="#M000186" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000186-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000186-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 69</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">" System.err.println(\"*** debug: #{code}=\"+(#{code}));"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000185" class="method-detail">
-        <a name="M000185"></a>
-
-        <div class="method-heading">
-          <a href="#M000185" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000185-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000185-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 65</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>))
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000184" class="method-detail">
-        <a name="M000184"></a>
-
-        <div class="method-heading">
-          <a href="#M000184" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000184-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000184-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 59</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">" #{@buf}.append(#{code});"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000187" class="method-detail">
-        <a name="M000187"></a>
-
-        <div class="method-heading">
-          <a href="#M000187" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000187-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000187-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 75</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?;</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"return "</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">".toString();\n"</span>
-      <span class="ruby-comment cmt">#src << @indent << "System.out.print(" << @buf << ".toString());\n"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000180" class="method-detail">
-        <a name="M000180"></a>
-
-        <div class="method-heading">
-          <a href="#M000180" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000180-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000180-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 33</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{@indent}#{@bufclass} #{@buf} = new #{@bufclass}();"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000183" class="method-detail">
-        <a name="M000183"></a>
-
-        <div class="method-heading">
-          <a href="#M000183" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000183-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000183-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 55</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000182" class="method-detail">
-        <a name="M000182"></a>
-
-        <div class="method-heading">
-          <a href="#M000182" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000182-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000182-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 42</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">src</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@indent</span> <span class="ruby-operator">:</span> <span class="ruby-value str">' '</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">".append("</span>
-      <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">each_line</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'          + '</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
-        <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'"'</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">line</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">'"'</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">");"</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">text</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span> <span class="ruby-operator">?</span> <span class="ruby-value str">"\n"</span> <span class="ruby-operator">:</span> <span class="ruby-value str">""</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000181" class="method-detail">
-        <a name="M000181"></a>
-
-        <div class="method-heading">
-          <a href="#M000181" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000181-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000181-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 37</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-ivar">@@table_</span> <span class="ruby-operator">||=</span> { <span class="ruby-value str">"\r"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\r"</span>, <span class="ruby-value str">"\n"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\n"</span>, <span class="ruby-value str">"\t"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\t"</span>, <span class="ruby-value str">'"'</span>=<span class="ruby-operator">></span><span class="ruby-value str">'\\"'</span>, <span class="ruby-value str">"\\"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\\\"</span> }
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/[\r\n\t"\\]/</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@@table_</span>[<span class="ruby-identifier">m</span>] } <span class="ruby-operator">||</span> <span class="ruby-identifier">text</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000179" class="method-detail">
-        <a name="M000179"></a>
-
-        <div class="method-heading">
-          <a href="#M000179" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000179-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000179-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 25</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'escape'</span>
-      <span class="ruby-ivar">@indent</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:indent</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>
-      <span class="ruby-ivar">@buf</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:buf</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'_buf'</span>
-      <span class="ruby-ivar">@bufclass</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:bufclass</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'StringBuffer'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/JavascriptGenerator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/JavascriptGenerator.html
deleted file mode 100644
index e39012b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/JavascriptGenerator.html
+++ /dev/null
@@ -1,386 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::JavascriptGenerator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::JavascriptGenerator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ejavascript_rb.html">
-                erubis/engine/ejavascript.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000177">add_expr_debug</a>  
-      <a href="#M000176">add_expr_escaped</a>  
-      <a href="#M000175">add_expr_literal</a>  
-      <a href="#M000172">add_indent</a>  
-      <a href="#M000178">add_postamble</a>  
-      <a href="#M000170">add_preamble</a>  
-      <a href="#M000174">add_stmt</a>  
-      <a href="#M000173">add_text</a>  
-      <a href="#M000171">escape_text</a>  
-      <a href="#M000169">init_generator</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000177" class="method-detail">
-        <a name="M000177"></a>
-
-        <div class="method-heading">
-          <a href="#M000177" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000177-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000177-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 73</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">add_indent</span>(<span class="ruby-identifier">src</span>, <span class="ruby-ivar">@indent</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"alert(\"*** debug: #{code}=\"+(#{code}));"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000176" class="method-detail">
-        <a name="M000176"></a>
-
-        <div class="method-heading">
-          <a href="#M000176" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000176-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000176-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 69</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>))
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000175" class="method-detail">
-        <a name="M000175"></a>
-
-        <div class="method-heading">
-          <a href="#M000175" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000175-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000175-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 63</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">add_indent</span>(<span class="ruby-identifier">src</span>, <span class="ruby-ivar">@indent</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{@buf}.push(#{code});"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000172" class="method-detail">
-        <a name="M000172"></a>
-
-        <div class="method-heading">
-          <a href="#M000172" class="method-signature">
-          <span class="method-name">add_indent</span><span class="method-args">(src, indent)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000172-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000172-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 42</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_indent</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">indent</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">src</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">indent</span> <span class="ruby-operator">:</span> <span class="ruby-value str">' '</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000178" class="method-detail">
-        <a name="M000178"></a>
-
-        <div class="method-heading">
-          <a href="#M000178" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000178-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000178-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 79</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?;</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@docwrite</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'document.write('</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">".join(\"\"));\n"</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@indent</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">".join(\"\");\n"</span>
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000170" class="method-detail">
-        <a name="M000170"></a>
-
-        <div class="method-heading">
-          <a href="#M000170" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000170-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000170-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 33</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{@indent}var #{@buf} = [];"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000174" class="method-detail">
-        <a name="M000174"></a>
-
-        <div class="method-heading">
-          <a href="#M000174" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000174-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000174-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 59</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000173" class="method-detail">
-        <a name="M000173"></a>
-
-        <div class="method-heading">
-          <a href="#M000173" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000173-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000173-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 46</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-identifier">add_indent</span>(<span class="ruby-identifier">src</span>, <span class="ruby-ivar">@indent</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'.push("'</span>
-      <span class="ruby-identifier">s</span> = <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">s</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-        <span class="ruby-identifier">s</span>[<span class="ruby-value">-2</span>, <span class="ruby-value">2</span>] = <span class="ruby-value str">''</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\");\n"</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\");"</span>
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000171" class="method-detail">
-        <a name="M000171"></a>
-
-        <div class="method-heading">
-          <a href="#M000171" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000171-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000171-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 37</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-ivar">@@table_</span> <span class="ruby-operator">||=</span> { <span class="ruby-value str">"\r"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\r"</span>, <span class="ruby-value str">"\n"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\n\\\n"</span>, <span class="ruby-value str">"\t"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\t"</span>, <span class="ruby-value str">'"'</span>=<span class="ruby-operator">></span><span class="ruby-value str">'\\"'</span>, <span class="ruby-value str">"\\"</span>=<span class="ruby-operator">></span><span class="ruby-value str">"\\\\"</span> }
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/[\r\n\t"\\]/</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@@table_</span>[<span class="ruby-identifier">m</span>] } <span class="ruby-operator">||</span> <span class="ruby-identifier">text</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000169" class="method-detail">
-        <a name="M000169"></a>
-
-        <div class="method-heading">
-          <a href="#M000169" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000169-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000169-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 25</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'escape'</span>
-      <span class="ruby-ivar">@indent</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:indent</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>
-      <span class="ruby-ivar">@buf</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:out</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'_buf'</span>
-      <span class="ruby-ivar">@docwrite</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:docwrite</span>] <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">false</span>  <span class="ruby-comment cmt"># '!= false' will be removed in the next release</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Main.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Main.html
deleted file mode 100644
index 8436c8e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/Main.html
+++ /dev/null
@@ -1,340 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::Main</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::Main</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/main_rb.html">
-                erubis/main.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                Object
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-<a href="Main.html#M000212">main</a> class of command
-</p>
-<p>
-ex.
-</p>
-<pre>
-  Main.main(ARGV)
-</pre>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000214">execute</a>  
-      <a href="#M000212">main</a>  
-      <a href="#M000213">new</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Class methods</h3>
-
-      <div id="method-M000212" class="method-detail">
-        <a name="M000212"></a>
-
-        <div class="method-heading">
-          <a href="#M000212" class="method-signature">
-          <span class="method-name">main</span><span class="method-args">(argv=ARGV)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000212-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000212-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/main.rb, line 40</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">main</span>(<span class="ruby-identifier">argv</span>=<span class="ruby-constant">ARGV</span>)
-      <span class="ruby-identifier">status</span> = <span class="ruby-value">0</span>
-      <span class="ruby-keyword kw">begin</span>
-        <span class="ruby-constant">Main</span>.<span class="ruby-identifier">new</span>.<span class="ruby-identifier">execute</span>(<span class="ruby-constant">ARGV</span>)
-      <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">CommandOptionError</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">ex</span>
-        <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">ex</span>.<span class="ruby-identifier">message</span>
-        <span class="ruby-identifier">status</span> = <span class="ruby-value">1</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">exit</span>(<span class="ruby-identifier">status</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000213" class="method-detail">
-        <a name="M000213"></a>
-
-        <div class="method-heading">
-          <a href="#M000213" class="method-signature">
-          <span class="method-name">new</span><span class="method-args">()</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000213-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000213-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/main.rb, line 51</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
-      <span class="ruby-ivar">@single_options</span> = <span class="ruby-value str">"hvxztTSbeBXNUC"</span>
-      <span class="ruby-ivar">@arg_options</span>    = <span class="ruby-value str">"pcrfKIlaE"</span> <span class="ruby-comment cmt">#C</span>
-      <span class="ruby-ivar">@option_names</span>   = {
-        <span class="ruby-value str">'h'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:help</span>,
-        <span class="ruby-value str">'v'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:version</span>,
-        <span class="ruby-value str">'x'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:source</span>,
-        <span class="ruby-value str">'z'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:syntax</span>,
-        <span class="ruby-value str">'T'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:unexpand</span>,
-        <span class="ruby-value str">'t'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:untabify</span>,      <span class="ruby-comment cmt"># obsolete</span>
-        <span class="ruby-value str">'S'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:intern</span>,
-        <span class="ruby-value str">'b'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:bodyonly</span>,
-        <span class="ruby-value str">'B'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:binding</span>,
-        <span class="ruby-value str">'p'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:pattern</span>,
-        <span class="ruby-value str">'c'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:context</span>,
-        <span class="ruby-comment cmt">#'C' => :class,</span>
-        <span class="ruby-value str">'e'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:escape</span>,
-        <span class="ruby-value str">'r'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:requires</span>,
-        <span class="ruby-value str">'f'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:datafiles</span>,
-        <span class="ruby-value str">'K'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:kanji</span>,
-        <span class="ruby-value str">'I'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:includes</span>,
-        <span class="ruby-value str">'l'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:lang</span>,
-        <span class="ruby-value str">'a'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:action</span>,
-        <span class="ruby-value str">'E'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:enhancers</span>,
-        <span class="ruby-value str">'X'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:notext</span>,
-        <span class="ruby-value str">'N'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:linenum</span>,
-        <span class="ruby-value str">'U'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:unique</span>,
-        <span class="ruby-value str">'C'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">:compact</span>,
-      }
-      <span class="ruby-identifier">assert</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@single_options</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@arg_options</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@option_names</span>.<span class="ruby-identifier">length</span>
-      (<span class="ruby-ivar">@single_options</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@arg_options</span>).<span class="ruby-identifier">each_byte</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ch</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">assert</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@option_names</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">ch</span>.<span class="ruby-identifier">chr</span>)
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000214" class="method-detail">
-        <a name="M000214"></a>
-
-        <div class="method-heading">
-          <a href="#M000214" class="method-signature">
-          <span class="method-name">execute</span><span class="method-args">(argv=ARGV)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000214-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000214-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/main.rb, line 87</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">execute</span>(<span class="ruby-identifier">argv</span>=<span class="ruby-constant">ARGV</span>)
-      <span class="ruby-comment cmt">## parse command-line options</span>
-      <span class="ruby-identifier">options</span>, <span class="ruby-identifier">properties</span> = <span class="ruby-identifier">parse_argv</span>(<span class="ruby-identifier">argv</span>, <span class="ruby-ivar">@single_options</span>, <span class="ruby-ivar">@arg_options</span>)
-      <span class="ruby-identifier">filenames</span> = <span class="ruby-identifier">argv</span>
-      <span class="ruby-identifier">options</span>[<span class="ruby-value str">'h'</span>] = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:help</span>]
-      <span class="ruby-identifier">opts</span> = <span class="ruby-constant">Object</span>.<span class="ruby-identifier">new</span>
-      <span class="ruby-identifier">arr</span> = <span class="ruby-ivar">@option_names</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">ch</span>, <span class="ruby-identifier">name</span><span class="ruby-operator">|</span> <span class="ruby-node">"def #{name}; @#{name}; end\n"</span> }
-      <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">instance_eval</span> <span class="ruby-identifier">arr</span>.<span class="ruby-identifier">join</span>
-      <span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ch</span>, <span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@option_names</span>[<span class="ruby-identifier">ch</span>]
-        <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-node">"@#{name}"</span>, <span class="ruby-identifier">val</span>)
-      <span class="ruby-keyword kw">end</span>
-
-      <span class="ruby-comment cmt">## help, version, enhancer list</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">help</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">version</span>
-        <span class="ruby-identifier">puts</span> <span class="ruby-identifier">version</span>()         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">version</span>
-        <span class="ruby-identifier">puts</span> <span class="ruby-identifier">usage</span>()           <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">help</span>
-        <span class="ruby-identifier">puts</span> <span class="ruby-identifier">show_properties</span>() <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">help</span>
-        <span class="ruby-identifier">puts</span> <span class="ruby-identifier">show_enhancers</span>()  <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">help</span>
-        <span class="ruby-keyword kw">return</span>
-      <span class="ruby-keyword kw">end</span>
-
-      <span class="ruby-comment cmt">## include path</span>
-      <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">includes</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp re">/,/</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">$:</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">path</span>
-      <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">includes</span>
-
-      <span class="ruby-comment cmt">## require library</span>
-      <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">requires</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp re">/,/</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">library</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">require</span> <span class="ruby-identifier">library</span>
-      <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">requires</span>
-
-      <span class="ruby-comment cmt">## action</span>
-      <span class="ruby-identifier">action</span> = <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">action</span>
-      <span class="ruby-identifier">action</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'syntax'</span>  <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">syntax</span>
-      <span class="ruby-identifier">action</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'convert'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">notext</span>
-
-      <span class="ruby-comment cmt">## lang</span>
-      <span class="ruby-identifier">lang</span> = <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">lang</span> <span class="ruby-operator">||</span> <span class="ruby-value str">'ruby'</span>
-      <span class="ruby-identifier">action</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'convert'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">lang</span>
-
-      <span class="ruby-comment cmt">## class name of Eruby</span>
-      <span class="ruby-comment cmt">#classname = opts.class</span>
-      <span class="ruby-identifier">classname</span> = <span class="ruby-keyword kw">nil</span>
-      <span class="ruby-identifier">klass</span> = <span class="ruby-identifier">get_classobj</span>(<span class="ruby-identifier">classname</span>, <span class="ruby-identifier">lang</span>, <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:pi</span>])
-
-      <span class="ruby-comment cmt">## kanji code</span>
-      <span class="ruby-identifier">$KCODE</span> = <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">kanji</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">kanji</span>
-
-      <span class="ruby-comment cmt">## read context values from yaml file</span>
-      <span class="ruby-identifier">datafiles</span> = <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">datafiles</span>
-      <span class="ruby-identifier">context</span> = <span class="ruby-identifier">load_datafiles</span>(<span class="ruby-identifier">datafiles</span>, <span class="ruby-identifier">opts</span>)
-
-      <span class="ruby-comment cmt">## parse context data</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">context</span>
-        <span class="ruby-identifier">context</span> = <span class="ruby-identifier">parse_context_data</span>(<span class="ruby-identifier">opts</span>.<span class="ruby-identifier">context</span>, <span class="ruby-identifier">opts</span>)
-      <span class="ruby-keyword kw">end</span>
-
-      <span class="ruby-comment cmt">## properties for engine</span>
-      <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:escape</span>]   = <span class="ruby-keyword kw">true</span>         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">escape</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">properties</span>.<span class="ruby-identifier">key?</span>(<span class="ruby-identifier">:escape</span>)
-      <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:pattern</span>]  = <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">pattern</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">pattern</span>
-      <span class="ruby-comment cmt">#properties[:trim]     = false        if opts.notrim</span>
-      <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:preamble</span>] = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:postamble</span>] = <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">bodyonly</span>
-      <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:pi</span>]       = <span class="ruby-keyword kw">nil</span>          <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:pi</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword kw">true</span>
-
-      <span class="ruby-comment cmt">## create engine and extend enhancers</span>
-      <span class="ruby-identifier">engine</span> = <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">properties</span>)
-      <span class="ruby-identifier">enhancers</span> = <span class="ruby-identifier">get_enhancers</span>(<span class="ruby-identifier">opts</span>.<span class="ruby-identifier">enhancers</span>)
-      <span class="ruby-comment cmt">#enhancers.push(Erubis::EscapeEnhancer) if opts.escape</span>
-      <span class="ruby-identifier">enhancers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">enhancer</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-identifier">enhancer</span>)
-        <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">bipattern</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:bipattern</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">enhancer</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">BiPatternEnhancer</span>
-      <span class="ruby-keyword kw">end</span>
-
-      <span class="ruby-comment cmt">## no-text</span>
-      <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-constant">Erubis</span><span class="ruby-operator">::</span><span class="ruby-constant">NoTextEnhancer</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">notext</span>
-
-      <span class="ruby-comment cmt">## convert and execute</span>
-      <span class="ruby-identifier">val</span> = <span class="ruby-keyword kw">nil</span>
-      <span class="ruby-identifier">msg</span> = <span class="ruby-value str">"Syntax OK\n"</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">filenames</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">filenames</span>.<span class="ruby-identifier">empty?</span>
-        <span class="ruby-identifier">filenames</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">filename</span><span class="ruby-operator">|</span>
-          <span class="ruby-identifier">test</span>(<span class="ruby-value">?f</span>, <span class="ruby-identifier">filename</span>)  <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">CommandOptionError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"#{filename}: file not found."</span>)
-          <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">filename</span> = <span class="ruby-identifier">filename</span>
-          <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">convert!</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">filename</span>))
-          <span class="ruby-identifier">val</span> = <span class="ruby-identifier">do_action</span>(<span class="ruby-identifier">action</span>, <span class="ruby-identifier">engine</span>, <span class="ruby-identifier">context</span>, <span class="ruby-identifier">filename</span>, <span class="ruby-identifier">opts</span>)
-          <span class="ruby-identifier">msg</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">val</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">filename</span> = <span class="ruby-identifier">filename</span> = <span class="ruby-value str">'(stdin)'</span>
-        <span class="ruby-identifier">engine</span>.<span class="ruby-identifier">convert!</span>(<span class="ruby-identifier">$stdin</span>.<span class="ruby-identifier">read</span>())
-        <span class="ruby-identifier">val</span> = <span class="ruby-identifier">do_action</span>(<span class="ruby-identifier">action</span>, <span class="ruby-identifier">engine</span>, <span class="ruby-identifier">context</span>, <span class="ruby-identifier">filename</span>, <span class="ruby-identifier">opts</span>)
-        <span class="ruby-identifier">msg</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">val</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">print</span> <span class="ruby-identifier">msg</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">action</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'syntax'</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">msg</span>
-
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoCodeEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoCodeEnhancer.html
deleted file mode 100644
index f761ccd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoCodeEnhancer.html
+++ /dev/null
@@ -1,249 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::NoCodeEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::NoCodeEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-remove code and leave text, especially useful when validating HTML tags.
-</p>
-<p>
-ex.
-</p>
-<pre>
-  $ erubis -s -E NoCode file.eruby | tidy -errors
-</pre>
-<p>
-this is language independent.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000006">add_expr</a>  
-      <a href="#M000004">add_postamble</a>  
-      <a href="#M000003">add_preamble</a>  
-      <a href="#M000007">add_stmt</a>  
-      <a href="#M000005">add_text</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000006" class="method-detail">
-        <a name="M000006"></a>
-
-        <div class="method-heading">
-          <a href="#M000006" class="method-signature">
-          <span class="method-name">add_expr</span><span class="method-args">(src, code, indicator)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000006-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 318</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">indicator</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">code</span>.<span class="ruby-identifier">count</span>(<span class="ruby-value str">"\n"</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000004" class="method-detail">
-        <a name="M000004"></a>
-
-        <div class="method-heading">
-          <a href="#M000004" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000004-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 311</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000003" class="method-detail">
-        <a name="M000003"></a>
-
-        <div class="method-heading">
-          <a href="#M000003" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000003-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 308</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000007" class="method-detail">
-        <a name="M000007"></a>
-
-        <div class="method-heading">
-          <a href="#M000007" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000007-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 322</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">code</span>.<span class="ruby-identifier">count</span>(<span class="ruby-value str">"\n"</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000005" class="method-detail">
-        <a name="M000005"></a>
-
-        <div class="method-heading">
-          <a href="#M000005" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000005-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 314</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoCodeEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoCodeEruby.html
deleted file mode 100644
index f52b4d0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoCodeEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::NoCodeEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::NoCodeEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="NoCodeEnhancer.html">NoCodeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoTextEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoTextEnhancer.html
deleted file mode 100644
index 1849be0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoTextEnhancer.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::NoTextEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::NoTextEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-remove text and leave code, especially useful when debugging.
-</p>
-<p>
-ex.
-</p>
-<pre>
-  $ erubis -s -E NoText file.eruby | more
-</pre>
-<p>
-this is language independent.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000189">add_text</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000189" class="method-detail">
-        <a name="M000189"></a>
-
-        <div class="method-heading">
-          <a href="#M000189" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000189-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000189-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 283</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> (<span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">count</span>(<span class="ruby-value str">"\n"</span>))
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">!=</span> <span class="ruby-value">?\n</span>
-        <span class="ruby-identifier">text</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^(.*?)\z/</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> (<span class="ruby-value str">' '</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">$1</span>.<span class="ruby-identifier">length</span>)
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoTextEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoTextEruby.html
deleted file mode 100644
index c6094c0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NoTextEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::NoTextEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::NoTextEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="NoTextEnhancer.html">NoTextEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NotSupportedError.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NotSupportedError.html
deleted file mode 100644
index c3c75b7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/NotSupportedError.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::NotSupportedError</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::NotSupportedError</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/error_rb.html">
-                erubis/error.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="ErubisError.html">
-                ErubisError
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-raised when method or function is not supported
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedEruby.html
deleted file mode 100644
index 0599737..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedEruby.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::OptimizedEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::OptimizedEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/optimized_rb.html">
-                erubis/engine/optimized.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Basic/Engine.html">
-                Basic::Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-<a href="Eruby.html">Eruby</a> class which generates optimized ruby code
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000211">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="RubyEvaluator.html">RubyEvaluator</a></span>
-        <span class="include-name"><a href="OptimizedGenerator.html">OptimizedGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000211" class="method-detail">
-        <a name="M000211"></a>
-
-        <div class="method-heading">
-          <a href="#M000211" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000211-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000211-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 107</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@pi</span> = <span class="ruby-value str">'rb'</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedGenerator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedGenerator.html
deleted file mode 100644
index 98f6c28..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedGenerator.html
+++ /dev/null
@@ -1,439 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::OptimizedGenerator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::OptimizedGenerator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/optimized_rb.html">
-                erubis/engine/optimized.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000143">add_expr_debug</a>  
-      <a href="#M000142">add_expr_escaped</a>  
-      <a href="#M000141">add_expr_literal</a>  
-      <a href="#M000144">add_postamble</a>  
-      <a href="#M000138">add_preamble</a>  
-      <a href="#M000140">add_stmt</a>  
-      <a href="#M000139">add_text</a>  
-      <a href="#M000134">escape_text</a>  
-      <a href="#M000135">escaped_expr</a>  
-      <a href="#M000133">init_generator</a>  
-      <a href="#M000136">switch_to_expr</a>  
-      <a href="#M000137">switch_to_stmt</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000133" class="method-detail">
-        <a name="M000133"></a>
-
-        <div class="method-heading">
-          <a href="#M000133" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000133-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000133-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 21</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">"Erubis::XmlHelper.escape_xml"</span>
-      <span class="ruby-ivar">@initialized</span> = <span class="ruby-keyword kw">false</span>
-      <span class="ruby-ivar">@prev_is_expr</span> = <span class="ruby-keyword kw">false</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Protected Instance methods</h3>
-
-      <div id="method-M000143" class="method-detail">
-        <a name="M000143"></a>
-
-        <div class="method-heading">
-          <a href="#M000143" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000143-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000143-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 86</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">s</span> = (<span class="ruby-identifier">code</span>.<span class="ruby-identifier">dump</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/\A"(.*)"\z/</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">$1</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">' $stderr.puts("*** debug: '</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'=#{('</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">').inspect}");'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000142" class="method-detail">
-        <a name="M000142"></a>
-
-        <div class="method-heading">
-          <a href="#M000142" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000142-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000142-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 80</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@initialized</span>; <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf = ''"</span>; <span class="ruby-ivar">@initialized</span> = <span class="ruby-keyword kw">true</span>; <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">switch_to_expr</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" << "</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000141" class="method-detail">
-        <a name="M000141"></a>
-
-        <div class="method-heading">
-          <a href="#M000141" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000141-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000141-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 74</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@initialized</span>; <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf = ''"</span>; <span class="ruby-ivar">@initialized</span> = <span class="ruby-keyword kw">true</span>; <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">switch_to_expr</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" << ("</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">").to_s"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000144" class="method-detail">
-        <a name="M000144"></a>
-
-        <div class="method-heading">
-          <a href="#M000144" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000144-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000144-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 92</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-comment cmt">#super if @initialized</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n_buf\n"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@initialized</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000138" class="method-detail">
-        <a name="M000138"></a>
-
-        <div class="method-heading">
-          <a href="#M000138" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000138-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000138-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 51</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-comment cmt">#@initialized = false</span>
-      <span class="ruby-comment cmt">#@prev_is_expr = false</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000140" class="method-detail">
-        <a name="M000140"></a>
-
-        <div class="method-heading">
-          <a href="#M000140" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000140-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000140-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 67</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">switch_to_stmt</span>(<span class="ruby-identifier">src</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@initialized</span>
-      <span class="ruby-comment cmt">#super</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">';'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">code</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000139" class="method-detail">
-        <a name="M000139"></a>
-
-        <div class="method-heading">
-          <a href="#M000139" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000139-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000139-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 56</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@initialized</span>
-        <span class="ruby-identifier">switch_to_expr</span>(<span class="ruby-identifier">src</span>)
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" << '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">"'"</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf = '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span>
-        <span class="ruby-ivar">@initialized</span> = <span class="ruby-keyword kw">true</span>
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000134" class="method-detail">
-        <a name="M000134"></a>
-
-        <div class="method-heading">
-          <a href="#M000134" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000134-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000134-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 30</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/['\\]/</span>, <span class="ruby-value str">'\\\\\&'</span>)   <span class="ruby-comment cmt"># "'" => "\\'",  '\\' => '\\\\'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000135" class="method-detail">
-        <a name="M000135"></a>
-
-        <div class="method-heading">
-          <a href="#M000135" class="method-signature">
-          <span class="method-name">escaped_expr</span><span class="method-args">(code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000135-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000135-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 34</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>)
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'Erubis::XmlHelper.escape_xml'</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-node">"#{@escapefunc}(#{code})"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000136" class="method-detail">
-        <a name="M000136"></a>
-
-        <div class="method-heading">
-          <a href="#M000136" class="method-signature">
-          <span class="method-name">switch_to_expr</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000136-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000136-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 39</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">switch_to_expr</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@prev_is_expr</span>
-      <span class="ruby-ivar">@prev_is_expr</span> = <span class="ruby-keyword kw">true</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">' _buf'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000137" class="method-detail">
-        <a name="M000137"></a>
-
-        <div class="method-heading">
-          <a href="#M000137" class="method-signature">
-          <span class="method-name">switch_to_stmt</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000137-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000137-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 45</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">switch_to_stmt</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@prev_is_expr</span>
-      <span class="ruby-ivar">@prev_is_expr</span> = <span class="ruby-keyword kw">false</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">';'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedXmlEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedXmlEruby.html
deleted file mode 100644
index 6290bfe..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/OptimizedXmlEruby.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::OptimizedXmlEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::OptimizedXmlEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/optimized_rb.html">
-                erubis/engine/optimized.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="OptimizedEruby.html">
-                OptimizedEruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-<a href="XmlEruby.html">XmlEruby</a> class which generates optimized ruby
-code
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000222">add_expr_debug</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000222" class="method-detail">
-        <a name="M000222"></a>
-
-        <div class="method-heading">
-          <a href="#M000222" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000222-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000222-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/optimized.rb, line 121</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">switch_to_stmt</span>(<span class="ruby-identifier">src</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">indicator</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'==='</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@initialized</span>
-      <span class="ruby-keyword kw">super</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI.html
deleted file mode 100644
index c9b3af1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::PI</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::PI</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/converter_rb.html">
-                erubis/converter.rb
-                </a>
-        <br />
-                <a href="../../files/erubis/tiny_rb.html">
-                erubis/tiny.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-    <div id="class-list">
-      <h3 class="section-bar">Classes and Modules</h3>
-
-      Module <a href="PI/Converter.html" class="link">Erubis::PI::Converter</a><br />
-Class <a href="PI/Ec.html" class="link">Erubis::PI::Ec</a><br />
-Class <a href="PI/Ejava.html" class="link">Erubis::PI::Ejava</a><br />
-Class <a href="PI/Ejavascript.html" class="link">Erubis::PI::Ejavascript</a><br />
-Class <a href="PI/Engine.html" class="link">Erubis::PI::Engine</a><br />
-Class <a href="PI/Eperl.html" class="link">Erubis::PI::Eperl</a><br />
-Class <a href="PI/Ephp.html" class="link">Erubis::PI::Ephp</a><br />
-Class <a href="PI/Eruby.html" class="link">Erubis::PI::Eruby</a><br />
-Class <a href="PI/Escheme.html" class="link">Erubis::PI::Escheme</a><br />
-Class <a href="PI/TinyEruby.html" class="link">Erubis::PI::TinyEruby</a><br />
-
-    </div>
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Converter.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Converter.html
deleted file mode 100644
index 391922e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Converter.html
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::PI::Converter</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Converter</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/converter_rb.html">
-                erubis/converter.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-Processing Instructions (<a href="../PI.html">PI</a>) converter for XML.
-this class converts ’<?rb … ?>’ and
-’${…}’ notation.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000045">convert</a>  
-      <a href="#M000046">convert_input</a>  
-      <a href="#M000044">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../Converter.html">Erubis::Converter</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-    <div id="attribute-list">
-      <h3 class="section-bar">Attributes</h3>
-
-      <div class="name-list">
-        <table>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">pi</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">prefix</td>
-          <td class="context-item-value"> [RW] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        </table>
-      </div>
-    </div>
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000045" class="method-detail">
-        <a name="M000045"></a>
-
-        <div class="method-heading">
-          <a href="#M000045" class="method-signature">
-          <span class="method-name">convert</span><span class="method-args">(input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000045-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000045-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 225</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">code</span> = <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@header</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@footer</span> <span class="ruby-operator">?</span> <span class="ruby-node">"#{@header}#{code}#{@footer}"</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">code</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000044" class="method-detail">
-        <a name="M000044"></a>
-
-        <div class="method-heading">
-          <a href="#M000044" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000044-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000044-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 216</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-      <span class="ruby-ivar">@trim</span>    = <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-identifier">:trim</span>, <span class="ruby-keyword kw">true</span>)
-      <span class="ruby-ivar">@pi</span>      = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:pi</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:pi</span>]
-      <span class="ruby-ivar">@embchar</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:embchar</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'@'</span>
-      <span class="ruby-ivar">@pattern</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:pattern</span>]
-      <span class="ruby-ivar">@pattern</span> = <span class="ruby-value str">'<% %>'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@pattern</span>.<span class="ruby-identifier">nil?</span>  <span class="ruby-comment cmt">#|| @pattern == true</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Protected Instance methods</h3>
-
-      <div id="method-M000046" class="method-detail">
-        <a name="M000046"></a>
-
-        <div class="method-heading">
-          <a href="#M000046" class="method-signature">
-          <span class="method-name">convert_input</span><span class="method-args">(codebuf, input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000046-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000046-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/converter.rb, line 232</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert_input</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">input</span>)
-      <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@regexp</span>
-        <span class="ruby-ivar">@pi</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'e'</span>
-        <span class="ruby-identifier">ch</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">escape</span>(<span class="ruby-ivar">@embchar</span>)
-        <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@pattern</span>
-          <span class="ruby-identifier">left</span>, <span class="ruby-identifier">right</span> = <span class="ruby-ivar">@pattern</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">' '</span>)
-          <span class="ruby-ivar">@regexp</span> = <span class="ruby-node">/<\?#{@pi}(?:-(\w+))?(\s.*?)\?>([ \t]*\r?\n)?|#{ch}(!*)?\{(.*?)\}#{ch}|#{left}(=+)(.*?)#{right}/</span><span class="ruby-identifier">m</span>
-        <span class="ruby-keyword kw">else</span>
-          <span class="ruby-ivar">@regexp</span> = <span class="ruby-node">/<\?#{@pi}(?:-(\w+))?(\s.*?)\?>([ \t]*\r?\n)?|#{ch}(!*)?\{(.*?)\}#{ch}/</span><span class="ruby-identifier">m</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#</span>
-      <span class="ruby-identifier">is_bol</span> = <span class="ruby-keyword kw">true</span>
-      <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">input</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-ivar">@regexp</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pi_arg</span>, <span class="ruby-identifier">stmt</span>, <span class="ruby-identifier">rspace</span>,
-                              <span class="ruby-identifier">indicator1</span>, <span class="ruby-identifier">expr1</span>, <span class="ruby-identifier">indicator2</span>, <span class="ruby-identifier">expr2</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">match</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>
-        <span class="ruby-identifier">len</span> = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">begin</span>(<span class="ruby-value">0</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">pos</span>
-        <span class="ruby-identifier">text</span> = <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">len</span>]
-        <span class="ruby-identifier">pos</span> = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)
-        <span class="ruby-identifier">lspace</span> = <span class="ruby-identifier">stmt</span> <span class="ruby-value">? </span><span class="ruby-identifier">detect_spaces_at_bol</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">is_bol</span>) <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
-        <span class="ruby-identifier">is_bol</span> = <span class="ruby-identifier">stmt</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span> <span class="ruby-value">? </span><span class="ruby-keyword kw">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">false</span>
-        <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">text</span>) <span class="ruby-comment cmt"># unless text.empty?</span>
-        <span class="ruby-comment cmt">#</span>
-        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stmt</span>
-          <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@trim</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">lspace</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span>
-            <span class="ruby-identifier">add_pi_stmt</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-node">"#{lspace}#{stmt}#{rspace}"</span>, <span class="ruby-identifier">pi_arg</span>)
-          <span class="ruby-keyword kw">else</span>
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">lspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span>
-            <span class="ruby-identifier">add_pi_stmt</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">stmt</span>, <span class="ruby-identifier">pi_arg</span>)
-            <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">rspace</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rspace</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">else</span>
-          <span class="ruby-identifier">add_pi_expr</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">expr1</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">expr2</span>, <span class="ruby-identifier">indicator1</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">indicator2</span>)
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = $' || input                        # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">pos</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">input</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]   <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">codebuf</span>, <span class="ruby-identifier">rest</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ec.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ec.html
deleted file mode 100644
index 089a326..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ec.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::Ec</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Ec</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine/ec_rb.html">
-                erubis/engine/ec.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                PI::Engine
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-class XmlEc < <a href="Ec.html">Ec</a>
-</p>
-<pre>
-  include EscapeEnhancer
-</pre>
-<p>
-end
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000055">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../CGenerator.html">CGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000055" class="method-detail">
-        <a name="M000055"></a>
-
-        <div class="method-heading">
-          <a href="#M000055" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000055-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000055-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ec.rb, line 110</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@pi</span> = <span class="ruby-value str">'c'</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ejava.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ejava.html
deleted file mode 100644
index 86e4f92..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ejava.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::Ejava</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Ejava</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine/ejava_rb.html">
-                erubis/engine/ejava.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                PI::Engine
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-class XmlEjava < <a href="Ejava.html">Ejava</a>
-</p>
-<pre>
-  include EscapeEnhancer
-</pre>
-<p>
-end
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000048">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../JavaGenerator.html">JavaGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000048" class="method-detail">
-        <a name="M000048"></a>
-
-        <div class="method-heading">
-          <a href="#M000048" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000048-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000048-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejava.rb, line 104</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@pi</span> = <span class="ruby-value str">'java'</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ejavascript.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ejavascript.html
deleted file mode 100644
index dfe53fb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ejavascript.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::Ejavascript</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Ejavascript</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine/ejavascript_rb.html">
-                erubis/engine/ejavascript.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                PI::Engine
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-class XmlEjavascript < <a href="Ejavascript.html">Ejavascript</a>
-</p>
-<pre>
-  include EscapeEnhancer
-</pre>
-<p>
-end
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000047">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../JavascriptGenerator.html">JavascriptGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000047" class="method-detail">
-        <a name="M000047"></a>
-
-        <div class="method-heading">
-          <a href="#M000047" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000047-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000047-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ejavascript.rb, line 112</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@pi</span> = <span class="ruby-value str">'js'</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Engine.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Engine.html
deleted file mode 100644
index beb659a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Engine.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::Engine</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Engine</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine_rb.html">
-                erubis/engine.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Engine.html">
-                Engine
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../Evaluator.html">Evaluator</a></span>
-        <span class="include-name"><a href="Converter.html">PI::Converter</a></span>
-        <span class="include-name"><a href="../Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Eperl.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Eperl.html
deleted file mode 100644
index 35a22df..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Eperl.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::Eperl</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Eperl</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine/eperl_rb.html">
-                erubis/engine/eperl.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                PI::Engine
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-class XmlEperl < <a href="Eperl.html">Eperl</a>
-</p>
-<pre>
-  include EscapeEnhancer
-</pre>
-<p>
-end
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000054">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../PerlGenerator.html">PerlGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000054" class="method-detail">
-        <a name="M000054"></a>
-
-        <div class="method-heading">
-          <a href="#M000054" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000054-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000054-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 88</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@pi</span> = <span class="ruby-value str">'perl'</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ephp.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ephp.html
deleted file mode 100644
index a2d1a78..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Ephp.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::Ephp</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Ephp</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine/ephp_rb.html">
-                erubis/engine/ephp.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                PI::Engine
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-class XmlEphp < <a href="Ephp.html">Ephp</a>
-</p>
-<pre>
-  include EscapeEnhancer
-</pre>
-<p>
-end
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000049">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../PhpGenerator.html">PhpGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000049" class="method-detail">
-        <a name="M000049"></a>
-
-        <div class="method-heading">
-          <a href="#M000049" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000049-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000049-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 92</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@pi</span> = <span class="ruby-value str">'php'</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Eruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Eruby.html
deleted file mode 100644
index a62de42..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Eruby.html
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::Eruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Eruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine/eruby_rb.html">
-                erubis/engine/eruby.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                PI::Engine
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000056">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../RubyEvaluator.html">RubyEvaluator</a></span>
-        <span class="include-name"><a href="../RubyGenerator.html">RubyGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000056" class="method-detail">
-        <a name="M000056"></a>
-
-        <div class="method-heading">
-          <a href="#M000056" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000056-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000056-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 117</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@pi</span> = <span class="ruby-value str">'rb'</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Escheme.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Escheme.html
deleted file mode 100644
index 381d293..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/Escheme.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::Escheme</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::Escheme</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/engine/escheme_rb.html">
-                erubis/engine/escheme.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                PI::Engine
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-class XmlEscheme < <a href="Escheme.html">Escheme</a>
-</p>
-<pre>
-  include EscapeEnhancer
-</pre>
-<p>
-end
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000057">init_converter</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="../SchemeGenerator.html">SchemeGenerator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000057" class="method-detail">
-        <a name="M000057"></a>
-
-        <div class="method-heading">
-          <a href="#M000057" class="method-signature">
-          <span class="method-name">init_converter</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000057-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000057-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 107</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_converter</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-ivar">@pi</span> = <span class="ruby-value str">'scheme'</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">properties</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/TinyEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/TinyEruby.html
deleted file mode 100644
index 56cc126..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PI/TinyEruby.html
+++ /dev/null
@@ -1,293 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PI::TinyEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PI::TinyEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../../files/erubis/tiny_rb.html">
-                erubis/tiny.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                Object
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000051">convert</a>  
-      <a href="#M000053">evaluate</a>  
-      <a href="#M000050">new</a>  
-      <a href="#M000052">result</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-    <div id="constants-list">
-      <h3 class="section-bar">Constants</h3>
-
-      <div class="name-list">
-        <table summary="Constants">
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">EMBEDDED_PATTERN</td>
-          <td>=</td>
-          <td class="context-item-value">/(^[ \t]*)?<\?rb(\s.*?)\?>([ \t]*\r?\n)?|@(!+)?\{(.*?)\}@/m</td>
-        </tr>
-        </table>
-      </div>
-    </div>
-
-
-
-    <div id="attribute-list">
-      <h3 class="section-bar">Attributes</h3>
-
-      <div class="name-list">
-        <table>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">src</td>
-          <td class="context-item-value"> [R] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        </table>
-      </div>
-    </div>
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Class methods</h3>
-
-      <div id="method-M000050" class="method-detail">
-        <a name="M000050"></a>
-
-        <div class="method-heading">
-          <a href="#M000050" class="method-signature">
-          <span class="method-name">new</span><span class="method-args">(input=nil, options={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000050-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000050-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/tiny.rb, line 81</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">input</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">options</span>={})
-      <span class="ruby-ivar">@escape</span>  = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:escape</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'Erubis::XmlHelper.escape_xml'</span>
-      <span class="ruby-ivar">@src</span> = <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">input</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000051" class="method-detail">
-        <a name="M000051"></a>
-
-        <div class="method-heading">
-          <a href="#M000051" class="method-signature">
-          <span class="method-name">convert</span><span class="method-args">(input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000051-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000051-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/tiny.rb, line 90</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">src</span> = <span class="ruby-value str">"_buf = '';"</span>           <span class="ruby-comment cmt"># preamble</span>
-      <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">input</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-constant">EMBEDDED_PATTERN</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">lspace</span>, <span class="ruby-identifier">stmt</span>, <span class="ruby-identifier">rspace</span>, <span class="ruby-identifier">indicator</span>, <span class="ruby-identifier">expr</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">match</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>
-        <span class="ruby-identifier">len</span>   = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">begin</span>(<span class="ruby-value">0</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">pos</span>
-        <span class="ruby-identifier">text</span>  = <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">len</span>]
-        <span class="ruby-identifier">pos</span>   = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)
-        <span class="ruby-comment cmt">#src << " _buf << '" << escape_text(text) << "';"</span>
-        <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/['\\]/</span>, <span class="ruby-value str">'\\\\\&'</span>)
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stmt</span>                <span class="ruby-comment cmt"># <?rb ... ?></span>
-          <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">rspace</span>
-            <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{lspace}#{stmt}#{rspace}"</span>
-          <span class="ruby-keyword kw">else</span>
-            <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">lspace</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lspace</span>
-            <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">stmt</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">";"</span>
-            <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">rspace</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rspace</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">else</span>                       <span class="ruby-comment cmt"># ${...}, $!{...}</span>
-          <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">indicator</span>
-            <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << "</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@escape</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"("</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">expr</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">");"</span>
-          <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">indicator</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'!'</span>
-            <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << ("</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">expr</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">").to_s;"</span>
-          <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = $' || input                        # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">pos</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">input</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]   <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-comment cmt">#src << " _buf << '" << escape_text(rest) << "';"</span>
-      <span class="ruby-identifier">rest</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/['\\]/</span>, <span class="ruby-value str">'\\\\\&'</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rest</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n_buf.to_s\n"</span>       <span class="ruby-comment cmt"># postamble</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">src</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000053" class="method-detail">
-        <a name="M000053"></a>
-
-        <div class="method-heading">
-          <a href="#M000053" class="method-signature">
-          <span class="method-name">evaluate</span><span class="method-args">(_context=Object.new)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000053-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000053-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/tiny.rb, line 134</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">evaluate</span>(<span class="ruby-identifier">_context</span>=<span class="ruby-constant">Object</span>.<span class="ruby-identifier">new</span>)
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_context</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
-        <span class="ruby-identifier">_obj</span> = <span class="ruby-constant">Object</span>.<span class="ruby-identifier">new</span>
-        <span class="ruby-identifier">_context</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">_obj</span>.<span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-node">"@#{k}"</span>, <span class="ruby-identifier">v</span>) <span class="ruby-keyword kw">end</span>
-        <span class="ruby-identifier">_context</span> = <span class="ruby-identifier">_obj</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">_context</span>.<span class="ruby-identifier">instance_eval</span> <span class="ruby-ivar">@src</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000052" class="method-detail">
-        <a name="M000052"></a>
-
-        <div class="method-heading">
-          <a href="#M000052" class="method-signature">
-          <span class="method-name">result</span><span class="method-args">(_binding=TOPLEVEL_BINDING)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-def escape_text(text)
-</p>
-<pre>
-  return text.gsub!(/['\\]/, '\\\\\&') || text
-</pre>
-<p>
-end
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000052-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000052-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/tiny.rb, line 130</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">result</span>(<span class="ruby-identifier">_binding</span>=<span class="ruby-constant">TOPLEVEL_BINDING</span>)
-      <span class="ruby-identifier">eval</span> <span class="ruby-ivar">@src</span>, <span class="ruby-identifier">_binding</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PercentLineEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PercentLineEnhancer.html
deleted file mode 100644
index c5c5db2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PercentLineEnhancer.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::PercentLineEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::PercentLineEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-regards lines starting with ’%’ as program code
-</p>
-<p>
-this is for compatibility to eruby and <a href="../ERB.html">ERB</a>.
-</p>
-<p>
-this is language-independent.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000188">add_text</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000188" class="method-detail">
-        <a name="M000188"></a>
-
-        <div class="method-heading">
-          <a href="#M000188" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000188-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000188-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 450</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">text2</span> = <span class="ruby-value str">''</span>
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-regexp re">/^\%(.*?\r?\n)/</span>) <span class="ruby-keyword kw">do</span>
-        <span class="ruby-identifier">line</span>  = <span class="ruby-identifier">$1</span>
-        <span class="ruby-identifier">match</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>
-        <span class="ruby-identifier">len</span>   = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">begin</span>(<span class="ruby-value">0</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">pos</span>
-        <span class="ruby-identifier">str</span>   = <span class="ruby-identifier">text</span>[<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">len</span>]
-        <span class="ruby-identifier">pos</span>   = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)
-        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text2</span>.<span class="ruby-identifier">empty?</span>
-          <span class="ruby-identifier">text2</span> = <span class="ruby-identifier">str</span>
-        <span class="ruby-keyword kw">else</span>
-          <span class="ruby-identifier">text2</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">str</span>
-        <span class="ruby-keyword kw">end</span>
-        <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?%</span>
-          <span class="ruby-identifier">text2</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">line</span>
-        <span class="ruby-keyword kw">else</span>
-          <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text2</span>)
-          <span class="ruby-identifier">text2</span> = <span class="ruby-value str">''</span>
-          <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">line</span>)
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = pos == 0 ? text : $'             # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">pos</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">text</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">text</span>[<span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]   <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text2</span>.<span class="ruby-identifier">empty?</span>
-        <span class="ruby-identifier">text2</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">rest</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rest</span>
-        <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">text2</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rest</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PercentLineEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PercentLineEruby.html
deleted file mode 100644
index 8621292..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PercentLineEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PercentLineEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PercentLineEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="PercentLineEnhancer.html">PercentLineEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PerlGenerator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PerlGenerator.html
deleted file mode 100644
index 7d7cdad..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PerlGenerator.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::PerlGenerator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::PerlGenerator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/eperl_rb.html">
-                erubis/engine/eperl.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000077">add_expr_debug</a>  
-      <a href="#M000076">add_expr_escaped</a>  
-      <a href="#M000075">add_expr_literal</a>  
-      <a href="#M000079">add_postamble</a>  
-      <a href="#M000072">add_preamble</a>  
-      <a href="#M000078">add_stmt</a>  
-      <a href="#M000074">add_text</a>  
-      <a href="#M000073">escape_text</a>  
-      <a href="#M000071">init_generator</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000077" class="method-detail">
-        <a name="M000077"></a>
-
-        <div class="method-heading">
-          <a href="#M000077" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000077-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000077-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 50</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">s</span> = <span class="ruby-identifier">code</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\'/</span>, <span class="ruby-value str">"\\'"</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@func</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"('*** debug: #{code}=', #{code}, \"\\n\");"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000076" class="method-detail">
-        <a name="M000076"></a>
-
-        <div class="method-heading">
-          <a href="#M000076" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000076-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000076-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 46</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>))
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000075" class="method-detail">
-        <a name="M000075"></a>
-
-        <div class="method-heading">
-          <a href="#M000075" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000075-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000075-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 41</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@func</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"("</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"); "</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000079" class="method-detail">
-        <a name="M000079"></a>
-
-        <div class="method-heading">
-          <a href="#M000079" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000079-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000079-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 60</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000072" class="method-detail">
-        <a name="M000072"></a>
-
-        <div class="method-heading">
-          <a href="#M000072" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000072-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000072-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 29</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"use HTML::Entities; "</span>;
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000078" class="method-detail">
-        <a name="M000078"></a>
-
-        <div class="method-heading">
-          <a href="#M000078" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000078-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000078-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 56</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000074" class="method-detail">
-        <a name="M000074"></a>
-
-        <div class="method-heading">
-          <a href="#M000074" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000074-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000074-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 37</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@func</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"('"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">"'); "</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000073" class="method-detail">
-        <a name="M000073"></a>
-
-        <div class="method-heading">
-          <a href="#M000073" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000073-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000073-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 33</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/['\\]/</span>, <span class="ruby-value str">'\\\\\&'</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">text</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000071" class="method-detail">
-        <a name="M000071"></a>
-
-        <div class="method-heading">
-          <a href="#M000071" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000071-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000071-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eperl.rb, line 23</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'encode_entities'</span>
-      <span class="ruby-ivar">@func</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:func</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'print'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PhpGenerator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PhpGenerator.html
deleted file mode 100644
index fa8d585..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PhpGenerator.html
+++ /dev/null
@@ -1,350 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::PhpGenerator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::PhpGenerator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/ephp_rb.html">
-                erubis/engine/ephp.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000151">add_expr_debug</a>  
-      <a href="#M000150">add_expr_escaped</a>  
-      <a href="#M000149">add_expr_literal</a>  
-      <a href="#M000153">add_postamble</a>  
-      <a href="#M000146">add_preamble</a>  
-      <a href="#M000152">add_stmt</a>  
-      <a href="#M000148">add_text</a>  
-      <a href="#M000147">escape_text</a>  
-      <a href="#M000145">init_generator</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000151" class="method-detail">
-        <a name="M000151"></a>
-
-        <div class="method-heading">
-          <a href="#M000151" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000151-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000151-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 47</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">s</span> = <span class="ruby-identifier">code</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\'/</span>, <span class="ruby-value str">"\\'"</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"<?php error_log('*** debug: #{s}='.(#{code}), 0); ?>"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000150" class="method-detail">
-        <a name="M000150"></a>
-
-        <div class="method-heading">
-          <a href="#M000150" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000150-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000150-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 43</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>))
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000149" class="method-detail">
-        <a name="M000149"></a>
-
-        <div class="method-heading">
-          <a href="#M000149" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000149-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000149-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 38</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"<?php echo #{code}; ?>"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000153" class="method-detail">
-        <a name="M000153"></a>
-
-        <div class="method-heading">
-          <a href="#M000153" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000153-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000153-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 64</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-comment cmt"># empty</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000146" class="method-detail">
-        <a name="M000146"></a>
-
-        <div class="method-heading">
-          <a href="#M000146" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000146-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000146-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 26</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-comment cmt"># empty</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000152" class="method-detail">
-        <a name="M000152"></a>
-
-        <div class="method-heading">
-          <a href="#M000152" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000152-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000152-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 53</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"<?php"</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" "</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">code</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value">?\ </span><span class="ruby-comment cmt">#</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">code</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-        <span class="ruby-identifier">code</span>.<span class="ruby-identifier">chomp!</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"?>\n"</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"?>"</span>
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000148" class="method-detail">
-        <a name="M000148"></a>
-
-        <div class="method-heading">
-          <a href="#M000148" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000148-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000148-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 34</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000147" class="method-detail">
-        <a name="M000147"></a>
-
-        <div class="method-heading">
-          <a href="#M000147" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000147-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000147-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 30</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/<\?xml\b/</span>, <span class="ruby-value str">'<<?php ?>?xml'</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">text</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000145" class="method-detail">
-        <a name="M000145"></a>
-
-        <div class="method-heading">
-          <a href="#M000145" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000145-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000145-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/ephp.rb, line 21</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'htmlspecialchars'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PreprocessingEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PreprocessingEruby.html
deleted file mode 100644
index 4a59d86..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PreprocessingEruby.html
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PreprocessingEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PreprocessingEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/preprocessing_rb.html">
-                erubis/preprocessing.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Erubis::Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-for preprocessing
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000205">add_expr_escaped</a>  
-      <a href="#M000204">new</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Class methods</h3>
-
-      <div id="method-M000204" class="method-detail">
-        <a name="M000204"></a>
-
-        <div class="method-heading">
-          <a href="#M000204" class="method-signature">
-          <span class="method-name">new</span><span class="method-args">(input, params={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000204-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000204-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/preprocessing.rb, line 18</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">input</span>, <span class="ruby-identifier">params</span>={})
-      <span class="ruby-identifier">params</span> = <span class="ruby-identifier">params</span>.<span class="ruby-identifier">dup</span>
-      <span class="ruby-identifier">params</span>[<span class="ruby-identifier">:pattern</span>] <span class="ruby-operator">||=</span> <span class="ruby-value str">'\[% %\]'</span>    <span class="ruby-comment cmt"># use '[%= %]' instead of '<%= %>'</span>
-      <span class="ruby-comment cmt">#params[:escape] = true            # transport '[%= %]' and '[%== %]'</span>
-      <span class="ruby-keyword kw">super</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000205" class="method-detail">
-        <a name="M000205"></a>
-
-        <div class="method-heading">
-          <a href="#M000205" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000205-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000205-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/preprocessing.rb, line 25</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-node">"_decode((#{code}))"</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PreprocessingHelper.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PreprocessingHelper.html
deleted file mode 100644
index 0f3b1b9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PreprocessingHelper.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::PreprocessingHelper</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::PreprocessingHelper</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/preprocessing_rb.html">
-                erubis/preprocessing.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-helper methods for preprocessing
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000064">_?</a>  
-      <a href="#M000063">_P</a>  
-      <a href="#M000065">_decode</a>  
-      <a href="#M000062">_p</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000064" class="method-detail">
-        <a name="M000064"></a>
-
-        <div class="method-heading">
-          <span class="method-name">_?</span><span class="method-args">(arg)</span>
-        </div>
-      
-        <div class="method-description">
-          <p>
-Alias for <a href="PreprocessingHelper.html#M000062">_p</a>
-</p>
-        </div>
-      </div>
-
-      <div id="method-M000063" class="method-detail">
-        <a name="M000063"></a>
-
-        <div class="method-heading">
-          <a href="#M000063" class="method-signature">
-          <span class="method-name">_P</span><span class="method-args">(arg)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000063-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000063-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/preprocessing.rb, line 43</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_P</span>(<span class="ruby-identifier">arg</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-node">"<%=h(#{arg})%>"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000065" class="method-detail">
-        <a name="M000065"></a>
-
-        <div class="method-heading">
-          <a href="#M000065" class="method-signature">
-          <span class="method-name">_decode</span><span class="method-args">(arg)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000065-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000065-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/preprocessing.rb, line 49</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_decode</span>(<span class="ruby-identifier">arg</span>)
-      <span class="ruby-identifier">arg</span> = <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">to_s</span>
-      <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/%3C%25(?:=|%3D)(.*?)%25%3E/</span>) { <span class="ruby-node">"<%=#{CGI.unescape($1)}%>"</span> }
-      <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/&lt;%=(.*?)%&gt;/</span>) { <span class="ruby-node">"<%=#{CGI.unescapeHTML($1)}%>"</span> }
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">arg</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000062" class="method-detail">
-        <a name="M000062"></a>
-
-        <div class="method-heading">
-          <a href="#M000062" class="method-signature">
-          <span class="method-name">_p</span><span class="method-args">(arg)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000062-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000062-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/preprocessing.rb, line 39</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">_p</span>(<span class="ruby-identifier">arg</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-node">"<%=#{arg}%>"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintEnabledEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintEnabledEnhancer.html
deleted file mode 100644
index 0144f9c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintEnabledEnhancer.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::PrintEnabledEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::PrintEnabledEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-enable <a href="PrintEnabledEnhancer.html#M000167">print</a> function
-</p>
-<p>
-Notice: use Eruby#evaluate() and don‘t use Eruby#result() to be
-enable <a href="PrintEnabledEnhancer.html#M000167">print</a> function.
-</p>
-<p>
-this is only for <a href="Eruby.html">Eruby</a>.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000166">add_preamble</a>  
-      <a href="#M000168">evaluate</a>  
-      <a href="#M000167">print</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000166" class="method-detail">
-        <a name="M000166"></a>
-
-        <div class="method-heading">
-          <a href="#M000166" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000166-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000166-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 128</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"@_buf = "</span>
-      <span class="ruby-keyword kw">super</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000168" class="method-detail">
-        <a name="M000168"></a>
-
-        <div class="method-heading">
-          <a href="#M000168" class="method-signature">
-          <span class="method-name">evaluate</span><span class="method-args">(context=nil)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000168-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000168-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 139</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">evaluate</span>(<span class="ruby-identifier">context</span>=<span class="ruby-keyword kw">nil</span>)
-      <span class="ruby-identifier">_src</span> = <span class="ruby-ivar">@src</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">context</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
-        <span class="ruby-identifier">context</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">val</span><span class="ruby-operator">|</span> <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-node">"@#{key}"</span>, <span class="ruby-identifier">val</span>) <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">context</span>
-        <span class="ruby-identifier">context</span>.<span class="ruby-identifier">instance_variables</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
-          <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">context</span>.<span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">name</span>))
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">instance_eval</span>(<span class="ruby-identifier">_src</span>, (<span class="ruby-ivar">@filename</span> <span class="ruby-operator">||</span> <span class="ruby-value str">'(erubis)'</span>))
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000167" class="method-detail">
-        <a name="M000167"></a>
-
-        <div class="method-heading">
-          <a href="#M000167" class="method-signature">
-          <span class="method-name">print</span><span class="method-args">(*args)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000167-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000167-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 133</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">print</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
-      <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span>
-        <span class="ruby-ivar">@_buf</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">to_s</span>
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintEnabledEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintEnabledEruby.html
deleted file mode 100644
index c4efc94..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintEnabledEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PrintEnabledEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PrintEnabledEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="PrintEnabledEnhancer.html">PrintEnabledEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutEnhancer.html
deleted file mode 100644
index f44290d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutEnhancer.html
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::PrintOutEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::PrintOutEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-use print statement instead of ‘_buf << …’
-</p>
-<p>
-this is only for <a href="Eruby.html">Eruby</a>.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000130">add_expr_escaped</a>  
-      <a href="#M000129">add_expr_literal</a>  
-      <a href="#M000131">add_postamble</a>  
-      <a href="#M000127">add_preamble</a>  
-      <a href="#M000128">add_text</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000130" class="method-detail">
-        <a name="M000130"></a>
-
-        <div class="method-heading">
-          <a href="#M000130" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000130-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000130-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 103</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">' print '</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">';'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000129" class="method-detail">
-        <a name="M000129"></a>
-
-        <div class="method-heading">
-          <a href="#M000129" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000129-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000129-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 99</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">' print(('</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">').to_s);'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000131" class="method-detail">
-        <a name="M000131"></a>
-
-        <div class="method-heading">
-          <a href="#M000131" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000131-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000131-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 107</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000127" class="method-detail">
-        <a name="M000127"></a>
-
-        <div class="method-heading">
-          <a href="#M000127" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000127-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000127-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 92</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000128" class="method-detail">
-        <a name="M000128"></a>
-
-        <div class="method-heading">
-          <a href="#M000128" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000128-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000128-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 95</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" print '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutEruby.html
deleted file mode 100644
index b3a9b22..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PrintOutEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PrintOutEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="PrintOutEnhancer.html">PrintOutEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutSimplifiedEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutSimplifiedEruby.html
deleted file mode 100644
index 8800630..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/PrintOutSimplifiedEruby.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::PrintOutSimplifiedEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::PrintOutSimplifiedEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="PrintOutEnhancer.html">PrintOutEnhancer</a></span>
-        <span class="include-name"><a href="SimplifyEnhancer.html">SimplifyEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/RubyEvaluator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/RubyEvaluator.html
deleted file mode 100644
index 7a27064..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/RubyEvaluator.html
+++ /dev/null
@@ -1,227 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::RubyEvaluator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::RubyEvaluator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/evaluator_rb.html">
-                erubis/evaluator.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-evaluator for Ruby
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000197">def_method</a>  
-      <a href="#M000196">evaluate</a>  
-      <a href="#M000195">result</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Evaluator.html">Evaluator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000197" class="method-detail">
-        <a name="M000197"></a>
-
-        <div class="method-heading">
-          <a href="#M000197" class="method-signature">
-          <span class="method-name">def_method</span><span class="method-args">(object, method_name, filename=nil)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-if object is an Class or Module then define instance method to it, else
-define singleton method to it.
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000197-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000197-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/evaluator.rb, line 80</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">def_method</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">method_name</span>, <span class="ruby-identifier">filename</span>=<span class="ruby-keyword kw">nil</span>)
-      <span class="ruby-identifier">m</span> = <span class="ruby-identifier">object</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Module</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">:module_eval</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">:instance_eval</span>
-      <span class="ruby-identifier">object</span>.<span class="ruby-identifier">__send__</span>(<span class="ruby-identifier">m</span>, <span class="ruby-node">"def #{method_name}; #{@src}; end"</span>, <span class="ruby-identifier">filename</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@filename</span> <span class="ruby-operator">||</span> <span class="ruby-value str">'(erubis)'</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000196" class="method-detail">
-        <a name="M000196"></a>
-
-        <div class="method-heading">
-          <a href="#M000196" class="method-signature">
-          <span class="method-name">evaluate</span><span class="method-args">(_context=Context.new)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-invoke context.instance_eval(@src)
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000196-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000196-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/evaluator.rb, line 70</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">evaluate</span>(<span class="ruby-identifier">_context</span>=<span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>)
-      <span class="ruby-identifier">_context</span> = <span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">_context</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_context</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
-      <span class="ruby-comment cmt">#return _context.instance_eval(@src, @filename || '(erubis)')</span>
-      <span class="ruby-comment cmt">#@_proc ||= eval("proc { #{@src} }", Erubis::EMPTY_BINDING, @filename || '(erubis)')</span>
-      <span class="ruby-ivar">@_proc</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">eval</span>(<span class="ruby-node">"proc { #{@src} }"</span>, <span class="ruby-identifier">binding</span>(), <span class="ruby-ivar">@filename</span> <span class="ruby-operator">||</span> <span class="ruby-value str">'(erubis)'</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">_context</span>.<span class="ruby-identifier">instance_eval</span>(<span class="ruby-operator">&</span><span class="ruby-ivar">@_proc</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000195" class="method-detail">
-        <a name="M000195"></a>
-
-        <div class="method-heading">
-          <a href="#M000195" class="method-signature">
-          <span class="method-name">result</span><span class="method-args">(_binding_or_hash=TOPLEVEL_BINDING)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-eval(@src) with binding object
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000195-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000195-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/evaluator.rb, line 54</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">result</span>(<span class="ruby-identifier">_binding_or_hash</span>=<span class="ruby-constant">TOPLEVEL_BINDING</span>)
-      <span class="ruby-identifier">_arg</span> = <span class="ruby-identifier">_binding_or_hash</span>
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_arg</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
-        <span class="ruby-identifier">_b</span> = <span class="ruby-identifier">binding</span>()
-        <span class="ruby-identifier">eval</span> <span class="ruby-identifier">_arg</span>.<span class="ruby-identifier">collect</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-node">"#{k} = _arg[#{k.inspect}]; "</span>}.<span class="ruby-identifier">join</span>, <span class="ruby-identifier">_b</span>
-      <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">_arg</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Binding</span>)
-        <span class="ruby-identifier">_b</span> = <span class="ruby-identifier">_arg</span>
-      <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">_arg</span>.<span class="ruby-identifier">nil?</span>
-        <span class="ruby-identifier">_b</span> = <span class="ruby-identifier">binding</span>()
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">"#{self.class.name}#result(): argument should be Binding or Hash but passed #{_arg.class.name} object."</span>)
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">eval</span>(<span class="ruby-ivar">@src</span>, <span class="ruby-identifier">_b</span>, (<span class="ruby-ivar">@filename</span> <span class="ruby-operator">||</span> <span class="ruby-value str">'(erubis'</span>))
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/RubyGenerator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/RubyGenerator.html
deleted file mode 100644
index a6bfbcf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/RubyGenerator.html
+++ /dev/null
@@ -1,327 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::RubyGenerator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::RubyGenerator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/eruby_rb.html">
-                erubis/engine/eruby.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-code generator for Ruby
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000043">add_expr_debug</a>  
-      <a href="#M000042">add_expr_escaped</a>  
-      <a href="#M000041">add_expr_literal</a>  
-      <a href="#M000040">add_stmt</a>  
-      <a href="#M000039">add_text</a>  
-      <a href="#M000037">escape_text</a>  
-      <a href="#M000038">escaped_expr</a>  
-      <a href="#M000036">init_generator</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Generator.html">Generator</a></span>
-        <span class="include-name"><a href="StringBufferEnhancer.html">StringBufferEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000043" class="method-detail">
-        <a name="M000043"></a>
-
-        <div class="method-heading">
-          <a href="#M000043" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000043-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000043-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 63</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">s</span> = (<span class="ruby-identifier">code</span>.<span class="ruby-identifier">dump</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/\A"(.*)"\z/</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">$1</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">' $stderr.puts("*** debug: '</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">s</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'=#{('</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">').inspect}");'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000042" class="method-detail">
-        <a name="M000042"></a>
-
-        <div class="method-heading">
-          <a href="#M000042" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000042-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000042-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 59</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">' _buf << '</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">';'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000041" class="method-detail">
-        <a name="M000041"></a>
-
-        <div class="method-heading">
-          <a href="#M000041" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000041-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000041-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 55</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">' _buf << ('</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">').to_s;'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000040" class="method-detail">
-        <a name="M000040"></a>
-
-        <div class="method-heading">
-          <a href="#M000040" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000040-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000040-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 49</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-comment cmt">#src << code << ';'</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">';'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">code</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000039" class="method-detail">
-        <a name="M000039"></a>
-
-        <div class="method-heading">
-          <a href="#M000039" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000039-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000039-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 45</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>) <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000037" class="method-detail">
-        <a name="M000037"></a>
-
-        <div class="method-heading">
-          <a href="#M000037" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000037-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000037-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 31</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/['\\]/</span>, <span class="ruby-value str">'\\\\\&'</span>)   <span class="ruby-comment cmt"># "'" => "\\'",  '\\' => '\\\\'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000038" class="method-detail">
-        <a name="M000038"></a>
-
-        <div class="method-heading">
-          <a href="#M000038" class="method-signature">
-          <span class="method-name">escaped_expr</span><span class="method-args">(code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000038-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000038-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 35</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-node">"#{@escapefunc}(#{code})"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000036" class="method-detail">
-        <a name="M000036"></a>
-
-        <div class="method-heading">
-          <a href="#M000036" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000036-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000036-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/eruby.rb, line 22</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">"Erubis::XmlHelper.escape_xml"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SchemeGenerator.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SchemeGenerator.html
deleted file mode 100644
index 7932db9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SchemeGenerator.html
+++ /dev/null
@@ -1,382 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::SchemeGenerator</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::SchemeGenerator</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/escheme_rb.html">
-                erubis/engine/escheme.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000034">add_expr_debug</a>  
-      <a href="#M000033">add_expr_escaped</a>  
-      <a href="#M000032">add_expr_literal</a>  
-      <a href="#M000035">add_postamble</a>  
-      <a href="#M000027">add_preamble</a>  
-      <a href="#M000031">add_stmt</a>  
-      <a href="#M000030">add_text</a>  
-      <a href="#M000028">escape_text</a>  
-      <a href="#M000029">escaped_expr</a>  
-      <a href="#M000026">init_generator</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="Generator.html">Generator</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000034" class="method-detail">
-        <a name="M000034"></a>
-
-        <div class="method-heading">
-          <a href="#M000034" class="method-signature">
-          <span class="method-name">add_expr_debug</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000034-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000034-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 72</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_debug</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">s</span> = (<span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">code</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\"/</span>, <span class="ruby-value str">'\\"'</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"(display \"*** debug: #{s}=\")(display #{code.strip})(display \"\\n\")"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000033" class="method-detail">
-        <a name="M000033"></a>
-
-        <div class="method-heading">
-          <a href="#M000033" class="method-signature">
-          <span class="method-name">add_expr_escaped</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000033-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000033-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 68</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_escaped</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>))
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000032" class="method-detail">
-        <a name="M000032"></a>
-
-        <div class="method-heading">
-          <a href="#M000032" class="method-signature">
-          <span class="method-name">add_expr_literal</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000032-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000032-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 63</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_expr_literal</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"(#{@func} #{code})"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000035" class="method-detail">
-        <a name="M000035"></a>
-
-        <div class="method-heading">
-          <a href="#M000035" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000035-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000035-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 77</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@func</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'_add'</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"  (reverse _buf))\n"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000027" class="method-detail">
-        <a name="M000027"></a>
-
-        <div class="method-heading">
-          <a href="#M000027" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000027-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 29</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@func</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'_add'</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"(let ((_buf '())) "</span> <span class="ruby-operator">+</span> \
-               <span class="ruby-value str">"(define (_add x) (set! _buf (cons x _buf))) "</span>
-      <span class="ruby-comment cmt">#src << "(let* ((_buf '())" +        #             " (_add (lambda (x) (set! _buf (cons x _buf))))) "</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000031" class="method-detail">
-        <a name="M000031"></a>
-
-        <div class="method-heading">
-          <a href="#M000031" class="method-signature">
-          <span class="method-name">add_stmt</span><span class="method-args">(src, code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000031-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000031-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 59</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000030" class="method-detail">
-        <a name="M000030"></a>
-
-        <div class="method-heading">
-          <a href="#M000030" class="method-signature">
-          <span class="method-name">add_text</span><span class="method-args">(src, text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000030-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000030-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 48</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-identifier">t</span> = <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">t</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-        <span class="ruby-identifier">t</span>[<span class="ruby-value">-1</span>, <span class="ruby-value">1</span>] = <span class="ruby-value str">''</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"(#{@func} \""</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">t</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\\n\")\n"</span>
-      <span class="ruby-keyword kw">else</span>
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"(#{@func} \""</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">t</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">'")'</span>
-      <span class="ruby-keyword kw">end</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000028" class="method-detail">
-        <a name="M000028"></a>
-
-        <div class="method-heading">
-          <a href="#M000028" class="method-signature">
-          <span class="method-name">escape_text</span><span class="method-args">(text)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000028-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 37</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_text</span>(<span class="ruby-identifier">text</span>)
-      <span class="ruby-ivar">@table_</span> <span class="ruby-operator">||=</span> { <span class="ruby-value str">'"'</span>=<span class="ruby-operator">></span><span class="ruby-value str">'\\"'</span>, <span class="ruby-value str">'\\'</span>=<span class="ruby-operator">></span><span class="ruby-value str">'\\\\'</span> }
-      <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/["\\]/</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@table_</span>[<span class="ruby-identifier">m</span>] }
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">text</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000029" class="method-detail">
-        <a name="M000029"></a>
-
-        <div class="method-heading">
-          <a href="#M000029" class="method-signature">
-          <span class="method-name">escaped_expr</span><span class="method-args">(code)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000029-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 43</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escaped_expr</span>(<span class="ruby-identifier">code</span>)
-      <span class="ruby-identifier">code</span>.<span class="ruby-identifier">strip!</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-node">"(#{@escapefunc} #{code})"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000026" class="method-detail">
-        <a name="M000026"></a>
-
-        <div class="method-heading">
-          <a href="#M000026" class="method-signature">
-          <span class="method-name">init_generator</span><span class="method-args">(properties={})</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000026-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/engine/escheme.rb, line 23</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_generator</span>(<span class="ruby-identifier">properties</span>={})
-      <span class="ruby-keyword kw">super</span>
-      <span class="ruby-ivar">@escapefunc</span> <span class="ruby-operator">||=</span> <span class="ruby-value str">'escape'</span>
-      <span class="ruby-ivar">@func</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:func</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">'_add'</span>   <span class="ruby-comment cmt"># or 'display'</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SimplifiedEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SimplifiedEruby.html
deleted file mode 100644
index 01adfea..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SimplifiedEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::SimplifiedEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::SimplifiedEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="SimplifyEnhancer.html">SimplifyEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SimplifyEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SimplifyEnhancer.html
deleted file mode 100644
index 7d01954..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/SimplifyEnhancer.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::SimplifyEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::SimplifyEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-get <a href="SimplifyEnhancer.html#M000025">convert</a> faster, but spaces
-around ’<%…%>’ are not trimmed.
-</p>
-<p>
-this is language-independent.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000025">convert</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-    <div id="constants-list">
-      <h3 class="section-bar">Constants</h3>
-
-      <div class="name-list">
-        <table summary="Constants">
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">SIMPLE_REGEXP</td>
-          <td>=</td>
-          <td class="context-item-value">/<%(=+|\#)?(.*?)-?%>/m</td>
-          <td width="3em"> </td>
-          <td class="context-item-desc">
-DEFAULT_REGEXP = /(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
-
-</td>
-        </tr>
-        </table>
-      </div>
-    </div>
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000025" class="method-detail">
-        <a name="M000025"></a>
-
-        <div class="method-heading">
-          <a href="#M000025" class="method-signature">
-          <span class="method-name">convert</span><span class="method-args">(input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000025-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 343</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">src</span> = <span class="ruby-value str">""</span>
-      <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-comment cmt">#regexp = pattern_regexp(@pattern)</span>
-      <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">input</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-constant">SIMPLE_REGEXP</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">indicator</span>, <span class="ruby-identifier">code</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">match</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>
-        <span class="ruby-identifier">index</span> = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">begin</span>(<span class="ruby-value">0</span>)
-        <span class="ruby-identifier">text</span>  = <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">index</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">pos</span>]
-        <span class="ruby-identifier">pos</span>   = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)
-        <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">text</span>)
-        <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">indicator</span>              <span class="ruby-comment cmt"># <% %></span>
-          <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>)
-        <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">indicator</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\#</span>  <span class="ruby-comment cmt"># <%# %></span>
-          <span class="ruby-identifier">n</span> = <span class="ruby-identifier">code</span>.<span class="ruby-identifier">count</span>(<span class="ruby-value str">"\n"</span>)
-          <span class="ruby-identifier">add_stmt</span>(<span class="ruby-identifier">src</span>, <span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">n</span>)
-        <span class="ruby-keyword kw">else</span>                       <span class="ruby-comment cmt"># <%= %></span>
-          <span class="ruby-identifier">add_expr</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">indicator</span>)
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = $' || input                      # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">pos</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">input</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]  <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-identifier">add_text</span>(<span class="ruby-identifier">src</span>, <span class="ruby-identifier">rest</span>)
-      <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">src</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutEnhancer.html
deleted file mode 100644
index 357b148..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutEnhancer.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::StdoutEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::StdoutEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-use $stdout instead of string
-</p>
-<p>
-this is only for <a href="Eruby.html">Eruby</a>.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000070">add_postamble</a>  
-      <a href="#M000069">add_preamble</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000070" class="method-detail">
-        <a name="M000070"></a>
-
-        <div class="method-heading">
-          <a href="#M000070" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000070-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000070-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 74</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n''\n"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000069" class="method-detail">
-        <a name="M000069"></a>
-
-        <div class="method-heading">
-          <a href="#M000069" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000069-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000069-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 70</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf = $stdout;"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutEruby.html
deleted file mode 100644
index bd6eadb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::StdoutEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::StdoutEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="StdoutEnhancer.html">StdoutEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutSimplifiedEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutSimplifiedEruby.html
deleted file mode 100644
index e6ec46d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StdoutSimplifiedEruby.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::StdoutSimplifiedEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::StdoutSimplifiedEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="StdoutEnhancer.html">StdoutEnhancer</a></span>
-        <span class="include-name"><a href="SimplifyEnhancer.html">SimplifyEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringBufferEnhancer.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringBufferEnhancer.html
deleted file mode 100644
index b090277..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringBufferEnhancer.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::StringBufferEnhancer</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::StringBufferEnhancer</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/enhancer_rb.html">
-                erubis/enhancer.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-use String class for buffering
-</p>
-<p>
-this is only for <a href="Eruby.html">Eruby</a>.
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000199">add_postamble</a>  
-      <a href="#M000198">add_preamble</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000199" class="method-detail">
-        <a name="M000199"></a>
-
-        <div class="method-heading">
-          <a href="#M000199" class="method-signature">
-          <span class="method-name">add_postamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000199-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000199-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 215</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_postamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">src</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?\n</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf.to_s\n"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000198" class="method-detail">
-        <a name="M000198"></a>
-
-        <div class="method-heading">
-          <a href="#M000198" class="method-signature">
-          <span class="method-name">add_preamble</span><span class="method-args">(src)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000198-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000198-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/enhancer.rb, line 211</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_preamble</span>(<span class="ruby-identifier">src</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"_buf = '';"</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringBufferEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringBufferEruby.html
deleted file mode 100644
index 1e39331..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringBufferEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::StringBufferEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::StringBufferEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="StringBufferEnhancer.html">StringBufferEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringIOEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringIOEruby.html
deleted file mode 100644
index c1bcb98..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/StringIOEruby.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::StringIOEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::StringIOEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/enhanced_rb.html">
-                erubis/engine/enhanced.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name">StringIOEnhancer</span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/TinyEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/TinyEruby.html
deleted file mode 100644
index 8d2adf7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/TinyEruby.html
+++ /dev/null
@@ -1,299 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::TinyEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::TinyEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/tiny_rb.html">
-                erubis/tiny.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                Object
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-tiny and the simplest implementation of eRuby
-</p>
-<p>
-ex.
-</p>
-<pre>
-  eruby = TinyEruby.new(File.read('example.rhtml'))
-  print eruby.src                 # print ruby code
-  print eruby.result(binding())   # eval ruby code with Binding object
-  print eruby.evalute(context)    # eval ruby code with context object
-</pre>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000201">convert</a>  
-      <a href="#M000203">evaluate</a>  
-      <a href="#M000200">new</a>  
-      <a href="#M000202">result</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-    <div id="constants-list">
-      <h3 class="section-bar">Constants</h3>
-
-      <div class="name-list">
-        <table summary="Constants">
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">EMBEDDED_PATTERN</td>
-          <td>=</td>
-          <td class="context-item-value">/<%(=+|\#)?(.*?)-?%>/m</td>
-        </tr>
-        </table>
-      </div>
-    </div>
-
-
-
-    <div id="attribute-list">
-      <h3 class="section-bar">Attributes</h3>
-
-      <div class="name-list">
-        <table>
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">src</td>
-          <td class="context-item-value"> [R] </td>
-          <td class="context-item-desc"></td>
-        </tr>
-        </table>
-      </div>
-    </div>
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Class methods</h3>
-
-      <div id="method-M000200" class="method-detail">
-        <a name="M000200"></a>
-
-        <div class="method-heading">
-          <a href="#M000200" class="method-signature">
-          <span class="method-name">new</span><span class="method-args">(input=nil)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000200-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000200-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/tiny.rb, line 20</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">input</span>=<span class="ruby-keyword kw">nil</span>)
-      <span class="ruby-ivar">@src</span> = <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">input</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000201" class="method-detail">
-        <a name="M000201"></a>
-
-        <div class="method-heading">
-          <a href="#M000201" class="method-signature">
-          <span class="method-name">convert</span><span class="method-args">(input)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000201-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000201-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/tiny.rb, line 27</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">input</span>)
-      <span class="ruby-identifier">src</span> = <span class="ruby-value str">"_buf = '';"</span>           <span class="ruby-comment cmt"># preamble</span>
-      <span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
-      <span class="ruby-identifier">input</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-constant">EMBEDDED_PATTERN</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">indicator</span>, <span class="ruby-identifier">code</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">match</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">last_match</span>
-        <span class="ruby-identifier">len</span>   = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">begin</span>(<span class="ruby-value">0</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">pos</span>
-        <span class="ruby-identifier">text</span>  = <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span>, <span class="ruby-identifier">len</span>]
-        <span class="ruby-identifier">pos</span>   = <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end</span>(<span class="ruby-value">0</span>)
-        <span class="ruby-comment cmt">#src << " _buf << '" << escape_text(text) << "';"</span>
-        <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/['\\]/</span>, <span class="ruby-value str">'\\\\\&'</span>)
-        <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">text</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">text</span>.<span class="ruby-identifier">empty?</span>
-        <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">indicator</span>              <span class="ruby-comment cmt"># <% %></span>
-          <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">";"</span>
-        <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">indicator</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'#'</span>     <span class="ruby-comment cmt"># <%# %></span>
-          <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> (<span class="ruby-value str">"\n"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">code</span>.<span class="ruby-identifier">count</span>(<span class="ruby-value str">"\n"</span>))
-        <span class="ruby-keyword kw">else</span>                       <span class="ruby-comment cmt"># <%= %></span>
-          <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << ("</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">code</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">").to_s;"</span>
-        <span class="ruby-keyword kw">end</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-comment cmt">#rest = $' || input                        # ruby1.8</span>
-      <span class="ruby-identifier">rest</span> = <span class="ruby-identifier">pos</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">input</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">input</span>[<span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]   <span class="ruby-comment cmt"># ruby1.9</span>
-      <span class="ruby-comment cmt">#src << " _buf << '" << escape_text(rest) << "';"</span>
-      <span class="ruby-identifier">rest</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/['\\]/</span>, <span class="ruby-value str">'\\\\\&'</span>)
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">" _buf << '"</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"';"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rest</span>.<span class="ruby-identifier">empty?</span>
-      <span class="ruby-identifier">src</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"\n_buf.to_s\n"</span>       <span class="ruby-comment cmt"># postamble</span>
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">src</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000203" class="method-detail">
-        <a name="M000203"></a>
-
-        <div class="method-heading">
-          <a href="#M000203" class="method-signature">
-          <span class="method-name">evaluate</span><span class="method-args">(_context=Object.new)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000203-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000203-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/tiny.rb, line 63</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">evaluate</span>(<span class="ruby-identifier">_context</span>=<span class="ruby-constant">Object</span>.<span class="ruby-identifier">new</span>)
-      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">_context</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
-        <span class="ruby-identifier">_obj</span> = <span class="ruby-constant">Object</span>.<span class="ruby-identifier">new</span>
-        <span class="ruby-identifier">_context</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">_obj</span>.<span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-node">"@#{k}"</span>, <span class="ruby-identifier">v</span>) <span class="ruby-keyword kw">end</span>
-        <span class="ruby-identifier">_context</span> = <span class="ruby-identifier">_obj</span>
-      <span class="ruby-keyword kw">end</span>
-      <span class="ruby-identifier">_context</span>.<span class="ruby-identifier">instance_eval</span> <span class="ruby-ivar">@src</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000202" class="method-detail">
-        <a name="M000202"></a>
-
-        <div class="method-heading">
-          <a href="#M000202" class="method-signature">
-          <span class="method-name">result</span><span class="method-args">(_binding=TOPLEVEL_BINDING)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p>
-def escape_text(text)
-</p>
-<pre>
-  return text.gsub!(/['\\]/, '\\\\\&') || text
-</pre>
-<p>
-end
-</p>
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000202-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000202-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/tiny.rb, line 59</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">result</span>(<span class="ruby-identifier">_binding</span>=<span class="ruby-constant">TOPLEVEL_BINDING</span>)
-      <span class="ruby-identifier">eval</span> <span class="ruby-ivar">@src</span>, <span class="ruby-identifier">_binding</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/XmlEruby.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/XmlEruby.html
deleted file mode 100644
index 45a769a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/XmlEruby.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Class: Erubis::XmlEruby</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Class</strong></td>
-          <td class="class-name-in-header">Erubis::XmlEruby</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/engine/eruby_rb.html">
-                erubis/engine/eruby.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        <tr class="top-aligned-row">
-            <td><strong>Parent:</strong></td>
-            <td>
-                <a href="Eruby.html">
-                Eruby
-               </a>
-            </td>
-        </tr>
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-sanitize expression (<%= … %>) by default
-</p>
-<p>
-this is equivalent to <a href="EscapedEruby.html">EscapedEruby</a> and is
-prepared only for compatibility.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-    <div id="includes">
-      <h3 class="section-bar">Included Modules</h3>
-
-      <div id="includes-list">
-        <span class="include-name"><a href="EscapeEnhancer.html">EscapeEnhancer</a></span>
-      </div>
-    </div>
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/XmlHelper.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/XmlHelper.html
deleted file mode 100644
index 3fd97f1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/classes/Erubis/XmlHelper.html
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module: Erubis::XmlHelper</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-    <div id="classHeader">
-        <table class="header-table">
-        <tr class="top-aligned-row">
-          <td><strong>Module</strong></td>
-          <td class="class-name-in-header">Erubis::XmlHelper</td>
-        </tr>
-        <tr class="top-aligned-row">
-            <td><strong>In:</strong></td>
-            <td>
-                <a href="../../files/erubis/helper_rb.html">
-                erubis/helper.rb
-                </a>
-        <br />
-            </td>
-        </tr>
-
-        </table>
-    </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-helper for xml
-</p>
-
-    </div>
-
-
-   </div>
-
-    <div id="method-list">
-      <h3 class="section-bar">Methods</h3>
-
-      <div class="name-list">
-      <a href="#M000119">escape_xml</a>  
-      <a href="#M000120">escape_xml2</a>  
-      <a href="#M000121">h</a>  
-      <a href="#M000122">html_escape</a>  
-      <a href="#M000124">u</a>  
-      <a href="#M000123">url_encode</a>  
-      </div>
-    </div>
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-    <div id="constants-list">
-      <h3 class="section-bar">Constants</h3>
-
-      <div class="name-list">
-        <table summary="Constants">
-        <tr class="top-aligned-row context-row">
-          <td class="context-item-name">ESCAPE_TABLE</td>
-          <td>=</td>
-          <td class="context-item-value">{       '&' => '&amp;',       '<' => '&lt;',       '>' => '&gt;',       '"' => '&quot;',       "'" => '&#039;',     }</td>
-        </tr>
-        </table>
-      </div>
-    </div>
-
-
-
-      
-
-
-    <!-- if method_list -->
-    <div id="methods">
-      <h3 class="section-bar">Public Instance methods</h3>
-
-      <div id="method-M000119" class="method-detail">
-        <a name="M000119"></a>
-
-        <div class="method-heading">
-          <a href="#M000119" class="method-signature">
-          <span class="method-name">escape_xml</span><span class="method-args">(value)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000119-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000119-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helper.rb, line 25</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_xml</span>(<span class="ruby-identifier">value</span>)
-      <span class="ruby-identifier">value</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/[&<>"]/</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-constant">ESCAPE_TABLE</span>[<span class="ruby-identifier">s</span>] }   <span class="ruby-comment cmt"># or /[&<>"']/</span>
-      <span class="ruby-comment cmt">#value.to_s.gsub(/[&<>"]/) { ESCAPE_TABLE[$&] }</span>
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000120" class="method-detail">
-        <a name="M000120"></a>
-
-        <div class="method-heading">
-          <a href="#M000120" class="method-signature">
-          <span class="method-name">escape_xml2</span><span class="method-args">(value)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000120-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000120-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helper.rb, line 30</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">escape_xml2</span>(<span class="ruby-identifier">value</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\&/</span>,<span class="ruby-value str">'&amp;'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/</</span>,<span class="ruby-value str">'&lt;'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/>/</span>,<span class="ruby-value str">'&gt;'</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/"/</span>,<span class="ruby-value str">'&quot;'</span>)
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-      <div id="method-M000121" class="method-detail">
-        <a name="M000121"></a>
-
-        <div class="method-heading">
-          <span class="method-name">h</span><span class="method-args">(value)</span>
-        </div>
-      
-        <div class="method-description">
-          <p>
-Alias for <a href="XmlHelper.html#M000119">escape_xml</a>
-</p>
-        </div>
-      </div>
-
-      <div id="method-M000122" class="method-detail">
-        <a name="M000122"></a>
-
-        <div class="method-heading">
-          <span class="method-name">html_escape</span><span class="method-args">(value)</span>
-        </div>
-      
-        <div class="method-description">
-          <p>
-Alias for <a href="XmlHelper.html#M000119">escape_xml</a>
-</p>
-        </div>
-      </div>
-
-      <div id="method-M000124" class="method-detail">
-        <a name="M000124"></a>
-
-        <div class="method-heading">
-          <span class="method-name">u</span><span class="method-args">(str)</span>
-        </div>
-      
-        <div class="method-description">
-          <p>
-Alias for <a href="XmlHelper.html#M000123">url_encode</a>
-</p>
-        </div>
-      </div>
-
-      <div id="method-M000123" class="method-detail">
-        <a name="M000123"></a>
-
-        <div class="method-heading">
-          <a href="#M000123" class="method-signature">
-          <span class="method-name">url_encode</span><span class="method-args">(str)</span>
-          </a>
-        </div>
-      
-        <div class="method-description">
-          <p><a class="source-toggle" href="#"
-            onclick="toggleCode('M000123-source');return false;">[Source]</a></p>
-          <div class="method-source-code" id="M000123-source">
-<pre>
-<span class="ruby-comment cmt"># File erubis/helper.rb, line 37</span>
-    <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">url_encode</span>(<span class="ruby-identifier">str</span>)
-      <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/[^-_.a-zA-Z0-9]+/</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
-        <span class="ruby-identifier">s</span>.<span class="ruby-identifier">unpack</span>(<span class="ruby-value str">'C*'</span>).<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-value str">"%%%02X"</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">i</span> }.<span class="ruby-identifier">join</span>
-      }
-    <span class="ruby-keyword kw">end</span>
-</pre>
-          </div>
-        </div>
-      </div>
-
-
-    </div>
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/created.rid b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/created.rid
deleted file mode 100644
index e2ad949..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/created.rid
+++ /dev/null
@@ -1 +0,0 @@
-Fri, 13 Jun 2008 08:04:36 +0900
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/README_txt.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/README_txt.html
deleted file mode 100644
index 2586d33..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/README_txt.html
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: README.txt</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>README.txt</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>README.txt
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri Jun 13 08:04:35 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <h1>README</h1>
-<table>
-<tr><td valign="top">release:</td><td>2.6.2
-
-</td></tr>
-<tr><td valign="top">copyright:</td><td>copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-
-</td></tr>
-</table>
-<h2>About <a href="../classes/Erubis.html">Erubis</a></h2>
-<p>
-<a href="../classes/Erubis.html">Erubis</a> is an implementation of eRuby.
-It has the following features.
-</p>
-<ul>
-<li>Very fast, almost three times faster than <a
-href="../classes/ERB.html">ERB</a> and even 10% faster than eruby
-
-</li>
-<li>Multi-language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript)
-
-</li>
-<li>Auto escaping support
-
-</li>
-<li>Auto trimming spaces around ’<% %>’
-
-</li>
-<li>Embedded pattern changeable (default ’<% %>’)
-
-</li>
-<li>Enable to handle Processing Instructions (PI) as embedded pattern (ex.
-’<?rb … ?>’)
-
-</li>
-<li>Context object available and easy to combine eRuby template with YAML
-datafile
-
-</li>
-<li>Print statement available
-
-</li>
-<li>Easy to extend and customize in subclass
-
-</li>
-<li>Ruby on Rails support
-
-</li>
-</ul>
-<p>
-<a href="../classes/Erubis.html">Erubis</a> is implemented in pure Ruby. It
-requires Ruby 1.8 or higher. <a href="../classes/Erubis.html">Erubis</a>
-now supports Ruby 1.9.
-</p>
-<p>
-See doc/users-guide.html for details.
-</p>
-<h2>Installation</h2>
-<ul>
-<li>If you have installed RubyGems, just type <tt>gem install erubis</tt>.
-
-<pre>
-  $ sudo gem install erubis
-</pre>
-</li>
-<li>Else install <a href="http://rubyforge.org/projects/abstract/">abstract</a>
-at first, and download erubis_X.X.X.tar.bz2 and install it by setup.rb.
-
-<pre>
-  $ tar xjf abstract_X.X.X.tar.bz2
-  $ cd abstract_X.X.X/
-  $ sudo ruby setup.rb
-  $ cd ..
-  $ tar xjf erubis_X.X.X.tar.bz2
-  $ cd erubis_X.X.X/
-  $ sudo ruby setup.rb
-</pre>
-</li>
-<li>(Optional) It is able to merge ‘lib/**/*.rb’ into
-‘bin/erubis’ by ‘contrib/inline-require’ script.
-
-<pre>
-  $ tar xjf erubis_X.X.X.tar.bz2
-  $ cd erubis_X.X.X/
-  $ cp /tmp/abstract_X.X.X/lib/abstract.rb lib
-  $ unset RUBYLIB
-  $ contrib/inline-require -I lib bin/erubis > contrib/erubis
-</pre>
-</li>
-</ul>
-<h2>Ruby on Rails Support</h2>
-<p>
-<a href="../classes/Erubis.html">Erubis</a> supports Ruby on Rails. All you
-have to do is to add the following code into your
-‘config/environment.rb’ and restart web server.
-</p>
-<pre>
-     require 'erubis/helpers/rails_helper'
-     #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby
-     #Erubis::Helpers::RailsHelper.init_properties = {}
-     #Erubis::Helpers::RailsHelper.show_src = nil
-</pre>
-<p>
-If Erubis::Helpers::RailsHelper.show_src is ture, <a
-href="../classes/Erubis.html">Erubis</a> prints converted Ruby code into
-log file (‘log/development.log’ or so). It is useful for debug.
-</p>
-<h2>Exploring Guide</h2>
-<p>
-If you are exploring Eruby, see the following class at first.
-</p>
-<ul>
-<li><a href="../classes/Erubis/TinyEruby.html">Erubis::TinyEruby</a>
-(erubis/tiny.rb) — the most simple eRuby implementation.
-
-</li>
-<li><a href="../classes/Erubis/Engine.html">Erubis::Engine</a>
-(erubis/engine.rb) — base class of Eruby, Ephp, Ejava, and so on.
-
-</li>
-<li><a href="../classes/Erubis/Eruby.html">Erubis::Eruby</a>
-(erubis/engine/eruby.rb) — engine class for eRuby.
-
-</li>
-<li><a href="../classes/Erubis/Converter.html">Erubis::Converter</a>
-(erubis/converter.rb) — convert eRuby script into Ruby code.
-
-</li>
-</ul>
-<h2>Benchmark</h2>
-<p>
-‘benchmark/erubybenchmark.rb’ is a benchmark script of <a
-href="../classes/Erubis.html">Erubis</a>. Try ‘ruby
-erubybenchmark.rb’ in benchmark directory.
-</p>
-<h2>License</h2>
-<p>
-MIT License
-</p>
-<h2>Author</h2>
-<p>
-makoto kuwata <kwa(at)kuwata-lab.com>
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/context_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/context_rb.html
deleted file mode 100644
index 90ad5b8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/context_rb.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: context.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>context.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/context.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/converter_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/converter_rb.html
deleted file mode 100644
index 5d362a2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/converter_rb.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: converter.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>converter.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/converter.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Thu Jun 12 20:22:02 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 115 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      abstract  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ec_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ec_rb.html
deleted file mode 100644
index a3cd03a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ec_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: ec.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>ec.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/ec.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../engine_rb.html">erubis/engine</a>  
-      <a href="../enhancer_rb.html">erubis/enhancer</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ejava_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ejava_rb.html
deleted file mode 100644
index 99777f9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ejava_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: ejava.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>ejava.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/ejava.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../engine_rb.html">erubis/engine</a>  
-      <a href="../enhancer_rb.html">erubis/enhancer</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ejavascript_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ejavascript_rb.html
deleted file mode 100644
index 2511ff3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ejavascript_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: ejavascript.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>ejavascript.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/ejavascript.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Mon Sep 24 23:04:21 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 95 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../engine_rb.html">erubis/engine</a>  
-      <a href="../enhancer_rb.html">erubis/enhancer</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/enhanced_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/enhanced_rb.html
deleted file mode 100644
index 9748b50..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/enhanced_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: enhanced.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>enhanced.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/enhanced.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../enhancer_rb.html">erubis/enhancer</a>  
-      <a href="eruby_rb.html">erubis/engine/eruby</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/eperl_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/eperl_rb.html
deleted file mode 100644
index f6b85ef..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/eperl_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: eperl.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>eperl.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/eperl.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../engine_rb.html">erubis/engine</a>  
-      <a href="../enhancer_rb.html">erubis/enhancer</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ephp_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ephp_rb.html
deleted file mode 100644
index 8a5c4c5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/ephp_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: ephp.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>ephp.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/ephp.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../engine_rb.html">erubis/engine</a>  
-      <a href="../enhancer_rb.html">erubis/enhancer</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/eruby_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/eruby_rb.html
deleted file mode 100644
index 7b457c2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/eruby_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: eruby.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>eruby.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/eruby.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri Jun 06 01:55:24 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../engine_rb.html">erubis/engine</a>  
-      <a href="../enhancer_rb.html">erubis/enhancer</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/escheme_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/escheme_rb.html
deleted file mode 100644
index d962f19..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/escheme_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: escheme.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>escheme.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/escheme.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../engine_rb.html">erubis/engine</a>  
-      <a href="../enhancer_rb.html">erubis/enhancer</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/optimized_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/optimized_rb.html
deleted file mode 100644
index 9cab617..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine/optimized_rb.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: optimized.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>optimized.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine/optimized.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri Jun 06 01:55:17 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="eruby_rb.html">erubis/engine/eruby</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine_rb.html
deleted file mode 100644
index 0e5e8ed..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/engine_rb.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: engine.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>engine.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/engine.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Sat May 03 13:22:01 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 104 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="generator_rb.html">erubis/generator</a>  
-      <a href="converter_rb.html">erubis/converter</a>  
-      <a href="evaluator_rb.html">erubis/evaluator</a>  
-      <a href="context_rb.html">erubis/context</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/enhancer_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/enhancer_rb.html
deleted file mode 100644
index 2352512..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/enhancer_rb.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: enhancer.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>enhancer.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/enhancer.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Thu Jun 12 20:22:02 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 115 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/error_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/error_rb.html
deleted file mode 100644
index 1af125d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/error_rb.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: error.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>error.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/error.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/evaluator_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/evaluator_rb.html
deleted file mode 100644
index a677c8b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/evaluator_rb.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: evaluator.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>evaluator.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/evaluator.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Thu Jun 12 20:22:02 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 115 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="error_rb.html">erubis/error</a>  
-      <a href="context_rb.html">erubis/context</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/generator_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/generator_rb.html
deleted file mode 100644
index c071da4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/generator_rb.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: generator.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>generator.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/generator.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      abstract  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helper_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helper_rb.html
deleted file mode 100644
index d92e832..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helper_rb.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: helper.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>helper.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/helper.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Thu Jul 19 05:01:12 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 89 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helpers/rails_form_helper_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helpers/rails_form_helper_rb.html
deleted file mode 100644
index c461d96..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helpers/rails_form_helper_rb.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: rails_form_helper.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>rails_form_helper.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/helpers/rails_form_helper.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Mon May 05 22:05:29 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 109 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helpers/rails_helper_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helpers/rails_helper_rb.html
deleted file mode 100644
index e56f755..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/helpers/rails_helper_rb.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: rails_helper.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>rails_helper.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/helpers/rails_helper.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri Jun 06 04:46:34 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 112 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="../../erubis_rb.html">erubis</a>  
-      <a href="../preprocessing_rb.html">erubis/preprocessing</a>  
-      action_pack/version  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/local-setting_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/local-setting_rb.html
deleted file mode 100644
index 3a8124c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/local-setting_rb.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: local-setting.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>local-setting.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/local-setting.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Fri May 18 16:17:19 +0900 2007</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 77 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/main_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/main_rb.html
deleted file mode 100644
index 45a3116..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/main_rb.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: main.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>main.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/main.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Thu Jun 12 21:08:47 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 116 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      yaml  
-      <a href="../erubis_rb.html">erubis</a>  
-      <a href="tiny_rb.html">erubis/tiny</a>  
-      <a href="engine/enhanced_rb.html">erubis/engine/enhanced</a>  
-      <a href="engine/optimized_rb.html">erubis/engine/optimized</a>  
-      <a href="engine/eruby_rb.html">erubis/engine/eruby</a>  
-      <a href="engine/ephp_rb.html">erubis/engine/ephp</a>  
-      <a href="engine/ec_rb.html">erubis/engine/ec</a>  
-      <a href="engine/ejava_rb.html">erubis/engine/ejava</a>  
-      <a href="engine/escheme_rb.html">erubis/engine/escheme</a>  
-      <a href="engine/eperl_rb.html">erubis/engine/eperl</a>  
-      <a href="engine/ejavascript_rb.html">erubis/engine/ejavascript</a>  
-      yaml  
-      open3  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/preprocessing_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/preprocessing_rb.html
deleted file mode 100644
index 08f5b0b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/preprocessing_rb.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: preprocessing.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>preprocessing.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/preprocessing.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Tue Apr 29 21:40:14 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 102 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      cgi  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/tiny_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/tiny_rb.html
deleted file mode 100644
index 65d395f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis/tiny_rb.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: tiny.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>tiny.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis/tiny.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Thu Jun 12 20:22:02 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 115 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis_rb.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis_rb.html
deleted file mode 100644
index 1467792..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/files/erubis_rb.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>File: erubis.rb</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <meta http-equiv="Content-Script-Type" content="text/javascript" />
-  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
-  <script type="text/javascript">
-  // <![CDATA[
-
-  function popupCode( url ) {
-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
-  }
-
-  function toggleCode( id ) {
-    if ( document.getElementById )
-      elem = document.getElementById( id );
-    else if ( document.all )
-      elem = eval( "document.all." + id );
-    else
-      return false;
-
-    elemStyle = elem.style;
-    
-    if ( elemStyle.display != "block" ) {
-      elemStyle.display = "block"
-    } else {
-      elemStyle.display = "none"
-    }
-
-    return true;
-  }
-  
-  // Make codeblocks hidden by default
-  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
-  
-  // ]]>
-  </script>
-
-</head>
-<body>
-
-
-
-  <div id="fileHeader">
-    <h1>erubis.rb</h1>
-    <table class="header-table">
-    <tr class="top-aligned-row">
-      <td><strong>Path:</strong></td>
-      <td>erubis.rb
-      </td>
-    </tr>
-    <tr class="top-aligned-row">
-      <td><strong>Last Update:</strong></td>
-      <td>Wed Jan 30 23:27:58 +0900 2008</td>
-    </tr>
-    </table>
-  </div>
-  <!-- banner header -->
-
-  <div id="bodyContent">
-
-
-
-  <div id="contextContent">
-
-    <div id="description">
-      <p>
-$Rev: 99 $ $Release: 2.6.2 $ copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-</p>
-
-    </div>
-
-    <div id="requires-list">
-      <h3 class="section-bar">Required files</h3>
-
-      <div class="name-list">
-      <a href="erubis/engine_rb.html">erubis/engine</a>  
-      <a href="erubis/helper_rb.html">erubis/helper</a>  
-      <a href="erubis/enhancer_rb.html">erubis/enhancer</a>  
-      <a href="erubis/engine/eruby_rb.html">erubis/engine/eruby</a>  
-      <a href="erubis/local-setting_rb.html">erubis/local-setting</a>  
-      </div>
-    </div>
-
-   </div>
-
-
-  </div>
-
-
-    <!-- if includes -->
-
-    <div id="section">
-
-
-
-
-
-      
-
-
-    <!-- if method_list -->
-
-
-  </div>
-
-
-<div id="validator-badges">
-  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_class_index.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_class_index.html
deleted file mode 100644
index 5a2159f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_class_index.html
+++ /dev/null
@@ -1,122 +0,0 @@
-
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
-
-    Classes
-
-  -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Classes</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
-  <base target="docwin" />
-</head>
-<body>
-<div id="index">
-  <h1 class="section-bar">Classes</h1>
-  <div id="index-entries">
-    <a href="classes/ActionView.html">ActionView</a><br />
-    <a href="classes/ActionView/TemplateHandlers/ErubisHandler.html">ActionView::TemplateHandlers::ErubisHandler</a><br />
-    <a href="classes/ERB.html">ERB</a><br />
-    <a href="classes/Erubis.html">Erubis</a><br />
-    <a href="classes/Erubis/ArrayBufferEnhancer.html">Erubis::ArrayBufferEnhancer</a><br />
-    <a href="classes/Erubis/ArrayBufferEruby.html">Erubis::ArrayBufferEruby</a><br />
-    <a href="classes/Erubis/ArrayEnhancer.html">Erubis::ArrayEnhancer</a><br />
-    <a href="classes/Erubis/ArrayEruby.html">Erubis::ArrayEruby</a><br />
-    <a href="classes/Erubis/Basic.html">Erubis::Basic</a><br />
-    <a href="classes/Erubis/Basic/Converter.html">Erubis::Basic::Converter</a><br />
-    <a href="classes/Erubis/Basic/Engine.html">Erubis::Basic::Engine</a><br />
-    <a href="classes/Erubis/BiPatternEnhancer.html">Erubis::BiPatternEnhancer</a><br />
-    <a href="classes/Erubis/BiPatternEruby.html">Erubis::BiPatternEruby</a><br />
-    <a href="classes/Erubis/CGenerator.html">Erubis::CGenerator</a><br />
-    <a href="classes/Erubis/CommandOptionError.html">Erubis::CommandOptionError</a><br />
-    <a href="classes/Erubis/Context.html">Erubis::Context</a><br />
-    <a href="classes/Erubis/Converter.html">Erubis::Converter</a><br />
-    <a href="classes/Erubis/DeleteIndentEnhancer.html">Erubis::DeleteIndentEnhancer</a><br />
-    <a href="classes/Erubis/DeleteIndentEruby.html">Erubis::DeleteIndentEruby</a><br />
-    <a href="classes/Erubis/Ec.html">Erubis::Ec</a><br />
-    <a href="classes/Erubis/Ejava.html">Erubis::Ejava</a><br />
-    <a href="classes/Erubis/Ejavascript.html">Erubis::Ejavascript</a><br />
-    <a href="classes/Erubis/Engine.html">Erubis::Engine</a><br />
-    <a href="classes/Erubis/Eperl.html">Erubis::Eperl</a><br />
-    <a href="classes/Erubis/Ephp.html">Erubis::Ephp</a><br />
-    <a href="classes/Erubis/ErboutEnhancer.html">Erubis::ErboutEnhancer</a><br />
-    <a href="classes/Erubis/ErboutEruby.html">Erubis::ErboutEruby</a><br />
-    <a href="classes/Erubis/ErubisError.html">Erubis::ErubisError</a><br />
-    <a href="classes/Erubis/Eruby.html">Erubis::Eruby</a><br />
-    <a href="classes/Erubis/EscapeEnhancer.html">Erubis::EscapeEnhancer</a><br />
-    <a href="classes/Erubis/EscapedEc.html">Erubis::EscapedEc</a><br />
-    <a href="classes/Erubis/EscapedEjava.html">Erubis::EscapedEjava</a><br />
-    <a href="classes/Erubis/EscapedEjavascript.html">Erubis::EscapedEjavascript</a><br />
-    <a href="classes/Erubis/EscapedEperl.html">Erubis::EscapedEperl</a><br />
-    <a href="classes/Erubis/EscapedEphp.html">Erubis::EscapedEphp</a><br />
-    <a href="classes/Erubis/EscapedEruby.html">Erubis::EscapedEruby</a><br />
-    <a href="classes/Erubis/EscapedEscheme.html">Erubis::EscapedEscheme</a><br />
-    <a href="classes/Erubis/Escheme.html">Erubis::Escheme</a><br />
-    <a href="classes/Erubis/Evaluator.html">Erubis::Evaluator</a><br />
-    <a href="classes/Erubis/FastEruby.html">Erubis::FastEruby</a><br />
-    <a href="classes/Erubis/Generator.html">Erubis::Generator</a><br />
-    <a href="classes/Erubis/HeaderFooterEnhancer.html">Erubis::HeaderFooterEnhancer</a><br />
-    <a href="classes/Erubis/HeaderFooterEruby.html">Erubis::HeaderFooterEruby</a><br />
-    <a href="classes/Erubis/Helpers.html">Erubis::Helpers</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html">Erubis::Helpers::RailsFormHelper</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html">Erubis::Helpers::RailsHelper</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper/TemplateConverter.html">Erubis::Helpers::RailsHelper::TemplateConverter</a><br />
-    <a href="classes/Erubis/InterpolationEnhancer.html">Erubis::InterpolationEnhancer</a><br />
-    <a href="classes/Erubis/InterpolationEruby.html">Erubis::InterpolationEruby</a><br />
-    <a href="classes/Erubis/JavaGenerator.html">Erubis::JavaGenerator</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html">Erubis::JavascriptGenerator</a><br />
-    <a href="classes/Erubis/Main.html">Erubis::Main</a><br />
-    <a href="classes/Erubis/NoCodeEnhancer.html">Erubis::NoCodeEnhancer</a><br />
-    <a href="classes/Erubis/NoCodeEruby.html">Erubis::NoCodeEruby</a><br />
-    <a href="classes/Erubis/NoTextEnhancer.html">Erubis::NoTextEnhancer</a><br />
-    <a href="classes/Erubis/NoTextEruby.html">Erubis::NoTextEruby</a><br />
-    <a href="classes/Erubis/NotSupportedError.html">Erubis::NotSupportedError</a><br />
-    <a href="classes/Erubis/OptimizedEruby.html">Erubis::OptimizedEruby</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html">Erubis::OptimizedGenerator</a><br />
-    <a href="classes/Erubis/OptimizedXmlEruby.html">Erubis::OptimizedXmlEruby</a><br />
-    <a href="classes/Erubis/PI.html">Erubis::PI</a><br />
-    <a href="classes/Erubis/PI/Converter.html">Erubis::PI::Converter</a><br />
-    <a href="classes/Erubis/PI/Ec.html">Erubis::PI::Ec</a><br />
-    <a href="classes/Erubis/PI/Ejava.html">Erubis::PI::Ejava</a><br />
-    <a href="classes/Erubis/PI/Ejavascript.html">Erubis::PI::Ejavascript</a><br />
-    <a href="classes/Erubis/PI/Engine.html">Erubis::PI::Engine</a><br />
-    <a href="classes/Erubis/PI/Eperl.html">Erubis::PI::Eperl</a><br />
-    <a href="classes/Erubis/PI/Ephp.html">Erubis::PI::Ephp</a><br />
-    <a href="classes/Erubis/PI/Eruby.html">Erubis::PI::Eruby</a><br />
-    <a href="classes/Erubis/PI/Escheme.html">Erubis::PI::Escheme</a><br />
-    <a href="classes/Erubis/PI/TinyEruby.html">Erubis::PI::TinyEruby</a><br />
-    <a href="classes/Erubis/PercentLineEnhancer.html">Erubis::PercentLineEnhancer</a><br />
-    <a href="classes/Erubis/PercentLineEruby.html">Erubis::PercentLineEruby</a><br />
-    <a href="classes/Erubis/PerlGenerator.html">Erubis::PerlGenerator</a><br />
-    <a href="classes/Erubis/PhpGenerator.html">Erubis::PhpGenerator</a><br />
-    <a href="classes/Erubis/PreprocessingEruby.html">Erubis::PreprocessingEruby</a><br />
-    <a href="classes/Erubis/PreprocessingHelper.html">Erubis::PreprocessingHelper</a><br />
-    <a href="classes/Erubis/PrintEnabledEnhancer.html">Erubis::PrintEnabledEnhancer</a><br />
-    <a href="classes/Erubis/PrintEnabledEruby.html">Erubis::PrintEnabledEruby</a><br />
-    <a href="classes/Erubis/PrintOutEnhancer.html">Erubis::PrintOutEnhancer</a><br />
-    <a href="classes/Erubis/PrintOutEruby.html">Erubis::PrintOutEruby</a><br />
-    <a href="classes/Erubis/PrintOutSimplifiedEruby.html">Erubis::PrintOutSimplifiedEruby</a><br />
-    <a href="classes/Erubis/RubyEvaluator.html">Erubis::RubyEvaluator</a><br />
-    <a href="classes/Erubis/RubyGenerator.html">Erubis::RubyGenerator</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html">Erubis::SchemeGenerator</a><br />
-    <a href="classes/Erubis/SimplifiedEruby.html">Erubis::SimplifiedEruby</a><br />
-    <a href="classes/Erubis/SimplifyEnhancer.html">Erubis::SimplifyEnhancer</a><br />
-    <a href="classes/Erubis/StdoutEnhancer.html">Erubis::StdoutEnhancer</a><br />
-    <a href="classes/Erubis/StdoutEruby.html">Erubis::StdoutEruby</a><br />
-    <a href="classes/Erubis/StdoutSimplifiedEruby.html">Erubis::StdoutSimplifiedEruby</a><br />
-    <a href="classes/Erubis/StringBufferEnhancer.html">Erubis::StringBufferEnhancer</a><br />
-    <a href="classes/Erubis/StringBufferEruby.html">Erubis::StringBufferEruby</a><br />
-    <a href="classes/Erubis/StringIOEruby.html">Erubis::StringIOEruby</a><br />
-    <a href="classes/Erubis/TinyEruby.html">Erubis::TinyEruby</a><br />
-    <a href="classes/Erubis/XmlEruby.html">Erubis::XmlEruby</a><br />
-    <a href="classes/Erubis/XmlHelper.html">Erubis::XmlHelper</a><br />
-  </div>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_file_index.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_file_index.html
deleted file mode 100644
index 50c8b4f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_file_index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
-
-    Files
-
-  -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Files</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
-  <base target="docwin" />
-</head>
-<body>
-<div id="index">
-  <h1 class="section-bar">Files</h1>
-  <div id="index-entries">
-    <a href="files/README_txt.html">README.txt</a><br />
-    <a href="files/erubis_rb.html">erubis.rb</a><br />
-    <a href="files/erubis/context_rb.html">erubis/context.rb</a><br />
-    <a href="files/erubis/converter_rb.html">erubis/converter.rb</a><br />
-    <a href="files/erubis/engine_rb.html">erubis/engine.rb</a><br />
-    <a href="files/erubis/engine/ec_rb.html">erubis/engine/ec.rb</a><br />
-    <a href="files/erubis/engine/ejava_rb.html">erubis/engine/ejava.rb</a><br />
-    <a href="files/erubis/engine/ejavascript_rb.html">erubis/engine/ejavascript.rb</a><br />
-    <a href="files/erubis/engine/enhanced_rb.html">erubis/engine/enhanced.rb</a><br />
-    <a href="files/erubis/engine/eperl_rb.html">erubis/engine/eperl.rb</a><br />
-    <a href="files/erubis/engine/ephp_rb.html">erubis/engine/ephp.rb</a><br />
-    <a href="files/erubis/engine/eruby_rb.html">erubis/engine/eruby.rb</a><br />
-    <a href="files/erubis/engine/escheme_rb.html">erubis/engine/escheme.rb</a><br />
-    <a href="files/erubis/engine/optimized_rb.html">erubis/engine/optimized.rb</a><br />
-    <a href="files/erubis/enhancer_rb.html">erubis/enhancer.rb</a><br />
-    <a href="files/erubis/error_rb.html">erubis/error.rb</a><br />
-    <a href="files/erubis/evaluator_rb.html">erubis/evaluator.rb</a><br />
-    <a href="files/erubis/generator_rb.html">erubis/generator.rb</a><br />
-    <a href="files/erubis/helper_rb.html">erubis/helper.rb</a><br />
-    <a href="files/erubis/helpers/rails_form_helper_rb.html">erubis/helpers/rails_form_helper.rb</a><br />
-    <a href="files/erubis/helpers/rails_helper_rb.html">erubis/helpers/rails_helper.rb</a><br />
-    <a href="files/erubis/local-setting_rb.html">erubis/local-setting.rb</a><br />
-    <a href="files/erubis/main_rb.html">erubis/main.rb</a><br />
-    <a href="files/erubis/preprocessing_rb.html">erubis/preprocessing.rb</a><br />
-    <a href="files/erubis/tiny_rb.html">erubis/tiny.rb</a><br />
-  </div>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_method_index.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_method_index.html
deleted file mode 100644
index 8bfdc98..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/fr_method_index.html
+++ /dev/null
@@ -1,248 +0,0 @@
-
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<!--
-
-    Methods
-
-  -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Methods</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-  <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
-  <base target="docwin" />
-</head>
-<body>
-<div id="index">
-  <h1 class="section-bar">Methods</h1>
-  <div id="index-entries">
-    <a href="classes/Erubis/Context.html#M000216">[] (Erubis::Context)</a><br />
-    <a href="classes/Erubis/Context.html#M000217">[]= (Erubis::Context)</a><br />
-    <a href="classes/Erubis/PreprocessingHelper.html#M000064">_? (Erubis::PreprocessingHelper)</a><br />
-    <a href="classes/Erubis/PreprocessingHelper.html#M000063">_P (Erubis::PreprocessingHelper)</a><br />
-    <a href="classes/Erubis/InterpolationEnhancer.html#M000022">_add_text_to_str (Erubis::InterpolationEnhancer)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper/TemplateConverter.html#M000092">_create_preprocessor (Erubis::Helpers::RailsHelper::TemplateConverter)</a><br />
-    <a href="classes/Erubis/PreprocessingHelper.html#M000065">_decode (Erubis::PreprocessingHelper)</a><br />
-    <a href="classes/Erubis/PreprocessingHelper.html#M000062">_p (Erubis::PreprocessingHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000108">_pp_check_box_checked? (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000098">_pp_error_tags (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000110">_pp_radio_button_checked? (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000099">_pp_remove_error_div (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000111">_pp_select (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000112">_pp_select_options (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper/TemplateConverter.html#M000093">_preprocessing_context_object (Erubis::Helpers::RailsHelper::TemplateConverter)</a><br />
-    <a href="classes/Erubis/Basic/Converter.html#M000061">add_expr (Erubis::Basic::Converter)</a><br />
-    <a href="classes/Erubis/EscapeEnhancer.html#M000132">add_expr (Erubis::EscapeEnhancer)</a><br />
-    <a href="classes/Erubis/NoCodeEnhancer.html#M000006">add_expr (Erubis::NoCodeEnhancer)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000077">add_expr_debug (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000151">add_expr_debug (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000162">add_expr_debug (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000143">add_expr_debug (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/RubyGenerator.html#M000043">add_expr_debug (Erubis::RubyGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000177">add_expr_debug (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000186">add_expr_debug (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/Generator.html#M000018">add_expr_debug (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000034">add_expr_debug (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/OptimizedXmlEruby.html#M000222">add_expr_debug (Erubis::OptimizedXmlEruby)</a><br />
-    <a href="classes/Erubis/RubyGenerator.html#M000042">add_expr_escaped (Erubis::RubyGenerator)</a><br />
-    <a href="classes/Erubis/PreprocessingEruby.html#M000205">add_expr_escaped (Erubis::PreprocessingEruby)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000076">add_expr_escaped (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/PrintOutEnhancer.html#M000130">add_expr_escaped (Erubis::PrintOutEnhancer)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000033">add_expr_escaped (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/Generator.html#M000017">add_expr_escaped (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000185">add_expr_escaped (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000176">add_expr_escaped (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000150">add_expr_escaped (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000161">add_expr_escaped (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/InterpolationEnhancer.html#M000023">add_expr_escaped (Erubis::InterpolationEnhancer)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000142">add_expr_escaped (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/RubyGenerator.html#M000041">add_expr_literal (Erubis::RubyGenerator)</a><br />
-    <a href="classes/Erubis/InterpolationEnhancer.html#M000024">add_expr_literal (Erubis::InterpolationEnhancer)</a><br />
-    <a href="classes/Erubis/PrintOutEnhancer.html#M000129">add_expr_literal (Erubis::PrintOutEnhancer)</a><br />
-    <a href="classes/Erubis/Generator.html#M000016">add_expr_literal (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000075">add_expr_literal (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000141">add_expr_literal (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000160">add_expr_literal (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000175">add_expr_literal (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000184">add_expr_literal (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000149">add_expr_literal (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000032">add_expr_literal (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000172">add_indent (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/ArrayBufferEnhancer.html#M000009">add_postamble (Erubis::ArrayBufferEnhancer)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000079">add_postamble (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/Generator.html#M000019">add_postamble (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000035">add_postamble (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000178">add_postamble (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000187">add_postamble (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000153">add_postamble (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/PrintOutEnhancer.html#M000131">add_postamble (Erubis::PrintOutEnhancer)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000163">add_postamble (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/NoCodeEnhancer.html#M000004">add_postamble (Erubis::NoCodeEnhancer)</a><br />
-    <a href="classes/Erubis/StringBufferEnhancer.html#M000199">add_postamble (Erubis::StringBufferEnhancer)</a><br />
-    <a href="classes/Erubis/StdoutEnhancer.html#M000070">add_postamble (Erubis::StdoutEnhancer)</a><br />
-    <a href="classes/Erubis/ArrayEnhancer.html#M000193">add_postamble (Erubis::ArrayEnhancer)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000144">add_postamble (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/ErboutEnhancer.html#M000191">add_postamble (Erubis::ErboutEnhancer)</a><br />
-    <a href="classes/Erubis/PrintOutEnhancer.html#M000127">add_preamble (Erubis::PrintOutEnhancer)</a><br />
-    <a href="classes/Erubis/StdoutEnhancer.html#M000069">add_preamble (Erubis::StdoutEnhancer)</a><br />
-    <a href="classes/Erubis/Generator.html#M000013">add_preamble (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/StringBufferEnhancer.html#M000198">add_preamble (Erubis::StringBufferEnhancer)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000072">add_preamble (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/ArrayEnhancer.html#M000192">add_preamble (Erubis::ArrayEnhancer)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000027">add_preamble (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000138">add_preamble (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000146">add_preamble (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/ArrayBufferEnhancer.html#M000008">add_preamble (Erubis::ArrayBufferEnhancer)</a><br />
-    <a href="classes/Erubis/ErboutEnhancer.html#M000190">add_preamble (Erubis::ErboutEnhancer)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000155">add_preamble (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000170">add_preamble (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/NoCodeEnhancer.html#M000003">add_preamble (Erubis::NoCodeEnhancer)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000180">add_preamble (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/PrintEnabledEnhancer.html#M000166">add_preamble (Erubis::PrintEnabledEnhancer)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000140">add_stmt (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000078">add_stmt (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000174">add_stmt (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000031">add_stmt (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000183">add_stmt (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/NoCodeEnhancer.html#M000007">add_stmt (Erubis::NoCodeEnhancer)</a><br />
-    <a href="classes/Erubis/RubyGenerator.html#M000040">add_stmt (Erubis::RubyGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000152">add_stmt (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/Generator.html#M000015">add_stmt (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000159">add_stmt (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/BiPatternEnhancer.html#M000165">add_text (Erubis::BiPatternEnhancer)</a><br />
-    <a href="classes/Erubis/Generator.html#M000014">add_text (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/PrintOutEnhancer.html#M000128">add_text (Erubis::PrintOutEnhancer)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000158">add_text (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000148">add_text (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/NoTextEnhancer.html#M000189">add_text (Erubis::NoTextEnhancer)</a><br />
-    <a href="classes/Erubis/PercentLineEnhancer.html#M000188">add_text (Erubis::PercentLineEnhancer)</a><br />
-    <a href="classes/Erubis/InterpolationEnhancer.html#M000021">add_text (Erubis::InterpolationEnhancer)</a><br />
-    <a href="classes/Erubis/RubyGenerator.html#M000039">add_text (Erubis::RubyGenerator)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000030">add_text (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000182">add_text (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000074">add_text (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/NoCodeEnhancer.html#M000005">add_text (Erubis::NoCodeEnhancer)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000139">add_text (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/HeaderFooterEnhancer.html#M000125">add_text (Erubis::HeaderFooterEnhancer)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000173">add_text (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/ActionView/TemplateHandlers/ErubisHandler.html#M000001">compile (ActionView::TemplateHandlers::ErubisHandler)</a><br />
-    <a href="classes/ActionView/TemplateHandlers/ErubisHandler.html#M000002">compile (ActionView::TemplateHandlers::ErubisHandler)</a><br />
-    <a href="classes/Erubis/PI/Converter.html#M000045">convert (Erubis::PI::Converter)</a><br />
-    <a href="classes/Erubis/SimplifyEnhancer.html#M000025">convert (Erubis::SimplifyEnhancer)</a><br />
-    <a href="classes/Erubis/Converter.html#M000081">convert (Erubis::Converter)</a><br />
-    <a href="classes/Erubis/TinyEruby.html#M000201">convert (Erubis::TinyEruby)</a><br />
-    <a href="classes/Erubis/PI/TinyEruby.html#M000051">convert (Erubis::PI::TinyEruby)</a><br />
-    <a href="classes/Erubis/HeaderFooterEnhancer.html#M000126">convert (Erubis::HeaderFooterEnhancer)</a><br />
-    <a href="classes/Erubis/Engine.html#M000207">convert! (Erubis::Engine)</a><br />
-    <a href="classes/Erubis/Converter.html#M000083">convert_input (Erubis::Converter)</a><br />
-    <a href="classes/Erubis/DeleteIndentEnhancer.html#M000194">convert_input (Erubis::DeleteIndentEnhancer)</a><br />
-    <a href="classes/Erubis/PI/Converter.html#M000046">convert_input (Erubis::PI::Converter)</a><br />
-    <a href="classes/Erubis/Basic/Converter.html#M000060">convert_input (Erubis::Basic::Converter)</a><br />
-    <a href="classes/Erubis/InterpolationEnhancer.html#M000020">convert_input (Erubis::InterpolationEnhancer)</a><br />
-    <a href="classes/Erubis/RubyEvaluator.html#M000197">def_method (Erubis::RubyEvaluator)</a><br />
-    <a href="classes/Erubis/Converter.html#M000082">detect_spaces_at_bol (Erubis::Converter)</a><br />
-    <a href="classes/Erubis/Context.html#M000219">each (Erubis::Context)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html#M000084">engine_class (Erubis::Helpers::RailsHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html#M000085">engine_class= (Erubis::Helpers::RailsHelper)</a><br />
-    <a href="classes/Erubis/RubyGenerator.html#M000037">escape_text (Erubis::RubyGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000147">escape_text (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000028">escape_text (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000181">escape_text (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000171">escape_text (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000134">escape_text (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000156">escape_text (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/Generator.html#M000011">escape_text (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000073">escape_text (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/XmlHelper.html#M000119">escape_xml (Erubis::XmlHelper)</a><br />
-    <a href="classes/Erubis/XmlHelper.html#M000120">escape_xml2 (Erubis::XmlHelper)</a><br />
-    <a href="classes/Erubis/RubyGenerator.html#M000038">escaped_expr (Erubis::RubyGenerator)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000157">escaped_expr (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000135">escaped_expr (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000029">escaped_expr (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/Generator.html#M000012">escaped_expr (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/Evaluator.html#M000068">evaluate (Erubis::Evaluator)</a><br />
-    <a href="classes/Erubis/PI/TinyEruby.html#M000053">evaluate (Erubis::PI::TinyEruby)</a><br />
-    <a href="classes/Erubis/PrintEnabledEnhancer.html#M000168">evaluate (Erubis::PrintEnabledEnhancer)</a><br />
-    <a href="classes/Erubis/TinyEruby.html#M000203">evaluate (Erubis::TinyEruby)</a><br />
-    <a href="classes/Erubis/RubyEvaluator.html#M000196">evaluate (Erubis::RubyEvaluator)</a><br />
-    <a href="classes/Erubis/Main.html#M000214">execute (Erubis::Main)</a><br />
-    <a href="classes/Erubis/XmlHelper.html#M000121">h (Erubis::XmlHelper)</a><br />
-    <a href="classes/Erubis/XmlHelper.html#M000122">html_escape (Erubis::XmlHelper)</a><br />
-    <a href="classes/Erubis/PI/Escheme.html#M000057">init_converter (Erubis::PI::Escheme)</a><br />
-    <a href="classes/Erubis/PI/Eruby.html#M000056">init_converter (Erubis::PI::Eruby)</a><br />
-    <a href="classes/Erubis/PI/Ejava.html#M000048">init_converter (Erubis::PI::Ejava)</a><br />
-    <a href="classes/Erubis/PI/Ec.html#M000055">init_converter (Erubis::PI::Ec)</a><br />
-    <a href="classes/Erubis/OptimizedEruby.html#M000211">init_converter (Erubis::OptimizedEruby)</a><br />
-    <a href="classes/Erubis/Converter.html#M000080">init_converter (Erubis::Converter)</a><br />
-    <a href="classes/Erubis/Basic/Converter.html#M000058">init_converter (Erubis::Basic::Converter)</a><br />
-    <a href="classes/Erubis/PI/Ejavascript.html#M000047">init_converter (Erubis::PI::Ejavascript)</a><br />
-    <a href="classes/Erubis/PI/Eperl.html#M000054">init_converter (Erubis::PI::Eperl)</a><br />
-    <a href="classes/Erubis/PI/Converter.html#M000044">init_converter (Erubis::PI::Converter)</a><br />
-    <a href="classes/Erubis/PI/Ephp.html#M000049">init_converter (Erubis::PI::Ephp)</a><br />
-    <a href="classes/Erubis/Evaluator.html#M000066">init_evaluator (Erubis::Evaluator)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000133">init_generator (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/PerlGenerator.html#M000071">init_generator (Erubis::PerlGenerator)</a><br />
-    <a href="classes/Erubis/RubyGenerator.html#M000036">init_generator (Erubis::RubyGenerator)</a><br />
-    <a href="classes/Erubis/SchemeGenerator.html#M000026">init_generator (Erubis::SchemeGenerator)</a><br />
-    <a href="classes/Erubis/JavascriptGenerator.html#M000169">init_generator (Erubis::JavascriptGenerator)</a><br />
-    <a href="classes/Erubis/CGenerator.html#M000154">init_generator (Erubis::CGenerator)</a><br />
-    <a href="classes/Erubis/PhpGenerator.html#M000145">init_generator (Erubis::PhpGenerator)</a><br />
-    <a href="classes/Erubis/Generator.html#M000010">init_generator (Erubis::Generator)</a><br />
-    <a href="classes/Erubis/JavaGenerator.html#M000179">init_generator (Erubis::JavaGenerator)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html#M000086">init_properties (Erubis::Helpers::RailsHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html#M000087">init_properties= (Erubis::Helpers::RailsHelper)</a><br />
-    <a href="classes/Erubis/Context.html#M000218">keys (Erubis::Context)</a><br />
-    <a href="classes/Erubis/Engine.html#M000208">load_file (Erubis::Engine)</a><br />
-    <a href="classes/Erubis/Main.html#M000212">main (Erubis::Main)</a><br />
-    <a href="classes/Erubis/BiPatternEnhancer.html#M000164">new (Erubis::BiPatternEnhancer)</a><br />
-    <a href="classes/Erubis/PreprocessingEruby.html#M000204">new (Erubis::PreprocessingEruby)</a><br />
-    <a href="classes/Erubis/Context.html#M000215">new (Erubis::Context)</a><br />
-    <a href="classes/Erubis/Main.html#M000213">new (Erubis::Main)</a><br />
-    <a href="classes/Erubis/TinyEruby.html#M000200">new (Erubis::TinyEruby)</a><br />
-    <a href="classes/Erubis/PI/TinyEruby.html#M000050">new (Erubis::PI::TinyEruby)</a><br />
-    <a href="classes/Erubis/Engine.html#M000206">new (Erubis::Engine)</a><br />
-    <a href="classes/Erubis/Basic/Converter.html#M000059">pattern_regexp (Erubis::Basic::Converter)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000107">pp_check_box (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000114">pp_collection_select (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000115">pp_country_select (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000097">pp_error_on (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000105">pp_file_field (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000101">pp_form_tag (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000104">pp_hidden_field (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000118">pp_image_submit_tag (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000103">pp_password_field (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000109">pp_radio_button (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000096">pp_render_partial (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000113">pp_select (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000117">pp_submit_tag (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000100">pp_tag_helper (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000095">pp_template_filename (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000094">pp_template_filename (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000106">pp_text_area (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000102">pp_text_field (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsFormHelper.html#M000116">pp_time_zone_select (Erubis::Helpers::RailsFormHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html#M000090">preprocessing (Erubis::Helpers::RailsHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html#M000091">preprocessing= (Erubis::Helpers::RailsHelper)</a><br />
-    <a href="classes/Erubis/PrintEnabledEnhancer.html#M000167">print (Erubis::PrintEnabledEnhancer)</a><br />
-    <a href="classes/Erubis/Engine.html#M000209">process (Erubis::Engine)</a><br />
-    <a href="classes/Erubis/Engine.html#M000210">process_proc (Erubis::Engine)</a><br />
-    <a href="classes/Erubis/RubyEvaluator.html#M000195">result (Erubis::RubyEvaluator)</a><br />
-    <a href="classes/Erubis/TinyEruby.html#M000202">result (Erubis::TinyEruby)</a><br />
-    <a href="classes/Erubis/Evaluator.html#M000067">result (Erubis::Evaluator)</a><br />
-    <a href="classes/Erubis/PI/TinyEruby.html#M000052">result (Erubis::PI::TinyEruby)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html#M000088">show_src (Erubis::Helpers::RailsHelper)</a><br />
-    <a href="classes/Erubis/Helpers/RailsHelper.html#M000089">show_src= (Erubis::Helpers::RailsHelper)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000136">switch_to_expr (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/OptimizedGenerator.html#M000137">switch_to_stmt (Erubis::OptimizedGenerator)</a><br />
-    <a href="classes/Erubis/Context.html#M000220">to_hash (Erubis::Context)</a><br />
-    <a href="classes/Erubis/XmlHelper.html#M000124">u (Erubis::XmlHelper)</a><br />
-    <a href="classes/Erubis/Context.html#M000221">update (Erubis::Context)</a><br />
-    <a href="classes/Erubis/XmlHelper.html#M000123">url_encode (Erubis::XmlHelper)</a><br />
-  </div>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/index.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/index.html
deleted file mode 100644
index 8603883..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
-
-<!--
-
-    RDoc Documentation
-
-  -->
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RDoc Documentation</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-</head>
-<frameset rows="20%, 80%">
-    <frameset cols="25%,35%,45%">
-        <frame src="fr_file_index.html"   title="Files" name="Files" />
-        <frame src="fr_class_index.html"  name="Classes" />
-        <frame src="fr_method_index.html" name="Methods" />
-    </frameset>
-    <frame src="files/README_txt.html" name="docwin" />
-</frameset>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/rdoc-style.css b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/rdoc-style.css
deleted file mode 100644
index 44c7b3d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc-api/rdoc-style.css
+++ /dev/null
@@ -1,208 +0,0 @@
-
-body {
-    font-family: Verdana,Arial,Helvetica,sans-serif;
-    font-size:   90%;
-    margin: 0;
-    margin-left: 40px;
-    padding: 0;
-    background: white;
-}
-
-h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
-h1 { font-size: 150%; }
-h2,h3,h4 { margin-top: 1em; }
-
-a { background: #eef; color: #039; text-decoration: none; }
-a:hover { background: #039; color: #eef; }
-
-/* Override the base stylesheet's Anchor inside a table cell */
-td > a {
-  background: transparent;
-  color: #039;
-  text-decoration: none;
-}
-
-/* and inside a section title */
-.section-title > a {
-  background: transparent;
-  color: #eee;
-  text-decoration: none;
-}
-
-/* === Structural elements =================================== */
-
-div#index {
-    margin: 0;
-    margin-left: -40px;
-    padding: 0;
-    font-size: 90%;
-}
-
-
-div#index a {
-    margin-left: 0.7em;
-}
-
-div#index .section-bar {
-   margin-left: 0px;
-   padding-left: 0.7em;
-   background: #ccc;
-   font-size: small;
-}
-
-
-div#classHeader, div#fileHeader {
-    width: auto;
-    color: white;
-    padding: 0.5em 1.5em 0.5em 1.5em;
-    margin: 0;
-    margin-left: -40px;
-    border-bottom: 3px solid #006;
-}
-
-div#classHeader a, div#fileHeader a {
-    background: inherit;
-    color: white;
-}
-
-div#classHeader td, div#fileHeader td {
-    background: inherit;
-    color: white;
-}
-
-
-div#fileHeader {
-    background: #057;
-}
-
-div#classHeader {
-    background: #048;
-}
-
-
-.class-name-in-header {
-  font-size:  180%;
-  font-weight: bold;
-}
-
-
-div#bodyContent {
-    padding: 0 1.5em 0 1.5em;
-}
-
-div#description {
-    padding: 0.5em 1.5em;
-    background: #efefef;
-    border: 1px dotted #999;
-}
-
-div#description h1,h2,h3,h4,h5,h6 {
-    color: #125;;
-    background: transparent;
-}
-
-div#validator-badges {
-    text-align: center;
-}
-div#validator-badges img { border: 0; }
-
-div#copyright {
-    color: #333;
-    background: #efefef;
-    font: 0.75em sans-serif;
-    margin-top: 5em;
-    margin-bottom: 0;
-    padding: 0.5em 2em;
-}
-
-
-/* === Classes =================================== */
-
-table.header-table {
-    color: white;
-    font-size: small;
-}
-
-.type-note {
-    font-size: small;
-    color: #DEDEDE;
-}
-
-.xxsection-bar {
-    background: #eee;
-    color: #333;
-    padding: 3px;
-}
-
-.section-bar {
-   color: #333;
-   border-bottom: 1px solid #999;
-    margin-left: -20px;
-}
-
-
-.section-title {
-    background: #79a;
-    color: #eee;
-    padding: 3px;
-    margin-top: 2em;
-    margin-left: -30px;
-    border: 1px solid #999;
-}
-
-.top-aligned-row {  vertical-align: top }
-.bottom-aligned-row { vertical-align: bottom }
-
-/* --- Context section classes ----------------------- */
-
-.context-row { }
-.context-item-name { font-family: monospace; font-weight: bold; color: black; }
-.context-item-value { font-size: small; color: #448; }
-.context-item-desc { color: #333; padding-left: 2em; }
-
-/* --- Method classes -------------------------- */
-.method-detail {
-    background: #efefef;
-    padding: 0;
-    margin-top: 0.5em;
-    margin-bottom: 1em;
-    border: 1px dotted #ccc;
-}
-.method-heading {
-  color: black;
-  background: #ccc;
-  border-bottom: 1px solid #666;
-  padding: 0.2em 0.5em 0 0.5em;
-}
-.method-signature { color: black; background: inherit; }
-.method-name { font-weight: bold; }
-.method-args { font-style: italic; }
-.method-description { padding: 0 0.5em 0 0.5em; }
-
-/* --- Source code sections -------------------- */
-
-a.source-toggle { font-size: 90%; }
-div.method-source-code {
-    background: #262626;
-    color: #ffdead;
-    margin: 1em;
-    padding: 0.5em;
-    border: 1px dashed #999;
-    overflow: hidden;
-}
-
-div.method-source-code pre { color: #ffdead; overflow: hidden; }
-
-/* --- Ruby keyword styles --------------------- */
-
-.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
-
-.ruby-constant  { color: #7fffd4; background: transparent; }
-.ruby-keyword { color: #00ffff; background: transparent; }
-.ruby-ivar    { color: #eedd82; background: transparent; }
-.ruby-operator  { color: #00ffee; background: transparent; }
-.ruby-identifier { color: #ffdead; background: transparent; }
-.ruby-node    { color: #ffa07a; background: transparent; }
-.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
-.ruby-regexp  { color: #ffa07a; background: transparent; }
-.ruby-value   { color: #7fffd4; background: transparent; }
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc/docstyle.css b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc/docstyle.css
deleted file mode 100644
index 837d96e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc/docstyle.css
+++ /dev/null
@@ -1,188 +0,0 @@
-body {
-	background-color:#FFFFFF;
-}
-
-.mainbody {
-	color:#333333;
-	line-height:150%;
-	margin: 5px 30px 5px 30px;
-}
-
-a:link, a:active, a:hover {
-	color:#CC6600;
-}
-
-a:visited {
-	color:#DD9900;
-}
-
-p {
-	color:#333333;
-	line-height:150%;
-}
-
-pre {
-	width: 100%;
-	line-height:130%;
-	white-space:pre;
-}
-
-.program {
-	border-style:solid;
-	border-width:1px;
-	border-color:#6699FF;
-	color:#333333;
-	background-color:#DDEEFF;
-	padding:8px 9px 8px 9px;
-	margin:0px;
-	word-break:break-all;
-}
-
-.terminal {
-	border-style:solid;
-	border-width:1;
-	border-color:#999999;
-	color:#333333;
-	background-color:#E0E0E0;
-	padding:9px 10px 9px 10px;
-	margin:0px;
-	word-break:break-all;
-}
-
-.output {
-	border-style:solid;
-	border-width:1px;
-	border-color:#CCCCCC;
-	color:#333333;
-	background-color:#FFFFFF;
-	padding:8px 9px 8px 9px;
-	margin:0px;
-	word-break:break-all;
-}
-
-
-.program_caption {
-        margin-top: 20px;
-}
-
-.terminal_caption {
-        margin-top: 20px;
-}
-
-.output_caption {
-        margin-top: 20px;
-}
-
-
-ul,ol,dl {
-	/* margin:0px; */
-	/* padding:0px; */
-	color:#333333;
-	line-height:140%;
-}
-
-.dt2, .dt3 {
-	font-weight:bold;
-}
-
-.table1 {
-	padding:2px;
-	color:#333333;
-	background-color:#DDDDCC;
-	line-height:130%;
-	/*
-	border-width:1px;
-	border-style:solid;
-	border-color:#FFFFFF;
-	*/
-	margin:5;
-}
-
-.th1, .th2 {
-	padding:1px;
-	color:#333333;
-	/* background-color:#DDDDCC; */
-	background-color:#CCCCBB;
-	line-height:130%;
-}
-
-.td1, .th2 {
-	padding:1px;
-	color:#333333;
-	background-color:#EEEEDD;
-	line-height:130%;
-}
-
-.caption1, .caption2 {
-	/* font-size:x-small; */
-	color:#333333;
-}
-
-.table2 {
-	padding:1px;
-	color:#333333;
-	background-color:#DDDDCC;
-	line-height:130%;
-	/*
-	border-width:1px;
-	border-style:solid;
-	border-color:#FFFFFF;
-	*/
-	margin:5;
-}
-
-h1, .chapter, .doctitle {
-	color:#333333;
-	font-weight:bold;
-	padding:30px 0px 10px 0px;
-}
-
-h2, .section {
-	color:#333333;
-	font-weight:bold;
-	border-style:solid;
-	border-color:#6699FF;
-	border-width:0px 0px 2px 30px;
-	padding:10px 20px 0px 5px;
-}
-
-h3, .subsection {
-	color:#333333;
-	font-weight:bold;
-	border-style:solid;
-	border-color:#6699FF;
-	border-width: 0px 0px 0px 15px;
-	padding: 10px 20px 0px 5px;
-}
-
-.em {
-	font-weight:bold;
-}
-
-.toc {
-	/* font-size:small; */
-	/* line-height:100%; */
-}
-
-.footnote {
-	font-size:small;
-}
-
-.note {
-	background-color:#FFFFDD;
-	border-style:solid;
-	border-width:0px 1px 0px 1px;
-	border-color:#DDDD66;
-	color:#333300;
-	/* font-size:small; */
-	line-height:120%;
-	padding: 5px 20px 5px 20px;
-}
-
-.figure {
-	/*
-	border-width:1px;
-	border-color:#DDDD66;
-	white-space:pre;
-	*/
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc/users-guide.html b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc/users-guide.html
deleted file mode 100644
index 8b20510..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/doc/users-guide.html
+++ /dev/null
@@ -1,3285 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-  <meta http-equiv="Content-Type" content="text/html">
-  <title>Erubis Users' Guide</title>
-  <meta name="generator" content="kwaser">
-  <meta http-equiv="Content-Style-Type" content="text/css">
-  <link rel="stylesheet" href="docstyle.css" type="text/css">
- </head>
- <body>
-
-  <blockquote>
-   <div class="mainbody">
-
-    <div align="left"><h1>Erubis Users' Guide</h1></div>
-    <div align="left">
-      last update: $Date: 2008-06-13 08:04:21 +0900 (Fri, 13 Jun 2008) $<br>
-    </div>
-
-<p>release: 2.6.2
-</p>
-<a name="preface"></a>
-<h2 class="section1">Preface</h2>
-<p>Erubis is an implementation of eRuby.
-It has the following features.
-</p>
-<ul type="disc">
-<li>Very fast, almost three times faster than ERB and about ten percent faster than eruby (implemented in C)
-</li>
-<li>File caching of converted Ruby script support
-</li>
-<li>Auto escaping support
-</li>
-<li>Auto trimming spaces around '<% %>'
-</li>
-<li>Embedded pattern changeable (default '<% %>')
-</li>
-<li>Enable to handle Processing Instructions (PI) as embedded pattern (ex. '<?rb ... ?>')
-</li>
-<li>Multi-language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript)
-</li>
-<li>Context object available and easy to combine eRuby template with YAML datafile
-</li>
-<li>Print statement available
-</li>
-<li>Easy to expand and customize in subclass
-</li>
-<li><a href="#rails">Ruby on Rails support</a>
-</li>
-<li>mod_ruby support|#topcs-modruby
-</li>
-</ul>
-<p>Erubis is implemented in pure Ruby.  It requires Ruby 1.8 or higher.
-Erubis now supports Ruby 1.9.
-</p>
-<a name="toc"></a>
-<h3 class="section2">Table of Contents</h3>
-<ul>
-  <li><a href="#preface">Preface</a>
-  <ul>
-    <li><a href="#toc">Table of Contents</a>
-    </li>
-  </ul>
-  </li>
-  <li><a href="#install">Installation</a>
-  </li>
-  <li><a href="#tutorial">Tutorial</a>
-  <ul>
-    <li><a href="#tut-basic">Basic Example</a>
-    </li>
-    <li><a href="#tut-trim">Trimming Spaces</a>
-    </li>
-    <li><a href="#tut-escape">Escape</a>
-    </li>
-    <li><a href="#tut-pattern">Embedded Pattern</a>
-    </li>
-    <li><a href="#tut-context">Context Object</a>
-    </li>
-    <li><a href="#tut-datafile">Context Data File</a>
-    </li>
-    <li><a href="#tut-datastr">Context Data String</a>
-    </li>
-    <li><a href="#tut-preamble">Preamble and Postamble</a>
-    </li>
-    <li><a href="#tut-pi">Processing Instruction (PI) Converter</a>
-    </li>
-    <li><a href="#tut-notext">Retrieve Ruby Code</a>
-    </li>
-  </ul>
-  </li>
-  <li><a href="#enhancer">Enhancer</a>
-  <ul>
-    <li><a href="#escape-enhancer">EscapeEnhancer</a>
-    </li>
-    <li><a href="#stdout-enhancer">StdoutEnhancer</a>
-    </li>
-    <li><a href="#printout-enhancer">PrintOutEnhancer</a>
-    </li>
-    <li><a href="#printenabled-enhancer">PrintEnabledEnhancer</a>
-    </li>
-    <li><a href="#array-enhancer">ArrayEnhancer</a>
-    </li>
-    <li><a href="#arraybuffer-enhancer">ArrayBufferEnhancer</a>
-    </li>
-    <li><a href="#stringbuffer-enhancer">StringBufferEnhancer</a>
-    </li>
-    <li><a href="#erbout-enhancer">ErboutEnhancer</a>
-    </li>
-    <li><a href="#notext-enhancer">NoTextEnhancer</a>
-    </li>
-    <li><a href="#nocode-enhancer">NoCodeEnhancer</a>
-    </li>
-    <li><a href="#simplify-enhancer">SimplifyEnhancer</a>
-    </li>
-    <li><a href="#bipattern-enhancer">BiPatternEnhancer</a>
-    </li>
-    <li><a href="#percentline-enhancer">PercentLineEnhancer</a>
-    </li>
-    <li><a href="#headerfooter-enhancer">HeaderFooterEnhancer</a>
-    </li>
-    <li><a href="#interpolation-enhancer">InterpolationEnhancer</a>
-    </li>
-    <li><a href="#deleteindent-enhancer">DeleteIndentEnhancer</a>
-    </li>
-  </ul>
-  </li>
-  <li><a href="#lang">Multi-Language Support</a>
-  <ul>
-    <li><a href="#lang-php">PHP</a>
-    </li>
-    <li><a href="#lang-c">C</a>
-    </li>
-    <li><a href="#lang-java">Java</a>
-    </li>
-    <li><a href="#lang-scheme">Scheme</a>
-    </li>
-    <li><a href="#lang-perl">Perl</a>
-    </li>
-    <li><a href="#lang-javascript">JavaScript</a>
-    </li>
-  </ul>
-  </li>
-  <li><a href="#rails">Ruby on Rails Support</a>
-  <ul>
-    <li><a href="#rails-settings">Settings</a>
-    </li>
-    <li><a href="#rails-preprocessing">Preprosessing</a>
-    </li>
-    <li><a href="#rails-formhelpers">Form Helpers for Preprocessing</a>
-    </li>
-    <li><a href="#rails-others">Others</a>
-    </li>
-  </ul>
-  </li>
-  <li><a href="#topics">Other Topics</a>
-  <ul>
-    <li><a href="#'<%= =%>' and '<%= -%>'">'<%= =%>' and '<%= -%>'</a>
-    </li>
-    <li><a href="#'<%% %>' and '<%%= %>'">'<%% %>' and '<%%= %>'</a>
-    </li>
-    <li><a href="#topics-context-vs-binding">evaluate(context) v.s. result(binding)</a>
-    </li>
-    <li><a href="#topics-fasteruby">Class Erubis::FastEruby</a>
-    </li>
-    <li><a href="#topics-syntax">Syntax Checking</a>
-    </li>
-    <li><a href="#topics-caching">File Caching</a>
-    </li>
-    <li><a href="#topics-tinyeruby">Erubis::TinyEruby class</a>
-    </li>
-    <li><a href="#topics-php">NoTextEnhancer and NoCodeEnhancer in PHP</a>
-    </li>
-    <li><a href="#topcs-modruby">Helper Class for mod_ruby</a>
-    </li>
-    <li><a href="#topics-defmethod">Define method</a>
-    </li>
-    <li><a href="#topics-benchmark">Benchmark</a>
-    </li>
-  </ul>
-  </li>
-  <li><a href="#command">Command Reference</a>
-  <ul>
-    <li><a href="#command-usage">Usage</a>
-    </li>
-    <li><a href="#command-options">Options</a>
-    </li>
-    <li><a href="#command-props">Properties</a>
-    </li>
-  </ul>
-  </li>
-</ul>
-<br>
-
-
-<br>
-
-
-<a name="install"></a>
-<h2 class="section1">Installation</h2>
-<ul type="disc">
-<li>If you have installed RubyGems, just type <code>gem install --remote erubis</code>.
-<pre class="terminal">$ sudo gem install --remote erubis
-</pre>
-</li>
-</ul>
-<ul type="disc">
-<li>Else install <a href="http://rubyforge.org/projects/erubis/">abstract</a> at first,
-   and download erubis_X.X.X.tar.bz2 and install it by setup.rb.
-<pre class="terminal">$ tar xjf abstract_X.X.X.tar.bz2
-$ cd abstract_X.X.X/
-$ sudo ruby setup.rb
-$ cd ..
-$ tar xjf erubis_X.X.X.tar.bz2
-$ cd erubis_X.X.X/
-$ sudo ruby setup.rb
-</pre>
-</li>
-</ul>
-<ul type="disc">
-<li>(Optional) 'contrib/inline-require' enables you to merge 'lib/**/*.rb' into 'bin/erubis'.
-<pre class="terminal">$ tar xjf erubis_X.X.X.tar.bz2
-$ cd erubis_X.X.X/
-$ unset RUBYLIB
-$ contrib/inline-require -I lib bin/erubis > contrib/erubis
-</pre>
-</li>
-</ul>
-<br>
-
-
-<a name="tutorial"></a>
-<h2 class="section1">Tutorial</h2>
-<a name="tut-basic"></a>
-<h3 class="section2">Basic Example</h3>
-<p>Here is a basic example of Erubis.
-</p>
-<a name="example1.eruby"></a>
-<div class="program_caption">
-example1.eruby</div>
-<pre class="program"><ul>
-  <strong><% for item in list %></strong>
-  <li><strong><%= item %></strong></li>
-  <strong><% end %></strong>
-  <strong><%# here is ignored because starting with '#' %></strong>
-</ul>
-</pre>
-<a name="example1.rb"></a>
-<div class="program_caption">
-example1.rb</div>
-<pre class="program">require 'erubis'
-input = File.read('example1.eruby')
-eruby = <strong>Erubis::Eruby.new(input)</strong>    # create Eruby object
-
-puts "---------- script source ---"
-puts <strong>eruby.src</strong>                      # print script source
-
-puts "---------- result ----------"
-list = ['aaa', 'bbb', 'ccc']
-puts <strong>eruby.result(binding())</strong>        # get result
-## or puts eruby.result(<strong>:list=>list</strong>)  # or pass Hash instead of Binding
-
-## # or
-## eruby = Erubis::Eruby.new
-## input = File.read('example1.eruby')
-## src = eruby.convert(input)
-## eval src
-</pre>
-<a name="example1.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby example1.rb
----------- script source ---
-_buf = ''; _buf << '<ul>
-';   for item in list 
- _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-';   end 
-
- _buf << '</ul>
-';
-_buf.to_s
----------- result ----------
-<ul>
-  <li>aaa</li>
-  <li>bbb</li>
-  <li>ccc</li>
-</ul>
-</pre>
-<p>Erubis has command 'erubis'.  Command-line option '-x' shows the compiled source code of eRuby script.
-</p>
-<a name="example1_x.result"></a>
-<div class="terminal_caption">
-example of command-line option '-x'</div>
-<pre class="terminal">$ erubis <strong>-x</strong> example1.eruby
-_buf = ''; _buf << '<ul>
-';   for item in list 
- _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-';   end 
-
- _buf << '</ul>
-';
-_buf.to_s
-</pre>
-<br>
-
-
-<a name="tut-trim"></a>
-<h3 class="section2">Trimming Spaces</h3>
-<p>Erubis deletes spaces around '<% %>' automatically, while it leaves spaces around '<%= %>'.
-</p>
-<a name="example2.eruby.comment_filter"></a>
-<div class="program_caption">
-example2.eruby</div>
-<pre class="program"><ul>
-  <% for item in list %>      # trimmed
-  <li>
-    <%= item %>               # not trimmed
-  </li>
-  <% end %>                   # trimmed
-</ul>
-</pre>
-<a name="example2_x.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -x example2.eruby
-_buf = ''; _buf << '<ul>
-';   for item in list 
- _buf << '  <li>
-    '; _buf << ( item ).to_s; _buf << '
-'; _buf << '  </li>
-';   end 
- _buf << '</ul>
-';
-_buf.to_s
-</pre>
-<p>If you want leave spaces around '<% %>', add command-line property '--trim=false'.
-</p>
-<a name="example2_trim.result"></a>
-<div class="terminal_caption">
-compiled source code with command-line property '--trim=false'</div>
-<pre class="terminal">$ erubis -x <strong>--trim=false</strong> example2.eruby
-_buf = ''; _buf << '<ul>
-'; _buf << '  '; for item in list ; _buf << '
-'; _buf << '  <li>
-    '; _buf << ( item ).to_s; _buf << '
-'; _buf << '  </li>
-'; _buf << '  '; end ; _buf << '
-'; _buf << '</ul>
-';
-_buf.to_s
-</pre>
-<p>Or add option <code>:trim=>false</code> to Erubis::Eruby.new().
-</p>
-<a name="example2.rb"></a>
-<div class="program_caption">
-example2.rb</div>
-<pre class="program">require 'erubis'
-input = File.read('example2.eruby')
-eruby = Erubis::Eruby.new(input<strong>, :trim=>false</strong>)
-
-puts "----- script source ---"
-puts eruby.src                            # print script source
-
-puts "----- result ----------"
-list = ['aaa', 'bbb', 'ccc']
-puts eruby.result(binding())              # get result
-</pre>
-<a name="example2.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby example2.rb
------ script source ---
-_buf = ''; _buf << '<ul>
-'; <strong>_buf << '  ';</strong> for item in list ; _buf << '
-'; _buf << '  <li>
-    '; _buf << ( item ).to_s; _buf << '
-'; _buf << '  </li>
-'; <strong>_buf << '  ';</strong> end ; _buf << '
-'; _buf << '</ul>
-';
-_buf.to_s
------ result ----------
-<ul>
-  
-  <li>
-    aaa
-  </li>
-  
-  <li>
-    bbb
-  </li>
-  
-  <li>
-    ccc
-  </li>
-  
-</ul>
-</pre>
-<br>
-
-
-<a name="tut-escape"></a>
-<h3 class="section2">Escape</h3>
-<p>Erubis has ability to escape (sanitize) expression.
-Erubis::Eruby class act as the following:
-</p>
-<ul type="disc">
-<li><code><%= <em>expr</em> %></code> -  not escaped.
-</li>
-<li><code><%== <em>expr</em> %></code> - escaped.
-</li>
-<li><code><%=== <em>expr</em> %></code> - out to $stderr.
-</li>
-<li><code><%==== <em>expr</em> %></code> - ignored.
-</li>
-</ul>
-<p>Erubis::EscapedEruby<sup>(<a href="#fnref:1" name="fnlink:1">*1</a>)</sup> class handle '<%= %>' as escaped and '<%== %>' as not escaped.
-It means that using Erubis::EscapedEruby you can escape expression by default.
-Also Erubis::XmlEruby class (which is equivalent to Erubis::EscapedEruby) is provided for compatibility with Erubis 1.1.
-</p>
-<a name="example3.eruby"></a>
-<div class="program_caption">
-example3.eruby</div>
-<pre class="program"><% for item in list %>
-  <p><strong><%=</strong> item <strong>%></strong></p>
-  <p><strong><%==</strong> item <strong>%></strong></p>
-  <p><strong><%===</strong> item <strong>%></strong></p>
-
-<% end %>
-</pre>
-<a name="example3.rb"></a>
-<div class="program_caption">
-example3.rb</div>
-<pre class="program">require 'erubis'
-input = File.read('example3.eruby')
-eruby = Erubis::<strong>EscapedEruby</strong>.new(input)    # or Erubis::XmlEruby
-
-puts "----- script source ---"
-puts eruby.src                             # print script source
-
-puts "----- result ----------"
-<strong>list = ['<aaa>', 'b&b', '"ccc"']</strong>
-puts eruby.result(binding())               # get result
-</pre>
-<a name="example3.result.split_filter"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby example3.rb 2> stderr.log
------ script source ---
-_buf = ''; for item in list 
- _buf << '  <p>'; <strong>_buf << Erubis::XmlHelper.escape_xml( item )</strong>; _buf << '</p>
-  <p>'; <strong>_buf << ( item ).to_s</strong>; _buf << '</p>
-  <p>'; <strong>$stderr.puts("*** debug: item=#{(item).inspect}")</strong>; _buf << '</p>
-
-'; end 
-_buf.to_s
------ result ----------
-  <p><strong>&lt;aaa&gt;</strong></p>
-  <p><aaa></p>
-  <p></p>
-
-  <p><strong>b&amp;b</strong></p>
-  <p>b&b</p>
-  <p></p>
-
-  <p><strong>&quot;ccc&quot;</strong></p>
-  <p>"ccc"</p>
-  <p></p>
-
-$ cat stderr.log
-*** debug: item="<aaa>"
-*** debug: item="b&b"
-*** debug: item="\"ccc\""
-</pre>
-<p>The command-line option '-e' will do the same action as Erubis::EscapedEruby.
-This option is available for any language.
-</p>
-<a name="example3_e.result"></a>
-<pre class="terminal">$ erubis -l ruby <strong>-e</strong> example3.eruby
-_buf = ''; for item in list 
- _buf << '  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; $stderr.puts("*** debug: item=#{(item).inspect}"); _buf << '</p>
-
-'; end 
-_buf.to_s
-</pre>
-<p>Escaping function (default 'Erubis::XmlHelper.escape_xml()') can be changed by command-line property '--escapefunc=xxx' or by overriding Erubis::Eruby#escaped_expr() in subclass.
-</p>
-<div class="program_caption">
-example to override Erubis::Eruby#escaped_expr()</div>
-<pre class="program">class CGIEruby < Erubis::Eruby
-  def <strong>escaped_expr(code)</strong>
-    return "CGI.escapeHTML((#{code.strip}).to_s)"
-    #return "h(#{code.strip})"
-  end
-end
-
-class LatexEruby < Erubi::Eruby
-  def <strong>escaped_expr(code)</strong>
-    return "(#{code}).gsub(/[%\\]/,'\\\\\&')"
-  end
-end
-</pre>
-<div class="footnote">
- <dl compact>
-  <dt>(<a name="fnref:1" href="#fnlink:1">*1</a>)</dt>
-  <dd>Erubis::EscapedEruby class includes Erubis::EscapeEnhancer which swtches the action of '<%= %>' and '<%== %>'.</dd>
- </dl>
-</div>
-<br>
-
-
-<a name="tut-pattern"></a>
-<h3 class="section2">Embedded Pattern</h3>
-<p>You can change embedded pattern '<code><% %></code>' to another by command-line option '-p' or option '<code>:pattern=>...</code>' of Erubis::Eruby.new().
-</p>
-<a name="example4.eruby"></a>
-<div class="program_caption">
-example4.eruby</div>
-<pre class="program"><strong><!--%</strong> for item in list <strong>%--></strong>
-  <p><strong><!--%=</strong> item <strong>%--></strong></p>
-<strong><!--%</strong> end <strong>%--></strong>
-</pre>
-<a name="example4_x.result"></a>
-<div class="terminal_caption">
-compiled source code with command-line option '-p'</div>
-<pre class="terminal">$ erubis -x <strong>-p '<!--% %-->'</strong> example4.eruby
-_buf = ''; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-'; end 
-_buf.to_s
-</pre>
-<a name="example4.rb"></a>
-<div class="program_caption">
-example4.rb</div>
-<pre class="program">require 'erubis'
-input = File.read('example4.eruby')
-eruby = Erubis::Eruby.new(input<strong>, :pattern=>'<!--% %-->'</strong>)
-                                      # or '<(?:!--)?% %(?:--)?>'
-
-puts "---------- script source ---"
-puts eruby.src                            # print script source
-
-puts "---------- result ----------"
-list = ['aaa', 'bbb', 'ccc']
-puts eruby.result(binding())              # get result
-</pre>
-<a name="example4.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby example4.rb
----------- script source ---
-_buf = ''; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-'; end 
-_buf.to_s
----------- result ----------
-  <p>aaa</p>
-  <p>bbb</p>
-  <p>ccc</p>
-</pre>
-<p>It is able to specify regular expression with :pattern option.
-Notice that you must use '<code>(?: )</code>' instead of '<code>( )</code>' for grouping.
-For example, '<code><(!--)?% %(--)?></code>' will not work while '<code><(?:!--)?% %(?:--)?></code>' will work.
-</p>
-<br>
-
-
-<a name="tut-context"></a>
-<h3 class="section2">Context Object</h3>
-<p>Context object is a set of data which are used in eRuby script.
-Using context object makes clear which data to be used.
-In Erubis, Hash object and Erubis::Context object are available as context object.
-</p>
-<p>Context data can be accessible via instance variables in eRuby script.
-</p>
-<a name="example5.eruby"></a>
-<div class="program_caption">
-example5.eruby</div>
-<pre class="program"><span><%= <strong>@val</strong> %></span>
-<ul>
- <% for item in <strong>@list</strong> %>
-  <li><%= item %></li>
- <% end %>
-</ul>
-</pre>
-<a name="example5.rb"></a>
-<div class="program_caption">
-example5.rb</div>
-<pre class="program">require 'erubis'
-input = File.read('example5.eruby')
-eruby = Erubis::Eruby.new(input)      # create Eruby object
-
-## create context object
-## (key means var name, which may be string or symbol.)
-<strong>context = {
-  :val   => 'Erubis Example',
-  'list' => ['aaa', 'bbb', 'ccc'],
-}</strong>
-## or
-# context = Erubis::Context.new()
-# context['val'] = 'Erubis Example'
-# context[:list] = ['aaa', 'bbb', 'ccc'],
-
-puts <strong>eruby.evaluate(context)</strong>         # get result
-</pre>
-<a name="example5.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby example5.rb
-<span>Erubis Example</span>
-<ul>
-  <li>aaa</li>
-  <li>bbb</li>
-  <li>ccc</li>
-</ul>
-</pre>
-<p>The difference between Erubis#result(binding) and Erubis#evaluate(context) is that the former invokes 'eval @src, binding' and the latter invokes 'context.instance_eval @src'.
-This means that data is passed into eRuby script via local variables when Eruby::binding() is called, or passed via instance variables when Eruby::evaluate() is called.
-</p>
-<p>Here is the definition of Erubis#result() and Erubis#evaluate().
-</p>
-<div class="program_caption">
-definition of result(binding) and evaluate(context)</div>
-<pre class="program">def result(_binding=TOPLEVEL_BINDING)
-  if _binding.is_a?(Hash)
-    # load hash data as local variable
-    _h = _binding
-    _binding = binding()
-    eval _h.collect{|k,v| "#{k} = _h[#{k.inspect}];"}.join, _binding
-  end
-  return <strong>eval(@src, _binding)</strong>
-end
-
-def evaluate(_context=Erubis::Context.new)
-  if _context.is_a?(Hash)
-    # convert hash object to Context object
-    _hash = _context
-    _context = Erubis::Context.new
-    _hash.each {|k, v| _context[k] = v }
-  end
-  return <strong>_context.instance_eval(@src)</strong>
-end
-</pre>
-<p>instance_eval() is defined at Object class so it is able to use any object as a context object as well as Hash or Erubis::Context.
-</p>
-<a name="example6.rb"></a>
-<div class="program_caption">
-example6.rb</div>
-<pre class="program">class MyData
-  attr_accessor :val, :list
-end
-
-## any object can be a context object
-<strong>mydata = MyData.new</strong>
-<strong>mydata.val = 'Erubis Example'</strong>
-<strong>mydata.list = ['aaa', 'bbb', 'ccc']</strong>
-
-require 'erubis'
-eruby = Erubis::Eruby.new(File.read('example5.eruby'))
-puts eruby.evaluate(<strong>mydata</strong>)
-</pre>
-<a name="example6.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby example6.rb
-<span>Erubis Example</span>
-<ul>
-  <li>aaa</li>
-  <li>bbb</li>
-  <li>ccc</li>
-</ul>
-</pre>
-<p>It is recommended to use 'Erubis::Eruby#evaluate(context)' rather than 'Erubis::Eruby#result(binding())' because the latter has some problems.
-See <a href="#topics-context-vs-binding">evaluate(context) v.s. result(binding)</a> section for details.
-</p>
-<br>
-
-
-<a name="tut-datafile"></a>
-<h3 class="section2">Context Data File</h3>
-<p>Command-line option '-f' specifies context data file.
-Erubis load context data file and use it as context data.
-Context data file can be YAML file ('*.yaml' or '*.yml') or Ruby script ('*.rb').
-</p>
-<a name="example7.eruby"></a>
-<div class="program_caption">
-example7.eruby</div>
-<pre class="program"><h1><%= <strong>@title</strong> %></h1>
-<ul>
- <% for user in <strong>@users</strong> %>
-  <li>
-    <a href="mailto:<%= user['mail']%>"><%= user['name'] %></a>
-  </li>
- <% end %>
-</ul>
-</pre>
-<a name="context.yaml"></a>
-<div class="program_caption">
-context.yaml</div>
-<pre class="program"><strong>title:</strong> Users List
-<strong>users:</strong>
-  - name:  foo
-    mail:  foo at mail.com
-  - name:  bar
-    mail:  bar at mail.net
-  - name:  baz
-    mail:  baz at mail.org
-</pre>
-<a name="context.rb"></a>
-<div class="program_caption">
-context.rb</div>
-<pre class="program">@title = 'Users List'
- at users = [
-   { 'name'=>'foo', 'mail'=>'foo at mail.com' },
-   { 'name'=>'bar', 'mail'=>'bar at mail.net' },
-   { 'name'=>'baz', 'mail'=>'baz at mail.org' },
-]
-</pre>
-<a name="example7.result.split_filter"></a>
-<div class="terminal_caption">
-example of command-line option '-f'</div>
-<pre class="terminal">$ erubis <strong>-f context.yaml</strong> example7.eruby
-<h1>Users List</h1>
-<ul>
-  <li>
-    <a href="mailto:foo at mail.com">foo</a>
-  </li>
-  <li>
-    <a href="mailto:bar at mail.net">bar</a>
-  </li>
-  <li>
-    <a href="mailto:baz at mail.org">baz</a>
-  </li>
-</ul>
-$ erubis <strong>-f context.rb</strong> example7.eruby
-<h1>Users List</h1>
-<ul>
-  <li>
-    <a href="mailto:foo at mail.com">foo</a>
-  </li>
-  <li>
-    <a href="mailto:bar at mail.net">bar</a>
-  </li>
-  <li>
-    <a href="mailto:baz at mail.org">baz</a>
-  </li>
-</ul>
-</pre>
-<p>Command-line option '-S' converts keys of mapping in YAML data file from string into symbol.
-Command-line option '-B' invokes 'Erubis::Eruby#result(binding())' instead of 'Erubis::Eruby#evaluate(context)'.
-</p>
-<br>
-
-
-<a name="tut-datastr"></a>
-<h3 class="section2">Context Data String</h3>
-<p>Command-line option '-c <em>str</em>' enables you to specify context data in command-line.
-<em>str</em> can be YAML flow-style or Ruby code.
-</p>
-<a name="example8.eruby"></a>
-<div class="program_caption">
-example8.eruby</div>
-<pre class="program"><h1><%= @title %></h1>
-<ul>
-<% for item in @list %>
- <li><%= item %></li>
-<% end %>
-</ul>
-</pre>
-<a name="example8_yaml.result"></a>
-<div class="terminal_caption">
-example of YAML flow style</div>
-<pre class="terminal">$ erubis <strong>-c '{title: Example, list: [AAA, BBB, CCC]}'</strong> example8.eruby
-<h1>Example</h1>
-<ul>
- <li>AAA</li>
- <li>BBB</li>
- <li>CCC</li>
-</ul>
-</pre>
-<a name="example8_ruby.result"></a>
-<div class="terminal_caption">
-example of Ruby code</div>
-<pre class="terminal">$ erubis <strong>-c '@title="Example"; @list=%w[AAA BBB CCC]'</strong> example8.eruby
-<h1>Example</h1>
-<ul>
- <li>AAA</li>
- <li>BBB</li>
- <li>CCC</li>
-</ul>
-</pre>
-<br>
-
-
-<a name="tut-preamble"></a>
-<h3 class="section2">Preamble and Postamble</h3>
-<p>The first line ('_buf = '';') in the compiled source code is called preamble
-and the last line ('_buf.to_s') is called postamble.
-</p>
-<p>Command-line option '-b' skips the output of preamble and postamble.
-</p>
-<a name="example9.eruby"></a>
-<div class="program_caption">
-example9.eruby</div>
-<pre class="program"><% for item in @list %>
- <b><%= item %></b>
-<% end %>
-</pre>
-<a name="example9.result.split_filter"></a>
-<div class="terminal_caption">
-compiled source code with and without command-line option '-b'</div>
-<pre class="terminal">$ erubis -x example9.eruby
-<strong>_buf = '';</strong> for item in @list 
- _buf << ' <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
-<strong>_buf.to_s</strong>
-$ erubis -x <strong>-b</strong> example9.eruby
- for item in @list 
- _buf << ' <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
-</pre>
-<p>Erubis::Eruby.new option '<code>:preamble=>false</code>' and '<code>:postamble=>false</code>' also suppress output of preamble or postamle.
-</p>
-<a name="example9.rb"></a>
-<div class="program_caption">
-example9.rb</div>
-<pre class="program">require 'erubis'
-input = File.read('example9.eruby')
-eruby1 = Erubis::Eruby.new(input)
-eruby2 = Erubis::Eruby.new(input, <strong>:preamble=>false, :postamble=>false</strong>)
-
-puts eruby1.src   # print preamble and postamble
-puts "--------------"
-puts eruby2.src   # don't print preamble and postamble
-</pre>
-<a name="example9.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby example9.rb
-_buf = ''; for item in @list 
- _buf << ' <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
-_buf.to_s
---------------
- for item in @list 
- _buf << ' <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
-</pre>
-<br>
-
-
-<a name="tut-pi"></a>
-<h3 class="section2">Processing Instruction (PI) Converter</h3>
-<p>Erubis can parse Processing Instructions (PI) as embedded pattern.
-</p>
-<ul type="disc">
-<li>'<code><?rb <em>...</em> ?></code>' represents Ruby statement.
-</li>
-<li>'<code>@{<em>...</em>}@</code>' represents escaped expression value.
-</li>
-<li>'<code>@!{<em>...</em>}@</code>' represents normal expression value.
-</li>
-<li>'<code>@!!{<em>...</em>}@</code>' prints expression value to standard output.
-</li>
-<li>(experimental) '<code><%= <em>...</em> %></code>' is also available to print expression value.
-</li>
-</ul>
-<p>This is more useful than basic embedded pattern ('<code><% ... ></code>') because PI doesn't break XML or HTML at all.
-For example the following XHTML file is well-formed and HTML validator got no errors on this example.
-</p>
-<a name="example10.xhtml"></a>
-<div class="program_caption">
-example10.xhtml</div>
-<pre class="program"><?xml version="1.0" ?>
-<strong><?rb
-  lang = 'en'
-  list = ['<aaa>', 'b&b', '"ccc"']
-?></strong>
-<html lang="<strong>@!{lang}@</strong>">
- <body>
-  <ul>
-  <strong><?rb for item in list ?></strong>
-   <li><strong>@{item}@</strong></li>
-  <strong><?rb end ?></strong>
-  </ul>
- </body>
-</html>
-</pre>
-<p>If the command-line property '--pi=<em>name</em>' is specified, erubis command parses input with PI converter.
-If <em>name</em> is omitted then the following name is used according to '-l <em>lang</em>'.
-</p>
-<div align="center">
-<table class="table1" border="1" cellspacing="0">
- <tr class="tr1">
-  <th class="th1">'-l' option</th>
-  <th class="th1">PI name</th>
- </tr>
- <tr class="tr1">
-  <td class="td1">-l ruby</td>
-  <td class="td1"><?rb ... ?></td>
- </tr>
- <tr class="tr1">
-  <td class="td1">-l php</td>
-  <td class="td1"><?php ... ?></td>
- </tr>
- <tr class="tr1">
-  <td class="td1">-l perl</td>
-  <td class="td1"><?perl ... ?></td>
- </tr>
- <tr class="tr1">
-  <td class="td1">-l java</td>
-  <td class="td1"><?java ... ?></td>
- </tr>
- <tr class="tr1">
-  <td class="td1">-l javascript</td>
-  <td class="td1"><?js ... ?></td>
- </tr>
- <tr class="tr1">
-  <td class="td1">-l scheme</td>
-  <td class="td1"><?scheme ... ?></td>
- </tr>
-</table>
-</div>
-<a name="example10_x.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ erubis -x <strong>--pi</strong> example10.xhtml
-_buf = ''; _buf << '<?xml version="1.0" ?>
-';
-  lang = 'en'
-  list = ['<aaa>', 'b&b', '"ccc"']
-
- _buf << '<html lang="'; _buf << (lang).to_s; _buf << '">
- <body>
-  <ul>
-';   for item in list 
- _buf << '   <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
-';   end 
- _buf << '  </ul>
- </body>
-</html>
-';
-_buf.to_s
-</pre>
-<p>Expression character can be changeable by command-line property '--embchar=<em>char</em>. Default is '<code>@</code>'.
-</p>
-<p>Use Erubis::PI::Eruby instead of Erubis::Eruby if you want to use PI as embedded pattern.
-</p>
-<a name="example10.rb"></a>
-<div class="program_caption">
-example10.rb</div>
-<pre class="program">require 'erubis'
-input = File.read('example10.xhtml')
-eruby = Erubis::PI::Eruby.new(input)
-print eruby.src
-</pre>
-<a name="example10.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby example10.rb
-_buf = ''; _buf << '<?xml version="1.0" ?>
-';
-  lang = 'en'
-  list = ['<aaa>', 'b&b', '"ccc"']
-
- _buf << '<html lang="'; _buf << (lang).to_s; _buf << '">
- <body>
-  <ul>
-';   for item in list 
- _buf << '   <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
-';   end 
- _buf << '  </ul>
- </body>
-</html>
-';
-_buf.to_s
-</pre>
-<p><strong>(experimental)</strong> Erubis supports '<%= ... %>' pattern with PI pattern.
-</p>
-<div class="program_caption">
-example of Rails view template</div>
-<pre class="program"><table>
-  <tr>
-<?rb for item in @list ?>
-    <td>@{item.id}@</td>
-    <td>@{item.name}@</td>
-    <td>
-       <strong><%=</strong> link_to 'Destroy', {:action=>'destroy', :id=>item.id},
-                       :confirm=>'Are you OK?' <strong>%></strong>
-    </td>
-<?rb end ?>
-  </tr>
-</table>
-</pre>
-<br>
-
-
-<a name="tut-notext"></a>
-<h3 class="section2">Retrieve Ruby Code</h3>
-<p>Similar to '-x', ommand-line option '-X' shows converted Ruby source code.
-The difference between '-x' and 'X' is that the former converts text part but the latter ignores it.
-It means that you can retrieve Ruby code from eRuby script by '-X' option.
-</p>
-<p>For example, see the following eRuby script.
-This is some complex, so it is difficult to grasp the program code.
-</p>
-<a name="example11.rhtml"></a>
-<div class="program_caption">
-example11.rhtml</div>
-<pre class="program"><?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <body>
-    <h3>List</h3>
-    <% if @list.nil? || @list.empty? %>
-    <p>not found.</p>
-    <% else %>
-    <table>
-      <tbody>
-        <% @list.each_with_index do |item, i| %>
-        <tr bgcolor="<%= i % 2 == 0 ? '#FCC' : '#CCF' %>">
-          <td><%= item %></td>
-        </tr>
-        <% end %>
-      </tbody>
-    </table>
-    <% end %>
-  </body>
-</html>
-</pre>
-<p>Command-line option '-X' extracts only the ruby code from eRuby script.
-</p>
-<a name="example11.result"></a>
-<div class="terminal_caption">
-result</div>
-<pre class="terminal">$ erubis <strong>-X</strong> example11.rhtml
-_buf = '';
-
-
-
-
-
-     if @list.nil? || @list.empty? 
-
-     else 
-
-
-         @list.each_with_index do |item, i| 
-                      _buf << ( i % 2 == 0 ? '#FCC' : '#CCF' ).to_s;
-               _buf << ( item ).to_s;
-
-         end 
-
-
-     end 
-
-
-_buf.to_s
-</pre>
-<p>Command-line option '-C' (<strong>c</strong>mpact) deletes empty lines.
-</p>
-<a name="example11_C.result"></a>
-<div class="terminal_caption">
-result</div>
-<pre class="terminal">$ erubis <strong>-XC</strong> example11.rhtml
-_buf = '';
-     if @list.nil? || @list.empty? 
-     else 
-         @list.each_with_index do |item, i| 
-                      _buf << ( i % 2 == 0 ? '#FCC' : '#CCF' ).to_s;
-               _buf << ( item ).to_s;
-         end 
-     end 
-_buf.to_s
-</pre>
-<p>Option '-U' (<strong>u</strong>nique) converts empty lines into a line.
-</p>
-<a name="example11_U.result"></a>
-<div class="terminal_caption">
-result</div>
-<pre class="terminal">$ erubis <strong>-XU</strong> example11.rhtml
-_buf = '';
-
-     if @list.nil? || @list.empty? 
-
-     else 
-
-         @list.each_with_index do |item, i| 
-                      _buf << ( i % 2 == 0 ? '#FCC' : '#CCF' ).to_s;
-               _buf << ( item ).to_s;
-
-         end 
-
-     end 
-
-_buf.to_s
-</pre>
-<p>Option '-N' (<strong>n</strong>umber) adds line number.
-It is available with '-C' or '-U'.
-</p>
-<a name="example11_N.result"></a>
-<div class="terminal_caption">
-result</div>
-<pre class="terminal">$ erubis <strong>-XNU</strong> example11.rhtml
-    1:  _buf = '';
-
-    7:       if @list.nil? || @list.empty? 
-
-    9:       else 
-
-   12:           @list.each_with_index do |item, i| 
-   13:                        _buf << ( i % 2 == 0 ? '#FCC' : '#CCF' ).to_s;
-   14:                 _buf << ( item ).to_s;
-
-   16:           end 
-
-   19:       end 
-
-   22:  _buf.to_s
-</pre>
-<p>Command-line option '-X' is available with PHP script.
-</p>
-<a name="example11.php"></a>
-<div class="program_caption">
-example11.php</div>
-<pre class="program"><?xml version="1.0"?>
-<html>
-  <body>
-    <h3>List</h3>
-    <?php if (!$list) { ?>
-    <p>not found.</p>
-    <?php } else { ?>
-    <table>
-      <tbody>
-        <?php $i = 0; ?>
-        <?php foreach ($list as $item) { ?>
-        <tr bgcolor="<?php echo ++$i % 2 == 1 ? '#FCC' : '#CCF'; ?>">
-          <td><?php echo $item; ?></td>
-        </tr>
-        <?php } ?>
-      </tbody>
-    </table>
-    <?php } ?>
-  </body>
-</html>
-</pre>
-<a name="example11_php.result"></a>
-<div class="terminal_caption">
-result</div>
-<pre class="terminal">$ erubis -XNU <strong>-l php</strong> <strong>--pi=php</strong> --trim=false example11.php
-
-    5:      <?php if (!$list) { ?>
-
-    7:      <?php } else { ?>
-
-   10:          <?php $i = 0; ?>
-   11:          <?php foreach ($list as $item) { ?>
-   12:                       <?php echo ++$i % 2 == 1 ? '#FCC' : '#CCF'; ?>
-   13:                <?php echo $item; ?>
-
-   15:          <?php } ?>
-
-   18:      <?php } ?>
-
-</pre>
-<br>
-
-
-<br>
-
-
-<a name="enhancer"></a>
-<h2 class="section1">Enhancer</h2>
-<p>Enhancer is a module to add a certain feature into Erubis::Eruby class.
-Enhancer may be language-independent or only for Erubis::Eruby class.
-</p>
-<p>To use enhancers, define subclass and include them.
-The folloing is an example to use <a href="#escape-enhancer">EscapeEnhancer</a>, <a href="#percentline-enhancer">PercentLineEnhancer</a>, and <a href="#bipattern-enhancer">BiPatternEnhancer</a>.
-</p>
-<pre class="program">class MyEruby < Erubis::Eruby
-  include EscapeEnhancer
-  include PercentLineEnhancer
-  include BiPatternEnhancer
-end
-</pre>
-<p>You can specify enhancers in command-line with option '-E'.
-The following is an example to use some enhancers in command-line.
-</p>
-<pre class="terminal">$ erubis -xE Escape,PercentLine,BiPattern example.eruby
-</pre>
-<p>The following is the list of enhancers.
-</p>
-<dl class="dl1">
-<dt class="dt1">
-<a href="#escape-enhancer">EscapeEnhander</a> (language-independent)</dt>
-<dd class="dd1">
-	Switch '<%= %>' to escaped and '<%== %>' to unescaped.
-</dd>
-<dt class="dt1">
-<a href="#stdout-enhancer">StdoutEnhancer</a> (only for Eruby)</dt>
-<dd class="dd1">
-	Use $stdout instead of array buffer.
-</dd>
-<dt class="dt1">
-<a href="#printout-enhancer">PrintOutEnhancer</a> (only for Eruby)</dt>
-<dd class="dd1">
-	Use "print(...)" statement insead of "_buf << ...".
-</dd>
-<dt class="dt1">
-<a href="#printenabled-enhancer">PrintEnabledEnhancer</a> (only for Eruby)</dt>
-<dd class="dd1">
-	Enable to use print() in '<% ... %>'.
-</dd>
-<dt class="dt1">
-<a href="#array-enhancer">ArrayEnhancer</a> (only for Eruby)</dt>
-<dd class="dd1">
-	Return array of string instead of returning string.
-</dd>
-<dt class="dt1">
-<a href="#arraybuffer-enhancer">ArrayBufferEnhancer</a> (only for Eruby)</dt>
-<dd class="dd1">
-	Use array buffer. It is a little slower than StringBufferEnhancer.
-</dd>
-<dt class="dt1">
-<a href="#stringbuffer-enhancer">StringBufferEnhancer</a> (only for Eruby)</dt>
-<dd class="dd1">
-	Use string buffer. This is included in Erubis::Eruby by default.
-</dd>
-<dt class="dt1">
-<a href="#erbout-enhancer">ErboutEnhancer</a> (only for Eruby)</dt>
-<dd class="dd1">
-	Set '_erbout = _buf = "";' to be compatible with ERB.
-</dd>
-<dt class="dt1">
-<a href="#notext-enhancer">NoTextEnhancer</a> (language-independent)</dt>
-<dd class="dd1">
-	Print embedded code only and ignore normal text.
-</dd>
-<dt class="dt1">
-<a href="#nocode-enhancer">NoCodeEnhancer</a> (language-independent)</dt>
-<dd class="dd1">
-	Print normal text only and ignore code.
-</dd>
-<dt class="dt1">
-<a href="#simplify-enhancer">SimplifyEnhancer</a> (language-independent)</dt>
-<dd class="dd1">
-	Make compile faster but don't trim spaces around '<% %>'.
-</dd>
-<dt class="dt1">
-<a href="#bipattern-enhancer">BiPatternEnhancer</a> (language-independent)</dt>
-<dd class="dd1">
-	[experimental] Enable to use another embedded pattern with '<% %>'.
-</dd>
-<dt class="dt1">
-<a href="#percentline-enhancer">PercentLineEnhancer</a> (language-independent)</dt>
-<dd class="dd1">
-	Regard lines starting with '%' as Ruby code. This is for compatibility with eruby and ERB.
-</dd>
-<dt class="dt1">
-<a href="#headerfooter-enhancer">HeaderFooterEnhancer</a> (language-independent)</dt>
-<dd class="dd1">
-	[experimental] Enable you to add header and footer in eRuby script.
-</dd>
-<dt class="dt1">
-<a href="#interpolation-enhancer">InterpolationEnhancer</a> (only for Eruby)</dt>
-<dd class="dd1">
-	[experimental] convert '<p><%= text %></p>' into '_buf << %Q`<p>#{text}</p>`'.
-</dd>
-<dt class="dt1">
-<a href="#deleteindent-enhancer">DeleteIndentEnhancer</a> (language-independent)</dt>
-<dd class="dd1">
-	[experimental] delete indentation of HTML file and eliminate page size.
-</dd>
-</dl>
-<p>If you required 'erubis/engine/enhanced', Eruby subclasses which include each enhancers are defined.
-For example, class BiPatternEruby includes BiPatternEnhancer.
-</p>
-<a name="escape-enhancer"></a>
-<h3 class="section2">EscapeEnhancer</h3>
-<p>EscapeEnhancer switches '<%= ... %>' to escaped and '<%== ... %>' to unescaped.
-</p>
-<a name="example.eruby"></a>
-<div class="program_caption">
-example.eruby</div>
-<pre class="program"><div>
-<% for item in list %>
-  <p><%= item %></p>
-  <p><%== item %></p>
-<% end %>
-</div>
-</pre>
-<a name="escape_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE Escape example.eruby
-_buf = ''; _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; <strong>_buf << Erubis::XmlHelper.escape_xml( item );</strong> _buf << '</p>
-  <p>'; <strong>_buf << ( item ).to_s;</strong> _buf << '</p>
-'; end 
- _buf << '</div>
-';
-_buf.to_s
-</pre>
-<p>EscapeEnhancer is language-independent.
-</p>
-<br>
-
-
-<a name="stdout-enhancer"></a>
-<h3 class="section2">StdoutEnhancer</h3>
-<p>StdoutEnhancer use $sdtdout instead of array buffer.
-Therefore, you can use 'print' statement in embedded ruby code.
-</p>
-<a name="stdout_exmple.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE Stdout example.eruby
-<strong>_buf = $stdout;</strong> _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-<strong>''</strong>
-</pre>
-<p>StdoutEnhancer is only for Eruby.
-</p>
-<br>
-
-
-<a name="printout-enhancer"></a>
-<h3 class="section2">PrintOutEnhancer</h3>
-<p>PrintOutEnhancer makes compiled source code to use 'print(...)' instead of '_buf << ...'.
-</p>
-<a name="printstatement_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE PrintOut example.eruby
- <strong>print</strong> '<div>
-'; for item in list 
- <strong>print</strong> '  <p>'; <strong>print</strong>(( item ).to_s); <strong>print</strong> '</p>
-  <p>'; <strong>print</strong> Erubis::XmlHelper.escape_xml( item ); <strong>print</strong> '</p>
-'; end 
- <strong>print</strong> '</div>
-';
-</pre>
-<p>PrintOutEnhancer is only for Eruby.
-</p>
-<br>
-
-
-<a name="printenabled-enhancer"></a>
-<h3 class="section2">PrintEnabledEnhancer</h3>
-<p>PrintEnabledEnhancer enables you to use print() method in '<% ... %>'.
-</p>
-<a name="printenabled-example.eruby"></a>
-<div class="program_caption">
-printenabled-example.eruby</div>
-<pre class="program"><% for item in @list %>
-  <b><strong><% print item %></strong></b>
-<% end %>
-</pre>
-<a name="printenabled-example.rb"></a>
-<div class="program_caption">
-printenabled-example.rb</div>
-<pre class="program">require 'erubis'
-class PrintEnabledEruby < Erubis::Eruby
-  include Erubis::PrintEnabledEnhancer
-end
-input = File.read('printenabled-example.eruby')
-eruby = PrintEnabledEruby.new(input)
-list = ['aaa', 'bbb', 'ccc']
-print eruby.evaluate(:list=>list)
-</pre>
-<a name="printenable_example.result"></a>
-<div class="terminal_caption">
-output result</div>
-<pre class="terminal">$ ruby printenabled-example.rb
-  <b>aaa</b>
-  <b>bbb</b>
-  <b>ccc</b>
-</pre>
-<p>Notice to use Eruby#evaluate() and not to use Eruby#result(),
-because print() method in '<% ... %>' invokes not Kernel#print() but PrintEnabledEnhancer#print().
-</p>
-<p>PrintEnabledEnhancer is only for Eruby.
-</p>
-<br>
-
-
-<a name="array-enhancer"></a>
-<h3 class="section2">ArrayEnhancer</h3>
-<p>ArrayEnhancer makes Eruby to return an array of strings.
-</p>
-<a name="array_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE Array example.eruby
-<strong>_buf = [];</strong> _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-<strong>_buf</strong>
-</pre>
-<p>ArrayEnhancer is only for Eruby.
-</p>
-<br>
-
-
-<a name="arraybuffer-enhancer"></a>
-<h3 class="section2">ArrayBufferEnhancer</h3>
-<p>ArrayBufferEnhancer makes Eruby to use array buffer.
-Array buffer is a litte slower than String buffer.
-</p>
-<p>ArrayBufferEnhancer is only for Eruby.
-</p>
-<a name="arraybuffer_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE ArrayBuffer example.eruby
-<strong>_buf = [];</strong> _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-<strong>_buf.join</strong>
-</pre>
-<br>
-
-
-<a name="stringbuffer-enhancer"></a>
-<h3 class="section2">StringBufferEnhancer</h3>
-<p>StringBufferEnhancer makes Eruby to use string buffer.
-String buffer is a little faster than array buffer.
-Erubis::Eruby includes this enhancer by default.
-</p>
-<a name="stringbuffer_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE StringBuffer example.eruby
-<strong>_buf = '';</strong> _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-<strong>_buf.to_s</strong>
-</pre>
-<p>StringBufferEnhancer is only for Eruby.
-</p>
-<br>
-
-
-<a name="erbout-enhancer"></a>
-<h3 class="section2">ErboutEnhancer</h3>
-<p>ErboutEnhancer makes Eruby to be compatible with ERB.
-This is useful especially for Ruby on Rails.
-</p>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE Erbout example.eruby
-<strong>_erbout = _buf = '';</strong> _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-_buf.to_s
-</pre>
-<p>ErboutEnhancer is only for Eruby.
-</p>
-<br>
-
-
-<a name="notext-enhancer"></a>
-<h3 class="section2">NoTextEnhancer</h3>
-<p>NoTextEnhancer suppress output of text and prints only embedded code.
-This is useful especially when debugging a complex eRuby script.
-</p>
-<a name="notext-example.eruby"></a>
-<div class="program_caption">
-notext-example.eruby</div>
-<pre class="program"><h3>List</h3>
-<% if !@list || @list.empty? %>
-<p>not found.</p>
-<% else %>
-<table>
-  <tbody>
-    <% @list.each_with_index do |item, i| %>
-    <tr bgcolor="<%= i%2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-      <td><%= item %></td>
-    </tr>
-    <% end %>
-  </tbody>
-</table>
-<% end %>
-</pre>
-<a name="notext_example.result"></a>
-<div class="terminal_caption">
-output example of NoTextEnhancer</div>
-<pre class="terminal">$ erubis -xE NoText notext-example.eruby
-_buf = '';
- if !@list || @list.empty? 
-
- else 
-
-
-     @list.each_with_index do |item, i| 
-                  _buf << ( i%2 == 0 ? '#FFCCCC' : '#CCCCFF' ).to_s;
-           _buf << ( item ).to_s;
-
-     end 
-
-
- end 
-_buf.to_s
-</pre>
-<p>NoTextEnhancer is language-independent. It is useful even if you are PHP user, see <a href="#topics-php">this section</a>.
-</p>
-<br>
-
-
-<a name="nocode-enhancer"></a>
-<h3 class="section2">NoCodeEnhancer</h3>
-<p>NoCodeEnhancer suppress output of embedded code and prints only normal text.
-This is useful especially when validating HTML tags.
-</p>
-<a name="nocode-example.eruby"></a>
-<div class="program_caption">
-nocode-example.eruby</div>
-<pre class="program"><h3>List</h3>
-<% if !@list || @list.empty? %>
-<p>not found.</p>
-<% else %>
-<table>
-  <tbody>
-    <% @list.each_with_index do |item, i| %>
-    <tr bgcolor="<%= i%2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-      <td><%= item %></td>
-    </tr>
-    <% end %>
-  </tbody>
-</table>
-<% end %>
-</pre>
-<a name="nocode_example.result"></a>
-<div class="terminal_caption">
-output example of NoCodeEnhancer</div>
-<pre class="terminal">$ erubis -xE NoCode notext-example.eruby
-<h3>List</h3>
-
-<p>not found.</p>
-
-<table>
-  <tbody>
-
-    <tr bgcolor="">
-      <td></td>
-    </tr>
-
-  </tbody>
-</table>
-
-</pre>
-<p>NoCodeEnhancer is language-independent. It is useful even if you are PHP user, see <a href="#topics-php">this section</a>.
-</p>
-<br>
-
-
-<a name="simplify-enhancer"></a>
-<h3 class="section2">SimplifyEnhancer</h3>
-<p>SimplifyEnhancer makes compiling a little faster but don't trim spaces around '<% %>'.
-</p>
-<a name="simplify_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE Simplify example.eruby
-_buf = ''; _buf << '<div>
-'; for item in list ; _buf << '
-  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end ; _buf << '
-</div>
-';
-_buf.to_s
-</pre>
-<p>SimplifyEnhancer is language-independent.
-</p>
-<br>
-
-
-<a name="bipattern-enhancer"></a>
-<h3 class="section2">BiPatternEnhancer</h3>
-<p>BiPatternEnhancer enables to use another embedded pattern with '<% %>'.
-By Default, '[= ... =]' is available for expression.
-You can specify pattern by :bipattern property.
-</p>
-<a name="bipattern-example.rhtml"></a>
-<div class="program_caption">
-bipattern-example.rhtml</div>
-<pre class="program"><% for item in list %>
-  <b><strong>[= item =]</strong></b>
-  <b><strong>[== item =]</strong></b>
-<% end %>
-</pre>
-<a name="bipattern_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE BiPattern bipattern-example.rhtml
-_buf = ''; for item in list 
- _buf << '  <b>'; <strong>_buf << ( item ).to_s;</strong> _buf << '</b>
-  <b>'; <strong>_buf << Erubis::XmlHelper.escape_xml( item );</strong> _buf << '</b>
-'; end 
-_buf.to_s
-</pre>
-<p>BiPatternEnhancer is language-independent.
-</p>
-<br>
-
-
-<a name="percentline-enhancer"></a>
-<h3 class="section2">PercentLineEnhancer</h3>
-<p>PercentLineEnhancer regards lines starting with '%' as Ruby code.
-This is for compatibility with eruby and ERB.
-</p>
-<a name="percentline-example.rhtml"></a>
-<div class="program_caption">
-percentline-example.rhtml</div>
-<pre class="program"><strong>% for item in list</strong>
-  <b><%= item %></b>
-<strong>% end</strong>
-%% lines with '%%'
-</pre>
-<a name="percentline_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE PercentLine percentline-example.rhtml
-_buf = ''; <strong>for item in list</strong>
- _buf << '  <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; <strong>end</strong>
- _buf << '% lines with \'%%\'
-';
-_buf.to_s
-</pre>
-<p>PercentLineEnhancer is language-independent.
-</p>
-<br>
-
-
-<a name="headerfooter-enhancer"></a>
-<h3 class="section2">HeaderFooterEnhancer</h3>
-<p>[experimental]
-</p>
-<p>HeaderFooterEnhancer enables you to add header and footer in eRuby script.
-</p>
-<a name="headerfooter-example.eruby"></a>
-<div class="program_caption">
-headerfooter-example.eruby</div>
-<pre class="program"><strong><!--#header:</strong>
-<strong>def list_items(items)</strong>
-<strong>#--></strong>
-<% for item in items %>
-  <b><%= item %></b>
-<% end %>
-<strong><!--#footer:</strong>
-<strong>end</strong>
-<strong>#--></strong>
-</pre>
-<a name="headerfooter_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE HeaderFooter headerfooter-example.eruby
-
-<strong>def list_items(items)</strong>
-
-_buf = ''; for item in items 
- _buf << '  <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
-_buf.to_s
-
-<strong>end</strong>
-
-</pre>
-<p>Compare to the following:
-</p>
-<a name="normal-eruby-test.eruby"></a>
-<div class="program_caption">
-normal-eruby-test.eruby</div>
-<pre class="program"><strong><%</strong>
-<strong>def list_items(items)</strong>
-<strong>%></strong>
-<% for item in items %>
-<li><%= item %></li>
-<% end %>
-<strong><%</strong>
-<strong>end</strong>
-<strong>%></strong>
-</pre>
-<a name="normal_eruby_test.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -x normal-eruby-test.eruby
-_buf = '';
-<strong>def list_items(items)</strong>
-
- for item in items 
- _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
-'; end 
-
-<strong>end</strong>
-
-_buf.to_s
-</pre>
-<p>Header and footer can be in any position in eRuby script,
-that is, header is no need to be in the head of eRuby script.
-</p>
-<a name="headerfooter-example2.rhtml"></a>
-<div class="program_caption">
-headerfooter-example2.rhtml</div>
-<pre class="program"><?xml version="1.0"?>
-<html>
-<strong><!--#header:</strong>
-<strong>def page(list)</strong>
-<strong>#--></strong>
- :
-<strong><!--#footer:</strong>
-<strong>end</strong>
-<strong>#--></strong>
-</html>
-</pre>
-<a name="headerfooter_example2.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE HeaderFooter headerfooter-example2.rhtml
-
-<strong>def page(list)</strong>
-
-_buf = ''; _buf << '<?xml version="1.0"?>
-<html>
-'; _buf << ' :
-'; _buf << '</html>
-';
-_buf.to_s
-
-<strong>end</strong>
-
-</pre>
-<p>HeaderFooterEnhancer is experimental and is language-independent.
-</p>
-<br>
-
-
-<a name="interpolation-enhancer"></a>
-<h3 class="section2">InterpolationEnhancer</h3>
-<p>[experimental]
-</p>
-<p>InterpolationEnhancer converts "<h1><%= title %></h1>" into
-"_buf << %Q`<h1>#{ title }</h1>`".
-This makes Eruby a litter faster because method call of String#<< are eliminated
-by expression interpolations.
-</p>
-<div class="program_caption">
-InterpolationEnhancer elmininates method call of String#<<.</div>
-<pre class="program">## Assume that input is '<a href="<%=url%>"><%=name%></a>'.
-## Eruby convert input into the following code.  String#<< is called 5 times.
-_buf << '<a href="'; _buf << (url).to_s; _buf << '">'; _buf << (name).to_s; _buf << '</a>';
-
-## If InterpolationEnhancer is used, String#<< is called only once.
-_buf << %Q`<a href="#{url}">#{name}</a>`;
-</pre>
-<a name="interpolation_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE Interpolation example.eruby
-_buf = ''; _buf << <strong>%Q`</strong><div>\n<strong>`</strong>
- for item in list 
- _buf << <strong>%Q`</strong>  <p><strong>#{ item }</strong></p>
-  <p><strong>#{Erubis::XmlHelper.escape_xml( item )}</strong></p>\n<strong>`</strong>
- end 
- _buf << <strong>%Q`</strong></div>\n<strong>`</strong>
-_buf.to_s
-</pre>
-<p>Erubis provides Erubis::FastEruby class which includes InterpolationEnhancer.
-You can use Erubis::FastEruby class instead of Erubis::Eruby class.
-</p>
-<p>InterpolationEnhancer is only for Eruby.
-</p>
-<br>
-
-
-<a name="deleteindent-enhancer"></a>
-<h3 class="section2">DeleteIndentEnhancer</h3>
-<p>[experimental]
-DeleteIndentEnhancer deletes indentation of HTML file.
-</p>
-<a name="interpolation_example.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -xE DeleteIndent example.eruby
-_buf = ''; _buf << '<div>
-'; for item in list 
- _buf << '<p>'; _buf << ( item ).to_s; _buf << '</p>
-<p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-_buf.to_s
-</pre>
-<p>Notice that DeleteIndentEnhancer isn't intelligent.
-It deletes indentations even if they are in <PRE></PRE>.
-</p>
-<p>DeleteIndentEnhancer is language-independent.
-</p>
-<br>
-
-
-<br>
-
-
-<a name="lang"></a>
-<h2 class="section1">Multi-Language Support</h2>
-<p>Erubis supports the following languages<sup>(<a href="#fnref:2" name="fnlink:2">*2</a>)</sup>:
-</p>
-<ul type="disc">
-<li>Ruby
-</li>
-<li><a href="#lang-php">PHP</a>
-</li>
-<li><a href="#lang-c">C</a>
-</li>
-<li><a href="#lang-java">Java</a>
-</li>
-<li><a href="#lang-scheme">Scheme</a>
-</li>
-<li><a href="#lang-perl">Perl</a>
-</li>
-<li><a href="#lang-javascript">JavaScript</a>
-</li>
-</ul>
-<div class="footnote">
- <dl compact>
-  <dt>(<a name="fnref:2" href="#fnlink:2">*2</a>)</dt>
-  <dd>If you need template engine in pure PHP/Perl/JavaScript, try <a href="http://www.kuwata-lab.com/tenjin/">Tenjin</a> (<a href="http://www.kuwata-lab.com/tenjin/">http://www.kuwata-lab.com/tenjin/</a>). Tenjin is a very fast and full-featured template engine implemented in pure PHP/Perl/JavaScript.</dd>
- </dl>
-</div>
-<a name="lang-php"></a>
-<h3 class="section2">PHP</h3>
-<a name="example.ephp"></a>
-<div class="program_caption">
-example.ephp</div>
-<pre class="program"><?xml version="1.0"?>
-<html>
- <body>
-  <p>Hello <strong><%= $user %></strong>!</p>
-  <table>
-   <tbody>
-    <strong><% $i = 0; %></strong>
-    <strong><% foreach ($list as $item) { %></strong>
-    <strong><%   $i++; %></strong>
-    <tr bgcolor=<strong>"<%= $i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>"</strong>>
-     <td><strong><%= $i %></strong></td>
-     <td><strong><%== $item %></strong></td>
-    </tr>
-    <strong><% } %></strong>
-   </tbody>
-  </table>
- </body>
-</html>
-</pre>
-<a name="example_php.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -l php example.ephp
-<<?php ?>?xml version="1.0"?>
-<html>
- <body>
-  <p>Hello <?php echo $user; ?>!</p>
-  <table>
-   <tbody>
-<?php     $i = 0; ?>
-<?php     foreach ($list as $item) { ?>
-<?php       $i++; ?>
-    <tr bgcolor="<?php echo $i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'; ?>">
-     <td><?php echo $i; ?></td>
-     <td><?php echo htmlspecialchars($item); ?></td>
-    </tr>
-<?php     } ?>
-   </tbody>
-  </table>
- </body>
-</html>
-</pre>
-<br>
-
-
-<a name="lang-c"></a>
-<h3 class="section2">C</h3>
-<a name="example.ec"></a>
-<div class="program_caption">
-example.ec</div>
-<pre class="program"><strong><%
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-    int i;
-
-%></strong>
-<html>
- <body>
-  <p>Hello <strong><%= "%s", argv[0] %></strong>!</p>
-  <table>
-   <tbody>
-    <strong><% for (i = 1; i < argc; i++) { %></strong>
-    <tr bgcolor="<strong><%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %></strong>">
-      <td><strong><%= "%d", i %></strong></td>
-      <td><strong><%= "%s", argv[i] %></strong></td>
-    </tr>
-    <strong><% } %></strong>
-   </tbody>
-  </table>
- </body>
-</html>
-<strong><%
-    return 0; 
-}
-%></strong>
-</pre>
-<a name="example_c.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -l c example.ec
-#line 1 "example.ec"
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-    int i;
-
-
-fputs("<html>\n"
-      " <body>\n"
-      "  <p>Hello ", stdout); fprintf(stdout, "%s", argv[0]); fputs("!</p>\n"
-      "  <table>\n"
-      "   <tbody>\n", stdout);
-     for (i = 1; i < argc; i++) { 
-fputs("    <tr bgcolor=\"", stdout); fprintf(stdout, i % 2 == 0 ? "#FFCCCC" : "#CCCCFF"); fputs("\">\n"
-      "      <td>", stdout); fprintf(stdout, "%d", i); fputs("</td>\n"
-      "      <td>", stdout); fprintf(stdout, "%s", argv[i]); fputs("</td>\n"
-      "    </tr>\n", stdout);
-     } 
-fputs("   </tbody>\n"
-      "  </table>\n"
-      " </body>\n"
-      "</html>\n", stdout);
-
-    return 0; 
-}
-
-</pre>
-<br>
-
-
-<a name="lang-java"></a>
-<h3 class="section2">Java</h3>
-<a name="Example.ejava"></a>
-<div class="program_caption">
-Example.ejava</div>
-<pre class="program"><strong><%
-import java.util.*;
-
-public class Example {
-  private String user;
-  private String[] list;
-  public example(String user, String[] list) {
-    this.user = user;
-    this.list = list;
-  }
-
-  public String view() {
-    StringBuffer _buf = new StringBuffer();
-%></strong>
-<html>
- <body>
-  <p>Hello <strong><%= user %></strong>!</p>
-  <table>
-   <tbody>
-    <strong><% for (int i = 0; i < list.length; i++) { %></strong>
-    <tr bgcolor=<strong>"<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>"</strong>>
-     <td><strong><%= i + 1 %></strong></td>
-     <td><strong><%== list[i] %></strong></td>
-    </tr>
-    <strong><% } %></strong>
-   </tbody>
-  </table>
- <body>
-</html>
-<strong><%
-    return _buf.toString();
-  }
-
-  public static void main(String[] args) {
-    String[] list = { "<aaa>", "b&b", "\"ccc\"" };
-    Example ex = Example.new("Erubis", list);
-    System.out.print(ex.view());
-  }
-
-  public static String escape(String s) {
-    StringBuffer sb = new StringBuffer();
-    for (int i = 0; i < s.length(); i++) {
-      char ch = s.charAt(i);
-      switch (ch) {
-      case '<':   sb.append("&lt;"); break;
-      case '>':   sb.append("&gt;"); break;
-      case '&':   sb.append("&amp;"); break;
-      case '"':   sb.append("&quot;"); break;
-      default:    sb.append(ch);
-      }
-    }
-    return sb.toString();
-  }
-}
-%></strong>
-</pre>
-<a name="example_java.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -b -l java example.ejava
-
-import java.util.*;
-
-public class Example {
-  private String user;
-  private String[] list;
-  public example(String user, String[] list) {
-    this.user = user;
-    this.list = list;
-  }
-
-  public String view() {
-    StringBuffer _buf = new StringBuffer();
-
-_buf.append("<html>\n"
-          + " <body>\n"
-          + "  <p>Hello "); _buf.append(user); _buf.append("!</p>\n"
-          + "  <table>\n"
-          + "   <tbody>\n");
-     for (int i = 0; i < list.length; i++) { 
-_buf.append("    <tr bgcolor=\""); _buf.append(i % 2 == 0 ? "#FFCCCC" : "#CCCCFF"); _buf.append("\">\n"
-          + "     <td>"); _buf.append(i + 1); _buf.append("</td>\n"
-          + "     <td>"); _buf.append(escape(list[i])); _buf.append("</td>\n"
-          + "    </tr>\n");
-     } 
-_buf.append("   </tbody>\n"
-          + "  </table>\n"
-          + " <body>\n"
-          + "</html>\n");
-
-    return _buf.toString();
-  }
-
-  public static void main(String[] args) {
-    String[] list = { "<aaa>", "b&b", "\"ccc\"" };
-    Example ex = Example.new("Erubis", list);
-    System.out.print(ex.view());
-  }
-
-  public static String escape(String s) {
-    StringBuffer sb = new StringBuffer();
-    for (int i = 0; i < s.length(); i++) {
-      char ch = s.charAt(i);
-      switch (ch) {
-      case '<':   sb.append("&lt;"); break;
-      case '>':   sb.append("&gt;"); break;
-      case '&':   sb.append("&amp;"); break;
-      case '"':   sb.append("&quot;"); break;
-      default:    sb.append(ch);
-      }
-    }
-    return sb.toString();
-  }
-}
-
-</pre>
-<br>
-
-
-<a name="lang-scheme"></a>
-<h3 class="section2">Scheme</h3>
-<a name="example.escheme"></a>
-<div class="program_caption">
-example.escheme</div>
-<pre class="program"><html>
- <body>
-<strong><%
-(let ((user "Erubis")
-      (items '("<aaa>" "b&b" "\"ccc\""))
-      (i 0))
- %></strong>
-  <p>Hello <strong><%= user %></strong>!</p>
-  <table>
-<strong><%
-  (for-each
-   (lambda (item)
-     (set! i (+ i 1))
- %></strong>
-   <tr bgcolor="<strong><%= (if (= (modulo i 2) 0) "#FFCCCC" "#CCCCFF") %></strong>">
-    <td><strong><%= i %></strong></td>
-    <td><strong><%= item %></strong></td>
-   </tr>
-<strong><%
-   ) ; lambda end
-   items) ; for-each end
- %></strong>
-  </table>
-<strong><%
-) ; let end
-%></strong>
- </body>
-</html>
-</pre>
-<a name="example_scheme.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -l scheme example.escheme
-(let ((_buf '())) (define (_add x) (set! _buf (cons x _buf))) (_add "<html>
- <body>\n")
-
-(let ((user "Erubis")
-      (items '("<aaa>" "b&b" "\"ccc\""))
-      (i 0))
- 
-(_add "  <p>Hello ")(_add user)(_add "!</p>
-  <table>\n")
-
-  (for-each
-   (lambda (item)
-     (set! i (+ i 1))
- 
-(_add "   <tr bgcolor=\"")(_add (if (= (modulo i 2) 0) "#FFCCCC" "#CCCCFF"))(_add "\">
-    <td>")(_add i)(_add "</td>
-    <td>")(_add item)(_add "</td>
-   </tr>\n")
-
-   ) ; lambda end
-   items) ; for-each end
- 
-(_add "  </table>\n")
-
-) ; let end
-
-(_add " </body>
-</html>\n")
-  (reverse _buf))
-</pre>
-<a name="example_scheme_display.result"></a>
-<div class="terminal_caption">
-compiled source code (with <code>--func=display</code> property)</div>
-<pre class="terminal">$ erubis -l scheme --func=display example.escheme
-(display "<html>
- <body>\n")
-
-(let ((user "Erubis")
-      (items '("<aaa>" "b&b" "\"ccc\""))
-      (i 0))
- 
-(display "  <p>Hello ")(display user)(display "!</p>
-  <table>\n")
-
-  (for-each
-   (lambda (item)
-     (set! i (+ i 1))
- 
-(display "   <tr bgcolor=\"")(display (if (= (modulo i 2) 0) "#FFCCCC" "#CCCCFF"))(display "\">
-    <td>")(display i)(display "</td>
-    <td>")(display item)(display "</td>
-   </tr>\n")
-
-   ) ; lambda end
-   items) ; for-each end
- 
-(display "  </table>\n")
-
-) ; let end
-
-(display " </body>
-</html>\n")
-</pre>
-<br>
-
-
-<a name="lang-perl"></a>
-<h3 class="section2">Perl</h3>
-<a name="example.eperl"></a>
-<div class="program_caption">
-example.eprl</div>
-<pre class="program"><strong><%
-   my $user = 'Erubis';
-   my @list = ('<aaa>', 'b&b', '"ccc"');
-%></strong>
-<html>
- <body>
-  <p>Hello <strong><%= $user %></strong>!</p>
-  <table>
-   <strong><% $i = 0; %></strong>
-   <strong><% for $item (@list) { %></strong>
-   <tr bgcolor=<strong><%= ++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %></strong>">
-    <td><strong><%= $i %></strong></td>
-    <td><strong><%= $item %></strong></td>
-   </tr>
-   <strong><% } %></strong>
-  </table>
- </body>
-</html>
-</pre>
-<a name="example_perl.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -l perl example.eperl
-use HTML::Entities; 
-   my $user = 'Erubis';
-   my @list = ('<aaa>', 'b&b', '"ccc"');
-
-print('<html>
- <body>
-  <p>Hello '); print($user); print('!</p>
-  <table>
-');     $i = 0; 
-    for $item (@list) { 
-print('   <tr bgcolor='); print(++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); print('">
-    <td>'); print($i); print('</td>
-    <td>'); print($item); print('</td>
-   </tr>
-');     } 
-print('  </table>
- </body>
-</html>
-'); 
-</pre>
-<br>
-
-
-<a name="lang-javascript"></a>
-<h3 class="section2">JavaScript</h3>
-<a name="example.ejs"></a>
-<div class="program_caption">
-example.ejs</div>
-<pre class="program"><strong><%
-   var user = 'Erubis';
-   var list = ['<aaa>', 'b&b', '"ccc"'];
- %></strong>
-<html>
- <body>
-  <p>Hello <strong><%= user %></strong>!</p>
-  <table>
-   <tbody>
-    <strong><% var i; %></strong>
-    <strong><% for (i = 0; i < list.length; i++) { %></strong>
-    <tr bgcolor="<strong><%= i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %></strong>">
-     <td><strong><%= i + 1 %></strong></td>
-     <td><strong><%= list[i] %></strong></td>
-    </tr>
-    <strong><% } %></strong>
-   </tbody>
-  </table>
- </body>
-</html>
-</pre>
-<a name="example_js.result"></a>
-<div class="terminal_caption">
-compiled source code</div>
-<pre class="terminal">$ erubis -l js example.ejs
-var _buf = [];
-   var user = 'Erubis';
-   var list = ['<aaa>', 'b&b', '"ccc"'];
- 
-_buf.push("<html>\n\
- <body>\n\
-  <p>Hello "); _buf.push(user); _buf.push("!</p>\n\
-  <table>\n\
-   <tbody>\n");
-     var i; 
-     for (i = 0; i < list.length; i++) { 
-_buf.push("    <tr bgcolor=\""); _buf.push(i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
-     <td>"); _buf.push(i + 1); _buf.push("</td>\n\
-     <td>"); _buf.push(list[i]); _buf.push("</td>\n\
-    </tr>\n");
-     } 
-_buf.push("   </tbody>\n\
-  </table>\n\
- </body>\n\
-</html>\n");
-document.write(_buf.join(""));
-</pre>
-<p>If command-line option '<code>--docwrite=false</code>' is specified,
-'<code>_buf.join("");</code>' is used instead of '<code>document.write(_buf.join(""));</code>'.
-This is useful when passing converted source code to eval() function in JavaScript.
-</p>
-<p>You can pass <code>:docwrite=>false</code> to Erubis::Ejavascript.new() in your Ruby script.
-</p>
-<pre class="program">s = File.read('example.jshtml')
-engine = Erubis::Ejavascript.new(s, <code>:docwrite=>false</code>)
-</pre>
-<p>If you want to specify any JavaScript code, use '--postamble=...'.
-</p>
-<p>Notice that default value of 'docwrite' property will be false in the future release.
-</p>
-<br>
-
-
-<br>
-
-
-<a name="rails"></a>
-<h2 class="section1">Ruby on Rails Support</h2>
-<p>Erubis supports Ruby on Rails. 
-This section describes how to use Erubis with Ruby on Rails.
-</p>
-<a name="rails-settings"></a>
-<h3 class="section2">Settings</h3>
-<p>Add the following code to your 'config/environment.rb' and restart web server.
-This replaces ERB in Rails by Erubis entirely.
-</p>
-<div class="program_caption">
-config/environment.rb</div>
-<pre class="program">require 'erubis/helpers/rails_helper'
-#Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby # or Erubis::FastEruby
-#Erubis::Helpers::RailsHelper.init_properties = {}
-#Erubis::Helpers::RailsHelper.show_src = nil
-#Erubis::Helpers::RailsHelper.preprocessing = false
-</pre>
-<p>Options:
-</p>
-<dl class="dl2">
-<dt class="dt2">
-Erubis::Helpers::RailsHelper.engine_class (=Erubis::Eruby)</dt>
-<dd class="dd2">
-<p>	Erubis engine class (default Erubis::Eruby).
-</p>
-</dd>
-<dt class="dt2">
-Erubis::Helpers::RailsHelper.init_properties (={})</dt>
-<dd class="dd2">
-<p>	Optional arguments for Erubis::Eruby#initialize() method (default {}).
-</p>
-</dd>
-<dt class="dt2">
-Erubis::Helpers::RailsHelper.show_src (=nil)</dt>
-<dd class="dd2">
-<p>	Whether to print converted Ruby code into log file.
-	If true, Erubis prints coverted code into log file.
-	If false, Erubis doesn't.
-	If nil, Erubis prints when ENV['RAILS_ENV'] == 'development'.
-	Default is nil.
-</p>
-</dd>
-<dt class="dt2">
-Erubis::Helpers::RailsHelper.preprocessing (=false)</dt>
-<dd class="dd2">
-<p>	Enable preprocessing if true (default false).
-</p>
-</dd>
-</dl>
-<br>
-
-
-<a name="rails-preprocessing"></a>
-<h3 class="section2">Preprosessing</h3>
-<p>Erubis supports preprocessing of template files.
-Preprocessing make your Ruby on Rails application about 20-40 percent faster.
-To enable preprocessing, set Erubis::Helpers::RailsHelper.preprocessing to true in your 'environment.rb' file.
-</p>
-<p>For example, assume the following template.
-This is slow because link_to() method is called every time when template is rendered.
-</p>
-<pre class="program"><%= link_to 'Create', :action=>'create' %>
-</pre>
-<p>The following is faster than the above, but not flexible because url is fixed.
-</p>
-<pre class="program"><a href="/users/create">Create</a>
-</pre>
-<p>Preprocessing solves this problem.
-If you use '[%= %]' instead of '<%= %>', preprocessor evaluate it only once when template is loaded.
-</p>
-<pre class="program"><strong>[%= link_to 'Create', :action=>'create'%]</strong>
-</pre>
-<p>The above is evaluated by preprocessor and replaced to the following code automatically.
-</p>
-<pre class="program"><a href="/users/create">Create</a>
-</pre>
-<p>Notice that this is done only once when template file is loaded.
-It means that link_to() method is not called when template is rendered.
-</p>
-<p>If link_to() method have variable arguments, use <code>_?()</code> helper method.
-</p>
-<pre class="program"><% for user in @users %>
-[%= link_to <strong>_?('user.name')</strong>, :action=>'show', :id=><strong>_?('user.id')</strong> %]
-<% end %>
-</pre>
-<p>The above is evaluated by preprocessor when template is loaded and expanded into the following code.
-This will be much faster because link_to() method is not called when rendering.
-</p>
-<pre class="program"><% for user in @users %>
-<a href="/users/show/<strong><%=user.id%></strong>"><strong><%=user.name%></strong></a>
-<% end %>
-</pre>
-<p>Preprocessing statement (<code>[% %]</code>) is also available as well as preprocessing expression (<code>[%= %]</code>).
-</p>
-<pre class="program"><select name="state">
-  <option value="">-</option>
-<strong>[% for code in states.keys.sort %]</strong>
-  <option value="<strong>[%= code %]</strong>"><strong>[%= states[code] %]</strong></option>
-<strong>[% end %]</strong>
-</select>
-</pre>
-<p>The above will be evaluated by preprocessor and expanded into the following when template is loaded.
-In the result, rendering speed will be much faster because for-loop is not executed when rendering.
-</p>
-<pre class="program"><select name="state">
-  <option value="">-</option>
-  <option value="AK">Alaska</option>
-  <option value="AL">Alabama</option>
-  <option value="AR">Arkansas</option>
-  <option value="AS">American Samoa</option>
-  <option value="AZ">Arizona</option>
-  <option value="CA">California</option>
-  <option value="CO">Colorado</option>
-   ....
-</select>
-</pre>
-<p>Notice that it is not recommended to use preprocessing with tag helpers,
-because tag helpers generate different html code when form parameter has errors or not.
-</p>
-<p>Helper methods of Ruby on Rails are divided into two groups.
-</p>
-<ul type="disc">
-<li>link_to() or _() (method of gettext package) are not need to call for every time
-   as template is rendered because it returns same value when same arguments are passed.
-   These methods can be got faster by preprocessing.
-</li>
-<li>Tag helper methods should be called for every time as template is rendered
-   because it may return differrent value even if the same arguments are passed.
-   Preprocessing is not available with these methods.
-</li>
-</ul>
-<p>In Ruby on Rails 2.0, <code>_?('user_id')</code> is OK but <code>_?('user.id')</code> is NG
-because the latter contains period ('.') character.
-</p>
-<pre class="program"><!-- NG in Rails 2.0, because _?('') contains period -->
-[%= link_to 'Edit', edit_user_path(<strong>_?('@user.id')</strong>) %]
-[%= link_to 'Show', <strong>@user</strong> %]
-[%= link_to 'Delete', <strong>@user</strong>, :confirm=>'OK?', :method=>:delete %]
-
-<!-- OK in Rails 2.0 -->
-<strong><%= user_id = @user.id %></strong>
-[%= link_to 'Edit', edit_user_path(<strong>_?('user_id')</strong>) %]
-[%= link_to 'Show', <strong>:action=>'show', :id=>_?('user_id')</strong> %]
-[%= link_to 'Delete', <strong>{:action=>'destroy', :id=>_?('user_id')}</strong>,
-                      {:confirm=>'OK?', :method=>:delete} %]
-</pre>
-<br>
-
-
-<a name="rails-formhelpers"></a>
-<h3 class="section2">Form Helpers for Preprocessing</h3>
-<p><strong>(Experimental)</strong>
-</p>
-<p>Erubis provides form helper methods for preprocessing.
-These are defined in 'erubis/helpers/rails_form_helper.rb'.
-If you want to use it, require it and include Erubis::Helpers::RailsFormHelper in 'app/helpers/applition_helper.rb'
-</p>
-<div class="program_caption">
-app/helpers/xxx_helper.rb</div>
-<pre class="program">require 'erubis/helpers/rails_form_helper'
-module ApplicationHelper
-  include Erubis::Helpers::RailsFormHelper
-end
-</pre>
-<p>Form helper methods defined in Erubis::Helpers::RailsFormHelper are named as 'pp_xxxx'
-('pp' represents preprocessing).
-</p>
-<p>Assume the following view template:
-</p>
-<div class="program_caption">
-_form.rhtml</div>
-<pre class="program"> <p>
-  Name: <%= text_field :user, :name %>
- </p>
- <p>
-  Name: <strong>[%= pp_text_field :user, :name %]</strong>
- </p>
-</pre>
-<p>Erubis preprocessor converts it to the following eRuby string:
-</p>
-<div class="program_caption">
-preprocessed</div>
-<pre class="program"> <p>
-  Name: <%= text_field :user, :name %>
- </p>
- <p>
-  Name: <strong><input id="stock_name" name="stock[name]" size="30" type="text" value="<%=h @stock.name%>" /></strong>
- </p>
-</pre>
-<p>Erubis converts it to the following Ruby code:
-</p>
-<div class="program_caption">
-Ruby code</div>
-<pre class="program"> _buf << ' <p>
-  Name: '; _buf << ( text_field :stock, :name ).to_s; _buf << '
-'; _buf << ' </p>
- <p>
-  Name: <input id="stock_name" name="stock[name]" size="30" type="text" value="'; _buf << (h @stock.name).to_s; _buf << '" />
- </p>
-';
-</pre>
-<p>The above Ruby code shows that text_field() is called everytime when rendering,
-but pp_text_field() is called only once when template is loaded.
-This means that pp_text_field() with preprocessing makes view layer very fast.
-</p>
-<p>Module Erubis::Helpers::RailsFormHelper defines the following form helper methods.
-</p>
-<ul type="disc">
-<li>pp_render_partial(basename)
-</li>
-<li>pp_form_tag(url_for_options={}, options={}, *parameters_for_url, &block)
-</li>
-<li>pp_text_field(object_name, method, options={})
-</li>
-<li>pp_password_field(object_name, method, options={})
-</li>
-<li>pp_hidden_field(object_name, method, options={})
-</li>
-<li>pp_file_field(object_name, method, options={})
-</li>
-<li>pp_text_area(object_name, method, options={})
-</li>
-<li>pp_check_box(object_name, method, options={}, checked_value="1", unchecked_value="0")
-</li>
-<li>pp_radio_button(object_name, method, tag_value, options={})
-</li>
-<li>pp_select(object, method, collection, options={}, html_options={})
-</li>
-<li>pp_collection_select(object, method, collection, value_method, text_method, options={}, html_options={})
-</li>
-<li>pp_country_select(object, method, priority_countries=nil, options={}, html_options={})
-</li>
-<li>pp_time_zone_select(object, method, priority_zones=nil, options={}, html_options={})
-</li>
-<li>pp_submit_tag(value="Save changes", options={})
-</li>
-<li>pp_image_submit_tag(source, options={})
-</li>
-</ul>
-<p>Notice that pp_form_for() is not provided.
-</p>
-<p><span style="color:#FF0000">CAUTION:</span> These are experimental and may not work in Ruby on Rails 2.0.
-</p>
-<br>
-
-
-<a name="rails-others"></a>
-<h3 class="section2">Others</h3>
-<ul type="disc">
-<li>ActionView::Helpers::CaptureHelper#capture() and ActionView::Helpers::Texthelper#concat() are available.
-</li>
-</ul>
-<ul type="disc">
-<li>Form helper methods are not tested in Ruby on Rails 2.0.
-</li>
-</ul>
-<ul type="disc">
-<li>ERB::Util.h() is redefined if you require 'erubis/helpers/rails_helper.rb'.
-   Original definition of ERB::Util.h() is the following and it is slow
-   because it scans string four times.
-<pre class="program"> def html_escape(s)
-   s.to_s.gsub(/&/, "&amp;").gsub(/\"/, "&quot;").gsub(/>/, "&gt;").gsub(/</, "&lt;")
- end
- alias h html_escape
-</pre>
-<p>   New definition in 'erubis/helpers/rails_helper.rb' is faster than the above
-   because it scans string only once.
-</p>
-<pre class="program"> ESCAPE_TABLE = { '&'=>'&amp;', '<'=>'&lt;', '>'=>'&gt;', '"'=>'&quot;', "'"=>'&#039;', }
- def h(value)
-   value.to_s.gsub(/[&<>"]/) { |s| ESCAPE_TABLE[s] }
- end
-</pre>
-<p>   Notice that the new definition may be slow if string contains
-   many '< > & "' characters because block is call many time.
-   You should use ERB::Util.html_hscape() if string contains a lot of '< > & "'
-   characters.
-</p>
-</li>
-</ul>
-<br>
-
-
-<br>
-
-
-<a name="topics"></a>
-<h2 class="section1">Other Topics</h2>
-<a name="'<%= =%>' and '<%= -%>'"></a>
-<h3 class="section2">'<%= =%>' and '<%= -%>'</h3>
-<p>Since 2.6.0, '<%= -%>' remove tail spaces and newline.
-This is for compatibiliy with ERB when trim mode is '-'.
-'<%= =%>' also removes tail spaces and newlines, and this is
-Erubis-original enhancement (cooler than '<%= -%>', isn't it?).
-</p>
-<a name="tailnewline.rhtml.comment_filter"></a>
-<div class="program_caption">
-tailnewline.rhtml</div>
-<pre class="program"><div>
-<%= @var -%>          # or <%= @var =%>
-</div>
-</pre>
-<div class="terminal_caption">
-result (version 2.5.0):</div>
-<pre class="terminal">$ erubis -c '{var: "AAA\n"}' tailnewline.rhtml
-<div>
-AAA
-
-</div>
-</pre>
-<a name="tail_260.result"></a>
-<div class="terminal_caption">
-result (version 2.6.0):</div>
-<pre class="terminal">$ erubis -c '{var: "AAA\n"}' tailnewline.rhtml
-<div>
-AAA
-</div>
-</pre>
-<br>
-
-
-<a name="'<%% %>' and '<%%= %>'"></a>
-<h3 class="section2">'<%% %>' and '<%%= %>'</h3>
-<p>Since 2.6.0, '<%% %>' and '<%%= %>' are converted into '<% %>' and '<%= %>' respectively.
-This is for compatibility with ERB.
-</p>
-<div class="program_caption">
-doublepercent.rhtml:</div>
-<pre class="program"><ul>
-<%% for item in @list %>
-  <li><%%= item %></li>
-<%% end %>
-</ul>
-</pre>
-<div class="terminal_caption">
-result:</div>
-<pre class="terminal">$ erubis doublepercent.rhtml
-<ul>
-<% for item in @list %>
-  <li><%= item %></li>
-<% end %>
-</ul>
-</pre>
-<br>
-
-
-<a name="topics-context-vs-binding"></a>
-<h3 class="section2">evaluate(context) v.s. result(binding)</h3>
-<p>It is recommended to use 'Erubis::Eruby#evaluate(context)' instead of 'Erubis::Eruby#result(binding)' because Ruby's Binding object has some problems.
-</p>
-<ul type="disc">
-<li>It is not able to specify variables to use.
-   Using binding() method, all of local variables are passed to templates.
-</li>
-<li>Changing local variables in templates may affect to varialbes in main program.
-   If you assign '10' to local variable 'x' in templates, it may change variable 'x' in main program unintendedly.
-</li>
-</ul>
-<p>The following example shows that assignment of some values into variable 'x' in templates affect to local variable 'x' in main program unintendedly.
-</p>
-<a name="template1.rhtml"></a>
-<div class="program_caption">
-template1.rhtml (intended to be passed 'items' from main program)</div>
-<pre class="program"><% for <strong>x</strong> in <strong>items</strong> %>
-item = <%= x %>
-<% end %>
-** debug: local variables=<%= local_variables().inspect() %>
-</pre>
-<a name="main_program1.rb"></a>
-<div class="program_caption">
-main_program1.rb (intended to pass 'items' to template)</div>
-<pre class="program">require 'erubis'
-eruby = Erubis::Eruby.new(File.read('template1.rhtml'))
-items = ['foo', 'bar', 'baz']
-x = 1
-## local variable 'x' and 'eruby' are passed to template as well as 'items'!
-print <strong>eruby.result(binding())</strong>    
-## local variable 'x' is changed unintendedly because it is changed in template!
-puts "** debug: x=#{x.inspect}"  #=> "baz"
-</pre>
-<a name="main_program1.result"></a>
-<div class="terminal_caption">
-Result:</div>
-<pre class="terminal">$ ruby main_program1.rb
-item = foo
-item = bar
-item = baz
-** debug: local variables=["eruby", "items", "x", "_buf"]
-** debug: x="baz"
-</pre>
-<p>This problem is caused because Ruby's Binding class is poor to use in template engine.
-Binding class should support the following features.
-</p>
-<pre class="program">b = Binding.new     # create empty Binding object
-b['x'] = 1          # set local variables using binding object
-</pre>
-<p>But the above features are not implemented in Ruby.
-</p>
-<p>A pragmatic solution is to use 'Erubis::Eruby#evaluate(context)' instead of 'Erubis::Eruby#result(binding)'.
-'evaluate(context)' uses Erubis::Context object and instance variables instead of Binding object and local variables.
-</p>
-<a name="template2.rhtml"></a>
-<div class="program_caption">
-template2.rhtml (intended to be passed '@items' from main program)</div>
-<pre class="program"><% for <strong>x</strong> in <strong>@items</strong> %>
-item = <%= x %>
-<% end %>
-** debug: local variables=<%= local_variables().inspect() %>
-</pre>
-<a name="main_program2.rb"></a>
-<div class="program_caption">
-main_program2.rb (intended to pass '@items' to template)</div>
-<pre class="program">require 'erubis'
-eruby = Erubis::Eruby.new(File.read('template2.rhtml'))
-items = ['foo', 'bar', 'baz']
-x = 1
-## only 'items' are passed to template
-print <strong>eruby.evaluate(:items=>items)</strong>    
-## local variable 'x' is not changed!
-puts "** debug: x=#{x.inspect}"  #=> 1
-</pre>
-<a name="main_program2.result"></a>
-<div class="terminal_caption">
-Result:</div>
-<pre class="terminal">$ ruby main_program2.rb
-item = foo
-item = bar
-item = baz
-** debug: local variables=["_context", "x", "_buf"]
-** debug: x=1
-</pre>
-<br>
-
-
-<a name="topics-fasteruby"></a>
-<h3 class="section2">Class Erubis::FastEruby</h3>
-<p>[experimental]
-</p>
-<p>Erubis provides Erubis::FastEruby class which includes <a href="#interpolation-enhancer">InterpolationEnhancer</a> and <a href="#topics-benchmark">works faster than Erubis::Eruby class</a>.
-If you desire more speed, try Erubis::FastEruby class.
-</p>
-<a name="fasteruby.rhtml"></a>
-<div class="program_caption">
-File 'fasteruby.rhtml':</div>
-<pre class="program"><html>
-  <body>
-    <h1><%== @title %></h1>
-    <table>
-<% i = 0 %>
-<% for item in @list %>
-<%   i += 1 %>
-      <tr>
-        <td><%= i %></td>
-        <td><%== item %></td>
-      </tr>
-<% end %>
-    </table>
-  </body>
-</html>
-</pre>
-<a name="fasteruby.rb"></a>
-<div class="program_caption">
-File 'fasteruby.rb':</div>
-<pre class="program">require 'erubis'
-input = File.read('fasteruby.rhtml')
-eruby = <strong>Erubis::FastEruby.new(input)</strong>    # create Eruby object
-
-puts "---------- script source ---"
-puts eruby.src
-
-puts "---------- result ----------"
-context = { :title=>'Example', :list=>['aaa', 'bbb', 'ccc'] }
-output = eruby.evaluate(context)
-print output
-</pre>
-<a name="fasteruby.result"></a>
-<div class="terminal_caption">
-output</div>
-<pre class="terminal">$ ruby fasteruby.rb
----------- script source ---
-_buf = ''; _buf << <strong>%Q`</strong><html>
-  <body>
-    <h1><strong>#{Erubis::XmlHelper.escape_xml( @title )}</strong></h1>
-    <table>\n<strong>`</strong>
- i = 0 
- for item in @list 
-   i += 1 
- _buf << <strong>%Q`</strong>      <tr>
-        <td><strong>#{ i }</strong></td>
-        <td><strong>#{Erubis::XmlHelper.escape_xml( item )}</strong></td>
-      </tr>\n<strong>`</strong>
- end 
- _buf << <strong>%Q`</strong>    </table>
-  </body>
-</html>\n<strong>`</strong>
-_buf.to_s
----------- result ----------
-<html>
-  <body>
-    <h1>Example</h1>
-    <table>
-      <tr>
-        <td>1</td>
-        <td>aaa</td>
-      </tr>
-      <tr>
-        <td>2</td>
-        <td>bbb</td>
-      </tr>
-      <tr>
-        <td>3</td>
-        <td>ccc</td>
-      </tr>
-    </table>
-  </body>
-</html>
-</pre>
-<br>
-
-
-<a name="topics-syntax"></a>
-<h3 class="section2">Syntax Checking</h3>
-<p>Command-line option '-z' checks syntax. It is similar to 'erubis -x file.rhtml | ruby -wc', but it can take several file names.
-</p>
-<div class="terminal_caption">
-example of command-line option '-z'</div>
-<pre class="terminal">$ erubis <strong>-z</strong> app/views/*/*.rhtml
-Syntax OK
-</pre>
-<br>
-
-
-<a name="topics-caching"></a>
-<h3 class="section2">File Caching</h3>
-<p>Erubis::Eruby.load_file(filename) convert file into Ruby script and return Eruby object.
-In addition, it caches converted Ruby script into cache file (filename + '.cache') if cache file is old or not exist.
-If cache file exists and is newer than eruby file, Erubis::Eruby.load_file() loads cache file.
-</p>
-<div class="program_caption">
-example of Erubis::Eruby.load_file()</div>
-<pre class="program">require 'erubis'
-filename = 'example.rhtml'
-eruby = <strong>Erubis::Eruby.load_file(filename)</strong>
-cachename = filename + '.cache'
-if test(?f, cachename)
-  puts "*** cache file '#{cachename}' created."
-end
-</pre>
-<p>Since 2.6.0, it is able to specify cache filename.
-</p>
-<div class="program_caption">
-specify cache filename.</div>
-<pre class="program">filename = 'example.rhtml'
-eruby = Erubis::Eruby.load_file(filename, :cachename=>filename+'.cache')
-</pre>
-<p>Caching makes Erubis about 40-50 percent faster than no-caching.
-See <a href="#topics-benchmark">benchmark</a> for details.
-</p>
-<br>
-
-
-<a name="topics-tinyeruby"></a>
-<h3 class="section2">Erubis::TinyEruby class</h3>
-<p>Erubis::TinyEruby class in 'erubis/tiny.rb' is the smallest implementation of eRuby.
-If you don't need any enhancements of Erubis and only require simple eRuby implementation,
-try Erubis::TinyEruby class.
-</p>
-<br>
-
-
-<a name="topics-php"></a>
-<h3 class="section2">NoTextEnhancer and NoCodeEnhancer in PHP</h3>
-<p>NoTextEnhancer and NoCodEnahncer are quite useful not only for eRuby but also for PHP.
-The former "drops" HTML text and show up embedded Ruby/PHP code
-and the latter drops embedded Ruby/PHP code and leave HTML text.
-</p>
-<p>For example, see the following PHP script.
-</p>
-<a name="notext-example.php"></a>
-<div class="program_caption">
-notext-example.php</div>
-<pre class="program"><html>
-  <body>
-    <h3>List</h3>
-    <?php if (!$list || count($list) == 0) { ?>
-    <p>not found.</p>
-    <?php } else { ?>
-    <table>
-      <tbody>
-        <?php $i = 0; ?>
-        <?php foreach ($list as $item) { ?>
-        <tr bgcolor="<?php echo ++$i % 2 == 1 ? '#FFCCCC' : '#CCCCFF'; ?>">
-          <td><?php echo $item; ?></td>
-        </tr>
-        <?php } ?>
-      </tbody>
-    </table>
-    <?php } ?>
-  </body>
-</html>
-</pre>
-<p>This is complex because PHP code and HTML document are mixed.
-NoTextEnhancer can separate PHP code from HTML document.
-</p>
-<a name="notext-php.result"></a>
-<div class="terminal_caption">
-example of using NoTextEnhancer with PHP file</div>
-<pre class="terminal">$ erubis -l php --pi=php -N -E NoText --trim=false notext-example.php
-    1:  
-    2:  
-    3:  
-    4:      <?php if (!$list || count($list) == 0) { ?>
-    5:  
-    6:      <?php } else { ?>
-    7:  
-    8:  
-    9:          <?php $i = 0; ?>
-   10:          <?php foreach ($list as $item) { ?>
-   11:                       <?php echo ++$i % 2 == 1 ? '#FFCCCC' : '#CCCCFF'; ?>
-   12:                <?php echo $item; ?>
-   13:  
-   14:          <?php } ?>
-   15:  
-   16:  
-   17:      <?php } ?>
-   18:  
-   19:  
-</pre>
-<p>In the same way, NoCodeEnhancer can extract HTML tags.
-</p>
-<a name="nocode-php.result"></a>
-<div class="terminal_caption">
-example of using NoCodeEnhancer with PHP file</div>
-<pre class="terminal">$ erubis -l php --pi=php -N -E NoCode --trim=false notext-example.php
-    1:  <html>
-    2:    <body>
-    3:      <h3>List</h3>
-    4:      
-    5:      <p>not found.</p>
-    6:      
-    7:      <table>
-    8:        <tbody>
-    9:          
-   10:          
-   11:          <tr bgcolor="">
-   12:            <td></td>
-   13:          </tr>
-   14:          
-   15:        </tbody>
-   16:      </table>
-   17:      
-   18:    </body>
-   19:  </html>
-</pre>
-<br>
-
-
-<a name="topcs-modruby"></a>
-<h3 class="section2">Helper Class for mod_ruby</h3>
-<p>Thanks Andrew R Jackson, he developed 'erubis-run.rb' which enables you to use Erubis with mod_ruby.
-</p>
-<ol type="1">
-<li>Copy 'erubis-2.6.2/contrib/erubis-run.rb' to the 'RUBYLIBDIR/apache' directory (for example '/usr/local/lib/ruby/1.8/apache') which contains 'ruby-run.rb', 'eruby-run.rb', and so on.
-<pre class="terminal">$ cd erubis-2.6.2/
-$ sudo copy contrib/erubis-run.rb /usr/local/lib/ruby/1.8/apache/
-</pre>
-</li>
-<li>Add the following example to your 'httpd.conf' (for example '/usr/local/apache2/conf/httpd.conf')
-<pre class="program">LoadModule ruby_module modules/mod_ruby.so
-<IfModule mod_ruby.c>
-  RubyRequire apache/ruby-run
-  RubyRequire apache/eruby-run
-  RubyRequire apache/erubis-run
-  <Location /erubis>
-    SetHandler ruby-object
-    RubyHandler Apache::ErubisRun.instance
-  </Location>
-  <Files *.rhtml>
-    SetHandler ruby-object
-    RubyHandler Apache::ErubisRun.instance
-  </Files>
-</IfModule>
-</pre>
-</li>
-<li>Restart Apache web server.
-<pre class="terminal">$ sudo /usr/local/apache2/bin/apachectl stop
-$ sudo /usr/local/apache2/bin/apachectl start
-</pre>
-</li>
-<li>Create *.rhtml file, for example:
-<pre class="program"><html>
- <body>
-  Now is <%= Time.now %>
-  Erubis version is <%= Erubis::VERSION %>
- </body>
-</html>
-</pre>
-</li>
-<li>Change mode of your directory to be writable by web server process.
-<pre class="terminal">$ cd /usr/local/apache2/htdocs/erubis
-$ sudo chgrp daemon .
-$ sudo chmod 775 .
-</pre>
-</li>
-<li>Access the *.rhtml file and you'll get the web page.
-</li>
-</ol>
-<p>You must set your directories to be writable by web server process, because
-Apache::ErubisRun calls Erubis::Eruby.load_file() internally which creates cache files
-in the same directory in which '*.rhtml' file exists.
-</p>
-<br>
-
-
-<a name="topics-defmethod"></a>
-<h3 class="section2">Define method</h3>
-<p>Erubis::Eruby#def_method() defines instance method or singleton method.
-</p>
-<a name="def_method.rb"></a>
-<pre class="program">require 'erubis'
-s = "hello <%= name %>"
-eruby = Erubis::Eruby.new(s)
-filename = 'hello.rhtml'
-
-## define instance method to Dummy class (or module)
-class Dummy; end
-<strong>eruby.def_method(Dummy, 'render(name)', filename)</strong>  # filename is optional
-p Dummy.new.render('world')    #=> "hello world"
-
-## define singleton method to dummy object
-obj = Object.new
-<strong>eruby.def_method(obj, 'render(name)', filename)</strong>    # filename is optional
-p obj.render('world')          #=> "hello world"
-</pre>
-<br>
-
-
-<a name="topics-benchmark"></a>
-<h3 class="section2">Benchmark</h3>
-<p>A benchmark script is included in Erubis package at 'erubis-2.6.2/benchark/' directory.
-Here is an example result of benchmark.
-</p>
-<div class="terminal_caption">
-MacOS X 10.4 Tiger, Intel CoreDuo 1.83GHz, Ruby1.8.6, eruby1.0.5, gcc4.0.1</div>
-<pre class="terminal">$ cd erubis-2.6.2/benchmark/
-$ ruby bench.rb -n 10000 -m execute
-*** ntimes=10000, testmode=execute
-                                    user     system      total        real
-eruby                          12.720000   0.240000  <strong>12.960000</strong> ( 12.971888)
-ERB                            36.760000   0.350000  <strong>37.110000</strong> ( 37.112019)
-ERB(cached)                    11.990000   0.440000  <strong>12.430000</strong> ( 12.430375)
-Erubis::Eruby                  10.840000   0.300000  <strong>11.140000</strong> ( 11.144426)
-Erubis::Eruby(cached)           7.540000   0.410000   <strong>7.950000</strong> (  7.969305)
-Erubis::FastEruby              10.440000   0.300000  <strong>10.740000</strong> ( 10.737808)
-Erubis::FastEruby(cached)       6.940000   0.410000   <strong>7.350000</strong> (  7.353666)
-Erubis::TinyEruby               9.550000   0.290000   9.840000 (  9.851729)
-Erubis::ArrayBufferEruby       11.010000   0.300000  11.310000 ( 11.314339)
-Erubis::PrintOutEruby          11.640000   0.290000  11.930000 ( 11.942141)
-Erubis::StdoutEruby            11.590000   0.300000  11.890000 ( 11.886512)
-</pre>
-<p>This shows that...
-</p>
-<ul type="disc">
-<li>Erubis::Eruby runs more than 10 percent faster than eruby.
-</li>
-<li>Erubis::Eruby runs about 3 times faster than ERB.
-</li>
-<li>Caching (by Erubis::Eruby.load_file()) makes Erubis about 40-50 percent faster.
-</li>
-<li>Erubis::FastEruby is a litte faster than Erubis::Eruby.
-</li>
-<li>Array buffer (ArrayBufferEnhancer) is a little slower than string buffer (StringBufferEnhancer which Erubis::Eruby includes)
-</li>
-<li>$stdout and print() make Erubis a little slower.
-</li>
-<li>Erubis::TinyEruby (at 'erubis/tiny.rb') is the fastest in all eRuby implementations when no caching.
-</li>
-</ul>
-<p>Escaping HTML characters (such as '< > & "') makes Erubis more faster than eruby and ERB,
-because Erubis::XmlHelper#escape_xml() works faster than CGI.escapeHTML() and ERB::Util#h().
-The following shows that Erubis runs more than 40 percent (when no-cached) or 90 percent (when cached) faster than eruby if HTML characters are escaped.
-</p>
-<div class="terminal_caption">
-When escaping HTML characters with option '-e'</div>
-<pre class="terminal">$ ruby bench.rb -n 10000 -m execute -ep
-*** ntimes=10000, testmode=execute
-                                    user     system      total        real
-eruby                          21.700000   0.290000  <strong>21.990000</strong> ( 22.050687)
-ERB                            45.140000   0.390000  <strong>45.530000</strong> ( 45.536976)
-ERB(cached)                    20.340000   0.470000  <strong>20.810000</strong> ( 20.822653)
-Erubis::Eruby                  14.830000   0.310000  <strong>15.140000</strong> ( 15.147930)
-Erubis::Eruby(cached)          11.090000   0.420000  <strong>11.510000</strong> ( 11.514954)
-Erubis::FastEruby              14.850000   0.310000  <strong>15.160000</strong> ( 15.172499)
-Erubis::FastEruby(cached)      10.970000   0.430000  <strong>11.400000</strong> ( 11.399605)
-Erubis::ArrayBufferEruby       14.970000   0.300000  15.270000 ( 15.281061)
-Erubis::PrintOutEruby          15.780000   0.300000  16.080000 ( 16.088289)
-Erubis::StdoutEruby            15.840000   0.310000  16.150000 ( 16.235338)
-</pre>
-<br>
-
-
-<br>
-
-
-<a name="command"></a>
-<h2 class="section1">Command Reference</h2>
-<a name="command-usage"></a>
-<h3 class="section2">Usage</h3>
-<p>erubis [..options..] [<em>file</em> ...]
-</p>
-<br>
-
-
-<a name="command-options"></a>
-<h3 class="section2">Options</h3>
-  <dl class="dl3" compact>
-  <dt class="dt3"><b>
--h, --help    </b></dt>
-  <dd class="dd3">
-  	Help.
-  </dd>
-  <dt class="dt3"><b>
--v            </b></dt>
-  <dd class="dd3">
-  	Release version.
-  </dd>
-  <dt class="dt3"><b>
--x            </b></dt>
-  <dd class="dd3">
-  	Show compiled source.
-  </dd>
-  <dt class="dt3"><b>
--X            </b></dt>
-  <dd class="dd3">
-  	Show compiled source but only Ruby code.
-			This is equivarent to '-E NoText'.
-  </dd>
-  <dt class="dt3"><b>
--N            </b></dt>
-  <dd class="dd3">
-  	Numbering: add line numbers. (for '-x/-X')
-  </dd>
-  <dt class="dt3"><b>
--U            </b></dt>
-  <dd class="dd3">
-  	Unique mode: zip empty lines into a line. (for '-x/-X')
-  </dd>
-  <dt class="dt3"><b>
--C            </b></dt>
-  <dd class="dd3">
-  	Compact: remove empty lines. (for '-x/-X')
-  </dd>
-  <dt class="dt3"><b>
--b            </b></dt>
-  <dd class="dd3">
-  	Body only: no preamble nor postamble. (for '-x/-X')
-			This is equivarent to '--preamble=false --postamble=false'.
-  </dd>
-  <dt class="dt3"><b>
--z            </b></dt>
-  <dd class="dd3">
-  	Syntax checking.
-  </dd>
-  <dt class="dt3"><b>
--e            </b></dt>
-  <dd class="dd3">
-  	Escape. This is equivarent to '-E Escape'.
-  </dd>
-  <dt class="dt3"><b>
--p pattern    </b></dt>
-  <dd class="dd3">
-  	Embedded pattern (default '<% %>').
-			This is equivarent to '--pattern=<em>pattern</em>'.
-  </dd>
-  <dt class="dt3"><b>
--l lang       </b></dt>
-  <dd class="dd3">
-  	Language name.
-			This option makes erubis command to compile script but no execute.
-  </dd>
-  <dt class="dt3"><b>
--E enhacers   </b></dt>
-  <dd class="dd3">
-  	Enhancer name (Escape, PercentLine, ...).
-			It is able to specify several enhancer name separating with ','
-			(ex. -f Escape,PercentLine,HeaderFooter).
-  </dd>
-  <dt class="dt3"><b>
--I path       </b></dt>
-  <dd class="dd3">
-  	Require library path ($:).
-			It is able to specify several paths separating with ','
-			(ex. -f path1,path2,path3).
-  </dd>
-  <dt class="dt3"><b>
--K kanji      </b></dt>
-  <dd class="dd3">
-  	Kanji code (euc, sjis, utf8, or none) (default none).
-  </dd>
-  <dt class="dt3"><b>
--f datafile   </b></dt>
-  <dd class="dd3">
-  	Context data file in YAML format ('*.yaml', '*.yml') or
-                        Ruby script ('*.rb').
-			It is able to specify several filenames separating with ','
-			(ex. -f file1,file2,file3).
-  </dd>
-  <dt class="dt3"><b>
--c context    </b></dt>
-  <dd class="dd3">
-  	Context data string in YAML inline style or Ruby code.
-  </dd>
-  <dt class="dt3"><b>
--T            </b></dt>
-  <dd class="dd3">
-  	Don't expand tab characters in YAML file.
-  </dd>
-  <dt class="dt3"><b>
--S            </b></dt>
-  <dd class="dd3">
-  	Convert mapping key from string to symbol in YAML file.
-  </dd>
-  <dt class="dt3"><b>
--B		   </b></dt>
-  <dd class="dd3">
-  	invoke Eruby#result() instead of Eruby#evaluate()
-  </dd>
-  <dt class="dt3"><b>
---pi[=name]   </b></dt>
-  <dd class="dd3">
-  	parse '<?name ... ?>' instead of '<% ... %>'
-  </dd>
-  <dt class="dt3"><b>
---trim=false  </b></dt>
-  <dd class="dd3">
-  	No trimming spaces around '<% %>'.
-  </dd>
-  </dl>
-<br>
-
-
-<a name="command-props"></a>
-<h3 class="section2">Properties</h3>
-<p>Some Eruby classes can take optional properties to change it's compile option.
-For example, property '--indent="  "' may change indentation of compiled source code.
-Try 'erubis -h' for details.
-</p>
-<br>
-
-
-<br>
-
-
-
-   </div>
-  </blockquote>
-
- </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/Makefile b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/Makefile
deleted file mode 100644
index 0868c96..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/Makefile
+++ /dev/null
@@ -1,53 +0,0 @@
-all = example.rb example.php example.c example.java example.scm example.pl example.js
-
-all:  $(all)
-
-example.rb:   example.eruby
-	erubis -l ruby example.eruby > example.rb
-
-
-example.php:  example.ephp
-	erubis -l php example.ephp > example.php
-
-example.c:    example.ec
-	erubis -bl c example.ec > example.c
-
-example.java: example.ejava
-	erubis -bl java example.ejava > example.java
-
-example.scm:  example.escheme
-	erubis -l scheme --func=display example.escheme > example.scm
-#	erubis -l scheme example.escheme > example.scm
-
-example.pl:   example.eperl
-	erubis -l perl example.eperl > example.pl
-
-example.js:   example.ejs
-	erubis -l javascript example.ejs > example.js
-
-
-###----------
-
-src = example.eruby example.ephp example.ec example.ejava example.escheme example.eperl example.ejs Makefile
-
-clean:
-	rm -f `ruby -e 'puts(Dir.glob("*.*") - %w[$(src)])'`
-#	rm -f $(all)
-
-compile:  example.bin example.class
-
-example.bin:   example.c
-	cc -o example.bin example.c
-
-example.class:  example.java
-	jikes example.java
-
-output:  $(all) example.bin example.class
-	erubis example.eruby > example.ruby.out
-	php example.php > example.php.out
-	./example.bin '<aaa>' 'b&b' '"ccc"' > example.c.out
-	java example > example.javexample.bin
-	gosh example.scm > example.scm.out
-#	guile example.scm > example.scm.out
-	perl example.pl > example.pl.out
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ec b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ec
deleted file mode 100644
index 589bdb0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ec
+++ /dev/null
@@ -1,42 +0,0 @@
-<%
-#include <stdio.h>
-
-void escape(char *str, FILE *out);
-
-int main(int argc, char *argv[])
-{
-    int i;
-
-%>
-<p>Hello <%== argv[0] %>!</p>
-<table>
-  <tbody>
-    <% for (i = 1; i < argc; i++) { %>
-    <tr bgcolor="<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>">
-      <td><%= "%d", i %></td>
-      <td><%== argv[i] %></td>
-    </tr>
-    <% } %>
-  </tbody>
-</table>
-<%
-
-    return 0; 
-}
-
-void escape(char *str, FILE *out)
-{
-    char *pch;
-    for (pch = str; *pch != '\0'; pch++) {
-        switch (*pch) {
-        case '&':   fputs("&",  out);  break;
-        case '>':   fputs(">",   out);  break;
-        case '<':   fputs("<",   out);  break;
-        case '"':   fputs(""", out);  break;
-        case '\'':  fputs("'", out);  break;
-        default:    fputc(*pch, out);
-        }
-    }
-}
-
-%>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ejava b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ejava
deleted file mode 100644
index 217295d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ejava
+++ /dev/null
@@ -1,45 +0,0 @@
-<%
-import java.util.*;
-
-public class example {
-
-  public static void main(String[] args) {
-    String user = "Erubis";
-    String[] list = { "<aaa>", "b&b", "\"ccc\"" };
-    StringBuffer _buf = new StringBuffer();
-%>
-<p>Hello <%== user %>!</p>
-<table>
-  <tbody>
-    <% for (int i = 0; i < list.length; i++) { %>
-    <tr bgcolor="<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>">
-      <td><%= i + 1 %></td>
-      <td><%== list[i] %></td>
-    </tr>
-    <% } %>
-  </tbody>
-</table>
-<%
-    System.out.print(_buf.toString());
-  }
-
-  public static String escape(String s) {
-    StringBuffer sb = new StringBuffer();
-    for (int i = 0; i < s.length(); i++) {
-      char ch = s.charAt(i);
-      switch (ch) {
-      case '<':   sb.append("<"); break;
-      case '>':   sb.append(">"); break;
-      case '&':   sb.append("&"); break;
-      case '"':   sb.append("""); break;
-      default:    sb.append(ch);
-      }
-    }
-    return sb.toString();
-  }
-
-  public static String escape(int i) {
-    return Integer.toString(i);
-  }
-}
-%>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ejs b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ejs
deleted file mode 100644
index 67b7b0c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ejs
+++ /dev/null
@@ -1,16 +0,0 @@
-<%
-   var user = 'Erubis';
-   var list = ['<aaa>', 'b&b', '"ccc"'];
- %>
-<p>Hello <%= user %>!</p>
-<table>
-  <tbody>
-    <% var i; %>
-    <% for (i = 0; i < list.length; i++) { %>
-    <tr bgcolor="<%= i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-      <td><%= i + 1 %></td>
-      <td><%= list[i] %></td>
-    </tr>
-    <% } %>
-  </tbody>
-</table>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.eperl b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.eperl
deleted file mode 100644
index f1261dd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.eperl
+++ /dev/null
@@ -1,16 +0,0 @@
-<%
-   my $user = 'Erubis';
-   my @list = ('<aaa>', 'b&b', '"ccc"');
-%>
-<p>Hello <%== $user %>!</p>
-<table>
-  <tbody>
-    <% $i = 0; %>
-    <% for $item (@list) { %>
-    <tr bgcolor=<%= ++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-      <td><%= $i %></td>
-      <td><%== $item %></td>
-    </tr>
-    <% } %>
-  </tbody>
-</table>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ephp b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ephp
deleted file mode 100644
index b45d62d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.ephp
+++ /dev/null
@@ -1,17 +0,0 @@
-<%
-   $user = "World";
-   $list = array('<aaa>', 'b&b', '"ccc"');
-%>
-<p>Hello <%= $user %>!</p>
-<table>
-  <tbody>
-    <% $i = 0 %>
-    <% foreach ($list as $item) { %>
-    <%   $i++; %>
-    <tr bgcolor="<%= $i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-      <td><%= $i %></td>
-      <td><%== $item %></td>
-    </tr>
-    <% } %>
-  </tbody>
-</table>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.eruby
deleted file mode 100644
index ee1ed13..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.eruby
+++ /dev/null
@@ -1,15 +0,0 @@
-<%
-   user = 'Erubis'
-   list = ['<aaa>', 'b&b', '"ccc"']
- %>
-<p>Hello <%= user %>!</p>
-<table>
-  <tbody>
-    <% list.each_with_index do |item, i| %>
-    <tr bgcolor="<%= i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-      <td><%= i + 1 %></td>
-      <td><%== item %></td>
-    </tr>
-    <% end %>
-  </tbody>
-</table>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.escheme b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.escheme
deleted file mode 100644
index 419ef77..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/basic/example.escheme
+++ /dev/null
@@ -1,26 +0,0 @@
-<%
-(let ((user "Erubis")
-      (items '("<aaa>" "b&b" "\"ccc\""))
-      (i 0))
- %>
-<p>Hello <%= user %>!</p>
-<table>
-  <tbody>
-<%
-  (for-each
-   (lambda (item)
-     (set! i (+ i 1))
- %>
-    <tr bgcolor="<%= (if (= (modulo i 2) 0) "#FFCCCC" "#CCCCFF") %>">
-      <td><%= i %></td>
-      <td><%= item %></td>
-    </tr>
-<%
-   ) ; lambda end
-   items) ; for-each end
- %>
-  </tbody>
-</table>
-<%
-) ; let end
-%>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/Makefile b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/Makefile
deleted file mode 100644
index de12772..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/Makefile
+++ /dev/null
@@ -1,54 +0,0 @@
-all = example.rb example.php example.c example.java example.scm example.pl example.js
-
-all:  $(all)
-
-example.rb:   example.eruby
-	erubis --pi -l ruby example.eruby > example.rb
-
-
-example.php:  example.ephp
-	erubis --pi -l php example.ephp > example.php
-
-example.c:    example.ec
-	erubis --pi -bl c example.ec > example.c
-
-example.java: example.ejava
-	erubis --pi -bl java example.ejava > example.java
-
-example.scm:  example.escheme
-	erubis --pi -l scheme --func=display example.escheme > example.scm
-#	erubis --pi -l scheme example.escheme > example.scm
-
-example.pl:   example.eperl
-	erubis --pi -l perl example.eperl > example.pl
-
-example.js:   example.ejs
-	erubis --pi -l javascript example.ejs > example.js
-
-
-###----------
-
-src = example.eruby example.ephp example.ec example.ejava example.escheme example.eperl example.ejs Makefile
-
-clean:
-	rm -f `ruby -e 'puts(Dir.glob("*.*") - %w[$(src)])'`
-#	rm -f $(all)
-
-compile:  example.bin example.class
-
-example.bin:   example.c
-	cc -o example.bin example.c
-
-example.class:  example.java
-	jikes example.java
-
-output:  $(all) example.bin example.class
-	erubis --pi example.eruby > example.ruby.result
-	#ruby example.rb > example.ruby.result
-	php example.php > example.php.result
-	./example.bin '<aaa>' 'b&b' '"ccc"' > example.c.result
-	java example > example.java.result
-	gosh example.scm > example.scm.result
-	#guile example.scm > example.scm.result
-	perl example.pl > example.pl.result
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ec b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ec
deleted file mode 100644
index ddec571..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ec
+++ /dev/null
@@ -1,42 +0,0 @@
-<?c
-#include <stdio.h>
-
-void escape(char *str, FILE *out);
-
-int main(int argc, char *argv[])
-{
-    int i;
-
-?>
-<p>Hello @!{argv[0]}@!</p>
-<table>
-  <tbody>
-    <?c for (i = 1; i < argc; i++) { ?>
-    <tr bgcolor="@{i % 2 == 0 ? "#FFCCCC" : "#CCCCFF"}@">
-      <td>@!{"%d", i}@</td>
-      <td>@{argv[i]}@</td>
-    </tr>
-    <?c } ?>
-  </tbody>
-</table>
-<?c
-
-    return 0; 
-}
-
-void escape(char *str, FILE *out)
-{
-    char *pch;
-    for (pch = str; *pch != '\0'; pch++) {
-        switch (*pch) {
-        case '&':   fputs("&",  out);  break;
-        case '>':   fputs(">",   out);  break;
-        case '<':   fputs("<",   out);  break;
-        case '"':   fputs(""", out);  break;
-        case '\'':  fputs("'", out);  break;
-        default:    fputc(*pch, out);
-        }
-    }
-}
-
-?>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ejava b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ejava
deleted file mode 100644
index beca150..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ejava
+++ /dev/null
@@ -1,45 +0,0 @@
-<?java
-import java.util.*;
-
-public class example {
-
-  public static void main(String[] args) {
-    String user = "Erubis";
-    String[] list = { "<aaa>", "b&b", "\"ccc\"" };
-    StringBuffer _buf = new StringBuffer();
-?>
-<p>Hello @{user}@!</p>
-<table>
-  <tbody>
-    <?java for (int i = 0; i < list.length; i++) { ?>
-    <tr bgcolor="@{i % 2 == 0 ? "#FFCCCC" : "#CCCCFF"}@">
-      <td>@!{i + 1}@</td>
-      <td>@{list[i]}@</td>
-    </tr>
-    <?java } ?>
-  </tbody>
-</table>
-<?java
-    System.out.print(_buf.toString());
-  }
-
-  public static String escape(String s) {
-    StringBuffer sb = new StringBuffer();
-    for (int i = 0; i < s.length(); i++) {
-      char ch = s.charAt(i);
-      switch (ch) {
-      case '<':   sb.append("<"); break;
-      case '>':   sb.append(">"); break;
-      case '&':   sb.append("&"); break;
-      case '"':   sb.append("""); break;
-      default:    sb.append(ch);
-      }
-    }
-    return sb.toString();
-  }
-
-  public static String escape(int i) {
-    return Integer.toString(i);
-  }
-}
-?>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ejs b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ejs
deleted file mode 100644
index f12ae42..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ejs
+++ /dev/null
@@ -1,16 +0,0 @@
-<?js
-   var user = 'Erubis';
-   var list = ['<aaa>', 'b&b', '"ccc"'];
- ?>
-<p>Hello @{user}@!</p>
-<table>
-  <tbody>
-    <?js var i; ?>
-    <?js for (i = 0; i < list.length; i++) { ?>
-    <tr bgcolor="@{i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'}@">
-      <td>@{i + 1}@</td>
-      <td>@{list[i]}@</td>
-    </tr>
-    <?js } ?>
-  </tbody>
-</table>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.eperl b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.eperl
deleted file mode 100644
index c115ed4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.eperl
+++ /dev/null
@@ -1,16 +0,0 @@
-<?perl
-   my $user = 'Erubis';
-   my @list = ('<aaa>', 'b&b', '"ccc"');
-?>
-<p>Hello @{$user}@!</p>
-<table>
-  <tbody>
-    <?perl $i = 0; ?>
-    <?perl for $item (@list) { ?>
-    <tr bgcolor=@!{++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'}@">
-      <td>@!{$i}@</td>
-      <td>@{$item}@</td>
-    </tr>
-    <?perl } ?>
-  </tbody>
-</table>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ephp b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ephp
deleted file mode 100644
index dbdd884..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.ephp
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-   $user = "World";
-   $list = array('<aaa>', 'b&b', '"ccc"');
-?>
-<p>Hello @{$user}@!</p>
-<table>
-  <tbody>
-    <?php $i = 0 ?>
-    <?php foreach ($list as $item) { ?>
-    <?php   $i++; ?>
-    <tr bgcolor="@!{$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'}@">
-      <td>@!{$i}@</td>
-      <td>@{$item}@</td>
-    </tr>
-    <?php } ?>
-  </tbody>
-</table>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.eruby
deleted file mode 100644
index 85218d1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.eruby
+++ /dev/null
@@ -1,15 +0,0 @@
-<?rb
-   user = 'Erubis'
-   list = ['<aaa>', 'b&b', '"ccc"']
- ?>
-<p>Hello @{user}@!</p>
-<table>
-  <tbody>
-    <?rb list.each_with_index do |item, i| ?>
-    <tr bgcolor="@!{i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'}@">
-      <td>@!{i + 1}@</td>
-      <td>@{item}@</td>
-    </tr>
-    <?rb end ?>
-  </tbody>
-</table>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.escheme b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.escheme
deleted file mode 100644
index 08b1cf5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/examples/pi/example.escheme
+++ /dev/null
@@ -1,26 +0,0 @@
-<?scheme
-(let ((user "Erubis")
-      (items '("<aaa>" "b&b" "\"ccc\""))
-      (i 0))
- ?>
-<p>Hello @!{user}@!</p>
-<table>
-  <tbody>
-<?scheme
-  (for-each
-   (lambda (item)
-     (set! i (+ i 1))
- ?>
-    <tr bgcolor="@!{(if (= (modulo i 2) 0) "#FFCCCC" "#CCCCFF")}@">
-      <td>@!{i}@</td>
-      <td>@!{item}@</td>
-    </tr>
-<?scheme
-   ) ; lambda end
-   items) ; for-each end
- ?>
-  </tbody>
-</table>
-<?scheme
-) ; let end
-?>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis.rb
deleted file mode 100644
index 6d34cfb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-##
-## $Rev: 99 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-##
-## an implementation of eRuby
-##
-## ex.
-##   input = <<'END'
-##    <ul>
-##     <% for item in @list %>
-##      <li><%= item %>
-##          <%== item %></li>
-##     <% end %>
-##    </ul>
-##   END
-##   list = ['<aaa>', 'b&b', '"ccc"']
-##   eruby = Erubis::Eruby.new(input)
-##   puts "--- code ---"
-##   puts eruby.src
-##   puts "--- result ---"
-##   context = Erubis::Context.new()   # or new(:list=>list)
-##   context[:list] = list
-##   puts eruby.evaluate(context)
-##
-## result:
-##   --- source ---
-##   _buf = ''; _buf << '<ul>
-##   ';  for item in @list 
-##    _buf << '  <li>'; _buf << ( item ).to_s; _buf << '
-##   '; _buf << '      '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</li>
-##   ';  end 
-##    _buf << '</ul>
-##   ';
-##   _buf.to_s
-##   --- result ---
-##    <ul>
-##      <li><aaa>
-##          <aaa></li>
-##      <li>b&b
-##          b&b</li>
-##      <li>"ccc"
-##          "ccc"</li>
-##    </ul>
-##
-
-
-module Erubis
-  VERSION = ('$Release: 2.6.2 $' =~ /([.\d]+)/) && $1
-end
-
-require 'erubis/engine'
-#require 'erubis/generator'
-#require 'erubis/converter'
-#require 'erubis/evaluator'
-#require 'erubis/error'
-#require 'erubis/context'
-require 'erubis/helper'
-require 'erubis/enhancer'
-#require 'erubis/tiny'
-require 'erubis/engine/eruby'
-#require 'erubis/engine/enhanced'    # enhanced eruby engines
-#require 'erubis/engine/optimized'   # generates optimized ruby code
-#require 'erubis/engine/ephp'
-#require 'erubis/engine/ec'
-#require 'erubis/engine/ejava'
-#require 'erubis/engine/escheme'
-#require 'erubis/engine/eperl'
-#require 'erubis/engine/ejavascript'
-
-require 'erubis/local-setting'
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/context.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/context.rb
deleted file mode 100644
index dffba0a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/context.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-
-module Erubis
-
-
-  ##
-  ## context object for Engine#evaluate
-  ##
-  ## ex.
-  ##   template = <<'END'
-  ##   Hello <%= @user %>!
-  ##   <% for item in @list %>
-  ##    - <%= item %>
-  ##   <% end %>
-  ##   END
-  ##
-  ##   context = Erubis::Context.new(:user=>'World', :list=>['a','b','c'])
-  ##   # or
-  ##   # context = Erubis::Context.new
-  ##   # context[:user] = 'World'
-  ##   # context[:list] = ['a', 'b', 'c']
-  ##
-  ##   eruby = Erubis::Eruby.new(template)
-  ##   print eruby.evaluate(context)
-  ##
-  class Context
-    include Enumerable
-
-    def initialize(hash=nil)
-      hash.each do |name, value|
-        self[name] = value
-      end if hash
-    end
-
-    def [](key)
-      return instance_variable_get("@#{key}")
-    end
-
-    def []=(key, value)
-      return instance_variable_set("@#{key}", value)
-    end
-
-    def keys
-      return instance_variables.collect { |name| name[1..-1] }
-    end
-
-    def each
-      instance_variables.each do |name|
-        key = name[1..-1]
-        value = instance_variable_get(name)
-        yield(key, value)
-      end
-    end
-
-    def to_hash
-      hash = {}
-      self.keys.each { |key| hash[key] = self[key] }
-      return hash
-    end
-
-    def update(context_or_hash)
-      arg = context_or_hash
-      if arg.is_a?(Hash)
-        arg.each do |key, val|
-          self[key] = val
-        end
-      else
-        arg.instance_variables.each do |varname|
-          key = varname[1..-1]
-          val = arg.instance_variable_get(varname)
-          self[key] = val
-        end
-      end
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/converter.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/converter.rb
deleted file mode 100644
index 7206168..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/converter.rb
+++ /dev/null
@@ -1,358 +0,0 @@
-##
-## $Rev: 115 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'abstract'
-
-module Erubis
-
-
-  ##
-  ## convert
-  ##
-  module Converter
-
-    attr_accessor :preamble, :postamble, :escape
-
-    def self.supported_properties    # :nodoc:
-      return [
-              [:preamble,  nil,    "preamble (no preamble when false)"],
-              [:postamble, nil,    "postamble (no postamble when false)"],
-              [:escape,    nil,    "escape expression or not in default"],
-             ]
-    end
-
-    def init_converter(properties={})
-      @preamble  = properties[:preamble]
-      @postamble = properties[:postamble]
-      @escape    = properties[:escape]
-    end
-
-    ## convert input string into target language
-    def convert(input)
-      codebuf = ""    # or []
-      @preamble.nil? ? add_preamble(codebuf) : (@preamble && (codebuf << @preamble))
-      convert_input(codebuf, input)
-      @postamble.nil? ? add_postamble(codebuf) : (@postamble && (codebuf << @postamble))
-      @_proc = nil    # clear cached proc object
-      return codebuf  # or codebuf.join()
-    end
-
-    protected
-
-    ##
-    ## detect spaces at beginning of line
-    ##
-    def detect_spaces_at_bol(text, is_bol)
-      lspace = nil
-      if text.empty?
-        lspace = "" if is_bol
-      elsif text[-1] == ?\n
-        lspace = ""
-      else
-        rindex = text.rindex(?\n)
-        if rindex
-          s = text[rindex+1..-1]
-          if s =~ /\A[ \t]*\z/
-            lspace = s
-            #text = text[0..rindex]
-            text[rindex+1..-1] = ''
-          end
-        else
-          if is_bol && text =~ /\A[ \t]*\z/
-            #lspace = text
-            #text = nil
-            lspace = text.dup
-            text[0..-1] = ''
-          end
-        end
-      end
-      return lspace
-    end
-
-    ##
-    ## (abstract) convert input to code
-    ##
-    def convert_input(codebuf, input)
-      not_implemented
-    end
-
-  end
-
-
-  module Basic
-  end
-
-
-  ##
-  ## basic converter which supports '<% ... %>' notation.
-  ##
-  module Basic::Converter
-    include Erubis::Converter
-
-    def self.supported_properties    # :nodoc:
-      return [
-              [:pattern,  '<% %>', "embed pattern"],
-              [:trim,      true,   "trim spaces around <% ... %>"],
-             ]
-    end
-
-    attr_accessor :pattern, :trim
-
-    def init_converter(properties={})
-      super(properties)
-      @pattern = properties[:pattern]
-      @trim    = properties[:trim] != false
-    end
-
-    protected
-
-    ## return regexp of pattern to parse eRuby script
-    def pattern_regexp(pattern)
-      @prefix, @postfix = pattern.split()   # '<% %>' => '<%', '%>'
-      #return /(.*?)(^[ \t]*)?#{@prefix}(=+|\#)?(.*?)-?#{@postfix}([ \t]*\r?\n)?/m
-      #return /(^[ \t]*)?#{@prefix}(=+|\#)?(.*?)-?#{@postfix}([ \t]*\r?\n)?/m
-      return /#{@prefix}(=+|-|\#|%)?(.*?)([-=])?#{@postfix}([ \t]*\r?\n)?/m
-    end
-    module_function :pattern_regexp
-
-    #DEFAULT_REGEXP = /(.*?)(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
-    #DEFAULT_REGEXP = /(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
-    #DEFAULT_REGEXP = /<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
-    DEFAULT_REGEXP = pattern_regexp('<% %>')
-
-    public
-
-    def convert_input(src, input)
-      pat = @pattern
-      regexp = pat.nil? || pat == '<% %>' ? DEFAULT_REGEXP : pattern_regexp(pat)
-      pos = 0
-      is_bol = true     # is beginning of line
-      input.scan(regexp) do |indicator, code, tailch, rspace|
-        match = Regexp.last_match()
-        len  = match.begin(0) - pos
-        text = input[pos, len]
-        pos  = match.end(0)
-        ch   = indicator ? indicator[0] : nil
-        lspace = ch == ?= ? nil : detect_spaces_at_bol(text, is_bol)
-        is_bol = rspace ? true : false
-        add_text(src, text) if text && !text.empty?
-        ## * when '<%= %>', do nothing
-        ## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
-        if ch == ?=              # <%= %>
-          rspace = nil if tailch && !tailch.empty?
-          add_text(src, lspace) if lspace
-          add_expr(src, code, indicator)
-          add_text(src, rspace) if rspace
-        elsif ch == ?\#          # <%# %>
-          n = code.count("\n") + (rspace ? 1 : 0)
-          if @trim && lspace && rspace
-            add_stmt(src, "\n" * n)
-          else
-            add_text(src, lspace) if lspace
-            add_stmt(src, "\n" * n)
-            add_text(src, rspace) if rspace
-          end
-        elsif ch == ?%           # <%% %>
-          s = "#{lspace}#{@prefix||='<%'}#{code}#{tailch}#{@postfix||='%>'}#{rspace}"
-          add_text(src, s)
-        else                     # <% %>
-          if @trim && lspace && rspace
-            add_stmt(src, "#{lspace}#{code}#{rspace}")
-          else
-            add_text(src, lspace) if lspace
-            add_stmt(src, code)
-            add_text(src, rspace) if rspace
-          end
-        end
-      end
-      #rest = $' || input                        # ruby1.8
-      rest = pos == 0 ? input : input[pos..-1]   # ruby1.9
-      add_text(src, rest)
-    end
-
-    ## add expression code to src
-    def add_expr(src, code, indicator)
-      case indicator
-      when '='
-        @escape ? add_expr_escaped(src, code) : add_expr_literal(src, code)
-      when '=='
-        @escape ? add_expr_literal(src, code) : add_expr_escaped(src, code)
-      when '==='
-        add_expr_debug(src, code)
-      end
-    end
-
-  end
-
-
-  module PI
-  end
-
-  ##
-  ## Processing Instructions (PI) converter for XML.
-  ## this class converts '<?rb ... ?>' and '${...}' notation.
-  ##
-  module PI::Converter
-    include Erubis::Converter
-
-    def self.desc   # :nodoc:
-      "use processing instructions (PI) instead of '<% %>'"
-    end
-
-    def self.supported_properties    # :nodoc:
-      return [
-              [:trim,      true,   "trim spaces around <% ... %>"],
-              [:pi,        'rb',   "PI (Processing Instrunctions) name"],
-              [:embchar,   '@',    "char for embedded expression pattern('@{...}@')"],
-              [:pattern,  '<% %>', "embed pattern"],
-             ]
-    end
-
-    attr_accessor :pi, :prefix
-
-    def init_converter(properties={})
-      super(properties)
-      @trim    = properties.fetch(:trim, true)
-      @pi      = properties[:pi] if properties[:pi]
-      @embchar = properties[:embchar] || '@'
-      @pattern = properties[:pattern]
-      @pattern = '<% %>' if @pattern.nil?  #|| @pattern == true
-    end
-
-    def convert(input)
-      code = super(input)
-      return @header || @footer ? "#{@header}#{code}#{@footer}" : code
-    end
-
-    protected
-
-    def convert_input(codebuf, input)
-      unless @regexp
-        @pi ||= 'e'
-        ch = Regexp.escape(@embchar)
-        if @pattern
-          left, right = @pattern.split(' ')
-          @regexp = /<\?#{@pi}(?:-(\w+))?(\s.*?)\?>([ \t]*\r?\n)?|#{ch}(!*)?\{(.*?)\}#{ch}|#{left}(=+)(.*?)#{right}/m
-        else
-          @regexp = /<\?#{@pi}(?:-(\w+))?(\s.*?)\?>([ \t]*\r?\n)?|#{ch}(!*)?\{(.*?)\}#{ch}/m
-        end
-      end
-      #
-      is_bol = true
-      pos = 0
-      input.scan(@regexp) do |pi_arg, stmt, rspace,
-                              indicator1, expr1, indicator2, expr2|
-        match = Regexp.last_match
-        len = match.begin(0) - pos
-        text = input[pos, len]
-        pos = match.end(0)
-        lspace = stmt ? detect_spaces_at_bol(text, is_bol) : nil
-        is_bol = stmt && rspace ? true : false
-        add_text(codebuf, text) # unless text.empty?
-        #
-        if stmt
-          if @trim && lspace && rspace
-            add_pi_stmt(codebuf, "#{lspace}#{stmt}#{rspace}", pi_arg)
-          else
-            add_text(codebuf, lspace) if lspace
-            add_pi_stmt(codebuf, stmt, pi_arg)
-            add_text(codebuf, rspace) if rspace
-          end
-        else
-          add_pi_expr(codebuf, expr1 || expr2, indicator1 || indicator2)
-        end
-      end
-      #rest = $' || input                        # ruby1.8
-      rest = pos == 0 ? input : input[pos..-1]   # ruby1.9
-      add_text(codebuf, rest)
-    end
-
-    #--
-    #def convert_input(codebuf, input)
-    #  parse_stmts(codebuf, input)
-    #  #parse_stmts2(codebuf, input)
-    #end
-    #
-    #def parse_stmts(codebuf, input)
-    #  #regexp = pattern_regexp(@pattern)
-    #  @pi ||= 'e'
-    #  @stmt_pattern ||= /<\?#{@pi}(?:-(\w+))?(\s.*?)\?>([ \t]*\r?\n)?/m
-    #  is_bol = true
-    #  pos = 0
-    #  input.scan(@stmt_pattern) do |pi_arg, code, rspace|
-    #    match = Regexp.last_match
-    #    len  = match.begin(0) - pos
-    #    text = input[pos, len]
-    #    pos  = match.end(0)
-    #    lspace = detect_spaces_at_bol(text, is_bol)
-    #    is_bol = rspace ? true : false
-    #    parse_exprs(codebuf, text) # unless text.empty?
-    #    if @trim && lspace && rspace
-    #      add_pi_stmt(codebuf, "#{lspace}#{code}#{rspace}", pi_arg)
-    #    else
-    #      add_text(codebuf, lspace)
-    #      add_pi_stmt(codebuf, code, pi_arg)
-    #      add_text(codebuf, rspace)
-    #    end
-    #  end
-    #  rest = $' || input
-    #  parse_exprs(codebuf, rest)
-    #end
-    #
-    #def parse_exprs(codebuf, input)
-    #  unless @expr_pattern
-    #    ch = Regexp.escape(@embchar)
-    #    if @pattern
-    #      left, right = @pattern.split(' ')
-    #      @expr_pattern = /#{ch}(!*)?\{(.*?)\}#{ch}|#{left}(=+)(.*?)#{right}/
-    #    else
-    #      @expr_pattern = /#{ch}(!*)?\{(.*?)\}#{ch}/
-    #    end
-    #  end
-    #  pos = 0
-    #  input.scan(@expr_pattern) do |indicator1, code1, indicator2, code2|
-    #    indicator = indicator1 || indicator2
-    #    code = code1 || code2
-    #    match = Regexp.last_match
-    #    len  = match.begin(0) - pos
-    #    text = input[pos, len]
-    #    pos  = match.end(0)
-    #    add_text(codebuf, text) # unless text.empty?
-    #    add_pi_expr(codebuf, code, indicator)
-    #  end
-    #  rest = $' || input
-    #  add_text(codebuf, rest)
-    #end
-    #++
-
-    def add_pi_stmt(codebuf, code, pi_arg)  # :nodoc:
-      case pi_arg
-      when nil      ;  add_stmt(codebuf, code)
-      when 'header' ;  @header = code
-      when 'footer' ;  @footer = code
-      when 'comment';  add_stmt(codebuf, "\n" * code.count("\n"))
-      when 'value'  ;  add_expr_literal(codebuf, code)
-      else          ;  add_stmt(codebuf, code)
-      end
-    end
-
-    def add_pi_expr(codebuf, code, indicator)  # :nodoc:
-      case indicator
-      when nil, '', '=='    # @{...}@ or <%== ... %>
-        @escape == false ? add_expr_literal(codebuf, code) : add_expr_escaped(codebuf, code)
-      when '!', '='         # @!{...}@ or <%= ... %>
-        @escape == false ? add_expr_escaped(codebuf, code) : add_expr_literal(codebuf, code)
-      when '!!', '==='      # @!!{...}@ or <%=== ... %>
-        add_expr_debug(codebuf, code)
-      else
-        # ignore
-      end
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine.rb
deleted file mode 100644
index 8f07386..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine.rb
+++ /dev/null
@@ -1,121 +0,0 @@
-##
-## $Rev: 104 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-
-require 'erubis/generator'
-require 'erubis/converter'
-require 'erubis/evaluator'
-require 'erubis/context'
-
-
-module Erubis
-
-
-  ##
-  ## (abstract) abstract engine class.
-  ## subclass must include evaluator and converter module.
-  ##
-  class Engine
-    #include Evaluator
-    #include Converter
-    #include Generator
-
-    def initialize(input=nil, properties={})
-      #@input = input
-      init_generator(properties)
-      init_converter(properties)
-      init_evaluator(properties)
-      @src    = convert(input) if input
-    end
-
-
-    ##
-    ## convert input string and set it to @src
-    ##
-    def convert!(input)
-      @src = convert(input)
-    end
-
-
-    ##
-    ## load file, write cache file, and return engine object.
-    ## this method create code cache file automatically.
-    ## cachefile name can be specified with properties[:cachename],
-    ## or filname + 'cache' is used as default.
-    ##
-    def self.load_file(filename, properties={})
-      cachename = properties[:cachename] || (filename + '.cache')
-      properties[:filename] = filename
-      if test(?f, cachename) && File.mtime(filename) <= File.mtime(cachename)
-        engine = self.new(nil, properties)
-        engine.src = File.read(cachename)
-      else
-        input = File.open(filename, 'rb') {|f| f.read }
-        engine = self.new(input, properties)
-        File.open(cachename, 'wb') do |f|
-          f.flock(File::LOCK_EX)
-          f.write(engine.src)
-          f.flush()
-        end
-      end
-      engine.src.untaint   # ok?
-      return engine
-    end
-
-
-    ##
-    ## helper method to convert and evaluate input text with context object.
-    ## context may be Binding, Hash, or Object.
-    ##
-    def process(input, context=nil, filename=nil)
-      code = convert(input)
-      filename ||= '(erubis)'
-      if context.is_a?(Binding)
-        return eval(code, context, filename)
-      else
-        context = Context.new(context) if context.is_a?(Hash)
-        return context.instance_eval(code, filename)
-      end
-    end
-
-
-    ##
-    ## helper method evaluate Proc object with contect object.
-    ## context may be Binding, Hash, or Object.
-    ##
-    def process_proc(proc_obj, context=nil, filename=nil)
-      if context.is_a?(Binding)
-        filename ||= '(erubis)'
-        return eval(proc_obj, context, filename)
-      else
-        context = Context.new(context) if context.is_a?(Hash)
-        return context.instance_eval(&proc_obj)
-      end
-    end
-
-
-  end  # end of class Engine
-
-
-  ##
-  ## (abstract) base engine class for Eruby, Eperl, Ejava, and so on.
-  ## subclass must include generator.
-  ##
-  class Basic::Engine < Engine
-    include Evaluator
-    include Basic::Converter
-    include Generator
-  end
-
-
-  class PI::Engine < Engine
-    include Evaluator
-    include PI::Converter
-    include Generator
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ec.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ec.rb
deleted file mode 100644
index 0b4ee64..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ec.rb
+++ /dev/null
@@ -1,118 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/engine'
-require 'erubis/enhancer'
-
-
-module Erubis
-
-
-  module CGenerator
-    include Generator
-
-    def self.supported_properties()  # :nodoc:
-      return [
-              [:indent, '',       "indent spaces (ex. '  ')"],
-              [:out,    'stdout', "output file pointer name"],
-            ]
-    end
-
-    def init_generator(properties={})
-      super
-      @escapefunc ||= "escape"
-      @indent = properties[:indent] || ''
-      @out = properties[:out] || 'stdout'
-    end
-
-    def add_preamble(src)
-      src << "#line 1 \"#{self.filename}\"\n" if self.filename
-    end
-
-    def escape_text(text)
-      @@table_ ||= { "\r"=>"\\r", "\n"=>"\\n", "\t"=>"\\t", '"'=>'\\"', "\\"=>"\\\\" }
-      text.gsub!(/[\r\n\t"\\]/) { |m| @@table_[m] }
-      return text
-    end
-
-    def escaped_expr(code)
-      return "#{@escapefunc}(#{code.strip}, #{@out})"
-    end
-
-    def add_text(src, text)
-      return if text.empty?
-      src << (src.empty? || src[-1] == ?\n ? @indent : ' ')
-      src << "fputs("
-      i = 0
-      text.each_line do |line|
-        src << "\n" << @indent << '      ' if i > 0
-        i += 1
-        src << '"' << escape_text(line) << '"'
-      end
-      src << ", #{@out});"   #<< (text[-1] == ?\n ? "\n" : "")
-      src << "\n" if text[-1] == ?\n
-    end
-
-    def add_stmt(src, code)
-      src << code
-    end
-
-    def add_expr_literal(src, code)
-      src << @indent if src.empty? || src[-1] == ?\n
-      src << " fprintf(#{@out}, " << code.strip << ');'
-    end
-
-    def add_expr_escaped(src, code)
-      src << @indent if src.empty? || src[-1] == ?\n
-      src << ' ' << escaped_expr(code) << ';'
-    end
-
-    def add_expr_debug(src, code)
-      code.strip!
-      s = nil
-      if code =~ /\A\".*?\"\s*,\s*(.*)/
-        s = $1.gsub(/[%"]/, '\\\1') + '='
-      end
-      src << @indent if src.empty? || src[-1] == ?\n
-      src << " fprintf(stderr, \"*** debug: #{s}\" #{code});"
-    end
-
-    def add_postamble(src)
-      # empty
-    end
-
-  end
-
-
-  ##
-  ## engine for C
-  ##
-  class Ec < Basic::Engine
-    include CGenerator
-  end
-
-
-  class EscapedEc < Ec
-    include EscapeEnhancer
-  end
-
-
-  #class XmlEc < Ec
-  #  include EscapeEnhancer
-  #end
-
-  class PI::Ec < PI::Engine
-    include CGenerator
-
-    def init_converter(properties={})
-      @pi = 'c'
-      super(properties)
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ejava.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ejava.rb
deleted file mode 100644
index e8ab22e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ejava.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/engine'
-require 'erubis/enhancer'
-
-
-module Erubis
-
-
-  module JavaGenerator
-    include Generator
-
-    def self.supported_properties()   # :nodoc:
-      return [
-              [:indent,   '',       "indent spaces (ex. '  ')"],
-              [:buf,      '_buf',   "output buffer name"],
-              [:bufclass, 'StringBuffer', "output buffer class (ex. 'StringBuilder')"],
-            ]
-    end
-
-    def init_generator(properties={})
-      super
-      @escapefunc ||= 'escape'
-      @indent = properties[:indent] || ''
-      @buf = properties[:buf] || '_buf'
-      @bufclass = properties[:bufclass] || 'StringBuffer'
-    end
-
-    def add_preamble(src)
-      src << "#{@indent}#{@bufclass} #{@buf} = new #{@bufclass}();"
-    end
-
-    def escape_text(text)
-      @@table_ ||= { "\r"=>"\\r", "\n"=>"\\n", "\t"=>"\\t", '"'=>'\\"', "\\"=>"\\\\" }
-      return text.gsub!(/[\r\n\t"\\]/) { |m| @@table_[m] } || text
-    end
-
-    def add_text(src, text)
-      return if text.empty?
-      src << (src.empty? || src[-1] == ?\n ? @indent : ' ')
-      src << @buf << ".append("
-      i = 0
-      text.each_line do |line|
-        src << "\n" << @indent << '          + ' if i > 0
-        i += 1
-        src << '"' << escape_text(line) << '"'
-      end
-      src << ");" << (text[-1] == ?\n ? "\n" : "")
-    end
-
-    def add_stmt(src, code)
-      src << code
-    end
-
-    def add_expr_literal(src, code)
-      src << @indent if src.empty? || src[-1] == ?\n
-      code.strip!
-      src << " #{@buf}.append(#{code});"
-    end
-
-    def add_expr_escaped(src, code)
-      add_expr_literal(src, escaped_expr(code))
-    end
-
-    def add_expr_debug(src, code)
-      code.strip!
-      src << @indent if src.empty? || src[-1] == ?\n
-      src << " System.err.println(\"*** debug: #{code}=\"+(#{code}));"
-    end
-
-    def add_postamble(src)
-      src << "\n" if src[-1] == ?;
-      src << @indent << "return " << @buf << ".toString();\n"
-      #src << @indent << "System.out.print(" << @buf << ".toString());\n"
-    end
-
-  end
-
-
-  ##
-  ## engine for Java
-  ##
-  class Ejava < Basic::Engine
-    include JavaGenerator
-  end
-
-
-  class EscapedEjava < Ejava
-    include EscapeEnhancer
-  end
-
-
-  #class XmlEjava < Ejava
-  #  include EscapeEnhancer
-  #end
-
-  class PI::Ejava < PI::Engine
-    include JavaGenerator
-
-    def init_converter(properties={})
-      @pi = 'java'
-      super(properties)
-    end
-
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ejavascript.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ejavascript.rb
deleted file mode 100644
index df74b02..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ejavascript.rb
+++ /dev/null
@@ -1,120 +0,0 @@
-##
-## $Rev: 95 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/engine'
-require 'erubis/enhancer'
-
-
-module Erubis
-
-
-  module JavascriptGenerator
-    include Generator
-
-    def self.supported_properties()   # :nodoc:
-      list = []
-      #list << [:indent,   '',       "indent spaces (ex. '  ')"]
-      #list << [:buf,      '_buf',   "output buffer name"]
-      list << [:docwrite, true,     "use 'document.write()' when true"]
-      return list
-    end
-
-    def init_generator(properties={})
-      super
-      @escapefunc ||= 'escape'
-      @indent = properties[:indent] || ''
-      @buf = properties[:out] || '_buf'
-      @docwrite = properties[:docwrite] != false  # '!= false' will be removed in the next release
-    end
-
-    def add_preamble(src)
-      src << "#{@indent}var #{@buf} = [];"
-    end
-
-    def escape_text(text)
-      @@table_ ||= { "\r"=>"\\r", "\n"=>"\\n\\\n", "\t"=>"\\t", '"'=>'\\"', "\\"=>"\\\\" }
-      return text.gsub!(/[\r\n\t"\\]/) { |m| @@table_[m] } || text
-    end
-
-    def add_indent(src, indent)
-      src << (src.empty? || src[-1] == ?\n ? indent : ' ')
-    end
-
-    def add_text(src, text)
-      return if text.empty?
-      add_indent(src, @indent)
-      src << @buf << '.push("'
-      s = escape_text(text)
-      if s[-1] == ?\n
-        s[-2, 2] = ''
-        src << s << "\");\n"
-      else
-        src << s << "\");"
-      end
-    end
-
-    def add_stmt(src, code)
-      src << code
-    end
-
-    def add_expr_literal(src, code)
-      add_indent(src, @indent)
-      code.strip!
-      src << "#{@buf}.push(#{code});"
-    end
-
-    def add_expr_escaped(src, code)
-      add_expr_literal(src, escaped_expr(code))
-    end
-
-    def add_expr_debug(src, code)
-      add_indent(src, @indent)
-      code.strip!
-      src << "alert(\"*** debug: #{code}=\"+(#{code}));"
-    end
-
-    def add_postamble(src)
-      src << "\n" if src[-1] == ?;
-      if @docwrite
-        src << @indent << 'document.write(' << @buf << ".join(\"\"));\n"
-      else
-        src << @indent << @buf << ".join(\"\");\n"
-      end
-    end
-
-  end
-
-
-  ##
-  ## engine for JavaScript
-  ##
-  class Ejavascript < Basic::Engine
-    include JavascriptGenerator
-  end
-
-
-  class EscapedEjavascript < Ejavascript
-    include EscapeEnhancer
-  end
-
-
-  #class XmlEjavascript < Ejavascript
-  #  include EscapeEnhancer
-  #end
-
-
-  class PI::Ejavascript < PI::Engine
-    include JavascriptGenerator
-
-    def init_converter(properties={})
-      @pi = 'js'
-      super(properties)
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/enhanced.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/enhanced.rb
deleted file mode 100644
index ff40362..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/enhanced.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/enhancer'
-require 'erubis/engine/eruby'
-
-
-module Erubis
-
-
-  #--
-  ## moved to engine/ruby.rb
-  #class EscapedEruby < Eruby
-  #  include EscapeEnhancer
-  #end
-  #++
-
-
-  #--
-  ### (obsolete)
-  #class FastEruby < Eruby
-  #  include FastEnhancer
-  #end
-  #++
-
-
-  class StdoutEruby < Eruby
-    include StdoutEnhancer
-  end
-
-
-  class PrintOutEruby < Eruby
-    include PrintOutEnhancer
-  end
-
-
-  class PrintEnabledEruby < Eruby
-    include PrintEnabledEnhancer
-  end
-
-
-  class ArrayEruby < Eruby
-    include ArrayEnhancer
-  end
-
-
-  class ArrayBufferEruby < Eruby
-    include ArrayBufferEnhancer
-  end
-
-
-  class StringBufferEruby < Eruby
-    include StringBufferEnhancer
-  end
-
-
-  class StringIOEruby < Eruby
-    include StringIOEnhancer
-  end
-
-
-  class ErboutEruby < Eruby
-    include ErboutEnhancer
-  end
-
-
-  class NoTextEruby < Eruby
-    include NoTextEnhancer
-  end
-
-
-  class NoCodeEruby < Eruby
-    include NoCodeEnhancer
-  end
-
-
-  class SimplifiedEruby < Eruby
-    include SimplifyEnhancer
-  end
-
-
-  class StdoutSimplifiedEruby < Eruby
-    include StdoutEnhancer
-    include SimplifyEnhancer
-  end
-
-
-  class PrintOutSimplifiedEruby < Eruby
-    include PrintOutEnhancer
-    include SimplifyEnhancer
-  end
-
-
-  class BiPatternEruby < Eruby
-    include BiPatternEnhancer
-  end
-
-
-  class PercentLineEruby < Eruby
-    include PercentLineEnhancer
-  end
-
-
-  class HeaderFooterEruby < Eruby
-    include HeaderFooterEnhancer
-  end
-
-
-  class DeleteIndentEruby < Eruby
-    include DeleteIndentEnhancer
-  end
-
-
-  class InterpolationEruby < Eruby
-    include InterpolationEnhancer
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/eperl.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/eperl.rb
deleted file mode 100644
index 2d8c9aa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/eperl.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/engine'
-require 'erubis/enhancer'
-
-
-module Erubis
-
-
-  module PerlGenerator
-    include Generator
-
-    def self.supported_properties()  # :nodoc:
-      return [
-              [:func, 'print', "function name"],
-              ]
-    end
-
-    def init_generator(properties={})
-      super
-      @escapefunc ||= 'encode_entities'
-      @func = properties[:func] || 'print'
-    end
-
-    def add_preamble(src)
-      src << "use HTML::Entities; ";
-    end
-
-    def escape_text(text)
-      return text.gsub!(/['\\]/, '\\\\\&') || text
-    end
-
-    def add_text(src, text)
-      src << @func << "('" << escape_text(text) << "'); " unless text.empty?
-    end
-
-    def add_expr_literal(src, code)
-      code.strip!
-      src << @func << "(" << code << "); "
-    end
-
-    def add_expr_escaped(src, code)
-      add_expr_literal(src, escaped_expr(code))
-    end
-
-    def add_expr_debug(src, code)
-      code.strip!
-      s = code.gsub(/\'/, "\\'")
-      src << @func << "('*** debug: #{code}=', #{code}, \"\\n\");"
-    end
-
-    def add_stmt(src, code)
-      src << code
-    end
-
-    def add_postamble(src)
-      src << "\n" unless src[-1] == ?\n
-    end
-
-  end
-
-
-  ##
-  ## engine for Perl
-  ##
-  class Eperl < Basic::Engine
-    include PerlGenerator
-  end
-
-
-  class EscapedEperl < Eperl
-    include EscapeEnhancer
-  end
-
-
-  #class XmlEperl < Eperl
-  #  include EscapeEnhancer
-  #end
-
-
-  class PI::Eperl < PI::Engine
-    include PerlGenerator
-
-    def init_converter(properties={})
-      @pi = 'perl'
-      super(properties)
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ephp.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ephp.rb
deleted file mode 100644
index 557897b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/ephp.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/engine'
-require 'erubis/enhancer'
-
-
-module Erubis
-
-
-  module PhpGenerator
-    include Generator
-
-    def self.supported_properties()  # :nodoc:
-      return []
-    end
-
-    def init_generator(properties={})
-      super
-      @escapefunc ||= 'htmlspecialchars'
-    end
-
-    def add_preamble(src)
-      # empty
-    end
-
-    def escape_text(text)
-      return text.gsub!(/<\?xml\b/, '<<?php ?>?xml') || text
-    end
-
-    def add_text(src, text)
-      src << escape_text(text)
-    end
-
-    def add_expr_literal(src, code)
-      code.strip!
-      src << "<?php echo #{code}; ?>"
-    end
-
-    def add_expr_escaped(src, code)
-      add_expr_literal(src, escaped_expr(code))
-    end
-
-    def add_expr_debug(src, code)
-      code.strip!
-      s = code.gsub(/\'/, "\\'")
-      src << "<?php error_log('*** debug: #{s}='.(#{code}), 0); ?>"
-    end
-
-    def add_stmt(src, code)
-      src << "<?php"
-      src << " " if code[0] != ?\ #
-      if code[-1] == ?\n
-        code.chomp!
-        src << code << "?>\n"
-      else
-        src << code << "?>"
-      end
-    end
-
-    def add_postamble(src)
-      # empty
-    end
-
-  end
-
-
-  ##
-  ## engine for PHP
-  ##
-  class Ephp < Basic::Engine
-    include PhpGenerator
-  end
-
-
-  class EscapedEphp < Ephp
-    include EscapeEnhancer
-  end
-
-
-  #class XmlEphp < Ephp
-  #  include EscapeEnhancer
-  #end
-
-
-  class PI::Ephp < PI::Engine
-    include PhpGenerator
-
-    def init_converter(properties={})
-      @pi = 'php'
-      super(properties)
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/eruby.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/eruby.rb
deleted file mode 100644
index 8bf3973..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/eruby.rb
+++ /dev/null
@@ -1,125 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/engine'
-require 'erubis/enhancer'
-
-
-module Erubis
-
-
-  ##
-  ## code generator for Ruby
-  ##
-  module RubyGenerator
-    include Generator
-    #include ArrayBufferEnhancer
-    include StringBufferEnhancer
-
-    def init_generator(properties={})
-      super
-      @escapefunc ||= "Erubis::XmlHelper.escape_xml"
-    end
-
-    def self.supported_properties()  # :nodoc:
-      return []
-    end
-
-    def escape_text(text)
-      text.gsub(/['\\]/, '\\\\\&')   # "'" => "\\'",  '\\' => '\\\\'
-    end
-
-    def escaped_expr(code)
-      return "#{@escapefunc}(#{code})"
-    end
-
-    #--
-    #def add_preamble(src)
-    #  src << "_buf = [];"
-    #end
-    #++
-
-    def add_text(src, text)
-      src << " _buf << '" << escape_text(text) << "';" unless text.empty?
-    end
-
-    def add_stmt(src, code)
-      #src << code << ';'
-      src << code
-      src << ';' unless code[-1] == ?\n
-    end
-
-    def add_expr_literal(src, code)
-      src << ' _buf << (' << code << ').to_s;'
-    end
-
-    def add_expr_escaped(src, code)
-      src << ' _buf << ' << escaped_expr(code) << ';'
-    end
-
-    def add_expr_debug(src, code)
-      code.strip!
-      s = (code.dump =~ /\A"(.*)"\z/) && $1
-      src << ' $stderr.puts("*** debug: ' << s << '=#{(' << code << ').inspect}");'
-    end
-
-    #--
-    #def add_postamble(src)
-    #  src << "\n_buf.join\n"
-    #end
-    #++
-
-  end
-
-
-  ##
-  ## engine for Ruby
-  ##
-  class Eruby < Basic::Engine
-    include RubyEvaluator
-    include RubyGenerator
-  end
-
-
-  ##
-  ## fast engine for Ruby
-  ##
-  class FastEruby < Eruby
-    include InterpolationEnhancer
-  end
-
-
-  ##
-  ## swtich '<%= %>' to escaped and '<%== %>' to not escaped
-  ##
-  class EscapedEruby < Eruby
-    include EscapeEnhancer
-  end
-
-
-  ##
-  ## sanitize expression (<%= ... %>) by default
-  ##
-  ## this is equivalent to EscapedEruby and is prepared only for compatibility.
-  ##
-  class XmlEruby < Eruby
-    include EscapeEnhancer
-  end
-
-
-  class PI::Eruby < PI::Engine
-    include RubyEvaluator
-    include RubyGenerator
-
-    def init_converter(properties={})
-      @pi = 'rb'
-      super(properties)
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/escheme.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/escheme.rb
deleted file mode 100644
index f277ddf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/escheme.rb
+++ /dev/null
@@ -1,115 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/engine'
-require 'erubis/enhancer'
-
-
-module Erubis
-
-
-  module SchemeGenerator
-    include Generator
-
-    def self.supported_properties()  # :nodoc:
-      return [
-              [:func,  '_add',   "function name (ex. 'display')"],
-              ]
-    end
-
-    def init_generator(properties={})
-      super
-      @escapefunc ||= 'escape'
-      @func = properties[:func] || '_add'   # or 'display'
-    end
-
-    def add_preamble(src)
-      return unless @func == '_add'
-      src << "(let ((_buf '())) " + \
-               "(define (_add x) (set! _buf (cons x _buf))) "
-      #src << "(let* ((_buf '())" + \
-      #             " (_add (lambda (x) (set! _buf (cons x _buf))))) "
-    end
-
-    def escape_text(text)
-      @table_ ||= { '"'=>'\\"', '\\'=>'\\\\' }
-      text.gsub!(/["\\]/) { |m| @table_[m] }
-      return text
-    end
-
-    def escaped_expr(code)
-      code.strip!
-      return "(#{@escapefunc} #{code})"
-    end
-
-    def add_text(src, text)
-      return if text.empty?
-      t = escape_text(text)
-      if t[-1] == ?\n
-        t[-1, 1] = ''
-        src << "(#{@func} \"" << t << "\\n\")\n"
-      else
-        src << "(#{@func} \"" << t << '")'
-      end
-    end
-
-    def add_stmt(src, code)
-      src << code
-    end
-
-    def add_expr_literal(src, code)
-      code.strip!
-      src << "(#{@func} #{code})"
-    end
-
-    def add_expr_escaped(src, code)
-      add_expr_literal(src, escaped_expr(code))
-    end
-
-    def add_expr_debug(src, code)
-      s = (code.strip! || code).gsub(/\"/, '\\"')
-      src << "(display \"*** debug: #{s}=\")(display #{code.strip})(display \"\\n\")"
-    end
-
-    def add_postamble(src)
-      return unless @func == '_add'
-      src << "\n" unless src[-1] == ?\n
-      src << "  (reverse _buf))\n"
-    end
-
-  end
-
-
-  ##
-  ## engine for Scheme
-  ##
-  class Escheme < Basic::Engine
-    include SchemeGenerator
-  end
-
-
-  class EscapedEscheme < Escheme
-    include EscapeEnhancer
-  end
-
-
-  #class XmlEscheme < Escheme
-  #  include EscapeEnhancer
-  #end
-
-
-  class PI::Escheme < PI::Engine
-    include SchemeGenerator
-
-    def init_converter(properties={})
-      @pi = 'scheme'
-      super(properties)
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/optimized.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/optimized.rb
deleted file mode 100644
index 569e380..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/engine/optimized.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-
-require 'erubis/engine/eruby'
-
-
-module Erubis
-
-
-  module OptimizedGenerator
-    include Generator
-
-    def self.supported_properties()  # :nodoc:
-      return []
-    end
-
-    def init_generator(properties={})
-      super
-      @escapefunc ||= "Erubis::XmlHelper.escape_xml"
-      @initialized = false
-      @prev_is_expr = false
-    end
-
-    protected
-
-    def escape_text(text)
-      text.gsub(/['\\]/, '\\\\\&')   # "'" => "\\'",  '\\' => '\\\\'
-    end
-
-    def escaped_expr(code)
-      @escapefunc ||= 'Erubis::XmlHelper.escape_xml'
-      return "#{@escapefunc}(#{code})"
-    end
-
-    def switch_to_expr(src)
-      return if @prev_is_expr
-      @prev_is_expr = true
-      src << ' _buf'
-    end
-
-    def switch_to_stmt(src)
-      return unless @prev_is_expr
-      @prev_is_expr = false
-      src << ';'
-    end
-
-    def add_preamble(src)
-      #@initialized = false
-      #@prev_is_expr = false
-    end
-
-    def add_text(src, text)
-      return if text.empty?
-      if @initialized
-        switch_to_expr(src)
-        src << " << '" << escape_text(text) << "'"
-      else
-        src << "_buf = '" << escape_text(text) << "';"
-        @initialized = true
-      end
-    end
-
-    def add_stmt(src, code)
-      switch_to_stmt(src) if @initialized
-      #super
-      src << code
-      src << ';' unless code[-1] == ?\n
-    end
-
-    def add_expr_literal(src, code)
-      unless @initialized; src << "_buf = ''"; @initialized = true; end
-      switch_to_expr(src)
-      src << " << (" << code << ").to_s"
-    end
-
-    def add_expr_escaped(src, code)
-      unless @initialized; src << "_buf = ''"; @initialized = true; end
-      switch_to_expr(src)
-      src << " << " << escaped_expr(code)
-    end
-
-    def add_expr_debug(src, code)
-      code.strip!
-      s = (code.dump =~ /\A"(.*)"\z/) && $1
-      src << ' $stderr.puts("*** debug: ' << s << '=#{(' << code << ').inspect}");'
-    end
-
-    def add_postamble(src)
-      #super if @initialized
-      src << "\n_buf\n" if @initialized
-    end
-
-  end  # end of class OptimizedEruby
-
-
-  ##
-  ## Eruby class which generates optimized ruby code
-  ##
-  class OptimizedEruby < Basic::Engine    # Eruby
-    include RubyEvaluator
-    include OptimizedGenerator
-
-    def init_converter(properties={})
-      @pi = 'rb'
-      super(properties)
-    end
-
-  end
-
-
-  ##
-  ## XmlEruby class which generates optimized ruby code
-  ##
-  class OptimizedXmlEruby < OptimizedEruby
-    include EscapeEnhancer
-
-    def add_expr_debug(src, code)
-      switch_to_stmt(src) if indicator == '===' && !@initialized
-      super
-    end
-
-  end  # end of class OptimizedXmlEruby
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/enhancer.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/enhancer.rb
deleted file mode 100644
index 1855fd6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/enhancer.rb
+++ /dev/null
@@ -1,681 +0,0 @@
-##
-## $Rev: 115 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-
-module Erubis
-
-
-  ##
-  ## switch '<%= ... %>' to escaped and '<%== ... %>' to unescaped
-  ##
-  ## ex.
-  ##   class XmlEruby < Eruby
-  ##     include EscapeEnhancer
-  ##   end
-  ##
-  ## this is language-indenedent.
-  ##
-  module EscapeEnhancer
-
-    def self.desc   # :nodoc:
-      "switch '<%= %>' to escaped and '<%== %>' to unescaped"
-    end
-
-    #--
-    #def self.included(klass)
-    #  klass.class_eval <<-END
-    #    alias _add_expr_literal add_expr_literal
-    #    alias _add_expr_escaped add_expr_escaped
-    #    alias add_expr_literal _add_expr_escaped
-    #    alias add_expr_escaped _add_expr_literal
-    #  END
-    #end
-    #++
-
-    def add_expr(src, code, indicator)
-      case indicator
-      when '='
-        @escape ? add_expr_literal(src, code) : add_expr_escaped(src, code)
-      when '=='
-        @escape ? add_expr_escaped(src, code) : add_expr_literal(src, code)
-      when '==='
-        add_expr_debug(src, code)
-      end
-    end
-
-  end
-
-
-  #--
-  ## (obsolete)
-  #module FastEnhancer
-  #end
-  #++
-
-
-  ##
-  ## use $stdout instead of string
-  ##
-  ## this is only for Eruby.
-  ##
-  module StdoutEnhancer
-
-    def self.desc   # :nodoc:
-      "use $stdout instead of array buffer or string buffer"
-    end
-
-    def add_preamble(src)
-      src << "_buf = $stdout;"
-    end
-
-    def add_postamble(src)
-      src << "\n''\n"
-    end
-
-  end
-
-
-  ##
-  ## use print statement instead of '_buf << ...'
-  ##
-  ## this is only for Eruby.
-  ##
-  module PrintOutEnhancer
-
-    def self.desc   # :nodoc:
-      "use print statement instead of '_buf << ...'"
-    end
-
-    def add_preamble(src)
-    end
-
-    def add_text(src, text)
-      src << " print '" << escape_text(text) << "';" unless text.empty?
-    end
-
-    def add_expr_literal(src, code)
-      src << ' print((' << code << ').to_s);'
-    end
-
-    def add_expr_escaped(src, code)
-      src << ' print ' << escaped_expr(code) << ';'
-    end
-
-    def add_postamble(src)
-      src << "\n" unless src[-1] == ?\n
-    end
-
-  end
-
-
-  ##
-  ## enable print function
-  ##
-  ## Notice: use Eruby#evaluate() and don't use Eruby#result()
-  ## to be enable print function.
-  ##
-  ## this is only for Eruby.
-  ##
-  module PrintEnabledEnhancer
-
-    def self.desc   # :nodoc:
-      "enable to use print function in '<% %>'"
-    end
-
-    def add_preamble(src)
-      src << "@_buf = "
-      super
-    end
-
-    def print(*args)
-      args.each do |arg|
-        @_buf << arg.to_s
-      end
-    end
-
-    def evaluate(context=nil)
-      _src = @src
-      if context.is_a?(Hash)
-        context.each do |key, val| instance_variable_set("@#{key}", val) end
-      elsif context
-        context.instance_variables.each do |name|
-          instance_variable_set(name, context.instance_variable_get(name))
-        end
-      end
-      return instance_eval(_src, (@filename || '(erubis)'))
-    end
-
-  end
-
-
-  ##
-  ## return array instead of string
-  ##
-  ## this is only for Eruby.
-  ##
-  module ArrayEnhancer
-
-    def self.desc   # :nodoc:
-      "return array instead of string"
-    end
-
-    def add_preamble(src)
-      src << "_buf = [];"
-    end
-
-    def add_postamble(src)
-      src << "\n" unless src[-1] == ?\n
-      src << "_buf\n"
-    end
-
-  end
-
-
-  ##
-  ## use an Array object as buffer (included in Eruby by default)
-  ##
-  ## this is only for Eruby.
-  ##
-  module ArrayBufferEnhancer
-
-    def self.desc   # :nodoc:
-      "use an Array object for buffering (included in Eruby class)"
-    end
-
-    def add_preamble(src)
-      src << "_buf = [];"
-    end
-
-    def add_postamble(src)
-      src << "\n" unless src[-1] == ?\n
-      src << "_buf.join\n"
-    end
-
-  end
-
-
-  ##
-  ## use String class for buffering
-  ##
-  ## this is only for Eruby.
-  ##
-  module StringBufferEnhancer
-
-    def self.desc   # :nodoc:
-      "use a String object for buffering"
-    end
-
-    def add_preamble(src)
-      src << "_buf = '';"
-    end
-
-    def add_postamble(src)
-      src << "\n" unless src[-1] == ?\n
-      src << "_buf.to_s\n"
-    end
-
-  end
-
-
-  ##
-  ## use StringIO class for buffering
-  ##
-  ## this is only for Eruby.
-  ##
-  module StringIOEnhancer  # :nodoc:
-
-    def self.desc   # :nodoc:
-      "use a StringIO object for buffering"
-    end
-
-    def add_preamble(src)
-      src << "_buf = StringIO.new;"
-    end
-
-    def add_postamble(src)
-      src << "\n" unless src[-1] == ?\n
-      src << "_buf.string\n"
-    end
-
-  end
-
-
-  ##
-  ## set buffer variable name to '_erbout' as well as '_buf'
-  ##
-  ## this is only for Eruby.
-  ##
-  module ErboutEnhancer
-
-    def self.desc   # :nodoc:
-      "set '_erbout = _buf = \"\";' to be compatible with ERB."
-    end
-
-    def add_preamble(src)
-      src << "_erbout = _buf = '';"
-    end
-
-    def add_postamble(src)
-      src << "\n" unless src[-1] == ?\n
-      src << "_buf.to_s\n"
-    end
-
-  end
-
-
-  ##
-  ## remove text and leave code, especially useful when debugging.
-  ##
-  ## ex.
-  ##   $ erubis -s -E NoText file.eruby | more
-  ##
-  ## this is language independent.
-  ##
-  module NoTextEnhancer
-
-    def self.desc   # :nodoc:
-      "remove text and leave code (useful when debugging)"
-    end
-
-    def add_text(src, text)
-      src << ("\n" * text.count("\n"))
-      if text[-1] != ?\n
-        text =~ /^(.*?)\z/
-        src << (' ' * $1.length)
-      end
-    end
-
-  end
-
-
-  ##
-  ## remove code and leave text, especially useful when validating HTML tags.
-  ##
-  ## ex.
-  ##   $ erubis -s -E NoCode file.eruby | tidy -errors
-  ##
-  ## this is language independent.
-  ##
-  module NoCodeEnhancer
-
-    def self.desc   # :nodoc:
-      "remove code and leave text (useful when validating HTML)"
-    end
-
-    def add_preamble(src)
-    end
-
-    def add_postamble(src)
-    end
-
-    def add_text(src, text)
-      src << text
-    end
-
-    def add_expr(src, code, indicator)
-      src << "\n" * code.count("\n")
-    end
-
-    def add_stmt(src, code)
-      src << "\n" * code.count("\n")
-    end
-
-  end
-
-
-  ##
-  ## get convert faster, but spaces around '<%...%>' are not trimmed.
-  ##
-  ## this is language-independent.
-  ##
-  module SimplifyEnhancer
-
-    def self.desc   # :nodoc:
-      "get convert faster but leave spaces around '<% %>'"
-    end
-
-    #DEFAULT_REGEXP = /(^[ \t]*)?<%(=+|\#)?(.*?)-?%>([ \t]*\r?\n)?/m
-    SIMPLE_REGEXP = /<%(=+|\#)?(.*?)-?%>/m
-
-    def convert(input)
-      src = ""
-      add_preamble(src)
-      #regexp = pattern_regexp(@pattern)
-      pos = 0
-      input.scan(SIMPLE_REGEXP) do |indicator, code|
-        match = Regexp.last_match
-        index = match.begin(0)
-        text  = input[pos, index - pos]
-        pos   = match.end(0)
-        add_text(src, text)
-        if !indicator              # <% %>
-          add_stmt(src, code)
-        elsif indicator[0] == ?\#  # <%# %>
-          n = code.count("\n")
-          add_stmt(src, "\n" * n)
-        else                       # <%= %>
-          add_expr(src, code, indicator)
-        end
-      end
-      #rest = $' || input                      # ruby1.8
-      rest = pos == 0 ? input : input[pos..-1]  # ruby1.9
-      add_text(src, rest)
-      add_postamble(src)
-      return src
-    end
-
-  end
-
-
-  ##
-  ## enable to use other embedded expression pattern (default is '\[= =\]').
-  ##
-  ## notice! this is an experimental. spec may change in the future.
-  ##
-  ## ex.
-  ##   input = <<END
-  ##   <% for item in list %>
-  ##     <%= item %> : <%== item %>
-  ##     [= item =] : [== item =]
-  ##   <% end %>
-  ##   END
-  ##
-  ##   class BiPatternEruby
-  ##     include BiPatternEnhancer
-  ##   end
-  ##   eruby = BiPatternEruby.new(input, :bipattern=>'\[= =\]')
-  ##   list = ['<a>', 'b&b', '"c"']
-  ##   print eruby.result(binding())
-  ##
-  ##   ## output
-  ##     <a> : <a>
-  ##     <a> : <a>
-  ##     b&b : b&b
-  ##     b&b : b&b
-  ##     "c" : "c"
-  ##     "c" : "c"
-  ##
-  ## this is language independent.
-  ##
-  module BiPatternEnhancer
-
-    def self.desc   # :nodoc:
-      "another embedded expression pattern (default '\[= =\]')."
-    end
-
-    def initialize(input, properties={})
-      self.bipattern = properties[:bipattern]    # or '\$\{ \}'
-      super
-    end
-
-    ## when pat is nil then '\[= =\]' is used
-    def bipattern=(pat)   # :nodoc:
-      @bipattern = pat || '\[= =\]'
-      pre, post = @bipattern.split()
-      @bipattern_regexp = /(.*?)#{pre}(=*)(.*?)#{post}/m
-    end
-
-    def add_text(src, text)
-      return unless text
-      m = nil
-      text.scan(@bipattern_regexp) do |txt, indicator, code|
-        m = Regexp.last_match
-        super(src, txt)
-        add_expr(src, code, '=' + indicator)
-      end
-      #rest = $' || text                    # ruby1.8
-      rest = m ? text[m.end(0)..-1] : text  # ruby1.9
-      super(src, rest)
-    end
-
-  end
-
-
-  ##
-  ## regards lines starting with '%' as program code
-  ##
-  ## this is for compatibility to eruby and ERB.
-  ##
-  ## this is language-independent.
-  ##
-  module PercentLineEnhancer
-
-    def self.desc   # :nodoc:
-      "regard lines starting with '%' as program code"
-    end
-
-    def add_text(src, text)
-      pos = 0
-      text2 = ''
-      text.scan(/^\%(.*?\r?\n)/) do
-        line  = $1
-        match = Regexp.last_match
-        len   = match.begin(0) - pos
-        str   = text[pos, len]
-        pos   = match.end(0)
-        if text2.empty?
-          text2 = str
-        else
-          text2 << str
-        end
-        if line[0] == ?%
-          text2 << line
-        else
-          super(src, text2)
-          text2 = ''
-          add_stmt(src, line)
-        end
-      end
-      #rest = pos == 0 ? text : $'             # ruby1.8
-      rest = pos == 0 ? text : text[pos..-1]   # ruby1.9
-      unless text2.empty?
-        text2 << rest if rest
-        rest = text2
-      end
-      super(src, rest)
-    end
-
-  end
-
-
-  ##
-  ## [experimental] allow header and footer in eRuby script
-  ##
-  ## ex.
-  ##   ====================
-  ##   ## without header and footer
-  ##   $ cat ex1.eruby
-  ##   <% def list_items(list) %>
-  ##   <%   for item in list %>
-  ##   <li><%= item %></li>
-  ##   <%   end %>
-  ##   <% end %>
-  ##
-  ##   $ erubis -s ex1.eruby
-  ##   _buf = []; def list_items(list)
-  ##   ;   for item in list
-  ##   ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
-  ##   ';   end
-  ##   ; end
-  ##   ;
-  ##   _buf.join
-  ##
-  ##   ## with header and footer
-  ##   $ cat ex2.eruby
-  ##   <!--#header:
-  ##   def list_items(list)
-  ##    #-->
-  ##   <%  for item in list %>
-  ##   <li><%= item %></li>
-  ##   <%  end %>
-  ##   <!--#footer:
-  ##   end
-  ##    #-->
-  ##
-  ##   $ erubis -s -c HeaderFooterEruby ex4.eruby
-  ##
-  ##   def list_items(list)
-  ##    _buf = []; _buf << '
-  ##   ';  for item in list
-  ##   ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
-  ##   ';  end
-  ##   ; _buf << '
-  ##   ';
-  ##   _buf.join
-  ##   end
-  ##
-  ##   ====================
-  ##
-  ## this is language-independent.
-  ##
-  module HeaderFooterEnhancer
-
-    def self.desc   # :nodoc:
-      "allow header/footer in document (ex. '<!--#header: #-->')"
-    end
-
-    HEADER_FOOTER_PATTERN = /(.*?)(^[ \t]*)?<!--\#(\w+):(.*?)\#-->([ \t]*\r?\n)?/m
-
-    def add_text(src, text)
-      m = nil
-      text.scan(HEADER_FOOTER_PATTERN) do |txt, lspace, word, content, rspace|
-        m = Regexp.last_match
-        flag_trim = @trim && lspace && rspace
-        super(src, txt)
-        content = "#{lspace}#{content}#{rspace}" if flag_trim
-        super(src, lspace) if !flag_trim && lspace
-        instance_variable_set("@#{word}", content)
-        super(src, rspace) if !flag_trim && rspace
-      end
-      #rest = $' || text                    # ruby1.8
-      rest = m ? text[m.end(0)..-1] : text  # ruby1.9
-      super(src, rest)
-    end
-
-    attr_accessor :header, :footer
-
-    def convert(input)
-      source = super
-      return @src = "#{@header}#{source}#{@footer}"
-    end
-
-  end
-
-
-  ##
-  ## delete indentation of HTML.
-  ##
-  ## this is language-independent.
-  ##
-  module DeleteIndentEnhancer
-
-    def self.desc   # :nodoc:
-      "delete indentation of HTML."
-    end
-
-    def convert_input(src, input)
-      input = input.gsub(/^[ \t]+</, '<')
-      super(src, input)
-    end
-
-  end
-
-
-  ##
-  ## convert "<h1><%=title%></h1>" into "_buf << %Q`<h1>#{title}</h1>`"
-  ##
-  ## this is only for Eruby.
-  ##
-  module InterpolationEnhancer
-
-    def self.desc   # :nodoc:
-      "convert '<p><%=text%></p>' into '_buf << %Q`<p>\#{text}</p>`'"
-    end
-
-    def convert_input(src, input)
-      pat = @pattern
-      regexp = pat.nil? || pat == '<% %>' ? Basic::Converter::DEFAULT_REGEXP : pattern_regexp(pat)
-      pos = 0
-      is_bol = true     # is beginning of line
-      str = ''
-      input.scan(regexp) do |indicator, code, tailch, rspace|
-        match = Regexp.last_match()
-        len  = match.begin(0) - pos
-        text = input[pos, len]
-        pos  = match.end(0)
-        ch   = indicator ? indicator[0] : nil
-        lspace = ch == ?= ? nil : detect_spaces_at_bol(text, is_bol)
-        is_bol = rspace ? true : false
-        _add_text_to_str(str, text)
-        ## * when '<%= %>', do nothing
-        ## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
-        if ch == ?=              # <%= %>
-          rspace = nil if tailch && !tailch.empty?
-          str << lspace if lspace
-          add_expr(str, code, indicator)
-          str << rspace if rspace
-        elsif ch == ?\#          # <%# %>
-          n = code.count("\n") + (rspace ? 1 : 0)
-          if @trim && lspace && rspace
-            add_text(src, str)
-            str = ''
-            add_stmt(src, "\n" * n)
-          else
-            str << lspace if lspace
-            add_text(src, str)
-            str = ''
-            add_stmt(src, "\n" * n)
-            str << rspace if rspace
-          end
-        else                     # <% %>
-          if @trim && lspace && rspace
-            add_text(src, str)
-            str = ''
-            add_stmt(src, "#{lspace}#{code}#{rspace}")
-          else
-            str << lspace if lspace
-            add_text(src, str)
-            str = ''
-            add_stmt(src, code)
-            str << rspace if rspace
-          end
-        end
-      end
-      #rest = $' || input                       # ruby1.8
-      rest = pos == 0 ? input : input[pos..-1]  # ruby1.9
-      _add_text_to_str(str, rest)
-      add_text(src, str)
-    end
-
-    def add_text(src, text)
-      return if !text || text.empty?
-      #src << " _buf << %Q`" << text << "`;"
-      if text[-1] == ?\n
-        text[-1] = "\\n"
-        src << " _buf << %Q`" << text << "`\n"
-      else
-        src << " _buf << %Q`" << text << "`;"
-      end
-    end
-
-    def _add_text_to_str(str, text)
-      return if !text || text.empty?
-      text.gsub!(/['\#\\]/, '\\\\\&')
-      str << text
-    end
-
-    def add_expr_escaped(str, code)
-      str << "\#{#{escaped_expr(code)}}"
-    end
-
-    def add_expr_literal(str, code)
-      str << "\#{#{code}}"
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/error.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/error.rb
deleted file mode 100644
index b164d6d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/error.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-module Erubis
-
-
-  ##
-  ## base error class
-  ##
-  class ErubisError < StandardError
-  end
-
-
-  ##
-  ## raised when method or function is not supported
-  ##
-  class NotSupportedError < ErubisError
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/evaluator.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/evaluator.rb
deleted file mode 100644
index 7cb314d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/evaluator.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-##
-## $Rev: 115 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'erubis/error'
-require 'erubis/context'
-
-
-module Erubis
-
-  EMPTY_BINDING = binding()
-
-
-  ##
-  ## evaluate code
-  ##
-  module Evaluator
-
-    def self.supported_properties    # :nodoc:
-      return []
-    end
-
-    attr_accessor :src, :filename
-
-    def init_evaluator(properties)
-      @filename = properties[:filename]
-    end
-
-    def result(*args)
-      raise NotSupportedError.new("evaluation of code except Ruby is not supported.")
-    end
-
-    def evaluate(*args)
-      raise NotSupportedError.new("evaluation of code except Ruby is not supported.")
-    end
-
-  end
-
-
-  ##
-  ## evaluator for Ruby
-  ##
-  module RubyEvaluator
-    include Evaluator
-
-    def self.supported_properties    # :nodoc:
-      list = Evaluator.supported_properties
-      return list
-    end
-
-    ## eval(@src) with binding object
-    def result(_binding_or_hash=TOPLEVEL_BINDING)
-      _arg = _binding_or_hash
-      if _arg.is_a?(Hash)
-        _b = binding()
-        eval _arg.collect{|k,v| "#{k} = _arg[#{k.inspect}]; "}.join, _b
-      elsif _arg.is_a?(Binding)
-        _b = _arg
-      elsif _arg.nil?
-        _b = binding()
-      else
-        raise ArgumentError.new("#{self.class.name}#result(): argument should be Binding or Hash but passed #{_arg.class.name} object.")
-      end
-      return eval(@src, _b, (@filename || '(erubis'))
-    end
-
-    ## invoke context.instance_eval(@src)
-    def evaluate(_context=Context.new)
-      _context = Context.new(_context) if _context.is_a?(Hash)
-      #return _context.instance_eval(@src, @filename || '(erubis)')
-      #@_proc ||= eval("proc { #{@src} }", Erubis::EMPTY_BINDING, @filename || '(erubis)')
-      @_proc ||= eval("proc { #{@src} }", binding(), @filename || '(erubis)')
-      return _context.instance_eval(&@_proc)
-    end
-
-    ## if object is an Class or Module then define instance method to it,
-    ## else define singleton method to it.
-    def def_method(object, method_name, filename=nil)
-      m = object.is_a?(Module) ? :module_eval : :instance_eval
-      object.__send__(m, "def #{method_name}; #{@src}; end", filename || @filename || '(erubis)')
-    end
-
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/generator.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/generator.rb
deleted file mode 100644
index aa3250c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/generator.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require 'abstract'
-
-module Erubis
-
-
-  ##
-  ## code generator, called by Converter module
-  ##
-  module Generator
-
-    def self.supported_properties()  # :nodoc:
-      return [
-              [:escapefunc,    nil,    "escape function name"],
-            ]
-    end
-
-    attr_accessor :escapefunc
-
-    def init_generator(properties={})
-      @escapefunc = properties[:escapefunc]
-    end
-
-
-    ## (abstract) escape text string
-    ##
-    ## ex.
-    ##   def escape_text(text)
-    ##     return text.dump
-    ##     # or return "'" + text.gsub(/['\\]/, '\\\\\&') + "'"
-    ##   end
-    def escape_text(text)
-      not_implemented
-    end
-
-    ## return escaped expression code (ex. 'h(...)' or 'htmlspecialchars(...)')
-    def escaped_expr(code)
-      code.strip!
-      return "#{@escapefunc}(#{code})"
-    end
-
-    ## (abstract) add @preamble to src
-    def add_preamble(src)
-      not_implemented
-    end
-
-    ## (abstract) add text string to src
-    def add_text(src, text)
-      not_implemented
-    end
-
-    ## (abstract) add statement code to src
-    def add_stmt(src, code)
-      not_implemented
-    end
-
-    ## (abstract) add expression literal code to src. this is called by add_expr().
-    def add_expr_literal(src, code)
-      not_implemented
-    end
-
-    ## (abstract) add escaped expression code to src. this is called by add_expr().
-    def add_expr_escaped(src, code)
-      not_implemented
-    end
-
-    ## (abstract) add expression code to src for debug. this is called by add_expr().
-    def add_expr_debug(src, code)
-      not_implemented
-    end
-
-    ## (abstract) add @postamble to src
-    def add_postamble(src)
-      not_implemented
-    end
-
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helper.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helper.rb
deleted file mode 100644
index cba83b7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helper.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-##
-## $Rev: 89 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-
-module Erubis
-
-  ##
-  ## helper for xml
-  ##
-  module XmlHelper
-
-    module_function
-
-    ESCAPE_TABLE = {
-      '&' => '&',
-      '<' => '<',
-      '>' => '>',
-      '"' => '"',
-      "'" => ''',
-    }
-
-    def escape_xml(value)
-      value.to_s.gsub(/[&<>"]/) { |s| ESCAPE_TABLE[s] }   # or /[&<>"']/
-      #value.to_s.gsub(/[&<>"]/) { ESCAPE_TABLE[$&] }
-    end
-
-    def escape_xml2(value)
-      return value.to_s.gsub(/\&/,'&').gsub(/</,'<').gsub(/>/,'>').gsub(/"/,'"')
-    end
-
-    alias h escape_xml
-    alias html_escape escape_xml
-
-    def url_encode(str)
-      return str.gsub(/[^-_.a-zA-Z0-9]+/) { |s|
-        s.unpack('C*').collect { |i| "%%%02X" % i }.join
-      }
-    end
-
-    alias u url_encode
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helpers/rails_form_helper.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helpers/rails_form_helper.rb
deleted file mode 100644
index b635fad..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helpers/rails_form_helper.rb
+++ /dev/null
@@ -1,198 +0,0 @@
-###
-### $Rev: 109 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-
-module Erubis
-  module Helpers
-    module RailsFormHelper
-    end
-  end
-end
-
-
-module Erubis::Helpers::RailsFormHelper
-
-
-if ActionPack::VERSION::MAJOR == 1   ###  Rails 1.X
-  def pp_template_filename(basename)
-    return "#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.rhtml"
-  end
-else                                 ###  Rails 2.X
-  def pp_template_filename(basename)
-    fname = "#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.html.erb"
-    return fname if test(?f, fname)
-    return  "#{RAILS_ROOT}/app/views/#{controller.controller_name}/#{basename}.rhtml"
-  end
-end
-
-  def pp_render_partial(basename)
-    basename = "_#{basename}" unless basename[0] == ?_
-    filename = pp_template_filename(basename)
-    preprocessor = _create_preprocessor(File.read(filename))
-    return preprocessor.evaluate(_preprocessing_context_object())
-  end
-
-  def pp_error_on(object_name, method)
-    s = ''
-    s << "<% _stag, _etag = _pp_error_tags(@#{object_name}.errors.on('#{method}')) %>"
-    s << "<%= _stag %>"
-    s << yield(object_name, method)
-    s << "<%= _etag %>"
-    return s
-  end
-
-  def _pp_error_tags(value)
-    return value ? ['<div class="fieldWithErrors">', '</div>'] : ['', '']
-  end
-
-  def _pp_remove_error_div(s)
-    s.sub!(/\A<div class="fieldWithErrors">(.*)<\/div>\z/, '\1')
-    return s
-  end
-
-  def pp_tag_helper(helper, object_name, method, options={})
-    if object_name.is_a?(ActionView::Helpers::FormHelper)
-      object_name = object_name.object_name
-    end
-    unless options.key?(:value) || options.key?('value')
-      options['value'] = _?("h @#{object_name}.#{method}")
-    end
-    #$stderr.puts "*** debug: pp_tag_helper(): options=#{options.inspect}"
-    return pp_error_on(object_name, method) {
-      s = __send__(helper, object_name, method, options)
-      _pp_remove_error_div(s)
-    }
-  end
-
-  def pp_form_tag(url_for_options={}, options={}, *parameters_for_url, &block)
-    return form_tag(url_for_options, options, *parameters_for_url, &block)
-  end
-
-  #--
-  #def pp_form_for(object_name, *args, &block)
-  #  return form_for(object_name, *args, &block)
-  #end
-  #++
-
-  def pp_text_field(object_name, method, options={})
-    return pp_tag_helper(:text_field, object_name, method, options)
-  end
-
-  def pp_password_field(object_name, method, options={})
-    return pp_tag_helper(:password_field, object_name, method, options)
-  end
-
-  def pp_hidden_field(object_name, method, options={})
-    return pp_tag_helper(:hidden_field, object_name, method, options)
-  end
-
-  def pp_file_field(object_name, method, options={})
-    return pp_tag_helper(:file_field, object_name, method, options)
-  end
-
-  def pp_text_area(object_name, method, options={})
-    return pp_tag_helper(:text_area, object_name, method, options)
-  end
-
-  def pp_check_box(object_name, method, options={}, checked_value="1", unchecked_value="0")
-    s = check_box(object_name, method, options, checked_value, unchecked_value)
-    s.sub!(/\schecked=\"checked\"/, '')
-    s.sub!(/type="checkbox"/, "\\&<%= _pp_check_box_checked?(@#{object_name}.#{method}, #{checked_value.inspect}) ? ' checked=\"checked\"' : '' %>")
-    return pp_error_on(object_name, method) { _pp_remove_error_div(s) }
-  end
-
-  def _pp_check_box_checked?(value, checked_value)
-    return ActionView::Helpers::InstanceTag::check_box_checked?(value, checked_value)
-  end
-
-  def pp_radio_button(object_name, method, tag_value, options={})
-    s = radio_button(object_name, method, tag_value, options)
-    s.sub!(/\schecked=\"checked\"/, '')
-    s.sub!(/type="radio"/, "\\&<%= _pp_radio_button_checked?(@#{object_name}.#{method}, #{tag_value.inspect}) ? ' checked=\"checked\"' : '' %>")
-    return pp_error_on(object_name, method) { _pp_remove_error_div(s) }
-  end
-
-  def _pp_radio_button_checked?(value, tag_value)
-    return ActionView::Helpers::InstanceTag::radio_button_checked?(value, tag_value)
-  end
-
-  def _pp_select(object, method, collection, priority_collection, options={}, html_options={})
-    return pp_error_on(object, method) do
-      s = ""
-      ## start tag
-      s << "<select id=\"#{object}_#{method}\" name=\"#{object}[#{method}]\""
-      for key, val in html_options:
-          s << " #{key}=\"#{val}\""
-      end
-      s << ">\n"
-      ## selected table
-      key = options.key?(:value) ? :value : (options.key?('value') ? 'value' : nil)
-      if    key.nil?                ;  selected = "@#{object}.#{method}"
-      elsif (val=options[key]).nil? ;  selected = nil
-      elsif val =~ /\A<%=(.*)%>\z/  ;  selected = $1
-      else                          ;  selected = val.inspect
-      end
-      s << "<% _table = {#{selected}=>' selected=\"selected\"'} %>\n" if selected
-      ## <option> tags
-      if options[:include_blank] || options['include_blank']
-        s << "<option value=\"\"></option>\n"
-      end
-      unless priority_collection.blank?
-        _pp_select_options(s, priority_collection, selected, 'delete')
-        s << "<option value=\"\">-------------</option>\n"
-      end
-      _pp_select_options(s, collection, selected, '[]')
-      ## end tag
-      s << "</select>"
-      s
-    end
-  end
-
-  def _pp_select_options(s, collection, selected, operator)
-    for item in collection
-      value, text = item.is_a?(Array) ? item : [item, item]
-      if !selected
-        t = ''
-      elsif operator == 'delete'
-        t = "<%= _table.delete(#{value.inspect}) %>"
-      else
-        t = "<%= _table[#{value.inspect}] %>"
-      end
-      s << "<option value=\"#{h value}\"#{t}>#{h text}</option>\n"
-    end
-  end
-
-  def pp_select(object, method, collection, options={}, html_options={})
-    return _pp_select(object, method, collection, nil, options, html_options)
-  end
-
-  def pp_collection_select(object, method, collection, value_method, text_method, options={}, html_options={})
-    collection2 = collection.collect { |e|
-      [e.__send__(value_method), e.__send__(text_method)]
-    }
-    return _pp_select(object, method, collection2, nil, options, html_options)
-  end
-
-  def pp_country_select(object, method, priority_countries=nil, options={}, html_options={})
-    collection = ActionView::Helpers::FormOptionsHelper::COUNTRIES
-    return _pp_select(object, method, collection, priority_countries, options, html_options)
-  end
-
-  def pp_time_zone_select(object, method, priority_zones=nil, options={}, html_options={})
-    model = options[:model] || options['model'] || TimeZone
-    collection = model.all.collect { |e| [e.name, e.to_s] }
-    return _pp_select(object, method, collection, priority_zones, options, html_options)
-  end
-
-  def pp_submit_tag(value="Save changes", options={})
-    return submit_tag(value, options)
-  end
-
-  def pp_image_submit_tag(source, options={})
-    return image_submit_tag(source, options)
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helpers/rails_helper.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helpers/rails_helper.rb
deleted file mode 100644
index 4389a6c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/helpers/rails_helper.rb
+++ /dev/null
@@ -1,325 +0,0 @@
-###
-### $Rev: 112 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-
-require 'erubis'
-require 'erubis/preprocessing'
-
-
-module Erubis
-
-  class Eruby
-    include ErboutEnhancer      # will generate '_erbout = _buf = ""; '
-  end
-
-  class FastEruby
-    include ErboutEnhancer      # will generate '_erbout = _buf = ""; '
-  end
-
-  module Helpers
-
-    ##
-    ## helper module for Ruby on Rails
-    ##
-    ## howto:
-    ##
-    ## 1. add the folliwng code in your 'config/environment.rb'
-    ##
-    ##      require 'erubis/helpers/rails_helper'
-    ##      #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby # or Erubis::FastEruby
-    ##      #Erubis::Helpers::RailsHelper.init_properties = {}
-    ##      #Erubis::Helpers::RailsHelper.show_src = false       # set true for debugging
-    ##      #Erubis::Helpers::RailsHelper.preprocessing = true   # set true to enable preprocessing
-    ##
-    ## 2. restart web server.
-    ##
-    ## if Erubis::Helper::Rails.show_src is true, Erubis prints converted Ruby code
-    ## into log file ('log/development.log' or so). if false, it doesn't.
-    ## if nil, Erubis prints converted Ruby code if ENV['RAILS_ENV'] == 'development'.
-    ##
-    module RailsHelper
-
-      #cattr_accessor :init_properties
-      @@engine_class = ::Erubis::Eruby
-      #@@engine_class = ::Erubis::FastEruby
-      def self.engine_class
-        @@engine_class
-      end
-      def self.engine_class=(klass)
-        @@engine_class = klass
-      end
-
-      #cattr_accessor :init_properties
-      @@init_properties = {}
-      def self.init_properties
-        @@init_properties
-      end
-      def self.init_properties=(hash)
-        @@init_properties = hash
-      end
-
-      #cattr_accessor :show_src
-      @@show_src = nil
-      def self.show_src
-        @@show_src
-      end
-      def self.show_src=(flag)
-        @@show_src = flag
-      end
-
-      #cattr_accessor :preprocessing
-      @@preprocessing = false
-      def self.preprocessing
-        @@preprocessing
-      end
-      def self.preprocessing=(flag)
-        @@preprocessing = flag
-      end
-
-
-      ## define class for backward-compatibility
-      class PreprocessingEruby < Erubis::PreprocessingEruby   # :nodoc:
-      end
-
-
-      module TemplateConverter
-        ## covert eRuby string into ruby code
-        def _convert_template(template)    # :nodoc:
-          #src = ::Erubis::Eruby.new(template).src
-          klass      = ::Erubis::Helpers::RailsHelper.engine_class
-          properties = ::Erubis::Helpers::RailsHelper.init_properties
-          show_src   = ::Erubis::Helpers::RailsHelper.show_src
-          show_src = ENV['RAILS_ENV'] == 'development' if show_src.nil?
-          ## preprocessing
-          if ::Erubis::Helpers::RailsHelper.preprocessing
-            preprocessor = _create_preprocessor(template)
-            template = preprocessor.evaluate(_preprocessing_context_object())
-            logger.info "** Erubis: preprocessed==<<'END'\n#{template}END\n" if show_src
-          end
-          ## convert into ruby code
-          src = klass.new(template, properties).src
-          #src.insert(0, '_erbout = ')
-          logger.info "** Erubis: src==<<'END'\n#{src}END\n" if show_src
-          return src
-        end
-        def _create_preprocessor(template)
-          return PreprocessingEruby.new(template, :escape=>true)
-        end
-        def _preprocessing_context_object
-          return self
-        end
-      end
-
-    end
-
-  end
-
-end
-
-
-class ActionView::Base   # :nodoc:
-  include ::Erubis::Helpers::RailsHelper::TemplateConverter
-  include ::Erubis::PreprocessingHelper
-  private
-  # convert template into ruby code
-  def convert_template_into_ruby_code(template)
-    #ERB.new(template, nil, @@erb_trim_mode).src
-    return _convert_template(template)
-  end
-end
-
-
-require 'action_pack/version'
-
-
-if ActionPack::VERSION::MAJOR >= 2             ### Rails 2.X
-
-
-  if ActionPack::VERSION::MINOR >=1            ### Rails 2.1 or higher
-
-    module ActionView
-      module TemplateHandlers # :nodoc:
-        class ErubisHandler < TemplateHandler
-          include Compilable
-          include Erubis::Helpers::RailsHelper::TemplateConverter
-          include Erubis::PreprocessingHelper
-          #
-          def compile(template)
-            return _convert_template(template.source)   # template.is_a?(ActionView::Template)
-          end
-          def logger  #:nodoc:
-            return @view.controller.logger
-          end
-          def _preprocessing_context_object  #:nodoc:
-            return @view.controller.instance_variable_get('@template')
-          end
-          #
-          def cache_fragment(block, name = {}, options = nil) #:nodoc:
-            @view.fragment_for(block, name, options) do
-              #eval(ActionView::Base.erb_variable, block.binding)
-              eval('_buf', block.binding)
-            end
-          end
-        end
-      end
-      handler_klass = TemplateHandlers::ErubisHandler
-      Template.register_default_template_handler :erb, handler_klass
-      Template.register_template_handler :rhtml, handler_klass
-    end
-
-  elsif ActionPack::VERSION::TINY >= 2         ### Rails 2.0.X (X >= 2)
-
-    module ActionView
-      module TemplateHandlers # :nodoc:
-        class ErubisHandler < TemplateHandler
-          include Erubis::Helpers::RailsHelper::TemplateConverter
-          include Erubis::PreprocessingHelper
-          def compile(template)
-            return _convert_template(template)     # template.is_a?(String)
-          end
-          def logger  #:nodoc:
-            return @view.controller.logger
-          end
-          def _preprocessing_context_object  #:nodoc:
-            return @view.controller.instance_variable_get('@template')
-          end
-        end
-      end
-      Base.class_eval do
-        handler_klass = TemplateHandlers::ErubisHandler
-        register_default_template_handler :erb, handler_klass
-        register_template_handler :rhtml, handler_klass
-      end
-    end
-
-  else                                         ### Rails 2.0.0 or 2.0.1
-
-    class ActionView::Base   # :nodoc:
-      private
-      # Method to create the source code for a given template.
-      def create_template_source(extension, template, render_symbol, locals)
-        if template_requires_setup?(extension)
-          body = case extension.to_sym
-            when :rxml, :builder
-              content_type_handler = (controller.respond_to?(:response) ? "controller.response" : "controller")
-              "#{content_type_handler}.content_type ||= Mime::XML\n" +
-              "xml = Builder::XmlMarkup.new(:indent => 2)\n" +
-              template +
-              "\nxml.target!\n"
-            when :rjs
-              "controller.response.content_type ||= Mime::JS\n" +
-              "update_page do |page|\n#{template}\nend"
-          end
-        else
-          #body = ERB.new(template, nil, @@erb_trim_mode).src
-          body = convert_template_into_ruby_code(template)
-        end
-        #
-        @@template_args[render_symbol] ||= {}
-        locals_keys = @@template_args[render_symbol].keys | locals
-        @@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
-        #
-        locals_code = ""
-        locals_keys.each do |key|
-          locals_code << "#{key} = local_assigns[:#{key}]\n"
-        end
-        #
-        "def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
-      end
-    end
-
-  end #if
-
-
-else                                           ###  Rails 1.X
-
-
-  if ActionPack::VERSION::MINOR > 12           ###  Rails 1.2
-
-    class ActionView::Base   # :nodoc:
-      private
-      # Create source code for given template
-      def create_template_source(extension, template, render_symbol, locals)
-        if template_requires_setup?(extension)
-          body = case extension.to_sym
-            when :rxml
-              "controller.response.content_type ||= 'application/xml'\n" +
-              "xml = Builder::XmlMarkup.new(:indent => 2)\n" +
-              template
-            when :rjs
-              "controller.response.content_type ||= 'text/javascript'\n" +
-              "update_page do |page|\n#{template}\nend"
-          end
-        else
-          #body = ERB.new(template, nil, @@erb_trim_mode).src
-          body = convert_template_into_ruby_code(template)
-        end
-        #
-        @@template_args[render_symbol] ||= {}
-        locals_keys = @@template_args[render_symbol].keys | locals
-        @@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
-        #
-        locals_code = ""
-        locals_keys.each do |key|
-          locals_code << "#{key} = local_assigns[:#{key}]\n"
-        end
-        #
-        "def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
-      end
-    end
-
-  else                                         ###  Rails 1.1
-
-    class ActionView::Base   # :nodoc:
-      private
-      # Create source code for given template
-      def create_template_source(extension, template, render_symbol, locals)
-        if template_requires_setup?(extension)
-          body = case extension.to_sym
-            when :rxml
-              "xml = Builder::XmlMarkup.new(:indent => 2)\n" +
-              "@controller.headers['Content-Type'] ||= 'application/xml'\n" +
-              template
-            when :rjs
-              "@controller.headers['Content-Type'] ||= 'text/javascript'\n" +
-              "update_page do |page|\n#{template}\nend"
-          end
-        else
-          #body = ERB.new(template, nil, @@erb_trim_mode).src
-          body = convert_template_into_ruby_code(template)
-        end
-        #
-        @@template_args[render_symbol] ||= {}
-        locals_keys = @@template_args[render_symbol].keys | locals
-        @@template_args[render_symbol] = locals_keys.inject({}) { |h, k| h[k] = true; h }
-        #
-        locals_code = ""
-        locals_keys.each do |key|
-          locals_code << "#{key} = local_assigns[:#{key}] if local_assigns.has_key?(:#{key})\n"
-        end
-        #
-        "def #{render_symbol}(local_assigns)\n#{locals_code}#{body}\nend"
-      end
-    end
-
-  end #if
-
-  ## make h() method faster (only for Rails 1.X)
-  module ERB::Util  # :nodoc:
-    ESCAPE_TABLE = { '&'=>'&', '<'=>'<', '>'=>'>', '"'=>'"', "'"=>''', }
-    def h(value)
-      value.to_s.gsub(/[&<>"]/) {|s| ESCAPE_TABLE[s] }
-    end
-    module_function :h
-  end
-
-end   ###
-
-
-## finish
-ac = ActionController::Base.new
-ac.logger.info "** Erubis #{::Erubis::VERSION}"
-#$stdout.puts "** Erubis #{::Erubis::VERSION}"
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/local-setting.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/local-setting.rb
deleted file mode 100644
index 5766d45..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/local-setting.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-##
-## you can add site-local settings here.
-## this files is required by erubis.rb
-##
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/main.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/main.rb
deleted file mode 100644
index 72a16b3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/main.rb
+++ /dev/null
@@ -1,491 +0,0 @@
-###
-### $Rev: 116 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-require 'yaml'
-require 'erubis'
-require 'erubis/tiny'
-require 'erubis/engine/enhanced'
-require 'erubis/engine/optimized'
-require 'erubis/engine/eruby'
-require 'erubis/engine/ephp'
-require 'erubis/engine/ec'
-require 'erubis/engine/ejava'
-require 'erubis/engine/escheme'
-require 'erubis/engine/eperl'
-require 'erubis/engine/ejavascript'
-
-
-module Erubis
-
-
-  Ejs = Ejavascript
-  EscapedEjs = EscapedEjavascript
-
-
-  class CommandOptionError < ErubisError
-  end
-
-
-  ##
-  ## main class of command
-  ##
-  ## ex.
-  ##   Main.main(ARGV)
-  ##
-  class Main
-
-    def self.main(argv=ARGV)
-      status = 0
-      begin
-        Main.new.execute(ARGV)
-      rescue CommandOptionError => ex
-        $stderr.puts ex.message
-        status = 1
-      end
-      exit(status)
-    end
-
-    def initialize
-      @single_options = "hvxztTSbeBXNUC"
-      @arg_options    = "pcrfKIlaE" #C
-      @option_names   = {
-        'h' => :help,
-        'v' => :version,
-        'x' => :source,
-        'z' => :syntax,
-        'T' => :unexpand,
-        't' => :untabify,      # obsolete
-        'S' => :intern,
-        'b' => :bodyonly,
-        'B' => :binding,
-        'p' => :pattern,
-        'c' => :context,
-        #'C' => :class,
-        'e' => :escape,
-        'r' => :requires,
-        'f' => :datafiles,
-        'K' => :kanji,
-        'I' => :includes,
-        'l' => :lang,
-        'a' => :action,
-        'E' => :enhancers,
-        'X' => :notext,
-        'N' => :linenum,
-        'U' => :unique,
-        'C' => :compact,
-      }
-      assert unless @single_options.length + @arg_options.length == @option_names.length
-      (@single_options + @arg_options).each_byte do |ch|
-        assert unless @option_names.key?(ch.chr)
-      end
-    end
-
-
-    def execute(argv=ARGV)
-      ## parse command-line options
-      options, properties = parse_argv(argv, @single_options, @arg_options)
-      filenames = argv
-      options['h'] = true if properties[:help]
-      opts = Object.new
-      arr = @option_names.collect { |ch, name| "def #{name}; @#{name}; end\n" }
-      opts.instance_eval arr.join
-      options.each do |ch, val|
-        name = @option_names[ch]
-        opts.instance_variable_set("@#{name}", val)
-      end
-
-      ## help, version, enhancer list
-      if opts.help || opts.version
-        puts version()         if opts.version
-        puts usage()           if opts.help
-        puts show_properties() if opts.help
-        puts show_enhancers()  if opts.help
-        return
-      end
-
-      ## include path
-      opts.includes.split(/,/).each do |path|
-        $: << path
-      end if opts.includes
-
-      ## require library
-      opts.requires.split(/,/).each do |library|
-        require library
-      end if opts.requires
-
-      ## action
-      action = opts.action
-      action ||= 'syntax'  if opts.syntax
-      action ||= 'convert' if opts.source || opts.notext
-
-      ## lang
-      lang = opts.lang || 'ruby'
-      action ||= 'convert' if opts.lang
-
-      ## class name of Eruby
-      #classname = opts.class
-      classname = nil
-      klass = get_classobj(classname, lang, properties[:pi])
-
-      ## kanji code
-      $KCODE = opts.kanji if opts.kanji
-
-      ## read context values from yaml file
-      datafiles = opts.datafiles
-      context = load_datafiles(datafiles, opts)
-
-      ## parse context data
-      if opts.context
-        context = parse_context_data(opts.context, opts)
-      end
-
-      ## properties for engine
-      properties[:escape]   = true         if opts.escape && !properties.key?(:escape)
-      properties[:pattern]  = opts.pattern if opts.pattern
-      #properties[:trim]     = false        if opts.notrim
-      properties[:preamble] = properties[:postamble] = false if opts.bodyonly
-      properties[:pi]       = nil          if properties[:pi] == true
-
-      ## create engine and extend enhancers
-      engine = klass.new(nil, properties)
-      enhancers = get_enhancers(opts.enhancers)
-      #enhancers.push(Erubis::EscapeEnhancer) if opts.escape
-      enhancers.each do |enhancer|
-        engine.extend(enhancer)
-        engine.bipattern = properties[:bipattern] if enhancer == Erubis::BiPatternEnhancer
-      end
-
-      ## no-text
-      engine.extend(Erubis::NoTextEnhancer) if opts.notext
-
-      ## convert and execute
-      val = nil
-      msg = "Syntax OK\n"
-      if filenames && !filenames.empty?
-        filenames.each do |filename|
-          test(?f, filename)  or raise CommandOptionError.new("#{filename}: file not found.")
-          engine.filename = filename
-          engine.convert!(File.read(filename))
-          val = do_action(action, engine, context, filename, opts)
-          msg = nil if val
-        end
-      else
-        engine.filename = filename = '(stdin)'
-        engine.convert!($stdin.read())
-        val = do_action(action, engine, context, filename, opts)
-        msg = nil if val
-      end
-      print msg if action == 'syntax' && msg
-
-    end
-
-    private
-
-    def do_action(action, engine, context, filename, opts)
-      case action
-      when 'convert'
-        s = manipulate_src(engine.src, opts)
-      when nil, 'exec', 'execute'
-        s = opts.binding ? engine.result(context.to_hash) : engine.evaluate(context)
-      when 'syntax'
-        s = check_syntax(filename, engine.src)
-      else
-        raise "*** internal error"
-      end
-      print s if s
-      return s
-    end
-
-    def manipulate_src(source, opts)
-      flag_linenum   = opts.linenum
-      flag_unique    = opts.unique
-      flag_compact   = opts.compact
-      if flag_linenum
-        n = 0
-        source.gsub!(/^/) { n += 1; "%5d:  " % n }
-        source.gsub!(/^ *\d+:\s+?\n/, '')      if flag_compact
-        source.gsub!(/(^ *\d+:\s+?\n)+/, "\n") if flag_unique
-      else
-        source.gsub!(/^\s*?\n/, '')      if flag_compact
-        source.gsub!(/(^\s*?\n)+/, "\n") if flag_unique
-      end
-      return source
-    end
-
-    def usage(command=nil)
-      command ||= File.basename($0)
-      buf = []
-      buf << "erubis - embedded program converter for multi-language"
-      buf << "Usage: #{command} [..options..] [file ...]"
-      buf << "  -h, --help    : help"
-      buf << "  -v            : version"
-      buf << "  -x            : show converted code"
-      buf << "  -X            : show converted code, only ruby code and no text part"
-      buf << "  -N            : numbering: add line numbers            (for '-x/-X')"
-      buf << "  -U            : unique: compress empty lines to a line (for '-x/-X')"
-      buf << "  -C            : compact: remove empty lines            (for '-x/-X')"
-      buf << "  -b            : body only: no preamble nor postamble   (for '-x/-X')"
-      buf << "  -z            : syntax checking"
-      buf << "  -e            : escape (equal to '--E Escape')"
-      buf << "  -p pattern    : embedded pattern (default '<% %>')"
-      buf << "  -l lang       : convert but no execute (ruby/php/c/java/scheme/perl/js)"
-      buf << "  -E e1,e2,...  : enhancer names (Escape, PercentLine, BiPattern, ...)"
-      buf << "  -I path       : library include path"
-      buf << "  -K kanji      : kanji code (euc/sjis/utf8) (default none)"
-      buf << "  -c context    : context data string (yaml inline style or ruby code)"
-      buf << "  -f datafile   : context data file ('*.yaml', '*.yml', or '*.rb')"
-      #buf << "  -t            : expand tab characters in YAML file"
-      buf << "  -T            : don't expand tab characters in YAML file"
-      buf << "  -S            : convert mapping key from string to symbol in YAML file"
-      buf << "  -B            : invoke 'result(binding)' instead of 'evaluate(context)'"
-      buf << "  --pi=name     : parse '<?name ... ?>' instead of '<% ... %>'"
-      #'
-      #  -T            : don't trim spaces around '<% %>'
-      #  -c class      : class name (XmlEruby/PercentLineEruby/...) (default Eruby)
-      #  -r library    : require library
-      #  -a            : action (convert/execute)
-      return buf.join("\n")
-    end
-
-    def collect_supported_properties(erubis_klass)
-      list = []
-      erubis_klass.ancestors.each do |klass|
-        if klass.respond_to?(:supported_properties)
-          list.concat(klass.supported_properties)
-        end
-      end
-      return list
-    end
-
-    def show_properties
-      s = "supported properties:\n"
-      basic_props = collect_supported_properties(Erubis::Basic::Engine)
-      pi_props    = collect_supported_properties(Erubis::PI::Engine)
-      list = []
-      common_props = basic_props & pi_props
-      list << ['(common)', common_props]
-      list << ['(basic)',  basic_props - common_props]
-      list << ['(pi)',     pi_props    - common_props]
-      %w[ruby php c java scheme perl javascript].each do |lang|
-        klass = Erubis.const_get("E#{lang}")
-        list << [lang, collect_supported_properties(klass) - basic_props]
-      end
-      list.each do |lang, props|
-        s << "  * #{lang}\n"
-        props.each do |name, default_val, desc|
-          s << ("     --%-23s : %s\n" % ["#{name}=#{default_val.inspect}", desc])
-        end
-      end
-      s << "\n"
-      return s
-    end
-
-    def show_enhancers
-      s = "enhancers:\n"
-      list = []
-      ObjectSpace.each_object(Module) do |m| list << m end
-      list.sort_by { |m| m.name.to_s }.each do |m|
-        next unless m.name =~ /\AErubis::(.*)Enhancer\z/
-        name = $1
-        desc = m.desc
-        s << ("  %-13s : %s\n" % [name, desc])
-      end
-      return s
-    end
-
-    def version
-      return Erubis::VERSION
-    end
-
-    def parse_argv(argv, arg_none='', arg_required='', arg_optional='')
-      options = {}
-      context = {}
-      while argv[0] && argv[0][0] == ?-
-        optstr = argv.shift
-        optstr = optstr[1, optstr.length-1]
-        #
-        if optstr[0] == ?-    # context
-          unless optstr =~ /\A\-([-\w]+)(?:=(.*))?/
-            raise CommandOptionError.new("-#{optstr}: invalid context value.")
-          end
-          name = $1;  value = $2
-          name  = name.gsub(/-/, '_').intern
-          #value = value.nil? ? true : YAML.load(value)   # error, why?
-          value = value.nil? ? true : YAML.load("---\n#{value}\n")
-          context[name] = value
-          #
-        else                  # options
-          while optstr && !optstr.empty?
-            optchar = optstr[0].chr
-            optstr[0,1] = ""
-            if arg_none.include?(optchar)
-              options[optchar] = true
-            elsif arg_required.include?(optchar)
-              arg = optstr.empty? ? argv.shift : optstr
-              unless arg
-                mesg = "-#{optchar.chr}: #{@option_args[optchar]} required."
-                raise CommandOptionError.new(mesg)
-              end
-              options[optchar] = arg
-              optstr = nil
-            elsif arg_optional.include?(optchar)
-              arg = optstr.empty? ? true : optstr
-              options[optchar] = arg
-              optstr = nil
-            else
-              raise CommandOptionError.new("-#{optchar.chr}: unknown option.")
-            end
-          end
-        end
-        #
-      end  # end of while
-
-      return options, context
-    end
-
-
-    def untabify(str, width=8)
-      list = str.split(/\t/)
-      last = list.pop
-      sb = ''
-      list.each do |s|
-        column = (n = s.rindex(?\n)) ? s.length - n - 1 : s.length
-        n = width - (column % width)
-        sb << s << (' ' * n)
-      end
-      sb << last
-      return sb
-    end
-    #--
-    #def untabify(str, width=8)
-    #  sb = ''
-    #  str.scan(/(.*?)\t/m) do |s, |
-    #    len = (n = s.rindex(?\n)) ? s.length - n - 1 : s.length
-    #    sb << s << (" " * (width - len % width))
-    #  end
-    #  return $' ? (sb << $') : str
-    #end
-    #++
-
-
-    def get_classobj(classname, lang, pi)
-      classname ||= "E#{lang}"
-      base_module = pi ? Erubis::PI : Erubis
-      begin
-        klass = base_module.const_get(classname)
-      rescue NameError
-        klass = nil
-      end
-      unless klass
-        if lang
-          msg = "-l #{lang}: invalid language name (class #{base_module.name}::#{classname} not found)."
-        else
-          msg = "-c #{classname}: invalid class name."
-        end
-        raise CommandOptionError.new(msg)
-      end
-      return klass
-    end
-
-    def get_enhancers(enhancer_names)
-      return [] unless enhancer_names
-      enhancers = []
-      shortname = nil
-      begin
-        enhancer_names.split(/,/).each do |shortname|
-          enhancers << Erubis.const_get("#{shortname}Enhancer")
-        end
-      rescue NameError
-        raise CommandOptionError.new("#{shortname}: no such Enhancer (try '-E' to show all enhancers).")
-      end
-      return enhancers
-    end
-
-    def load_datafiles(filenames, opts)
-      context = Erubis::Context.new
-      return context unless filenames
-      filenames.split(/,/).each do |filename|
-        filename.strip!
-        test(?f, filename) or raise CommandOptionError.new("#{filename}: file not found.")
-        if filename =~ /\.ya?ml$/
-          if opts.unexpand
-            ydoc = YAML.load_file(filename)
-          else
-            ydoc = YAML.load(untabify(File.read(filename)))
-          end
-          ydoc.is_a?(Hash) or raise CommandOptionError.new("#{filename}: root object is not a mapping.")
-          intern_hash_keys(ydoc) if opts.intern
-          context.update(ydoc)
-        elsif filename =~ /\.rb$/
-          str = File.read(filename)
-          context2 = Erubis::Context.new
-          _instance_eval(context2, str)
-          context.update(context2)
-        else
-          CommandOptionError.new("#{filename}: '*.yaml', '*.yml', or '*.rb' required.")
-        end
-      end
-      return context
-    end
-
-    def _instance_eval(_context, _str)
-      _context.instance_eval(_str)
-    end
-
-    def parse_context_data(context_str, opts)
-      if context_str[0] == ?{
-        require 'yaml'
-        ydoc = YAML.load(context_str)
-        unless ydoc.is_a?(Hash)
-          raise CommandOptionError.new("-c: root object is not a mapping.")
-        end
-        intern_hash_keys(ydoc) if opts.intern
-        return ydoc
-      else
-        context = Erubis::Context.new
-        context.instance_eval(context_str, '-c')
-        return context
-      end
-    end
-
-    def intern_hash_keys(obj, done={})
-      return if done.key?(obj.__id__)
-      case obj
-      when Hash
-        done[obj.__id__] = obj
-        obj.keys.each do |key|
-          obj[key.intern] = obj.delete(key) if key.is_a?(String)
-        end
-        obj.values.each do |val|
-          intern_hash_keys(val, done) if val.is_a?(Hash) || val.is_a?(Array)
-        end
-      when Array
-        done[obj.__id__] = obj
-        obj.each do |val|
-          intern_hash_keys(val, done) if val.is_a?(Hash) || val.is_a?(Array)
-        end
-      end
-    end
-
-    def check_syntax(filename, src)
-      require 'open3'
-      command = (ENV['_'] || 'ruby') + ' -wc'   # ENV['_'] stores command name
-      stdin, stdout, stderr = Open3.popen3(command)
-      stdin.write(src)
-      stdin.close
-      result = stdout.read()
-      stdout.close()
-      errmsg = stderr.read()
-      stderr.close()
-      return nil unless errmsg && !errmsg.empty?
-      errmsg =~ /\A-:(\d+): /
-      linenum, message = $1, $'
-      return "#{filename}:#{linenum}: #{message}"
-    end
-
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/preprocessing.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/preprocessing.rb
deleted file mode 100644
index 21b0c32..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/preprocessing.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-###
-### $Rev: 102 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-require 'cgi'
-
-
-module Erubis
-
-
-  ##
-  ## for preprocessing
-  ##
-  class PreprocessingEruby < Erubis::Eruby
-
-    def initialize(input, params={})
-      params = params.dup
-      params[:pattern] ||= '\[% %\]'    # use '[%= %]' instead of '<%= %>'
-      #params[:escape] = true            # transport '[%= %]' and '[%== %]'
-      super
-    end
-
-    def add_expr_escaped(src, code)
-      add_expr_literal(src, "_decode((#{code}))")
-    end
-
-  end
-
-
-  ##
-  ## helper methods for preprocessing
-  ##
-  module PreprocessingHelper
-
-    module_function
-
-    def _p(arg)
-      return "<%=#{arg}%>"
-    end
-
-    def _P(arg)
-      return "<%=h(#{arg})%>"
-    end
-
-    alias _? _p
-
-    def _decode(arg)
-      arg = arg.to_s
-      arg.gsub!(/%3C%25(?:=|%3D)(.*?)%25%3E/) { "<%=#{CGI.unescape($1)}%>" }
-      arg.gsub!(/<%=(.*?)%>/) { "<%=#{CGI.unescapeHTML($1)}%>" }
-      return arg
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/tiny.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/tiny.rb
deleted file mode 100644
index 3ec3c87..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/lib/erubis/tiny.rb
+++ /dev/null
@@ -1,146 +0,0 @@
-##
-## $Rev: 115 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-module Erubis
-
-  ##
-  ## tiny and the simplest implementation of eRuby
-  ##
-  ## ex.
-  ##   eruby = TinyEruby.new(File.read('example.rhtml'))
-  ##   print eruby.src                 # print ruby code
-  ##   print eruby.result(binding())   # eval ruby code with Binding object
-  ##   print eruby.evalute(context)    # eval ruby code with context object
-  ##
-  class TinyEruby
-
-    def initialize(input=nil)
-      @src = convert(input) if input
-    end
-    attr_reader :src
-
-    EMBEDDED_PATTERN = /<%(=+|\#)?(.*?)-?%>/m
-
-    def convert(input)
-      src = "_buf = '';"           # preamble
-      pos = 0
-      input.scan(EMBEDDED_PATTERN) do |indicator, code|
-        match = Regexp.last_match
-        len   = match.begin(0) - pos
-        text  = input[pos, len]
-        pos   = match.end(0)
-        #src << " _buf << '" << escape_text(text) << "';"
-        text.gsub!(/['\\]/, '\\\\\&')
-        src << " _buf << '" << text << "';" unless text.empty?
-        if !indicator              # <% %>
-          src << code << ";"
-        elsif indicator == '#'     # <%# %>
-          src << ("\n" * code.count("\n"))
-        else                       # <%= %>
-          src << " _buf << (" << code << ").to_s;"
-        end
-      end
-      #rest = $' || input                        # ruby1.8
-      rest = pos == 0 ? input : input[pos..-1]   # ruby1.9
-      #src << " _buf << '" << escape_text(rest) << "';"
-      rest.gsub!(/['\\]/, '\\\\\&')
-      src << " _buf << '" << rest << "';" unless rest.empty?
-      src << "\n_buf.to_s\n"       # postamble
-      return src
-    end
-
-    #def escape_text(text)
-    #  return text.gsub!(/['\\]/, '\\\\\&') || text
-    #end
-
-    def result(_binding=TOPLEVEL_BINDING)
-      eval @src, _binding
-    end
-
-    def evaluate(_context=Object.new)
-      if _context.is_a?(Hash)
-        _obj = Object.new
-        _context.each do |k, v| _obj.instance_variable_set("@#{k}", v) end
-        _context = _obj
-      end
-      _context.instance_eval @src
-    end
-
-  end
-
-
-
-  module PI
-  end
-
-  class PI::TinyEruby
-
-    def initialize(input=nil, options={})
-      @escape  = options[:escape] || 'Erubis::XmlHelper.escape_xml'
-      @src = convert(input) if input
-    end
-
-    attr_reader :src
-
-    EMBEDDED_PATTERN = /(^[ \t]*)?<\?rb(\s.*?)\?>([ \t]*\r?\n)?|@(!+)?\{(.*?)\}@/m
-
-    def convert(input)
-      src = "_buf = '';"           # preamble
-      pos = 0
-      input.scan(EMBEDDED_PATTERN) do |lspace, stmt, rspace, indicator, expr|
-        match = Regexp.last_match
-        len   = match.begin(0) - pos
-        text  = input[pos, len]
-        pos   = match.end(0)
-        #src << " _buf << '" << escape_text(text) << "';"
-        text.gsub!(/['\\]/, '\\\\\&')
-        src << " _buf << '" << text << "';" unless text.empty?
-        if stmt                # <?rb ... ?>
-          if lspace && rspace
-            src << "#{lspace}#{stmt}#{rspace}"
-          else
-            src << " _buf << '" << lspace << "';" if lspace
-            src << stmt << ";"
-            src << " _buf << '" << rspace << "';" if rspace
-          end
-        else                       # ${...}, $!{...}
-          if !indicator
-            src << " _buf << " << @escape << "(" << expr << ");"
-          elsif indicator == '!'
-            src << " _buf << (" << expr << ").to_s;"
-          end
-        end
-      end
-      #rest = $' || input                        # ruby1.8
-      rest = pos == 0 ? input : input[pos..-1]   # ruby1.9
-      #src << " _buf << '" << escape_text(rest) << "';"
-      rest.gsub!(/['\\]/, '\\\\\&')
-      src << " _buf << '" << rest << "';" unless rest.empty?
-      src << "\n_buf.to_s\n"       # postamble
-      return src
-    end
-
-    #def escape_text(text)
-    #  return text.gsub!(/['\\]/, '\\\\\&') || text
-    #end
-
-    def result(_binding=TOPLEVEL_BINDING)
-      eval @src, _binding
-    end
-
-    def evaluate(_context=Object.new)
-      if _context.is_a?(Hash)
-        _obj = Object.new
-        _context.each do |k, v| _obj.instance_variable_set("@#{k}", v) end
-        _context = _obj
-      end
-      _context.instance_eval @src
-    end
-
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/setup.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/setup.rb
deleted file mode 100644
index f1c9d9a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/setup.rb
+++ /dev/null
@@ -1,1331 +0,0 @@
-#
-# setup.rb
-#
-# Copyright (c) 2000-2004 Minero Aoki
-#
-# This program is free software.
-# You can distribute/modify this program under the terms of
-# the GNU Lesser General Public License version 2.1.
-#
-
-#
-# For backward compatibility
-#
-
-unless Enumerable.method_defined?(:map)
-  module Enumerable
-    alias map collect
-  end
-end
-
-unless Enumerable.method_defined?(:detect)
-  module Enumerable
-    alias detect find
-  end
-end
-
-unless Enumerable.method_defined?(:select)
-  module Enumerable
-    alias select find_all
-  end
-end
-
-unless Enumerable.method_defined?(:reject)
-  module Enumerable
-    def reject
-      result = []
-      each do |i|
-        result.push i unless yield(i)
-      end
-      result
-    end
-  end
-end
-
-unless Enumerable.method_defined?(:inject)
-  module Enumerable
-    def inject(result)
-      each do |i|
-        result = yield(result, i)
-      end
-      result
-    end
-  end
-end
-
-unless Enumerable.method_defined?(:any?)
-  module Enumerable
-    def any?
-      each do |i|
-        return true if yield(i)
-      end
-      false
-    end
-  end
-end
-
-unless File.respond_to?(:read)
-  def File.read(fname)
-    open(fname) {|f|
-      return f.read
-    }
-  end
-end
-
-#
-# Application independent utilities
-#
-
-def File.binread(fname)
-  open(fname, 'rb') {|f|
-    return f.read
-  }
-end
-
-# for corrupted windows stat(2)
-def File.dir?(path)
-  File.directory?((path[-1,1] == '/') ? path : path + '/')
-end
-
-#
-# Config
-#
-
-if arg = ARGV.detect{|arg| /\A--rbconfig=/ =~ arg }
-  ARGV.delete(arg)
-  require arg.split(/=/, 2)[1]
-  $".push 'rbconfig.rb'
-else
-  require 'rbconfig'
-end
-
-def multipackage_install?
-  FileTest.directory?(File.dirname($0) + '/packages')
-end
-
-
-class ConfigTable
-
-  c = ::Config::CONFIG
-
-  rubypath = c['bindir'] + '/' + c['ruby_install_name']
-
-  major = c['MAJOR'].to_i
-  minor = c['MINOR'].to_i
-  teeny = c['TEENY'].to_i
-  version = "#{major}.#{minor}"
-
-  # ruby ver. >= 1.4.4?
-  newpath_p = ((major >= 2) or
-               ((major == 1) and
-                ((minor >= 5) or
-                 ((minor == 4) and (teeny >= 4)))))
-  
-  subprefix = lambda {|path|
-    path.sub(/\A#{Regexp.quote(c['prefix'])}/o, '$prefix')
-  }
-
-  if c['rubylibdir']
-    # V < 1.6.3
-    stdruby    = subprefix.call(c['rubylibdir'])
-    siteruby   = subprefix.call(c['sitedir'])
-    versite    = subprefix.call(c['sitelibdir'])
-    sodir      = subprefix.call(c['sitearchdir'])
-  elsif newpath_p
-    # 1.4.4 <= V <= 1.6.3
-    stdruby    = "$prefix/lib/ruby/#{version}"
-    siteruby   = subprefix.call(c['sitedir'])
-    versite    = siteruby + '/' + version
-    sodir      = "$site-ruby/#{c['arch']}"
-  else
-    # V < 1.4.4
-    stdruby    = "$prefix/lib/ruby/#{version}"
-    siteruby   = "$prefix/lib/ruby/#{version}/site_ruby"
-    versite    = siteruby
-    sodir      = "$site-ruby/#{c['arch']}"
-  end
-
-  if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
-    makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
-  else
-    makeprog = 'make'
-  end
-
-  common_descripters = [
-    [ 'prefix',    [ c['prefix'],
-                     'path',
-                     'path prefix of target environment' ] ],
-    [ 'std-ruby',  [ stdruby,
-                     'path',
-                     'the directory for standard ruby libraries' ] ],
-    [ 'site-ruby-common', [ siteruby,
-                     'path',
-                     'the directory for version-independent non-standard ruby libraries' ] ],
-    [ 'site-ruby', [ versite,
-                     'path',
-                     'the directory for non-standard ruby libraries' ] ],
-    [ 'bin-dir',   [ '$prefix/bin',
-                     'path',
-                     'the directory for commands' ] ],
-    [ 'rb-dir',    [ '$site-ruby',
-                     'path',
-                     'the directory for ruby scripts' ] ],
-    [ 'so-dir',    [ sodir,
-                     'path',
-                     'the directory for ruby extentions' ] ],
-    [ 'data-dir',  [ '$prefix/share',
-                     'path',
-                     'the directory for shared data' ] ],
-    [ 'ruby-path', [ rubypath,
-                     'path',
-                     'path to set to #! line' ] ],
-    [ 'ruby-prog', [ rubypath,
-                     'name',
-                     'the ruby program using for installation' ] ],
-    [ 'make-prog', [ makeprog,
-                     'name',
-                     'the make program to compile ruby extentions' ] ],
-    [ 'without-ext', [ 'no',
-                       'yes/no',
-                       'does not compile/install ruby extentions' ] ]
-  ]
-  multipackage_descripters = [
-    [ 'with',      [ '',
-                     'name,name...',
-                     'package names that you want to install',
-                     'ALL' ] ],
-    [ 'without',   [ '',
-                     'name,name...',
-                     'package names that you do not want to install',
-                     'NONE' ] ]
-  ]
-  if multipackage_install?
-    DESCRIPTER = common_descripters + multipackage_descripters
-  else
-    DESCRIPTER = common_descripters
-  end
-
-  SAVE_FILE = 'config.save'
-
-  def ConfigTable.each_name(&block)
-    keys().each(&block)
-  end
-
-  def ConfigTable.keys
-    DESCRIPTER.map {|name, *dummy| name }
-  end
-
-  def ConfigTable.each_definition(&block)
-    DESCRIPTER.each(&block)
-  end
-
-  def ConfigTable.get_entry(name)
-    name, ent = DESCRIPTER.assoc(name)
-    ent
-  end
-
-  def ConfigTable.get_entry!(name)
-    get_entry(name) or raise ArgumentError, "no such config: #{name}"
-  end
-
-  def ConfigTable.add_entry(name, vals)
-    ConfigTable::DESCRIPTER.push [name,vals]
-  end
-
-  def ConfigTable.remove_entry(name)
-    get_entry(name) or raise ArgumentError, "no such config: #{name}"
-    DESCRIPTER.delete_if {|n, arr| n == name }
-  end
-
-  def ConfigTable.config_key?(name)
-    get_entry(name) ? true : false
-  end
-
-  def ConfigTable.bool_config?(name)
-    ent = get_entry(name) or return false
-    ent[1] == 'yes/no'
-  end
-
-  def ConfigTable.value_config?(name)
-    ent = get_entry(name) or return false
-    ent[1] != 'yes/no'
-  end
-
-  def ConfigTable.path_config?(name)
-    ent = get_entry(name) or return false
-    ent[1] == 'path'
-  end
-
-
-  class << self
-    alias newobj new
-  end
-
-  def ConfigTable.new
-    c = newobj()
-    c.initialize_from_table
-    c
-  end
-
-  def ConfigTable.load
-    c = newobj()
-    c.initialize_from_file
-    c
-  end
-
-  def initialize_from_table
-    @table = {}
-    DESCRIPTER.each do |k, (default, vname, desc, default2)|
-      @table[k] = default
-    end
-  end
-
-  def initialize_from_file
-    raise InstallError, "#{File.basename $0} config first"\
-        unless File.file?(SAVE_FILE)
-    @table = {}
-    File.foreach(SAVE_FILE) do |line|
-      k, v = line.split(/=/, 2)
-      @table[k] = v.strip
-    end
-  end
-
-  def save
-    File.open(SAVE_FILE, 'w') {|f|
-      @table.each do |k, v|
-        f.printf "%s=%s\n", k, v if v
-      end
-    }
-  end
-
-  def []=(k, v)
-    raise InstallError, "unknown config option #{k}"\
-        unless ConfigTable.config_key?(k)
-    @table[k] = v
-  end
-    
-  def [](key)
-    return nil unless @table[key]
-    @table[key].gsub(%r<\$([^/]+)>) { self[$1] }
-  end
-
-  def set_raw(key, val)
-    @table[key] = val
-  end
-
-  def get_raw(key)
-    @table[key]
-  end
-
-end
-
-
-module MetaConfigAPI
-
-  def eval_file_ifexist(fname)
-    instance_eval File.read(fname), fname, 1 if File.file?(fname)
-  end
-
-  def config_names
-    ConfigTable.keys
-  end
-
-  def config?(name)
-    ConfigTable.config_key?(name)
-  end
-
-  def bool_config?(name)
-    ConfigTable.bool_config?(name)
-  end
-
-  def value_config?(name)
-    ConfigTable.value_config?(name)
-  end
-
-  def path_config?(name)
-    ConfigTable.path_config?(name)
-  end
-
-  def add_config(name, argname, default, desc)
-    ConfigTable.add_entry name,[default,argname,desc]
-  end
-
-  def add_path_config(name, default, desc)
-    add_config name, 'path', default, desc
-  end
-
-  def add_bool_config(name, default, desc)
-    add_config name, 'yes/no', default ? 'yes' : 'no', desc
-  end
-
-  def set_config_default(name, default)
-    if bool_config?(name)
-      ConfigTable.get_entry!(name)[0] = (default ? 'yes' : 'no')
-    else
-      ConfigTable.get_entry!(name)[0] = default
-    end
-  end
-
-  def remove_config(name)
-    ent = ConfigTable.get_entry(name)
-    ConfigTable.remove_entry name
-    ent
-  end
-
-end
-
-#
-# File Operations
-#
-
-module FileOperations
-
-  def mkdir_p(dirname, prefix = nil)
-    dirname = prefix + dirname if prefix
-    $stderr.puts "mkdir -p #{dirname}" if verbose?
-    return if no_harm?
-
-    # does not check '/'... it's too abnormal case
-    dirs = dirname.split(%r<(?=/)>)
-    if /\A[a-z]:\z/i =~ dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless File.dir?(path)
-    end
-  end
-
-  def rm_f(fname)
-    $stderr.puts "rm -f #{fname}" if verbose?
-    return if no_harm?
-
-    if File.exist?(fname) or File.symlink?(fname)
-      File.chmod 0777, fname
-      File.unlink fname
-    end
-  end
-
-  def rm_rf(dn)
-    $stderr.puts "rm -rf #{dn}" if verbose?
-    return if no_harm?
-
-    Dir.chdir dn
-    Dir.foreach('.') do |fn|
-      next if fn == '.'
-      next if fn == '..'
-      if File.dir?(fn)
-        verbose_off {
-          rm_rf fn
-        }
-      else
-        verbose_off {
-          rm_f fn
-        }
-      end
-    end
-    Dir.chdir '..'
-    Dir.rmdir dn
-  end
-
-  def move_file(src, dest)
-    File.unlink dest if File.exist?(dest)
-    begin
-      File.rename src, dest
-    rescue
-      File.open(dest, 'wb') {|f| f.write File.binread(src) }
-      File.chmod File.stat(src).mode, dest
-      File.unlink src
-    end
-  end
-
-  def install(from, dest, mode, prefix = nil)
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix + dest if prefix
-    realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
-    str = File.binread(from)
-    if diff?(str, realdest)
-      verbose_off {
-        rm_f realdest if File.exist?(realdest)
-      }
-      File.open(realdest, 'wb') {|f|
-        f.write str
-      }
-      File.chmod mode, realdest
-
-      File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
-        if prefix
-          f.puts realdest.sub(prefix, '')
-        else
-          f.puts realdest
-        end
-      }
-    end
-  end
-
-  def diff?(new_content, path)
-    return true unless File.exist?(path)
-    new_content != File.binread(path)
-  end
-
-  def command(str)
-    $stderr.puts str if verbose?
-    system str or raise RuntimeError, "'system #{str}' failed"
-  end
-
-  def ruby(str)
-    command config('ruby-prog') + ' ' + str
-  end
-  
-  def make(task = '')
-    command config('make-prog') + ' ' + task
-  end
-
-  def extdir?(dir)
-    File.exist?(dir + '/MANIFEST')
-  end
-
-  def all_files_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|ent| File.file?("#{dirname}/#{ent}") }
-    }
-  end
-
-  REJECT_DIRS = %w(
-    CVS SCCS RCS CVS.adm
-  )
-
-  def all_dirs_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|n| File.dir?("#{dirname}/#{n}") } - %w(. ..) - REJECT_DIRS
-    }
-  end
-
-end
-
-#
-# Main Installer
-#
-
-class InstallError < StandardError; end
-
-
-module HookUtils
-
-  def run_hook(name)
-    try_run_hook "#{curr_srcdir()}/#{name}" or
-    try_run_hook "#{curr_srcdir()}/#{name}.rb"
-  end
-
-  def try_run_hook(fname)
-    return false unless File.file?(fname)
-    begin
-      instance_eval File.read(fname), fname, 1
-    rescue
-      raise InstallError, "hook #{fname} failed:\n" + $!.message
-    end
-    true
-  end
-
-end
-
-
-module HookScriptAPI
-
-  def get_config(key)
-    @config[key]
-  end
-
-  alias config get_config
-
-  def set_config(key, val)
-    @config[key] = val
-  end
-
-  #
-  # srcdir/objdir (works only in the package directory)
-  #
-
-  #abstract srcdir_root
-  #abstract objdir_root
-  #abstract relpath
-
-  def curr_srcdir
-    "#{srcdir_root()}/#{relpath()}"
-  end
-
-  def curr_objdir
-    "#{objdir_root()}/#{relpath()}"
-  end
-
-  def srcfile(path)
-    "#{curr_srcdir()}/#{path}"
-  end
-
-  def srcexist?(path)
-    File.exist?(srcfile(path))
-  end
-
-  def srcdirectory?(path)
-    File.dir?(srcfile(path))
-  end
-  
-  def srcfile?(path)
-    File.file? srcfile(path)
-  end
-
-  def srcentries(path = '.')
-    Dir.open("#{curr_srcdir()}/#{path}") {|d|
-      return d.to_a - %w(. ..)
-    }
-  end
-
-  def srcfiles(path = '.')
-    srcentries(path).select {|fname|
-      File.file?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-  def srcdirectories(path = '.')
-    srcentries(path).select {|fname|
-      File.dir?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-end
-
-
-class ToplevelInstaller
-
-  Version   = '3.2.4'
-  Copyright = 'Copyright (c) 2000-2004 Minero Aoki'
-
-  TASKS = [
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles ruby extentions and others' ],
-    [ 'install',  'installs files' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-  def ToplevelInstaller.invoke
-    instance().invoke
-  end
-
-  @singleton = nil
-
-  def ToplevelInstaller.instance
-    @singleton ||= new(File.dirname($0))
-    @singleton
-  end
-
-  include MetaConfigAPI
-
-  def initialize(ardir_root)
-    @config = nil
-    @options = { 'verbose' => true }
-    @ardir = File.expand_path(ardir_root)
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__()}>"
-  end
-
-  def invoke
-    run_metaconfigs
-    task = parsearg_global()
-    @config = load_config(task)
-    __send__ "parsearg_#{task}"
-    init_installers
-    __send__ "exec_#{task}"
-  end
-
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-  end
-
-  def load_config(task)
-    case task
-    when 'config'
-      ConfigTable.new
-    when 'clean', 'distclean'
-      if File.exist?('config.save')
-      then ConfigTable.load
-      else ConfigTable.new
-      end
-    else
-      ConfigTable.load
-    end
-  end
-
-  def init_installers
-    @installer = Installer.new(@config, @options, @ardir, File.expand_path('.'))
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @ardir
-  end
-
-  def objdir_root
-    '.'
-  end
-
-  def relpath
-    '.'
-  end
-
-  #
-  # Option Parsing
-  #
-
-  def parsearg_global
-    valid_task = /\A(?:#{TASKS.map {|task,desc| task }.join '|'})\z/
-
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        raise InstallError, "invalid task: #{arg}" unless valid_task =~ arg
-        return arg
-
-      when '-q', '--quiet'
-        @options['verbose'] = false
-
-      when       '--verbose'
-        @options['verbose'] = true
-
-      when '-h', '--help'
-        print_usage $stdout
-        exit 0
-
-      when '-v', '--version'
-        puts "#{File.basename($0)} version #{Version}"
-        exit 0
-      
-      when '--copyright'
-        puts Copyright
-        exit 0
-
-      else
-        raise InstallError, "unknown global option '#{arg}'"
-      end
-    end
-
-    raise InstallError, <<EOS
-No task or global option given.
-Typical installation procedure is:
-    $ ruby #{File.basename($0)} config
-    $ ruby #{File.basename($0)} setup
-    # ruby #{File.basename($0)} install  (may require root privilege)
-EOS
-  end
-
-
-  def parsearg_no_options
-    raise InstallError, "#{task}:  unknown options: #{ARGV.join ' '}"\
-        unless ARGV.empty?
-  end
-
-  alias parsearg_show       parsearg_no_options
-  alias parsearg_setup      parsearg_no_options
-  alias parsearg_clean      parsearg_no_options
-  alias parsearg_distclean  parsearg_no_options
-
-  def parsearg_config
-    re = /\A--(#{ConfigTable.keys.join '|'})(?:=(.*))?\z/
-    @options['config-opt'] = []
-
-    while i = ARGV.shift
-      if /\A--?\z/ =~ i
-        @options['config-opt'] = ARGV.dup
-        break
-      end
-      m = re.match(i) or raise InstallError, "config: unknown option #{i}"
-      name, value = m.to_a[1,2]
-      if value
-        if ConfigTable.bool_config?(name)
-          raise InstallError, "config: --#{name} allows only yes/no for argument"\
-              unless /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i =~ value
-          value = (/\Ay(es)?|\At(rue)/i =~ value) ? 'yes' : 'no'
-        end
-      else
-        raise InstallError, "config: --#{name} requires argument"\
-            unless ConfigTable.bool_config?(name)
-        value = 'yes'
-      end
-      @config[name] = value
-    end
-  end
-
-  def parsearg_install
-    @options['no-harm'] = false
-    @options['install-prefix'] = ''
-    while a = ARGV.shift
-      case a
-      when /\A--no-harm\z/
-        @options['no-harm'] = true
-      when /\A--prefix=(.*)\z/
-        path = $1
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @options['install-prefix'] = path
-      else
-        raise InstallError, "install: unknown option #{a}"
-      end
-    end
-  end
-
-  def print_usage(out)
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-20s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '-h,--help',    'print this message'
-    out.printf fmt, '-v,--version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf "  %-10s  %s\n", name, desc
-    end
-
-    out.puts
-    out.puts 'Options for config:'
-    ConfigTable.each_definition do |name, (default, arg, desc, default2)|
-      out.printf "  %-20s %s [%s]\n",
-                 '--'+ name + (ConfigTable.bool_config?(name) ? '' : '='+arg),
-                 desc,
-                 default2 || default
-    end
-    out.printf "  %-20s %s [%s]\n",
-        '--rbconfig=path', 'your rbconfig.rb to load', "running ruby's"
-
-    out.puts
-    out.puts 'Options for install:'
-    out.printf "  %-20s %s [%s]\n",
-        '--no-harm', 'only display what to do if given', 'off'
-    out.printf "  %-20s %s [%s]\n",
-        '--prefix',  'install path prefix', '$prefix'
-
-    out.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    @installer.exec_config
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    @installer.exec_setup
-  end
-
-  def exec_install
-    @installer.exec_install
-  end
-
-  def exec_show
-    ConfigTable.each_name do |k|
-      v = @config.get_raw(k)
-      if not v or v.empty?
-        v = '(not specified)'
-      end
-      printf "%-10s %s\n", k, v
-    end
-  end
-
-  def exec_clean
-    @installer.exec_clean
-  end
-
-  def exec_distclean
-    @installer.exec_distclean
-  end
-
-end
-
-
-class ToplevelInstallerMulti < ToplevelInstaller
-
-  include HookUtils
-  include HookScriptAPI
-  include FileOperations
-
-  def initialize(ardir)
-    super
-    @packages = all_dirs_in("#{@ardir}/packages")
-    raise 'no package exists' if @packages.empty?
-  end
-
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-    @packages.each do |name|
-      eval_file_ifexist "#{@ardir}/packages/#{name}/metaconfig"
-    end
-  end
-
-  def init_installers
-    @installers = {}
-    @packages.each do |pack|
-      @installers[pack] = Installer.new(@config, @options,
-                                       "#{@ardir}/packages/#{pack}",
-                                       "packages/#{pack}")
-    end
-
-    with    = extract_selection(config('with'))
-    without = extract_selection(config('without'))
-    @selected = @installers.keys.select {|name|
-                  (with.empty? or with.include?(name)) \
-                      and not without.include?(name)
-                }
-  end
-
-  def extract_selection(list)
-    a = list.split(/,/)
-    a.each do |name|
-      raise InstallError, "no such package: #{name}" \
-              unless @installers.key?(name)
-    end
-    a
-  end
-
-  def print_usage(f)
-    super
-    f.puts 'Inluded packages:'
-    f.puts '  ' + @packages.sort.join(' ')
-    f.puts
-  end
-
-  #
-  # multi-package metaconfig API
-  #
-
-  attr_reader :packages
-
-  def declare_packages(list)
-    raise 'package list is empty' if list.empty?
-    list.each do |name|
-      raise "directory packages/#{name} does not exist"\
-              unless File.dir?("#{@ardir}/packages/#{name}")
-    end
-    @packages = list
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    run_hook 'pre-config'
-    each_selected_installers {|inst| inst.exec_config }
-    run_hook 'post-config'
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    run_hook 'pre-setup'
-    each_selected_installers {|inst| inst.exec_setup }
-    run_hook 'post-setup'
-  end
-
-  def exec_install
-    run_hook 'pre-install'
-    each_selected_installers {|inst| inst.exec_install }
-    run_hook 'post-install'
-  end
-
-  def exec_clean
-    rm_f 'config.save'
-    run_hook 'pre-clean'
-    each_selected_installers {|inst| inst.exec_clean }
-    run_hook 'post-clean'
-  end
-
-  def exec_distclean
-    rm_f 'config.save'
-    run_hook 'pre-distclean'
-    each_selected_installers {|inst| inst.exec_distclean }
-    run_hook 'post-distclean'
-  end
-
-  #
-  # lib
-  #
-
-  def each_selected_installers
-    Dir.mkdir 'packages' unless File.dir?('packages')
-    @selected.each do |pack|
-      $stderr.puts "Processing the package `#{pack}' ..." if @options['verbose']
-      Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
-      Dir.chdir "packages/#{pack}"
-      yield @installers[pack]
-      Dir.chdir '../..'
-    end
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-end
-
-
-class Installer
-
-  FILETYPES = %w( bin lib ext data )
-
-  include HookScriptAPI
-  include HookUtils
-  include FileOperations
-
-  def initialize(config, opt, srcroot, objroot)
-    @config = config
-    @options = opt
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{File.basename(@srcdir)}>"
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @srcdir
-  end
-
-  def objdir_root
-    @objdir
-  end
-
-  def relpath
-    @currdir
-  end
-
-  #
-  # configs/options
-  #
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def verbose_off
-    begin
-      save, @options['verbose'] = @options['verbose'], false
-      yield
-    ensure
-      @options['verbose'] = save
-    end
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  def config_dir_bin(rel)
-  end
-
-  def config_dir_lib(rel)
-  end
-
-  def config_dir_ext(rel)
-    extconf if extdir?(curr_srcdir())
-  end
-
-  def extconf
-    opt = @options['config-opt'].join(' ')
-    command "#{config('ruby-prog')} #{curr_srcdir()}/extconf.rb #{opt}"
-  end
-
-  def config_dir_data(rel)
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin(rel)
-    all_files_in(curr_srcdir()).each do |fname|
-      adjust_shebang "#{curr_srcdir()}/#{fname}"
-    end
-  end
-
-  # modify: #!/usr/bin/ruby
-  # modify: #! /usr/bin/ruby
-  # modify: #!ruby
-  # not modify: #!/usr/bin/env ruby
-  SHEBANG_RE = /\A\#!\s*\S*ruby\S*/
-
-  def adjust_shebang(path)
-    return if no_harm?
-
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(path, 'rb') {|r|
-        File.open(tmpfile, 'wb') {|w|
-          first = r.gets
-          return unless SHEBANG_RE =~ first
-
-          $stderr.puts "adjusting shebang: #{File.basename path}" if verbose?
-          w.print first.sub(SHEBANG_RE, '#!' + config('ruby-path'))
-          w.write r.read
-        }
-      }
-      move_file tmpfile, File.basename(path)
-    ensure
-      File.unlink tmpfile if File.exist?(tmpfile)
-    end
-  end
-
-  def setup_dir_lib(rel)
-  end
-
-  def setup_dir_ext(rel)
-    make if extdir?(curr_srcdir())
-  end
-
-  def setup_dir_data(rel)
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin(rel)
-    install_files collect_filenames_auto(), "#{config('bin-dir')}/#{rel}", 0755
-  end
-
-  def install_dir_lib(rel)
-    install_files ruby_scripts(), "#{config('rb-dir')}/#{rel}", 0644
-  end
-
-  def install_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    install_files ruby_extentions('.'),
-                  "#{config('so-dir')}/#{File.dirname(rel)}",
-                  0555
-  end
-
-  def install_dir_data(rel)
-    install_files collect_filenames_auto(), "#{config('data-dir')}/#{rel}", 0644
-  end
-
-  def install_files(list, dest, mode)
-    mkdir_p dest, @options['install-prefix']
-    list.each do |fname|
-      install fname, dest, mode, @options['install-prefix']
-    end
-  end
-
-  def ruby_scripts
-    collect_filenames_auto().select {|n| /\.rb\z/ =~ n }
-  end
-  
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  reject_patterns = %w( 
-    core RCSLOG tags TAGS .make.state
-    .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
-    *~ *.old *.bak *.BAK *.orig *.rej _$* *$
-
-    *.org *.in .*
-  )
-  mapping = {
-    '.' => '\.',
-    '$' => '\$',
-    '#' => '\#',
-    '*' => '.*'
-  }
-  REJECT_PATTERNS = Regexp.new('\A(?:' +
-                               reject_patterns.map {|pat|
-                                 pat.gsub(/[\.\$\#\*]/) {|ch| mapping[ch] }
-                               }.join('|') +
-                               ')\z')
-
-  def collect_filenames_auto
-    mapdir((existfiles() - hookfiles()).reject {|fname|
-             REJECT_PATTERNS =~ fname
-           })
-  end
-
-  def existfiles
-    all_files_in(curr_srcdir()) | all_files_in('.')
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-      %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def mapdir(filelist)
-    filelist.map {|fname|
-      if File.exist?(fname)   # objdir
-        fname
-      else                    # srcdir
-        File.join(curr_srcdir(), fname)
-      end
-    }
-  end
-
-  def ruby_extentions(dir)
-    _ruby_extentions(dir) or
-        raise InstallError, "no ruby extention exists: 'ruby #{$0} setup' first"
-  end
-
-  DLEXT = /\.#{ ::Config::CONFIG['DLEXT'] }\z/
-
-  def _ruby_extentions(dir)
-    Dir.open(dir) {|d|
-      return d.select {|fname| DLEXT =~ fname }
-    }
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f 'config.save'
-    rm_f 'InstalledFiles'
-  end
-
-  def clean_dir_bin(rel)
-  end
-
-  def clean_dir_lib(rel)
-  end
-
-  def clean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'clean' if File.file?('Makefile')
-  end
-
-  def clean_dir_data(rel)
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f 'config.save'
-    rm_f 'InstalledFiles'
-  end
-
-  def distclean_dir_bin(rel)
-  end
-
-  def distclean_dir_lib(rel)
-  end
-
-  def distclean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'distclean' if File.file?('Makefile')
-  end
-
-  #
-  # lib
-  #
-
-  def exec_task_traverse(task)
-    run_hook "pre-#{task}"
-    FILETYPES.each do |type|
-      if config('without-ext') == 'yes' and type == 'ext'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, "#{task}_dir_#{type}"
-    end
-    run_hook "post-#{task}"
-  end
-
-  def traverse(task, rel, mid)
-    dive_into(rel) {
-      run_hook "pre-#{task}"
-      __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-      all_dirs_in(curr_srcdir()).each do |d|
-        traverse task, "#{rel}/#{d}", mid
-      end
-      run_hook "post-#{task}"
-    }
-  end
-
-  def dive_into(rel)
-    return unless File.dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless File.dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-end
-
-
-if $0 == __FILE__
-  begin
-    if multipackage_install?
-      ToplevelInstallerMulti.invoke
-    else
-      ToplevelInstaller.invoke
-    end
-  rescue
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/assert-text-equal.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/assert-text-equal.rb
deleted file mode 100644
index f6c621f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/assert-text-equal.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-###
-### $Rev: 77 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-require 'test/unit'
-require 'tempfile'
-
-
-module Test
-  module Unit
-    class TestCase
-
-      def assert_text_equal(expected, actual, message=nil, diffopt='-u', flag_cut=true)
-        if expected == actual
-          assert(true)
-          return
-        end
-        if expected[-1] != ?\n || actual[-1] != ?\n
-          expected += "\n"
-          actual   += "\n"
-        end
-        begin
-          expfile = Tempfile.new(".expected.")
-          expfile.write(expected); expfile.flush()
-          actfile = Tempfile.new(".actual.")
-          actfile.write(actual);   actfile.flush()
-          diff = `diff #{diffopt} #{expfile.path} #{actfile.path}`
-        ensure
-          expfile.close(true) if expfile
-          actfile.close(true) if actfile
-        end
-        # cut 1st & 2nd lines
-        message = (flag_cut ? diff.gsub(/\A.*\n.*\n/, '') : diff) unless message
-        #raise Test::Unit::AssertionFailedError.new(message)
-        assert_block(message) { false }  # or assert(false, message)
-      end
-
-      alias assert_equal_with_diff assert_text_equal    # for compatibility
-      alias assert_text_equals     assert_text_equal    # for typo
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/Example.ejava b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/Example.ejava
deleted file mode 100644
index 1fc2fe0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/Example.ejava
+++ /dev/null
@@ -1,55 +0,0 @@
-<%
-import java.util.*;
-
-public class Example {
-  private String user;
-  private String[] list;
-  public example(String user, String[] list) {
-    this.user = user;
-    this.list = list;
-  }
-
-  public String view() {
-    StringBuffer _buf = new StringBuffer();
-%>
-<html>
- <body>
-  <p>Hello <%= user %>!</p>
-  <table>
-   <tbody>
-    <% for (int i = 0; i < list.length; i++) { %>
-    <tr bgcolor="<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>">
-     <td><%= i + 1 %></td>
-     <td><%== list[i] %></td>
-    </tr>
-    <% } %>
-   </tbody>
-  </table>
- <body>
-</html>
-<%
-    return _buf.toString();
-  }
-
-  public static void main(String[] args) {
-    String[] list = { "<aaa>", "b&b", "\"ccc\"" };
-    Example ex = Example.new("Erubis", list);
-    System.out.print(ex.view());
-  }
-
-  public static String escape(String s) {
-    StringBuffer sb = new StringBuffer();
-    for (int i = 0; i < s.length(); i++) {
-      char ch = s.charAt(i);
-      switch (ch) {
-      case '<':   sb.append("<"); break;
-      case '>':   sb.append(">"); break;
-      case '&':   sb.append("&"); break;
-      case '"':   sb.append("""); break;
-      default:    sb.append(ch);
-      }
-    }
-    return sb.toString();
-  }
-}
-%>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/array_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/array_example.result
deleted file mode 100644
index ebd00f4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/array_example.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ erubis -xE Array example.eruby
-_buf = []; _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-_buf
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/arraybuffer_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/arraybuffer_example.result
deleted file mode 100644
index d2906db..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/arraybuffer_example.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ erubis -xE ArrayBuffer example.eruby
-_buf = []; _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-_buf.join
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/bipattern-example.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/bipattern-example.rhtml
deleted file mode 100644
index a47fda8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/bipattern-example.rhtml
+++ /dev/null
@@ -1,4 +0,0 @@
-<% for item in list %>
-  <b>[= item =]</b>
-  <b>[== item =]</b>
-<% end %>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/bipattern_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/bipattern_example.result
deleted file mode 100644
index 15159b5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/bipattern_example.result
+++ /dev/null
@@ -1,6 +0,0 @@
-$ erubis -xE BiPattern bipattern-example.rhtml
-_buf = ''; for item in list 
- _buf << '  <b>'; _buf << ( item ).to_s; _buf << '</b>
-  <b>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</b>
-'; end 
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/context.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/context.rb
deleted file mode 100644
index 66a6663..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/context.rb
+++ /dev/null
@@ -1,6 +0,0 @@
- at title = 'Users List'
- at users = [
-   { 'name'=>'foo', 'mail'=>'foo at mail.com' },
-   { 'name'=>'bar', 'mail'=>'bar at mail.net' },
-   { 'name'=>'baz', 'mail'=>'baz at mail.org' },
-]
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/context.yaml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/context.yaml
deleted file mode 100644
index 25f4e19..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/context.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-title: Users List
-users:
-  - name:  foo
-    mail:  foo at mail.com
-  - name:  bar
-    mail:  bar at mail.net
-  - name:  baz
-    mail:  baz at mail.org
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/def_method.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/def_method.rb
deleted file mode 100644
index 3b378da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/def_method.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require 'erubis'
-s = "hello <%= name %>"
-eruby = Erubis::Eruby.new(s)
-filename = 'hello.rhtml'
-
-## define instance method to Dummy class (or module)
-class Dummy; end
-eruby.def_method(Dummy, 'render(name)', filename)  # filename is optional
-p Dummy.new.render('world')    #=> "hello world"
-
-## define singleton method to dummy object
-obj = Object.new
-eruby.def_method(obj, 'render(name)', filename)    # filename is optional
-p obj.render('world')          #=> "hello world"
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/def_method.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/def_method.result
deleted file mode 100644
index f2a1b5b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/def_method.result
+++ /dev/null
@@ -1,3 +0,0 @@
-$ ruby def_method.rb
-"hello world"
-"hello world"
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/escape_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/escape_example.result
deleted file mode 100644
index 95de2dc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/escape_example.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ erubis -xE Escape example.eruby
-_buf = ''; _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-  <p>'; _buf << ( item ).to_s; _buf << '</p>
-'; end 
- _buf << '</div>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ec b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ec
deleted file mode 100644
index a804f05..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ec
+++ /dev/null
@@ -1,27 +0,0 @@
-<%
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-    int i;
-
-%>
-<html>
- <body>
-  <p>Hello <%= "%s", argv[0] %>!</p>
-  <table>
-   <tbody>
-    <% for (i = 1; i < argc; i++) { %>
-    <tr bgcolor="<%= i % 2 == 0 ? "#FFCCCC" : "#CCCCFF" %>">
-      <td><%= "%d", i %></td>
-      <td><%= "%s", argv[i] %></td>
-    </tr>
-    <% } %>
-   </tbody>
-  </table>
- </body>
-</html>
-<%
-    return 0; 
-}
-%>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ejs b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ejs
deleted file mode 100644
index 44f2e3f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ejs
+++ /dev/null
@@ -1,20 +0,0 @@
-<%
-   var user = 'Erubis';
-   var list = ['<aaa>', 'b&b', '"ccc"'];
- %>
-<html>
- <body>
-  <p>Hello <%= user %>!</p>
-  <table>
-   <tbody>
-    <% var i; %>
-    <% for (i = 0; i < list.length; i++) { %>
-    <tr bgcolor="<%= i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-     <td><%= i + 1 %></td>
-     <td><%= list[i] %></td>
-    </tr>
-    <% } %>
-   </tbody>
-  </table>
- </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.eperl b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.eperl
deleted file mode 100644
index 46f7508..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.eperl
+++ /dev/null
@@ -1,18 +0,0 @@
-<%
-   my $user = 'Erubis';
-   my @list = ('<aaa>', 'b&b', '"ccc"');
-%>
-<html>
- <body>
-  <p>Hello <%= $user %>!</p>
-  <table>
-   <% $i = 0; %>
-   <% for $item (@list) { %>
-   <tr bgcolor=<%= ++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-    <td><%= $i %></td>
-    <td><%= $item %></td>
-   </tr>
-   <% } %>
-  </table>
- </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ephp b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ephp
deleted file mode 100644
index d92b46c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.ephp
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<html>
- <body>
-  <p>Hello <%= $user %>!</p>
-  <table>
-   <tbody>
-    <% $i = 0; %>
-    <% foreach ($list as $item) { %>
-    <%   $i++; %>
-    <tr bgcolor="<%= $i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-     <td><%= $i %></td>
-     <td><%== $item %></td>
-    </tr>
-    <% } %>
-   </tbody>
-  </table>
- </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.eruby
deleted file mode 100644
index 564c876..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.eruby
+++ /dev/null
@@ -1,6 +0,0 @@
-<div>
-<% for item in list %>
-  <p><%= item %></p>
-  <p><%== item %></p>
-<% end %>
-</div>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.escheme b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.escheme
deleted file mode 100644
index e2296ba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example.escheme
+++ /dev/null
@@ -1,28 +0,0 @@
-<html>
- <body>
-<%
-(let ((user "Erubis")
-      (items '("<aaa>" "b&b" "\"ccc\""))
-      (i 0))
- %>
-  <p>Hello <%= user %>!</p>
-  <table>
-<%
-  (for-each
-   (lambda (item)
-     (set! i (+ i 1))
- %>
-   <tr bgcolor="<%= (if (= (modulo i 2) 0) "#FFCCCC" "#CCCCFF") %>">
-    <td><%= i %></td>
-    <td><%= item %></td>
-   </tr>
-<%
-   ) ; lambda end
-   items) ; for-each end
- %>
-  </table>
-<%
-) ; let end
-%>
- </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.eruby
deleted file mode 100644
index 84bd1fd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.eruby
+++ /dev/null
@@ -1,6 +0,0 @@
-<ul>
-  <% for item in list %>
-  <li><%= item %></li>
-  <% end %>
-  <%# here is ignored because starting with '#' %>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.rb
deleted file mode 100644
index 8838206..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require 'erubis'
-input = File.read('example1.eruby')
-eruby = Erubis::Eruby.new(input)    # create Eruby object
-
-puts "---------- script source ---"
-puts eruby.src                      # print script source
-
-puts "---------- result ----------"
-list = ['aaa', 'bbb', 'ccc']
-puts eruby.result(binding())        # get result
-## or puts eruby.result(:list=>list)  # or pass Hash instead of Binding
-
-## # or
-## eruby = Erubis::Eruby.new
-## input = File.read('example1.eruby')
-## src = eruby.convert(input)
-## eval src
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.result
deleted file mode 100644
index 95ee6bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1.result
+++ /dev/null
@@ -1,16 +0,0 @@
-$ ruby example1.rb
----------- script source ---
-_buf = ''; _buf << '<ul>
-';   for item in list 
- _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-';   end 
-
- _buf << '</ul>
-';
-_buf.to_s
----------- result ----------
-<ul>
-  <li>aaa</li>
-  <li>bbb</li>
-  <li>ccc</li>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.rb
deleted file mode 100644
index b459cc0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'erubis'
-input = File.read('example10.xhtml')
-eruby = Erubis::PI::Eruby.new(input)
-print eruby.src
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.result
deleted file mode 100644
index b080fa8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.result
+++ /dev/null
@@ -1,17 +0,0 @@
-$ ruby example10.rb
-_buf = ''; _buf << '<?xml version="1.0" ?>
-';
-  lang = 'en'
-  list = ['<aaa>', 'b&b', '"ccc"']
-
- _buf << '<html lang="'; _buf << (lang).to_s; _buf << '">
- <body>
-  <ul>
-';   for item in list 
- _buf << '   <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
-';   end 
- _buf << '  </ul>
- </body>
-</html>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.xhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.xhtml
deleted file mode 100644
index 3ec00d5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10.xhtml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" ?>
-<?rb
-  lang = 'en'
-  list = ['<aaa>', 'b&b', '"ccc"']
-?>
-<html lang="@!{lang}@">
- <body>
-  <ul>
-  <?rb for item in list ?>
-   <li>@{item}@</li>
-  <?rb end ?>
-  </ul>
- </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10_x.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10_x.result
deleted file mode 100644
index d19e078..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example10_x.result
+++ /dev/null
@@ -1,17 +0,0 @@
-$ erubis -x --pi example10.xhtml
-_buf = ''; _buf << '<?xml version="1.0" ?>
-';
-  lang = 'en'
-  list = ['<aaa>', 'b&b', '"ccc"']
-
- _buf << '<html lang="'; _buf << (lang).to_s; _buf << '">
- <body>
-  <ul>
-';   for item in list 
- _buf << '   <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
-';   end 
- _buf << '  </ul>
- </body>
-</html>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.php b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.php
deleted file mode 100644
index 354ffc0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<html>
-  <body>
-    <h3>List</h3>
-    <?php if (!$list) { ?>
-    <p>not found.</p>
-    <?php } else { ?>
-    <table>
-      <tbody>
-        <?php $i = 0; ?>
-        <?php foreach ($list as $item) { ?>
-        <tr bgcolor="<?php echo ++$i % 2 == 1 ? '#FCC' : '#CCF'; ?>">
-          <td><?php echo $item; ?></td>
-        </tr>
-        <?php } ?>
-      </tbody>
-    </table>
-    <?php } ?>
-  </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.result
deleted file mode 100644
index f69bb2d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.result
+++ /dev/null
@@ -1,23 +0,0 @@
-$ erubis -X example11.rhtml
-_buf = '';
-
-
-
-
-
-     if @list.nil? || @list.empty? 
-
-     else 
-
-
-         @list.each_with_index do |item, i| 
-                      _buf << ( i % 2 == 0 ? '#FCC' : '#CCF' ).to_s;
-               _buf << ( item ).to_s;
-
-         end 
-
-
-     end 
-
-
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.rhtml
deleted file mode 100644
index 93d9326..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11.rhtml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <body>
-    <h3>List</h3>
-    <% if @list.nil? || @list.empty? %>
-    <p>not found.</p>
-    <% else %>
-    <table>
-      <tbody>
-        <% @list.each_with_index do |item, i| %>
-        <tr bgcolor="<%= i % 2 == 0 ? '#FCC' : '#CCF' %>">
-          <td><%= item %></td>
-        </tr>
-        <% end %>
-      </tbody>
-    </table>
-    <% end %>
-  </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_C.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_C.result
deleted file mode 100644
index a394dae..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_C.result
+++ /dev/null
@@ -1,10 +0,0 @@
-$ erubis -XC example11.rhtml
-_buf = '';
-     if @list.nil? || @list.empty? 
-     else 
-         @list.each_with_index do |item, i| 
-                      _buf << ( i % 2 == 0 ? '#FCC' : '#CCF' ).to_s;
-               _buf << ( item ).to_s;
-         end 
-     end 
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_N.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_N.result
deleted file mode 100644
index ef0ad4a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_N.result
+++ /dev/null
@@ -1,16 +0,0 @@
-$ erubis -XNU example11.rhtml
-    1:  _buf = '';
-
-    7:       if @list.nil? || @list.empty? 
-
-    9:       else 
-
-   12:           @list.each_with_index do |item, i| 
-   13:                        _buf << ( i % 2 == 0 ? '#FCC' : '#CCF' ).to_s;
-   14:                 _buf << ( item ).to_s;
-
-   16:           end 
-
-   19:       end 
-
-   22:  _buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_U.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_U.result
deleted file mode 100644
index 2c89bbb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_U.result
+++ /dev/null
@@ -1,16 +0,0 @@
-$ erubis -XU example11.rhtml
-_buf = '';
-
-     if @list.nil? || @list.empty? 
-
-     else 
-
-         @list.each_with_index do |item, i| 
-                      _buf << ( i % 2 == 0 ? '#FCC' : '#CCF' ).to_s;
-               _buf << ( item ).to_s;
-
-         end 
-
-     end 
-
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_php.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_php.result
deleted file mode 100644
index 65f62dd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example11_php.result
+++ /dev/null
@@ -1,15 +0,0 @@
-$ erubis -XNU -l php --pi=php --trim=false example11.php
-
-    5:      <?php if (!$list) { ?>
-
-    7:      <?php } else { ?>
-
-   10:          <?php $i = 0; ?>
-   11:          <?php foreach ($list as $item) { ?>
-   12:                       <?php echo ++$i % 2 == 1 ? '#FCC' : '#CCF'; ?>
-   13:                <?php echo $item; ?>
-
-   15:          <?php } ?>
-
-   18:      <?php } ?>
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1_x.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1_x.result
deleted file mode 100644
index ab305c5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example1_x.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ erubis -x example1.eruby
-_buf = ''; _buf << '<ul>
-';   for item in list 
- _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-';   end 
-
- _buf << '</ul>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.eruby
deleted file mode 100644
index a9ef194..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.eruby
+++ /dev/null
@@ -1,7 +0,0 @@
-<ul>
-  <% for item in list %>
-  <li>
-    <%= item %>
-  </li>
-  <% end %>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.rb
deleted file mode 100644
index 29b969b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'erubis'
-input = File.read('example2.eruby')
-eruby = Erubis::Eruby.new(input, :trim=>false)
-
-puts "----- script source ---"
-puts eruby.src                            # print script source
-
-puts "----- result ----------"
-list = ['aaa', 'bbb', 'ccc']
-puts eruby.result(binding())              # get result
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.result
deleted file mode 100644
index 0a5b2d5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2.result
+++ /dev/null
@@ -1,27 +0,0 @@
-$ ruby example2.rb
------ script source ---
-_buf = ''; _buf << '<ul>
-'; _buf << '  '; for item in list ; _buf << '
-'; _buf << '  <li>
-    '; _buf << ( item ).to_s; _buf << '
-'; _buf << '  </li>
-'; _buf << '  '; end ; _buf << '
-'; _buf << '</ul>
-';
-_buf.to_s
------ result ----------
-<ul>
-  
-  <li>
-    aaa
-  </li>
-  
-  <li>
-    bbb
-  </li>
-  
-  <li>
-    ccc
-  </li>
-  
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2_trim.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2_trim.result
deleted file mode 100644
index 1f4e6f0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2_trim.result
+++ /dev/null
@@ -1,10 +0,0 @@
-$ erubis -x --trim=false example2.eruby
-_buf = ''; _buf << '<ul>
-'; _buf << '  '; for item in list ; _buf << '
-'; _buf << '  <li>
-    '; _buf << ( item ).to_s; _buf << '
-'; _buf << '  </li>
-'; _buf << '  '; end ; _buf << '
-'; _buf << '</ul>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2_x.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2_x.result
deleted file mode 100644
index 81d0dcf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example2_x.result
+++ /dev/null
@@ -1,10 +0,0 @@
-$ erubis -x example2.eruby
-_buf = ''; _buf << '<ul>
-';   for item in list 
- _buf << '  <li>
-    '; _buf << ( item ).to_s; _buf << '
-'; _buf << '  </li>
-';   end 
- _buf << '</ul>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3.eruby
deleted file mode 100644
index 9bb5e35..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3.eruby
+++ /dev/null
@@ -1,6 +0,0 @@
-<% for item in list %>
-  <p><%= item %></p>
-  <p><%== item %></p>
-  <p><%=== item %></p>
-
-<% end %>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3.rb
deleted file mode 100644
index 482b511..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'erubis'
-input = File.read('example3.eruby')
-eruby = Erubis::EscapedEruby.new(input)    # or Erubis::XmlEruby
-
-puts "----- script source ---"
-puts eruby.src                             # print script source
-
-puts "----- result ----------"
-list = ['<aaa>', 'b&b', '"ccc"']
-puts eruby.result(binding())               # get result
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example31.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example31.result
deleted file mode 100644
index 9c37839..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example31.result
+++ /dev/null
@@ -1,22 +0,0 @@
-$ ruby example3.rb 2> stderr.log
------ script source ---
-_buf = ''; for item in list 
- _buf << '  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; $stderr.puts("*** debug: item=#{(item).inspect}"); _buf << '</p>
-
-'; end 
-_buf.to_s
------ result ----------
-  <p><aaa></p>
-  <p><aaa></p>
-  <p></p>
-
-  <p>b&b</p>
-  <p>b&b</p>
-  <p></p>
-
-  <p>"ccc"</p>
-  <p>"ccc"</p>
-  <p></p>
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example32.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example32.result
deleted file mode 100644
index 692524a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example32.result
+++ /dev/null
@@ -1,4 +0,0 @@
-$ cat stderr.log
-*** debug: item="<aaa>"
-*** debug: item="b&b"
-*** debug: item="\"ccc\""
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3_e.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3_e.result
deleted file mode 100644
index b5b45c2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example3_e.result
+++ /dev/null
@@ -1,8 +0,0 @@
-$ erubis -l ruby -e example3.eruby
-_buf = ''; for item in list 
- _buf << '  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; $stderr.puts("*** debug: item=#{(item).inspect}"); _buf << '</p>
-
-'; end 
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.eruby
deleted file mode 100644
index 3550f5a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.eruby
+++ /dev/null
@@ -1,3 +0,0 @@
-<!--% for item in list %-->
-  <p><!--%= item %--></p>
-<!--% end %-->
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.rb
deleted file mode 100644
index e8d0d8d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require 'erubis'
-input = File.read('example4.eruby')
-eruby = Erubis::Eruby.new(input, :pattern=>'<!--% %-->')
-                                      # or '<(?:!--)?% %(?:--)?>'
-
-puts "---------- script source ---"
-puts eruby.src                            # print script source
-
-puts "---------- result ----------"
-list = ['aaa', 'bbb', 'ccc']
-puts eruby.result(binding())              # get result
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.result
deleted file mode 100644
index bcd1e2a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4.result
+++ /dev/null
@@ -1,10 +0,0 @@
-$ ruby example4.rb
----------- script source ---
-_buf = ''; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-'; end 
-_buf.to_s
----------- result ----------
-  <p>aaa</p>
-  <p>bbb</p>
-  <p>ccc</p>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4_x.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4_x.result
deleted file mode 100644
index 97edb2f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example4_x.result
+++ /dev/null
@@ -1,5 +0,0 @@
-$ erubis -x -p '<!--% %-->' example4.eruby
-_buf = ''; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-'; end 
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.eruby
deleted file mode 100644
index e106fd9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.eruby
+++ /dev/null
@@ -1,6 +0,0 @@
-<span><%= @val %></span>
-<ul>
- <% for item in @list %>
-  <li><%= item %></li>
- <% end %>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.rb
deleted file mode 100644
index 2ad042e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require 'erubis'
-input = File.read('example5.eruby')
-eruby = Erubis::Eruby.new(input)      # create Eruby object
-
-## create context object
-## (key means var name, which may be string or symbol.)
-context = {
-  :val   => 'Erubis Example',
-  'list' => ['aaa', 'bbb', 'ccc'],
-}
-## or
-# context = Erubis::Context.new()
-# context['val'] = 'Erubis Example'
-# context[:list] = ['aaa', 'bbb', 'ccc'],
-
-puts eruby.evaluate(context)         # get result
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.result
deleted file mode 100644
index 836f6ce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example5.result
+++ /dev/null
@@ -1,7 +0,0 @@
-$ ruby example5.rb
-<span>Erubis Example</span>
-<ul>
-  <li>aaa</li>
-  <li>bbb</li>
-  <li>ccc</li>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example6.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example6.rb
deleted file mode 100644
index f80719f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example6.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class MyData
-  attr_accessor :val, :list
-end
-
-## any object can be a context object
-mydata = MyData.new
-mydata.val = 'Erubis Example'
-mydata.list = ['aaa', 'bbb', 'ccc']
-
-require 'erubis'
-eruby = Erubis::Eruby.new(File.read('example5.eruby'))
-puts eruby.evaluate(mydata)
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example6.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example6.result
deleted file mode 100644
index f482d0b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example6.result
+++ /dev/null
@@ -1,7 +0,0 @@
-$ ruby example6.rb
-<span>Erubis Example</span>
-<ul>
-  <li>aaa</li>
-  <li>bbb</li>
-  <li>ccc</li>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example7.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example7.eruby
deleted file mode 100644
index 53f9ec8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example7.eruby
+++ /dev/null
@@ -1,8 +0,0 @@
-<h1><%= @title %></h1>
-<ul>
- <% for user in @users %>
-  <li>
-    <a href="mailto:<%= user['mail']%>"><%= user['name'] %></a>
-  </li>
- <% end %>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example71.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example71.result
deleted file mode 100644
index ab555b1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example71.result
+++ /dev/null
@@ -1,13 +0,0 @@
-$ erubis -f context.yaml example7.eruby
-<h1>Users List</h1>
-<ul>
-  <li>
-    <a href="mailto:foo at mail.com">foo</a>
-  </li>
-  <li>
-    <a href="mailto:bar at mail.net">bar</a>
-  </li>
-  <li>
-    <a href="mailto:baz at mail.org">baz</a>
-  </li>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example72.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example72.result
deleted file mode 100644
index dfcafd3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example72.result
+++ /dev/null
@@ -1,13 +0,0 @@
-$ erubis -f context.rb example7.eruby
-<h1>Users List</h1>
-<ul>
-  <li>
-    <a href="mailto:foo at mail.com">foo</a>
-  </li>
-  <li>
-    <a href="mailto:bar at mail.net">bar</a>
-  </li>
-  <li>
-    <a href="mailto:baz at mail.org">baz</a>
-  </li>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8.eruby
deleted file mode 100644
index 5ea6da8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8.eruby
+++ /dev/null
@@ -1,6 +0,0 @@
-<h1><%= @title %></h1>
-<ul>
-<% for item in @list %>
- <li><%= item %></li>
-<% end %>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8_ruby.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8_ruby.result
deleted file mode 100644
index bdfd23e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8_ruby.result
+++ /dev/null
@@ -1,7 +0,0 @@
-$ erubis -c '@title="Example"; @list=%w[AAA BBB CCC]' example8.eruby
-<h1>Example</h1>
-<ul>
- <li>AAA</li>
- <li>BBB</li>
- <li>CCC</li>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8_yaml.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8_yaml.result
deleted file mode 100644
index 739e42b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example8_yaml.result
+++ /dev/null
@@ -1,7 +0,0 @@
-$ erubis -c '{title: Example, list: [AAA, BBB, CCC]}' example8.eruby
-<h1>Example</h1>
-<ul>
- <li>AAA</li>
- <li>BBB</li>
- <li>CCC</li>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.eruby
deleted file mode 100644
index 0f2dc8f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.eruby
+++ /dev/null
@@ -1,3 +0,0 @@
-<% for item in @list %>
- <b><%= item %></b>
-<% end %>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.rb
deleted file mode 100644
index bde1de6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'erubis'
-input = File.read('example9.eruby')
-eruby1 = Erubis::Eruby.new(input)
-eruby2 = Erubis::Eruby.new(input, :preamble=>false, :postamble=>false)
-
-puts eruby1.src   # print preamble and postamble
-puts "--------------"
-puts eruby2.src   # don't print preamble and postamble
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.result
deleted file mode 100644
index 60e71e2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example9.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ ruby example9.rb
-_buf = ''; for item in @list 
- _buf << ' <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
-_buf.to_s
---------------
- for item in @list 
- _buf << ' <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example91.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example91.result
deleted file mode 100644
index fde06a8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example91.result
+++ /dev/null
@@ -1,5 +0,0 @@
-$ erubis -x example9.eruby
-_buf = ''; for item in @list 
- _buf << ' <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example92.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example92.result
deleted file mode 100644
index 0cff68d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example92.result
+++ /dev/null
@@ -1,4 +0,0 @@
-$ erubis -x -b example9.eruby
- for item in @list 
- _buf << ' <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_c.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_c.result
deleted file mode 100644
index bd3239d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_c.result
+++ /dev/null
@@ -1,29 +0,0 @@
-$ erubis -l c example.ec
-#line 1 "example.ec"
-
-#include <stdio.h>
-
-int main(int argc, char *argv[])
-{
-    int i;
-
-
-fputs("<html>\n"
-      " <body>\n"
-      "  <p>Hello ", stdout); fprintf(stdout, "%s", argv[0]); fputs("!</p>\n"
-      "  <table>\n"
-      "   <tbody>\n", stdout);
-     for (i = 1; i < argc; i++) { 
-fputs("    <tr bgcolor=\"", stdout); fprintf(stdout, i % 2 == 0 ? "#FFCCCC" : "#CCCCFF"); fputs("\">\n"
-      "      <td>", stdout); fprintf(stdout, "%d", i); fputs("</td>\n"
-      "      <td>", stdout); fprintf(stdout, "%s", argv[i]); fputs("</td>\n"
-      "    </tr>\n", stdout);
-     } 
-fputs("   </tbody>\n"
-      "  </table>\n"
-      " </body>\n"
-      "</html>\n", stdout);
-
-    return 0; 
-}
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_java.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_java.result
deleted file mode 100644
index 70c10d2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_java.result
+++ /dev/null
@@ -1,56 +0,0 @@
-$ erubis -b -l java example.ejava
-
-import java.util.*;
-
-public class Example {
-  private String user;
-  private String[] list;
-  public example(String user, String[] list) {
-    this.user = user;
-    this.list = list;
-  }
-
-  public String view() {
-    StringBuffer _buf = new StringBuffer();
-
-_buf.append("<html>\n"
-          + " <body>\n"
-          + "  <p>Hello "); _buf.append(user); _buf.append("!</p>\n"
-          + "  <table>\n"
-          + "   <tbody>\n");
-     for (int i = 0; i < list.length; i++) { 
-_buf.append("    <tr bgcolor=\""); _buf.append(i % 2 == 0 ? "#FFCCCC" : "#CCCCFF"); _buf.append("\">\n"
-          + "     <td>"); _buf.append(i + 1); _buf.append("</td>\n"
-          + "     <td>"); _buf.append(escape(list[i])); _buf.append("</td>\n"
-          + "    </tr>\n");
-     } 
-_buf.append("   </tbody>\n"
-          + "  </table>\n"
-          + " <body>\n"
-          + "</html>\n");
-
-    return _buf.toString();
-  }
-
-  public static void main(String[] args) {
-    String[] list = { "<aaa>", "b&b", "\"ccc\"" };
-    Example ex = Example.new("Erubis", list);
-    System.out.print(ex.view());
-  }
-
-  public static String escape(String s) {
-    StringBuffer sb = new StringBuffer();
-    for (int i = 0; i < s.length(); i++) {
-      char ch = s.charAt(i);
-      switch (ch) {
-      case '<':   sb.append("<"); break;
-      case '>':   sb.append(">"); break;
-      case '&':   sb.append("&"); break;
-      case '"':   sb.append("""); break;
-      default:    sb.append(ch);
-      }
-    }
-    return sb.toString();
-  }
-}
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_js.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_js.result
deleted file mode 100644
index f93f910..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_js.result
+++ /dev/null
@@ -1,22 +0,0 @@
-$ erubis -l js example.ejs
-var _buf = [];
-   var user = 'Erubis';
-   var list = ['<aaa>', 'b&b', '"ccc"'];
- 
-_buf.push("<html>\n\
- <body>\n\
-  <p>Hello "); _buf.push(user); _buf.push("!</p>\n\
-  <table>\n\
-   <tbody>\n");
-     var i; 
-     for (i = 0; i < list.length; i++) { 
-_buf.push("    <tr bgcolor=\""); _buf.push(i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
-     <td>"); _buf.push(i + 1); _buf.push("</td>\n\
-     <td>"); _buf.push(list[i]); _buf.push("</td>\n\
-    </tr>\n");
-     } 
-_buf.push("   </tbody>\n\
-  </table>\n\
- </body>\n\
-</html>\n");
-document.write(_buf.join(""));
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_perl.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_perl.result
deleted file mode 100644
index 3efbb73..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_perl.result
+++ /dev/null
@@ -1,20 +0,0 @@
-$ erubis -l perl example.eperl
-use HTML::Entities; 
-   my $user = 'Erubis';
-   my @list = ('<aaa>', 'b&b', '"ccc"');
-
-print('<html>
- <body>
-  <p>Hello '); print($user); print('!</p>
-  <table>
-');     $i = 0; 
-    for $item (@list) { 
-print('   <tr bgcolor='); print(++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); print('">
-    <td>'); print($i); print('</td>
-    <td>'); print($item); print('</td>
-   </tr>
-');     } 
-print('  </table>
- </body>
-</html>
-'); 
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_php.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_php.result
deleted file mode 100644
index b9fa7d0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_php.result
+++ /dev/null
@@ -1,19 +0,0 @@
-$ erubis -l php example.ephp
-<<?php ?>?xml version="1.0"?>
-<html>
- <body>
-  <p>Hello <?php echo $user; ?>!</p>
-  <table>
-   <tbody>
-<?php     $i = 0; ?>
-<?php     foreach ($list as $item) { ?>
-<?php       $i++; ?>
-    <tr bgcolor="<?php echo $i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'; ?>">
-     <td><?php echo $i; ?></td>
-     <td><?php echo htmlspecialchars($item); ?></td>
-    </tr>
-<?php     } ?>
-   </tbody>
-  </table>
- </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_scheme.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_scheme.result
deleted file mode 100644
index 0bfb1e0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_scheme.result
+++ /dev/null
@@ -1,30 +0,0 @@
-$ erubis -l scheme example.escheme
-(let ((_buf '())) (define (_add x) (set! _buf (cons x _buf))) (_add "<html>
- <body>\n")
-
-(let ((user "Erubis")
-      (items '("<aaa>" "b&b" "\"ccc\""))
-      (i 0))
- 
-(_add "  <p>Hello ")(_add user)(_add "!</p>
-  <table>\n")
-
-  (for-each
-   (lambda (item)
-     (set! i (+ i 1))
- 
-(_add "   <tr bgcolor=\"")(_add (if (= (modulo i 2) 0) "#FFCCCC" "#CCCCFF"))(_add "\">
-    <td>")(_add i)(_add "</td>
-    <td>")(_add item)(_add "</td>
-   </tr>\n")
-
-   ) ; lambda end
-   items) ; for-each end
- 
-(_add "  </table>\n")
-
-) ; let end
-
-(_add " </body>
-</html>\n")
-  (reverse _buf))
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_scheme_display.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_scheme_display.result
deleted file mode 100644
index 1481e51..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/example_scheme_display.result
+++ /dev/null
@@ -1,29 +0,0 @@
-$ erubis -l scheme --func=display example.escheme
-(display "<html>
- <body>\n")
-
-(let ((user "Erubis")
-      (items '("<aaa>" "b&b" "\"ccc\""))
-      (i 0))
- 
-(display "  <p>Hello ")(display user)(display "!</p>
-  <table>\n")
-
-  (for-each
-   (lambda (item)
-     (set! i (+ i 1))
- 
-(display "   <tr bgcolor=\"")(display (if (= (modulo i 2) 0) "#FFCCCC" "#CCCCFF"))(display "\">
-    <td>")(display i)(display "</td>
-    <td>")(display item)(display "</td>
-   </tr>\n")
-
-   ) ; lambda end
-   items) ; for-each end
- 
-(display "  </table>\n")
-
-) ; let end
-
-(display " </body>
-</html>\n")
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.rb
deleted file mode 100644
index e336147..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require 'erubis'
-input = File.read('fasteruby.rhtml')
-eruby = Erubis::FastEruby.new(input)    # create Eruby object
-
-puts "---------- script source ---"
-puts eruby.src
-
-puts "---------- result ----------"
-context = { :title=>'Example', :list=>['aaa', 'bbb', 'ccc'] }
-output = eruby.evaluate(context)
-print output
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.result
deleted file mode 100644
index fa1cb58..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.result
+++ /dev/null
@@ -1,38 +0,0 @@
-$ ruby fasteruby.rb
----------- script source ---
-_buf = ''; _buf << %Q`<html>
-  <body>
-    <h1>#{Erubis::XmlHelper.escape_xml( @title )}</h1>
-    <table>\n`
- i = 0 
- for item in @list 
-   i += 1 
- _buf << %Q`      <tr>
-        <td>#{ i }</td>
-        <td>#{Erubis::XmlHelper.escape_xml( item )}</td>
-      </tr>\n`
- end 
- _buf << %Q`    </table>
-  </body>
-</html>\n`
-_buf.to_s
----------- result ----------
-<html>
-  <body>
-    <h1>Example</h1>
-    <table>
-      <tr>
-        <td>1</td>
-        <td>aaa</td>
-      </tr>
-      <tr>
-        <td>2</td>
-        <td>bbb</td>
-      </tr>
-      <tr>
-        <td>3</td>
-        <td>ccc</td>
-      </tr>
-    </table>
-  </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.rhtml
deleted file mode 100644
index 9c526c4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/fasteruby.rhtml
+++ /dev/null
@@ -1,15 +0,0 @@
-<html>
-  <body>
-    <h1><%== @title %></h1>
-    <table>
-<% i = 0 %>
-<% for item in @list %>
-<%   i += 1 %>
-      <tr>
-        <td><%= i %></td>
-        <td><%== item %></td>
-      </tr>
-<% end %>
-    </table>
-  </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example.eruby
deleted file mode 100644
index e4708bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example.eruby
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--#header:
-def list_items(items)
-#-->
-<% for item in items %>
-  <b><%= item %></b>
-<% end %>
-<!--#footer:
-end
-#-->
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example2.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example2.rb
deleted file mode 100644
index 5247296..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example2.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'erubis'
-class HeaderFooterEruby < Erubis::Eruby
-  include Erubis::HeaderFooterEnhancer
-end
-
-input = File.read('headerfooter-example2.rhtml')
-eruby = HeaderFooterEruby.new(input)
-print eruby.src
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example2.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example2.rhtml
deleted file mode 100644
index 520c037..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter-example2.rhtml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<html>
-<!--#header:
-def page(list)
-#-->
- :
-<!--#footer:
-end
-#-->
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter_example.result
deleted file mode 100644
index 58ab90d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter_example.result
+++ /dev/null
@@ -1,11 +0,0 @@
-$ erubis -xE HeaderFooter headerfooter-example.eruby
-
-def list_items(items)
-
-_buf = ''; for item in items 
- _buf << '  <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end 
-_buf.to_s
-
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter_example2.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter_example2.result
deleted file mode 100644
index 147fc54..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/headerfooter_example2.result
+++ /dev/null
@@ -1,13 +0,0 @@
-$ erubis -xE HeaderFooter headerfooter-example2.rhtml
-
-def page(list)
-
-_buf = ''; _buf << '<?xml version="1.0"?>
-<html>
-'; _buf << ' :
-'; _buf << '</html>
-';
-_buf.to_s
-
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/interpolation_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/interpolation_example.result
deleted file mode 100644
index a96a685..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/interpolation_example.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ erubis -xE DeleteIndent example.eruby
-_buf = ''; _buf << '<div>
-'; for item in list 
- _buf << '<p>'; _buf << ( item ).to_s; _buf << '</p>
-<p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program1.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program1.rb
deleted file mode 100644
index dd4d349..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program1.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'erubis'
-eruby = Erubis::Eruby.new(File.read('template1.rhtml'))
-items = ['foo', 'bar', 'baz']
-x = 1
-## local variable 'x' and 'eruby' are passed to template as well as 'items'!
-print eruby.result(binding())    
-## local variable 'x' is changed unintendedly because it is changed in template!
-puts "** debug: x=#{x.inspect}"  #=> "baz"
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program1.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program1.result
deleted file mode 100644
index 8e8c653..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program1.result
+++ /dev/null
@@ -1,6 +0,0 @@
-$ ruby main_program1.rb
-item = foo
-item = bar
-item = baz
-** debug: local variables=["eruby", "items", "x", "_buf"]
-** debug: x="baz"
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program2.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program2.rb
deleted file mode 100644
index 0d5883b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program2.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'erubis'
-eruby = Erubis::Eruby.new(File.read('template2.rhtml'))
-items = ['foo', 'bar', 'baz']
-x = 1
-## only 'items' are passed to template
-print eruby.evaluate(:items=>items)    
-## local variable 'x' is not changed!
-puts "** debug: x=#{x.inspect}"  #=> 1
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program2.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program2.result
deleted file mode 100644
index f95fa05..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/main_program2.result
+++ /dev/null
@@ -1,6 +0,0 @@
-$ ruby main_program2.rb
-item = foo
-item = bar
-item = baz
-** debug: local variables=["_context", "x", "_buf"]
-** debug: x=1
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode-example.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode-example.eruby
deleted file mode 100644
index f0ed27a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode-example.eruby
+++ /dev/null
@@ -1,14 +0,0 @@
-<h3>List</h3>
-<% if !@list || @list.empty? %>
-<p>not found.</p>
-<% else %>
-<table>
-  <tbody>
-    <% @list.each_with_index do |item, i| %>
-    <tr bgcolor="<%= i%2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-      <td><%= item %></td>
-    </tr>
-    <% end %>
-  </tbody>
-</table>
-<% end %>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode-php.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode-php.result
deleted file mode 100644
index f331243..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode-php.result
+++ /dev/null
@@ -1,20 +0,0 @@
-$ erubis -l php --pi=php -N -E NoCode --trim=false notext-example.php
-    1:  <html>
-    2:    <body>
-    3:      <h3>List</h3>
-    4:      
-    5:      <p>not found.</p>
-    6:      
-    7:      <table>
-    8:        <tbody>
-    9:          
-   10:          
-   11:          <tr bgcolor="">
-   12:            <td></td>
-   13:          </tr>
-   14:          
-   15:        </tbody>
-   16:      </table>
-   17:      
-   18:    </body>
-   19:  </html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode_example.result
deleted file mode 100644
index c6c2601..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/nocode_example.result
+++ /dev/null
@@ -1,15 +0,0 @@
-$ erubis -xE NoCode notext-example.eruby
-<h3>List</h3>
-
-<p>not found.</p>
-
-<table>
-  <tbody>
-
-    <tr bgcolor="">
-      <td></td>
-    </tr>
-
-  </tbody>
-</table>
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/normal-eruby-test.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/normal-eruby-test.eruby
deleted file mode 100644
index 81bd711..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/normal-eruby-test.eruby
+++ /dev/null
@@ -1,9 +0,0 @@
-<%
-def list_items(items)
-%>
-<% for item in items %>
-<li><%= item %></li>
-<% end %>
-<%
-end
-%>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/normal_eruby_test.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/normal_eruby_test.result
deleted file mode 100644
index 01016a7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/normal_eruby_test.result
+++ /dev/null
@@ -1,11 +0,0 @@
-$ erubis -x normal-eruby-test.eruby
-_buf = '';
-def list_items(items)
-
- for item in items 
- _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
-'; end 
-
-end
-
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-example.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-example.eruby
deleted file mode 100644
index f0ed27a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-example.eruby
+++ /dev/null
@@ -1,14 +0,0 @@
-<h3>List</h3>
-<% if !@list || @list.empty? %>
-<p>not found.</p>
-<% else %>
-<table>
-  <tbody>
-    <% @list.each_with_index do |item, i| %>
-    <tr bgcolor="<%= i%2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-      <td><%= item %></td>
-    </tr>
-    <% end %>
-  </tbody>
-</table>
-<% end %>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-example.php b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-example.php
deleted file mode 100644
index c40cb91..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-example.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<html>
-  <body>
-    <h3>List</h3>
-    <?php if (!$list || count($list) == 0) { ?>
-    <p>not found.</p>
-    <?php } else { ?>
-    <table>
-      <tbody>
-        <?php $i = 0; ?>
-        <?php foreach ($list as $item) { ?>
-        <tr bgcolor="<?php echo ++$i % 2 == 1 ? '#FFCCCC' : '#CCCCFF'; ?>">
-          <td><?php echo $item; ?></td>
-        </tr>
-        <?php } ?>
-      </tbody>
-    </table>
-    <?php } ?>
-  </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-php.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-php.result
deleted file mode 100644
index 249e62c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext-php.result
+++ /dev/null
@@ -1,20 +0,0 @@
-$ erubis -l php --pi=php -N -E NoText --trim=false notext-example.php
-    1:  
-    2:  
-    3:  
-    4:      <?php if (!$list || count($list) == 0) { ?>
-    5:  
-    6:      <?php } else { ?>
-    7:  
-    8:  
-    9:          <?php $i = 0; ?>
-   10:          <?php foreach ($list as $item) { ?>
-   11:                       <?php echo ++$i % 2 == 1 ? '#FFCCCC' : '#CCCCFF'; ?>
-   12:                <?php echo $item; ?>
-   13:  
-   14:          <?php } ?>
-   15:  
-   16:  
-   17:      <?php } ?>
-   18:  
-   19:  
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext_example.result
deleted file mode 100644
index dccbaca..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/notext_example.result
+++ /dev/null
@@ -1,16 +0,0 @@
-$ erubis -xE NoText notext-example.eruby
-_buf = '';
- if !@list || @list.empty? 
-
- else 
-
-
-     @list.each_with_index do |item, i| 
-                  _buf << ( i%2 == 0 ? '#FFCCCC' : '#CCCCFF' ).to_s;
-           _buf << ( item ).to_s;
-
-     end 
-
-
- end 
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/percentline-example.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/percentline-example.rhtml
deleted file mode 100644
index 38c0a48..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/percentline-example.rhtml
+++ /dev/null
@@ -1,4 +0,0 @@
-% for item in list
-  <b><%= item %></b>
-% end
-%% lines with '%%'
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/percentline_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/percentline_example.result
deleted file mode 100644
index 34d5984..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/percentline_example.result
+++ /dev/null
@@ -1,7 +0,0 @@
-$ erubis -xE PercentLine percentline-example.rhtml
-_buf = ''; for item in list
- _buf << '  <b>'; _buf << ( item ).to_s; _buf << '</b>
-'; end
- _buf << '% lines with \'%%\'
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenable_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenable_example.result
deleted file mode 100644
index 69fb91c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenable_example.result
+++ /dev/null
@@ -1,4 +0,0 @@
-$ ruby printenabled-example.rb
-  <b>aaa</b>
-  <b>bbb</b>
-  <b>ccc</b>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenabled-example.eruby b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenabled-example.eruby
deleted file mode 100644
index 84b345f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenabled-example.eruby
+++ /dev/null
@@ -1,3 +0,0 @@
-<% for item in @list %>
-  <b><% print item %></b>
-<% end %>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenabled-example.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenabled-example.rb
deleted file mode 100644
index 289964c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printenabled-example.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'erubis'
-class PrintEnabledEruby < Erubis::Eruby
-  include Erubis::PrintEnabledEnhancer
-end
-input = File.read('printenabled-example.eruby')
-eruby = PrintEnabledEruby.new(input)
-list = ['aaa', 'bbb', 'ccc']
-print eruby.evaluate(:list=>list)
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printstatement_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printstatement_example.result
deleted file mode 100644
index 49fcd81..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/printstatement_example.result
+++ /dev/null
@@ -1,8 +0,0 @@
-$ erubis -xE PrintOut example.eruby
- print '<div>
-'; for item in list 
- print '  <p>'; print(( item ).to_s); print '</p>
-  <p>'; print Erubis::XmlHelper.escape_xml( item ); print '</p>
-'; end 
- print '</div>
-';
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/simplify_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/simplify_example.result
deleted file mode 100644
index 82022ce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/simplify_example.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ erubis -xE Simplify example.eruby
-_buf = ''; _buf << '<div>
-'; for item in list ; _buf << '
-  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end ; _buf << '
-</div>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/stdout_exmple.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/stdout_exmple.result
deleted file mode 100644
index c5a714d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/stdout_exmple.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ erubis -xE Stdout example.eruby
-_buf = $stdout; _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-''
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/stringbuffer_example.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/stringbuffer_example.result
deleted file mode 100644
index 75e9894..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/stringbuffer_example.result
+++ /dev/null
@@ -1,9 +0,0 @@
-$ erubis -xE StringBuffer example.eruby
-_buf = ''; _buf << '<div>
-'; for item in list 
- _buf << '  <p>'; _buf << ( item ).to_s; _buf << '</p>
-  <p>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</p>
-'; end 
- _buf << '</div>
-';
-_buf.to_s
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/tail_260.result b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/tail_260.result
deleted file mode 100644
index 7163bcd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/tail_260.result
+++ /dev/null
@@ -1,4 +0,0 @@
-$ erubis -c '{var: "AAA\n"}' tailnewline.rhtml
-<div>
-AAA
-</div>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/tailnewline.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/tailnewline.rhtml
deleted file mode 100644
index 8674daa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/tailnewline.rhtml
+++ /dev/null
@@ -1,3 +0,0 @@
-<div>
-<%= @var -%>
-</div>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/template1.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/template1.rhtml
deleted file mode 100644
index 2b88b6b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/template1.rhtml
+++ /dev/null
@@ -1,4 +0,0 @@
-<% for x in items %>
-item = <%= x %>
-<% end %>
-** debug: local variables=<%= local_variables().inspect() %>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/template2.rhtml b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/template2.rhtml
deleted file mode 100644
index f5df553..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/data/users-guide/template2.rhtml
+++ /dev/null
@@ -1,4 +0,0 @@
-<% for x in @items %>
-item = <%= x %>
-<% end %>
-** debug: local variables=<%= local_variables().inspect() %>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/hoge.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/hoge.rb
deleted file mode 100644
index 45d7e75..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/hoge.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-<ul>
-<% for item in list %>
-  <li><%= item[:name]] %></li>
-<% end %>
-</ul>
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-engines.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-engines.rb
deleted file mode 100644
index a862606..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-engines.rb
+++ /dev/null
@@ -1,370 +0,0 @@
-##
-## $Rev: 115 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require "#{File.dirname(__FILE__)}/test.rb"
-
-require 'erubis'
-require 'erubis/engine/eruby'
-require 'erubis/engine/ephp'
-require 'erubis/engine/ec'
-require 'erubis/engine/ejava'
-require 'erubis/engine/escheme'
-require 'erubis/engine/eperl'
-require 'erubis/engine/ejavascript'
-
-
-class EnginesTest < Test::Unit::TestCase
-
-  #load_yaml_documents(__FILE__)
-  testdata_list = load_yaml_datafile(__FILE__)
-  define_testmethods(testdata_list)
-
-  def _test()
-    klass = Erubis.const_get(@class)
-    engine = klass.new(@input, @options || {})
-    actual = engine.src
-    assert_text_equal(@expected, actual)
-  end
-
-
-  self.post_definition()
-
-end
-
-__END__
-- name:  ruby1
-  lang:  ruby
-  class: Eruby
-  options:
-  input: |
-      <table>
-       <tbody>
-        <% i = 0
-           list.each_with_index do |item, i| %>
-        <tr>
-         <td><%= i+1 %></td>
-         <td><%== list %></td>
-        </tr>
-       <% end %>
-       </tbody>
-      </table>
-      <%=== i+1 %>
-  expected: |
-      _buf = ''; _buf << '<table>
-       <tbody>
-      ';   i = 0
-           list.each_with_index do |item, i| 
-       _buf << '  <tr>
-         <td>'; _buf << ( i+1 ).to_s; _buf << '</td>
-         <td>'; _buf << Erubis::XmlHelper.escape_xml( list ); _buf << '</td>
-        </tr>
-      ';  end 
-       _buf << ' </tbody>
-      </table>
-      '; $stderr.puts("*** debug: i+1=#{(i+1).inspect}"); _buf << '
-      ';
-      _buf.to_s
-##
-- name:  php1
-  lang:  php
-  class: Ephp
-  options:
-  input: |
-      <table>
-       <tbody>
-      <%
-          $i = 0;
-          foreach ($list as $item) {
-            $i++;
-       %>
-        <tr>
-         <td><%= $i %></td>
-         <td><%== $item %></td>
-        </tr>
-      <%
-          }
-       %>
-       </tbody>
-      </table>
-      <%=== $i %>
-  expected: |
-      <table>
-       <tbody>
-      <?php 
-          $i = 0;
-          foreach ($list as $item) {
-            $i++;
-       ?>
-        <tr>
-         <td><?php echo $i; ?></td>
-         <td><?php echo htmlspecialchars($item); ?></td>
-        </tr>
-      <?php 
-          }
-       ?>
-       </tbody>
-      </table>
-      <?php error_log('*** debug: $i='.($i), 0); ?>
-##
-- name:  c1
-  lang:  c
-  class: Ec
-  options: { :filename: foo.html, :indent: '  ' }
-  input: |4
-      <table>
-       <tbody>
-      <%  for (i = 0; i < list; i++) { %>
-        <tr>
-         <td><%= "%d", i %></td>
-         <td><%== list[i] %></td>
-        </tr>
-      <%  } %>
-       </tbody>
-      </table>
-      <%=== "%d", i %>
-  expected: |
-      #line 1 "foo.html"
-        fputs("<table>\n"
-              " <tbody>\n", stdout);
-        for (i = 0; i < list; i++) { 
-        fputs("  <tr>\n"
-              "   <td>", stdout); fprintf(stdout, "%d", i); fputs("</td>\n"
-              "   <td>", stdout); escape(list[i], stdout); fputs("</td>\n"
-              "  </tr>\n", stdout);
-        } 
-        fputs(" </tbody>\n"
-              "</table>\n", stdout);
-         fprintf(stderr, "*** debug: i=" "%d", i); fputs("\n", stdout);
-##
-- name:  java1
-  lang:  java
-  class: Ejava
-  options: { :buf: _buf, :bufclass: StringBuilder, :indent: '    ' }
-  input: |
-      <table>
-       <tbody>
-      <%
-          int i = 0;
-          for (Iterator it = list.iterator(); it.hasNext(); ) {
-              String s = (String)it.next();
-              i++;
-      %>
-        <tr class="<%= i%2==0 ? "even" : "odd" %>">
-         <td><%= i %></td>
-         <td><%== s %></td>
-        </tr>
-      <%
-          }
-      %>
-       <tbody>
-      </table>
-      <%=== i %>
-  expected: |4
-          StringBuilder _buf = new StringBuilder(); _buf.append("<table>\n"
-                    + " <tbody>\n");
-           
-          int i = 0;
-          for (Iterator it = list.iterator(); it.hasNext(); ) {
-              String s = (String)it.next();
-              i++;
-             
-          _buf.append("  <tr class=\""); _buf.append(i%2==0 ? "even" : "odd"); _buf.append("\">\n"
-                    + "   <td>"); _buf.append(i); _buf.append("</td>\n"
-                    + "   <td>"); _buf.append(escape(s)); _buf.append("</td>\n"
-                    + "  </tr>\n");
-           
-          }
-          
-          _buf.append(" <tbody>\n"
-                    + "</table>\n");
-           System.err.println("*** debug: i="+(i)); _buf.append("\n");
-          return _buf.toString();
-##
-- name:  scheme1
-  lang:  scheme
-  class: Escheme
-  options:
-  input: &scheme1_input|
-      <% (let ((i 0)) %>
-      <table>
-       <tbody>
-      <%
-        (for-each
-         (lambda (item)
-           (set! i (+ i 1))
-      %>
-        <tr>
-         <td><%= i %></td>
-         <td><%== item %></td>
-        </tr>
-      <%
-          ); lambda end
-         list); for-each end
-      %>
-       </tbody>
-      </table>
-      <%=== i %>
-      <% ); let end %>
-  expected: |4
-      (let ((_buf '())) (define (_add x) (set! _buf (cons x _buf)))  (let ((i 0)) 
-      (_add "<table>
-       <tbody>\n")
-      
-        (for-each
-         (lambda (item)
-           (set! i (+ i 1))
-      
-      (_add "  <tr>
-         <td>")(_add i)(_add "</td>
-         <td>")(_add (escape item))(_add "</td>
-        </tr>\n")
-      
-          ); lambda end
-         list); for-each end
-      
-      (_add " </tbody>
-      </table>\n")
-      (display "*** debug: i=")(display i)(display "\n")(_add "\n")
-       ); let end 
-        (reverse _buf))
-  
-##
-- name:  scheme2
-  lang:  scheme
-  class: Escheme
-  options: { :func: 'display' }
-  input: *scheme1_input
-  expected: |4
-       (let ((i 0)) 
-      (display "<table>
-       <tbody>\n")
-      
-        (for-each
-         (lambda (item)
-           (set! i (+ i 1))
-      
-      (display "  <tr>
-         <td>")(display i)(display "</td>
-         <td>")(display (escape item))(display "</td>
-        </tr>\n")
-      
-          ); lambda end
-         list); for-each end
-      
-      (display " </tbody>
-      </table>\n")
-      (display "*** debug: i=")(display i)(display "\n")(display "\n")
-       ); let end 
-##
-- name:  perl1
-  lang:  perl
-  class: Eperl
-  options:
-  input: |
-      <%
-         my $user = 'Erubis';
-         my @list = ('<aaa>', 'b&b', '"ccc"');
-      %>
-      <p>Hello <%= $user %>!</p>
-      <table>
-        <tbody>
-          <% $i = 0; %>
-          <% for $item (@list) { %>
-          <tr bgcolor=<%= ++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-            <td><%= $i %></td>
-            <td><%== $item %></td>
-          </tr>
-          <% } %>
-        </tbody>
-      </table>
-      <%=== $i %>
-  expected: |4
-      use HTML::Entities; 
-         my $user = 'Erubis';
-         my @list = ('<aaa>', 'b&b', '"ccc"');
-      
-      print('<p>Hello '); print($user); print('!</p>
-      <table>
-        <tbody>
-      ');      $i = 0; 
-           for $item (@list) { 
-      print('    <tr bgcolor='); print(++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); print('">
-            <td>'); print($i); print('</td>
-            <td>'); print(encode_entities($item)); print('</td>
-          </tr>
-      ');      } 
-      print('  </tbody>
-      </table>
-      '); print('*** debug: $i=', $i, "\n");print('
-      '); 
-##
-- name:  javascript1
-  lang:  javascript
-  class: Ejavascript
-  options:
-  input: &javascript_input |
-      <%
-         var user = 'Erubis';
-         var list = ['<aaa>', 'b&b', '"ccc"'];
-      %>
-      <p>Hello <%= user %>!</p>
-      <table>
-        <tbody>
-          <% var i; %>
-          <% for (i = 0; i < list.length; i++) { %>
-          <tr bgcolor=<%= ++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
-            <td><%= i %></td>
-            <td><%= list[i] %></td>
-          </tr>
-          <% } %>
-        </tbody>
-      </table>
-      <%=== i %>
-  expected: |4
-      var _buf = [];
-         var user = 'Erubis';
-         var list = ['<aaa>', 'b&b', '"ccc"'];
-      
-      _buf.push("<p>Hello "); _buf.push(user); _buf.push("!</p>\n\
-      <table>\n\
-        <tbody>\n");
-           var i; 
-           for (i = 0; i < list.length; i++) { 
-      _buf.push("    <tr bgcolor="); _buf.push(++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
-            <td>"); _buf.push(i); _buf.push("</td>\n\
-            <td>"); _buf.push(list[i]); _buf.push("</td>\n\
-          </tr>\n");
-           } 
-      _buf.push("  </tbody>\n\
-      </table>\n");
-      alert("*** debug: i="+(i)); _buf.push("\n");
-      document.write(_buf.join(""));
- ##
-- name:  javascript2
-  lang:  javascript
-  class: Ejavascript
-  options: { :docwrite: false }
-  input: *javascript_input
-  expected: |4
-      var _buf = [];
-         var user = 'Erubis';
-         var list = ['<aaa>', 'b&b', '"ccc"'];
-      
-      _buf.push("<p>Hello "); _buf.push(user); _buf.push("!</p>\n\
-      <table>\n\
-        <tbody>\n");
-           var i; 
-           for (i = 0; i < list.length; i++) { 
-      _buf.push("    <tr bgcolor="); _buf.push(++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
-            <td>"); _buf.push(i); _buf.push("</td>\n\
-            <td>"); _buf.push(list[i]); _buf.push("</td>\n\
-          </tr>\n");
-           } 
-      _buf.push("  </tbody>\n\
-      </table>\n");
-      alert("*** debug: i="+(i)); _buf.push("\n");
-      _buf.join("");
- ##
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-enhancers.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-enhancers.rb
deleted file mode 100644
index 696806a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-enhancers.rb
+++ /dev/null
@@ -1,571 +0,0 @@
-##
-## $Rev: 115 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require "#{File.dirname(__FILE__)}/test.rb"
-
-require 'stringio'
-
-require 'erubis'
-require 'erubis/engine/enhanced'
-require 'erubis/engine/optimized'
-
-
-class EnhancersTest < Test::Unit::TestCase
-
-  testdata_list = load_yaml_datafile(__FILE__)
-  define_testmethods(testdata_list)
-
-
-  def _test()
-    @src.gsub!(/\^/, ' ')
-    @output.gsub!(/\^/, ' ') if @output.is_a?(String)
-    if @class
-      k = Erubis
-      @class.split('::').each do |name| k = k.const_get(name) end
-      @klass = k
-    else
-      @klass = Erubis::Eruby
-    end
-    @options ||= {}
-    @chomp.each do |target|
-      case target
-      when 'src'      ;  @src.chomp!
-      when 'input'    ;  @input.chomp!
-      when 'expected' ;  @expected.chomp!
-      else
-        raise "#{@name}: invalid chomp value: #{@chomp.inspect}"
-      end
-    end if @chomp
-
-    if @testopt == 'load_file'
-      filename = "tmp.#{@name}.eruby"
-      begin
-        File.open(filename, 'w') { |f| f.write(@input) }
-        eruby = @klass.load_file(filename, @options)
-      ensure
-        cachename = filename + '.cache'
-        File.unlink(cachename) if test(?f, cachename)
-        File.unlink(filename) if test(?f, filename)
-      end
-    else
-      #if @klass == Erubis::TinyEruby
-      #  eruby = @klass.new(@input)
-      #else
-        eruby = @klass.new(@input, @options)
-      #end
-    end
-    assert_text_equal(@src, eruby.src)
-
-    return if @testopt == 'skip_output'
-
-    list = ['<aaa>', 'b&b', '"ccc"']
-    context = @testopt == 'context' ? Erubis::Context.new : {}
-    context[:list] = list
-
-    case @testopt
-    when /\Aeval\(/
-      eval eruby.src
-      actual = eval @testopt
-      assert_text_equal(@output, actual)
-    when 'stdout', 'print'
-      begin
-        orig = $stdout
-        $stdout = stringio = StringIO.new
-        #actual = eruby.evaluate(context)
-        actual = eruby.result(context)
-      ensure
-        $stdout = orig
-      end
-      if @testopt == 'stdout'
-        assert_equal("", actual)
-      else
-        assert_nil(actual)
-      end
-      assert_text_equal(@output, stringio.string)
-    when 'evaluate', 'context'
-      actual = eruby.evaluate(context)
-      assert_text_equal(@output, actual)
-    when 'binding'
-      actual = eruby.result(binding())
-      assert_text_equal(@output, actual)
-    else
-      actual = eruby.result(context)
-      assert_text_equal(@output, actual)
-    end
-  end
-
-
-  self.post_definition()
-
-end
-
-__END__
-
-##
-- name:  basic1
-  class: Eruby
-  input: &basic1_input|
-      <ul>
-       <% for item in list %>
-        <li><%= item %></li>
-       <% end %>
-      </ul>
-  src: &basic1_src|
-      _buf = ''; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: &basic1_output|
-      <ul>
-        <li><aaa></li>
-        <li>b&b</li>
-        <li>"ccc"</li>
-      </ul>
-
-- name:  xml1
-  class: XmlEruby
-  input: |
-      <pre>
-       <% for item in list %>
-        <%= item %>
-        <%== item %>
-       <% end %>
-      </pre>
-  src: |
-      _buf = ''; _buf << '<pre>
-      ';  for item in list 
-       _buf << '  '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
-      '; _buf << '  '; _buf << ( item ).to_s; _buf << '
-      ';  end 
-       _buf << '</pre>
-      ';
-      _buf.to_s
-  output: |
-      <pre>
-        <aaa>
-        <aaa>
-        b&b
-        b&b
-        "ccc"
-        "ccc"
-      </pre>
-
-##
-- name:  xml2
-  class: XmlEruby
-  testopt:  skip_output
-  input: |
-      <% for item in list %>
-        <%= item["var#{n}"] %>
-        <%== item["var#{n}"] %>
-        <%=== item["var#{n}"] %>
-        <%==== item["var#{n}"] %>
-      <% end %>
-  src: |
-      _buf = ''; for item in list 
-       _buf << '  '; _buf << Erubis::XmlHelper.escape_xml( item["var#{n}"] ); _buf << '
-      '; _buf << '  '; _buf << ( item["var#{n}"] ).to_s; _buf << '
-      '; _buf << '  '; $stderr.puts("*** debug: item[\"var\#{n}\"]=#{(item["var#{n}"]).inspect}"); _buf << '
-      '; _buf << '  '; _buf << '
-      '; end 
-      _buf.to_s
-  output: |
-
-##
-- name:  printout1
-  class: PrintOutEruby
-  testopt:  print
-  input: *basic1_input
-  src: |4
-       print '<ul>
-      ';  for item in list 
-       print '  <li>'; print(( item ).to_s); print '</li>
-      ';  end 
-       print '</ul>
-      ';
-  output: *basic1_output
-
-##
-- name:  printenabled1
-  class: PrintEnabledEruby
-  input: &printenabled1_input|
-      <ul>
-       <% for item in list %>
-        <li><% print item %></li>
-       <% end %>
-      </ul>
-  src: |
-      @_buf = _buf = ''; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; print item ; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: *basic1_output
-#      <ul>
-#        <li><aaa></li>
-#        <li>b&b</li>
-#        <li>"ccc"</li>
-#      </ul>
-
-##
-- name:  stdout1
-  class: StdoutEruby
-  testopt: stdout
-  input: *basic1_input
-#      <ul>
-#       <% for item in list %>
-#        <li><%= item %></li>
-#       <% end %>
-#      </ul>
-  src: |
-      _buf = $stdout; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      ''
-  output: *basic1_output
-#      <ul>
-#        <li><aaa></li>
-#        <li>b&b</li>
-#        <li>"ccc"</li>
-#      </ul>
-
-##
-- name:  array1
-  class: ArrayEruby
-  input: |
-      <ul>
-       <% for item in list %>
-        <li><%= item %></li>
-       <% end %>
-      </ul>
-  src: |
-      _buf = []; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf
-  output:
-      - "<ul>\n"
-      - "  <li>"
-      - "<aaa>"
-      - "</li>\n"
-      - "  <li>"
-      - "b&b"
-      - "</li>\n"
-      - "  <li>"
-      - "\"ccc\""
-      - "</li>\n"
-      - "</ul>\n"
-
-##
-- name:  arraybuffer1
-  class: ArrayBufferEruby
-  input: *basic1_input
-  src: |
-      _buf = []; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.join
-  output: *basic1_output
-
-- name:  stringbuffer1
-  class: StringBufferEruby
-  input: *basic1_input
-#      <ul>
-#       <% for item in list %>
-#        <li><%= item %></li>
-#       <% end %>
-#      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: *basic1_output
-#      <ul>
-#        <li><aaa></li>
-#        <li>b&b</li>
-#        <li>"ccc"</li>
-#      </ul>
-
-##
-- name:  erbout1
-  class: ErboutEruby
-  input: *basic1_input
-  src: |
-      _erbout = _buf = ''; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: *basic1_output
-
-##
-- name:  stringio1
-  class: StringIOEruby
-  input: *basic1_input
-  src: |
-      _buf = StringIO.new; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.string
-  output: *basic1_output
-
-##
-- name:  notext1
-  class: NoTextEruby
-  input: *basic1_input
-  src: |
-      _buf = '';
-        for item in list 
-             _buf << ( item ).to_s;
-        end 
-      
-      _buf.to_s
-  output:  '<aaa>b&b"ccc"'
-
-
-##
-- name:  nocode1
-  class: NoCodeEruby
-  testopt: skip_output
-  input: *basic1_input
-  src: |
-      <ul>
-
-        <li></li>
-
-      </ul>
-  output: 
-
-##
-- name:  simplified
-  class: SimplifiedEruby
-  input: |
-      <ul>
-       <% for item in list %>
-        <li>
-         <%= item %>
-        </li>
-       <% end %>
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-       '; for item in list ; _buf << '
-        <li>
-         '; _buf << ( item ).to_s; _buf << '
-        </li>
-       '; end ; _buf << '
-      </ul>
-      ';
-      _buf.to_s
-  output: |
-      <ul>
-      ^
-        <li>
-         <aaa>
-        </li>
-      ^
-        <li>
-         b&b
-        </li>
-      ^
-        <li>
-         "ccc"
-        </li>
-      ^
-      </ul>
-
-##
-- name:  bipattern1
-  class: BiPatternEruby
-  #options: { :bipattern : '\[= =\]' }
-  input: |
-      <% for item in list %>
-        <%= item %> % <%== item %>
-        [= item =] = [== item =]
-      <% end %>
-  src: |
-      _buf = ''; for item in list 
-       _buf << '  '; _buf << ( item ).to_s; _buf << ' % '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
-      '; _buf << '  '; _buf << ( item ).to_s; _buf << ' = '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
-      '; end 
-      _buf.to_s
-  output: |4
-        <aaa> % <aaa>
-        <aaa> = <aaa>
-        b&b % b&b
-        b&b = b&b
-        "ccc" % "ccc"
-        "ccc" = "ccc"
-
-##
-- name:  bipattern2
-  class: BiPatternEruby
-  options:  { :bipattern: '\$\{ \}' }
-  input: |
-      <% for item in list %>
-        <%=item%> % <%==item%>
-        ${item} = ${=item}
-      <% end %>
-  src: |
-      _buf = ''; for item in list 
-       _buf << '  '; _buf << (item).to_s; _buf << ' % '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
-      '; _buf << '  '; _buf << (item).to_s; _buf << ' = '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
-      '; end 
-      _buf.to_s
-  output: |4
-        <aaa> % <aaa>
-        <aaa> = <aaa>
-        b&b % b&b
-        b&b = b&b
-        "ccc" % "ccc"
-        "ccc" = "ccc"
-
-##
-- name:  percentline1
-  class: PercentLineEruby
-  options:
-  input: |
-      <table>
-      % for item in list
-        <tr>
-          <td><%= item %></td>
-          <td><%== item %></td>
-        </tr>
-      % end
-      </table>
-      <pre>
-      %% double percent
-       % spaced percent
-      </pre>
-  src: |
-      _buf = ''; _buf << '<table>
-      '; for item in list
-       _buf << '  <tr>
-          <td>'; _buf << ( item ).to_s; _buf << '</td>
-          <td>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</td>
-        </tr>
-      '; end
-       _buf << '</table>
-      <pre>
-      % double percent
-       % spaced percent
-      </pre>
-      ';
-      _buf.to_s
-  output: |
-      <table>
-        <tr>
-          <td><aaa></td>
-          <td><aaa></td>
-        </tr>
-        <tr>
-          <td>b&b</td>
-          <td>b&b</td>
-        </tr>
-        <tr>
-          <td>"ccc"</td>
-          <td>"ccc"</td>
-        </tr>
-      </table>
-      <pre>
-      % double percent
-       % spaced percent
-      </pre>
-
-##
-- name:  headerfooter1
-  class: HeaderFooterEruby
-  options:
-  testopt:  eval('ordered_list(list)')
-  input: |
-      <!--#header:
-      def ordered_list(list)
-      #-->
-      <ol>
-        <% for item in list %>
-        <li><%==item%></li>
-        <% end %>
-      </ol>
-      <!--#footer: end #-->
-  src: |4
-      
-      def ordered_list(list)
-      
-      _buf = ''; _buf << '<ol>
-      ';   for item in list 
-       _buf << '  <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
-      ';   end 
-       _buf << '</ol>
-      ';
-      _buf.to_s
-       end 
-  output: |
-      <ol>
-        <li><aaa></li>
-        <li>b&b</li>
-        <li>"ccc"</li>
-      </ol>
-
-##
-- name:  deleteindent1
-  class: DeleteIndentEruby
-  options:
-  testopt:
-  input: *basic1_input
-  src: |
-      _buf = ''; _buf << '<ul>
-      '; for item in list 
-       _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>
-      '; end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: |
-      <ul>
-      <li><aaa></li>
-      <li>b&b</li>
-      <li>"ccc"</li>
-      </ul>
-
-##
-- name:  interpolation1
-  class: InterpolationEruby
-  options:
-  testopt:
-  input: *basic1_input
-  src: |
-      _buf = ''; _buf << %Q`<ul>\n`
-        for item in list 
-       _buf << %Q`  <li>#{ item }</li>\n`
-        end 
-       _buf << %Q`</ul>\n`
-      _buf.to_s
-  output: *basic1_output
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-erubis.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-erubis.rb
deleted file mode 100644
index 08e5c7e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-erubis.rb
+++ /dev/null
@@ -1,884 +0,0 @@
-##
-## $Rev: 115 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-require "#{File.dirname(__FILE__)}/test.rb"
-
-require 'stringio'
-
-require 'erubis'
-require 'erubis/engine/enhanced'
-require 'erubis/engine/optimized'
-require 'erubis/tiny'
-
-
-class ErubisTest < Test::Unit::TestCase
-
-  testdata_list = load_yaml_datafile(__FILE__)
-  define_testmethods(testdata_list)
-
-
-  def _test()
-    @src.gsub!(/\^/, ' ')
-    @output.gsub!(/\^/, ' ') if @output.is_a?(String)
-    if @class
-      k = Erubis
-      @class.split('::').each do |name| k = k.const_get(name) end
-      @klass = k
-    else
-      @klass = Erubis::Eruby
-    end
-    @options ||= {}
-    @chomp.each do |target|
-      case target
-      when 'src'      ;  @src.chomp!
-      when 'input'    ;  @input.chomp!
-      when 'expected' ;  @expected.chomp!
-      else
-        raise "#{@name}: invalid chomp value: #{@chomp.inspect}"
-      end
-    end if @chomp
-
-    if @testopt == 'load_file'
-      filename = "tmp.#{@name}.eruby"
-      begin
-        File.open(filename, 'w') { |f| f.write(@input) }
-        eruby = @klass.load_file(filename, @options)
-      ensure
-        cachename = filename + '.cache'
-        File.unlink(cachename) if test(?f, cachename)
-        File.unlink(filename) if test(?f, filename)
-      end
-    else
-      if @klass == Erubis::TinyEruby
-        eruby = @klass.new(@input)
-      else
-        eruby = @klass.new(@input, @options)
-      end
-    end
-    assert_text_equal(@src, eruby.src)
-
-    return if @testopt == 'skip_output'
-
-    list = ['<aaa>', 'b&b', '"ccc"']
-    context = @testopt == 'context' ? Erubis::Context.new : {}
-    context[:list] = list
-
-    case @testopt
-    when /\Aeval\(/
-      eval eruby.src
-      actual = eval @testopt
-      assert_text_equal(@output, actual)
-    when 'stdout', 'print'
-      begin
-        orig = $stdout
-        $stdout = stringio = StringIO.new
-        #actual = eruby.evaluate(context)
-        actual = eruby.result(context)
-      ensure
-        $stdout = orig
-      end
-      if @testopt == 'stdout'
-        assert_equal("", actual)
-      else
-        assert_nil(actual)
-      end
-      assert_text_equal(@output, stringio.string)
-    when 'evaluate', 'context'
-      actual = eruby.evaluate(context)
-      assert_text_equal(@output, actual)
-    when 'binding'
-      actual = eruby.result(binding())
-      assert_text_equal(@output, actual)
-    else
-      actual = eruby.result(context)
-      assert_text_equal(@output, actual)
-    end
-  end
-
-
-  def test_load_file_cache1
-    @input = <<END
-<ul>
-<% for item in @list %>
-  <li><%= item %></li>
-<% end %>
-</ul>
-END
-    @src = <<END
-_buf = ''; _buf << '<ul>
-'; for item in @list 
- _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-'; end 
- _buf << '</ul>
-';
-_buf.to_s
-END
-    @klass = Erubis::Eruby
-    filename = 'tmp.load_file_timestamp1'
-    cachename = filename + '.cache'
-    begin
-      File.open(filename, 'w') { |f| f.write(@input) }
-      assert_block() { !test(?f, cachename) }
-      engine = @klass.load_file(filename)
-      assert_block() { test(?f, cachename) }
-      assert_block() { File.mtime(filename) <= File.mtime(cachename) }
-      assert_text_equal(@src, engine.src)
-      #
-      input2 = @input.gsub(/ul>/, 'ol>')
-      src2   = @src.gsub(/ul>/, 'ol>')
-      mtime = File.mtime(filename)
-      File.open(filename, 'w') { |f| f.write(input2) }
-      t1 = Time.now()
-      sleep(1)
-      t2 = Time.now()
-      File.utime(t1, t1, filename)
-      File.utime(t2, t2, cachename)
-      assert_block('cache should be newer') { File.mtime(filename) < File.mtime(cachename) }
-      engine = @klass.load_file(filename)
-      assert_block('cache should be newer') { File.mtime(filename) < File.mtime(cachename) }
-      assert_text_equal(@src, engine.src)
-      #
-      File.utime(t2, t2, filename)
-      File.utime(t1, t1, cachename)
-      assert_block('cache should be older') { File.mtime(filename) > File.mtime(cachename) }
-      engine = @klass.load_file(filename)
-      assert_block('cache should be newer') { File.mtime(filename) <= File.mtime(cachename) }
-      assert_text_equal(src2, engine.src)
-    ensure
-      File.unlink(cachename) if File.file?(cachename)
-      File.unlink(filename) if File.file?(filename)
-    end
-  end
-
-
-  class Dummy
-  end
-
-  def _class_has_instance_method(klass, method)
-    return klass.instance_methods.collect{|m| m.to_s}.include?(method.to_s)
-  end
-
-  def test_def_method1
-    s = "<%for i in list%>i=<%=i%>\n<%end%>"
-    eruby = Erubis::Eruby.new(s)
-    assert(! _class_has_instance_method(Dummy, 'render'))
-    eruby.def_method(Dummy, 'render(list)', 'foo.rhtml')
-    assert(_class_has_instance_method(Dummy, 'render'))
-    actual = Dummy.new().render(%w[1 2 3])
-    assert_equal("i=1\ni=2\ni=3\n", actual)
-  end
-
-  def test_def_method2
-    s = "<%for i in list%>i=<%=i%>\n<%end%>"
-    eruby = Erubis::Eruby.new(s)
-    assert(! (eruby.respond_to? :render))
-    eruby.def_method(eruby, 'render(list)', 'foo.rhtml')
-    assert eruby.respond_to?(:render)
-    actual = eruby.render([1, 2, 3])
-    assert_equal("i=1\ni=2\ni=3\n", actual)
-    assert(! _class_has_instance_method(eruby.class, 'render'))
-  end
-
-  def test_evaluate_creates_proc
-    s = "hello <%= @name %>"
-    eruby = Erubis::Eruby.new(s)
-    assert_nil(eruby.instance_variable_get('@_proc'))
-    actual1 = eruby.evaluate(:name=>'world')
-    assert_not_nil(eruby.instance_variable_get('@_proc'))
-    assert_instance_of(Proc, eruby.instance_variable_get('@_proc'))
-    actual2 = eruby.evaluate(:name=>'world')
-    assert_equal(actual1, actual2)
-    # convert() must clear @_proc
-    eruby.convert(s)
-    assert_nil(eruby.instance_variable_get('@_proc'))
-  end
-
-  #def test_toplevel_binding
-  #  s = "locals = <%= local_variables().inspect %>\n<% x = 50 %>\n"
-  #  eruby = Erubis::Eruby.new(s)
-  #  _x = eval 'x', TOPLEVEL_BINDING
-  #  _y = eval 'y', TOPLEVEL_BINDING
-  #  actual = eruby.evaluate(:x=>_x, :y=>_y)
-  #  _x = eval 'x', TOPLEVEL_BINDING
-  #  _y = eval 'y', TOPLEVEL_BINDING
-  #  puts "*** actual=#{actual.inspect}, x=#{_x.inspect}, y=#{_y.inspect}"
-  #end
-
-  self.post_definition()
-
-end
-
-x = 10
-y = 20
-
-
-__END__
-- name:  basic1
-  input: &basic1_input|
-      <ul>
-       <% for item in list %>
-        <li><%= item %></li>
-       <% end %>
-      </ul>
-  src: &basic1_src|
-      _buf = ''; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: &basic1_output|
-      <ul>
-        <li><aaa></li>
-        <li>b&b</li>
-        <li>"ccc"</li>
-      </ul>
-
-##
-- name:  basic2
-  input: |
-      <ul>
-        <% i = 0
-           for item in list
-             i += 1
-         %>
-        <li><%= item %></li>
-        <% end %>
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-      ';   i = 0
-           for item in list
-             i += 1
-      ^^^
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';   end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: *basic1_output
-#      <ul>
-#        <li><aaa></li>
-#        <li>b&b</li>
-#        <li>"ccc"</li>
-#      </ul>
-
-##
-- name:  basic3
-  input: |
-      <ul><% i = 0
-          for item in list
-            i += 1 %><li><%= item %></li><% end %>
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>'; i = 0
-          for item in list
-            i += 1 ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>'; end ; _buf << '
-      '; _buf << '</ul>
-      ';
-      _buf.to_s
-  output: |
-      <ul><li><aaa></li><li>b&b</li><li>"ccc"</li>
-      </ul>
-
-##
-- name:  context1
-  testopt:  context
-  input: |
-      <ul>
-       <% for item in @list %>
-        <li><%= item %></li>
-       <% end %>
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-      ';  for item in @list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: *basic1_output
-
-##
-- name:  ignore1
-  input: |
-      <ul>
-       <%# i = 0 %>
-       <% for item in list %>
-        <%#
-           i += 1
-           color = i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'
-         %>
-        <li>  <%#= i %>  :  <%= item %>  </li>
-       <% end %>
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-      ';
-        for item in list 
-      
-      
-      
-      
-       _buf << '  <li>  ';; _buf << '  :  '; _buf << ( item ).to_s; _buf << '  </li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: |
-      <ul>
-        <li>    :  <aaa>  </li>
-        <li>    :  b&b  </li>
-        <li>    :  "ccc"  </li>
-      </ul>
-
-##
-- name:  quotation1
-  desc:  single quotation and backslash
-  class: Eruby
-  input: &quotation1_input|
-      a = "'"
-      b = "\""
-      c = '\''
-  src: |
-      _buf = ''; _buf << 'a = "\'"
-      b = "\\""
-      c = \'\\\'\'
-      ';
-      _buf.to_s
-  output: *quotation1_input
-
-##
-- name:  minus1
-  desc:  '<%- -%>'
-  class: Eruby
-  input: |
-      <ul>
-       <%- for item in list -%>
-        <li><%= item -%></li>
-       <% end -%>
-      </ul>
-  src: *basic1_src
-  output: *basic1_output
-
-##
-- name:  pattern1
-  options:
-      :pattern : '\[@ @\]'
-  input: |
-      <ul>
-       [@ for item in list @]
-        <li>[@= item @]</li>
-       [@ end @]
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: *basic1_output
-#      <ul>
-#        <li><aaa></li>
-#        <li>b&b</li>
-#        <li>"ccc"</li>
-#      </ul>
-
-##
-- name:  pattern2
-  options:
-      :pattern : '<(?:!--)?% %(?:--)?>'
-  input: |
-      <ul>
-       <!--% for item in list %-->
-        <li><%= item %></li>
-       <!--% end %-->
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: *basic1_output
-#      <ul>
-#        <li><aaa></li>
-#        <li>b&b</li>
-#        <li>"ccc"</li>
-#      </ul>
-
-##
-- name:  trim1
-  options:
-      :trim : false
-  input: *basic1_input
-#      <ul>
-#       <% for item in list %>
-#        <li><%= item %></li>
-#       <% end %>
-#      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-      '; _buf << ' '; for item in list ; _buf << '
-      '; _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      '; _buf << ' '; end ; _buf << '
-      '; _buf << '</ul>
-      ';
-      _buf.to_s
-  output: |
-      <ul>
-      ^
-        <li><aaa></li>
-      ^
-        <li>b&b</li>
-      ^
-        <li>"ccc"</li>
-      ^
-      </ul>
-
-##
-- name:  bodyonly1
-  testopt:  skip_output
-  options: { :preamble: no, :postamble: no }
-  input: *basic1_input
-  src: |4
-       _buf << '<ul>
-      ';  for item in list 
-       _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-  chomp:  [src]
-  expected: null
-
-##
-- name:  loadfile1
-  testopt: load_file
-  #input: |
-  #    <ul>
-  #     <% for item in list %>
-  #      <li><%= item %></li>
-  #     <% end %>
-  #    </ul>
-  input:
-      "<ul>\r\n <% for item in list %>\r\n  <li><%= item %></li>\r\n <% end %>\r\n</ul>\r\n"
-  #src: |
-  #    _buf = ''; _buf << "<ul>\n"
-  #      for item in list
-  #    _buf << "  <li>"; _buf << ( item ).to_s; _buf << "</li>\n"
-  #      end
-  #    _buf << "</ul>\n"
-  #    _buf
-  src:
-    "_buf = ''; _buf << '<ul>\r\n';  for item in list \r\n _buf << '  <li>'; _buf << ( item ).to_s; _buf << '</li>\r\n';  end \r\n _buf << '</ul>\r\n';\n_buf.to_s\n"
-  #output: |
-  #    <ul>
-  #      <li><aaa></li>
-  #      <li>b&b</li>
-  #      <li>"ccc"</li>
-  #    </ul>
-  output:
-      "<ul>\n  <li><aaa></li>\n  <li>b&b</li>\n  <li>\"ccc\"</li>\n</ul>\n"
-  #    "<ul>\r\n  <li><aaa></li>\r\n  <li>b&b</li>\r\n  <li>\"ccc\"</li>\r\n</ul>\r\n"
-
-##
-- name:  nomatch1
-  desc:  bug
-  input: &nomatch1|
-      <ul>
-        <li>foo</li>
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-        <li>foo</li>
-      </ul>
-      ';
-      _buf.to_s
-  output: *nomatch1
-
-##
-- name:  escape1
-  options: { :escape: true }
-  input: |
-      <% str = '<>&"' %>
-      <%= str %>
-      <%== str %>
-  src: |
-      _buf = ''; str = '<>&"' 
-       _buf << Erubis::XmlHelper.escape_xml( str ); _buf << '
-      '; _buf << ( str ).to_s; _buf << '
-      ';
-      _buf.to_s
-  output: |
-      <>&"
-      <>&"
-
-##
-- name:  tailch1
-  options:
-  input: |
-        <p>
-          <% str = '<>&"' %>
-          <%= str %>
-          <%= str =%>
-          <%= str -%>
-        </p>
-  src: |
-        _buf = ''; _buf << '<p>
-        ';   str = '<>&"' 
-         _buf << '  '; _buf << ( str ).to_s; _buf << '
-        '; _buf << '  '; _buf << ( str ).to_s; _buf << '  '; _buf << ( str ).to_s; _buf << '</p>
-        ';
-        _buf.to_s
-  output: |
-        <p>
-          <>&"
-          <>&"  <>&"</p>
-
-##
-- name:  doublepercent1
-  options:
-  input: |
-        <% x1 = 10 %>
-        <%% x2 = 20 %>
-        <%= x1 %>
-        <%%= x2 %>
-  src: |
-        _buf = ''; x1 = 10 
-         _buf << '<% x2 = 20 %>
-        '; _buf << ( x1 ).to_s; _buf << '
-        '; _buf << '<%= x2 %>
-        ';
-        _buf.to_s
-  output: |
-        <% x2 = 20 %>
-        10
-        <%= x2 %>
-
-##
-- name:  optimized1
-  class: OptimizedEruby
-  input: &optimized1_input|
-      <table>
-       <% for item in list %>
-        <tr>
-          <td><%= item %></td>
-          <td><%== item %></td>
-        </tr>
-       <% end %>
-      </table>
-      <ul><% for item in list %><li><%= item %></li><% end %></ul>
-  src: |
-      _buf = '<table>
-      ';  for item in list 
-       _buf << '  <tr>
-          <td>' << ( item ).to_s << '</td>
-          <td>' << Erubis::XmlHelper.escape_xml( item ) << '</td>
-        </tr>
-      ';  end 
-       _buf << '</table>
-      <ul>'; for item in list ; _buf << '<li>' << ( item ).to_s << '</li>'; end ; _buf << '</ul>
-      '
-      _buf
-  output: |
-      <table>
-        <tr>
-          <td><aaa></td>
-          <td><aaa></td>
-        </tr>
-        <tr>
-          <td>b&b</td>
-          <td>b&b</td>
-        </tr>
-        <tr>
-          <td>"ccc"</td>
-          <td>"ccc"</td>
-        </tr>
-      </table>
-      <ul><li><aaa></li><li>b&b</li><li>"ccc"</li></ul>
-
-##
-- name:  optimized2
-  class: OptimizedXmlEruby
-  input: *optimized1_input
-#      <table>
-#       <% for item in list %>
-#        <tr>
-#          <td><%= item %></td>
-#          <td><%== item %></td>
-#        </tr>
-#       <% end %>
-#      </table>
-#      <ul><% for item in list %><li><%= item %></li><% end %></ul>
-  src: |
-      _buf = '<table>
-      ';  for item in list 
-       _buf << '  <tr>
-          <td>' << Erubis::XmlHelper.escape_xml( item ) << '</td>
-          <td>' << ( item ).to_s << '</td>
-        </tr>
-      ';  end 
-       _buf << '</table>
-      <ul>'; for item in list ; _buf << '<li>' << Erubis::XmlHelper.escape_xml( item ) << '</li>'; end ; _buf << '</ul>
-      '
-      _buf
-  output: |
-      <table>
-        <tr>
-          <td><aaa></td>
-          <td><aaa></td>
-        </tr>
-        <tr>
-          <td>b&b</td>
-          <td>b&b</td>
-        </tr>
-        <tr>
-          <td>"ccc"</td>
-          <td>"ccc"</td>
-        </tr>
-      </table>
-      <ul><li><aaa></li><li>b&b</li><li>"ccc"</li></ul>
-
-##
-- name:  optimized3
-  desc:  bug
-  class: OptimizedEruby
-  input: |
-      user = <%= "Foo" %>
-      <% for item in list %>
-        <%= item %>
-      <% end %>
-  src: |
-      _buf = 'user = '; _buf << ( "Foo" ).to_s << '
-      '; for item in list 
-       _buf << '  ' << ( item ).to_s << '
-      '; end 
-
-      _buf
-  output: |
-      user = Foo
-        <aaa>
-        b&b
-        "ccc"
-
-##
-- name:  optimized4
-  desc:  single quotation and backslash
-  class: OptimizedEruby
-  input: &optimized4_input|
-      a = "'"
-      b = "\""
-      c = '\''
-  src: |
-      _buf = 'a = "\'"
-      b = "\\""
-      c = \'\\\'\'
-      ';
-      _buf
-  output: *optimized4_input
-
-##
-- name:  tiny1
-  class: TinyEruby
-  testopt:  binding
-  input: |
-      <ul>
-       <% for item in list %>
-        <li><%= item %></li>
-       <% end %>
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-       '; for item in list ; _buf << '
-        <li>'; _buf << ( item ).to_s; _buf << '</li>
-       '; end ; _buf << '
-      </ul>
-      ';
-      _buf.to_s
-  output: |
-      <ul>
-      ^
-        <li><aaa></li>
-      ^
-        <li>b&b</li>
-      ^
-        <li>"ccc"</li>
-      ^
-      </ul>
-
-##
-- name:  tiny2
-  class: TinyEruby
-  testopt:  evaluate
-  input: |
-      <ul>
-       <% for item in @list %>
-        <li><%= item %></li>
-       <% end %>
-      </ul>
-  src: |
-      _buf = ''; _buf << '<ul>
-       '; for item in @list ; _buf << '
-        <li>'; _buf << ( item ).to_s; _buf << '</li>
-       '; end ; _buf << '
-      </ul>
-      ';
-      _buf.to_s
-  output: |
-      <ul>
-      ^
-        <li><aaa></li>
-      ^
-        <li>b&b</li>
-      ^
-        <li>"ccc"</li>
-      ^
-      </ul>
-
-##
-- name:  pi1
-  class:  PI::Eruby
-  testopt:  evaluate
-  input: &input_pi1|
-      <ul>
-       <?rb for item in @list ?>
-        <li>@{item}@ / @!{item}@</li>
-        <li><%= item %> / <%== item %></li>
-       <?rb end ?>
-      </ul>
-  src: &src_pi1|
-      _buf = ''; _buf << '<ul>
-      ';  for item in @list 
-       _buf << '  <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << ' / '; _buf << (item).to_s; _buf << '</li>
-        <li>'; _buf << ( item ).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: &output_pi1|
-      <ul>
-        <li><aaa> / <aaa></li>
-        <li><aaa> / <aaa></li>
-        <li>b&b / b&b</li>
-        <li>b&b / b&b</li>
-        <li>"ccc" / "ccc"</li>
-        <li>"ccc" / "ccc"</li>
-      </ul>
-
-##
-- name:  pi2
-  class:  PI::Eruby
-  options: { :escape: false }
-  testopt:  evaluate
-  input: *input_pi1
-  src: |
-      _buf = ''; _buf << '<ul>
-      ';  for item in @list 
-       _buf << '  <li>'; _buf << (item).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
-        <li>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << ' / '; _buf << ( item ).to_s; _buf << '</li>
-      ';  end 
-       _buf << '</ul>
-      ';
-      _buf.to_s
-  output: |
-      <ul>
-        <li><aaa> / <aaa></li>
-        <li><aaa> / <aaa></li>
-        <li>b&b / b&b</li>
-        <li>b&b / b&b</li>
-        <li>"ccc" / "ccc"</li>
-        <li>"ccc" / "ccc"</li>
-      </ul>
-
-##
-- name:  pi3
-  class:  PI::Eruby
-  options: { :pi: hoge, :embchar: '$' }
-  testopt:  evaluate
-  input: |
-      <ul>
-       <?hoge for item in @list ?>
-        <li>${item}$ / $!{item}$</li>
-        <li><%= item %> / <%== item %></li>
-       <?hoge end ?>
-      </ul>
-  src: *src_pi1
-  output: *output_pi1
-
-- name:  pi4
-  class:  PI::Eruby
-  testopt: evaluate
-  input: |
-      <?rb-header
-        def show(list)
-      ?>
-      <ul>
-       <?rb for item in list ?>
-         <?rb-value item ?>
-       <?rb end ?>
-       <?rb-comment
-       # comment
-       # comment
-       ?>
-      </ul>
-      <?rb-footer
-        end
-	show(@list) ?>
-
-  src: |4
-      
-        def show(list)
-      
-      _buf = ''; _buf << '<ul>
-      ';  for item in list 
-       _buf << (    item 
-      ).to_s;  end 
-      
-      
-      
-
-       _buf << '</ul>
-      ';
-      _buf.to_s
-      
-        end
-	show(@list) 
-
-  output: |
-      <ul>
-      <aaa>b&b"ccc"</ul>
-      
-
-- name:  pitiny1
-  class:  PI::TinyEruby
-  testopt: evaluate
-  input: |
-	<ul>
-	 <?rb for item in @list ?>
-	  <li>@{item}@ / @!{item}@</li>
-	 <?rb end ?>
-	</ul>
-  src: |
-	_buf = ''; _buf << '<ul>
-	';  for item in @list 
-	 _buf << '  <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << ' / '; _buf << (item).to_s; _buf << '</li>
-	';  end 
-	 _buf << '</ul>
-	';
-	_buf.to_s
-  output: |
-	<ul>
-	  <li><aaa> / <aaa></li>
-	  <li>b&b / b&b</li>
-	  <li>"ccc" / "ccc"</li>
-	</ul>
-
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-main.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-main.rb
deleted file mode 100644
index dff9561..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-main.rb
+++ /dev/null
@@ -1,674 +0,0 @@
-##
-## $Rev: 116 $
-## $Release: 2.6.2 $
-## $Date: 2008-06-12 21:08:47 +0900 (Thu, 12 Jun 2008) $
-##
-
-require  "#{File.dirname(__FILE__)}/test.rb"
-
-require 'tempfile'
-require 'erubis/main'
-
-
-$script = File.dirname(TESTDIR) + '/bin/erubis'
-#if test(?f, 'bin/erubis')
-#  $script = 'bin/erubis'
-#elsif test(?f, '../bin/erubis')
-#  $script = '../bin/erubis'
-#end
-
-
-class StringWriter < String
-  def write(arg)
-    self << arg
-  end
-  def flush(*args)
-    # pass
-  end
-end
-
-class Erubis::Main
-  public :usage
-  public :show_properties
-  public :show_enhancers
-end
-
-
-class MainTest < Test::Unit::TestCase
-
-  INPUT = <<'END'
-list:
-<% list = ['<aaa>', 'b&b', '"ccc"']
-   for item in list %>
-  - <%= item %>
-<% end %>
-user: <%= defined?(user) ? user : "(none)" %>
-END
-  INPUT2 = INPUT.gsub(/\blist([^:])/, '@list\1').gsub(/\buser([^:])/, '@user\1')
-
-#  SRC = <<'END'
-#_buf = ''; _buf << "list:\n"
-# list = ['<aaa>', 'b&b', '"ccc"']
-#   for item in list
-#_buf << "  - "; _buf << ( item ).to_s; _buf << "\n"
-# end
-#_buf << "user: "; _buf << ( defined?(user) ? user : "(none)" ).to_s; _buf << "\n"
-#_buf
-#END
-  SRC = <<'END'
-_buf = ''; _buf << 'list:
-'; list = ['<aaa>', 'b&b', '"ccc"']
-   for item in list 
- _buf << '  - '; _buf << ( item ).to_s; _buf << '
-'; end 
- _buf << 'user: '; _buf << ( defined?(user) ? user : "(none)" ).to_s; _buf << '
-';
-_buf.to_s
-END
-#  SRC2 = SRC.gsub(/\blist /, '@list ').gsub(/\buser /, '@user ')
-
-  OUTPUT = <<'END'
-list:
-  - <aaa>
-  - b&b
-  - "ccc"
-user: (none)
-END
-
-  ESCAPED_OUTPUT = <<'END'
-list:
-  - <aaa>
-  - b&b
-  - "ccc"
-user: (none)
-END
-
-
-  PI_INPUT = <<'END'
-<ul>
-  <?rb @list = ['<aaa>', 'b&b', '"ccc"']
-   for item in @list ?>
-  <li>@{item}@ / @!{item}@
-      <%= item %> / <%== item %></li>
-  <?rb end ?>
-<ul>
-END
-
-  PI_SRC = <<'END'
-_buf = ''; _buf << '<ul>
-';   @list = ['<aaa>', 'b&b', '"ccc"']
-   for item in @list 
- _buf << '  <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << ' / '; _buf << (item).to_s; _buf << '
-      '; _buf << ( item ).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</li>
-';   end 
- _buf << '<ul>
-';
-_buf.to_s
-END
-
-  PI_ESCAPED_SRC = <<'END'
-_buf = ''; _buf << '<ul>
-';   @list = ['<aaa>', 'b&b', '"ccc"']
-   for item in @list 
- _buf << '  <li>'; _buf << (item).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
-      '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << ' / '; _buf << ( item ).to_s; _buf << '</li>
-';   end 
- _buf << '<ul>
-';
-_buf.to_s
-END
-
-  PI_OUTPUT = <<'END'
-<ul>
-  <li><aaa> / <aaa>
-      <aaa> / <aaa></li>
-  <li>b&b / b&b
-      b&b / b&b</li>
-  <li>"ccc" / "ccc"
-      "ccc" / "ccc"</li>
-<ul>
-END
-
-  PI_ESCAPED_OUTPUT = <<'END'
-<ul>
-  <li><aaa> / <aaa>
-      <aaa> / <aaa></li>
-  <li>b&b / b&b
-      b&b / b&b</li>
-  <li>"ccc" / "ccc"
-      "ccc" / "ccc"</li>
-<ul>
-END
-
-  def _test()
-    if $target
-      name = (caller()[0] =~ /in `test_(.*?)'/) && $1
-      return unless name == $target
-    end
-    if @filename.nil?
-      method = (caller[0] =~ /in `(.*)'/) && $1    #'
-      method =~ /block in (.*)/ and method = $1    # for Ruby 1.9
-      @filename = "tmp.#{method}"
-    end
-    File.open(@filename, 'w') { |f| f.write(@input) } if @filename
-    begin
-      #if @options.is_a?(Array)
-      #  command = "ruby #{$script} #{@options.join(' ')} #{@filename}"
-      #else
-      #  command = "ruby #{$script} #{@options} #{@filename}"
-      #end
-      #output = `#{command}`
-      if @options.is_a?(Array)
-        argv = @options + [ @filename ]
-      else
-        argv = "#{@options} #{@filename}".split
-      end
-      $stdout = output = StringWriter.new
-      Erubis::Main.new.execute(argv)
-    ensure
-      $stdout = STDOUT
-      File.unlink(@filename) if @filename && test(?f, @filename)
-    end
-    assert_text_equal(@expected, output)
-  end
-
-  def test_help      # -h
-    @options = '-h'
-    m = Erubis::Main.new
-    @expected = m.usage() + "\n" + m.show_properties() + m.show_enhancers()
-    @filename = false
-    _test()
-  end
-
-  def test_version    # -v
-    @options = '-v'
-    @expected = (("$Release: 2.6.2 $" =~ /[.\d]+/) && $&) + "\n"
-    @filename = false
-    _test()
-  end
-
-
-  def test_basic1
-    @input    = INPUT
-    @expected = OUTPUT
-    @options  = ''
-    _test()
-  end
-
-
-  def test_source1    # -x
-    @input    = INPUT
-    @expected = SRC
-    @options  = '-x'
-    _test()
-  end
-
-
-  def test_syntax1    # -z (syntax ok)
-    @input    = INPUT
-    @expected = "Syntax OK\n"
-    @options  = '-z'
-    _test()
-  end
-
-
-  def test_syntax2    # -z (syntax error)
-    inputs = []
-    inputs << <<'END'
-<ul>
-<% for item in list %>
-  <li><%= item[:name]] %></li>
-<% end %>
-</ul>
-END
-    inputs << <<'END'
-<ul>
-<% for item in list %>
-  <li><%= item[:name] %></li>
-<% edn %>
-</ul>
-END
-    basename = 'tmp.test_syntax2_%d.rhtml'
-    filenames = [ basename % 0, basename % 1 ]
-    errmsgs = []
-    if ruby19?
-      errmsgs << <<'END'
-3: syntax error, unexpected ']', expecting ')'
- _buf << '  <li>'; _buf << ( item[:name]] ).to_s; _buf << '</li>
-                                         ^
--:4: syntax error, unexpected keyword_end, expecting ')'
-'; end 
-      ^
--:7: syntax error, unexpected $end, expecting ')'
-END
-      errmsgs << <<'END'
-7: syntax error, unexpected $end, expecting keyword_end or keyword_endfor
-END
-    else
-      errmsgs << <<'END'
-3: syntax error, unexpected ']', expecting ')'
- _buf << '  <li>'; _buf << ( item[:name]] ).to_s; _buf << '</li>
-                                         ^
--:4: syntax error, unexpected kEND, expecting ')'
-'; end 
-      ^
--:7: syntax error, unexpected $end, expecting ')'
-END
-      errmsgs << <<'END'
-7: syntax error, unexpected $end, expecting kEND
-END
-    end
-    #
-    max = inputs.length
-    (0...max).each do |i|
-      @input    = inputs[i]
-      @expected = "tmp.test_syntax2:#{errmsgs[i]}"
-      @options  = '-z'
-      _test()
-    end
-    #
-    begin
-      (0...max).each do |i|
-        File.open(filenames[i], 'w') { |f| f.write(inputs[i]) }
-      end
-      @input = '<ok/>'
-      @expected = ''
-      @options = '-z'
-      (0...max).each do |i|
-        @expected << "#{filenames[i]}:#{errmsgs[i]}"
-        @options << " #{filenames[i]}"
-      end
-      _test()
-    ensure
-      (0...max).each do |i|
-        File.unlink(filenames[i]) if test(?f, filenames[i])
-      end
-    end
-  end
-
-
-  def test_pattern1   # -p
-    @input    = INPUT.gsub(/<%/, '<!--%').gsub(/%>/, '%-->')
-    @expected = OUTPUT
-    #@options  = "-p '<!--% %-->'"
-    @options  = ["-p", "<!--% %-->"]
-    _test()
-  end
-
-
-#  def test_class1     # -C
-#    @input    = INPUT
-#    @expected = OUTPUT.gsub(/<aaa>/, '<aaa>').gsub(/b&b/, 'b&b').gsub(/"ccc"/, '"ccc"')
-#    @options  = "-C XmlEruby"
-#    _test()
-#  end
-
-
-  def test_notrim1    # --trim=false
-    @input   = INPUT
-    @expected = <<'END'
-list:
-
-  - <aaa>
-
-  - b&b
-
-  - "ccc"
-
-user: (none)
-END
-    @options = "--trim=false"  # -T
-    _test()
-  end
-
-
-  def test_notrim2    # --trim=false
-    @input    = INPUT
-#    @expected = <<'END'
-#_buf = ''; _buf << "list:\n"
-# list = ['<aaa>', 'b&b', '"ccc"']
-#   for item in list ; _buf << "\n"
-#_buf << "  - "; _buf << ( item ).to_s; _buf << "\n"
-# end ; _buf << "\n"
-#_buf << "user: "; _buf << ( defined?(user) ? user : "(none)" ).to_s; _buf << "\n"
-#_buf
-#END
-    @expected = <<'END'
-_buf = ''; _buf << 'list:
-'; list = ['<aaa>', 'b&b', '"ccc"']
-   for item in list ; _buf << '
-'; _buf << '  - '; _buf << ( item ).to_s; _buf << '
-'; end ; _buf << '
-'; _buf << 'user: '; _buf << ( defined?(user) ? user : "(none)" ).to_s; _buf << '
-';
-_buf.to_s
-END
-    @options = "-x --trim=false"   # -xT
-    _test()
-  end
-
-
-  #--
-  #def test_context1
-  #  @input    = INPUT
-  #  @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
-  #  @options  = '--user=Hello'
-  #  _test()
-  #end
-  #++
-
-
-  def test_datafile1      # -f data.yaml
-    datafile = "test.context1.yaml"
-    @input    = INPUT2
-    @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
-    @options  = "-f #{datafile}"
-    #
-    str = <<-END
-    user:  Hello
-    password:  world
-    END
-    File.open(datafile, 'w') { |f| f.write(str) }
-    begin
-      _test()
-    ensure
-      File.unlink(datafile) if test(?f, datafile)
-    end
-  end
-
-
-  def test_datafile2      # -f data.rb
-    datafile = "test.context1.rb"
-    @input    = INPUT2
-    @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
-    @options  = "-f #{datafile}"
-    #
-    str = <<-END
-    @user = 'Hello'
-    @password = 'world'
-    END
-    File.open(datafile, 'w') { |f| f.write(str) }
-    begin
-      _test()
-    ensure
-      File.unlink(datafile) if test(?f, datafile)
-    end
-  end
-
-
-  def test_untabify1  # -t (obsolete)
-    yamlfile = "test.context2.yaml"
-    @input    = INPUT2
-    @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
-    @options  = "-tf #{yamlfile}"
-    #
-    yaml = <<-END
-    user:	Hello
-    password:	world
-    END
-    File.open(yamlfile, 'w') { |f| f.write(yaml) }
-    begin
-      _test()
-    ensure
-      File.unlink(yamlfile) if test(?f, yamlfile)
-    end
-  end
-
-
-  def test_untabify2  # -T
-    yamlfile = "test.context2.yaml"
-    @input    = INPUT2
-    @expected = OUTPUT.gsub(/\(none\)/, 'Hello')
-    @options  = "-Tf #{yamlfile}"
-    #
-    yaml = <<-END
-    user: Hello
-    items:
-	- aaa
-	- bbb
-	- ccc
-    END
-    File.open(yamlfile, 'w') { |f| f.write(yaml) }
-    assert_raise(ArgumentError) do
-      _test()
-    end
-    File.open(yamlfile, 'w') { |f| f.write(yaml.gsub(/\t/, ' '*8)) }
-    _test()
-  ensure
-      File.unlink(yamlfile) if test(?f, yamlfile)
-  end
-
-
-  def test_symbolify1 # -S
-    yamlfile = "test.context3.yaml"
-    @input    = <<END
-<% for h in @list %>
-<tr>
- <td><%= h[:name] %></td><td><%= h[:mail] %></td>
-</tr>
-<% end %>
-END
-    @expected = <<END
-<tr>
- <td>foo</td><td>foo at mail.com</td>
-</tr>
-<tr>
- <td>bar</td><td>bar at mail.org</td>
-</tr>
-END
-    @options  = "-f #{yamlfile} -S"
-    #
-    yaml = <<-END
-list:
-  - name:  foo
-    mail:  foo at mail.com
-  - name:  bar
-    mail:  bar at mail.org
-END
-    File.open(yamlfile, 'w') { |f| f.write(yaml) }
-    begin
-      _test()
-    ensure
-      File.unlink(yamlfile) if test(?f, yamlfile)
-    end
-  end
-
-
-  def test_result1   # -B
-    yamlfile = "test.context4.yaml"
-    #
-    @input = <<'END'
-user = <%= user %>
-<% for item in list %>
- - <%= item %>
-<% end %>
-END
-    @expected = <<'END'
-user = World
- - aaa
- - bbb
- - ccc
-END
-    @options = "-f #{yamlfile} -B "
-    #
-    yaml = <<-END
-user: World
-list:
-  - aaa
-  - bbb
-  - ccc
-END
-    File.open(yamlfile, 'w') { |f| f.write(yaml) }
-    begin
-      _test()
-    ensure
-      File.unlink(yamlfile) if test(?f, yamlfile)
-    end
-  end
-
-
-  def test_context1   # -c
-    @input = <<'END'
-user = <%= @user %>
-<% for item in @list %>
- - <%= item %>
-<% end %>
-END
-    @expected = <<'END'
-user = World
- - aaa
- - bbb
- - ccc
-END
-    #
-    @options = ['-c', '{user: World, list: [aaa, bbb, ccc]}']
-    _test()
-    @options = ['-c', '@user="World"; @list=%w[aaa bbb ccc]']
-    _test()
-  end
-
-
-  def test_include1   # -I
-    dir = 'foo'
-    lib = 'bar'
-    Dir.mkdir dir unless test(?d, dir)
-    filename = "#{dir}/#{lib}.rb"
-    File.open(filename, 'w') do |f|
-      f.write <<-'END'
-        def escape(str)
-          return "<#{str.upcase}>"
-        end
-      END
-    end
-    #
-    @input    = "<% require '#{lib}' %>\n" + INPUT.gsub(/<%= item %>/, '<%= escape(item) %>')
-    @expected = OUTPUT.gsub(/<aaa>/, '<<AAA>>').gsub(/b\&b/, '<B&B>').gsub(/"ccc"/, '<"CCC">')
-    @options  = "-I #{dir}"
-    #
-    begin
-      _test()
-    ensure
-      File.unlink filename if test(?f, filename)
-      Dir.rmdir dir if test(?d, dir)
-    end
-  end
-
-
-  def test_require1   # -r
-    dir = 'foo'
-    lib = 'bar'
-    Dir.mkdir dir unless test(?d, dir)
-    filename = "#{dir}/#{lib}.rb"
-    File.open(filename, 'w') do |f|
-      f.write <<-'END'
-        def escape(str)
-          return "<#{str.upcase}>"
-        end
-      END
-    end
-    #
-    @input    = INPUT.gsub(/<%= item %>/, '<%= escape(item) %>')
-    @expected = OUTPUT.gsub(/<aaa>/, '<<AAA>>').gsub(/b\&b/, '<B&B>').gsub(/"ccc"/, '<"CCC">')
-    @options  = "-I #{dir} -r #{lib}"
-    #
-    begin
-      _test()
-    ensure
-      File.unlink filename if test(?f, filename)
-      Dir.rmdir dir if test(?d, dir)
-    end
-  end
-
-
-  def test_enhancers1 # -E
-    @input   = <<END
-<% list = %w[<aaa> b&b "ccc"] %>
-% for item in list
- - <%= item %> : <%== item %>
- - [= item =] : [== item =]
-% end
-END
-    @expected = <<END
- - <aaa> : <aaa>
- - <aaa> : <aaa>
- - b&b : b&b
- - b&b : b&b
- - "ccc" : "ccc"
- - "ccc" : "ccc"
-END
-    @options = "-E Escape,PercentLine,HeaderFooter,BiPattern"
-    _test()
-  end
-
-
-  def test_bodyonly1  # -b
-    @input = INPUT
-    @expected = SRC.sub(/\A_buf = '';/,'').sub(/\n_buf.to_s\n\z/,'')
-    @options = '-b -x'
-    _test()
-  end
-
-
-  def test_escape1  # -e
-    @input = INPUT
-    @expected = SRC.gsub(/<< \((.*?)\).to_s;/, '<< Erubis::XmlHelper.escape_xml(\1);')
-    @options = '-ex'
-    _test()
-  end
-
-
-  def test_pi1  # --pi -x
-    @input = PI_INPUT
-    @expected = PI_SRC
-    @options = '-x --pi'
-    _test()
-  end
-
-  def test_pi2  # --pi -x --escape=false
-    @input = PI_INPUT
-    @expected = PI_ESCAPED_SRC
-    @options = '-x --pi --escape=false'
-    _test()
-  end
-
-  def test_pi3  # --pi
-    @input = PI_INPUT
-    @expected = PI_OUTPUT
-    @options = '--pi'
-    _test()
-  end
-
-  def test_pi4  # --pi --escape=false
-    @input = PI_INPUT
-    @expected = PI_ESCAPED_OUTPUT
-    @options = '--pi --escape=false'
-    _test()
-  end
-
-  def test_pi5  # --pi=ruby -x
-    @input = PI_INPUT.gsub(/<\?rb/, '<?ruby')
-    @expected = PI_SRC
-    @options = '--pi=ruby -x'
-    _test()
-  end
-
-  def test_pi6  # --pi -xl java
-    @input = <<'END'
-<?java for (int i = 0; i < arr.length; i++) { ?>
-  - @{arr[i]}@ / @!{arr[i]}@
-<?java } ?>
-END
-    @expected = <<'END'
-StringBuffer _buf = new StringBuffer(); for (int i = 0; i < arr.length; i++) { 
-_buf.append("  - "); _buf.append(escape(arr[i])); _buf.append(" / "); _buf.append(arr[i]); _buf.append("\n");
- } 
-return _buf.toString();
-END
-    @options = '--pi -xl java'
-    _test()
-  end
-
-
-  self.post_definition()
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-users-guide.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-users-guide.rb
deleted file mode 100644
index 5215bf9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test-users-guide.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-###
-### $Rev: 115 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-require  "#{File.dirname(__FILE__)}/test.rb"
-
-
-class KwarkUsersGuideTest < Test::Unit::TestCase
-
-  DIR = File.expand_path(File.dirname(__FILE__) + '/data/users-guide')
-  CWD = Dir.pwd()
-
-
-  def setup
-    Dir.chdir DIR
-  end
-
-
-  def teardown
-    Dir.chdir CWD
-  end
-
-
-  def _test
-    @name = (caller()[0] =~ /`(.*?)'/) && $1
-    s = File.read(@filename)
-    s =~ /\A\$ (.*?)\n/
-    command = $1
-    expected = $'
-    result = `#{command}`
-    assert_text_equal(expected, result)
-  end
-
-
-  Dir.chdir DIR do
-    filenames = []
-    filenames += Dir.glob('*.result')
-    filenames += Dir.glob('*.source')
-    filenames.each do |filename|
-      name = filename.gsub(/[^\w]/, '_')
-      s = <<-END
-        def test_#{name}
-          # $stderr.puts "*** debug: test_#{name}"
-          @name = '#{name}'
-          @filename = '#{filename}'
-          _test()
-        end
-      END
-      eval s
-    end
-  end
-
-
-  self.post_definition()
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test.rb
deleted file mode 100644
index 1c4ea63..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/test.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-##
-## $Rev: 77 $
-## $Release: 2.6.2 $
-## copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-##
-
-
-unless defined?(TESTDIR)
-  TESTDIR = File.dirname(__FILE__)
-  LIBDIR  = TESTDIR == '.' ? '../lib' : File.dirname(TESTDIR) + '/lib'
-  $: << TESTDIR
-  $: << LIBDIR
-end
-
-
-require 'test/unit'
-#require 'test/unit/ui/console/testrunner'
-require 'assert-text-equal'
-require 'yaml'
-require 'testutil'
-require 'erubis'
-
-
-if $0 == __FILE__
-  require "#{TESTDIR}/test-erubis.rb"
-  require "#{TESTDIR}/test-engines.rb"
-  require "#{TESTDIR}/test-enhancers.rb"
-  require "#{TESTDIR}/test-main.rb"
-  require "#{TESTDIR}/test-users-guide.rb"
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/testutil.rb b/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/testutil.rb
deleted file mode 100644
index 340ca33..0000000
--- a/spec10/public/webrat/test_app/gems/gems/erubis-2.6.2/test/testutil.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-###
-### $Rev: 116 $
-### $Release: 2.6.2 $
-### copyright(c) 2006-2008 kuwata-lab.com all rights reserved.
-###
-
-require 'yaml'
-
-require 'test/unit/testcase'
-
-
-
-def _ruby_ver_str  # :nodoc:
-  return /\d+\.\d+/.match(RUBY_VERSION)[0]
-end
-
-def ruby18?  # :nodoc:
-  _ruby_ver_str() == "1.8"
-end
-
-def ruby19?  # :nodoc:
-  _ruby_ver_str() > "1.8"
-end
-
-
-
-class Test::Unit::TestCase
-
-
-  def self.load_yaml_datafile(filename, options={}, &block)  # :nodoc:
-    # read datafile
-    s = File.read(filename)
-    if filename =~ /\.rb$/
-      s =~ /^__END__$/   or raise "*** error: __END__ is not found in '#{filename}'."
-      s = $'
-    end
-    # untabify
-    unless options[:tabify] == false
-      s = s.split(/^/).inject('') do |sb, line|
-        sb << line.gsub(/([^\t]{8})|([^\t]*)\t/n) { [$+].pack("A8") }
-      end
-    end
-    # load yaml document
-    testdata_list = []
-    YAML.load_documents(s) do |ydoc|
-      if ydoc.is_a?(Hash)
-        testdata_list << ydoc
-      elsif ydoc.is_a?(Array)
-        ydoc.each do |hash|
-          raise "testdata should be a mapping." unless hash.is_a?(Hash)
-          testdata_list << hash
-        end
-      else
-        raise "testdata should be a mapping."
-      end
-    end
-    # data check
-    identkey = options[:identkey] || 'name'
-    table = {}
-    testdata_list.each do |hash|
-      ident = hash[identkey]
-      ident          or  raise "*** key '#{identkey}' is required but not found."
-      table[ident]   and raise "*** #{identkey} '#{ident}' is duplicated."
-      table[ident] = hash
-      yield(hash) if block
-    end
-    #
-    return testdata_list
-  end
-
-
-  def self.define_testmethods(testdata_list, options={}, &block)
-    identkey   = options[:identkey]   || 'name'
-    testmethod = options[:testmethod] || '_test'
-    testdata_list.each do |hash|
-      yield(hash) if block
-      ident = hash[identkey]
-      s  =   "def test_#{ident}\n"
-      hash.each do |key, val|
-        s << "  @#{key} = #{val.inspect}\n"
-      end
-      s  <<  "  #{testmethod}\n"
-      s  <<  "end\n"
-      $stderr.puts "*** load_yaml_testdata(): eval_str=<<'END'\n#{s}END" if $DEBUG
-      self.module_eval s
-    end
-  end
-
-
-  def self.post_definition
-    if ENV['TEST']
-      target = "test_#{ENV['TEST']}"
-      self.instance_methods.each do |method_name|
-        m = method_name.to_s
-        private m if m =~ /\Atest_/ && m != target
-      end
-    end
-  end
-
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/LICENSE b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/LICENSE
deleted file mode 100644
index b5afcd5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2008 Sam Smoot.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/README.txt b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/README.txt
deleted file mode 100644
index 720afb7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-= extlib
-
-A support library for DataMapper, DataObjects and Merb.
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/Rakefile b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/Rakefile
deleted file mode 100755
index db89a37..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/Rakefile
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/env ruby
-require 'pathname'
-require 'rubygems'
-require 'rubygems/installer'
-require 'rake'
-require "rake/clean"
-require "rake/gempackagetask"
-require "fileutils"
-require Pathname('spec/rake/spectask')
-require Pathname('lib/extlib/version')
-
-ROOT = Pathname(__FILE__).dirname.expand_path
-
-##############################################################################
-# Package && release
-##############################################################################
-RUBY_FORGE_PROJECT  = "extlib"
-PROJECT_URL         = "http://extlib.rubyforge.org"
-PROJECT_SUMMARY     = "Support library for DataMapper and Merb."
-PROJECT_DESCRIPTION = PROJECT_SUMMARY
-
-AUTHOR = "Sam Smoot"
-EMAIL  = "ssmoot at gmail.com"
-
-GEM_NAME    = "extlib"
-PKG_BUILD   = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
-GEM_VERSION = Extlib::VERSION + PKG_BUILD
-
-RELEASE_NAME    = "REL #{GEM_VERSION}"
-
-require "lib/extlib/tasks/release"
-
-spec = Gem::Specification.new do |s|
-  s.name         = GEM_NAME
-  s.version      = GEM_VERSION
-  s.platform     = Gem::Platform::RUBY
-  s.author       = AUTHOR
-  s.email        = EMAIL
-  s.homepage     = PROJECT_URL
-  s.summary      = PROJECT_SUMMARY
-  s.description  = PROJECT_DESCRIPTION
-  s.require_path = "lib"
-  s.files        = ["LICENSE", "README.txt", "Rakefile"] + Dir["lib/**/*"]
-
-  # rdoc
-  s.has_rdoc         = false
-  s.extra_rdoc_files = ["LICENSE", "README.txt"]
-
-  # Dependencies
-  # s.add_dependency "english", ">=0.2.0"
-end
-
-Rake::GemPackageTask.new(spec) do |package|
-  package.gem_spec = spec
-end
-
-desc 'Remove all package, docs and spec products'
-task :clobber_all => %w[ clobber_package clobber_doc extlib:clobber_spec ]
-
-##############################################################################
-# Specs and continous integration
-##############################################################################
-task :default => 'extlib:spec'
-task :spec    => 'extlib:spec'
-
-namespace :extlib do
-  Spec::Rake::SpecTask.new(:spec) do |t|
-    t.spec_opts << '--format' << 'specdoc' << '--colour'
-    t.spec_opts << '--loadby' << 'random'
-    t.spec_files = Pathname.glob(ENV['FILES'] || 'spec/**/*_spec.rb')
-
-    begin
-      t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
-      t.rcov_opts << '--exclude' << 'spec'
-      t.rcov_opts << '--text-summary'
-      t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
-    rescue Exception
-      # rcov not installed
-    end
-  end
-end
-
-
-##############################################################################
-# Documentation
-##############################################################################
-desc "Generate documentation"
-task :doc do
-  begin
-    require 'yard'
-    exec 'yardoc'
-  rescue LoadError
-    puts 'You will need to install the latest version of Yard to generate the
-          documentation for extlib.'
-  end
-end
-
-WINDOWS = (RUBY_PLATFORM =~ /win32|mingw|bccwin|cygwin/) rescue nil
-SUDO    = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
-
-
-desc "Install #{GEM_NAME}"
-task :install => :package do
-  sh %{#{SUDO} gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}
-end
-
-if WINDOWS
-  namespace :dev do
-    desc 'Install for development (for windows)'
-    task :winstall => :gem do
-      system %{gem install --no-rdoc --no-ri -l pkg/#{GEM_NAME}-#{GEM_VERSION}.gem}
-    end
-  end
-end
-
-namespace :ci do
-
-  task :prepare do
-    rm_rf ROOT + "ci"
-    mkdir_p ROOT + "ci"
-    mkdir_p ROOT + "ci/doc"
-    mkdir_p ROOT + "ci/cyclomatic"
-    mkdir_p ROOT + "ci/token"
-  end
-
-  task :publish do
-    out = ENV['CC_BUILD_ARTIFACTS'] || "out"
-    mkdir_p out unless File.directory? out
-
-    mv "ci/rspec_report.html", "#{out}/rspec_report.html"
-    mv "ci/coverage", "#{out}/coverage"
-    mv "ci/doc", "#{out}/doc"
-    mv "ci/cyclomatic", "#{out}/cyclomatic_complexity"
-    mv "ci/token", "#{out}/token_complexity"
-  end
-
-  task :spec => :prepare do
-    Rake::Task[:spec].invoke
-    mv ROOT + "coverage", ROOT + "ci/coverage"
-    Rake::Task[:gem]
-    Gem::Installer.new("pkg/#{GEM_NAME}-#{GEM_VERSION}.gem").install
-  end
-
-  task :doc do
-    require 'yard'
-    sh 'yardoc'
-  end
-
-  task :saikuro do
-    system "saikuro -c -i lib -y 0 -w 10 -e 15 -o ci/cyclomatic"
-    mv 'ci/cyclomatic/index_cyclo.html', 'ci/cyclomatic/index.html'
-
-    system "saikuro -t -i lib -y 0 -w 20 -e 30 -o ci/token"
-    mv 'ci/token/index_token.html', 'ci/token/index.html'
-  end
-
-end
-
-task :ci => ["ci:spec"]
-
-desc 'Default: run spec examples'
-task :default => 'spec'
-
-##############################################################################
-# Benchmarks
-##############################################################################
-
-namespace :benchmark do
-  desc "Runs benchmarks"
-  task :run do
-    files = Dir["benchmarks/**/*.rb"]
-    
-    files.each do |f|
-      system "ruby #{f}"
-    end
-  end  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib.rb
deleted file mode 100644
index 8e006aa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'pathname'
-require 'rubygems'
-
-__DIR__ = File.expand_path(File.dirname(__FILE__))
-$LOAD_PATH.unshift(__DIR__) unless $LOAD_PATH.include?(__DIR__)
-
-# for Pathname /
-require File.expand_path(File.join(__DIR__, 'extlib', 'pathname'))
-
-dir = Pathname(__FILE__).dirname.expand_path / 'extlib'
-
-require dir / "class.rb"
-require dir / "object"
-require dir / "object_space"
-
-require dir / "string"
-require dir / "symbol"
-require dir / "hash"
-require dir / "mash"
-require dir / "virtual_file"
-require dir / "logger"
-require dir / "time"
-require dir / "datetime"
-
-require dir / 'assertions'
-require dir / 'blank'
-require dir / 'boolean'
-require dir / 'inflection'
-require dir / 'lazy_array'
-require dir / 'module'
-require dir / 'nil'
-require dir / 'numeric'
-require dir / 'blank'
-require dir / 'simple_set'
-require dir / 'struct'
-require dir / 'symbol'
-
-Extlib.autoload("Hook", (dir / 'hook').to_s)
-Extlib.autoload("Pooling", (dir / 'pooling').to_s)
-
-module Extlib
-
-  def self.exiting= bool
-    if bool && Extlib.const_defined?("Pooling")
-      if Extlib::Pooling.scavenger?
-        Extlib::Pooling.scavenger.wakeup
-      end
-    end
-    @exiting = true
-  end
-
-  def self.exiting
-    @exiting
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/assertions.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/assertions.rb
deleted file mode 100644
index 9859065..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/assertions.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Extlib
-  module Assertions
-    def assert_kind_of(name, value, *klasses)
-      klasses.each { |k| return if value.kind_of?(k) }
-      raise ArgumentError, "+#{name}+ should be #{klasses.map { |k| k.name } * ' or '}, but was #{value.class.name}", caller(2)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/blank.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/blank.rb
deleted file mode 100644
index d8eea91..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/blank.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-class Object
-  # @return <TrueClass, FalseClass>
-  #
-  # @example [].blank?         #=>  true
-  # @example [1].blank?        #=>  false
-  # @example [nil].blank?      #=>  false
-  # 
-  # Returns true if the object is nil or empty (if applicable)
-  def blank?
-    nil? || (respond_to?(:empty?) && empty?)
-  end
-end # class Object
-
-class Numeric
-  # @return <TrueClass, FalseClass>
-  # 
-  # Numerics can't be blank
-  def blank?
-    false
-  end
-end # class Numeric
-
-class NilClass
-  # @return <TrueClass, FalseClass>
-  # 
-  # Nils are always blank
-  def blank?
-    true
-  end
-end # class NilClass
-
-class TrueClass
-  # @return <TrueClass, FalseClass>
-  # 
-  # True is not blank.  
-  def blank?
-    false
-  end
-end # class TrueClass
-
-class FalseClass
-  # False is always blank.
-  def blank?
-    true
-  end
-end # class FalseClass
-
-class String
-  # @example "".blank?         #=>  true
-  # @example "     ".blank?    #=>  true
-  # @example " hey ho ".blank? #=>  false
-  # 
-  # @return <TrueClass, FalseClass>
-  # 
-  # Strips out whitespace then tests if the string is empty.
-  def blank?
-    strip.empty?
-  end
-end # class String
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/boolean.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/boolean.rb
deleted file mode 100644
index ebcacf3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/boolean.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class TrueClass
-  def try_dup
-    self
-  end
-end
-
-class FalseClass
-  def try_dup
-    self
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/class.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/class.rb
deleted file mode 100644
index dabc5d8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/class.rb
+++ /dev/null
@@ -1,175 +0,0 @@
-# Copyright (c) 2004-2008 David Heinemeier Hansson
-# 
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-# 
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-# Allows attributes to be shared within an inheritance hierarchy, but where
-# each descendant gets a copy of their parents' attributes, instead of just a
-# pointer to the same. This means that the child can add elements to, for
-# example, an array without those additions being shared with either their
-# parent, siblings, or children, which is unlike the regular class-level
-# attributes that are shared across the entire hierarchy.
-class Class
-  # Defines class-level and instance-level attribute reader.
-  #
-  # @param *syms<Array> Array of attributes to define reader for.
-  # @return <Array[#to_s]> List of attributes that were made into cattr_readers
-  #
-  # @api public
-  #
-  # @todo Is this inconsistent in that it does not allow you to prevent
-  #   an instance_reader via :instance_reader => false
-  def cattr_reader(*syms)
-    syms.flatten.each do |sym|
-      next if sym.is_a?(Hash)
-      class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
-        unless defined? @@#{sym}
-          @@#{sym} = nil
-        end
-
-        def self.#{sym}
-          @@#{sym}
-        end
-
-        def #{sym}
-          @@#{sym}
-        end
-      RUBY
-    end
-  end
-
-  # Defines class-level (and optionally instance-level) attribute writer.
-  #
-  # @param <Array[*#to_s, Hash{:instance_writer => Boolean}]> Array of attributes to define writer for.
-  # @option syms :instance_writer<Boolean> if true, instance-level attribute writer is defined.
-  # @return <Array[#to_s]> List of attributes that were made into cattr_writers
-  #
-  # @api public
-  def cattr_writer(*syms)
-    options = syms.last.is_a?(Hash) ? syms.pop : {}
-    syms.flatten.each do |sym|
-      class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
-        unless defined? @@#{sym}
-          @@#{sym} = nil
-        end
-
-        def self.#{sym}=(obj)
-          @@#{sym} = obj
-        end
-      RUBY
-      
-      unless options[:instance_writer] == false
-        class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
-          def #{sym}=(obj)
-            @@#{sym} = obj
-          end
-        RUBY
-      end
-    end
-  end
-
-  # Defines class-level (and optionally instance-level) attribute accessor.
-  #
-  # @param *syms<Array[*#to_s, Hash{:instance_writer => Boolean}]> Array of attributes to define accessor for.
-  # @option syms :instance_writer<Boolean> if true, instance-level attribute writer is defined.
-  # @return <Array[#to_s]> List of attributes that were made into accessors
-  #
-  # @api public
-  def cattr_accessor(*syms)
-    cattr_reader(*syms)
-    cattr_writer(*syms)
-  end
-
-  # Defines class-level inheritable attribute reader. Attributes are available to subclasses,
-  # each subclass has a copy of parent's attribute.
-  #
-  # @param *syms<Array[#to_s]> Array of attributes to define inheritable reader for.
-  # @return <Array[#to_s]> Array of attributes converted into inheritable_readers.
-  #
-  # @api public
-  #
-  # @todo Do we want to block instance_reader via :instance_reader => false
-  # @todo It would be preferable that we do something with a Hash passed in
-  #   (error out or do the same as other methods above) instead of silently
-  #   moving on). In particular, this makes the return value of this function
-  #   less useful.
-  def class_inheritable_reader(*ivars)
-    instance_reader = ivars.pop[:reader] if ivars.last.is_a?(Hash)
-    
-    ivars.each do |ivar|
-      self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
-        def self.#{ivar}
-          return @#{ivar} if self == #{self} || defined?(@#{ivar})
-          ivar = superclass.#{ivar}
-          return nil if ivar.nil? && !#{self}.instance_variable_defined?("@#{ivar}")
-          @#{ivar} = ivar && !ivar.is_a?(Module) && !ivar.is_a?(Numeric) ? ivar.dup : ivar
-        end
-      RUBY
-      unless instance_reader == false
-        self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
-          def #{ivar}
-            self.class.#{ivar}
-          end
-        RUBY
-      end
-    end
-  end
-  
-  # Defines class-level inheritable attribute writer. Attributes are available to subclasses,
-  # each subclass has a copy of parent's attribute.
-  #
-  # @param *syms<Array[*#to_s, Hash{:instance_writer => Boolean}]> Array of attributes to
-  #   define inheritable writer for.
-  # @option syms :instance_writer<Boolean> if true, instance-level inheritable attribute writer is defined.
-  # @return <Array[#to_s]> An Array of the attributes that were made into inheritable writers.
-  #
-  # @api public
-  #
-  # @todo We need a style for class_eval <<-HEREDOC. I'd like to make it 
-  #   class_eval(<<-RUBY, __FILE__, __LINE__), but we should codify it somewhere.
-  def class_inheritable_writer(*ivars)
-    instance_writer = ivars.pop[:instance_writer] if ivars.last.is_a?(Hash)
-    ivars.each do |ivar|
-      self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
-        def self.#{ivar}=(obj)
-          @#{ivar} = obj        
-        end
-      RUBY
-      unless instance_writer == false
-        self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
-          def #{ivar}=(obj) self.class.#{ivar} = obj end
-        RUBY
-      end
-    end
-  end
-  
-  # Defines class-level inheritable attribute accessor. Attributes are available to subclasses,
-  # each subclass has a copy of parent's attribute.
-  #
-  # @param *syms<Array[*#to_s, Hash{:instance_writer => Boolean}]> Array of attributes to 
-  #   define inheritable accessor for.
-  # @option syms :instance_writer<Boolean> if true, instance-level inheritable attribute writer is defined.
-  # @return <Array[#to_s]> An Array of attributes turned into inheritable accessors.
-  #
-  # @api public
-  def class_inheritable_accessor(*syms)
-    class_inheritable_reader(*syms)
-    class_inheritable_writer(*syms)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/datetime.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/datetime.rb
deleted file mode 100644
index 80b5a45..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/datetime.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class DateTime
-  def to_time
-    Time.parse self.to_s
-  end
-  
-  def to_datetime
-    self
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/dictionary.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/dictionary.rb
deleted file mode 100644
index a5200fa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/dictionary.rb
+++ /dev/null
@@ -1,433 +0,0 @@
-# TITLE:
-#
-#   Dictionary
-#
-# AUTHORS:
-#
-#   - Jan Molic
-#   - Thomas Sawyer
-#
-# CREDIT:
-#
-#   - Andrew Johnson (merge, to_a, inspect, shift and Hash[])
-#   - Jeff Sharpe    (reverse and reverse!)
-#   - Thomas Leitner (has_key? and key?)
-#
-# LICENSE:
-#
-#   Copyright (c) 2005 Jan Molic, Thomas Sawyer
-#
-#   Ruby License
-#
-#   This module is free software. You may use, modify, and/or redistribute this
-#   software under the same terms as Ruby.
-#
-#   This program is distributed in the hope that it will be useful, but WITHOUT
-#   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-#   FOR A PARTICULAR PURPOSE.
-#
-#   Originally ported from OrderHash 2.0, Copyright (c) 2005 jan molic
-#
-# LOG:
-#
-#   - 2007.10.31 trans
-#     Fixed initialize so the constructor blocks correctly effected dictionary
-#     rather then just the internal hash.
-
-# = Dictionary
-#
-# The Dictionary class is a Hash that preserves order.
-# So it has some array-like extensions also. By defualt
-# a Dictionary object preserves insertion order, but any
-# order can be specified including alphabetical key order.
-#
-# == Usage
-#
-# Just require this file and use Dictionary instead of Hash.
-#
-#   # You can do simply
-#   hsh = Dictionary.new
-#   hsh['z'] = 1
-#   hsh['a'] = 2
-#   hsh['c'] = 3
-#   p hsh.keys     #=> ['z','a','c']
-#
-#   # or using Dictionary[] method
-#   hsh = Dictionary['z', 1, 'a', 2, 'c', 3]
-#   p hsh.keys     #=> ['z','a','c']
-#
-#   # but this doesn't preserve order
-#   hsh = Dictionary['z'=>1, 'a'=>2, 'c'=>3]
-#   p hsh.keys     #=> ['a','c','z']
-#
-#   # Dictionary has useful extensions: push, pop and unshift
-#   p hsh.push('to_end', 15)       #=> true, key added
-#   p hsh.push('to_end', 30)       #=> false, already - nothing happen
-#   p hsh.unshift('to_begin', 50)  #=> true, key added
-#   p hsh.unshift('to_begin', 60)  #=> false, already - nothing happen
-#   p hsh.keys                     #=> ["to_begin", "a", "c", "z", "to_end"]
-#   p hsh.pop                      #=> ["to_end", 15], if nothing remains, return nil
-#   p hsh.keys                     #=> ["to_begin", "a", "c", "z"]
-#   p hsh.shift                    #=> ["to_begin", 30], if nothing remains, return nil
-#
-# == Usage Notes
-#
-# * You can use #order_by to set internal sort order.
-# * #<< takes a two element [k,v] array and inserts.
-# * Use ::auto which creates Dictionay sub-entries as needed.
-# * And ::alpha which creates a new Dictionary sorted by key.
-
-class Dictionary
-
-  include Enumerable
-
-  class << self
-    #--
-    # TODO is this needed? Doesn't the super class do this?
-    #++
-    def [](*args)
-      hsh = new
-      if Hash === args[0]
-        hsh.replace(args[0])
-      elsif (args.size % 2) != 0
-        raise ArgumentError, "odd number of elements for Hash"
-      else
-        while !args.empty?
-          hsh[args.shift] = args.shift
-        end
-      end
-      hsh
-    end
-
-    # Like #new but the block sets the order.
-    #
-    def new_by(*args, &blk)
-      new(*args).order_by(&blk)
-    end
-
-    # Alternate to #new which creates a dictionary sorted by key.
-    #
-    #   d = Dictionary.alpha
-    #   d["z"] = 1
-    #   d["y"] = 2
-    #   d["x"] = 3
-    #   d  #=> {"x"=>3,"y"=>2,"z"=>2}
-    #
-    # This is equivalent to:
-    #
-    #   Dictionary.new.order_by { |key,value| key }
-    def alpha(*args, &block)
-      new(*args, &block).order_by_key
-    end
-
-    # Alternate to #new which auto-creates sub-dictionaries as needed.
-    #
-    #   d = Dictionary.auto
-    #   d["a"]["b"]["c"] = "abc"  #=> { "a"=>{"b"=>{"c"=>"abc"}}}
-    #
-    def auto(*args)
-      #AutoDictionary.new(*args)
-      leet = lambda { |hsh, key| hsh[key] = new(&leet) }
-      new(*args, &leet)
-    end
-  end
-
-   # New Dictiionary.
-  def initialize(*args, &blk)
-    @order = []
-    @order_by = nil
-    if blk
-      dict = self                                  # This ensure autmatic key entry effect the
-      oblk = lambda{ |hsh, key| blk[dict,key] }    # dictionary rather then just the interal hash.
-      @hash = Hash.new(*args, &oblk)
-    else
-      @hash = Hash.new(*args)
-    end
-  end
-
-  def order
-    reorder if @order_by
-    @order
-  end
-
-  # Keep dictionary sorted by a specific sort order.
-  def order_by( &block )
-    @order_by = block
-    order
-    self
-  end
-
-  # Keep dictionary sorted by key.
-  #
-  #   d = Dictionary.new.order_by_key
-  #   d["z"] = 1
-  #   d["y"] = 2
-  #   d["x"] = 3
-  #   d  #=> {"x"=>3,"y"=>2,"z"=>2}
-  #
-  # This is equivalent to:
-  #
-  #   Dictionary.new.order_by { |key,value| key }
-  #
-  # The initializer Dictionary#alpha also provides this.
-  def order_by_key
-    @order_by = lambda { |k,v| k }
-    order
-    self
-  end
-
-  # Keep dictionary sorted by value.
-  #
-  #   d = Dictionary.new.order_by_value
-  #   d["z"] = 1
-  #   d["y"] = 2
-  #   d["x"] = 3
-  #   d  #=> {"x"=>3,"y"=>2,"z"=>2}
-  #
-  # This is equivalent to:
-  #
-  #   Dictionary.new.order_by { |key,value| value }
-  def order_by_value
-    @order_by = lambda { |k,v| v }
-    order
-    self
-  end
-
-  #
-  def reorder
-    if @order_by
-      assoc = @order.collect{ |k| [k, at hash[k]] }.sort_by(&@order_by)
-      @order = assoc.collect{ |k,v| k }
-    end
-    @order
-  end
-
-  def ==(hsh2)
-    if hsh2.is_a?( Dictionary )
-      @order == hsh2.order &&
-      @hash  == hsh2.instance_variable_get("@hash")
-    else
-      false
-    end
-  end
-
-  def [] k
-    @hash[ k ]
-  end
-
-  def fetch(k, *a, &b)
-    @hash.fetch(k, *a, &b)
-  end
-
-  # Store operator.
-  #
-  #   h[key] = value
-  #
-  # Or with additional index.
-  #
-  #  h[key,index] = value
-  def []=(k, i=nil, v=nil)
-    if v
-      insert(i,k,v)
-    else
-      store(k,i)
-    end
-  end
-
-  def insert( i,k,v )
-    @order.insert( i,k )
-    @hash.store( k,v )
-  end
-
-  def store( a,b )
-    @order.push( a ) unless @hash.has_key?( a )
-    @hash.store( a,b )
-  end
-
-  def clear
-    @order = []
-    @hash.clear
-  end
-
-  def delete( key )
-    @order.delete( key )
-    @hash.delete( key )
-  end
-
-  def each_key
-    order.each { |k| yield( k ) }
-    self
-  end
-
-  def each_value
-    order.each { |k| yield( @hash[k] ) }
-    self
-  end
-
-  def each
-    order.each { |k| yield( k, at hash[k] ) }
-    self
-  end
-  alias each_pair each
-
-  def delete_if
-    order.clone.each { |k| delete k if yield(k, at hash[k]) }
-    self
-  end
-
-  def values
-    ary = []
-    order.each { |k| ary.push @hash[k] }
-    ary
-  end
-
-  def keys
-    order
-  end
-
-  def invert
-    hsh2 = self.class.new
-    order.each { |k| hsh2[@hash[k]] = k }
-    hsh2
-  end
-
-  def reject( &block )
-    self.dup.delete_if(&block)
-  end
-
-  def reject!( &block )
-    hsh2 = reject(&block)
-    self == hsh2 ? nil : hsh2
-  end
-
-  def replace( hsh2 )
-    @order = hsh2.order
-    @hash = hsh2.hash
-  end
-
-  def shift
-    key = order.first
-    key ? [key,delete(key)] : super
-  end
-
-  def unshift( k,v )
-    unless @hash.include?( k )
-      @order.unshift( k )
-      @hash.store( k,v )
-      true
-    else
-      false
-    end
-  end
-
-  def <<(kv)
-    push( *kv )
-  end
-
-  def push( k,v )
-    unless @hash.include?( k )
-      @order.push( k )
-      @hash.store( k,v )
-      true
-    else
-      false
-    end
-  end
-
-  def pop
-    key = order.last
-    key ? [key,delete(key)] : nil
-  end
-
-  def inspect
-    ary = []
-    each {|k,v| ary << k.inspect + "=>" + v.inspect}
-    '{' + ary.join(", ") + '}'
-  end
-
-  def dup
-    a = []
-    each{ |k,v| a << k; a << v }
-    self.class[*a]
-  end
-
-  def update( hsh2 )
-    hsh2.each { |k,v| self[k] = v }
-    reorder
-    self
-  end
-  alias :merge! update
-
-  def merge( hsh2 )
-    self.dup.update(hsh2)
-  end
-
-  def select
-    ary = []
-    each { |k,v| ary << [k,v] if yield k,v }
-    ary
-  end
-
-  def reverse!
-    @order.reverse!
-    self
-  end
-
-  def reverse
-    dup.reverse!
-  end
-
-  def first
-    @hash[order.first]
-  end
-
-  def last
-    @hash[order.last]
-  end
-
-  def length
-    @order.length
-  end
-  alias :size :length
-
-  def empty?
-    @hash.empty?
-  end
-
-  def has_key?(key)
-    @hash.has_key?(key)
-  end
-
-  def key?(key)
-    @hash.key?(key)
-  end
-
-  def to_a
-    ary = []
-    each { |k,v| ary << [k,v] }
-    ary
-  end
-  
-  def to_json
-    buf = "["
-    map do |k,v|
-      buf << k.to_json
-      buf << ", "
-      buf << v.to_json
-    end.join(", ")
-    buf << "]"
-    buf
-  end
-
-  def to_s
-    self.to_a.to_s
-  end
-
-  def to_hash
-    @hash.dup
-  end
-
-  def to_h
-    @hash.dup
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/hash.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/hash.rb
deleted file mode 100644
index 5a6f446..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/hash.rb
+++ /dev/null
@@ -1,419 +0,0 @@
-class Hash
-  class << self
-    # Converts valid XML into a Ruby Hash structure.
-    #
-    # @param xml<String> A string representation of valid XML.
-    #
-    # @note Mixed content is treated as text and any tags in it are left unparsed
-    # @note Any attributes other than type on a node containing a text node will be
-    #   discarded
-    #
-    # @details [Typecasting]
-    #   Typecasting is performed on elements that have a +type+ attribute:
-    #   integer::
-    #   boolean:: Anything other than "true" evaluates to false.
-    #   datetime::
-    #     Returns a Time object. See Time documentation for valid Time strings.
-    #   date::
-    #     Returns a Date object. See Date documentation for valid Date strings.
-    #
-    # Keys are automatically converted to +snake_case+
-    #
-    # @example [Simple]
-    #   <user gender='m'>
-    #     <age type='integer'>35</age>
-    #     <name>Home Simpson</name>
-    #     <dob type='date'>1988-01-01</dob>
-    #     <joined-at type='datetime'>2000-04-28 23:01</joined-at>
-    #     <is-cool type='boolean'>true</is-cool>
-    #   </user>
-    #
-    #   evaluates to
-    #
-    #   { "user" => {
-    #       "gender"    => "m",
-    #       "age"       => 35,
-    #       "name"      => "Home Simpson",
-    #       "dob"       => DateObject( 1998-01-01 ),
-    #       "joined_at" => TimeObject( 2000-04-28 23:01),
-    #       "is_cool"   => true
-    #     }
-    #   }
-    #
-    # @example [Mixed Content]
-    #   <story>
-    #     A Quick <em>brown</em> Fox
-    #   </story>
-    #
-    #   evaluates to
-    #
-    #   { "story" => "A Quick <em>brown</em> Fox" }
-    #
-    # @details [Attributes other than type on a node containing text]
-    #   <story is-good='false'>
-    #     A Quick <em>brown</em> Fox
-    #   </story>
-    #
-    #   evaluates to
-    #
-    #   { "story" => "A Quick <em>brown</em> Fox" }
-    #
-    #   <bicep unit='inches' type='integer'>60</bicep>
-    #
-    #   evaluates with a typecast to an integer. But unit attribute is ignored.
-    #
-    #   { "bicep" => 60 }
-    def from_xml( xml )
-      ToHashParser.from_xml(xml)
-    end
-  end
-  
-  # This class has semantics of ActiveSupport's HashWithIndifferentAccess
-  # and we only have it so that people can write
-  # params[:key] instead of params['key'].
-  #
-  # @return <Mash> This hash as a Mash for string or symbol key access.
-  def to_mash
-    hash = Mash.new(self)
-    hash.default = default
-    hash
-  end
-
-  # @return <String> This hash as a query string
-  #
-  # @example
-  #   { :name => "Bob",
-  #     :address => {
-  #       :street => '111 Ruby Ave.',
-  #       :city => 'Ruby Central',
-  #       :phones => ['111-111-1111', '222-222-2222']
-  #     }
-  #   }.to_params
-  #     #=> "name=Bob&address[city]=Ruby Central&address[phones][]=111-111-1111&address[phones][]=222-222-2222&address[street]=111 Ruby Ave."
-  def to_params
-    params = self.map { |k,v| normalize_param(k,v) }.join
-    params.chop! # trailing &
-    params
-  end
-
-  # @param key<Object> The key for the param.
-  # @param value<Object> The value for the param.
-  #
-  # @return <String> This key value pair as a param
-  #
-  # @example normalize_param(:name, "Bob") #=> "name=Bob&"
-  def normalize_param(key, value)
-    param = ''
-    stack = []
-
-    if value.is_a?(Array)
-      param << value.map { |element| normalize_param("#{key}[]", element) }.join
-    elsif value.is_a?(Hash)
-      stack << [key,value]
-    else
-      param << "#{key}=#{value}&"
-    end
-
-    stack.each do |parent, hash|
-      hash.each do |key, value|
-        if value.is_a?(Hash)
-          stack << ["#{parent}[#{key}]", value]
-        else
-          param << normalize_param("#{parent}[#{key}]", value)
-        end
-      end
-    end
-
-    param
-  end
-
-  # @param *allowed<Array[(String, Symbol)]> The hash keys to include.
-  #
-  # @return <Hash> A new hash with only the selected keys.
-  #
-  # @example
-  #   { :one => 1, :two => 2, :three => 3 }.only(:one)
-  #     #=> { :one => 1 }
-  def only(*allowed)
-    hash = {}
-    allowed.each {|k| hash[k] = self[k] if self.has_key?(k) }
-    hash
-  end
-
-  # @param *rejected<Array[(String, Symbol)] The hash keys to exclude.
-  #
-  # @return <Hash> A new hash without the selected keys.
-  #
-  # @example
-  #   { :one => 1, :two => 2, :three => 3 }.except(:one)
-  #     #=> { :two => 2, :three => 3 }
-  def except(*rejected)
-    hash = self.dup
-    rejected.each {|k| hash.delete(k) }
-    hash
-  end
-
-  # @return <String> The hash as attributes for an XML tag.
-  #
-  # @example
-  #   { :one => 1, "two"=>"TWO" }.to_xml_attributes
-  #     #=> 'one="1" two="TWO"'
-  def to_xml_attributes
-    map do |k,v|
-      %{#{k.to_s.snake_case.sub(/^(.{1,1})/) { |m| m.downcase }}="#{v}"}
-    end.join(' ')
-  end
-
-  alias_method :to_html_attributes, :to_xml_attributes
-
-  # @param html_class<#to_s>
-  #   The HTML class to add to the :class key. The html_class will be
-  #   concatenated to any existing classes.
-  #
-  # @example hash[:class] #=> nil
-  # @example hash.add_html_class!(:selected)
-  # @example hash[:class] #=> "selected"
-  # @example hash.add_html_class!("class1 class2")
-  # @example hash[:class] #=> "selected class1 class2"
-  def add_html_class!(html_class)
-    if self[:class]
-      self[:class] = "#{self[:class]} #{html_class}"
-    else
-      self[:class] = html_class.to_s
-    end
-  end
-
-  # Converts all keys into string values. This is used during reloading to
-  # prevent problems when classes are no longer declared.
-  #
-  # @return <Array> An array of they hash's keys
-  #
-  # @example 
-  #   hash = { One => 1, Two => 2 }.proctect_keys!
-  #   hash # => { "One" => 1, "Two" => 2 }
-  def protect_keys!
-    keys.each {|key| self[key.to_s] = delete(key) }
-  end
-
-  # Attempts to convert all string keys into Class keys. We run this after
-  # reloading to convert protected hashes back into usable hashes.
-  #
-  # @example
-  #   # Provided that classes One and Two are declared in this scope:
-  #   hash = { "One" => 1, "Two" => 2 }.unproctect_keys!
-  #   hash # => { One => 1, Two => 2 }
-  def unprotect_keys!
-    keys.each do |key|
-      (self[Object.full_const_get(key)] = delete(key)) rescue nil
-    end
-  end
-
-  # Destructively and non-recursively convert each key to an uppercase string,
-  # deleting nil values along the way.
-  #
-  # @return <Hash> The newly environmentized hash.
-  #
-  # @example
-  #   { :name => "Bob", :contact => { :email => "bob at bob.com" } }.environmentize_keys!
-  #     #=> { "NAME" => "Bob", "CONTACT" => { :email => "bob at bob.com" } }
-  def environmentize_keys!
-    keys.each do |key|
-      val = delete(key)
-      next if val.nil?
-      self[key.to_s.upcase] = val
-    end
-    self
-  end
-end
-
-require 'rexml/parsers/streamparser'
-require 'rexml/parsers/baseparser'
-require 'rexml/light/node'
-
-# This is a slighly modified version of the XMLUtilityNode from
-# http://merb.devjavu.com/projects/merb/ticket/95 (has.sox at gmail.com)
-# It's mainly just adding vowels, as I ht cd wth n vwls :)
-# This represents the hard part of the work, all I did was change the
-# underlying parser.
-class REXMLUtilityNode
-  attr_accessor :name, :attributes, :children, :type
-  cattr_accessor :typecasts, :available_typecasts
-
-  self.typecasts = {}
-  self.typecasts["integer"]       = lambda{|v| v.nil? ? nil : v.to_i}
-  self.typecasts["boolean"]       = lambda{|v| v.nil? ? nil : (v.strip != "false")}
-  self.typecasts["datetime"]      = lambda{|v| v.nil? ? nil : Time.parse(v).utc}
-  self.typecasts["date"]          = lambda{|v| v.nil? ? nil : Date.parse(v)}
-  self.typecasts["dateTime"]      = lambda{|v| v.nil? ? nil : Time.parse(v).utc}
-  self.typecasts["decimal"]       = lambda{|v| BigDecimal(v)}
-  self.typecasts["double"]        = lambda{|v| v.nil? ? nil : v.to_f}
-  self.typecasts["float"]         = lambda{|v| v.nil? ? nil : v.to_f}
-  self.typecasts["symbol"]        = lambda{|v| v.to_sym}
-  self.typecasts["string"]        = lambda{|v| v.to_s}
-  self.typecasts["yaml"]          = lambda{|v| v.nil? ? nil : YAML.load(v)}
-  self.typecasts["base64Binary"]  = lambda{|v| v.unpack('m').first }
-
-  self.available_typecasts = self.typecasts.keys
-
-  def initialize(name, attributes = {})
-    @name         = name.tr("-", "_")
-    # leave the type alone if we don't know what it is
-    @type         = self.class.available_typecasts.include?(attributes["type"]) ? attributes.delete("type") : attributes["type"]
-
-    @nil_element  = attributes.delete("nil") == "true"
-    @attributes   = undasherize_keys(attributes)
-    @children     = []
-    @text         = false
-  end
-
-  def add_node(node)
-    @text = true if node.is_a? String
-    @children << node
-  end
-
-  def to_hash
-    if @type == "file"
-      f = StringIO.new((@children.first || '').unpack('m').first)
-      class << f
-        attr_accessor :original_filename, :content_type
-      end
-      f.original_filename = attributes['name'] || 'untitled'
-      f.content_type = attributes['content_type'] || 'application/octet-stream'
-      return {name => f}
-    end
-
-    if @text
-      return { name => typecast_value( translate_xml_entities( inner_html ) ) }
-    else
-      #change repeating groups into an array
-      groups = @children.inject({}) { |s,e| (s[e.name] ||= []) << e; s }
-
-      out = nil
-      if @type == "array"
-        out = []
-        groups.each do |k, v|
-          if v.size == 1
-            out << v.first.to_hash.entries.first.last
-          else
-            out << v.map{|e| e.to_hash[k]}
-          end
-        end
-        out = out.flatten
-
-      else # If Hash
-        out = {}
-        groups.each do |k,v|
-          if v.size == 1
-            out.merge!(v.first)
-          else
-            out.merge!( k => v.map{|e| e.to_hash[k]})
-          end
-        end
-        out.merge! attributes unless attributes.empty?
-        out = out.empty? ? nil : out
-      end
-
-      if @type && out.nil?
-        { name => typecast_value(out) }
-      else
-        { name => out }
-      end
-    end
-  end
-
-  # Typecasts a value based upon its type. For instance, if
-  # +node+ has #type == "integer",
-  # {{[node.typecast_value("12") #=> 12]}}
-  #
-  # @param value<String> The value that is being typecast.
-  #
-  # @details [:type options]
-  #   "integer"::
-  #     converts +value+ to an integer with #to_i
-  #   "boolean"::
-  #     checks whether +value+, after removing spaces, is the literal
-  #     "true"
-  #   "datetime"::
-  #     Parses +value+ using Time.parse, and returns a UTC Time
-  #   "date"::
-  #     Parses +value+ using Date.parse
-  #
-  # @return <Integer, TrueClass, FalseClass, Time, Date, Object>
-  #   The result of typecasting +value+.
-  #
-  # @note
-  #   If +self+ does not have a "type" key, or if it's not one of the
-  #   options specified above, the raw +value+ will be returned.
-  def typecast_value(value)
-    return value unless @type
-    proc = self.class.typecasts[@type]
-    proc.nil? ? value : proc.call(value)
-  end
-
-  # Convert basic XML entities into their literal values.
-  #
-  # @param value<#gsub> An XML fragment.
-  #
-  # @return <#gsub> The XML fragment after converting entities.
-  def translate_xml_entities(value)
-    value.gsub(/</,   "<").
-          gsub(/>/,   ">").
-          gsub(/"/, '"').
-          gsub(/'/, "'").
-          gsub(/&/,  "&")
-  end
-
-  # Take keys of the form foo-bar and convert them to foo_bar
-  def undasherize_keys(params)
-    params.keys.each do |key, value|
-      params[key.tr("-", "_")] = params.delete(key)
-    end
-    params
-  end
-
-  # Get the inner_html of the REXML node.
-  def inner_html
-    @children.join
-  end
-
-  # Converts the node into a readable HTML node.
-  #
-  # @return <String> The HTML node in text form.
-  def to_html
-    attributes.merge!(:type => @type ) if @type
-    "<#{name}#{attributes.to_xml_attributes}>#{@nil_element ? '' : inner_html}</#{name}>"
-  end
-
-  # @alias #to_html #to_s
-  def to_s
-    to_html
-  end
-end
-
-class ToHashParser
-
-  def self.from_xml(xml)
-    stack = []
-    parser = REXML::Parsers::BaseParser.new(xml)
-
-    while true
-      event = parser.pull
-      case event[0]
-      when :end_document
-        break
-      when :end_doctype, :start_doctype
-        # do nothing
-      when :start_element
-        stack.push REXMLUtilityNode.new(event[1], event[2])
-      when :end_element
-        if stack.size > 1
-          temp = stack.pop
-          stack.last.add_node(temp)
-        end
-      when :text, :cdata
-        stack.last.add_node(event[1]) unless event[1].strip.length == 0
-      end
-    end
-    stack.pop.to_hash
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/hook.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/hook.rb
deleted file mode 100644
index 2ebb161..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/hook.rb
+++ /dev/null
@@ -1,366 +0,0 @@
-module Extlib
-  #
-  # TODO: Write more documentation!
-  #
-  # Overview
-  # ========
-  #
-  # The Hook module is a very simple set of AOP helpers. Basically, it
-  # allows the developer to specify a method or block that should run
-  # before or after another method.
-  #
-  # Usage
-  # =====
-  #
-  # Halting The Hook Stack
-  #
-  # Inheritance
-  #
-  # Other Goodies
-  #
-  # Please bring up any issues regarding Hooks with carllerche on IRC
-  #
-  module Hook
-
-    def self.included(base)
-      base.extend(ClassMethods)
-      base.const_set("CLASS_HOOKS", {}) unless base.const_defined?("CLASS_HOOKS")
-      base.const_set("INSTANCE_HOOKS", {}) unless base.const_defined?("INSTANCE_HOOKS")
-      base.class_eval do
-        class << self
-          def method_added(name)
-            process_method_added(name, :instance)
-          end
-
-          def singleton_method_added(name)
-            process_method_added(name, :class)
-          end
-        end
-      end
-    end
-
-    module ClassMethods
-      include Extlib::Assertions
-      # Inject code that executes before the target class method.
-      #
-      # @param target_method<Symbol>  the name of the class method to inject before
-      # @param method_sym<Symbol>     the name of the method to run before the
-      #   target_method
-      # @param block<Block>           the code to run before the target_method
-      #
-      # @note
-      #   Either method_sym or block is required.
-      # -
-      # @api public
-      def before_class_method(target_method, method_sym = nil, &block)
-        install_hook :before, target_method, method_sym, :class, &block
-      end
-
-      #
-      # Inject code that executes after the target class method.
-      #
-      # @param target_method<Symbol>  the name of the class method to inject after
-      # @param method_sym<Symbol>     the name of the method to run after the target_method
-      # @param block<Block>           the code to run after the target_method
-      #
-      # @note
-      #   Either method_sym or block is required.
-      # -
-      # @api public
-      def after_class_method(target_method, method_sym = nil, &block)
-        install_hook :after, target_method, method_sym, :class, &block
-      end
-
-      #
-      # Inject code that executes before the target instance method.
-      #
-      # @param target_method<Symbol>  the name of the instance method to inject before
-      # @param method_sym<Symbol>     the name of the method to run before the
-      #   target_method
-      # @param block<Block>           the code to run before the target_method
-      #
-      # @note
-      #   Either method_sym or block is required.
-      # -
-      # @api public
-      def before(target_method, method_sym = nil, &block)
-        install_hook :before, target_method, method_sym, :instance, &block
-      end
-
-      #
-      # Inject code that executes after the target instance method.
-      #
-      # @param target_method<Symbol>  the name of the instance method to inject after
-      # @param method_sym<Symbol>     the name of the method to run after the
-      #   target_method
-      # @param block<Block>           the code to run after the target_method
-      #
-      # @note
-      #   Either method_sym or block is required.
-      # -
-      # @api public
-      def after(target_method, method_sym = nil, &block)
-        install_hook :after, target_method, method_sym, :instance, &block
-      end
-
-      # Register a class method as hookable. Registering a method means that
-      # before hooks will be run immediately before the method is invoked and
-      # after hooks will be called immediately after the method is invoked.
-      #
-      # @param hookable_method<Symbol> The name of the class method that should
-      #   be hookable
-      # -
-      # @api public
-      def register_class_hooks(*hooks)
-        hooks.each { |hook| register_hook(hook, :class) }
-      end
-
-      # Register aninstance method as hookable. Registering a method means that
-      # before hooks will be run immediately before the method is invoked and
-      # after hooks will be called immediately after the method is invoked.
-      #
-      # @param hookable_method<Symbol> The name of the instance method that should
-      #   be hookable
-      # -
-      # @api public
-      def register_instance_hooks(*hooks)
-        hooks.each { |hook| register_hook(hook, :instance) }
-      end
-
-      # Not yet implemented
-      def reset_hook!(target_method, scope)
-        raise NotImplementedError
-      end
-
-      # --- Alright kids... the rest is internal stuff ---
-
-      # Returns the correct HOOKS Hash depending on whether we are
-      # working with class methods or instance methods
-      def hooks_with_scope(scope)
-        case scope
-          when :class    then class_hooks
-          when :instance then instance_hooks
-          else raise ArgumentError, 'You need to pass :class or :instance as scope'
-        end
-      end
-
-      def class_hooks
-        self.const_get("CLASS_HOOKS")
-      end
-
-      def instance_hooks
-        self.const_get("INSTANCE_HOOKS")
-      end
-
-      # Registers a method as hookable. Registering hooks involves the following
-      # process
-      #
-      # * Create a blank entry in the HOOK Hash for the method.
-      # * Define the methods that execute the before and after hook stack.
-      #   These methods will be no-ops at first, but everytime a new hook is
-      #   defined, the methods will be redefined to incorporate the new hook.
-      # * Redefine the method that is to be hookable so that the hook stacks
-      #   are invoked approprietly.
-      def register_hook(target_method, scope)
-        if scope == :instance && !method_defined?(target_method)
-          raise ArgumentError, "#{target_method} instance method does not exist"
-        elsif scope == :class && !respond_to?(target_method)
-          raise ArgumentError, "#{target_method} class method does not exist"
-        end
-
-        hooks = hooks_with_scope(scope)
-
-        if hooks[target_method].nil?
-          hooks[target_method] = {
-            # We need to keep track of which class in the Inheritance chain the
-            # method was declared hookable in. Every time a child declares a new
-            # hook for the method, the hook stack invocations need to be redefined
-            # in the original Class. See #define_hook_stack_execution_methods
-            :before => [], :after => [], :in => self
-          }
-
-          define_hook_stack_execution_methods(target_method, scope)
-          define_advised_method(target_method, scope)
-        end
-      end
-
-      # Is the method registered as a hookable in the given scope.
-      def registered_as_hook?(target_method, scope)
-        ! hooks_with_scope(scope)[target_method].nil?
-      end
-
-      # Generates names for the various utility methods. We need to do this because
-      # the various utility methods should not end in = so, while we're at it, we
-      # might as well get rid of all punctuation.
-      def hook_method_name(target_method, prefix, suffix)
-        target_method = target_method.to_s
-
-        case target_method[-1,1]
-          when '?' then "#{prefix}_#{target_method[0..-2]}_ques_#{suffix}"
-          when '!' then "#{prefix}_#{target_method[0..-2]}_bang_#{suffix}"
-          when '=' then "#{prefix}_#{target_method[0..-2]}_eq_#{suffix}"
-          # I add a _nan_ suffix here so that we don't ever encounter
-          # any naming conflicts.
-          else "#{prefix}_#{target_method[0..-1]}_nan_#{suffix}"
-        end
-      end
-
-      # This will need to be refactored
-      def process_method_added(method_name, scope)
-        hooks_with_scope(scope).each do |target_method, hooks|
-          if hooks[:before].any? { |hook| hook[:name] == method_name }
-            define_hook_stack_execution_methods(target_method, scope)
-          end
-
-          if hooks[:after].any? { |hook| hook[:name] == method_name }
-            define_hook_stack_execution_methods(target_method, scope)
-          end
-        end
-      end
-
-      # Defines two methods. One method executes the before hook stack. The other executes
-      # the after hook stack. This method will be called many times during the Class definition
-      # process. It should be called for each hook that is defined. It will also be called
-      # when a hook is redefined (to make sure that the arity hasn't changed).
-      def define_hook_stack_execution_methods(target_method, scope)
-        unless registered_as_hook?(target_method, scope)
-          raise ArgumentError, "#{target_method} has not be registered as a hookable #{scope} method"
-        end
-
-        hooks = hooks_with_scope(scope)
-
-        before_hooks = hooks[target_method][:before]
-        before_hooks = before_hooks.map{ |info| inline_call(info, scope) }.join("\n")
-
-        after_hooks  = hooks[target_method][:after]
-        after_hooks  = after_hooks.map{ |info| inline_call(info, scope) }.join("\n")
-
-        source = %{
-          private
-
-          def #{hook_method_name(target_method, 'execute_before', 'hook_stack')}(*args)
-            #{before_hooks}
-          end
-
-          def #{hook_method_name(target_method, 'execute_after', 'hook_stack')}(*args)
-            #{after_hooks}
-          end
-        }
-
-        source = %{class << self\n#{source}\nend} if scope == :class
-
-        hooks[target_method][:in].class_eval(source, __FILE__, __LINE__)
-      end
-
-      # Returns ruby code that will invoke the hook. It checks the arity of the hook method
-      # and passes arguments accordingly.
-      def inline_call(method_info, scope)
-        name = method_info[:name]
-
-        if scope == :instance
-          args = method_defined?(name) && instance_method(name).arity != 0 ? '*args' : ''
-          %(#{name}(#{args}) if self.class <= ObjectSpace._id2ref(#{method_info[:from].object_id}))
-        else
-          args = respond_to?(name) && method(name).arity != 0 ? '*args' : ''
-          %(#{name}(#{args}) if self <= ObjectSpace._id2ref(#{method_info[:from].object_id}))
-        end
-      end
-
-      def define_advised_method(target_method, scope)
-        args = args_for(method_with_scope(target_method, scope))
-
-        renamed_target = hook_method_name(target_method, 'hookable_', 'before_advised')
-
-        source = <<-EOD
-          def #{target_method}(#{args})
-            retval = nil
-            catch(:halt) do
-              #{hook_method_name(target_method, 'execute_before', 'hook_stack')}(#{args})
-              retval = #{renamed_target}(#{args})
-              #{hook_method_name(target_method, 'execute_after', 'hook_stack')}(retval, #{args})
-              retval
-            end
-          end
-        EOD
-
-        if scope == :instance && !instance_methods(false).include?(target_method.to_s)
-          send(:alias_method, renamed_target, target_method)
-
-          proxy_module = Module.new
-          proxy_module.class_eval(source, __FILE__, __LINE__)
-          self.send(:include, proxy_module)
-        else
-          source = %{alias_method :#{renamed_target}, :#{target_method}\n#{source}}
-          source = %{class << self\n#{source}\nend} if scope == :class
-          class_eval(source, __FILE__, __LINE__)
-        end
-      end
-
-      # --- Add a hook ---
-
-      def install_hook(type, target_method, method_sym, scope, &block)
-        assert_kind_of 'target_method', target_method, Symbol
-        assert_kind_of 'method_sym',    method_sym,    Symbol unless method_sym.nil?
-        assert_kind_of 'scope',         scope,         Symbol
-
-        if !block_given? and method_sym.nil?
-          raise ArgumentError, "You need to pass 2 arguments to \"#{type}\"."
-        end
-
-        if method_sym.to_s[-1,1] == '='
-          raise ArgumentError, "Methods ending in = cannot be hooks"
-        end
-
-        unless [ :class, :instance ].include?(scope)
-          raise ArgumentError, 'You need to pass :class or :instance as scope'
-        end
-
-        register_hook(target_method, scope) unless registered_as_hook?(target_method, scope)
-
-        hooks = hooks_with_scope(scope)
-
-        if block
-          method_sym = "__hooks_#{type}_#{quote_method(target_method)}_#{hooks[target_method][type].length}".to_sym
-          if scope == :class
-            (class << self; self; end;).instance_eval do
-              define_method(method_sym, &block)
-            end
-          else
-            define_method(method_sym, &block)
-          end
-        end
-
-        # Adds method to the stack an redefines the hook invocation method
-        hooks[target_method][type] << { :name => method_sym, :from => self }
-        define_hook_stack_execution_methods(target_method, scope)
-      end
-
-      # --- Helpers ---
-
-      def args_for(method)
-        if method.arity == 0
-          "&block"
-        elsif method.arity > 0
-          "_" << (1 .. method.arity).to_a.join(", _") << ", &block"
-        elsif (method.arity + 1) < 0
-          "_" << (1 .. (method.arity).abs - 1).to_a.join(", _") << ", *args, &block"
-        else
-          "*args, &block"
-        end
-      end
-
-      def method_with_scope(name, scope)
-        case scope
-          when :class    then method(name)
-          when :instance then instance_method(name)
-          else raise ArgumentError, 'You need to pass :class or :instance as scope'
-        end
-      end
-
-      def quote_method(name)
-        name.to_s.gsub(/\?$/, '_q_').gsub(/!$/, '_b_').gsub(/=$/, '_eq_')
-      end
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/inflection.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/inflection.rb
deleted file mode 100644
index ca8acce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/inflection.rb
+++ /dev/null
@@ -1,435 +0,0 @@
-module Extlib
-
-  # = English Nouns Number Inflection.
-  #
-  # This module provides english singular <-> plural noun inflections.
-  module Inflection
-
-    class << self
-      # Take an underscored name and make it into a camelized name
-      #
-      # @example
-      #   "egg_and_hams".classify #=> "EggAndHam"
-      #   "post".classify #=> "Post"
-      #
-      def classify(name)
-        camelize(singularize(name.to_s.sub(/.*\./, '')))
-      end
-
-      # By default, camelize converts strings to UpperCamelCase.
-      #
-      # camelize will also convert '/' to '::' which is useful for converting paths to namespaces
-      #
-      # @example
-      #   "active_record".camelize #=> "ActiveRecord"
-      #   "active_record/errors".camelize #=> "ActiveRecord::Errors"
-      #
-      def camelize(lower_case_and_underscored_word, *args)
-        lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
-      end
-
-
-      # The reverse of +camelize+. Makes an underscored form from the expression in the string.
-      #
-      # Changes '::' to '/' to convert namespaces to paths.
-      #
-      # @example
-      #   "ActiveRecord".underscore #=> "active_record"
-      #   "ActiveRecord::Errors".underscore #=> active_record/errors
-      #
-      def underscore(camel_cased_word)
-        camel_cased_word.to_const_path
-      end
-
-      # Capitalizes the first word and turns underscores into spaces and strips _id.
-      # Like titleize, this is meant for creating pretty output.
-      #
-      # @example
-      #   "employee_salary" #=> "Employee salary"
-      #   "author_id" #=> "Author"
-      def humanize(lower_case_and_underscored_word)
-        lower_case_and_underscored_word.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize
-      end
-
-      # Removes the module part from the expression in the string
-      #
-      # @example
-      #   "ActiveRecord::CoreExtensions::String::Inflections".demodulize #=> "Inflections"
-      #   "Inflections".demodulize #=> "Inflections"
-      def demodulize(class_name_in_module)
-        class_name_in_module.to_s.gsub(/^.*::/, '')
-      end
-
-      # Create the name of a table like Rails does for models to table names. This method
-      # uses the pluralize method on the last word in the string.
-      #
-      # @example
-      #   "RawScaledScorer".tableize #=> "raw_scaled_scorers"
-      #   "egg_and_ham".tableize #=> "egg_and_hams"
-      #   "fancyCategory".tableize #=> "fancy_categories"
-      def tableize(class_name)
-        pluralize(class_name.to_const_path.gsub(/\//, '_'))
-      end
-
-      # Creates a foreign key name from a class name.
-      #
-      # @example
-      #   "Message".foreign_key #=> "message_id"
-      #   "Admin::Post".foreign_key #=> "post_id"
-      def foreign_key(class_name, key = "id")
-        underscore(demodulize(class_name.to_s)) << "_" << key.to_s
-      end
-
-      # Constantize tries to find a declared constant with the name specified
-      # in the string. It raises a NameError when the name is not in CamelCase
-      # or is not initialized.
-      #
-      # @example
-      #   "Module".constantize #=> Module
-      #   "Class".constantize #=> Class
-      def constantize(camel_cased_word)
-        unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ camel_cased_word
-          raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!"
-        end
-
-        Object.module_eval("::#{$1}", __FILE__, __LINE__)
-      end
-    end
-
-    @singular_of = {}
-    @plural_of = {}
-
-    @singular_rules = []
-    @plural_rules = []
-
-    class << self
-      # Defines a general inflection exception case.
-      #
-      # ==== Parameters
-      # singular<String>::
-      #   singular form of the word
-      # plural<String>::
-      #   plural form of the word
-      #
-      # ==== Examples
-      #
-      # Here we define erratum/errata exception case:
-      #
-      # English::Inflect.word "erratum", "errata"
-      #
-      # In case singular and plural forms are the same omit
-      # second argument on call:
-      #
-      # English::Inflect.word 'information'
-      def word(singular, plural=nil)
-        plural = singular unless plural
-        singular_word(singular, plural)
-        plural_word(singular, plural)
-      end
-
-      def clear(type = :all)
-        if type == :singular || type == :all
-          @singular_of = {}
-          @singular_rules = []
-          @singularization_rules, @singularization_regex = nil, nil
-        end
-        if type == :plural || type == :all
-          @singular_of = {}
-          @singular_rules = []
-          @singularization_rules, @singularization_regex = nil, nil
-        end
-      end
-
-
-      # Define a singularization exception.
-      #
-      # ==== Parameters
-      # singular<String>::
-      #   singular form of the word
-      # plural<String>::
-      #   plural form of the word
-      def singular_word(singular, plural)
-        @singular_of[plural] = singular
-        @singular_of[plural.capitalize] = singular.capitalize
-      end
-
-      # Define a pluralization exception.
-      #
-      # ==== Parameters
-      # singular<String>::
-      #   singular form of the word
-      # plural<String>::
-      #   plural form of the word
-      def plural_word(singular, plural)
-        @plural_of[singular] = plural
-        @plural_of[singular.capitalize] = plural.capitalize
-      end
-
-      # Define a general rule.
-      #
-      # ==== Parameters
-      # singular<String>::
-      #   ending of the word in singular form
-      # plural<String>::
-      #   ending of the word in plural form
-      # whole_word<Boolean>::
-      #   for capitalization, since words can be
-      #   capitalized (Man => Men)      #
-      # ==== Examples
-      # Once the following rule is defined:
-      # English::Inflect.rule 'y', 'ies'
-      #
-      # You can see the following results:
-      # irb> "fly".plural
-      # => flies
-      # irb> "cry".plural
-      # => cries
-      # Define a general rule.
-
-      def rule(singular, plural, whole_word = false)
-        singular_rule(singular, plural)
-        plural_rule(singular, plural)
-        word(singular, plural) if whole_word
-      end
-
-      # Define a singularization rule.
-      #
-      # ==== Parameters
-      # singular<String>::
-      #   ending of the word in singular form
-      # plural<String>::
-      #   ending of the word in plural form
-      #
-      # ==== Examples
-      # Once the following rule is defined:
-      # English::Inflect.singular_rule 'o', 'oes'
-      #
-      # You can see the following results:
-      # irb> "heroes".singular
-      # => hero
-      def singular_rule(singular, plural)
-        @singular_rules << [singular, plural]
-      end
-
-      # Define a plurualization rule.
-      #
-      # ==== Parameters
-      # singular<String>::
-      #   ending of the word in singular form
-      # plural<String>::
-      #   ending of the word in plural form
-      #
-      # ==== Examples
-      # Once the following rule is defined:
-      # English::Inflect.singular_rule 'fe', 'ves'
-      #
-      # You can see the following results:
-      # irb> "wife".plural
-      # => wives
-      def plural_rule(singular, plural)
-        @plural_rules << [singular, plural]
-      end
-
-      # Read prepared singularization rules.
-      def singularization_rules
-        if defined?(@singularization_regex) && @singularization_regex
-          return [@singularization_regex, @singularization_hash]
-        end
-        # No sorting needed: Regexen match on longest string
-        @singularization_regex = Regexp.new("(" + @singular_rules.map {|s,p| p}.join("|") + ")$", "i")
-        @singularization_hash  = Hash[*@singular_rules.flatten].invert
-        [@singularization_regex, @singularization_hash]
-      end
-
-      # Read prepared pluralization rules.
-      def pluralization_rules
-        if defined?(@pluralization_regex) && @pluralization_regex
-          return [@pluralization_regex, @pluralization_hash]
-        end
-        @pluralization_regex = Regexp.new("(" + @plural_rules.map {|s,p| s}.join("|") + ")$", "i")
-        @pluralization_hash  = Hash[*@plural_rules.flatten]
-        [@pluralization_regex, @pluralization_hash]
-      end
-
-      attr_reader :singular_of, :plural_of
-
-      # Convert an English word from plurel to singular.
-      #
-      #   "boys".singular      #=> boy
-      #   "tomatoes".singular  #=> tomato
-      #
-      # ==== Parameters
-      # word<String>:: word to singularize
-      #
-      # ==== Returns
-      # <String>:: singularized form of word
-      #
-      # ==== Notes
-      # Aliased as singularize (a Railism)
-      def singular(word)
-        if result = singular_of[word]
-          return result.dup
-        end
-        result = word.dup
-        regex, hash = singularization_rules
-        result.sub!(regex) {|m| hash[m]}
-        singular_of[word] = result
-        return result
-      end
-
-      # Alias for #singular (a Railism).
-      #
-      alias_method(:singularize, :singular)
-
-      # Convert an English word from singular to plurel.
-      #
-      #   "boy".plural     #=> boys
-      #   "tomato".plural  #=> tomatoes
-      #
-      # ==== Parameters
-      # word<String>:: word to pluralize
-      #
-      # ==== Returns
-      # <String>:: pluralized form of word
-      #
-      # ==== Notes
-      # Aliased as pluralize (a Railism)
-      def plural(word)
-        # special exceptions
-        return "" if word == ""
-        if result = plural_of[word]
-          return result.dup
-        end
-        result = word.dup
-        regex, hash = pluralization_rules
-        result.sub!(regex) {|m| hash[m]}
-        plural_of[word] = result
-        return result
-      end
-
-      # Alias for #plural (a Railism).
-      alias_method(:pluralize, :plural)
-    end
-
-    # One argument means singular and plural are the same.
-
-    word 'equipment'
-    word 'information'
-    word 'money'
-    word 'species'
-    word 'series'
-    word 'fish'
-    word 'sheep'
-    word 'moose'
-    word 'hovercraft'
-    word 'grass'
-    word 'rain'
-    word 'milk'
-    word 'rice'
-    word 'plurals'
-    word 'postgres'
-    word 'status'
-
-    # Two arguments defines a singular and plural exception.
-    word 'status'    , 'status'
-    word 'Swiss'     , 'Swiss'
-    word 'life'      , 'lives'
-    word 'wife'      , 'wives'
-    word 'goose'     , 'geese'
-    word 'criterion' , 'criteria'
-    word 'alias'     , 'aliases'
-    word 'status'    , 'statuses'
-    word 'axis'      , 'axes'
-    word 'crisis'    , 'crises'
-    word 'testis'    , 'testes'
-    word 'potato'    , 'potatoes'
-    word 'tomato'    , 'tomatoes'
-    word 'buffalo'   , 'buffaloes'
-    word 'torpedo'   , 'torpedoes'
-    word 'quiz'      , 'quizzes'
-    word 'matrix'    , 'matrices'
-    word 'vertex'    , 'vertices'
-    word 'index'     , 'indices'
-    word 'ox'        , 'oxen'
-    word 'mouse'     , 'mice'
-    word 'louse'     , 'lice'
-    word 'thesis'    , 'theses'
-    word 'thief'     , 'thieves'
-    word 'analysis'  , 'analyses'
-    word 'erratum'   , 'errata'
-    word 'phenomenon', 'phenomena'
-    word 'octopus'   , 'octopi'
-    word 'thesaurus' , 'thesauri'
-    word 'movie'     , 'movies'
-    word 'cactus'    , 'cacti'
-    word 'plus'      , 'plusses'
-    word 'cross'     , 'crosses'
-    word 'medium'    , 'media'
-    word 'cow'       , 'kine'
-    word 'datum'     , 'data'
-    word 'basis'     , 'bases'
-    word 'diagnosis' , 'diagnoses'
-
-    # One-way singularization exception (convert plural to singular).
-
-    # General rules.
-    rule 'person' , 'people', true
-    rule 'shoe'   , 'shoes', true
-    rule 'hive'   , 'hives', true
-    rule 'man'    , 'men', true
-    rule 'child'  , 'children', true
-    rule 'news'   , 'news', true
-    rule 'rf'   , 'rves'
-    rule 'af'   , 'aves'
-    rule 'ero'  , 'eroes'
-    rule 'man'  , 'men'
-    rule 'ch'   , 'ches'
-    rule 'sh'   , 'shes'
-    rule 'ss'   , 'sses'
-    rule 'ta'   , 'tum'
-    rule 'ia'   , 'ium'
-    rule 'ra'   , 'rum'
-    rule 'ay'   , 'ays'
-    rule 'ey'   , 'eys'
-    rule 'oy'   , 'oys'
-    rule 'uy'   , 'uys'
-    rule 'y'    , 'ies'
-    rule 'x'    , 'xes'
-    rule 'lf'   , 'lves'
-    rule 'ffe'  , 'ffes'
-    rule 'afe'  , 'aves'
-    rule 'ouse' , 'ouses'
-    # more cases of words ending in -oses not being singularized properly
-    # than cases of words ending in -osis
-#    rule 'osis' , 'oses'
-    rule 'ox'   , 'oxes'
-    rule 'us'   , 'uses'
-    rule ''     , 's'
-
-    # One-way singular rules.
-
-    singular_rule 'of' , 'ofs' # proof
-    singular_rule 'o'  , 'oes' # hero, heroes
-    singular_rule 'f'  , 'ves'
-
-    # One-way plural rules.
-
-    #plural_rule 'fe' , 'ves' # safe, wife
-    plural_rule 's'   , 'ses'
-    plural_rule 'ive' , 'ives' # don't want to snag wife
-    plural_rule 'fe'  , 'ves'  # don't want to snag perspectives
-
-
-  end
-end
-
-class String
-  def singular
-    Extlib::Inflection.singular(self)
-  end
-  alias_method(:singularize, :singular)
-  def plural
-    Extlib::Inflection.plural(self)
-  end
-  alias_method(:pluralize, :plural)
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/lazy_array.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/lazy_array.rb
deleted file mode 100644
index 1518ee7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/lazy_array.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-class LazyArray  # borrowed partially from StrokeDB
-  instance_methods.each { |m| undef_method m unless %w[ __id__ __send__ send dup class object_id kind_of? respond_to? assert_kind_of should should_not instance_variable_set instance_variable_get extend ].include?(m.to_s) }
-
-  include Enumerable
-
-  # these methods should return self or nil
-  RETURN_SELF = [ :<<, :clear, :concat, :collect!, :each, :each_index,
-    :each_with_index, :freeze, :insert, :map!, :push, :replace,
-    :reject!, :reverse!, :reverse_each, :sort!, :unshift ]
-
-  RETURN_SELF.each do |method|
-    class_eval <<-EOS, __FILE__, __LINE__
-      def #{method}(*args, &block)
-        lazy_load
-        results = @array.#{method}(*args, &block)
-        results.kind_of?(Array) ? self : results
-      end
-    EOS
-  end
-
-  (Array.public_instance_methods(false).map { |m| m.to_sym } - RETURN_SELF - [ :taguri= ]).each do |method|
-    class_eval <<-EOS, __FILE__, __LINE__
-      def #{method}(*args, &block)
-        lazy_load
-        @array.#{method}(*args, &block)
-      end
-    EOS
-  end
-
-  def replace(other)
-    mark_loaded
-    @array.replace(other.entries)
-    self
-  end
-
-  def clear
-    mark_loaded
-    @array.clear
-    self
-  end
-
-  def eql?(other)
-    lazy_load
-    @array.eql?(other.entries)
-  end
-
-  alias == eql?
-
-  def load_with(&block)
-    @load_with_proc = block
-    self
-  end
-
-  def loaded?
-    @loaded == true
-  end
-
-  def unload
-    clear
-    @loaded = false
-    self
-  end
-
-  def respond_to?(method, include_private = false)
-    super || @array.respond_to?(method, include_private)
-  end
-
-  def to_proc
-    @load_with_proc
-  end
-
-  private
-
-  def initialize(*args, &block)
-    @loaded         = false
-    @load_with_proc = proc { |v| v }
-    @array          = Array.new(*args, &block)
-  end
-
-  def initialize_copy(original)
-    @array = original.entries
-    load_with(&original)
-    mark_loaded if @array.any?
-  end
-
-  def lazy_load
-    return if loaded?
-    mark_loaded
-    @load_with_proc[self]
-  end
-
-  def mark_loaded
-    @loaded = true
-  end
-
-  # delegate any not-explicitly-handled methods to @array, if possible.
-  # this is handy for handling methods mixed-into Array like group_by
-  def method_missing(method, *args, &block)
-    if @array.respond_to?(method)
-      lazy_load
-      @array.send(method, *args, &block)
-    else
-      super
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/logger.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/logger.rb
deleted file mode 100755
index 61dd0bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/logger.rb
+++ /dev/null
@@ -1,202 +0,0 @@
-require "time" # httpdate
-# ==== Public Merb Logger API
-#
-# To replace an existing logger with a new one:
-#  Merb::Logger.set_log(log{String, IO},level{Symbol, String})
-#
-# Available logging levels are
-#   Merb::Logger::{ Fatal, Error, Warn, Info, Debug }
-#
-# Logging via:
-#   Merb.logger.fatal(message<String>,&block)
-#   Merb.logger.error(message<String>,&block)
-#   Merb.logger.warn(message<String>,&block)
-#   Merb.logger.info(message<String>,&block)
-#   Merb.logger.debug(message<String>,&block)
-#
-# Logging with autoflush:
-#   Merb.logger.fatal!(message<String>,&block)
-#   Merb.logger.error!(message<String>,&block)
-#   Merb.logger.warn!(message<String>,&block)
-#   Merb.logger.info!(message<String>,&block)
-#   Merb.logger.debug!(message<String>,&block)
-#
-# Flush the buffer to 
-#   Merb.logger.flush
-#
-# Remove the current log object
-#   Merb.logger.close
-# 
-# ==== Private Merb Logger API
-# 
-# To initialize the logger you create a new object, proxies to set_log.
-#   Merb::Logger.new(log{String, IO},level{Symbol, String})
-module Extlib
-
-  class << self
-    attr_accessor :logger
-  end
-
-  class Logger
-
-    attr_accessor :level
-    attr_accessor :delimiter
-    attr_accessor :auto_flush
-    attr_reader   :buffer
-    attr_reader   :log
-    attr_reader   :init_args
-
-    # ==== Notes
-    # Ruby (standard) logger levels:
-    # :fatal:: An unhandleable error that results in a program crash
-    # :error:: A handleable error condition
-    # :warn:: A warning
-    # :info:: generic (useful) information about system operation
-    # :debug:: low-level information for developers
-    Levels = 
-    {
-      :fatal => 7, 
-      :error => 6, 
-      :warn  => 4,
-      :info  => 3,
-      :debug => 0
-    }
-
-    private
-
-    # Readies a log for writing.
-    #
-    # ==== Parameters
-    # log<IO, String>:: Either an IO object or a name of a logfile.
-    def initialize_log(log)
-      close if @log # be sure that we don't leave open files laying around.
-
-      if log.respond_to?(:write)
-        @log = log
-      elsif File.exist?(log)
-        @log = open(log, (File::WRONLY | File::APPEND))
-        @log.sync = true
-      else
-        FileUtils.mkdir_p(File.dirname(log)) unless File.directory?(File.dirname(log))
-        @log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
-        @log.sync = true
-        @log.write("#{Time.now.httpdate} #{delimiter} info #{delimiter} Logfile created\n")
-      end
-    end
-
-    public
-
-    # To initialize the logger you create a new object, proxies to set_log.
-    #
-    # ==== Parameters
-    # *args:: Arguments to create the log from. See set_logs for specifics.
-    def initialize(*args)
-      @init_args = args
-      set_log(*args)
-    end
-
-    # Replaces an existing logger with a new one.
-    # 
-    # ==== Parameters
-    # log<IO, String>:: Either an IO object or a name of a logfile.
-    # log_level<~to_sym>::
-    #   The log level from, e.g. :fatal or :info. Defaults to :error in the
-    #   production environment and :debug otherwise.
-    # delimiter<String>::
-    #   Delimiter to use between message sections. Defaults to " ~ ".
-    # auto_flush<Boolean>::
-    #   Whether the log should automatically flush after new messages are
-    #   added. Defaults to false.
-    def set_log(log, log_level = nil, delimiter = " ~ ", auto_flush = false)
-      if log_level && Levels[log_level.to_sym]
-        @level = Levels[log_level.to_sym]
-      elsif Merb.environment == "production"
-        @level = Levels[:warn]
-      else
-        @level = Levels[:debug]
-      end
-      @buffer     = []
-      @delimiter  = delimiter
-      @auto_flush = auto_flush
-
-      initialize_log(log)
-
-      Merb.logger = self
-    end
-
-    # Flush the entire buffer to the log object.
-    def flush
-      return unless @buffer.size > 0
-      @log.write(@buffer.slice!(0..-1).to_s)
-    end
-
-    # Close and remove the current log object.
-    def close
-      flush
-      @log.close if @log.respond_to?(:close) && !@log.tty?
-      @log = nil
-    end
-
-    # Appends a message to the log. The methods yield to an optional block and
-    # the output of this block will be appended to the message.
-    #
-    # ==== Parameters
-    # string<String>:: The message to be logged. Defaults to nil.
-    #
-    # ==== Returns
-    # String:: The resulting message added to the log file.
-    def <<(string = nil)
-      message = ""
-      message << delimiter
-      message << string if string
-      message << "\n" unless message[-1] == ?\n
-      @buffer << message
-      flush if @auto_flush
-
-      message
-    end
-    alias :push :<<
-
-    # Generate the logging methods for Merb.logger for each log level.
-    Levels.each_pair do |name, number|
-      class_eval <<-LEVELMETHODS, __FILE__, __LINE__
-
-      # Appends a message to the log if the log level is at least as high as
-      # the log level of the logger.
-      #
-      # ==== Parameters
-      # string<String>:: The message to be logged. Defaults to nil.
-      #
-      # ==== Returns
-      # self:: The logger object for chaining.
-      def #{name}(message = nil)
-        self << message if #{number} >= level
-        self
-      end
-
-      # Appends a message to the log if the log level is at least as high as
-      # the log level of the logger. The bang! version of the method also auto
-      # flushes the log buffer to disk.
-      #
-      # ==== Parameters
-      # string<String>:: The message to be logged. Defaults to nil.
-      #
-      # ==== Returns
-      # self:: The logger object for chaining.
-      def #{name}!(message = nil)
-        self << message if #{number} >= level
-        flush if #{number} >= level
-        self
-      end
-
-      # ==== Returns
-      # Boolean:: True if this level will be logged by this logger.
-      def #{name}?
-        #{number} >= level
-      end
-      LEVELMETHODS
-    end
-
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/mash.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/mash.rb
deleted file mode 100644
index 8637004..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/mash.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-# This class has dubious semantics and we only have it so that people can write
-# params[:key] instead of params['key'].
-class Mash < Hash
-
-  # @param constructor<Object>
-  #   The default value for the mash. Defaults to an empty hash.
-  #
-  # @details [Alternatives]
-  #   If constructor is a Hash, a new mash will be created based on the keys of
-  #   the hash and no default value will be set.
-  def initialize(constructor = {})
-    if constructor.is_a?(Hash) 
-      super() 
-      update(constructor) 
-    else 
-      super(constructor) 
-    end 
-  end
-
-  # @param key<Object> The default value for the mash. Defaults to nil.
-  #
-  # @details [Alternatives]
-  #   If key is a Symbol and it is a key in the mash, then the default value will
-  #   be set to the value matching the key.
-  def default(key = nil) 
-    if key.is_a?(Symbol) && include?(key = key.to_s) 
-      self[key] 
-    else 
-      super 
-    end 
-  end 
- 
-  alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) 
-  alias_method :regular_update, :update unless method_defined?(:regular_update)
-
-  # @param key<Object> The key to set.
-  # @param value<Object>
-  #   The value to set the key to.
-  #
-  # @see Mash#convert_key
-  # @see Mash#convert_value
-  def []=(key, value) 
-    regular_writer(convert_key(key), convert_value(value)) 
-  end
-
-  # @param other_hash<Hash>
-  #   A hash to update values in the mash with. The keys and the values will be
-  #   converted to Mash format.
-  #
-  # @return <Mash> The updated mash.
-  def update(other_hash) 
-    other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) } 
-    self 
-  end 
- 
-  alias_method :merge!, :update
-
-  # @param key<Object> The key to check for. This will be run through convert_key.
-  #
-  # @return <TrueClass, FalseClass> True if the key exists in the mash.
-  def key?(key) 
-    super(convert_key(key)) 
-  end 
-
-  # def include? def has_key? def member?
-  alias_method :include?, :key?
-  alias_method :has_key?, :key?
-  alias_method :member?, :key?
-
-  # @param key<Object> The key to fetch. This will be run through convert_key.
-  # @param *extras<Array> Default value.
-  #
-  # @return <Object> The value at key or the default value.
-  def fetch(key, *extras) 
-    super(convert_key(key), *extras) 
-  end
-
-  # @param *indices<Array>
-  #   The keys to retrieve values for. These will be run through +convert_key+.
-  #
-  # @return <Array> The values at each of the provided keys
-  def values_at(*indices) 
-    indices.collect {|key| self[convert_key(key)]} 
-  end
-
-  # @param hash<Hash> The hash to merge with the mash.
-  #
-  # @return <Mash> A new mash with the hash values merged in.
-  def merge(hash) 
-    self.dup.update(hash) 
-  end
-
-  # @param key<Object>
-  #   The key to delete from the mash.\
-  def delete(key) 
-    super(convert_key(key)) 
-  end
-
-  # @param *rejected<Array[(String, Symbol)] The mash keys to exclude.
-  #
-  # @return <Mash> A new mash without the selected keys.
-  #
-  # @example
-  #   { :one => 1, :two => 2, :three => 3 }.except(:one)
-  #     #=> { "two" => 2, "three" => 3 }
-  def except(*keys)
-    super(*keys.map {|k| convert_key(k)})
-  end
-
-  # Used to provide the same interface as Hash.
-  #
-  # @return <Mash> This mash unchanged.
-  def stringify_keys!; self end
- 
-  # @return <Hash> The mash as a Hash with string keys.
-  def to_hash 
-    Hash.new(default).merge(self) 
-  end 
- 
-  protected
-  # @param key<Object> The key to convert.
-  #
-  # @param <Object>
-  #   The converted key. If the key was a symbol, it will be converted to a
-  #   string.
-  #
-  # @api private
-  def convert_key(key) 
-    key.kind_of?(Symbol) ? key.to_s : key 
-  end
-
-  # @param value<Object> The value to convert.
-  #
-  # @return <Object>
-  #   The converted value. A Hash or an Array of hashes, will be converted to
-  #   their Mash equivalents.
-  #
-  # @api private
-  def convert_value(value) 
-    if value.class == Hash
-      value.to_mash 
-    elsif value.is_a?(Array)
-      value.collect { |e| convert_value(e) } 
-    else
-      value
-    end 
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb
deleted file mode 100644
index 76ae3ef..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/module.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-class Module
-  def find_const(const_name)
-    if const_name[0..1] == '::'
-      Object.find_const(const_name[2..-1])
-    else
-      nested_const_lookup(const_name)
-    end
-  end
-  
-  def try_dup
-    self
-  end
-
-  private
-
-  # Doesn't do any caching since constants can change with remove_const
-  def nested_const_lookup(const_name)
-    constants = [ Object ]
-
-    unless self == Object
-      self.name.split('::').each do |part|
-        constants.unshift(constants.first.const_get(part))
-      end
-    end
-
-    parts = const_name.split('::')
-
-    # from most to least specific constant, use each as a base and try
-    # to find a constant with the name const_name within them
-    constants.each do |const|
-      # return the nested constant if available
-      return const if parts.all? do |part|
-        const = const.const_defined?(part) ? const.const_get(part) : nil
-      end
-    end
-
-    # if we get this far then the nested constant was not found
-    raise NameError, "uninitialized constant #{const_name}"
-  end
-
-end # class Module
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/nil.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/nil.rb
deleted file mode 100644
index 2e4d947..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/nil.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class NilClass
-  def try_dup
-    self
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/numeric.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/numeric.rb
deleted file mode 100644
index fc2905b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/numeric.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class Numeric
-  def try_dup
-    self
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/object.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/object.rb
deleted file mode 100644
index 9033414..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/object.rb
+++ /dev/null
@@ -1,175 +0,0 @@
-class Object
-  # Extracts the singleton class, so that metaprogramming can be done on it.
-  #
-  # @return <Class> The meta class.
-  #
-  # @example [Setup]
-  #   class MyString < String; end
-  #
-  #   MyString.instance_eval do
-  #     define_method :foo do
-  #       puts self
-  #     end
-  #   end
-  #
-  #   MyString.meta_class.instance_eval do
-  #     define_method :bar do
-  #       puts self
-  #     end
-  #   end
-  #
-  #   def String.add_meta_var(var)
-  #     self.meta_class.instance_eval do
-  #       define_method var do
-  #         puts "HELLO"
-  #       end
-  #     end
-  #   end
-  #
-  # @example
-  #   MyString.new("Hello").foo #=> "Hello"
-  # @example
-  #   MyString.new("Hello").bar
-  #     #=> NoMethodError: undefined method `bar' for "Hello":MyString
-  # @example
-  #   MyString.foo
-  #     #=> NoMethodError: undefined method `foo' for MyString:Class
-  # @example  
-  #   MyString.bar
-  #     #=> MyString
-  # @example  
-  #   String.bar
-  #     #=> NoMethodError: undefined method `bar' for String:Class
-  # @example
-  #   MyString.add_meta_var(:x)
-  #   MyString.x #=> HELLO
-  #
-  # @details [Description of Examples]
-  #   As you can see, using #meta_class allows you to execute code (and here,
-  #   define a method) on the metaclass itself. It also allows you to define
-  #   class methods that can be run on subclasses, and then be able to execute
-  #   code on the metaclass of the subclass (here MyString).
-  #
-  #   In this case, we were able to define a class method (add_meta_var) on
-  #   String that was executable by the MyString subclass. It was then able to
-  #   define a method on the subclass by adding it to the MyString metaclass.
-  #
-  #   For more information, you can check out _why's excellent article at:
-  #   http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
-  def meta_class() class << self; self end end
-
-  # @param name<String> The name of the constant to get, e.g. "Merb::Router".
-  #
-  # @return <Object> The constant corresponding to the name.
-  def full_const_get(name)
-    list = name.split("::")
-    list.shift if list.first.blank?
-    obj = self
-    list.each do |x| 
-      # This is required because const_get tries to look for constants in the 
-      # ancestor chain, but we only want constants that are HERE
-      obj = obj.const_defined?(x) ? obj.const_get(x) : obj.const_missing(x)
-    end
-    obj
-  end
-  
-  # @param name<String> The name of the constant to get, e.g. "Merb::Router".
-  # @param value<Object> The value to assign to the constant.
-  #
-  # @return <Object> The constant corresponding to the name.
-  def full_const_set(name, value)    
-    list = name.split("::")
-    toplevel = list.first.blank?
-    list.shift if toplevel
-    last = list.pop
-    obj = list.empty? ? Object : Object.full_const_get(list.join("::"))
-    obj.const_set(last, value) if obj && !obj.const_defined?(last)
-  end
-
-  # Defines module from a string name (e.g. Foo::Bar::Baz)
-  # If module already exists, no exception raised.
-  #
-  # @param name<String> The name of the full module name to make
-  #
-  # @return <NilClass>
-  def make_module(str)
-    mod = str.split("::")
-    current_module = self
-    mod.each do |x|
-      unless current_module.const_defined?(x)
-        current_module.class_eval "module #{x}; end"
-      end
-      current_module = current_module.const_get(x)
-    end
-    current_module
-  end
-
-  # @param duck<Symbol, Class, Array> The thing to compare the object to.
-  #
-  # @note
-  #   The behavior of the method depends on the type of duck as follows:
-  #   Symbol:: Check whether the object respond_to?(duck).
-  #   Class:: Check whether the object is_a?(duck).
-  #   Array::
-  #     Check whether the object quacks_like? at least one of the options in the
-  #     array.
-  #
-  # @return <TrueClass, FalseClass>
-  #   True if the object quacks like duck.
-  def quacks_like?(duck)
-    case duck
-    when Symbol
-      self.respond_to?(duck)
-    when Class
-      self.is_a?(duck)
-    when Array
-      duck.any? {|d| self.quacks_like?(d) }
-    else
-      false
-    end
-  end
-  
-  # Override this in a child if it cannot be dup'ed
-  #
-  # @return <Object>
-  def try_dup
-    self.dup
-  end
-  
-  # @param arrayish<#include?> Container to check, to see if it includes the object.
-  # @param *more<Array>:: additional args, will be flattened into arrayish
-  #
-  # @return <TrueClass, FalseClass>
-  #   True if the object is included in arrayish (+ more)
-  #
-  # @example 1.in?([1,2,3]) #=> true
-  # @example 1.in?(1,2,3) #=> true
-  def in?(arrayish,*more)
-    arrayish = more.unshift(arrayish) unless more.empty?
-    arrayish.include?(self)
-  end
-  
-  # @note
-  #   For instances of objects that don't override the #inspect method, there
-  #   is an encoded hash to uniquely identify the object. This method
-  #   reproduces this to be used in #inspect in order to keep the same look
-  #   as well as provide this information.
-  #   This is inessential, but may be useful.
-  # 
-  # @return <String>
-  #   Returns the 16-byte encoded hash for the object
-  def encoded_hash
-    (self.hash * 2).to_s(16)
-  end
-
-  # Add instance_variable_defined? for backward compatibility
-  # @param variable<Symbol, String>
-  #
-  # @return <TrueClass, FalseClass>
-  #   True if the object has the given instance variable defined
-  unless respond_to?(:instance_variable_defined?)
-    def instance_variable_defined?(variable)
-      instance_variables.include?(variable.to_s)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/object_space.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/object_space.rb
deleted file mode 100644
index 236310f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/object_space.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module ObjectSpace
-  
-  class << self
-
-    # @return <Array[Class]> All the classes in the object space.
-    def classes
-      klasses = []
-      ObjectSpace.each_object(Class) {|o| klasses << o}
-      klasses
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/pathname.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/pathname.rb
deleted file mode 100644
index 8ee76a5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/pathname.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class Pathname
-  def /(path)
-    (self + path).expand_path
-  end
-end # class Pathname
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/pooling.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/pooling.rb
deleted file mode 100644
index d265042..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/pooling.rb
+++ /dev/null
@@ -1,239 +0,0 @@
-require 'set'
-require 'thread'
-
-module Extlib
-  # ==== Notes
-  # Provides pooling support to class it got included in.
-  #
-  # Pooling of objects is a faster way of aquiring instances
-  # of objects compared to regular allocation and initialization
-  # because instances are keeped in memory reused.
-  #
-  # Classes that include Pooling module have re-defined new
-  # method that returns instances acquired from pool.
-  #
-  # Term resource is used for any type of poolable objects
-  # and should NOT be thought as DataMapper Resource or
-  # ActiveResource resource and such.
-  #
-  # In Data Objects connections are pooled so that it is
-  # unnecessary to allocate and initialize connection object
-  # each time connection is needed, like per request in a
-  # web application.
-  #
-  # Pool obviously has to be thread safe because state of
-  # object is reset when it is released.
-  module Pooling
-
-    def self.scavenger?
-      @scavenger && @scavenger.alive?
-    end
-
-    def self.scavenger
-      if @scavenger.nil? || !@scavenger.alive?
-        @scavenger = Thread.new do
-          running = true
-          while running do
-            # Sleep before we actually start doing anything.
-            # Otherwise we might clean up something we just made
-            sleep(scavenger_interval)
-
-            lock.synchronize do
-              pools.each do |pool|
-                # This is a useful check, but non-essential, and right now it breaks lots of stuff.
-                # if pool.expired?
-                pool.lock.synchronize do
-                  if pool.expired?
-                    pool.dispose
-                  end
-                end
-                # end
-              end
-
-              # The pool is empty, we stop the scavenger
-              # It wil be restarted if new resources are added again
-              if pools.empty?
-                running = false
-              end
-            end
-          end # loop
-        end
-      end
-
-      @scavenger.priority = -10
-      @scavenger
-    end
-
-    def self.pools
-      @pools ||= Set.new
-    end
-
-    def self.append_pool(pool)
-      lock.synchronize do
-        pools << pool
-      end
-      Extlib::Pooling::scavenger
-    end
-
-    def self.lock
-      @lock ||= Mutex.new
-    end
-
-    class InvalidResourceError < StandardError
-    end
-
-    class ThreadStopError < StandardError
-    end
-
-    def self.included(target)
-      target.class_eval do
-        class << self
-          alias __new new
-        end
-
-        @__pools     = {}
-        @__pool_lock = Mutex.new
-        @__pool_wait = ConditionVariable.new
-
-        def self.__pool_lock
-          @__pool_lock
-        end
-
-        def self.__pool_wait
-          @__pool_wait
-        end
-
-        def self.new(*args)
-          (@__pools[args] ||= __pool_lock.synchronize { Pool.new(self.pool_size, self, args) }).new
-        end
-
-        def self.__pools
-          @__pools
-        end
-
-        def self.pool_size
-          8
-        end
-      end
-    end
-
-    def release
-      @__pool.release(self) unless @__pool.nil?
-    end
-
-    class Pool
-      attr_reader :available
-      attr_reader :used
-
-      def initialize(max_size, resource, args)
-        raise ArgumentError.new("+max_size+ should be a Fixnum but was #{max_size.inspect}") unless Fixnum === max_size
-        raise ArgumentError.new("+resource+ should be a Class but was #{resource.inspect}") unless Class === resource
-
-        @max_size = max_size
-        @resource = resource
-        @args = args
-
-        @available = []
-        @used      = {}
-        Extlib::Pooling::append_pool(self)
-      end
-
-      def lock
-        @resource.__pool_lock
-      end
-
-      def wait
-        @resource.__pool_wait
-      end
-
-      def scavenge_interval
-        @resource.scavenge_interval
-      end
-
-      def new
-        instance = nil
-        begin
-          lock.synchronize do
-            if @available.size > 0
-              instance = @available.pop
-              @used[instance.object_id] = instance
-            elsif @used.size < @max_size
-              instance = @resource.__new(*@args)
-              raise InvalidResourceError.new("#{@resource} constructor created a nil object") if instance.nil?
-              raise InvalidResourceError.new("#{instance} is already part of the pool") if @used.include? instance
-              instance.instance_variable_set(:@__pool, self)
-              instance.instance_variable_set(:@__allocated_in_pool, Time.now)
-              @used[instance.object_id] = instance
-            else
-              # Let's see whether we have multiple threads
-              # If we do, there is a chance we might be released
-              # at some point in the future and thus we wait.
-              # If there are no other threads, we exhaust the pool
-              # here and there is no more hope... So we throw an
-              # exception.
-              if ThreadGroup::Default.list.size <= 2
-                raise ThreadStopError.new(size)
-              else
-                wait.wait(lock)
-              end
-            end
-          end
-        end until instance
-        instance
-      end
-
-      def release(instance)
-        instance.instance_variable_set(:@__allocated_in_pool, Time.now)
-        lock.synchronize do
-          @used.delete(instance.object_id)
-          @available.push(instance)
-          wait.signal
-        end
-        nil
-      end
-
-      def delete(instance)
-        lock.synchronize do
-          instance.instance_variable_set(:@__pool, nil)
-          @used.delete(instance.object_id)
-        end
-        nil
-      end
-
-      def size
-        @used.size + @available.size
-      end
-      alias length size
-
-      def inspect
-        "#<Extlib::Pooling::Pool<#{@resource.name}> available=#{@available.size} used=#{@used.size} size=#{@max_size}>"
-      end
-
-      def flush!
-        @available.pop.dispose until @available.empty?
-      end
-
-      def dispose
-        flush!
-        @resource.__pools.delete(@args)
-        !Extlib::Pooling::pools.delete?(self).nil?
-      end
-
-      def expired?
-        @available.each do |instance|
-          if Extlib.exiting || instance.instance_variable_get(:@__allocated_in_pool) + Extlib::Pooling.scavenger_interval <= Time.now
-            instance.dispose
-            @available.delete(instance)
-          end
-        end
-
-        size == 0
-      end
-
-    end
-
-    def self.scavenger_interval
-      60
-    end
-  end # module Pooling
-end # module Extlib
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/rubygems.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/rubygems.rb
deleted file mode 100644
index 4d2d32b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/rubygems.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# this is a temporary workaround until rubygems Does the Right thing here
-require 'rubygems'
-module Gem
-  class SourceIndex
-    
-    # This is resolved in 1.1
-    if Version.new(RubyGemsVersion) < Version.new("1.1")
-      
-      # Overwrite this so that a gem of the same name and version won't push one
-      # from the gems directory out entirely.
-      #
-      # @param gem_spec<Gem::Specification> The specification of the gem to add.
-      def add_spec(gem_spec)
-        unless gem_spec.instance_variable_get("@loaded_from") &&
-          @gems[gem_spec.full_name].is_a?(Gem::Specification) && 
-          @gems[gem_spec.full_name].installation_path == 
-            File.join(defined?(Merb) && Merb.respond_to?(:root) ? Merb.root : Dir.pwd,"gems")
-            
-          @gems[gem_spec.full_name] = gem_spec
-        end
-      end
-      
-    end
-    
-  end
-
-  class Specification
-
-    # Overwrite this so that gems in the gems directory get preferred over gems
-    # from any other location. If there are two gems of different versions in
-    # the gems directory, the later one will load as usual.
-    #
-    # @return <Array[Array]> The object used for sorting gem specs.
-    def sort_obj
-      [@name, installation_path == File.join(defined?(Merb) && Merb.respond_to?(:root) ? Merb.root : Dir.pwd,"gems") ? 1 : -1, @version.to_ints, @new_platform == Gem::Platform::RUBY ? -1 : 1]
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/simple_set.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/simple_set.rb
deleted file mode 100644
index 3d3b181..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/simple_set.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-module Extlib
-  # Simple set implementation
-  # on top of Hash with merging support.
-  #
-  # In particular this is used to store
-  # a set of callable actions of controller.
-  class SimpleSet < Hash
-
-    # @param arr<Array> Initial set values.
-    #
-    # @return <Array> The array the Set was initialized with
-    def initialize(arr = [])
-      arr.each {|x| self[x] = true}
-    end
-
-    # @param value<Object> Value to add to set.
-    #
-    # @return <TrueClass>
-    def <<(value)
-      self[value] = true
-    end
-
-    # @param arr<Array> Values to merge with set.
-    #
-    # @return <SimpleSet> The set after the Array was merged in.
-    def merge(arr)
-      super(arr.inject({}) {|s,x| s[x] = true; s })
-    end
-
-    # @return <String> A human readable version of the set.
-    def inspect
-      "#<SimpleSet: {#{keys.map {|x| x.inspect}.join(", ")}}>"
-    end
-
-    # def to_a
-    alias_method :to_a, :keys
-
-  end # SimpleSet
-end # Merb
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/string.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/string.rb
deleted file mode 100644
index 42f8622..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/string.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-require "pathname"
-
-class String
-  ##
-  # @return <String> The string with all regexp special characters escaped.
-  #
-  # @example
-  #   "*?{}.".escape_regexp #=> "\\*\\?\\{\\}\\."
-  def escape_regexp
-    Regexp.escape self
-  end
-  
-  ##
-  # @return String The string with all regexp special characters unescaped.
-  #
-  # @example
-  #   "\\*\\?\\{\\}\\.".unescape_regexp #=> "*?{}."
-  def unescape_regexp
-    self.gsub(/\\([\.\?\|\(\)\[\]\{\}\^\$\*\+\-])/, '\1')
-  end
-  
-  ##
-  # @return <String> The string converted to snake case.
-  #
-  # @example
-  #   "FooBar".snake_case #=> "foo_bar"
-  # @example
-  #   "HeadlineCNNNews".snake_case #=> "headline_cnn_news"
-  # @example
-  #   "CNN".snake_case #=> "cnn"
-  def snake_case
-    return self.downcase if self =~ /^[A-Z]+$/
-    self.gsub(/([A-Z]+)(?=[A-Z][a-z]?)|\B[A-Z]/, '_\&') =~ /_*(.*)/
-      return $+.downcase
-  end
-
-  ##
-  # @return <String> The string converted to camel case.
-  #
-  # @example
-  #   "foo_bar".camel_case #=> "FooBar"
-  def camel_case
-    return self if self !~ /_/ && self =~ /[A-Z]+.*/
-    split('_').map{|e| e.capitalize}.join
-  end
-
-  ##
-  # @return <String> The path string converted to a constant name.
-  #
-  # @example
-  #   "merb/core_ext/string".to_const_string #=> "Merb::CoreExt::String"
-  def to_const_string
-    gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
-  end
-
-  ##
-  # @return <String>
-  #   The path that is associated with the constantized string, assuming a
-  #   conventional structure.
-  #
-  # @example
-  #   "FooBar::Baz".to_const_path # => "foo_bar/baz"
-  def to_const_path
-    snake_case.gsub(/::/, "/")
-  end
-
-  ##
-  # @param o<String> The path component to join with the string.
-  #
-  # @return <String> The original path concatenated with o.
-  #
-  # @example
-  #   "merb"/"core_ext" #=> "merb/core_ext"
-  def /(o)
-    File.join(self, o.to_s)
-  end
-
-  ##
-  # @param other<String> Base path to calculate against
-  #
-  # @return <String> Relative path from between the two
-  #
-  # @example
-  #   "/opt/local/lib".relative_path_from("/opt/local/lib/ruby/site_ruby") # => "../.."
-  def relative_path_from(other)
-    Pathname.new(self).relative_path_from(Pathname.new(other)).to_s
-  end
-  
-  # Overwrite this method to provide your own translations.
-  def self.translate(value)
-    translations[value] || value
-  end
-
-  def self.translations
-    @translations ||= {}
-  end
-
-  # Matches any whitespace (including newline) and replaces with a single space
-  #
-  # @example
-  #   <<QUERY.compress_lines
-  #     SELECT name
-  #     FROM users
-  #   QUERY
-  #   => "SELECT name FROM users"
-  def compress_lines(spaced = true)
-    split($/).map { |line| line.strip }.join(spaced ? ' ' : '')
-  end
-
-  # Useful for heredocs - removes whitespace margin.
-  def margin(indicator = nil)
-    lines = self.dup.split($/)
-
-    min_margin = 0
-    lines.each do |line|
-      if line =~ /^(\s+)/ && (min_margin == 0 || $1.size < min_margin)
-        min_margin = $1.size
-      end
-    end
-    lines.map { |line| line.sub(/^\s{#{min_margin}}/, '') }.join($/)
-  end
-
- # Formats String for easy translation. Replaces an arbitrary number of
-  # values using numeric identifier replacement.
-  #
-  # @example
-  # "%s %s %s" % %w(one two three) #=> "one two three"
-  # "%3$s %2$s %1$s" % %w(one two three) #=> "three two one"
-  def t(*values)
-    self.class::translate(self) % values.collect! { |value| value.frozen? ? value : self.class::translate(value.to_s) }
-  end
-end # class String
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/struct.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/struct.rb
deleted file mode 100644
index e708682..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/struct.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class Struct
-  # Returns a hash containing the names and values for all instance variables in the Struct.
-  def attributes
-    h = {}
-    each_pair { |k,v| h[k] = v }
-    h
-  end
-end # class Struct
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/symbol.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/symbol.rb
deleted file mode 100644
index bdffc1f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/symbol.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-class Symbol
-  
-  def try_dup
-    self
-  end
-  
-  ##
-  # @param o<String, Symbol> The path component to join with the string.
-  #
-  # @return <String> The original path concatenated with o.
-  #
-  # @example
-  #   :merb/"core_ext" #=> "merb/core_ext"
-  def /(o)
-    File.join(self.to_s, o.to_s)
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/tasks/release.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/tasks/release.rb
deleted file mode 100644
index e938a95..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/tasks/release.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-desc "Publish the release files to RubyForge."
-task :release => [ :package ] do
-  packages = %w( gem tgz zip ).collect{ |ext| "pkg/#{GEM_NAME}-#{GEM_VERSION}.#{ext}" }
-
-  begin
-    sh %{rubyforge login}
-    sh %{rubyforge add_release #{RUBY_FORGE_PROJECT} #{GEM_NAME} #{GEM_VERSION} #{packages.join(' ')}}
-    sh %{rubyforge add_file #{RUBY_FORGE_PROJECT} #{GEM_NAME} #{GEM_VERSION} #{packages.join(' ')}}
-  rescue Exception => e
-    puts
-    puts "Release failed: #{e.message}"
-    puts
-    puts "Set PKG_BUILD environment variable if you do a subrelease (0.9.4.2008_08_02 when version is 0.9.4)"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/time.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/time.rb
deleted file mode 100644
index 22acd30..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/time.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class Time
-  
-  # @return <String>
-  #   ISO 8601 compatible rendering of the Time object's properties.
-  # 
-  # @example
-  #   Time.now.to_json # => "\"2008-03-28T17:54:20-05:00\""
-  def to_json(*)
-    self.xmlschema.to_json
-  end
-  
-  def to_time
-    self
-  end
-  
-  def to_datetime
-    DateTime.parse self.to_s
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/version.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/version.rb
deleted file mode 100644
index 57f48e1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/version.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-module Extlib
-  VERSION = "0.9.8"
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/virtual_file.rb b/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/virtual_file.rb
deleted file mode 100644
index e98a07c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/extlib-0.9.8/lib/extlib/virtual_file.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require "stringio"
-
-# To use as a parameter to Merb::Template.inline_template
-class VirtualFile < StringIO
-  attr_accessor :path
-  def initialize(string, path)
-    super(string)
-    @path = path
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/CHANGELOG b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/CHANGELOG
deleted file mode 100644
index 0b0987e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/CHANGELOG
+++ /dev/null
@@ -1,3 +0,0 @@
-
-  v1.0.1. Signed gem.
-  
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/Manifest b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/Manifest
deleted file mode 100644
index e0d9518..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/Manifest
+++ /dev/null
@@ -1,9 +0,0 @@
-test/test_queue.rb
-test/test_mutex.rb
-test/test_condvar.rb
-test/test_all.rb
-setup.rb
-Manifest
-ext/fastthread/fastthread.c
-ext/fastthread/extconf.rb
-CHANGELOG
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/Makefile b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/Makefile
deleted file mode 100644
index 9e148bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/Makefile
+++ /dev/null
@@ -1,153 +0,0 @@
-
-SHELL = /bin/sh
-
-#### Start of system configuration section. ####
-
-srcdir = .
-topdir = /opt/local/lib/ruby/1.8/i686-darwin9.5.1
-hdrdir = $(topdir)
-VPATH = $(srcdir):$(topdir):$(hdrdir)
-prefix = $(DESTDIR)/opt/local
-exec_prefix = $(prefix)
-sitedir = $(prefix)/lib/ruby/site_ruby
-rubylibdir = $(libdir)/ruby/$(ruby_version)
-docdir = $(datarootdir)/doc/$(PACKAGE)
-dvidir = $(docdir)
-datarootdir = $(prefix)/share
-archdir = $(rubylibdir)/$(arch)
-sbindir = $(exec_prefix)/sbin
-psdir = $(docdir)
-vendordir = $(prefix)/lib/ruby/vendor_ruby
-localedir = $(datarootdir)/locale
-htmldir = $(docdir)
-datadir = $(datarootdir)
-includedir = $(prefix)/include
-infodir = $(datarootdir)/info
-sysconfdir = $(prefix)/etc
-mandir = $(DESTDIR)/opt/local/share/man
-libdir = $(exec_prefix)/lib
-sharedstatedir = $(prefix)/com
-oldincludedir = $(DESTDIR)/usr/include
-pdfdir = $(docdir)
-sitearchdir = $(sitelibdir)/$(sitearch)
-vendorarchdir = $(vendorlibdir)/$(vendorarch)
-bindir = $(exec_prefix)/bin
-localstatedir = $(prefix)/var
-vendorlibdir = $(vendordir)/$(ruby_version)
-sitelibdir = $(sitedir)/$(ruby_version)
-libexecdir = $(exec_prefix)/libexec
-
-CC = /usr/bin/gcc-4.0
-LIBRUBY = $(LIBRUBY_SO)
-LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
-LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
-LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
-
-RUBY_EXTCONF_H = 
-CFLAGS   =  -fno-common -O2  -fno-common -pipe -fno-common 
-INCFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
-CPPFLAGS =  -I/opt/local/include
-CXXFLAGS = $(CFLAGS) 
-DLDFLAGS = -L. -L/opt/local/lib  
-LDSHARED = cc -dynamic -bundle -undefined suppress -flat_namespace
-AR = ar
-EXEEXT = 
-
-RUBY_INSTALL_NAME = ruby
-RUBY_SO_NAME = ruby
-arch = i686-darwin9.5.1
-sitearch = i686-darwin9.5.1
-vendorarch = i686-darwin9.5.1
-ruby_version = 1.8
-ruby = /opt/local/bin/ruby
-RUBY = $(ruby)
-RM = rm -f
-MAKEDIRS = mkdir -p
-INSTALL = /usr/bin/install
-INSTALL_PROG = $(INSTALL) -m 0755
-INSTALL_DATA = $(INSTALL) -m 644
-COPY = cp
-
-#### End of system configuration section. ####
-
-preload = 
-
-libpath = . $(libdir)
-LIBPATH =  -L"." -L"$(libdir)"
-DEFFILE = 
-
-CLEANFILES = mkmf.log
-DISTCLEANFILES = 
-
-extout = 
-extout_prefix = 
-target_prefix = 
-LOCAL_LIBS = 
-LIBS = $(LIBRUBYARG_SHARED)  -lpthread -ldl -lobjc  
-SRCS = fastthread.c
-OBJS = fastthread.o
-TARGET = fastthread
-DLLIB = $(TARGET).bundle
-EXTSTATIC = 
-STATIC_LIB = 
-
-RUBYCOMMONDIR = $(sitedir)$(target_prefix)
-RUBYLIBDIR = /Users/mattetti/github/merb/merb-core/spec/public/webrat/test_app/gems/gems/fastthread-1.0.1/lib$(target_prefix)
-RUBYARCHDIR = /Users/mattetti/github/merb/merb-core/spec/public/webrat/test_app/gems/gems/fastthread-1.0.1/lib$(target_prefix)
-
-TARGET_SO     = $(DLLIB)
-CLEANLIBS     = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map
-CLEANOBJS     = *.o *.a *.s[ol] *.pdb *.exp *.bak
-
-all:		$(DLLIB)
-static:		$(STATIC_LIB)
-
-clean:
-		@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
-
-distclean:	clean
-		@-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
-		@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
-
-realclean:	distclean
-install: install-so install-rb
-
-install-so: $(RUBYARCHDIR)
-install-so: $(RUBYARCHDIR)/$(DLLIB)
-$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
-	$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
-install-rb: pre-install-rb install-rb-default
-install-rb-default: pre-install-rb-default
-pre-install-rb: Makefile
-pre-install-rb-default: Makefile
-$(RUBYARCHDIR):
-	$(MAKEDIRS) $@
-
-site-install: site-install-so site-install-rb
-site-install-so: install-so
-site-install-rb: install-rb
-
-.SUFFIXES: .c .m .cc .cxx .cpp .C .o
-
-.cc.o:
-	$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
-
-.cxx.o:
-	$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
-
-.cpp.o:
-	$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
-
-.C.o:
-	$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
-
-.c.o:
-	$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
-
-$(DLLIB): $(OBJS)
-	@-$(RM) $@
-	$(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
-
-
-
-$(OBJS): ruby.h defines.h
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/extconf.rb b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/extconf.rb
deleted file mode 100644
index fcacfd9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/extconf.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'mkmf'
-
-create_makefile('fastthread')
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.bundle b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.bundle
deleted file mode 100755
index e130a9f..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.bundle and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.c b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.c
deleted file mode 100644
index 355ed00..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.c
+++ /dev/null
@@ -1,1186 +0,0 @@
-/*
- * Optimized Ruby Mutex implementation, loosely based on thread.rb by
- * Yukihiro Matsumoto <matz at ruby-lang.org>
- *
- *  Copyright 2006-2007  MenTaLguY <mental at rydia.net>
- *
- * RDoc taken from original.
- *
- * This file is made available under the same terms as Ruby.
- */
-
-#include <ruby.h>
-#include <intern.h>
-#include <rubysig.h>
-
-static VALUE rb_cMutex;
-static VALUE rb_cConditionVariable;
-static VALUE rb_cQueue;
-static VALUE rb_cSizedQueue;
-/* earlier versions of ruby do not export rb_eThreadError */
-static VALUE private_eThreadError;
-
-static VALUE set_critical(VALUE value);
-
-/*
- *  call-seq:
- *     Thread.exclusive { block }   => obj
- *  
- *  Wraps a block in Thread.critical, restoring the original value
- *  upon exit from the critical section, and returns the value of the
- *  block.
- */
-
-typedef struct _Entry {
-    VALUE value;
-    struct _Entry *next;
-} Entry;
-
-typedef struct _List {
-    Entry *entries;
-    Entry *last_entry;
-    Entry *entry_pool;
-    unsigned long size;
-} List;
-
-static void
-init_list(List *list)
-{
-    list->entries = NULL;
-    list->last_entry = NULL;
-    list->entry_pool = NULL;
-    list->size = 0;
-}
-
-static void
-mark_list(List *list)
-{
-    Entry *entry;
-    for (entry = list->entries; entry; entry = entry->next) {
-        rb_gc_mark(entry->value);
-    }
-}
-
-static void
-free_entries(Entry *first)
-{
-    Entry *next;
-    while (first) {
-        next = first->next;
-        xfree(first);
-        first = next;
-    }
-}
-
-static void
-finalize_list(List *list)
-{
-    free_entries(list->entries);
-    free_entries(list->entry_pool);
-}
-
-static void
-push_list(List *list, VALUE value)
-{
-    Entry *entry;
-
-    if (list->entry_pool) {
-        entry = list->entry_pool;
-        list->entry_pool = entry->next;
-    } else {
-        entry = ALLOC(Entry);
-    }
-
-    entry->value = value;
-    entry->next = NULL;
-
-    if (list->last_entry) {
-        list->last_entry->next = entry;
-    } else {
-        list->entries = entry;
-    }
-    list->last_entry = entry;
-
-    ++list->size;
-}
-
-static void
-push_multiple_list(List *list, VALUE *values, unsigned count)
-{
-    unsigned i;
-    for (i = 0; i < count; i++) {
-        push_list(list, values[i]);
-    }
-}
-
-static void
-recycle_entries(List *list, Entry *first_entry, Entry *last_entry)
-{
-#ifdef USE_MEM_POOLS
-    last_entry->next = list->entry_pool;
-    list->entry_pool = first_entry;
-#else
-    last_entry->next = NULL;
-    free_entries(first_entry);
-#endif
-}
-
-static VALUE
-shift_list(List *list)
-{
-    Entry *entry;
-    VALUE value;
-
-    entry = list->entries;
-    if (!entry) return Qundef;
-
-    list->entries = entry->next;
-    if (entry == list->last_entry) {
-        list->last_entry = NULL;
-    }
-
-    --list->size;
-
-    value = entry->value;
-    recycle_entries(list, entry, entry);
-
-    return value;
-}
-
-static void
-remove_one(List *list, VALUE value)
-{
-    Entry **ref;
-    Entry *prev;
-    Entry *entry;
-
-    for (ref = &list->entries, prev = NULL, entry = list->entries;
-              entry != NULL;
-              ref = &entry->next, prev = entry, entry = entry->next) {
-        if (entry->value == value) {
-            *ref = entry->next;
-            list->size--;
-            if (!entry->next) {
-                list->last_entry = prev;
-            }
-            recycle_entries(list, entry, entry);
-            break;
-        }
-    }
-}
-
-static void
-clear_list(List *list)
-{
-    if (list->last_entry) {
-        recycle_entries(list, list->entries, list->last_entry);
-        list->entries = NULL;
-        list->last_entry = NULL;
-        list->size = 0;
-    }
-}
-
-static VALUE
-array_from_list(List const *list)
-{
-    VALUE ary;
-    Entry *entry;
-    ary = rb_ary_new();
-    for (entry = list->entries; entry; entry = entry->next) {
-        rb_ary_push(ary, entry->value);
-    }
-    return ary;
-}
-
-static VALUE
-wake_thread(VALUE thread)
-{
-    return rb_rescue2(rb_thread_wakeup, thread,
-      NULL, Qundef, private_eThreadError, 0);
-}
-
-static VALUE
-run_thread(VALUE thread)
-{
-    return rb_rescue2(rb_thread_run, thread,
-      NULL, Qundef, private_eThreadError, 0);
-}
-
-static VALUE
-wake_one(List *list)
-{
-    VALUE waking;
-
-    waking = Qnil;
-    while (list->entries && !RTEST(waking)) {
-        waking = wake_thread(shift_list(list));
-    }
-
-    return waking;
-}
-
-static VALUE
-wake_all(List *list)
-{
-    while (list->entries) {
-        wake_one(list);
-    }
-    return Qnil;
-}
-
-static VALUE
-wait_list_inner(List *list)
-{
-    push_list(list, rb_thread_current());
-    rb_thread_stop();
-    return Qnil;
-}
-
-static VALUE
-wait_list_cleanup(List *list)
-{
-    /* cleanup in case of spurious wakeups */
-    remove_one(list, rb_thread_current());
-    return Qnil;
-}
-
-static void
-wait_list(List *list)
-{
-    rb_ensure(wait_list_inner, (VALUE)list, wait_list_cleanup, (VALUE)list);
-}
-
-static void
-assert_no_survivors(List *waiting, const char *label, void *addr)
-{
-    Entry *entry;
-    for (entry = waiting->entries; entry; entry = entry->next) {
-        if (RTEST(wake_thread(entry->value))) {
-            rb_bug("%s %p freed with live thread(s) waiting", label, addr);
-        }
-    }
-}
-
-/*
- * Document-class: Mutex
- *
- * Mutex implements a simple semaphore that can be used to coordinate access to
- * shared data from multiple concurrent threads.
- *
- * Example:
- *
- *   require 'thread'
- *   semaphore = Mutex.new
- *
- *   a = Thread.new {
- *     semaphore.synchronize {
- *       # access shared resource
- *     }
- *   }
- *
- *   b = Thread.new {
- *     semaphore.synchronize {
- *       # access shared resource
- *     }
- *   }
- *
- */
-
-typedef struct _Mutex {
-    VALUE owner;
-    List waiting;
-} Mutex;
-
-static void
-mark_mutex(Mutex *mutex)
-{
-    rb_gc_mark(mutex->owner);
-    mark_list(&mutex->waiting);
-}
-
-static void
-finalize_mutex(Mutex *mutex)
-{
-    finalize_list(&mutex->waiting);
-}
-
-static void
-free_mutex(Mutex *mutex)
-{
-    assert_no_survivors(&mutex->waiting, "mutex", mutex);
-    finalize_mutex(mutex);
-    xfree(mutex);
-}
-
-static void
-init_mutex(Mutex *mutex)
-{
-    mutex->owner = Qnil;
-    init_list(&mutex->waiting);
-}
-
-/*
- * Document-method: new
- * call-seq: Mutex.new
- * 
- * Creates a new Mutex
- *
- */
-
-static VALUE 
-rb_mutex_alloc(VALUE klass)
-{
-    Mutex *mutex;
-    mutex = ALLOC(Mutex);
-    init_mutex(mutex);
-    return Data_Wrap_Struct(klass, mark_mutex, free_mutex, mutex);
-}
-
-/*
- * Document-method: locked?
- * call-seq: locked?
- *
- * Returns +true+ if this lock is currently held by some thread.
- *
- */
-
-static VALUE
-rb_mutex_locked_p(VALUE self)
-{
-    Mutex *mutex;
-    Data_Get_Struct(self, Mutex, mutex);
-    return RTEST(mutex->owner) ? Qtrue : Qfalse;
-}
-
-/*
- * Document-method: try_lock
- * call-seq: try_lock
- *
- * Attempts to obtain the lock and returns immediately. Returns +true+ if the
- * lock was granted.
- *
- */
-
-static VALUE
-rb_mutex_try_lock(VALUE self)
-{
-    Mutex *mutex;
-
-    Data_Get_Struct(self, Mutex, mutex);
-
-    if (RTEST(mutex->owner))
-        return Qfalse;
-
-    mutex->owner = rb_thread_current();
-    return Qtrue;
-}
-
-/*
- * Document-method: lock
- * call-seq: lock
- *
- * Attempts to grab the lock and waits if it isn't available.
- *
- */
-
-static VALUE
-lock_mutex(Mutex *mutex)
-{
-    VALUE current;
-    current = rb_thread_current();
-
-    rb_thread_critical = 1;
-
-    while (RTEST(mutex->owner)) {
-        wait_list(&mutex->waiting);
-        rb_thread_critical = 1;
-    }
-    mutex->owner = current; 
-
-    rb_thread_critical = 0;
-    return Qnil;
-}
-
-static VALUE
-rb_mutex_lock(VALUE self)
-{
-    Mutex *mutex;
-    Data_Get_Struct(self, Mutex, mutex);
-    lock_mutex(mutex);
-    return self;
-}
-
-/*
- * Document-method: unlock
- *
- * Releases the lock. Returns +nil+ if ref wasn't locked.
- *
- */
-
-static VALUE
-unlock_mutex_inner(Mutex *mutex)
-{
-    VALUE waking;
-
-    if (!RTEST(mutex->owner)) {
-	return Qundef;
-    }
-
-    mutex->owner = Qnil;
-    waking = wake_one(&mutex->waiting);
-
-    return waking;
-}
-
-static VALUE
-set_critical(VALUE value)
-{
-    rb_thread_critical = (int)value;
-    return Qundef;
-}
-
-static VALUE
-unlock_mutex(Mutex *mutex)
-{
-    VALUE waking;
-
-    rb_thread_critical = 1;
-    waking = rb_ensure(unlock_mutex_inner, (VALUE)mutex, set_critical, 0);
-
-    if (waking == Qundef) {
-        return Qfalse;
-    }
-
-    if (RTEST(waking)) {
-        run_thread(waking);
-    }
-
-    return Qtrue;
-}
-
-static VALUE
-rb_mutex_unlock(VALUE self)
-{
-    Mutex *mutex;
-    Data_Get_Struct(self, Mutex, mutex);
-
-    if (RTEST(unlock_mutex(mutex))) {
-        return self;
-    } else {
-        return Qnil;
-    }
-}
-
-/*
- * Document-method: exclusive_unlock
- * call-seq: exclusive_unlock { ... }
- *
- * If the mutex is locked, unlocks the mutex, wakes one waiting thread, and
- * yields in a critical section.
- *
- */
-
-static VALUE
-rb_mutex_exclusive_unlock_inner(Mutex *mutex)
-{
-    VALUE waking;
-    waking = unlock_mutex_inner(mutex);
-    rb_yield(Qundef);
-    return waking;
-}
-
-static VALUE
-rb_mutex_exclusive_unlock(VALUE self)
-{
-    Mutex *mutex;
-    VALUE waking;
-    Data_Get_Struct(self, Mutex, mutex);
-
-    rb_thread_critical = 1;
-    waking = rb_ensure(rb_mutex_exclusive_unlock_inner, (VALUE)mutex, set_critical, 0);
-
-    if (waking == Qundef) {
-        return Qnil;
-    }
-
-    if (RTEST(waking)) {
-        run_thread(waking);
-    }
-
-    return self;
-}
-
-/*
- * Document-method: synchronize
- * call-seq: synchronize { ... }
- *
- * Obtains a lock, runs the block, and releases the lock when the block
- * completes.  See the example under Mutex.
- *
- */
-
-static VALUE
-rb_mutex_synchronize(VALUE self)
-{
-    rb_mutex_lock(self);
-    return rb_ensure(rb_yield, Qundef, rb_mutex_unlock, self);
-}
-
-/*
- * Document-class: ConditionVariable
- *
- * ConditionVariable objects augment class Mutex. Using condition variables,
- * it is possible to suspend while in the middle of a critical section until a
- * resource becomes available.
- *
- * Example:
- *
- *   require 'thread'
- *
- *   mutex = Mutex.new
- *   resource = ConditionVariable.new
- *
- *   a = Thread.new {
- *     mutex.synchronize {
- *       # Thread 'a' now needs the resource
- *       resource.wait(mutex)
- *       # 'a' can now have the resource
- *     }
- *   }
- *
- *   b = Thread.new {
- *     mutex.synchronize {
- *       # Thread 'b' has finished using the resource
- *       resource.signal
- *     }
- *   }
- *
- */
-
-typedef struct _ConditionVariable {
-    List waiting;
-} ConditionVariable;
-
-static void
-mark_condvar(ConditionVariable *condvar)
-{
-    mark_list(&condvar->waiting);
-}
-
-static void
-finalize_condvar(ConditionVariable *condvar)
-{
-    finalize_list(&condvar->waiting);
-}
-
-static void
-free_condvar(ConditionVariable *condvar)
-{
-    assert_no_survivors(&condvar->waiting, "condition variable", condvar);
-    finalize_condvar(condvar);
-    xfree(condvar);
-}
-
-static void
-init_condvar(ConditionVariable *condvar)
-{
-    init_list(&condvar->waiting);
-}
-
-/*
- * Document-method: new
- * call-seq: ConditionVariable.new
- *
- * Creates a new ConditionVariable
- *
- */
-
-static VALUE
-rb_condvar_alloc(VALUE klass)
-{
-    ConditionVariable *condvar;
-
-    condvar = ALLOC(ConditionVariable);
-    init_condvar(condvar);
-
-    return Data_Wrap_Struct(klass, mark_condvar, free_condvar, condvar);
-}
-
-/*
- * Document-method: wait
- * call-seq: wait
- *
- * Releases the lock held in +mutex+ and waits; reacquires the lock on wakeup.
- *
- */
-
-static void
-wait_condvar(ConditionVariable *condvar, Mutex *mutex)
-{
-    rb_thread_critical = 1;
-    if (rb_thread_current() != mutex->owner) {
-        rb_thread_critical = 0;
-        rb_raise(private_eThreadError, "not owner of the synchronization mutex");
-    }
-    unlock_mutex_inner(mutex);
-    rb_ensure(wait_list, (VALUE)&condvar->waiting, lock_mutex, (VALUE)mutex);
-}
-
-static VALUE
-legacy_exclusive_unlock(VALUE mutex)
-{
-    return rb_funcall(mutex, rb_intern("exclusive_unlock"), 0);
-}
-
-typedef struct {
-    ConditionVariable *condvar;
-    VALUE mutex;
-} legacy_wait_args;
-
-static VALUE
-legacy_wait(VALUE unused, legacy_wait_args *args)
-{
-    wait_list(&args->condvar->waiting);
-    rb_funcall(args->mutex, rb_intern("lock"), 0);
-    return Qnil;
-}
-
-static VALUE
-rb_condvar_wait(VALUE self, VALUE mutex_v)
-{
-    ConditionVariable *condvar;
-    Data_Get_Struct(self, ConditionVariable, condvar);
-
-    if (CLASS_OF(mutex_v) != rb_cMutex) {
-        /* interoperate with legacy mutex */
-        legacy_wait_args args;
-        args.condvar = condvar;
-        args.mutex = mutex_v;
-        rb_iterate(legacy_exclusive_unlock, mutex_v, legacy_wait, (VALUE)&args);
-    } else {
-        Mutex *mutex;
-        Data_Get_Struct(mutex_v, Mutex, mutex);
-        wait_condvar(condvar, mutex);
-    }
-
-    return self;
-}
-
-/*
- * Document-method: broadcast
- * call-seq: broadcast
- *
- * Wakes up all threads waiting for this condition.
- *
- */
-
-static VALUE
-rb_condvar_broadcast(VALUE self)
-{
-    ConditionVariable *condvar;
-
-    Data_Get_Struct(self, ConditionVariable, condvar);
-  
-    rb_thread_critical = 1;
-    rb_ensure(wake_all, (VALUE)&condvar->waiting, set_critical, 0);
-    rb_thread_schedule();
-
-    return self;
-}
-
-/*
- * Document-method: signal
- * call-seq: signal
- *
- * Wakes up the first thread in line waiting for this condition.
- *
- */
-
-static void
-signal_condvar(ConditionVariable *condvar)
-{
-    VALUE waking;
-    rb_thread_critical = 1;
-    waking = rb_ensure(wake_one, (VALUE)&condvar->waiting, set_critical, 0);
-    if (RTEST(waking)) {
-        run_thread(waking);
-    }
-}
-
-static VALUE
-rb_condvar_signal(VALUE self)
-{
-    ConditionVariable *condvar;
-    Data_Get_Struct(self, ConditionVariable, condvar);
-    signal_condvar(condvar);
-    return self;
-}
-
-/*
- * Document-class: Queue
- *
- * This class provides a way to synchronize communication between threads.
- *
- * Example:
- *
- *   require 'thread'
- *
- *   queue = Queue.new
- *
- *   producer = Thread.new do
- *     5.times do |i|
- *       sleep rand(i) # simulate expense
- *       queue << i
- *       puts "#{i} produced"
- *     end
- *   end
- *
- *   consumer = Thread.new do
- *     5.times do |i|
- *       value = queue.pop
- *       sleep rand(i/2) # simulate expense
- *       puts "consumed #{value}"
- *     end
- *   end
- *
- *   consumer.join
- *
- */
-
-typedef struct _Queue {
-    Mutex mutex;
-    ConditionVariable value_available;
-    ConditionVariable space_available;
-    List values;
-    unsigned long capacity;
-} Queue;
-
-static void
-mark_queue(Queue *queue)
-{
-    mark_mutex(&queue->mutex);
-    mark_condvar(&queue->value_available);
-    mark_condvar(&queue->space_available);
-    mark_list(&queue->values);
-}
-
-static void
-finalize_queue(Queue *queue)
-{
-    finalize_mutex(&queue->mutex);
-    finalize_condvar(&queue->value_available);
-    finalize_condvar(&queue->space_available);
-    finalize_list(&queue->values);
-}
-
-static void
-free_queue(Queue *queue)
-{
-    assert_no_survivors(&queue->mutex.waiting, "queue", queue);
-    assert_no_survivors(&queue->space_available.waiting, "queue", queue);
-    assert_no_survivors(&queue->value_available.waiting, "queue", queue);
-    finalize_queue(queue);
-    xfree(queue);
-}
-
-static void
-init_queue(Queue *queue)
-{
-    init_mutex(&queue->mutex);
-    init_condvar(&queue->value_available);
-    init_condvar(&queue->space_available);
-    init_list(&queue->values);
-    queue->capacity = 0;
-}
-
-/*
- * Document-method: new
- * call-seq: new
- *
- * Creates a new queue.
- *
- */
-
-static VALUE
-rb_queue_alloc(VALUE klass)
-{
-    Queue *queue;
-    queue = ALLOC(Queue);
-    init_queue(queue);
-    return Data_Wrap_Struct(klass, mark_queue, free_queue, queue);
-}
-
-static VALUE
-rb_queue_marshal_load(VALUE self, VALUE data)
-{
-    Queue *queue;
-    VALUE array;
-    Data_Get_Struct(self, Queue, queue);
-
-    array = rb_marshal_load(data);
-    if (TYPE(array) != T_ARRAY) {
-        rb_raise(rb_eRuntimeError, "expected Array of queue data");
-    }
-    if (RARRAY(array)->len < 1) {
-        rb_raise(rb_eRuntimeError, "missing capacity value");
-    }
-    queue->capacity = NUM2ULONG(rb_ary_shift(array));
-    push_multiple_list(&queue->values, RARRAY(array)->ptr, (unsigned)RARRAY(array)->len);
-
-    return self;
-}
-
-static VALUE
-rb_queue_marshal_dump(VALUE self)
-{
-    Queue *queue;
-    VALUE array;
-    Data_Get_Struct(self, Queue, queue);
-
-    array = array_from_list(&queue->values);
-    rb_ary_unshift(array, ULONG2NUM(queue->capacity));
-    return rb_marshal_dump(array, Qnil);
-}
-
-/*
- * Document-method: clear
- * call-seq: clear
- *
- * Removes all objects from the queue.
- *
- */
-
-static VALUE
-rb_queue_clear(VALUE self)
-{
-    Queue *queue;
-    Data_Get_Struct(self, Queue, queue);
-
-    lock_mutex(&queue->mutex);
-    clear_list(&queue->values);
-    signal_condvar(&queue->space_available);
-    unlock_mutex(&queue->mutex);
-
-    return self;
-}
-
-/*
- * Document-method: empty?
- * call-seq: empty?
- *
- * Returns +true+ if the queue is empty.
- *
- */
-
-static VALUE
-rb_queue_empty_p(VALUE self)
-{
-    Queue *queue;
-    VALUE result;
-    Data_Get_Struct(self, Queue, queue);
-
-    lock_mutex(&queue->mutex);
-    result = queue->values.size == 0 ? Qtrue : Qfalse;
-    unlock_mutex(&queue->mutex);
-
-    return result;
-}
-
-/*
- * Document-method: length
- * call-seq: length
- *
- * Returns the length of the queue.
- *
- */
-
-static VALUE
-rb_queue_length(VALUE self)
-{
-    Queue *queue;
-    VALUE result;
-    Data_Get_Struct(self, Queue, queue);
-
-    lock_mutex(&queue->mutex);
-    result = ULONG2NUM(queue->values.size);
-    unlock_mutex(&queue->mutex);
-
-    return result;
-}
-
-/*
- * Document-method: num_waiting
- * call-seq: num_waiting
- *
- * Returns the number of threads waiting on the queue.
- *
- */
-
-static VALUE
-rb_queue_num_waiting(VALUE self)
-{
-    Queue *queue;
-    VALUE result;
-    Data_Get_Struct(self, Queue, queue);
-
-    lock_mutex(&queue->mutex);
-    result = ULONG2NUM(queue->value_available.waiting.size +
-      queue->space_available.waiting.size);
-    unlock_mutex(&queue->mutex);
-
-    return result;
-}
-
-/*
- * Document-method: pop
- * call_seq: pop(non_block=false)
- *
- * Retrieves data from the queue.  If the queue is empty, the calling thread is
- * suspended until data is pushed onto the queue.  If +non_block+ is true, the
- * thread isn't suspended, and an exception is raised.
- *
- */
-
-static VALUE
-rb_queue_pop(int argc, VALUE *argv, VALUE self)
-{
-    Queue *queue;
-    int should_block;
-    VALUE result;
-    Data_Get_Struct(self, Queue, queue);
-
-    if (argc == 0) {
-        should_block = 1;
-    } else if (argc == 1) {
-        should_block = !RTEST(argv[0]);
-    } else {
-        rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
-    }
-
-    lock_mutex(&queue->mutex);
-    if (!queue->values.entries && !should_block) {
-        unlock_mutex(&queue->mutex);
-        rb_raise(private_eThreadError, "queue empty");
-    }
-
-    while (!queue->values.entries) {
-        wait_condvar(&queue->value_available, &queue->mutex);
-    }
-
-    result = shift_list(&queue->values);
-    if (queue->capacity && queue->values.size < queue->capacity) {
-        signal_condvar(&queue->space_available);
-    }
-    unlock_mutex(&queue->mutex);
-
-    return result;
-}
-
-/*
- * Document-method: push
- * call-seq: push(obj)
- *
- * Pushes +obj+ to the queue.
- *
- */
-
-static VALUE
-rb_queue_push(VALUE self, VALUE value)
-{
-    Queue *queue;
-    Data_Get_Struct(self, Queue, queue);
-
-    lock_mutex(&queue->mutex);
-    while (queue->capacity && queue->values.size >= queue->capacity) {
-        wait_condvar(&queue->space_available, &queue->mutex);
-    }
-    push_list(&queue->values, value);
-    signal_condvar(&queue->value_available);
-    unlock_mutex(&queue->mutex);
-
-    return self;
-}
-
-/*
- * Document-class: SizedQueue
- *
- * This class represents queues of specified size capacity.  The push operation
- * may be blocked if the capacity is full.
- *
- * See Queue for an example of how a SizedQueue works.
- *
- */
-
-/*
- * Document-method: new
- * call-seq: new
- *
- * Creates a fixed-length queue with a maximum size of +max+.
- *
- */
-
-/*
- * Document-method: max
- * call-seq: max
- *
- * Returns the maximum size of the queue.
- *
- */
-
-static VALUE
-rb_sized_queue_max(VALUE self)
-{
-    Queue *queue;
-    VALUE result;
-    Data_Get_Struct(self, Queue, queue);
-
-    lock_mutex(&queue->mutex);
-    result = ULONG2NUM(queue->capacity);
-    unlock_mutex(&queue->mutex);
-
-    return result;
-}
-
-/*
- * Document-method: max=
- * call-seq: max=(size)
- *
- * Sets the maximum size of the queue.
- *
- */
-
-static VALUE
-rb_sized_queue_max_set(VALUE self, VALUE value)
-{
-    Queue *queue;
-    unsigned long new_capacity;
-    unsigned long difference;
-    Data_Get_Struct(self, Queue, queue);
-
-    new_capacity = NUM2ULONG(value);
-
-    if (new_capacity < 1) {
-        rb_raise(rb_eArgError, "value must be positive");
-    }
-
-    lock_mutex(&queue->mutex);
-    if (queue->capacity && new_capacity > queue->capacity) {
-        difference = new_capacity - queue->capacity;
-    } else {
-        difference = 0;
-    }
-    queue->capacity = new_capacity;
-    for (; difference > 0; --difference) {
-        signal_condvar(&queue->space_available);
-    }
-    unlock_mutex(&queue->mutex);
-
-    return self;
-}
-
-/*
- * Document-method: push
- * call-seq: push(obj)
- *
- * Pushes +obj+ to the queue.  If there is no space left in the queue, waits
- * until space becomes available.
- *
- */
-
-/*
- * Document-method: pop
- * call-seq: pop(non_block=false)
- *
- * Retrieves data from the queue and runs a waiting thread, if any.
- *
- */
-
-/* for marshalling mutexes and condvars */
-
-static VALUE
-dummy_load(VALUE self, VALUE string)
-{
-    return Qnil;
-}
-
-static VALUE
-dummy_dump(VALUE self)
-{
-    return rb_str_new2("");
-}
-
-
-static VALUE
-setup_classes(VALUE unused)
-{
-    rb_mod_remove_const(rb_cObject, ID2SYM(rb_intern("Mutex")));
-    rb_cMutex = rb_define_class("Mutex", rb_cObject);
-    rb_define_alloc_func(rb_cMutex, rb_mutex_alloc);
-    rb_define_method(rb_cMutex, "marshal_load", dummy_load, 1);
-    rb_define_method(rb_cMutex, "marshal_dump", dummy_dump, 0);
-    rb_define_method(rb_cMutex, "locked?", rb_mutex_locked_p, 0);
-    rb_define_method(rb_cMutex, "try_lock", rb_mutex_try_lock, 0);
-    rb_define_method(rb_cMutex, "lock", rb_mutex_lock, 0);
-    rb_define_method(rb_cMutex, "unlock", rb_mutex_unlock, 0);
-    rb_define_method(rb_cMutex, "exclusive_unlock", rb_mutex_exclusive_unlock, 0);
-    rb_define_method(rb_cMutex, "synchronize", rb_mutex_synchronize, 0);
-
-    rb_mod_remove_const(rb_cObject, ID2SYM(rb_intern("ConditionVariable")));
-    rb_cConditionVariable = rb_define_class("ConditionVariable", rb_cObject);
-    rb_define_alloc_func(rb_cConditionVariable, rb_condvar_alloc);
-    rb_define_method(rb_cConditionVariable, "marshal_load", dummy_load, 1);
-    rb_define_method(rb_cConditionVariable, "marshal_dump", dummy_dump, 0);
-    rb_define_method(rb_cConditionVariable, "wait", rb_condvar_wait, 1);
-    rb_define_method(rb_cConditionVariable, "broadcast", rb_condvar_broadcast, 0);
-    rb_define_method(rb_cConditionVariable, "signal", rb_condvar_signal, 0);
-
-    rb_mod_remove_const(rb_cObject, ID2SYM(rb_intern("Queue")));
-    rb_cQueue = rb_define_class("Queue", rb_cObject);
-    rb_define_alloc_func(rb_cQueue, rb_queue_alloc);
-    rb_define_method(rb_cQueue, "marshal_load", rb_queue_marshal_load, 1);
-    rb_define_method(rb_cQueue, "marshal_dump", rb_queue_marshal_dump, 0);
-    rb_define_method(rb_cQueue, "clear", rb_queue_clear, 0);
-    rb_define_method(rb_cQueue, "empty?", rb_queue_empty_p, 0);
-    rb_define_method(rb_cQueue, "length", rb_queue_length, 0);
-    rb_define_method(rb_cQueue, "num_waiting", rb_queue_num_waiting, 0);
-    rb_define_method(rb_cQueue, "pop", rb_queue_pop, -1);
-    rb_define_method(rb_cQueue, "push", rb_queue_push, 1);
-    rb_alias(rb_cQueue, rb_intern("enq"), rb_intern("push"));
-    rb_alias(rb_cQueue, rb_intern("<<"), rb_intern("push"));
-    rb_alias(rb_cQueue, rb_intern("deq"), rb_intern("pop"));
-    rb_alias(rb_cQueue, rb_intern("shift"), rb_intern("pop"));
-    rb_alias(rb_cQueue, rb_intern("size"), rb_intern("length"));
-
-    rb_mod_remove_const(rb_cObject, ID2SYM(rb_intern("SizedQueue")));
-    rb_cSizedQueue = rb_define_class("SizedQueue", rb_cQueue);
-    rb_define_method(rb_cSizedQueue, "initialize", rb_sized_queue_max_set, 1);
-    rb_define_method(rb_cSizedQueue, "clear", rb_queue_clear, 0);
-    rb_define_method(rb_cSizedQueue, "empty?", rb_queue_empty_p, 0);
-    rb_define_method(rb_cSizedQueue, "length", rb_queue_length, 0);
-    rb_define_method(rb_cSizedQueue, "num_waiting", rb_queue_num_waiting, 0);
-    rb_define_method(rb_cSizedQueue, "pop", rb_queue_pop, -1);
-    rb_define_method(rb_cSizedQueue, "push", rb_queue_push, 1);
-    rb_define_method(rb_cSizedQueue, "max", rb_sized_queue_max, 0);
-    rb_define_method(rb_cSizedQueue, "max=", rb_sized_queue_max_set, 1);
-    rb_alias(rb_cSizedQueue, rb_intern("<<"), rb_intern("push"));
-    rb_alias(rb_cSizedQueue, rb_intern("deq"), rb_intern("pop"));
-    rb_alias(rb_cSizedQueue, rb_intern("shift"), rb_intern("pop"));
-
-    return Qnil;
-}
-
-void
-Init_fastthread()
-{
-    int saved_critical;
-
-    rb_require("thread");
-
-    private_eThreadError = rb_const_get(rb_cObject, rb_intern("ThreadError"));
-
-    /* ensure that classes get replaced atomically */
-    saved_critical = rb_thread_critical;
-    rb_thread_critical = 1;
-    rb_ensure(setup_classes, Qnil, set_critical, (VALUE)saved_critical);
-}
-
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.o b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.o
deleted file mode 100644
index 1717b1c..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/ext/fastthread/fastthread.o and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/fastthread.gemspec b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/fastthread.gemspec
deleted file mode 100644
index 1c88c42..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/fastthread.gemspec
+++ /dev/null
@@ -1,52 +0,0 @@
-
-# Gem::Specification for Fastthread-1.0.1
-# Originally generated by Echoe
-
-Gem::Specification.new do |s|
-  s.name = %q{fastthread}
-  s.version = "1.0.1"
-
-  s.specification_version = 2 if s.respond_to? :specification_version=
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["MenTaLguY <mental at rydia.net>"]
-  s.date = %q{2007-10-26}
-  s.description = %q{Optimized replacement for thread.rb primitives}
-  s.email = %q{}
-  s.extensions = ["ext/fastthread/extconf.rb"]
-  s.files = ["test/test_queue.rb", "test/test_mutex.rb", "test/test_condvar.rb", "test/test_all.rb", "setup.rb", "Manifest", "ext/fastthread/fastthread.c", "ext/fastthread/extconf.rb", "CHANGELOG", "fastthread.gemspec"]
-  s.has_rdoc = true
-  s.homepage = %q{}
-  s.require_paths = ["lib", "ext"]
-  s.rubyforge_project = %q{mongrel}
-  s.rubygems_version = %q{0.9.4.6}
-  s.summary = %q{Optimized replacement for thread.rb primitives}
-  s.test_files = ["test/test_all.rb"]
-end
-
-
-# # Original Rakefile source (requires the Echoe gem):
-# 
-# 
-# require 'echoe'
-# 
-# Echoe.new("fastthread") do |p|
-#   p.project = "mongrel"
-#   p.author = "MenTaLguY <mental at rydia.net>"
-#   p.summary = "Optimized replacement for thread.rb primitives"
-#   p.extensions = "ext/fastthread/extconf.rb"
-#   p.clean_pattern = ['build/*', '**/*.o', '**/*.so', '**/*.a', 'lib/*-*', '**/*.log', "ext/fastthread/*.{bundle,so,obj,pdb,lib,def,exp}", "ext/fastthread/Makefile", "pkg", "lib/*.bundle", "*.gem", ".config"]
-# 
-#   p.need_tar_gz = false
-#   p.need_tgz = true
-#   p.require_signed = true
-# 
-#   p.eval = proc do  
-#     if RUBY_PLATFORM.match("win32")
-#       platform = Gem::Platform::WIN32
-#       files += ['lib/fastthread.so']
-#       task :package => [:clean, :compile]
-#     end
-#   end
-# 
-# end
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/lib/fastthread.bundle b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/lib/fastthread.bundle
deleted file mode 100755
index e130a9f..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/lib/fastthread.bundle and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/setup.rb b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/setup.rb
deleted file mode 100644
index f54f84e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/setup.rb
+++ /dev/null
@@ -1,1585 +0,0 @@
-#
-# setup.rb
-#
-# Copyright (c) 2000-2005 Minero Aoki
-#
-# This program is free software.
-# You can distribute/modify this program under the terms of
-# the GNU LGPL, Lesser General Public License version 2.1.
-#
-
-unless Enumerable.method_defined?(:map)   # Ruby 1.4.6
-  module Enumerable
-    alias map collect
-  end
-end
-
-unless File.respond_to?(:read)   # Ruby 1.6
-  def File.read(fname)
-    open(fname) {|f|
-      return f.read
-    }
-  end
-end
-
-unless Errno.const_defined?(:ENOTEMPTY)   # Windows?
-  module Errno
-    class ENOTEMPTY
-      # We do not raise this exception, implementation is not needed.
-    end
-  end
-end
-
-def File.binread(fname)
-  open(fname, 'rb') {|f|
-    return f.read
-  }
-end
-
-# for corrupted Windows' stat(2)
-def File.dir?(path)
-  File.directory?((path[-1,1] == '/') ? path : path + '/')
-end
-
-
-class ConfigTable
-
-  include Enumerable
-
-  def initialize(rbconfig)
-    @rbconfig = rbconfig
-    @items = []
-    @table = {}
-    # options
-    @install_prefix = nil
-    @config_opt = nil
-    @verbose = true
-    @no_harm = false
-  end
-
-  attr_accessor :install_prefix
-  attr_accessor :config_opt
-
-  attr_writer :verbose
-
-  def verbose?
-    @verbose
-  end
-
-  attr_writer :no_harm
-
-  def no_harm?
-    @no_harm
-  end
-
-  def [](key)
-    lookup(key).resolve(self)
-  end
-
-  def []=(key, val)
-    lookup(key).set val
-  end
-
-  def names
-    @items.map {|i| i.name }
-  end
-
-  def each(&block)
-    @items.each(&block)
-  end
-
-  def key?(name)
-    @table.key?(name)
-  end
-
-  def lookup(name)
-    @table[name] or setup_rb_error "no such config item: #{name}"
-  end
-
-  def add(item)
-    @items.push item
-    @table[item.name] = item
-  end
-
-  def remove(name)
-    item = lookup(name)
-    @items.delete_if {|i| i.name == name }
-    @table.delete_if {|name, i| i.name == name }
-    item
-  end
-
-  def load_script(path, inst = nil)
-    if File.file?(path)
-      MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path
-    end
-  end
-
-  def savefile
-    '.config'
-  end
-
-  def load_savefile
-    begin
-      File.foreach(savefile()) do |line|
-        k, v = *line.split(/=/, 2)
-        self[k] = v.strip
-      end
-    rescue Errno::ENOENT
-      setup_rb_error $!.message + "\n#{File.basename($0)} config first"
-    end
-  end
-
-  def save
-    @items.each {|i| i.value }
-    File.open(savefile(), 'w') {|f|
-      @items.each do |i|
-        f.printf "%s=%s\n", i.name, i.value if i.value? and i.value
-      end
-    }
-  end
-
-  def load_standard_entries
-    standard_entries(@rbconfig).each do |ent|
-      add ent
-    end
-  end
-
-  def standard_entries(rbconfig)
-    c = rbconfig
-
-    rubypath = File.join(c['bindir'], c['ruby_install_name'] + c['EXEEXT'])
-
-    major = c['MAJOR'].to_i
-    minor = c['MINOR'].to_i
-    teeny = c['TEENY'].to_i
-    version = "#{major}.#{minor}"
-
-    # ruby ver. >= 1.4.4?
-    newpath_p = ((major >= 2) or
-                 ((major == 1) and
-                  ((minor >= 5) or
-                   ((minor == 4) and (teeny >= 4)))))
-
-    if c['rubylibdir']
-      # V > 1.6.3
-      libruby         = "#{c['prefix']}/lib/ruby"
-      librubyver      = c['rubylibdir']
-      librubyverarch  = c['archdir']
-      siteruby        = c['sitedir']
-      siterubyver     = c['sitelibdir']
-      siterubyverarch = c['sitearchdir']
-    elsif newpath_p
-      # 1.4.4 <= V <= 1.6.3
-      libruby         = "#{c['prefix']}/lib/ruby"
-      librubyver      = "#{c['prefix']}/lib/ruby/#{version}"
-      librubyverarch  = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
-      siteruby        = c['sitedir']
-      siterubyver     = "$siteruby/#{version}"
-      siterubyverarch = "$siterubyver/#{c['arch']}"
-    else
-      # V < 1.4.4
-      libruby         = "#{c['prefix']}/lib/ruby"
-      librubyver      = "#{c['prefix']}/lib/ruby/#{version}"
-      librubyverarch  = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
-      siteruby        = "#{c['prefix']}/lib/ruby/#{version}/site_ruby"
-      siterubyver     = siteruby
-      siterubyverarch = "$siterubyver/#{c['arch']}"
-    end
-    parameterize = lambda {|path|
-      path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')
-    }
-
-    if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
-      makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
-    else
-      makeprog = 'make'
-    end
-
-    [
-      ExecItem.new('installdirs', 'std/site/home',
-                   'std: install under libruby; site: install under site_ruby; home: install under $HOME')\
-          {|val, table|
-            case val
-            when 'std'
-              table['rbdir'] = '$librubyver'
-              table['sodir'] = '$librubyverarch'
-            when 'site'
-              table['rbdir'] = '$siterubyver'
-              table['sodir'] = '$siterubyverarch'
-            when 'home'
-              setup_rb_error '$HOME was not set' unless ENV['HOME']
-              table['prefix'] = ENV['HOME']
-              table['rbdir'] = '$libdir/ruby'
-              table['sodir'] = '$libdir/ruby'
-            end
-          },
-      PathItem.new('prefix', 'path', c['prefix'],
-                   'path prefix of target environment'),
-      PathItem.new('bindir', 'path', parameterize.call(c['bindir']),
-                   'the directory for commands'),
-      PathItem.new('libdir', 'path', parameterize.call(c['libdir']),
-                   'the directory for libraries'),
-      PathItem.new('datadir', 'path', parameterize.call(c['datadir']),
-                   'the directory for shared data'),
-      PathItem.new('mandir', 'path', parameterize.call(c['mandir']),
-                   'the directory for man pages'),
-      PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']),
-                   'the directory for system configuration files'),
-      PathItem.new('localstatedir', 'path', parameterize.call(c['localstatedir']),
-                   'the directory for local state data'),
-      PathItem.new('libruby', 'path', parameterize.call(libruby),
-                   'the directory for ruby libraries'),
-      PathItem.new('librubyver', 'path', parameterize.call(librubyver),
-                   'the directory for standard ruby libraries'),
-      PathItem.new('librubyverarch', 'path', parameterize.call(librubyverarch),
-                   'the directory for standard ruby extensions'),
-      PathItem.new('siteruby', 'path', parameterize.call(siteruby),
-          'the directory for version-independent aux ruby libraries'),
-      PathItem.new('siterubyver', 'path', parameterize.call(siterubyver),
-                   'the directory for aux ruby libraries'),
-      PathItem.new('siterubyverarch', 'path', parameterize.call(siterubyverarch),
-                   'the directory for aux ruby binaries'),
-      PathItem.new('rbdir', 'path', '$siterubyver',
-                   'the directory for ruby scripts'),
-      PathItem.new('sodir', 'path', '$siterubyverarch',
-                   'the directory for ruby extentions'),
-      PathItem.new('rubypath', 'path', rubypath,
-                   'the path to set to #! line'),
-      ProgramItem.new('rubyprog', 'name', rubypath,
-                      'the ruby program using for installation'),
-      ProgramItem.new('makeprog', 'name', makeprog,
-                      'the make program to compile ruby extentions'),
-      SelectItem.new('shebang', 'all/ruby/never', 'ruby',
-                     'shebang line (#!) editing mode'),
-      BoolItem.new('without-ext', 'yes/no', 'no',
-                   'does not compile/install ruby extentions')
-    ]
-  end
-  private :standard_entries
-
-  def load_multipackage_entries
-    multipackage_entries().each do |ent|
-      add ent
-    end
-  end
-
-  def multipackage_entries
-    [
-      PackageSelectionItem.new('with', 'name,name...', '', 'ALL',
-                               'package names that you want to install'),
-      PackageSelectionItem.new('without', 'name,name...', '', 'NONE',
-                               'package names that you do not want to install')
-    ]
-  end
-  private :multipackage_entries
-
-  ALIASES = {
-    'std-ruby'         => 'librubyver',
-    'stdruby'          => 'librubyver',
-    'rubylibdir'       => 'librubyver',
-    'archdir'          => 'librubyverarch',
-    'site-ruby-common' => 'siteruby',     # For backward compatibility
-    'site-ruby'        => 'siterubyver',  # For backward compatibility
-    'bin-dir'          => 'bindir',
-    'bin-dir'          => 'bindir',
-    'rb-dir'           => 'rbdir',
-    'so-dir'           => 'sodir',
-    'data-dir'         => 'datadir',
-    'ruby-path'        => 'rubypath',
-    'ruby-prog'        => 'rubyprog',
-    'ruby'             => 'rubyprog',
-    'make-prog'        => 'makeprog',
-    'make'             => 'makeprog'
-  }
-
-  def fixup
-    ALIASES.each do |ali, name|
-      @table[ali] = @table[name]
-    end
-    @items.freeze
-    @table.freeze
-    @options_re = /\A--(#{@table.keys.join('|')})(?:=(.*))?\z/
-  end
-
-  def parse_opt(opt)
-    m = @options_re.match(opt) or setup_rb_error "config: unknown option #{opt}"
-    m.to_a[1,2]
-  end
-
-  def dllext
-    @rbconfig['DLEXT']
-  end
-
-  def value_config?(name)
-    lookup(name).value?
-  end
-
-  class Item
-    def initialize(name, template, default, desc)
-      @name = name.freeze
-      @template = template
-      @value = default
-      @default = default
-      @description = desc
-    end
-
-    attr_reader :name
-    attr_reader :description
-
-    attr_accessor :default
-    alias help_default default
-
-    def help_opt
-      "--#{@name}=#{@template}"
-    end
-
-    def value?
-      true
-    end
-
-    def value
-      @value
-    end
-
-    def resolve(table)
-      @value.gsub(%r<\$([^/]+)>) { table[$1] }
-    end
-
-    def set(val)
-      @value = check(val)
-    end
-
-    private
-
-    def check(val)
-      setup_rb_error "config: --#{name} requires argument" unless val
-      val
-    end
-  end
-
-  class BoolItem < Item
-    def config_type
-      'bool'
-    end
-
-    def help_opt
-      "--#{@name}"
-    end
-
-    private
-
-    def check(val)
-      return 'yes' unless val
-      case val
-      when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes'
-      when /\An(o)?\z/i, /\Af(alse)\z/i  then 'no'
-      else
-        setup_rb_error "config: --#{@name} accepts only yes/no for argument"
-      end
-    end
-  end
-
-  class PathItem < Item
-    def config_type
-      'path'
-    end
-
-    private
-
-    def check(path)
-      setup_rb_error "config: --#{@name} requires argument"  unless path
-      path[0,1] == '$' ? path : File.expand_path(path)
-    end
-  end
-
-  class ProgramItem < Item
-    def config_type
-      'program'
-    end
-  end
-
-  class SelectItem < Item
-    def initialize(name, selection, default, desc)
-      super
-      @ok = selection.split('/')
-    end
-
-    def config_type
-      'select'
-    end
-
-    private
-
-    def check(val)
-      unless @ok.include?(val.strip)
-        setup_rb_error "config: use --#{@name}=#{@template} (#{val})"
-      end
-      val.strip
-    end
-  end
-
-  class ExecItem < Item
-    def initialize(name, selection, desc, &block)
-      super name, selection, nil, desc
-      @ok = selection.split('/')
-      @action = block
-    end
-
-    def config_type
-      'exec'
-    end
-
-    def value?
-      false
-    end
-
-    def resolve(table)
-      setup_rb_error "$#{name()} wrongly used as option value"
-    end
-
-    undef set
-
-    def evaluate(val, table)
-      v = val.strip.downcase
-      unless @ok.include?(v)
-        setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})"
-      end
-      @action.call v, table
-    end
-  end
-
-  class PackageSelectionItem < Item
-    def initialize(name, template, default, help_default, desc)
-      super name, template, default, desc
-      @help_default = help_default
-    end
-
-    attr_reader :help_default
-
-    def config_type
-      'package'
-    end
-
-    private
-
-    def check(val)
-      unless File.dir?("packages/#{val}")
-        setup_rb_error "config: no such package: #{val}"
-      end
-      val
-    end
-  end
-
-  class MetaConfigEnvironment
-    def initialize(config, installer)
-      @config = config
-      @installer = installer
-    end
-
-    def config_names
-      @config.names
-    end
-
-    def config?(name)
-      @config.key?(name)
-    end
-
-    def bool_config?(name)
-      @config.lookup(name).config_type == 'bool'
-    end
-
-    def path_config?(name)
-      @config.lookup(name).config_type == 'path'
-    end
-
-    def value_config?(name)
-      @config.lookup(name).config_type != 'exec'
-    end
-
-    def add_config(item)
-      @config.add item
-    end
-
-    def add_bool_config(name, default, desc)
-      @config.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc)
-    end
-
-    def add_path_config(name, default, desc)
-      @config.add PathItem.new(name, 'path', default, desc)
-    end
-
-    def set_config_default(name, default)
-      @config.lookup(name).default = default
-    end
-
-    def remove_config(name)
-      @config.remove(name)
-    end
-
-    # For only multipackage
-    def packages
-      raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor' unless @installer
-      @installer.packages
-    end
-
-    # For only multipackage
-    def declare_packages(list)
-      raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor' unless @installer
-      @installer.packages = list
-    end
-  end
-
-end   # class ConfigTable
-
-
-# This module requires: #verbose?, #no_harm?
-module FileOperations
-
-  def mkdir_p(dirname, prefix = nil)
-    dirname = prefix + File.expand_path(dirname) if prefix
-    $stderr.puts "mkdir -p #{dirname}" if verbose?
-    return if no_harm?
-
-    # Does not check '/', it's too abnormal.
-    dirs = File.expand_path(dirname).split(%r<(?=/)>)
-    if /\A[a-z]:\z/i =~ dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless File.dir?(path)
-    end
-  end
-
-  def rm_f(path)
-    $stderr.puts "rm -f #{path}" if verbose?
-    return if no_harm?
-    force_remove_file path
-  end
-
-  def rm_rf(path)
-    $stderr.puts "rm -rf #{path}" if verbose?
-    return if no_harm?
-    remove_tree path
-  end
-
-  def remove_tree(path)
-    if File.symlink?(path)
-      remove_file path
-    elsif File.dir?(path)
-      remove_tree0 path
-    else
-      force_remove_file path
-    end
-  end
-
-  def remove_tree0(path)
-    Dir.foreach(path) do |ent|
-      next if ent == '.'
-      next if ent == '..'
-      entpath = "#{path}/#{ent}"
-      if File.symlink?(entpath)
-        remove_file entpath
-      elsif File.dir?(entpath)
-        remove_tree0 entpath
-      else
-        force_remove_file entpath
-      end
-    end
-    begin
-      Dir.rmdir path
-    rescue Errno::ENOTEMPTY
-      # directory may not be empty
-    end
-  end
-
-  def move_file(src, dest)
-    force_remove_file dest
-    begin
-      File.rename src, dest
-    rescue
-      File.open(dest, 'wb') {|f|
-        f.write File.binread(src)
-      }
-      File.chmod File.stat(src).mode, dest
-      File.unlink src
-    end
-  end
-
-  def force_remove_file(path)
-    begin
-      remove_file path
-    rescue
-    end
-  end
-
-  def remove_file(path)
-    File.chmod 0777, path
-    File.unlink path
-  end
-
-  def install(from, dest, mode, prefix = nil)
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix ? prefix + File.expand_path(dest) : dest
-    realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
-    str = File.binread(from)
-    if diff?(str, realdest)
-      verbose_off {
-        rm_f realdest if File.exist?(realdest)
-      }
-      File.open(realdest, 'wb') {|f|
-        f.write str
-      }
-      File.chmod mode, realdest
-
-      File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
-        if prefix
-          f.puts realdest.sub(prefix, '')
-        else
-          f.puts realdest
-        end
-      }
-    end
-  end
-
-  def diff?(new_content, path)
-    return true unless File.exist?(path)
-    new_content != File.binread(path)
-  end
-
-  def command(*args)
-    $stderr.puts args.join(' ') if verbose?
-    system(*args) or raise RuntimeError,
-        "system(#{args.map{|a| a.inspect }.join(' ')}) failed"
-  end
-
-  def ruby(*args)
-    command config('rubyprog'), *args
-  end
-  
-  def make(task = nil)
-    command(*[config('makeprog'), task].compact)
-  end
-
-  def extdir?(dir)
-    File.exist?("#{dir}/MANIFEST") or File.exist?("#{dir}/extconf.rb")
-  end
-
-  def files_of(dir)
-    Dir.open(dir) {|d|
-      return d.select {|ent| File.file?("#{dir}/#{ent}") }
-    }
-  end
-
-  DIR_REJECT = %w( . .. CVS SCCS RCS CVS.adm .svn )
-
-  def directories_of(dir)
-    Dir.open(dir) {|d|
-      return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT
-    }
-  end
-
-end
-
-
-# This module requires: #srcdir_root, #objdir_root, #relpath
-module HookScriptAPI
-
-  def get_config(key)
-    @config[key]
-  end
-
-  alias config get_config
-
-  # obsolete: use metaconfig to change configuration
-  def set_config(key, val)
-    @config[key] = val
-  end
-
-  #
-  # srcdir/objdir (works only in the package directory)
-  #
-
-  def curr_srcdir
-    "#{srcdir_root()}/#{relpath()}"
-  end
-
-  def curr_objdir
-    "#{objdir_root()}/#{relpath()}"
-  end
-
-  def srcfile(path)
-    "#{curr_srcdir()}/#{path}"
-  end
-
-  def srcexist?(path)
-    File.exist?(srcfile(path))
-  end
-
-  def srcdirectory?(path)
-    File.dir?(srcfile(path))
-  end
-  
-  def srcfile?(path)
-    File.file?(srcfile(path))
-  end
-
-  def srcentries(path = '.')
-    Dir.open("#{curr_srcdir()}/#{path}") {|d|
-      return d.to_a - %w(. ..)
-    }
-  end
-
-  def srcfiles(path = '.')
-    srcentries(path).select {|fname|
-      File.file?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-  def srcdirectories(path = '.')
-    srcentries(path).select {|fname|
-      File.dir?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-end
-
-
-class ToplevelInstaller
-
-  Version   = '3.4.1'
-  Copyright = 'Copyright (c) 2000-2005 Minero Aoki'
-
-  TASKS = [
-    [ 'all',      'do config, setup, then install' ],
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles ruby extentions and others' ],
-    [ 'install',  'installs files' ],
-    [ 'test',     'run all tests in test/' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-  def ToplevelInstaller.invoke
-    config = ConfigTable.new(load_rbconfig())
-    config.load_standard_entries
-    config.load_multipackage_entries if multipackage?
-    config.fixup
-    klass = (multipackage?() ? ToplevelInstallerMulti : ToplevelInstaller)
-    klass.new(File.dirname($0), config).invoke
-  end
-
-  def ToplevelInstaller.multipackage?
-    File.dir?(File.dirname($0) + '/packages')
-  end
-
-  def ToplevelInstaller.load_rbconfig
-    if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg }
-      ARGV.delete(arg)
-      load File.expand_path(arg.split(/=/, 2)[1])
-      $".push 'rbconfig.rb'
-    else
-      require 'rbconfig'
-    end
-    ::Config::CONFIG
-  end
-
-  def initialize(ardir_root, config)
-    @ardir = File.expand_path(ardir_root)
-    @config = config
-    # cache
-    @valid_task_re = nil
-  end
-
-  def config(key)
-    @config[key]
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__()}>"
-  end
-
-  def invoke
-    run_metaconfigs
-    case task = parsearg_global()
-    when nil, 'all'
-      parsearg_config
-      init_installers
-      exec_config
-      exec_setup
-      exec_install
-    else
-      case task
-      when 'config', 'test'
-        ;
-      when 'clean', 'distclean'
-        @config.load_savefile if File.exist?(@config.savefile)
-      else
-        @config.load_savefile
-      end
-      __send__ "parsearg_#{task}"
-      init_installers
-      __send__ "exec_#{task}"
-    end
-  end
-  
-  def run_metaconfigs
-    @config.load_script "#{@ardir}/metaconfig"
-  end
-
-  def init_installers
-    @installer = Installer.new(@config, @ardir, File.expand_path('.'))
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @ardir
-  end
-
-  def objdir_root
-    '.'
-  end
-
-  def relpath
-    '.'
-  end
-
-  #
-  # Option Parsing
-  #
-
-  def parsearg_global
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        setup_rb_error "invalid task: #{arg}" unless valid_task?(arg)
-        return arg
-      when '-q', '--quiet'
-        @config.verbose = false
-      when '--verbose'
-        @config.verbose = true
-      when '--help'
-        print_usage $stdout
-        exit 0
-      when '--version'
-        puts "#{File.basename($0)} version #{Version}"
-        exit 0
-      when '--copyright'
-        puts Copyright
-        exit 0
-      else
-        setup_rb_error "unknown global option '#{arg}'"
-      end
-    end
-    nil
-  end
-
-  def valid_task?(t)
-    valid_task_re() =~ t
-  end
-
-  def valid_task_re
-    @valid_task_re ||= /\A(?:#{TASKS.map {|task,desc| task }.join('|')})\z/
-  end
-
-  def parsearg_no_options
-    unless ARGV.empty?
-      task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1)
-      setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}"
-    end
-  end
-
-  alias parsearg_show       parsearg_no_options
-  alias parsearg_setup      parsearg_no_options
-  alias parsearg_test       parsearg_no_options
-  alias parsearg_clean      parsearg_no_options
-  alias parsearg_distclean  parsearg_no_options
-
-  def parsearg_config
-    evalopt = []
-    set = []
-    @config.config_opt = []
-    while i = ARGV.shift
-      if /\A--?\z/ =~ i
-        @config.config_opt = ARGV.dup
-        break
-      end
-      name, value = *@config.parse_opt(i)
-      if @config.value_config?(name)
-        @config[name] = value
-      else
-        evalopt.push [name, value]
-      end
-      set.push name
-    end
-    evalopt.each do |name, value|
-      @config.lookup(name).evaluate value, @config
-    end
-    # Check if configuration is valid
-    set.each do |n|
-      @config[n] if @config.value_config?(n)
-    end
-  end
-
-  def parsearg_install
-    @config.no_harm = false
-    @config.install_prefix = ''
-    while a = ARGV.shift
-      case a
-      when '--no-harm'
-        @config.no_harm = true
-      when /\A--prefix=/
-        path = a.split(/=/, 2)[1]
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @config.install_prefix = path
-      else
-        setup_rb_error "install: unknown option #{a}"
-      end
-    end
-  end
-
-  def print_usage(out)
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-24s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '   --help',    'print this message'
-    out.printf fmt, '   --version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf fmt, name, desc
-    end
-
-    fmt = "  %-24s %s [%s]\n"
-    out.puts
-    out.puts 'Options for CONFIG or ALL:'
-    @config.each do |item|
-      out.printf fmt, item.help_opt, item.description, item.help_default
-    end
-    out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's"
-    out.puts
-    out.puts 'Options for INSTALL:'
-    out.printf fmt, '--no-harm', 'only display what to do if given', 'off'
-    out.printf fmt, '--prefix=path',  'install path prefix', ''
-    out.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    @installer.exec_config
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    @installer.exec_setup
-  end
-
-  def exec_install
-    @installer.exec_install
-  end
-
-  def exec_test
-    @installer.exec_test
-  end
-
-  def exec_show
-    @config.each do |i|
-      printf "%-20s %s\n", i.name, i.value if i.value?
-    end
-  end
-
-  def exec_clean
-    @installer.exec_clean
-  end
-
-  def exec_distclean
-    @installer.exec_distclean
-  end
-
-end   # class ToplevelInstaller
-
-
-class ToplevelInstallerMulti < ToplevelInstaller
-
-  include FileOperations
-
-  def initialize(ardir_root, config)
-    super
-    @packages = directories_of("#{@ardir}/packages")
-    raise 'no package exists' if @packages.empty?
-    @root_installer = Installer.new(@config, @ardir, File.expand_path('.'))
-  end
-
-  def run_metaconfigs
-    @config.load_script "#{@ardir}/metaconfig", self
-    @packages.each do |name|
-      @config.load_script "#{@ardir}/packages/#{name}/metaconfig"
-    end
-  end
-
-  attr_reader :packages
-
-  def packages=(list)
-    raise 'package list is empty' if list.empty?
-    list.each do |name|
-      raise "directory packages/#{name} does not exist"\
-              unless File.dir?("#{@ardir}/packages/#{name}")
-    end
-    @packages = list
-  end
-
-  def init_installers
-    @installers = {}
-    @packages.each do |pack|
-      @installers[pack] = Installer.new(@config,
-                                       "#{@ardir}/packages/#{pack}",
-                                       "packages/#{pack}")
-    end
-    with    = extract_selection(config('with'))
-    without = extract_selection(config('without'))
-    @selected = @installers.keys.select {|name|
-                  (with.empty? or with.include?(name)) \
-                      and not without.include?(name)
-                }
-  end
-
-  def extract_selection(list)
-    a = list.split(/,/)
-    a.each do |name|
-      setup_rb_error "no such package: #{name}"  unless @installers.key?(name)
-    end
-    a
-  end
-
-  def print_usage(f)
-    super
-    f.puts 'Inluded packages:'
-    f.puts '  ' + @packages.sort.join(' ')
-    f.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    run_hook 'pre-config'
-    each_selected_installers {|inst| inst.exec_config }
-    run_hook 'post-config'
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    run_hook 'pre-setup'
-    each_selected_installers {|inst| inst.exec_setup }
-    run_hook 'post-setup'
-  end
-
-  def exec_install
-    run_hook 'pre-install'
-    each_selected_installers {|inst| inst.exec_install }
-    run_hook 'post-install'
-  end
-
-  def exec_test
-    run_hook 'pre-test'
-    each_selected_installers {|inst| inst.exec_test }
-    run_hook 'post-test'
-  end
-
-  def exec_clean
-    rm_f @config.savefile
-    run_hook 'pre-clean'
-    each_selected_installers {|inst| inst.exec_clean }
-    run_hook 'post-clean'
-  end
-
-  def exec_distclean
-    rm_f @config.savefile
-    run_hook 'pre-distclean'
-    each_selected_installers {|inst| inst.exec_distclean }
-    run_hook 'post-distclean'
-  end
-
-  #
-  # lib
-  #
-
-  def each_selected_installers
-    Dir.mkdir 'packages' unless File.dir?('packages')
-    @selected.each do |pack|
-      $stderr.puts "Processing the package `#{pack}' ..." if verbose?
-      Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
-      Dir.chdir "packages/#{pack}"
-      yield @installers[pack]
-      Dir.chdir '../..'
-    end
-  end
-
-  def run_hook(id)
-    @root_installer.run_hook id
-  end
-
-  # module FileOperations requires this
-  def verbose?
-    @config.verbose?
-  end
-
-  # module FileOperations requires this
-  def no_harm?
-    @config.no_harm?
-  end
-
-end   # class ToplevelInstallerMulti
-
-
-class Installer
-
-  FILETYPES = %w( bin lib ext data conf man )
-
-  include FileOperations
-  include HookScriptAPI
-
-  def initialize(config, srcroot, objroot)
-    @config = config
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{File.basename(@srcdir)}>"
-  end
-
-  def noop(rel)
-  end
-
-  #
-  # Hook Script API base methods
-  #
-
-  def srcdir_root
-    @srcdir
-  end
-
-  def objdir_root
-    @objdir
-  end
-
-  def relpath
-    @currdir
-  end
-
-  #
-  # Config Access
-  #
-
-  # module FileOperations requires this
-  def verbose?
-    @config.verbose?
-  end
-
-  # module FileOperations requires this
-  def no_harm?
-    @config.no_harm?
-  end
-
-  def verbose_off
-    begin
-      save, @config.verbose = @config.verbose?, false
-      yield
-    ensure
-      @config.verbose = save
-    end
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  alias config_dir_bin noop
-  alias config_dir_lib noop
-
-  def config_dir_ext(rel)
-    extconf if extdir?(curr_srcdir())
-  end
-
-  alias config_dir_data noop
-  alias config_dir_conf noop
-  alias config_dir_man noop
-
-  def extconf
-    ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin(rel)
-    files_of(curr_srcdir()).each do |fname|
-      update_shebang_line "#{curr_srcdir()}/#{fname}"
-    end
-  end
-
-  alias setup_dir_lib noop
-
-  def setup_dir_ext(rel)
-    make if extdir?(curr_srcdir())
-  end
-
-  alias setup_dir_data noop
-  alias setup_dir_conf noop
-  alias setup_dir_man noop
-
-  def update_shebang_line(path)
-    return if no_harm?
-    return if config('shebang') == 'never'
-    old = Shebang.load(path)
-    if old
-      $stderr.puts "warning: #{path}: Shebang line includes too many args.  It is not portable and your program may not work." if old.args.size > 1
-      new = new_shebang(old)
-      return if new.to_s == old.to_s
-    else
-      return unless config('shebang') == 'all'
-      new = Shebang.new(config('rubypath'))
-    end
-    $stderr.puts "updating shebang: #{File.basename(path)}" if verbose?
-    open_atomic_writer(path) {|output|
-      File.open(path, 'rb') {|f|
-        f.gets if old   # discard
-        output.puts new.to_s
-        output.print f.read
-      }
-    }
-  end
-
-  def new_shebang(old)
-    if /\Aruby/ =~ File.basename(old.cmd)
-      Shebang.new(config('rubypath'), old.args)
-    elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby'
-      Shebang.new(config('rubypath'), old.args[1..-1])
-    else
-      return old unless config('shebang') == 'all'
-      Shebang.new(config('rubypath'))
-    end
-  end
-
-  def open_atomic_writer(path, &block)
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(tmpfile, 'wb', &block)
-      File.rename tmpfile, File.basename(path)
-    ensure
-      File.unlink tmpfile if File.exist?(tmpfile)
-    end
-  end
-
-  class Shebang
-    def Shebang.load(path)
-      line = nil
-      File.open(path) {|f|
-        line = f.gets
-      }
-      return nil unless /\A#!/ =~ line
-      parse(line)
-    end
-
-    def Shebang.parse(line)
-      cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ')
-      new(cmd, args)
-    end
-
-    def initialize(cmd, args = [])
-      @cmd = cmd
-      @args = args
-    end
-
-    attr_reader :cmd
-    attr_reader :args
-
-    def to_s
-      "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}")
-    end
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    rm_f 'InstalledFiles'
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin(rel)
-    install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755
-  end
-
-  def install_dir_lib(rel)
-    install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644
-  end
-
-  def install_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    install_files rubyextentions('.'),
-                  "#{config('sodir')}/#{File.dirname(rel)}",
-                  0555
-  end
-
-  def install_dir_data(rel)
-    install_files targetfiles(), "#{config('datadir')}/#{rel}", 0644
-  end
-
-  def install_dir_conf(rel)
-    # FIXME: should not remove current config files
-    # (rename previous file to .old/.org)
-    install_files targetfiles(), "#{config('sysconfdir')}/#{rel}", 0644
-  end
-
-  def install_dir_man(rel)
-    install_files targetfiles(), "#{config('mandir')}/#{rel}", 0644
-  end
-
-  def install_files(list, dest, mode)
-    mkdir_p dest, @config.install_prefix
-    list.each do |fname|
-      install fname, dest, mode, @config.install_prefix
-    end
-  end
-
-  def libfiles
-    glob_reject(%w(*.y *.output), targetfiles())
-  end
-
-  def rubyextentions(dir)
-    ents = glob_select("*.#{@config.dllext}", targetfiles())
-    if ents.empty?
-      setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first"
-    end
-    ents
-  end
-
-  def targetfiles
-    mapdir(existfiles() - hookfiles())
-  end
-
-  def mapdir(ents)
-    ents.map {|ent|
-      if File.exist?(ent)
-      then ent                         # objdir
-      else "#{curr_srcdir()}/#{ent}"   # srcdir
-      end
-    }
-  end
-
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  JUNK_FILES = %w( 
-    core RCSLOG tags TAGS .make.state
-    .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
-    *~ *.old *.bak *.BAK *.orig *.rej _$* *$
-
-    *.org *.in .*
-  )
-
-  def existfiles
-    glob_reject(JUNK_FILES, (files_of(curr_srcdir()) | files_of('.')))
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-      %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def glob_select(pat, ents)
-    re = globs2re([pat])
-    ents.select {|ent| re =~ ent }
-  end
-
-  def glob_reject(pats, ents)
-    re = globs2re(pats)
-    ents.reject {|ent| re =~ ent }
-  end
-
-  GLOB2REGEX = {
-    '.' => '\.',
-    '$' => '\$',
-    '#' => '\#',
-    '*' => '.*'
-  }
-
-  def globs2re(pats)
-    /\A(?:#{
-      pats.map {|pat| pat.gsub(/[\.\$\#\*]/) {|ch| GLOB2REGEX[ch] } }.join('|')
-    })\z/
-  end
-
-  #
-  # TASK test
-  #
-
-  TESTDIR = 'test'
-
-  def exec_test
-    unless File.directory?('test')
-      $stderr.puts 'no test in this package' if verbose?
-      return
-    end
-    $stderr.puts 'Running tests...' if verbose?
-    begin
-      require 'test/unit'
-    rescue LoadError
-      setup_rb_error 'test/unit cannot loaded.  You need Ruby 1.8 or later to invoke this task.'
-    end
-    runner = Test::Unit::AutoRunner.new(true)
-    runner.to_run << TESTDIR
-    runner.run
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f @config.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  alias clean_dir_bin noop
-  alias clean_dir_lib noop
-  alias clean_dir_data noop
-  alias clean_dir_conf noop
-  alias clean_dir_man noop
-
-  def clean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'clean' if File.file?('Makefile')
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f @config.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  alias distclean_dir_bin noop
-  alias distclean_dir_lib noop
-
-  def distclean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'distclean' if File.file?('Makefile')
-  end
-
-  alias distclean_dir_data noop
-  alias distclean_dir_conf noop
-  alias distclean_dir_man noop
-
-  #
-  # Traversing
-  #
-
-  def exec_task_traverse(task)
-    run_hook "pre-#{task}"
-    FILETYPES.each do |type|
-      if type == 'ext' and config('without-ext') == 'yes'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, "#{task}_dir_#{type}"
-    end
-    run_hook "post-#{task}"
-  end
-
-  def traverse(task, rel, mid)
-    dive_into(rel) {
-      run_hook "pre-#{task}"
-      __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-      directories_of(curr_srcdir()).each do |d|
-        traverse task, "#{rel}/#{d}", mid
-      end
-      run_hook "post-#{task}"
-    }
-  end
-
-  def dive_into(rel)
-    return unless File.dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless File.dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-  def run_hook(id)
-    path = [ "#{curr_srcdir()}/#{id}",
-             "#{curr_srcdir()}/#{id}.rb" ].detect {|cand| File.file?(cand) }
-    return unless path
-    begin
-      instance_eval File.read(path), path, 1
-    rescue
-      raise if $DEBUG
-      setup_rb_error "hook #{path} failed:\n" + $!.message
-    end
-  end
-
-end   # class Installer
-
-
-class SetupError < StandardError; end
-
-def setup_rb_error(msg)
-  raise SetupError, msg
-end
-
-if $0 == __FILE__
-  begin
-    ToplevelInstaller.invoke
-  rescue SetupError
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_all.rb b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_all.rb
deleted file mode 100644
index 3dbd90e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_all.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require 'test/unit'
-$:.unshift File.expand_path( File.dirname( __FILE__ ) )
-require 'test_mutex'
-require 'test_condvar'
-require 'test_queue'
-
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_condvar.rb b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_condvar.rb
deleted file mode 100644
index 3b6b948..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_condvar.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-require 'test/unit'
-require 'thread'
-if RUBY_PLATFORM != "java"
-  $:.unshift File.expand_path( File.join( File.dirname( __FILE__ ), "../ext/fastthread" ) )
-  require 'fastthread'
-end
-
-class TestCondVar < Test::Unit::TestCase
-  def test_signal
-    s = ""
-    m = Mutex.new
-    cv = ConditionVariable.new
-    ready = false
-
-    t = Thread.new do
-      nil until ( Thread.pass ; m.synchronize { ready } )
-      m.synchronize { s << "b" }
-      cv.signal
-    end
-
-    m.synchronize do
-      s << "a"
-      ready = true
-      cv.wait m
-      assert m.locked?
-      s << "c"
-    end
-
-    t.join
-
-    assert_equal "abc", s
-  end
-end 
-
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_mutex.rb b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_mutex.rb
deleted file mode 100644
index 1793c6d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_mutex.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-require 'test/unit'
-require 'thread'
-if RUBY_PLATFORM != "java"
-  $:.unshift File.expand_path( File.join( File.dirname( __FILE__ ), "../ext/fastthread" ) )
-  require 'fastthread'
-end
-
-class TestMutex < Test::Unit::TestCase
-  def self.mutex_test( name, &body )
-    define_method( "test_#{ name }" ) do
-      body.call( self, Mutex.new, "" )
-    end
-    # at one time we also tested Mutex_m here, but it's no longer
-    # part of fastthread
-  end
-
-  mutex_test( :locked_p ) do |test, m, prefix|
-    test.instance_eval do
-      assert_equal false, m.send( "#{ prefix }locked?" )
-      m.send "#{ prefix }lock"
-      assert_equal true, m.send( "#{ prefix }locked?" )
-      m.send "#{ prefix }unlock"
-      assert_equal false, m.send( "#{ prefix }locked?" )
-    end
-  end
-
-  mutex_test( :synchronize ) do |test, m, prefix|
-    test.instance_eval do
-      assert !m.send( "#{ prefix }locked?" )
-      m.send "#{ prefix }synchronize" do
-        assert m.send( "#{ prefix }locked?" )
-      end
-      assert !m.send( "#{ prefix }locked?" )
-    end
-  end
-
-  mutex_test( :synchronize_exception ) do |test, m, prefix|
-    test.instance_eval do
-      assert !m.send( "#{ prefix }locked?" )
-      assert_raise ArgumentError do
-        m.send "#{ prefix }synchronize" do
-          assert m.send( "#{ prefix }locked?" )
-          raise ArgumentError
-        end
-      end
-      assert !m.send( "#{ prefix }locked?" )
-    end
-  end
-
-  mutex_test( :mutual_exclusion ) do |test, m, prefix|
-    test.instance_eval do
-      s = ""
-
-      ("a".."c").map do |c|
-        Thread.new do
-          Thread.pass
-          5.times do
-            m.send "#{ prefix }synchronize" do
-              s << c
-              Thread.pass
-              s << c
-            end
-          end
-        end
-      end.each do |thread|
-        thread.join
-      end
-
-      assert_equal 30, s.length
-      assert s.match( /^(aa|bb|cc)+$/ )
-    end
-  end
-end 
-
diff --git a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_queue.rb b/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_queue.rb
deleted file mode 100644
index 70a2c86..0000000
--- a/spec10/public/webrat/test_app/gems/gems/fastthread-1.0.1/test/test_queue.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-require 'test/unit'
-require 'thread'
-if RUBY_PLATFORM != "java"
-  $:.unshift File.expand_path( File.join( File.dirname( __FILE__ ), "../ext/fastthread" ) )
-  require 'fastthread'
-end
-
-class TestQueue < Test::Unit::TestCase
-  def check_sequence( q )
-    range = "a".."f"
-
-    s = ""
-    e = nil
-
-    t = Thread.new do
-      begin
-        for c in range
-          q.push c
-          s << c
-          Thread.pass
-        end
-      rescue Exception => e
-      end
-    end
-
-    for c in range
-      unless t.alive?
-        raise e if e
-        assert_equal range.to_a.join, s, "expected all values pushed"
-      end
-      x = q.shift
-      assert_equal c, x, "sequence error: expected #{ c } but got #{ x }"
-    end
-  end
-
-  def test_queue
-    check_sequence( Queue.new )
-  end
-
-  def test_sized_queue_full
-    check_sequence( SizedQueue.new( 6 ) )
-  end
-
-  def test_sized_queue_half
-    check_sequence( SizedQueue.new( 3 ) )
-  end
-
-  def test_sized_queue_one
-    check_sequence( SizedQueue.new( 1 ) )
-  end
-
-  def check_serialization( k, *args )
-    q1 = k.new *args
-    %w(a b c d e f).each { |c| q1.push c }
-    q2 = Marshal.load(Marshal.dump(q1))
-    assert( ( q1.size == q2.size ), "queues are same size" )
-    q1.size.times do
-      assert( ( q1.pop == q2.pop ), "same data" )
-    end
-    [ q1, q2 ]
-  end
-
-  def test_queue_serialization
-    check_serialization Queue
-  end
-
-  def test_sized_queue_serialization
-    (q1, q2) = check_serialization SizedQueue, 20
-    assert( ( q1.max == q2.max ), "maximum sizes equal" )
-  end
-
-  def test_sized_queue_size
-    q = SizedQueue.new 3
-    assert_equal 3, q.max, "queue has expected max (3)"
-    q.max = 5
-    assert_equal 5, q.max, "queue has expected max (5)"
-  end
-end 
-
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/CHANGELOG b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/CHANGELOG
deleted file mode 100644
index 7e1103d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/CHANGELOG
+++ /dev/null
@@ -1,2 +0,0 @@
-
-v0.2.3. Signed gem.
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/COPYING b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/COPYING
deleted file mode 100644
index b1e3f5a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/COPYING
+++ /dev/null
@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/LICENSE b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/LICENSE
deleted file mode 100644
index 0a9aa0d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/LICENSE
+++ /dev/null
@@ -1,55 +0,0 @@
-GemPlugin is copyrighted free software by Zed A. Shaw
-<zedshaw at zedshaw dot com> You can redistribute it and/or modify it under
-either the terms of the GPL or the conditions below:
-
-1. You may make and give away verbatim copies of the source form of the
-   software without restriction, provided that you duplicate all of the
-   original copyright notices and associated disclaimers.
-
-2. You may modify your copy of the software in any way, provided that
-   you do at least ONE of the following:
-
-     a) place your modifications in the Public Domain or otherwise make them
-     Freely Available, such as by posting said modifications to Usenet or an
-     equivalent medium, or by allowing the author to include your
-     modifications in the software.
-
-     b) use the modified software only within your corporation or
-        organization.
-
-     c) rename any non-standard executables so the names do not conflict with
-     standard executables, which must also be provided.
-
-     d) make other distribution arrangements with the author.
-
-3. You may distribute the software in object code or executable
-   form, provided that you do at least ONE of the following:
-
-     a) distribute the executables and library files of the software,
-     together with instructions (in the manual page or equivalent) on where
-     to get the original distribution.
-
-     b) accompany the distribution with the machine-readable source of the
-     software.
-
-     c) give non-standard executables non-standard names, with
-        instructions on where to get the original software distribution.
-
-     d) make other distribution arrangements with the author.
-
-4. You may modify and include the part of the software into any other
-   software (possibly commercial).  But some files in the distribution
-   are not written by the author, so that they are not under this terms.
-
-5. The scripts and library files supplied as input to or produced as 
-   output from the software do not automatically fall under the
-   copyright of the software, but belong to whomever generated them, 
-   and may be sold commercially, and may be aggregated with this
-   software.
-
-6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-   PURPOSE.
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/Manifest b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/Manifest
deleted file mode 100644
index f669084..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/Manifest
+++ /dev/null
@@ -1,15 +0,0 @@
-test/test_plugins.rb
-setup.rb
-resources/resources/defaults.yaml
-resources/README
-resources/Rakefile
-resources/LICENSE
-resources/lib/project/init.rb
-resources/COPYING
-README
-Manifest
-LICENSE
-lib/gem_plugin.rb
-COPYING
-CHANGELOG
-bin/gpgen
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/README b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/README
deleted file mode 100644
index b4c87f7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/README
+++ /dev/null
@@ -1,115 +0,0 @@
-= GemPlugin:  Gem Based Plugin System
-
-GemPlugin is a system that lets your users install gems and lets you load
-them as additional features to use in your software.  It originated from the
-Mongrel (http://mongrel.rubyforge.org) project but proved useful enough to
-break out into a separate project.
-
-GemPlugin works by listing the gems installed, and doing a require_gem on 
-any that have the right dependencies.  For example, if a gem depends on
-"gem_plugin" and "mongrel" then it'll load as a Mongrel plugin.  This
-makes it so that users of the plugins only need to gem install (and maybe
-config a bit), and plugin authors only need to make gems.
-
-
-== Implementers
-
-To use GemPlugin in your system you only have to require 'gem_plugin' and 
-then use the GemPlugin::Manager.create, GemPlugin::Manager.load, and 
-GemPlugin::Manager.available methods to work with them.
-
-* GemPlugin::Manager.load -- Takes a "depend include/exclude map" and loads plugins based on it.
-* GemPlugin::Manager.create -- Takes a URI style name and some options then creates one for you.
-* GemPlugin::Manager.available -- Lets you inspect and mess with the internal plugin registry.
-
-=== Loading Plugins
-
-As an example from Mongrel it's necessary to load plugins that depend on rails after 
-the Rails system is configured, but load other plugins right when Mongrel is ready.
-To do this we very first do:
-
- GemPlugin::Manager.instance.load "mongrel" => GemPlugin::INCLUDE, "rails" => GemPlugin::EXCLUDE
-
-Later, when it's ready to load Rails plugins as well we do this:
-
- GemPlugin::Manager.instance.load "mongrel" => GemPlugin::INCLUDE
-
-This simply loads any plugins that remain and are ready for use in Rails.
-
-=== Creating Plugins
-
-Creating a plugin is cake:
-
- plug = GemPlugin::Manager.instance.create("/commands/snazzy", "something" => "yeah")
-
-In this case we're making the snazzy command and passing a couple fake options.
-
-=== Finding Available Plugins
-
-Finding plugins is also very easy, you just call GemPlugin::Manager.instance.available
-and you get a Hash that maps categories to name => class.  For example, if I had
-the "/commands/snazzy" plugin registered above, then I'd get the following:
-
- puts GemPlugin::Manager.instance.available["/commands"].inspect
- -> { "/snazzy" => Snazzy}
-
-
-=== Plugins Inside Modules
-
-Plugins that are placed in modules are also lowercased when registered but
-still retain their module.  So, if Snazzy was actually MyModule::Snazzy, then
-it'd be registered as "/commands/mymodule::snazzy".
-
-
-== Plugin Authors
-
-People who wish to write gem plugins have a faily easy time of it, but need
-to know the particular rules for the target system.  To keep this example
-concrete we'll assume you want to write a Mongrel command plugin.
-
-First thing is create your project like normal and setup Rake to make
-your gem.  Your plugin then needs to be created like so:
-
- class Snazzy < GemPlugin::Plugin "/commands"
-    ...
- end
-
-And place this code in a file you will have RubyGems autorequire (I use lib/init.rb).
-
-Next you need to add the following to whatever Rakefile code you use to create
-your gem:
-
- spec.add_dependency('gem_plugin', '>= 0.1')
- spec.add_dependency('mongrel', '>= 0.3.9')
- spec.autorequire = 'init.rb'
-
-This does three things:
-
-* Tells GemPlugins::Manager.load that this is a GemPlugin.
-* Tells Mongrel that this is a Mongrel specific GemPlugin.
-* Tells RubyGems to run init.rb when the gem is required, just hooking up your plugin.
-
-Now, all the users of your plugin have to do is gem install it and then
-they get the plugin automagically.
-
-People writing GemPlugins for other systems would have to check the 
-documentation from that project to get an idea of what extra 
-requirements might be needed.  For example, you'd probably have to
-depend on another project other that *mongrel* and most likely have
-a few more things to configure in your init.rb.
-
-== Plugin Users
-
-Plugin users have it the easiest of all.  They simply do:
-
- gem install mongrel_command_snazzy
-
-And that's it.  When they run mongrel_rails (given the above example)
-this snazzy command get loaded automatically without any intervention.
-
-The only thing missing in this release is a way for end users to configure
-such a plugin.  I really think this is the job of the implementers to define.
-
-== Contact
-
-E-mail zedshaw at zedshaw.com and I'll help.  Comments about the API are welcome.
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/bin/gpgen b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/bin/gpgen
deleted file mode 100755
index db77bfd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/bin/gpgen
+++ /dev/null
@@ -1,60 +0,0 @@
-require 'erb'
-require 'fileutils'
-include FileUtils
-
-if ARGV.length != 1
-  STDERR.puts "ERROR: You must give a name for your plugin and directory."
-  STDERR.puts "usage:  gpgen name"
-  STDERR.puts "example:  gpgen mygemplugin"
-  exit 1
-end
-
-# setup the required binding variables for erb processing later
-project = ARGV.shift
-gem_plugin_base = File.expand_path(File.join(File.dirname(__FILE__), ".."))
-resources = File.join(gem_plugin_base, "resources")
-gem_plugin_version = gem_plugin_base[gem_plugin_base.rindex("-")+1 .. -1]
-
-
-# make the dir if it don't exist
-if not File.exist? project
-  puts "Creating directory #{project}"
-  mkdir project
-else
-  puts "Directory #{project} exists, skipping."
-end 
-
-
-# go through all the resource files, erb them, and write them verbatim to output
-# do not overwrite if exists already
-
-Dir.glob("#{resources}/**/*") do |infile|
-  outfile = File.join(project, infile[resources.length .. -1])
-  if File.exist? outfile
-    puts "File #{outfile} exists, skipping."
-  else
-    if File.directory? infile
-      puts "Creating directory #{outfile}"
-      mkdir_p outfile
-    elsif File.file? infile
-      puts "Creating file #{outfile}"
-      open(infile) do |content|
-        template = ERB.new(content.read)
-        open(outfile,"w") {|f| f.write(template.result(binding)) }
-      end
-    else
-      puts "!!! Resources contains something not a file or directory."
-      puts "Skipping #{infile}."
-    end
-  end
-end
-
-# Finally, move the base init.rb to the right dir 
-init_file = File.join(project,"lib",project)
-if File.exist? init_file
-  puts "File init.rb already exists, skipping."
-  puts "WARNING:  There might be a junk '#{project}/lib/project/init.rb' file you can delete."
-else
-  puts "Creating proper '#{project}/lib/#{project}/init.rb' file"
-  mv File.join(project,"lib","project"), init_file
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/gem_plugin.gemspec b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/gem_plugin.gemspec
deleted file mode 100644
index b5eb429..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/gem_plugin.gemspec
+++ /dev/null
@@ -1,53 +0,0 @@
-
-# Gem::Specification for Gem_plugin-0.2.3
-# Originally generated by Echoe
-
-Gem::Specification.new do |s|
-  s.name = %q{gem_plugin}
-  s.version = "0.2.3"
-
-  s.specification_version = 2 if s.respond_to? :specification_version=
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Zed A. Shaw"]
-  s.date = %q{2007-10-26}
-  s.default_executable = %q{gpgen}
-  s.description = %q{A plugin system based on rubygems that uses dependencies only}
-  s.email = %q{}
-  s.executables = ["gpgen"]
-  s.files = ["test/test_plugins.rb", "setup.rb", "resources/resources/defaults.yaml", "resources/README", "resources/Rakefile", "resources/LICENSE", "resources/lib/project/init.rb", "resources/COPYING", "README", "Manifest", "LICENSE", "lib/gem_plugin.rb", "COPYING", "CHANGELOG", "bin/gpgen", "gem_plugin.gemspec"]
-  s.has_rdoc = true
-  s.homepage = %q{}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{mongrel}
-  s.rubygems_version = %q{0.9.4.6}
-  s.summary = %q{A plugin system based on rubygems that uses dependencies only}
-  s.test_files = ["test/test_plugins.rb"]
-end
-
-
-# # Original Rakefile source (requires the Echoe gem):
-# 
-# 
-# require 'echoe'
-# 
-# Echoe.new("gem_plugin") do |p|
-#   p.author="Zed A. Shaw"
-#   p.project = "mongrel"
-#   p.summary = "A plugin system based on rubygems that uses dependencies only"
-# 
-#   p.need_tar_gz = false
-#   p.need_tgz = true
-#   p.require_signed = true
-#   
-#   p.test_pattern = "test/test_plugins.rb"
-#   p.clean_pattern += ["pkg", "lib/*.bundle", "*.gem", ".config"]
-#   p.rdoc_pattern = ['README', 'LICENSE', 'COPYING', 'lib/**/*.rb', 'doc/**/*.rdoc']
-# end
-# 
-# # The default Echoe rdoc location should be good enough, but it's not what we currently use.
-# # It would be: rubyforge.org:/var/www/gforge-projects/mongrel/gem_plugin/
-# #
-# # task :site => [:redocs] do
-# #   sh %{ rsync -r doc/* rubyforge.org:/var/www/gforge-projects/mongrel/gem_plugin_rdoc/ }
-# # end
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/lib/gem_plugin.rb b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/lib/gem_plugin.rb
deleted file mode 100644
index 1996a61..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/lib/gem_plugin.rb
+++ /dev/null
@@ -1,291 +0,0 @@
-require 'singleton'
-require 'rubygems'
-
-# Implements a dynamic plugin loading, configuration, and discovery system
-# based on RubyGems and a simple additional name space that looks like a URI.
-#
-# A plugin is created and put into a category with the following code:
-#
-#  class MyThing < GemPlugin::Plugin "/things"
-#    ...
-#  end
-# 
-# What this does is sets up your MyThing in the plugin registry via GemPlugin::Manager.
-# You can then later get this plugin with GemPlugin::Manager.create("/things/mything")
-# and can also pass in options as a second parameter.
-#
-# This isn't such a big deal, but the power is really from the GemPlugin::Manager.load
-# method.  This method will go through the installed gems and require_gem any
-# that depend on the gem_plugin RubyGem.  You can arbitrarily include or exclude
-# gems based on what they also depend on, thus letting you load these gems when appropriate.
-#
-# Since this system was written originally for the Mongrel project that'll be the
-# best example of using it.
-#
-# Imagine you have a neat plugin for Mongrel called snazzy_command that gives the
-# mongrel_rails a new command snazzy (like:  mongrel_rails snazzy).  You'd like
-# people to be able to grab this plugin if they want and use it, because it's snazzy.
-#
-# First thing you do is create a gem of your project and make sure that it depends
-# on "mongrel" AND "gem_plugin".  This signals to the GemPlugin system that this is
-# a plugin for mongrel.
-#
-# Next you put this code into a file like lib/init.rb (can be anything really):
-#
-#  class Snazzy < GemPlugin::Plugin "/commands"
-#    ...
-#  end
-#  
-# Then when you create your gem you have the following bits in your Rakefile:
-#
-#  spec.add_dependency('mongrel', '>= 0.3.9')
-#  spec.add_dependency('gem_plugin', '>= 0.1')
-#  spec.autorequire = 'init.rb'
-#
-# Finally, you just have to now publish this gem for people to install and Mongrel
-# will "magically" be able to install it.
-#
-# The "magic" part though is pretty simple and done via the GemPlugin::Manager.load
-# method.  Read that to see how it is really done.
-module GemPlugin
-
-  EXCLUDE = true
-  INCLUDE = false
-
-  class PluginNotLoaded < StandardError; end
-
-  
-  # This class is used by people who use gem plugins (but don't necessarily make them)
-  # to add plugins to their own systems.  It provides a way to load plugins, list them,
-  # and create them as needed.
-  #
-  # It is a singleton so you use like this:  GemPlugins::Manager.instance.load
-  class Manager
-    include Singleton
-    attr_reader :plugins
-    attr_reader :gems
-    
-
-    def initialize
-      # plugins that have been loaded
-      @plugins = {}
-
-      # keeps track of gems which have been loaded already by the manager *and*
-      # where they came from so that they can be referenced later
-      @gems = {}
-    end
-
-
-    # Responsible for going through the list of available gems and loading 
-    # any plugins requested.  It keeps track of what it's loaded already
-    # and won't load them again.
-    #
-    # It accepts one parameter which is a hash of gem depends that should include
-    # or exclude a gem from being loaded.  A gem must depend on gem_plugin to be
-    # considered, but then each system has to add it's own INCLUDE to make sure
-    # that only plugins related to it are loaded.
-    #
-    # An example again comes from Mongrel.  In order to load all Mongrel plugins:
-    #
-    #  GemPlugin::Manager.instance.load "mongrel" => GemPlugin::INCLUDE
-    #
-    # Which will load all plugins that depend on mongrel AND gem_plugin.  Now, one
-    # extra thing we do is we delay loading Rails Mongrel plugins until after rails
-    # is configured.  Do do this the mongrel_rails script has:
-    #
-    # GemPlugin::Manager.instance.load "mongrel" => GemPlugin::INCLUDE, "rails" => GemPlugin::EXCLUDE
-    # The only thing to remember is that this is saying "include a plugin if it
-    # depends on gem_plugin, mongrel, but NOT rails".  If a plugin also depends on other
-    # stuff then it's loaded just fine.  Only gem_plugin, mongrel, and rails are
-    # ever used to determine if it should be included.
-    #
-    # NOTE: Currently RubyGems will run autorequire on gems that get required AND
-    # on their dependencies.  This really messes with people running edge rails
-    # since activerecord or other stuff gets loaded for just touching a gem plugin.
-    # To prevent this load requires the full path to the "init.rb" file, which
-    # avoids the RubyGems autorequire magic.
-    def load(needs = {})
-      sdir = File.join(Gem.dir, "specifications")
-      gems = Gem::SourceIndex.from_installed_gems(sdir)
-      needs = needs.merge({"gem_plugin" => INCLUDE})
-      
-      gems.each do |path, gem|
-        # don't load gems more than once
-        next if @gems.has_key? gem.name        
-        check = needs.dup
-
-        # rolls through the depends and inverts anything it finds
-        gem.dependencies.each do |dep|
-          # this will fail if a gem is depended more than once
-          if check.has_key? dep.name
-            check[dep.name] = !check[dep.name]
-          end
-        end
-        
-        # now since excluded gems start as true, inverting them
-        # makes them false so we'll skip this gem if any excludes are found
-        if (check.select {|name,test| !test}).length == 0
-          # looks like no needs were set to false, so it's good
-          
-          # Previously was set wrong, we already have the correct gem path!
-          #gem_dir = File.join(Gem.dir, "gems", "#{gem.name}-#{gem.version}")
-          gem_dir = File.join(Gem.dir, "gems", path)
-          
-          require File.join(gem_dir, "lib", gem.name, "init.rb")
-          @gems[gem.name] = gem_dir
-        end
-      end
-
-      return nil
-    end
-
-
-    # Not necessary for you to call directly, but this is
-    # how GemPlugin::Base.inherited actually adds a 
-    # plugin to a category.
-    def register(category, name, klass)
-      @plugins[category] ||= {}
-      @plugins[category][name.downcase] = klass
-    end
-   
- 
-    # Resolves the given name (should include /category/name) to
-    # find the plugin class and create an instance.  You can
-    # pass a second hash option that is then given to the Plugin 
-    # to configure it.
-    def create(name, options = {})
-      last_slash = name.rindex("/")
-      category = name[0 ... last_slash]
-      plugin = name[last_slash .. -1]
-
-      map = @plugins[category]
-      if not map
-        raise "Plugin category #{category} does not exist"
-      elsif not map.has_key? plugin
-        raise "Plugin #{plugin} does not exist in category #{category}"
-      else
-        map[plugin].new(options)
-      end
-    end
-    
-
-    # Simply says whether the given gem has been loaded yet or not.
-    def loaded?(gem_name)
-      @gems.has_key? gem_name
-    end
-
-
-    # GemPlugins can have a 'resources' directory which is packaged with them
-    # and can hold any data resources the plugin may need.  The main problem
-    # is that it's difficult to figure out where these resources are 
-    # actually located on the file system.  The resource method tries to 
-    # locate the real path for a given resource path.
-    #
-    # Let's say you have a 'resources/stylesheets/default.css' file in your
-    # gem distribution, then finding where this file really is involves:
-    #
-    #   Manager.instance.resource("mygem", "/stylesheets/default.css")
-    #
-    # You either get back the full path to the resource or you get a nil
-    # if it doesn't exist.
-    #
-    # If you request a path for a GemPlugin that hasn't been loaded yet
-    # then it will throw an PluginNotLoaded exception.  The gem may be
-    # present on your system in this case, but you just haven't loaded
-    # it with Manager.instance.load properly.
-    def resource(gem_name, path)
-      if not loaded? gem_name
-        raise PluginNotLoaded.new("Plugin #{gem_name} not loaded when getting resource #{path}")
-      end
-      
-      file = File.join(@gems[gem_name], "resources", path)
-
-      if File.exist? file
-        return file
-      else
-        return nil
-      end
-    end
-
-    
-    # While Manager.resource will find arbitrary resources, a special
-    # case is when you need to load a set of configuration defaults.
-    # GemPlugin normalizes this to be if you have a file "resources/defaults.yaml"
-    # then you'll be able to load them via Manager.config.
-    #
-    # How you use the method is you get the options the user wants set, pass
-    # them to Manager.instance.config, and what you get back is a new Hash
-    # with the user's settings overriding the defaults.
-    #
-    #   opts = Manager.instance.config "mygem", :age => 12, :max_load => .9
-    #
-    # In the above case, if defaults had {:age => 14} then it would be 
-    # changed to 12.
-    #
-    # This loads the .yaml file on the fly every time, so doing it a 
-    # whole lot is very stupid.  If you need to make frequent calls to
-    # this, call it once with no options (Manager.instance.config) then
-    # use the returned defaults directly from then on.
-    def config(gem_name, options={})
-      config_file = Manager.instance.resource(gem_name, "/defaults.yaml")
-      if config_file
-        begin
-          defaults = YAML.load_file(config_file)
-          return defaults.merge(options)
-        rescue
-          raise "Error loading config #{config_file} for gem #{gem_name}"
-        end
-      else
-        return options
-      end
-    end
-  end
-
-  # This base class for plugins really does nothing
-  # more than wire up the new class into the right category.
-  # It is not thread-safe yet but will be soon.
-  class Base
-    
-    attr_reader :options
-
-
-    # See Mongrel::Plugin for an explanation.
-    def Base.inherited(klass)
-      name = "/" + klass.to_s.downcase
-      Manager.instance.register(@@category, name, klass)
-      @@category = nil
-    end
-    
-    # See Mongrel::Plugin for an explanation.
-    def Base.category=(category)
-      @@category = category
-    end
-
-    def initialize(options = {})
-      @options = options
-    end
-
-  end
-  
-  # This nifty function works with the GemPlugin::Base to give you
-  # the syntax:
-  #
-  #  class MyThing < GemPlugin::Plugin "/things"
-  #    ...
-  #  end
-  #
-  # What it does is temporarily sets the GemPlugin::Base.category, and then
-  # returns GemPlugin::Base.  Since the next immediate thing Ruby does is
-  # use this returned class to create the new class, GemPlugin::Base.inherited
-  # gets called.  GemPlugin::Base.inherited then uses the set category, class name,
-  # and class to register the plugin in the right way.
-  def GemPlugin::Plugin(c)
-    Base.category = c
-    Base
-  end
-
-end
-
-
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/COPYING b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/COPYING
deleted file mode 100644
index bff74f4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/COPYING
+++ /dev/null
@@ -1 +0,0 @@
-No copying restrictions/license given.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/LICENSE b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/LICENSE
deleted file mode 100644
index 5ac4cab..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/LICENSE
+++ /dev/null
@@ -1 +0,0 @@
-No license given.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/README b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/README
deleted file mode 100644
index 6d354aa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/README
+++ /dev/null
@@ -1,5 +0,0 @@
-== <%= project.capitalize %> GemPlugin
-
-You should document your project here.
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/Rakefile b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/Rakefile
deleted file mode 100644
index b42d198..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/Rakefile
+++ /dev/null
@@ -1,61 +0,0 @@
-require 'rake'
-require 'rake/testtask'
-require 'rake/clean'
-require 'rake/gempackagetask'
-require 'rake/rdoctask'
-require 'fileutils'
-include FileUtils
-
-version="0.1"
-name="<%= project %>"
-
-spec = Gem::Specification.new do |s|
-  s.name = name
-  s.version = version
-  s.description = s.summary = "The <%= project %> GemPlugin"
-  s.author = "Nobody"
-  s.add_dependency('gem_plugin', '>= <%= gem_plugin_version %>')
-  
-  s.platform = Gem::Platform::RUBY
-  s.has_rdoc = true
-  s.extra_rdoc_files = ["README"]
-  
-  s.files = %w(COPYING LICENSE README Rakefile) +
-    Dir.glob("{bin,doc/rdoc,test,lib}/**/*") + 
-    Dir.glob("ext/**/*.{h,c,rb}") +
-    Dir.glob("examples/**/*.rb") +
-    Dir.glob("tools/*.rb") +
-    Dir.glob("resources/**/*")
-  
-  s.require_path = "lib"
-  s.bindir = "bin"
-end
-
-Rake::GemPackageTask.new(spec) do |p|
-  p.need_tar = true if RUBY_PLATFORM !~ /mswin/
-end
-
-task :install => [:test, :package] do
-  sh %{sudo gem install pkg/#{name}-#{version}.gem}
-end
-
-task :uninstall => [:clean] do
-  sh %{sudo gem uninstall #{name}}
-end
-
-Rake::TestTask.new do |t|
-  t.libs << "test"
-  t.test_files = FileList['test/test*.rb']
-  t.verbose = true
-end
-
-Rake::RDocTask.new do |rdoc|
-  rdoc.rdoc_dir = 'doc/rdoc'
-  rdoc.options << '--line-numbers'
-  rdoc.rdoc_files.add ['README', 'LICENSE', 'COPYING', 'lib/**/*.rb', 'doc/**/*.rdoc']
-end
-
-task :default => [:test, :package]
-
-CLEAN.include ['build/*', '**/*.o', '**/*.so', '**/*.a', 'lib/*-*', '**/*.log', 'pkg', 'lib/*.bundle', '*.gem', '.config']
-
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/lib/project/init.rb b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/lib/project/init.rb
deleted file mode 100644
index 7d6544a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/lib/project/init.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require 'gem_plugin'
-
-# give this class the name you want for your command <%= project %>
-class ChangeME < GemPlugin::Plugin "/somecategory"
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/resources/defaults.yaml b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/resources/defaults.yaml
deleted file mode 100644
index 10d2a47..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/resources/resources/defaults.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
---- 
-:debug: false
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/setup.rb b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/setup.rb
deleted file mode 100644
index 0807023..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/setup.rb
+++ /dev/null
@@ -1,1360 +0,0 @@
-#
-# setup.rb
-#
-# Copyright (c) 2000-2004 Minero Aoki
-#
-# This program is free software.
-# You can distribute/modify this program under the terms of
-# the GNU LGPL, Lesser General Public License version 2.1.
-#
-
-unless Enumerable.method_defined?(:map)   # Ruby 1.4.6
-  module Enumerable
-    alias map collect
-  end
-end
-
-unless File.respond_to?(:read)   # Ruby 1.6
-  def File.read(fname)
-    open(fname) {|f|
-      return f.read
-    }
-  end
-end
-
-def File.binread(fname)
-  open(fname, 'rb') {|f|
-    return f.read
-  }
-end
-
-# for corrupted windows stat(2)
-def File.dir?(path)
-  File.directory?((path[-1,1] == '/') ? path : path + '/')
-end
-
-
-class SetupError < StandardError; end
-
-def setup_rb_error(msg)
-  raise SetupError, msg
-end
-
-#
-# Config
-#
-
-if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg }
-  ARGV.delete(arg)
-  require arg.split(/=/, 2)[1]
-  $".push 'rbconfig.rb'
-else
-  require 'rbconfig'
-end
-
-def multipackage_install?
-  FileTest.directory?(File.dirname($0) + '/packages')
-end
-
-
-class ConfigItem
-  def initialize(name, template, default, desc)
-    @name = name.freeze
-    @template = template
-    @value = default
-    @default = default.dup.freeze
-    @description = desc
-  end
-
-  attr_reader :name
-  attr_reader :description
-
-  attr_accessor :default
-  alias help_default default
-
-  def help_opt
-    "--#{@name}=#{@template}"
-  end
-
-  def value
-    @value
-  end
-
-  def eval(table)
-    @value.gsub(%r<\$([^/]+)>) { table[$1] }
-  end
-
-  def set(val)
-    @value = check(val)
-  end
-
-  private
-
-  def check(val)
-    setup_rb_error "config: --#{name} requires argument" unless val
-    val
-  end
-end
-
-class BoolItem < ConfigItem
-  def config_type
-    'bool'
-  end
-
-  def help_opt
-    "--#{@name}"
-  end
-
-  private
-
-  def check(val)
-    return 'yes' unless val
-    unless /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i =~ val
-      setup_rb_error "config: --#{@name} accepts only yes/no for argument"
-    end
-    (/\Ay(es)?|\At(rue)/i =~ value) ? 'yes' : 'no'
-  end
-end
-
-class PathItem < ConfigItem
-  def config_type
-    'path'
-  end
-
-  private
-
-  def check(path)
-    setup_rb_error "config: --#{@name} requires argument"  unless path
-    path[0,1] == '$' ? path : File.expand_path(path)
-  end
-end
-
-class ProgramItem < ConfigItem
-  def config_type
-    'program'
-  end
-end
-
-class SelectItem < ConfigItem
-  def initialize(name, template, default, desc)
-    super
-    @ok = template.split('/')
-  end
-
-  def config_type
-    'select'
-  end
-
-  private
-
-  def check(val)
-    unless @ok.include?(val.strip)
-      setup_rb_error "config: use --#{@name}=#{@template} (#{val})"
-    end
-    val.strip
-  end
-end
-
-class PackageSelectionItem < ConfigItem
-  def initialize(name, template, default, help_default, desc)
-    super name, template, default, desc
-    @help_default = help_default
-  end
-
-  attr_reader :help_default
-
-  def config_type
-    'package'
-  end
-
-  private
-
-  def check(val)
-    unless File.dir?("packages/#{val}")
-      setup_rb_error "config: no such package: #{val}"
-    end
-    val
-  end
-end
-
-class ConfigTable_class
-
-  def initialize(items)
-    @items = items
-    @table = {}
-    items.each do |i|
-      @table[i.name] = i
-    end
-    ALIASES.each do |ali, name|
-      @table[ali] = @table[name]
-    end
-  end
-
-  include Enumerable
-
-  def each(&block)
-    @items.each(&block)
-  end
-
-  def key?(name)
-    @table.key?(name)
-  end
-
-  def lookup(name)
-    @table[name] or raise ArgumentError, "no such config item: #{name}"
-  end
-
-  def add(item)
-    @items.push item
-    @table[item.name] = item
-  end
-
-  def remove(name)
-    item = lookup(name)
-    @items.delete_if {|i| i.name == name }
-    @table.delete_if {|name, i| i.name == name }
-    item
-  end
-
-  def new
-    dup()
-  end
-
-  def savefile
-    '.config'
-  end
-
-  def load
-    begin
-      t = dup()
-      File.foreach(savefile()) do |line|
-        k, v = *line.split(/=/, 2)
-        t[k] = v.strip
-      end
-      t
-    rescue Errno::ENOENT
-      setup_rb_error $!.message + "#{File.basename($0)} config first"
-    end
-  end
-
-  def save
-    @items.each {|i| i.value }
-    File.open(savefile(), 'w') {|f|
-      @items.each do |i|
-        f.printf "%s=%s\n", i.name, i.value if i.value
-      end
-    }
-  end
-
-  def [](key)
-    lookup(key).eval(self)
-  end
-
-  def []=(key, val)
-    lookup(key).set val
-  end
-
-end
-
-c = ::Config::CONFIG
-
-rubypath = c['bindir'] + '/' + c['ruby_install_name']
-
-major = c['MAJOR'].to_i
-minor = c['MINOR'].to_i
-teeny = c['TEENY'].to_i
-version = "#{major}.#{minor}"
-
-# ruby ver. >= 1.4.4?
-newpath_p = ((major >= 2) or
-             ((major == 1) and
-              ((minor >= 5) or
-               ((minor == 4) and (teeny >= 4)))))
-
-if c['rubylibdir']
-  # V < 1.6.3
-  _stdruby         = c['rubylibdir']
-  _siteruby        = c['sitedir']
-  _siterubyver     = c['sitelibdir']
-  _siterubyverarch = c['sitearchdir']
-elsif newpath_p
-  # 1.4.4 <= V <= 1.6.3
-  _stdruby         = "$prefix/lib/ruby/#{version}"
-  _siteruby        = c['sitedir']
-  _siterubyver     = "$siteruby/#{version}"
-  _siterubyverarch = "$siterubyver/#{c['arch']}"
-else
-  # V < 1.4.4
-  _stdruby         = "$prefix/lib/ruby/#{version}"
-  _siteruby        = "$prefix/lib/ruby/#{version}/site_ruby"
-  _siterubyver     = _siteruby
-  _siterubyverarch = "$siterubyver/#{c['arch']}"
-end
-libdir = '-* dummy libdir *-'
-stdruby = '-* dummy rubylibdir *-'
-siteruby = '-* dummy site_ruby *-'
-siterubyver = '-* dummy site_ruby version *-'
-parameterize = lambda {|path|
-  path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')\
-      .sub(/\A#{Regexp.quote(libdir)}/,      '$libdir')\
-      .sub(/\A#{Regexp.quote(stdruby)}/,     '$stdruby')\
-      .sub(/\A#{Regexp.quote(siteruby)}/,    '$siteruby')\
-      .sub(/\A#{Regexp.quote(siterubyver)}/, '$siterubyver')
-}
-libdir          = parameterize.call(c['libdir'])
-stdruby         = parameterize.call(_stdruby)
-siteruby        = parameterize.call(_siteruby)
-siterubyver     = parameterize.call(_siterubyver)
-siterubyverarch = parameterize.call(_siterubyverarch)
-
-if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
-  makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
-else
-  makeprog = 'make'
-end
-
-common_conf = [
-  PathItem.new('prefix', 'path', c['prefix'],
-               'path prefix of target environment'),
-  PathItem.new('bindir', 'path', parameterize.call(c['bindir']),
-               'the directory for commands'),
-  PathItem.new('libdir', 'path', libdir,
-               'the directory for libraries'),
-  PathItem.new('datadir', 'path', parameterize.call(c['datadir']),
-               'the directory for shared data'),
-  PathItem.new('mandir', 'path', parameterize.call(c['mandir']),
-               'the directory for man pages'),
-  PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']),
-               'the directory for man pages'),
-  PathItem.new('stdruby', 'path', stdruby,
-               'the directory for standard ruby libraries'),
-  PathItem.new('siteruby', 'path', siteruby,
-      'the directory for version-independent aux ruby libraries'),
-  PathItem.new('siterubyver', 'path', siterubyver,
-               'the directory for aux ruby libraries'),
-  PathItem.new('siterubyverarch', 'path', siterubyverarch,
-               'the directory for aux ruby binaries'),
-  PathItem.new('rbdir', 'path', '$siterubyver',
-               'the directory for ruby scripts'),
-  PathItem.new('sodir', 'path', '$siterubyverarch',
-               'the directory for ruby extentions'),
-  PathItem.new('rubypath', 'path', rubypath,
-               'the path to set to #! line'),
-  ProgramItem.new('rubyprog', 'name', rubypath,
-                  'the ruby program using for installation'),
-  ProgramItem.new('makeprog', 'name', makeprog,
-                  'the make program to compile ruby extentions'),
-  SelectItem.new('shebang', 'all/ruby/never', 'ruby',
-                 'shebang line (#!) editing mode'),
-  BoolItem.new('without-ext', 'yes/no', 'no',
-               'does not compile/install ruby extentions')
-]
-class ConfigTable_class   # open again
-  ALIASES = {
-    'std-ruby'         => 'stdruby',
-    'site-ruby-common' => 'siteruby',     # For backward compatibility
-    'site-ruby'        => 'siterubyver',  # For backward compatibility
-    'bin-dir'          => 'bindir',
-    'bin-dir'          => 'bindir',
-    'rb-dir'           => 'rbdir',
-    'so-dir'           => 'sodir',
-    'data-dir'         => 'datadir',
-    'ruby-path'        => 'rubypath',
-    'ruby-prog'        => 'rubyprog',
-    'ruby'             => 'rubyprog',
-    'make-prog'        => 'makeprog',
-    'make'             => 'makeprog'
-  }
-end
-multipackage_conf = [
-  PackageSelectionItem.new('with', 'name,name...', '', 'ALL',
-                           'package names that you want to install'),
-  PackageSelectionItem.new('without', 'name,name...', '', 'NONE',
-                           'package names that you do not want to install')
-]
-if multipackage_install?
-  ConfigTable = ConfigTable_class.new(common_conf + multipackage_conf)
-else
-  ConfigTable = ConfigTable_class.new(common_conf)
-end
-
-
-module MetaConfigAPI
-
-  def eval_file_ifexist(fname)
-    instance_eval File.read(fname), fname, 1 if File.file?(fname)
-  end
-
-  def config_names
-    ConfigTable.map {|i| i.name }
-  end
-
-  def config?(name)
-    ConfigTable.key?(name)
-  end
-
-  def bool_config?(name)
-    ConfigTable.lookup(name).config_type == 'bool'
-  end
-
-  def path_config?(name)
-    ConfigTable.lookup(name).config_type == 'path'
-  end
-
-  def value_config?(name)
-    case ConfigTable.lookup(name).config_type
-    when 'bool', 'path'
-      true
-    else
-      false
-    end
-  end
-
-  def add_config(item)
-    ConfigTable.add item
-  end
-
-  def add_bool_config(name, default, desc)
-    ConfigTable.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc)
-  end
-
-  def add_path_config(name, default, desc)
-    ConfigTable.add PathItem.new(name, 'path', default, desc)
-  end
-
-  def set_config_default(name, default)
-    ConfigTable.lookup(name).default = default
-  end
-
-  def remove_config(name)
-    ConfigTable.remove(name)
-  end
-
-end
-
-
-#
-# File Operations
-#
-
-module FileOperations
-
-  def mkdir_p(dirname, prefix = nil)
-    dirname = prefix + File.expand_path(dirname) if prefix
-    $stderr.puts "mkdir -p #{dirname}" if verbose?
-    return if no_harm?
-
-    # does not check '/'... it's too abnormal case
-    dirs = File.expand_path(dirname).split(%r<(?=/)>)
-    if /\A[a-z]:\z/i =~ dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless File.dir?(path)
-    end
-  end
-
-  def rm_f(fname)
-    $stderr.puts "rm -f #{fname}" if verbose?
-    return if no_harm?
-
-    if File.exist?(fname) or File.symlink?(fname)
-      File.chmod 0777, fname
-      File.unlink fname
-    end
-  end
-
-  def rm_rf(dn)
-    $stderr.puts "rm -rf #{dn}" if verbose?
-    return if no_harm?
-
-    Dir.chdir dn
-    Dir.foreach('.') do |fn|
-      next if fn == '.'
-      next if fn == '..'
-      if File.dir?(fn)
-        verbose_off {
-          rm_rf fn
-        }
-      else
-        verbose_off {
-          rm_f fn
-        }
-      end
-    end
-    Dir.chdir '..'
-    Dir.rmdir dn
-  end
-
-  def move_file(src, dest)
-    File.unlink dest if File.exist?(dest)
-    begin
-      File.rename src, dest
-    rescue
-      File.open(dest, 'wb') {|f| f.write File.binread(src) }
-      File.chmod File.stat(src).mode, dest
-      File.unlink src
-    end
-  end
-
-  def install(from, dest, mode, prefix = nil)
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix ? prefix + File.expand_path(dest) : dest
-    realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
-    str = File.binread(from)
-    if diff?(str, realdest)
-      verbose_off {
-        rm_f realdest if File.exist?(realdest)
-      }
-      File.open(realdest, 'wb') {|f|
-        f.write str
-      }
-      File.chmod mode, realdest
-
-      File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
-        if prefix
-          f.puts realdest.sub(prefix, '')
-        else
-          f.puts realdest
-        end
-      }
-    end
-  end
-
-  def diff?(new_content, path)
-    return true unless File.exist?(path)
-    new_content != File.binread(path)
-  end
-
-  def command(str)
-    $stderr.puts str if verbose?
-    system str or raise RuntimeError, "'system #{str}' failed"
-  end
-
-  def ruby(str)
-    command config('rubyprog') + ' ' + str
-  end
-  
-  def make(task = '')
-    command config('makeprog') + ' ' + task
-  end
-
-  def extdir?(dir)
-    File.exist?(dir + '/MANIFEST')
-  end
-
-  def all_files_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|ent| File.file?("#{dirname}/#{ent}") }
-    }
-  end
-
-  REJECT_DIRS = %w(
-    CVS SCCS RCS CVS.adm .svn
-  )
-
-  def all_dirs_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|n| File.dir?("#{dirname}/#{n}") } - %w(. ..) - REJECT_DIRS
-    }
-  end
-
-end
-
-
-#
-# Main Installer
-#
-
-module HookUtils
-
-  def run_hook(name)
-    try_run_hook "#{curr_srcdir()}/#{name}" or
-    try_run_hook "#{curr_srcdir()}/#{name}.rb"
-  end
-
-  def try_run_hook(fname)
-    return false unless File.file?(fname)
-    begin
-      instance_eval File.read(fname), fname, 1
-    rescue
-      setup_rb_error "hook #{fname} failed:\n" + $!.message
-    end
-    true
-  end
-
-end
-
-
-module HookScriptAPI
-
-  def get_config(key)
-    @config[key]
-  end
-
-  alias config get_config
-
-  def set_config(key, val)
-    @config[key] = val
-  end
-
-  #
-  # srcdir/objdir (works only in the package directory)
-  #
-
-  #abstract srcdir_root
-  #abstract objdir_root
-  #abstract relpath
-
-  def curr_srcdir
-    "#{srcdir_root()}/#{relpath()}"
-  end
-
-  def curr_objdir
-    "#{objdir_root()}/#{relpath()}"
-  end
-
-  def srcfile(path)
-    "#{curr_srcdir()}/#{path}"
-  end
-
-  def srcexist?(path)
-    File.exist?(srcfile(path))
-  end
-
-  def srcdirectory?(path)
-    File.dir?(srcfile(path))
-  end
-  
-  def srcfile?(path)
-    File.file? srcfile(path)
-  end
-
-  def srcentries(path = '.')
-    Dir.open("#{curr_srcdir()}/#{path}") {|d|
-      return d.to_a - %w(. ..)
-    }
-  end
-
-  def srcfiles(path = '.')
-    srcentries(path).select {|fname|
-      File.file?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-  def srcdirectories(path = '.')
-    srcentries(path).select {|fname|
-      File.dir?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-end
-
-
-class ToplevelInstaller
-
-  Version   = '3.3.1'
-  Copyright = 'Copyright (c) 2000-2004 Minero Aoki'
-
-  TASKS = [
-    [ 'all',      'do config, setup, then install' ],
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles ruby extentions and others' ],
-    [ 'install',  'installs files' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-  def ToplevelInstaller.invoke
-    instance().invoke
-  end
-
-  @singleton = nil
-
-  def ToplevelInstaller.instance
-    @singleton ||= new(File.dirname($0))
-    @singleton
-  end
-
-  include MetaConfigAPI
-
-  def initialize(ardir_root)
-    @config = nil
-    @options = { 'verbose' => true }
-    @ardir = File.expand_path(ardir_root)
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__()}>"
-  end
-
-  def invoke
-    run_metaconfigs
-    case task = parsearg_global()
-    when nil, 'all'
-      @config = load_config('config')
-      parsearg_config
-      init_installers
-      exec_config
-      exec_setup
-      exec_install
-    else
-      @config = load_config(task)
-      __send__ "parsearg_#{task}"
-      init_installers
-      __send__ "exec_#{task}"
-    end
-  end
-  
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-  end
-
-  def load_config(task)
-    case task
-    when 'config'
-      ConfigTable.new
-    when 'clean', 'distclean'
-      if File.exist?(ConfigTable.savefile)
-      then ConfigTable.load
-      else ConfigTable.new
-      end
-    else
-      ConfigTable.load
-    end
-  end
-
-  def init_installers
-    @installer = Installer.new(@config, @options, @ardir, File.expand_path('.'))
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @ardir
-  end
-
-  def objdir_root
-    '.'
-  end
-
-  def relpath
-    '.'
-  end
-
-  #
-  # Option Parsing
-  #
-
-  def parsearg_global
-    valid_task = /\A(?:#{TASKS.map {|task,desc| task }.join '|'})\z/
-
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        setup_rb_error "invalid task: #{arg}" unless valid_task =~ arg
-        return arg
-
-      when '-q', '--quiet'
-        @options['verbose'] = false
-
-      when       '--verbose'
-        @options['verbose'] = true
-
-      when '-h', '--help'
-        print_usage $stdout
-        exit 0
-
-      when '-v', '--version'
-        puts "#{File.basename($0)} version #{Version}"
-        exit 0
-      
-      when '--copyright'
-        puts Copyright
-        exit 0
-
-      else
-        setup_rb_error "unknown global option '#{arg}'"
-      end
-    end
-
-    nil
-  end
-
-
-  def parsearg_no_options
-    unless ARGV.empty?
-      setup_rb_error "#{task}:  unknown options: #{ARGV.join ' '}"
-    end
-  end
-
-  alias parsearg_show       parsearg_no_options
-  alias parsearg_setup      parsearg_no_options
-  alias parsearg_clean      parsearg_no_options
-  alias parsearg_distclean  parsearg_no_options
-
-  def parsearg_config
-    re = /\A--(#{ConfigTable.map {|i| i.name }.join('|')})(?:=(.*))?\z/
-    @options['config-opt'] = []
-
-    while i = ARGV.shift
-      if /\A--?\z/ =~ i
-        @options['config-opt'] = ARGV.dup
-        break
-      end
-      m = re.match(i)  or setup_rb_error "config: unknown option #{i}"
-      name, value = *m.to_a[1,2]
-      @config[name] = value
-    end
-  end
-
-  def parsearg_install
-    @options['no-harm'] = false
-    @options['install-prefix'] = ''
-    while a = ARGV.shift
-      case a
-      when /\A--no-harm\z/
-        @options['no-harm'] = true
-      when /\A--prefix=(.*)\z/
-        path = $1
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @options['install-prefix'] = path
-      else
-        setup_rb_error "install: unknown option #{a}"
-      end
-    end
-  end
-
-  def print_usage(out)
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-24s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '-h,--help',    'print this message'
-    out.printf fmt, '-v,--version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf fmt, name, desc
-    end
-
-    fmt = "  %-24s %s [%s]\n"
-    out.puts
-    out.puts 'Options for CONFIG or ALL:'
-    ConfigTable.each do |item|
-      out.printf fmt, item.help_opt, item.description, item.help_default
-    end
-    out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's"
-    out.puts
-    out.puts 'Options for INSTALL:'
-    out.printf fmt, '--no-harm', 'only display what to do if given', 'off'
-    out.printf fmt, '--prefix=path',  'install path prefix', '$prefix'
-    out.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    @installer.exec_config
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    @installer.exec_setup
-  end
-
-  def exec_install
-    @installer.exec_install
-  end
-
-  def exec_show
-    ConfigTable.each do |i|
-      printf "%-20s %s\n", i.name, i.value
-    end
-  end
-
-  def exec_clean
-    @installer.exec_clean
-  end
-
-  def exec_distclean
-    @installer.exec_distclean
-  end
-
-end
-
-
-class ToplevelInstallerMulti < ToplevelInstaller
-
-  include HookUtils
-  include HookScriptAPI
-  include FileOperations
-
-  def initialize(ardir)
-    super
-    @packages = all_dirs_in("#{@ardir}/packages")
-    raise 'no package exists' if @packages.empty?
-  end
-
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-    @packages.each do |name|
-      eval_file_ifexist "#{@ardir}/packages/#{name}/metaconfig"
-    end
-  end
-
-  def init_installers
-    @installers = {}
-    @packages.each do |pack|
-      @installers[pack] = Installer.new(@config, @options,
-                                       "#{@ardir}/packages/#{pack}",
-                                       "packages/#{pack}")
-    end
-
-    with    = extract_selection(config('with'))
-    without = extract_selection(config('without'))
-    @selected = @installers.keys.select {|name|
-                  (with.empty? or with.include?(name)) \
-                      and not without.include?(name)
-                }
-  end
-
-  def extract_selection(list)
-    a = list.split(/,/)
-    a.each do |name|
-      setup_rb_error "no such package: #{name}"  unless @installers.key?(name)
-    end
-    a
-  end
-
-  def print_usage(f)
-    super
-    f.puts 'Inluded packages:'
-    f.puts '  ' + @packages.sort.join(' ')
-    f.puts
-  end
-
-  #
-  # multi-package metaconfig API
-  #
-
-  attr_reader :packages
-
-  def declare_packages(list)
-    raise 'package list is empty' if list.empty?
-    list.each do |name|
-      raise "directory packages/#{name} does not exist"\
-              unless File.dir?("#{@ardir}/packages/#{name}")
-    end
-    @packages = list
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    run_hook 'pre-config'
-    each_selected_installers {|inst| inst.exec_config }
-    run_hook 'post-config'
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    run_hook 'pre-setup'
-    each_selected_installers {|inst| inst.exec_setup }
-    run_hook 'post-setup'
-  end
-
-  def exec_install
-    run_hook 'pre-install'
-    each_selected_installers {|inst| inst.exec_install }
-    run_hook 'post-install'
-  end
-
-  def exec_clean
-    rm_f ConfigTable.savefile
-    run_hook 'pre-clean'
-    each_selected_installers {|inst| inst.exec_clean }
-    run_hook 'post-clean'
-  end
-
-  def exec_distclean
-    rm_f ConfigTable.savefile
-    run_hook 'pre-distclean'
-    each_selected_installers {|inst| inst.exec_distclean }
-    run_hook 'post-distclean'
-  end
-
-  #
-  # lib
-  #
-
-  def each_selected_installers
-    Dir.mkdir 'packages' unless File.dir?('packages')
-    @selected.each do |pack|
-      $stderr.puts "Processing the package `#{pack}' ..." if @options['verbose']
-      Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
-      Dir.chdir "packages/#{pack}"
-      yield @installers[pack]
-      Dir.chdir '../..'
-    end
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-end
-
-
-class Installer
-
-  FILETYPES = %w( bin lib ext data )
-
-  include HookScriptAPI
-  include HookUtils
-  include FileOperations
-
-  def initialize(config, opt, srcroot, objroot)
-    @config = config
-    @options = opt
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{File.basename(@srcdir)}>"
-  end
-
-  #
-  # Hook Script API base methods
-  #
-
-  def srcdir_root
-    @srcdir
-  end
-
-  def objdir_root
-    @objdir
-  end
-
-  def relpath
-    @currdir
-  end
-
-  #
-  # configs/options
-  #
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def verbose_off
-    begin
-      save, @options['verbose'] = @options['verbose'], false
-      yield
-    ensure
-      @options['verbose'] = save
-    end
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  def config_dir_bin(rel)
-  end
-
-  def config_dir_lib(rel)
-  end
-
-  def config_dir_ext(rel)
-    extconf if extdir?(curr_srcdir())
-  end
-
-  def extconf
-    opt = @options['config-opt'].join(' ')
-    command "#{config('rubyprog')} #{curr_srcdir()}/extconf.rb #{opt}"
-  end
-
-  def config_dir_data(rel)
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin(rel)
-    all_files_in(curr_srcdir()).each do |fname|
-      adjust_shebang "#{curr_srcdir()}/#{fname}"
-    end
-  end
-
-  def adjust_shebang(path)
-    return if no_harm?
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(path, 'rb') {|r|
-        first = r.gets
-        return unless File.basename(config('rubypath')) == 'ruby'
-        return unless File.basename(first.sub(/\A\#!/, '').split[0]) == 'ruby'
-        $stderr.puts "adjusting shebang: #{File.basename(path)}" if verbose?
-        File.open(tmpfile, 'wb') {|w|
-          w.print first.sub(/\A\#!\s*\S+/, '#! ' + config('rubypath'))
-          w.write r.read
-        }
-        move_file tmpfile, File.basename(path)
-      }
-    ensure
-      File.unlink tmpfile if File.exist?(tmpfile)
-    end
-  end
-
-  def setup_dir_lib(rel)
-  end
-
-  def setup_dir_ext(rel)
-    make if extdir?(curr_srcdir())
-  end
-
-  def setup_dir_data(rel)
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    rm_f 'InstalledFiles'
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin(rel)
-    install_files collect_filenames_auto(), "#{config('bindir')}/#{rel}", 0755
-  end
-
-  def install_dir_lib(rel)
-    install_files ruby_scripts(), "#{config('rbdir')}/#{rel}", 0644
-  end
-
-  def install_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    install_files ruby_extentions('.'),
-                  "#{config('sodir')}/#{File.dirname(rel)}",
-                  0555
-  end
-
-  def install_dir_data(rel)
-    install_files collect_filenames_auto(), "#{config('datadir')}/#{rel}", 0644
-  end
-
-  def install_files(list, dest, mode)
-    mkdir_p dest, @options['install-prefix']
-    list.each do |fname|
-      install fname, dest, mode, @options['install-prefix']
-    end
-  end
-
-  def ruby_scripts
-    collect_filenames_auto().select {|n| /\.rb\z/ =~ n }
-  end
-  
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  reject_patterns = %w( 
-    core RCSLOG tags TAGS .make.state
-    .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
-    *~ *.old *.bak *.BAK *.orig *.rej _$* *$
-
-    *.org *.in .*
-  )
-  mapping = {
-    '.' => '\.',
-    '$' => '\$',
-    '#' => '\#',
-    '*' => '.*'
-  }
-  REJECT_PATTERNS = Regexp.new('\A(?:' +
-                               reject_patterns.map {|pat|
-                                 pat.gsub(/[\.\$\#\*]/) {|ch| mapping[ch] }
-                               }.join('|') +
-                               ')\z')
-
-  def collect_filenames_auto
-    mapdir((existfiles() - hookfiles()).reject {|fname|
-             REJECT_PATTERNS =~ fname
-           })
-  end
-
-  def existfiles
-    all_files_in(curr_srcdir()) | all_files_in('.')
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-      %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def mapdir(filelist)
-    filelist.map {|fname|
-      if File.exist?(fname)   # objdir
-        fname
-      else                    # srcdir
-        File.join(curr_srcdir(), fname)
-      end
-    }
-  end
-
-  def ruby_extentions(dir)
-    Dir.open(dir) {|d|
-      ents = d.select {|fname| /\.#{::Config::CONFIG['DLEXT']}\z/ =~ fname }
-      if ents.empty?
-        setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first"
-      end
-      return ents
-    }
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f ConfigTable.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  def clean_dir_bin(rel)
-  end
-
-  def clean_dir_lib(rel)
-  end
-
-  def clean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'clean' if File.file?('Makefile')
-  end
-
-  def clean_dir_data(rel)
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f ConfigTable.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  def distclean_dir_bin(rel)
-  end
-
-  def distclean_dir_lib(rel)
-  end
-
-  def distclean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'distclean' if File.file?('Makefile')
-  end
-
-  #
-  # lib
-  #
-
-  def exec_task_traverse(task)
-    run_hook "pre-#{task}"
-    FILETYPES.each do |type|
-      if config('without-ext') == 'yes' and type == 'ext'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, "#{task}_dir_#{type}"
-    end
-    run_hook "post-#{task}"
-  end
-
-  def traverse(task, rel, mid)
-    dive_into(rel) {
-      run_hook "pre-#{task}"
-      __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-      all_dirs_in(curr_srcdir()).each do |d|
-        traverse task, "#{rel}/#{d}", mid
-      end
-      run_hook "post-#{task}"
-    }
-  end
-
-  def dive_into(rel)
-    return unless File.dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless File.dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-end
-
-
-if $0 == __FILE__
-  begin
-    if multipackage_install?
-      ToplevelInstallerMulti.invoke
-    else
-      ToplevelInstaller.invoke
-    end
-  rescue SetupError
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/test/test_plugins.rb b/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/test/test_plugins.rb
deleted file mode 100644
index 7123d11..0000000
--- a/spec10/public/webrat/test_app/gems/gems/gem_plugin-0.2.3/test/test_plugins.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-require 'test/unit'
-require 'gem_plugin'
-
-include GemPlugin
-
-class ATestPlugin < GemPlugin::Plugin "/stuff"
-end
-
-class First < GemPlugin::Plugin "/commands"
-  def initialize(options = {})
-    puts "First with options: #{options.inspect}"
-  end
-end
-
-class Second < GemPlugin::Plugin "/commands"
-  def initialize(options = {})
-    puts "Second with options: #{options.inspect}"
-  end
-end
-
-class Last < GemPlugin::Plugin "/commands"
-  def initialize(options = {})
-    puts "Last with options: #{options.inspect}"
-  end
-end
-
-
-class PluginTest < Test::Unit::TestCase
-
-  def setup
-    @pmgr = Manager.instance
-    @pmgr.load({"rails" => EXCLUDE})
-    @categories = ["/commands"]
-    @names = ["/first", "/second", "/last", "/atestplugin"]
-  end
-
-  def test_load_plugins
-    puts "#{@pmgr.plugins.inspect}"
-    @pmgr.plugins.each {|cat,plugins|
-      plugins.each do |n,p|
-        puts "TEST: #{cat}#{n}"
-      end
-    }
-
-    @pmgr.load
-    @pmgr.plugins.each do |cat,plugins|
-      plugins.each do |n,p|
-        STDERR.puts "#{cat}#{n}"
-        plugin = @pmgr.create("#{cat}#{n}", options={"name" => p})
-      end
-    end
-  end
-
-  def test_similar_uris
-
-    @pmgr.register("/test", "/testme", ATestPlugin)
-    @pmgr.register("/test2", "/testme", ATestPlugin)
-
-    assert_equal @pmgr.create("/test/testme").class, ATestPlugin
-    assert_equal @pmgr.create("/test2/testme").class, ATestPlugin
-
-  end
-
-
-  def test_create
-    last = @pmgr.create("/commands/last", "test" => "stuff")
-    assert last != nil, "Didn't make the right plugin"
-    first = @pmgr.create("/commands/last")
-    assert first != nil, "Didn't make the right plugin"
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/CHANGES b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/CHANGES
deleted file mode 100644
index b100211..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/CHANGES
+++ /dev/null
@@ -1,93 +0,0 @@
-2008-07-10 (1.1.3)
-  * Wesley Beary <monki at geemus.com> reported a bug in json/add/core's DateTime
-    handling: If the nominator and denominator of the offset were divisible by
-    each other Ruby's Rational#to_s returns them as an integer not a fraction
-    with '/'. This caused a ZeroDivisionError during parsing.
-  * Use Date#start and DateTime#start instead of sg method, while
-    remaining backwards compatible.
-  * Supports ragel >= 6.0 now.
-  * Corrected some tests.
-  * Some minor changes.
-2007-11-27 (1.1.2)
-  * Remember default dir (last used directory) in editor.
-  * JSON::Editor.edit method added, the editor can now receive json texts from
-    the clipboard via C-v.
-  * Load json texts from an URL pasted via middle button press.
-  * Added :create_additions option to Parser. This makes it possible to disable
-    the creation of additions by force, in order to treat json texts as data
-    while having additions loaded.
-  * Jacob Maine <jmaine at blurb.com> reported, that JSON(:foo) outputs a JSON
-    object if the rails addition is enabled, which is wrong. It now outputs a
-    JSON string "foo" instead, like suggested by Jacob Maine.
-  * Discovered a bug in the Ruby Bugs Tracker on rubyforge, that was reported
-    by John Evans lgastako at gmail.com. He could produce a crash in the JSON
-    generator by returning something other than a String instance from a
-    to_json method. I now guard against this by doing a rather crude type
-    check, which raises an exception instead of crashing.
-2007-07-06 (1.1.1)
-  * Yui NARUSE <naruse at airemix.com> sent some patches to fix tests for Ruby
-    1.9. I applied them and adapted some of them a bit to run both on 1.8 and
-    1.9.
-  * Introduced a JSON.parse! method without depth checking for people who like
-    danger.
-  * Made generate and pretty_generate methods configurable by an options hash.
-  * Added :allow_nan option to parser and generator in order to handle NaN,
-    Infinity, and -Infinity correctly - if requested. Floats, which aren't numbers,
-    aren't valid JSON according to RFC4627, so by default an exception will be
-    raised if any of these symbols are encountered. Thanks to Andrea Censi
-    <andrea.censi at dis.uniroma1.it> for his hint about this.
-  * Fixed some more tests for Ruby 1.9.
-  * Implemented dump/load interface of Marshal as suggested in ruby-core:11405
-    by murphy <murphy at rubychan.de>.
-  * Implemented the max_nesting feature for generate methods, too.
-  * Added some implementations for ruby core's custom objects for
-    serialisation/deserialisation purposes.
-2007-05-21 (1.1.0)
-  * Implemented max_nesting feature for parser to avoid stack overflows for
-    data from untrusted sources. If you trust the source, you can disable it
-    with the option max_nesting => false.
-  * Piers Cawley <pdcawley at bofh.org.uk> reported a bug, that not every
-    character can be escaped by ?\ as required by RFC4627. There's a
-    contradiction between David Crockford's JSON checker test vectors (in
-    tests/fixtures) and RFC4627, though. I decided to stick to the RFC, because
-    the JSON checker seems to be a bit older than the RFC.
-  * Extended license to Ruby License, which includes the GPL.
-  * Added keyboard shortcuts, and 'Open location' menu item to edit_json.rb.
-2007-05-09 (1.0.4)
-  * Applied a patch from Yui NARUSE <naruse at airemix.com> to make JSON compile
-    under Ruby 1.9. Thank you very much for mailing it to me!
-  * Made binary variants of JSON fail early, instead of falling back to the
-    pure version. This should avoid overshadowing of eventual problems while
-    loading of the binary.
-2007-03-24 (1.0.3)
-  * Improved performance of pure variant a bit.
-  * The ext variant of this release supports the mswin32 platform. Ugh!
-2007-03-24 (1.0.2)
-  * Ext Parser didn't parse 0e0 correctly into 0.0: Fixed!
-2007-03-24 (1.0.1)
-  * Forgot some object files in the build dir. I really like that - not!
-2007-03-24 (1.0.0)
-  * Added C implementations for the JSON generator and a ragel based JSON
-    parser in C.
-  * Much more tests, especially fixtures from json.org.
-  * Further improved conformance to RFC4627.
-2007-02-09 (0.4.3)
-  * Conform more to RFC4627 for JSON: This means JSON strings
-    now always must contain exactly one object "{ ... }" or array "[ ... ]" in
-    order to be parsed without raising an exception. The definition of what
-    constitutes a whitespace is narrower in JSON than in Ruby ([ \t\r\n]), and
-    there are differences in floats and integers (no octals or hexadecimals) as
-    well.
-  * Added aliases generate and pretty_generate of unparse and pretty_unparse.
-  * Fixed a test case.
-  * Catch an Iconv::InvalidEncoding exception, that seems to occur on some Sun
-    boxes with SunOS 5.8, if iconv doesn't support utf16 conversions. This was
-    reported by Andrew R Jackson <andrewj at bcm.tmc.edu>, thanks a bunch!
-2006-08-25 (0.4.2)
-  * Fixed a bug in handling solidi (/-characters), that was reported by
-    Kevin Gilpin <kevin.gilpin at alum.mit.edu>.
-2006-02-06 (0.4.1)
-  * Fixed a bug related to escaping with backslashes. Thanks for the report go
-    to Florian Munz <surf at theflow.de>.
-2005-09-23 (0.4.0)
-  * Initial Rubyforge Version
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/GPL b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/GPL
deleted file mode 100644
index 5b6e7c6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/GPL
+++ /dev/null
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/README b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/README
deleted file mode 100644
index 9b4f3be..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/README
+++ /dev/null
@@ -1,78 +0,0 @@
-Dependencies for Building
-=========================
-
-- You need rake to build the extensions and install them.
-
-  You can get it from rubyforge:
-    http://rubyforge.org/projects/rake
-
-  or just type
-
-  # gem install rake
-
-  for the installation via rubygems.
-
-- If you want to rebuild the parser.c file or draw nice graphviz images of the
-  state machines, you need ragel from:
-    http://www.cs.queensu.ca/~thurston/ragel
-
-Installation
-============
-
-It's recommended to use the extension variant of JSON, because it's quite a bit
-faster than the pure ruby variant. If you cannot build it on your system, you
-can settle for the latter.
-
-Just type into the command line as root:
-
-# rake install
-
-The above command will build the extensions and install them on your system.
-
-# rake install_pure
-
-or
-
-# ruby install.rb
-
-will just install the pure ruby implementation of JSON.
-
-If you use Rubygems you can type
-
-# gem install json
-
-instead, to install the newest JSON version.
-
-There is also a pure ruby json only variant of the gem, that can be installed
-with:
-
-# gem install json_pure
-
-Testing and Examples
-====================
-
-To run the tests type:
-
-$ rake test_ext
-
-This will build the extensions first and then test them.
-
-$ rake test_pure
-
-This will test the pure ruby extensions.
-
-There is also a small example in tools/server.rb if you want to see, how
-receiving a JSON object from a webrick server in your browser with the
-javasript prototype library (http://www.prototypejs.org) works.
-
-Author
-======
-
-Florian Frank <flori at ping.de>
-
-License
-=======
-
-Ruby License, see the RUBY file included in the source distribution. The Ruby
-License includes the GNU General Public License (GPL), Version 2, so see the
-file GPL as well.
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/RUBY b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/RUBY
deleted file mode 100644
index 4a99f6f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/RUBY
+++ /dev/null
@@ -1,58 +0,0 @@
-Ruby is copyrighted free software by Yukihiro Matsumoto <matz at netlab.co.jp>.
-You can redistribute it and/or modify it under either the terms of the GPL
-(see COPYING.txt file), or the conditions below:
-
-  1. You may make and give away verbatim copies of the source form of the
-     software without restriction, provided that you duplicate all of the
-     original copyright notices and associated disclaimers.
-
-  2. You may modify your copy of the software in any way, provided that
-     you do at least ONE of the following:
-
-       a) place your modifications in the Public Domain or otherwise
-          make them Freely Available, such as by posting said
-	  modifications to Usenet or an equivalent medium, or by allowing
-	  the author to include your modifications in the software.
-
-       b) use the modified software only within your corporation or
-          organization.
-
-       c) rename any non-standard executables so the names do not conflict
-	  with standard executables, which must also be provided.
-
-       d) make other distribution arrangements with the author.
-
-  3. You may distribute the software in object code or executable
-     form, provided that you do at least ONE of the following:
-
-       a) distribute the executables and library files of the software,
-	  together with instructions (in the manual page or equivalent)
-	  on where to get the original distribution.
-
-       b) accompany the distribution with the machine-readable source of
-	  the software.
-
-       c) give non-standard executables non-standard names, with
-          instructions on where to get the original software distribution.
-
-       d) make other distribution arrangements with the author.
-
-  4. You may modify and include the part of the software into any other
-     software (possibly commercial).  But some files in the distribution
-     are not written by the author, so that they are not under this terms.
-
-     They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
-     files under the ./missing directory.  See each file for the copying
-     condition.
-
-  5. The scripts and library files supplied as input to or produced as 
-     output from the software do not automatically fall under the
-     copyright of the software, but belong to whomever generated them, 
-     and may be sold commercially, and may be aggregated with this
-     software.
-
-  6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-     IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-     PURPOSE.
-
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/Rakefile b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/Rakefile
deleted file mode 100644
index b66de5b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/Rakefile
+++ /dev/null
@@ -1,309 +0,0 @@
-begin
-  require 'rake/gempackagetask'
-rescue LoadError
-end
-require 'rake/clean'
-
-require 'rbconfig'
-include Config
-
-ON_WINDOWS        = RUBY_PLATFORM =~ /mswin32/i 
-PKG_NAME          = 'json'
-PKG_VERSION       = File.read('VERSION').chomp
-PKG_FILES         = FileList["**/*"].exclude(/CVS|pkg|coverage|Makefile/).exclude(/\.(so|bundle|o|#{CONFIG['DLEXT']})$/)
-EXT_ROOT_DIR      = 'ext/json/ext'
-EXT_PARSER_DIR    = "#{EXT_ROOT_DIR}/parser"
-EXT_PARSER_DL     = "#{EXT_ROOT_DIR}/parser.#{CONFIG['DLEXT']}"
-EXT_PARSER_SRC    = "#{EXT_PARSER_DIR}/parser.c"
-PKG_FILES << EXT_PARSER_SRC
-EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
-EXT_GENERATOR_DL  = "#{EXT_ROOT_DIR}/generator.#{CONFIG['DLEXT']}"
-EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
-RAGEL_CODEGEN     = %w[rlcodegen rlgen-cd].find { |c| system(c, '-v') }
-RAGEL_DOTGEN      = %w[rlgen-dot rlgen-cd].find { |c| system(c, '-v') }
-RAGEL_PATH        = "#{EXT_PARSER_DIR}/parser.rl"
-CLEAN.include 'doc', 'coverage', FileList['diagrams/*.*'],
-  FileList["ext/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def}"],
-  FileList["ext/**/Makefile"]
-
-
-desc "Installing library (pure)"
-task :install_pure => :version do
-  ruby 'install.rb'
-end
-
-task :install_ext_really do
-  sitearchdir = CONFIG["sitearchdir"]
-  cd 'ext' do
-    for file in Dir["json/ext/*.#{CONFIG['DLEXT']}"]
-      d = File.join(sitearchdir, file)
-      mkdir_p File.dirname(d)
-      install(file, d)
-    end
-  end
-end
-
-desc "Installing library (extension)"
-task :install_ext => [ :compile, :install_pure, :install_ext_really ]
-
-task :install => :install_ext
-
-desc "Compiling extension"
-task :compile => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
-
-file EXT_PARSER_DL => EXT_PARSER_SRC do
-  cd EXT_PARSER_DIR do
-    ruby 'extconf.rb'
-    if ON_WINDOWS
-      sh 'nmake'
-      sh "mt -manifest parser.#{CONFIG['DLEXT']}.manifest -outputresource:parser.#{CONFIG['DLEXT']};2"
-    else
-      sh 'make'
-    end
-  end
-  cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
-end
-
-file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
-  cd EXT_GENERATOR_DIR do
-    ruby 'extconf.rb'
-    if ON_WINDOWS
-      sh 'nmake'
-      sh "mt -manifest generator.#{CONFIG['DLEXT']}.manifest -outputresource:generator.#{CONFIG['DLEXT']};2"
-    else
-      sh 'make'
-    end
-  end
-  cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
-end
-
-desc "Generate parser with ragel"
-task :ragel => EXT_PARSER_SRC
-
-task :ragel_clean do
-  rm_rf EXT_PARSER_SRC
-end
-
-file EXT_PARSER_SRC => RAGEL_PATH do
-  cd EXT_PARSER_DIR do
-    sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
-  end
-end
-
-desc "Generate diagrams of ragel parser (ps)"
-task :ragel_dot_ps do
-  root = 'diagrams'
-  specs = []
-  File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
-  for s in specs 
-    sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
-  end
-end
-
-desc "Generate diagrams of ragel parser (png)"
-task :ragel_dot_png do
-  root = 'diagrams'
-  specs = []
-  File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
-  for s in specs 
-    sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
-  end
-end
-
-desc "Generate diagrams of ragel parser"
-task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
-
-desc "Testing library (pure ruby)"
-task :test_pure => :clean do
-  ruby '-v -I lib tests/runner.rb'
-end
-
-desc "Testing library (extension)"
-task :test_ext => :compile do
-  ruby '-v -I ext:lib tests/runner.rb'
-end
-
-desc "Benchmarking parser (pure)"
-task :benchmark_parser_pure do
-  ruby '-I lib benchmarks/benchmark_parser.rb pure'
-end
-
-desc "Benchmarking generator (pure)"
-task :benchmark_generator_pure do
-  ruby '-I lib benchmarks/benchmark_generator.rb pure'
-  ruby 'benchmarks/benchmark_rails.rb'
-end
-
-desc "Benchmarking library (pure)"
-task :benchmark_pure => [ :benchmark_parser_pure, :benchmark_generator_pure ]
-
-desc "Benchmarking parser (extension)"
-task :benchmark_parser_ext => :compile do
-  ruby '-I ext:lib benchmarks/benchmark_parser.rb ext'
-end
-
-desc "Benchmarking generator (extension)"
-task :benchmark_generator_ext => :compile do
-  ruby '-I ext:lib benchmarks/benchmark_generator.rb ext'
-  ruby 'benchmarks/benchmark_rails.rb'
-end
-
-desc "Benchmarking library (extension)"
-task :benchmark_ext => [ :benchmark_parser_ext, :benchmark_generator_ext ]
-
-task :benchmark do
-  puts "Benchmarking extension variant"
-  Rake::Task[:benchmark_ext].invoke
-  puts "Benchmarking pure variant"
-  Rake::Task[:benchmark_pure].invoke
-end
-
-desc "Testing library with coverage" # XXX broken
-task :coverage do
-  system 'RUBYOPT="" rcov -x tests -Ilib tests/runner.rb'
-end
-
-desc "Create RDOC documentation"
-task :doc => [ :version, EXT_PARSER_SRC ] do
-  sh "rdoc -m JSON -S -o doc lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
-end
-
-if defined? Gem
-  spec_pure = Gem::Specification.new do |s|
-    s.name = 'json_pure'
-    s.version = PKG_VERSION
-    s.summary = "A JSON implementation in Ruby"
-    s.description = ""
-
-    s.files = PKG_FILES
-
-    s.require_path = 'lib'
-
-    s.bindir = "bin"
-    s.executables = ["edit_json.rb"]
-    s.default_executable = "edit_json.rb"
-
-    s.has_rdoc = true
-    s.rdoc_options <<
-      '--title' <<  'JSON -- A JSON implemention' <<
-      '--main' << 'JSON' << '--line-numbers'
-    s.test_files << 'tests/runner.rb'
-
-    s.author = "Florian Frank"
-    s.email = "flori at ping.de"
-    s.homepage = "http://json.rubyforge.org"
-    s.rubyforge_project = "json"
-  end
-
-  Rake::GemPackageTask.new(spec_pure) do |pkg|
-      pkg.need_tar = true
-      pkg.package_files += PKG_FILES
-  end
-
-  spec_ext = Gem::Specification.new do |s|
-    s.name = 'json'
-    s.version = PKG_VERSION
-    s.summary = "A JSON implementation as a Ruby extension"
-    s.description = ""
-
-    s.files = PKG_FILES
-
-    s.extensions <<
-      "#{EXT_PARSER_DIR}/extconf.rb" <<
-      "#{EXT_GENERATOR_DIR}/extconf.rb"
-
-    s.require_path = EXT_ROOT_DIR
-    s.require_paths << 'ext'
-    s.require_paths << 'lib'
-
-    s.bindir = "bin"
-    s.executables = ["edit_json.rb"]
-    s.default_executable = "edit_json.rb"
-
-    s.has_rdoc = true
-    s.rdoc_options <<
-      '--title' <<  'JSON -- A JSON implemention' <<
-      '--main' << 'JSON' << '--line-numbers'
-    s.test_files << 'tests/runner.rb'
-
-    s.author = "Florian Frank"
-    s.email = "flori at ping.de"
-    s.homepage = "http://json.rubyforge.org"
-    s.rubyforge_project = "json"
-  end
-
-  Rake::GemPackageTask.new(spec_ext) do |pkg|
-    pkg.need_tar = true
-    pkg.package_files += PKG_FILES
-  end
-
-  task :package_win => :compile do
-    mkdir_p 'pkg'
-    spec_win_ext = Gem::Specification.new do |s|
-      s.name = 'json'
-      s.platform = Gem::Platform::WIN32
-      s.version = PKG_VERSION
-      s.summary = "A JSON implementation as a Ruby extension"
-      s.description = ""
-
-      s.files = PKG_FILES.to_a <<
-        "#{EXT_ROOT_DIR}/parser.#{CONFIG['DLEXT']}" <<
-        "#{EXT_ROOT_DIR}/generator.#{CONFIG['DLEXT']}"
-
-      s.require_path = EXT_ROOT_DIR
-      s.require_paths << 'ext'
-      s.require_paths << 'lib'
-
-      s.bindir = "bin"
-      s.executables = ["edit_json.rb", "prettify_json.rb"]
-      s.default_executable = "edit_json.rb"
-
-      s.has_rdoc = true
-      s.rdoc_options <<
-        '--title' <<  'JSON -- A JSON implemention' <<
-        '--main' << 'JSON' << '--line-numbers'
-      s.test_files << 'tests/runner.rb'
-
-      s.author = "Florian Frank"
-      s.email = "flori at ping.de"
-      s.homepage = "http://json.rubyforge.org"
-      s.rubyforge_project = "json"
-    end
-
-    gem_file = "json-#{spec_win_ext.version}-#{spec_win_ext.platform}.gem"
-    Gem::Builder.new(spec_win_ext).build
-    mv gem_file, 'pkg'
-  end
-end
-
-task :mrproper => [ :ragel_clean, :clean ] do
-  for dir in [ EXT_PARSER_DIR, EXT_GENERATOR_DIR ]
-    cd(dir) {  rm_f 'Makefile' }
-  end
-end
-
-desc m = "Writing version information for #{PKG_VERSION}"
-task :version do
-  puts m
-  File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
-    v.puts <<EOT
-module JSON
-  # JSON version
-  VERSION         = '#{PKG_VERSION}'
-  VERSION_ARRAY   = VERSION.split(/\\./).map { |x| x.to_i } # :nodoc:
-  VERSION_MAJOR   = VERSION_ARRAY[0] # :nodoc:
-  VERSION_MINOR   = VERSION_ARRAY[1] # :nodoc:
-  VERSION_BUILD   = VERSION_ARRAY[2] # :nodoc:
-  VARIANT_BINARY  = #{!!ON_WINDOWS}
-end
-EOT
-  end
-end
-
-if ON_WINDOWS
-  task :release => [ :version, :clean, :package_win ]
-else
-  task :release => [ :version, :mrproper, :package ]
-end
-
-task :default => [ :version, :compile ]
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/TODO b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/TODO
deleted file mode 100644
index 8b13789..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/TODO
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/VERSION b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/VERSION
deleted file mode 100644
index 781dcb0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.1.3
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark.txt b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark.txt
deleted file mode 100644
index 255d9fc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark.txt
+++ /dev/null
@@ -1,133 +0,0 @@
-(in /home/flori/json)
-Ragel Code Generator version 5.17 January 2007
-Copyright (c) 2001-2006 by Adrian Thurston
-Benchmarking extension variant
-First run for warmup.
-Running 'BC_Parser' for a duration of 10 secs per method:
-              real      total      utime      stime     cutime     cstime
-parser:   10.005944  10.010000   9.970000   0.040000   0.000000   0.000000
-              5091  508.591409    0.001966
-             calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Parser' for a duration of 10 secs per method:
-              real      total      utime      stime     cutime     cstime
-parser:   10.006881  10.000000   9.950000   0.050000   0.000000   0.000000
-              5055  505.500000    0.001978
-             calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-
-[null,false,true,"f\u00d6\u00df\u00c4r",["n\u20acst\u20acd",true],{"quux":true,"foo\u00df":"b\u00e4r"}]
-First run for warmup.
-Running 'BC_Generator' for a duration of 10 secs per method:
-                        real      total      utime      stime     cutime     cstime
-generator_pretty:   10.001066  10.010000   9.990000   0.020000   0.000000   0.000000
-                        3492  348.851149    0.002867
-generator_fast  :   10.002910  10.000000   9.980000   0.020000   0.000000   0.000000
-                        5416  541.600000    0.001846
-generator_safe  :   10.003107  10.010000  10.000000   0.010000   0.000000   0.000000
-                        4926  492.107892    0.002032
-                       calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Generator' for a duration of 10 secs per method:
-                        real      total      utime      stime     cutime     cstime
-generator_pretty:   10.009150  10.010000  10.010000   0.000000   0.000000   0.000000
-                        3511  350.749251    0.002851
-generator_fast  :   10.014407  10.020000  10.020000   0.000000   0.000000   0.000000
-                        5411  540.019960    0.001852
-generator_safe  :   10.010055  10.000000  10.000000   0.000000   0.000000   0.000000
-                        4933  493.300000    0.002027
-                       calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-Comparison in BC_Generator:
-                  secs/call     speed
-generator_fast  :    0.002 ->    1.540x
-generator_safe  :    0.002 ->    1.406x
-generator_pretty:    0.003 ->    1.000x
---------------------------------------------------------------------------------
-
-[null, false, true, "f\u00d6\u00df\u00c4r", ["n\u20acst\u20acd", true], {quux: true, "foo\u00df": "b\u00e4r"}]
-First run for warmup.
-Running 'BC_Rails' for a duration of 10 secs per method:
-                 real      total      utime      stime     cutime     cstime
-generator:   10.026043  10.020000  10.020000   0.000000   0.000000   0.000000
-                  239   23.852295    0.041925
-                calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Rails' for a duration of 10 secs per method:
-                 real      total      utime      stime     cutime     cstime
-generator:   10.010931  10.020000  10.010000   0.010000   0.000000   0.000000
-                  238   23.752495    0.042101
-                calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-
-Benchmarking pure variant
-First run for warmup.
-Running 'BC_Parser' for a duration of 10 secs per method:
-              real      total      utime      stime     cutime     cstime
-parser:   10.022352  10.030000  10.020000   0.010000   0.000000   0.000000
-               288   28.713858    0.034826
-             calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Parser' for a duration of 10 secs per method:
-              real      total      utime      stime     cutime     cstime
-parser:   10.006552  10.000000  10.000000   0.000000   0.000000   0.000000
-               289   28.900000    0.034602
-             calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-
-[null,false,true,"f\u00d6\u00df\u00c4r",["n\u20acst\u20acd",true],{"quux":true,"foo\u00df":"b\u00e4r"}]
-First run for warmup.
-Running 'BC_Generator' for a duration of 10 secs per method:
-                        real      total      utime      stime     cutime     cstime
-generator_fast  :   10.011644  10.010000  10.010000   0.000000   0.000000   0.000000
-                         411   41.058941    0.024355
-generator_safe  :   10.007100  10.010000  10.010000   0.000000   0.000000   0.000000
-                         352   35.164835    0.028438
-generator_pretty:   10.008156  10.010000  10.010000   0.000000   0.000000   0.000000
-                         341   34.065934    0.029355
-                       calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Generator' for a duration of 10 secs per method:
-                        real      total      utime      stime     cutime     cstime
-generator_fast  :   10.005185  10.010000  10.010000   0.000000   0.000000   0.000000
-                         411   41.058941    0.024355
-generator_safe  :   10.006932  10.010000  10.010000   0.000000   0.000000   0.000000
-                         351   35.064935    0.028519
-generator_pretty:   10.007414  10.000000  10.000000   0.000000   0.000000   0.000000
-                         340   34.000000    0.029412
-                       calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-Comparison in BC_Generator:
-                  secs/call     speed
-generator_fast  :    0.024 ->    1.208x
-generator_safe  :    0.029 ->    1.031x
-generator_pretty:    0.029 ->    1.000x
---------------------------------------------------------------------------------
-
-[null, false, true, "f\u00d6\u00df\u00c4r", ["n\u20acst\u20acd", true], {quux: true, "foo\u00df": "b\u00e4r"}]
-First run for warmup.
-Running 'BC_Rails' for a duration of 10 secs per method:
-                 real      total      utime      stime     cutime     cstime
-generator:   10.005748  10.000000  10.000000   0.000000   0.000000   0.000000
-                  240   24.000000    0.041667
-                calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-Running 'BC_Rails' for a duration of 10 secs per method:
-                 real      total      utime      stime     cutime     cstime
-generator:   10.006764  10.010000  10.010000   0.000000   0.000000   0.000000
-                  239   23.876124    0.041883
-                calls   calls/sec   secs/call
---------------------------------------------------------------------------------
-================================================================================
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_generator.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_generator.rb
deleted file mode 100755
index f0173bc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_generator.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'bullshit'
-$KCODE='utf8'
-if ARGV.shift == 'pure'
-  require 'json/pure'
-else
-  require 'json/ext'
-end
-
-class BC_Generator < Bullshit::TimeCase
-  include JSON
-
-  warmup    true
-  duration  10
-
-  def setup
-    a = [ nil, false, true, "fÖßÄr", [ "n€st€d", true ], { "fooß" => "bär", "quux" => true } ]
-    puts JSON[a]
-    @big = a * 100
-  end
-
-  def benchmark_generator_fast
-    @result = JSON.fast_generate(@big)
-  end
-
-  def reset_benchmark_generator_fast
-    @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
-  end
-
-  def benchmark_generator_safe
-    @result = JSON.generate(@big)
-  end
-
-  def reset_benchmark_generator_safe
-    @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
-  end
-
-  def benchmark_generator_pretty
-    @result = JSON.pretty_generate(@big)
-  end
-
-  def reset_benchmark_generator_pretty
-    @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
-  end
-
-  compare :generator_fast, :generator_safe, :generator_pretty
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_parser.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_parser.rb
deleted file mode 100755
index 486cbaa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_parser.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'bullshit'
-if ARGV.shift == 'pure'
-  require 'json/pure'
-else
-  require 'json/ext'
-end
-
-class BC_Parser < Bullshit::TimeCase
-  include JSON
-
-  warmup    true
-  duration  10
-
-  def setup
-    a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
-    @big = a * 100
-    @json = JSON.generate(@big)
-  end
-
-  def benchmark_parser
-    a = JSON.parse(@json)
-    a == @big or raise "not equal"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_rails.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_rails.rb
deleted file mode 100755
index a9afb0d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/benchmarks/benchmark_rails.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'bullshit'
-require 'active_support'
-
-class BC_Rails < Bullshit::TimeCase
-  warmup    true
-  duration  10
-
-  def setup
-    a = [ nil, false, true, "fÖßÄr", [ "n€st€d", true ], { "fooß" => "bär", "quux" => true } ]
-    puts a.to_json
-    @big = a * 100
-  end
-
-  def benchmark_generator
-    @result = @big.to_json
-  end
-
-  def reset_benchmark_generator
-    @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
-    if stack = Thread.current[:json_reference_stack]
-      stack.clear
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/bin/edit_json.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/bin/edit_json.rb
deleted file mode 100755
index 076ed4a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/bin/edit_json.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env ruby
-$KCODE = 'U'
-require 'json/editor'
-
-filename, encoding = ARGV
-JSON::Editor.start(encoding) do |window|
-  if filename
-    window.file_open(filename)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/bin/prettify_json.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/bin/prettify_json.rb
deleted file mode 100755
index 2f9a583..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/bin/prettify_json.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env ruby
-
-$KCODE = 'U'
-require 'json'
-require 'fileutils'
-include FileUtils
-
-# Parses the argument array _args_, according to the pattern _s_, to
-# retrieve the single character command line options from it. If _s_ is
-# 'xy:' an option '-x' without an option argument is searched, and an
-# option '-y foo' with an option argument ('foo').
-#
-# An option hash is returned with all found options set to true or the
-# found option argument.
-def go(s, args = ARGV)
-  b, v = s.scan(/(.)(:?)/).inject([{},{}]) { |t,(o,a)|
-    t[a.empty? ? 0 : 1][o] = a.empty? ? false : nil
-    t
-  }
-  while a = args.shift
-    a !~ /\A-(.+)/ and args.unshift a and break
-    p = $1
-    until p == ''
-      o = p.slice!(0, 1)
-      if v.key?(o)
-        v[o] = if p == '' then args.shift or break 1 else p end
-        break
-      elsif b.key?(o)
-        b[o] = true
-      else
-        args.unshift a
-        break 1
-      end
-    end and break
-  end
-  b.merge(v)
-end
-
-opts = go 'slhi:', args = ARGV.dup
-if opts['h'] || opts['l'] && opts['s']
-  puts <<EOT
-Usage: #{File.basename($0)} [OPTION] [FILE]
-
-If FILE is skipped, this scripts waits for input from STDIN. Otherwise
-FILE is opened, read, and used as input for the prettifier.
-
-OPTION can be
-  -s     to output the shortest possible JSON (precludes -l)
-  -l     to output a longer, better formatted JSON (precludes -s)
-  -i EXT prettifies FILE in place, saving a backup to FILE.EXT
-  -h     this help
-EOT
-  exit 0
-end
-
-filename = nil
-json = JSON[
-  if args.empty?
-    STDIN.read
-  else
-    File.read filename = args.first
-  end
-]
-
-output = if opts['s']
-  JSON.fast_generate json
-else # default is -l
-  JSON.pretty_generate json
-end
-
-if opts['i'] && filename
-  cp filename, "#{filename}.#{opts['i']}"
-  File.open(filename, 'w') { |f| f.puts output }
-else
-  puts output
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/example.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/example.json
deleted file mode 100644
index 88b4e82..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/example.json
+++ /dev/null
@@ -1 +0,0 @@
-{"a":2,"b":3.141,"TIME":"2007-03-14T11:52:40","c":"c","d":[1,"b",3.14],"COUNT":666,"e":{"foo":"bar"},"foo":"B\u00e4r","g":"\u677e\u672c\u884c\u5f18","h":1000.0,"bar":"\u00a9 \u2260 \u20ac!","i":0.001,"j":"\ud840\udc01"}
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/index.html b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/index.html
deleted file mode 100644
index abe6fdb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/index.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-  <head>
-    <title>Javascript Example</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>    
-    <script src="prototype.js" type="text/javascript"></script>
-  </head>
-
-  <body>
-    <h1>Fetching object from server</h1>
-    <div id="list">
-      Wait...<br/>
-      <noscript><p>Switch on Javascript!</p></noscript>
-    </div>
-    <script type="text/javascript">
-    <!--
-    function pollJSON() {
-      new Ajax.Request('/json',
-        {
-          method: 'get',
-          onSuccess: function(transport) {
-            var response = transport.responseText || "no response text";
-            response = eval("(" + response + ")");
-            var text = "";
-            for (var k in response) {
-              text = text + "<b>" + k + "</b>: " + response[k] + "<br/>"
-            }
-            $("list").update(text);
-          },
-          onFailure: function() { alert('Something went wrong...') }
-        });
-    }
-    new PeriodicalExecuter(pollJSON, 1);
-    -->
-    </script>
-  </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/prototype.js b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/prototype.js
deleted file mode 100644
index 5c73462..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/data/prototype.js
+++ /dev/null
@@ -1,4184 +0,0 @@
-/*  Prototype JavaScript framework, version 1.6.0
- *  (c) 2005-2007 Sam Stephenson
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://www.prototypejs.org/
- *
- *--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.6.0',
-
-  Browser: {
-    IE:     !!(window.attachEvent && !window.opera),
-    Opera:  !!window.opera,
-    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
-    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
-    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
-  },
-
-  BrowserFeatures: {
-    XPath: !!document.evaluate,
-    ElementExtensions: !!window.HTMLElement,
-    SpecificElementExtensions:
-      document.createElement('div').__proto__ &&
-      document.createElement('div').__proto__ !==
-        document.createElement('form').__proto__
-  },
-
-  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
-  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
-
-  emptyFunction: function() { },
-  K: function(x) { return x }
-};
-
-if (Prototype.Browser.MobileSafari)
-  Prototype.BrowserFeatures.SpecificElementExtensions = false;
-
-if (Prototype.Browser.WebKit)
-  Prototype.BrowserFeatures.XPath = false;
-
-/* Based on Alex Arnell's inheritance implementation. */
-var Class = {
-  create: function() {
-    var parent = null, properties = $A(arguments);
-    if (Object.isFunction(properties[0]))
-      parent = properties.shift();
-
-    function klass() {
-      this.initialize.apply(this, arguments);
-    }
-
-    Object.extend(klass, Class.Methods);
-    klass.superclass = parent;
-    klass.subclasses = [];
-
-    if (parent) {
-      var subclass = function() { };
-      subclass.prototype = parent.prototype;
-      klass.prototype = new subclass;
-      parent.subclasses.push(klass);
-    }
-
-    for (var i = 0; i < properties.length; i++)
-      klass.addMethods(properties[i]);
-
-    if (!klass.prototype.initialize)
-      klass.prototype.initialize = Prototype.emptyFunction;
-
-    klass.prototype.constructor = klass;
-
-    return klass;
-  }
-};
-
-Class.Methods = {
-  addMethods: function(source) {
-    var ancestor   = this.superclass && this.superclass.prototype;
-    var properties = Object.keys(source);
-
-    if (!Object.keys({ toString: true }).length)
-      properties.push("toString", "valueOf");
-
-    for (var i = 0, length = properties.length; i < length; i++) {
-      var property = properties[i], value = source[property];
-      if (ancestor && Object.isFunction(value) &&
-          value.argumentNames().first() == "$super") {
-        var method = value, value = Object.extend((function(m) {
-          return function() { return ancestor[m].apply(this, arguments) };
-        })(property).wrap(method), {
-          valueOf:  function() { return method },
-          toString: function() { return method.toString() }
-        });
-      }
-      this.prototype[property] = value;
-    }
-
-    return this;
-  }
-};
-
-var Abstract = { };
-
-Object.extend = function(destination, source) {
-  for (var property in source)
-    destination[property] = source[property];
-  return destination;
-};
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (object === undefined) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : object.toString();
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  toJSON: function(object) {
-    var type = typeof object;
-    switch (type) {
-      case 'undefined':
-      case 'function':
-      case 'unknown': return;
-      case 'boolean': return object.toString();
-    }
-
-    if (object === null) return 'null';
-    if (object.toJSON) return object.toJSON();
-    if (Object.isElement(object)) return;
-
-    var results = [];
-    for (var property in object) {
-      var value = Object.toJSON(object[property]);
-      if (value !== undefined)
-        results.push(property.toJSON() + ': ' + value);
-    }
-
-    return '{' + results.join(', ') + '}';
-  },
-
-  toQueryString: function(object) {
-    return $H(object).toQueryString();
-  },
-
-  toHTML: function(object) {
-    return object && object.toHTML ? object.toHTML() : String.interpret(object);
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({ }, object);
-  },
-
-  isElement: function(object) {
-    return object && object.nodeType == 1;
-  },
-
-  isArray: function(object) {
-    return object && object.constructor === Array;
-  },
-
-  isHash: function(object) {
-    return object instanceof Hash;
-  },
-
-  isFunction: function(object) {
-    return typeof object == "function";
-  },
-
-  isString: function(object) {
-    return typeof object == "string";
-  },
-
-  isNumber: function(object) {
-    return typeof object == "number";
-  },
-
-  isUndefined: function(object) {
-    return typeof object == "undefined";
-  }
-});
-
-Object.extend(Function.prototype, {
-  argumentNames: function() {
-    var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
-    return names.length == 1 && !names[0] ? [] : names;
-  },
-
-  bind: function() {
-    if (arguments.length < 2 && arguments[0] === undefined) return this;
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function() {
-      return __method.apply(object, args.concat($A(arguments)));
-    }
-  },
-
-  bindAsEventListener: function() {
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function(event) {
-      return __method.apply(object, [event || window.event].concat(args));
-    }
-  },
-
-  curry: function() {
-    if (!arguments.length) return this;
-    var __method = this, args = $A(arguments);
-    return function() {
-      return __method.apply(this, args.concat($A(arguments)));
-    }
-  },
-
-  delay: function() {
-    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
-    return window.setTimeout(function() {
-      return __method.apply(__method, args);
-    }, timeout);
-  },
-
-  wrap: function(wrapper) {
-    var __method = this;
-    return function() {
-      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
-    }
-  },
-
-  methodize: function() {
-    if (this._methodized) return this._methodized;
-    var __method = this;
-    return this._methodized = function() {
-      return __method.apply(null, [this].concat($A(arguments)));
-    };
-  }
-});
-
-Function.prototype.defer = Function.prototype.delay.curry(0.01);
-
-Date.prototype.toJSON = function() {
-  return '"' + this.getUTCFullYear() + '-' +
-    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
-    this.getUTCDate().toPaddedString(2) + 'T' +
-    this.getUTCHours().toPaddedString(2) + ':' +
-    this.getUTCMinutes().toPaddedString(2) + ':' +
-    this.getUTCSeconds().toPaddedString(2) + 'Z"';
-};
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) { }
-    }
-
-    return returnValue;
-  }
-};
-
-RegExp.prototype.match = RegExp.prototype.test;
-
-RegExp.escape = function(str) {
-  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
-};
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create({
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  execute: function() {
-    this.callback(this);
-  },
-
-  stop: function() {
-    if (!this.timer) return;
-    clearInterval(this.timer);
-    this.timer = null;
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.execute();
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-});
-Object.extend(String, {
-  interpret: function(value) {
-    return value == null ? '' : String(value);
-  },
-  specialChar: {
-    '\b': '\\b',
-    '\t': '\\t',
-    '\n': '\\n',
-    '\f': '\\f',
-    '\r': '\\r',
-    '\\': '\\\\'
-  }
-});
-
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
-    var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
-
-    while (source.length > 0) {
-      if (match = source.match(pattern)) {
-        result += source.slice(0, match.index);
-        result += String.interpret(replacement(match));
-        source  = source.slice(match.index + match[0].length);
-      } else {
-        result += source, source = '';
-      }
-    }
-    return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
-    count = count === undefined ? 1 : count;
-
-    return this.gsub(pattern, function(match) {
-      if (--count < 0) return match[0];
-      return replacement(match);
-    });
-  },
-
-  scan: function(pattern, iterator) {
-    this.gsub(pattern, iterator);
-    return String(this);
-  },
-
-  truncate: function(length, truncation) {
-    length = length || 30;
-    truncation = truncation === undefined ? '...' : truncation;
-    return this.length > length ?
-      this.slice(0, length - truncation.length) + truncation : String(this);
-  },
-
-  strip: function() {
-    return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var self = arguments.callee;
-    self.text.data = this;
-    return self.div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = new Element('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
-    var match = this.strip().match(/([^?#]*)(#.*)?$/);
-    if (!match) return { };
-
-    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
-      if ((pair = pair.split('='))[0]) {
-        var key = decodeURIComponent(pair.shift());
-        var value = pair.length > 1 ? pair.join('=') : pair[0];
-        if (value != undefined) value = decodeURIComponent(value);
-
-        if (key in hash) {
-          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
-          hash[key].push(value);
-        }
-        else hash[key] = value;
-      }
-      return hash;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  succ: function() {
-    return this.slice(0, this.length - 1) +
-      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  times: function(count) {
-    return count < 1 ? '' : new Array(count + 1).join(this);
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function() {
-    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
-      var character = String.specialChar[match[0]];
-      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
-    });
-    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
-    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  },
-
-  toJSON: function() {
-    return this.inspect(true);
-  },
-
-  unfilterJSON: function(filter) {
-    return this.sub(filter || Prototype.JSONFilter, '#{1}');
-  },
-
-  isJSON: function() {
-    var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
-    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
-  },
-
-  evalJSON: function(sanitize) {
-    var json = this.unfilterJSON();
-    try {
-      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
-    } catch (e) { }
-    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
-  },
-
-  include: function(pattern) {
-    return this.indexOf(pattern) > -1;
-  },
-
-  startsWith: function(pattern) {
-    return this.indexOf(pattern) === 0;
-  },
-
-  endsWith: function(pattern) {
-    var d = this.length - pattern.length;
-    return d >= 0 && this.lastIndexOf(pattern) === d;
-  },
-
-  empty: function() {
-    return this == '';
-  },
-
-  blank: function() {
-    return /^\s*$/.test(this);
-  },
-
-  interpolate: function(object, pattern) {
-    return new Template(this, pattern).evaluate(object);
-  }
-});
-
-if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
-  escapeHTML: function() {
-    return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
-  },
-  unescapeHTML: function() {
-    return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (Object.isFunction(replacement)) return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-};
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-Object.extend(String.prototype.escapeHTML, {
-  div:  document.createElement('div'),
-  text: document.createTextNode('')
-});
-
-with (String.prototype.escapeHTML) div.appendChild(text);
-
-var Template = Class.create({
-  initialize: function(template, pattern) {
-    this.template = template.toString();
-    this.pattern = pattern || Template.Pattern;
-  },
-
-  evaluate: function(object) {
-    if (Object.isFunction(object.toTemplateReplacements))
-      object = object.toTemplateReplacements();
-
-    return this.template.gsub(this.pattern, function(match) {
-      if (object == null) return '';
-
-      var before = match[1] || '';
-      if (before == '\\') return match[2];
-
-      var ctx = object, expr = match[3];
-      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
-      if (match == null) return before;
-
-      while (match != null) {
-        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
-        ctx = ctx[comp];
-        if (null == ctx || '' == match[3]) break;
-        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
-        match = pattern.exec(expr);
-      }
-
-      return before + String.interpret(ctx);
-    }.bind(this));
-  }
-});
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-
-var $break = { };
-
-var Enumerable = {
-  each: function(iterator, context) {
-    var index = 0;
-    iterator = iterator.bind(context);
-    try {
-      this._each(function(value) {
-        iterator(value, index++);
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-    return this;
-  },
-
-  eachSlice: function(number, iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var index = -number, slices = [], array = this.toArray();
-    while ((index += number) < array.length)
-      slices.push(array.slice(index, index+number));
-    return slices.collect(iterator, context);
-  },
-
-  all: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!iterator(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result = false;
-    this.each(function(value, index) {
-      if (result = !!iterator(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var results = [];
-    this.each(function(value, index) {
-      results.push(iterator(value, index));
-    });
-    return results;
-  },
-
-  detect: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(filter, iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var results = [];
-
-    if (Object.isString(filter))
-      filter = new RegExp(filter);
-
-    this.each(function(value, index) {
-      if (filter.match(value))
-        results.push(iterator(value, index));
-    });
-    return results;
-  },
-
-  include: function(object) {
-    if (Object.isFunction(this.indexOf))
-      if (this.indexOf(object) != -1) return true;
-
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
-    fillWith = fillWith === undefined ? null : fillWith;
-    return this.eachSlice(number, function(slice) {
-      while(slice.length < number) slice.push(fillWith);
-      return slice;
-    });
-  },
-
-  inject: function(memo, iterator, context) {
-    iterator = iterator.bind(context);
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.map(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result;
-    this.each(function(value, index) {
-      value = iterator(value, index);
-      if (result == undefined || value >= result)
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result;
-    this.each(function(value, index) {
-      value = iterator(value, index);
-      if (result == undefined || value < result)
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      (iterator(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator, context) {
-    iterator = iterator.bind(context);
-    return this.map(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.map();
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (Object.isFunction(args.last()))
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      return iterator(collections.pluck(index));
-    });
-  },
-
-  size: function() {
-    return this.toArray().length;
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-};
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  filter:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray,
-  every:   Enumerable.all,
-  some:    Enumerable.any
-});
-function $A(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) return iterable.toArray();
-  var length = iterable.length, results = new Array(length);
-  while (length--) results[length] = iterable[length];
-  return results;
-}
-
-if (Prototype.Browser.WebKit) {
-  function $A(iterable) {
-    if (!iterable) return [];
-    if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
-        iterable.toArray) return iterable.toArray();
-    var length = iterable.length, results = new Array(length);
-    while (length--) results[length] = iterable[length];
-    return results;
-  }
-}
-
-Array.from = $A;
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(Object.isArray(value) ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function(sorted) {
-    return this.inject([], function(array, value, index) {
-      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
-        array.push(value);
-      return array;
-    });
-  },
-
-  intersect: function(array) {
-    return this.uniq().findAll(function(item) {
-      return array.detect(function(value) { return item === value });
-    });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
-    return this.length;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  },
-
-  toJSON: function() {
-    var results = [];
-    this.each(function(object) {
-      var value = Object.toJSON(object);
-      if (value !== undefined) results.push(value);
-    });
-    return '[' + results.join(', ') + ']';
-  }
-});
-
-// use native browser JS 1.6 implementation if available
-if (Object.isFunction(Array.prototype.forEach))
-  Array.prototype._each = Array.prototype.forEach;
-
-if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
-  i || (i = 0);
-  var length = this.length;
-  if (i < 0) i = length + i;
-  for (; i < length; i++)
-    if (this[i] === item) return i;
-  return -1;
-};
-
-if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
-  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
-  var n = this.slice(0, i).reverse().indexOf(item);
-  return (n < 0) ? n : i - n - 1;
-};
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string) {
-  if (!Object.isString(string)) return [];
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if (Prototype.Browser.Opera){
-  Array.prototype.concat = function() {
-    var array = [];
-    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      if (Object.isArray(arguments[i])) {
-        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
-      } else {
-        array.push(arguments[i]);
-      }
-    }
-    return array;
-  };
-}
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    return this.toPaddedString(2, 16);
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  },
-
-  toPaddedString: function(length, radix) {
-    var string = this.toString(radix || 10);
-    return '0'.times(length - string.length) + string;
-  },
-
-  toJSON: function() {
-    return isFinite(this) ? this.toString() : 'null';
-  }
-});
-
-$w('abs round ceil floor').each(function(method){
-  Number.prototype[method] = Math[method].methodize();
-});
-function $H(object) {
-  return new Hash(object);
-};
-
-var Hash = Class.create(Enumerable, (function() {
-  if (function() {
-    var i = 0, Test = function(value) { this.key = value };
-    Test.prototype.key = 'foo';
-    for (var property in new Test('bar')) i++;
-    return i > 1;
-  }()) {
-    function each(iterator) {
-      var cache = [];
-      for (var key in this._object) {
-        var value = this._object[key];
-        if (cache.include(key)) continue;
-        cache.push(key);
-        var pair = [key, value];
-        pair.key = key;
-        pair.value = value;
-        iterator(pair);
-      }
-    }
-  } else {
-    function each(iterator) {
-      for (var key in this._object) {
-        var value = this._object[key], pair = [key, value];
-        pair.key = key;
-        pair.value = value;
-        iterator(pair);
-      }
-    }
-  }
-
-  function toQueryPair(key, value) {
-    if (Object.isUndefined(value)) return key;
-    return key + '=' + encodeURIComponent(String.interpret(value));
-  }
-
-  return {
-    initialize: function(object) {
-      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
-    },
-
-    _each: each,
-
-    set: function(key, value) {
-      return this._object[key] = value;
-    },
-
-    get: function(key) {
-      return this._object[key];
-    },
-
-    unset: function(key) {
-      var value = this._object[key];
-      delete this._object[key];
-      return value;
-    },
-
-    toObject: function() {
-      return Object.clone(this._object);
-    },
-
-    keys: function() {
-      return this.pluck('key');
-    },
-
-    values: function() {
-      return this.pluck('value');
-    },
-
-    index: function(value) {
-      var match = this.detect(function(pair) {
-        return pair.value === value;
-      });
-      return match && match.key;
-    },
-
-    merge: function(object) {
-      return this.clone().update(object);
-    },
-
-    update: function(object) {
-      return new Hash(object).inject(this, function(result, pair) {
-        result.set(pair.key, pair.value);
-        return result;
-      });
-    },
-
-    toQueryString: function() {
-      return this.map(function(pair) {
-        var key = encodeURIComponent(pair.key), values = pair.value;
-
-        if (values && typeof values == 'object') {
-          if (Object.isArray(values))
-            return values.map(toQueryPair.curry(key)).join('&');
-        }
-        return toQueryPair(key, values);
-      }).join('&');
-    },
-
-    inspect: function() {
-      return '#<Hash:{' + this.map(function(pair) {
-        return pair.map(Object.inspect).join(': ');
-      }).join(', ') + '}>';
-    },
-
-    toJSON: function() {
-      return Object.toJSON(this.toObject());
-    },
-
-    clone: function() {
-      return new Hash(this);
-    }
-  }
-})());
-
-Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
-Hash.from = $H;
-var ObjectRange = Class.create(Enumerable, {
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    while (this.include(value)) {
-      iterator(value);
-      value = value.succ();
-    }
-  },
-
-  include: function(value) {
-    if (value < this.start)
-      return false;
-    if (this.exclusive)
-      return value < this.end;
-    return value <= this.end;
-  }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-};
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new XMLHttpRequest()},
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-};
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responder) {
-    if (!this.include(responder))
-      this.responders.push(responder);
-  },
-
-  unregister: function(responder) {
-    this.responders = this.responders.without(responder);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (Object.isFunction(responder[callback])) {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) { }
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate:   function() { Ajax.activeRequestCount++ },
-  onComplete: function() { Ajax.activeRequestCount-- }
-});
-
-Ajax.Base = Class.create({
-  initialize: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      contentType:  'application/x-www-form-urlencoded',
-      encoding:     'UTF-8',
-      parameters:   '',
-      evalJSON:     true,
-      evalJS:       true
-    };
-    Object.extend(this.options, options || { });
-
-    this.options.method = this.options.method.toLowerCase();
-    if (Object.isString(this.options.parameters))
-      this.options.parameters = this.options.parameters.toQueryParams();
-  }
-});
-
-Ajax.Request = Class.create(Ajax.Base, {
-  _complete: false,
-
-  initialize: function($super, url, options) {
-    $super(options);
-    this.transport = Ajax.getTransport();
-    this.request(url);
-  },
-
-  request: function(url) {
-    this.url = url;
-    this.method = this.options.method;
-    var params = Object.clone(this.options.parameters);
-
-    if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
-      this.method = 'post';
-    }
-
-    this.parameters = params;
-
-    if (params = Object.toQueryString(params)) {
-      // when GET, append parameters to URL
-      if (this.method == 'get')
-        this.url += (this.url.include('?') ? '&' : '?') + params;
-      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-        params += '&_=';
-    }
-
-    try {
-      var response = new Ajax.Response(this);
-      if (this.options.onCreate) this.options.onCreate(response);
-      Ajax.Responders.dispatch('onCreate', this, response);
-
-      this.transport.open(this.method.toUpperCase(), this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
-
-      this.transport.onreadystatechange = this.onStateChange.bind(this);
-      this.setRequestHeaders();
-
-      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
-      this.transport.send(this.body);
-
-      /* Force Firefox to handle ready state 4 for synchronous requests */
-      if (!this.options.asynchronous && this.transport.overrideMimeType)
-        this.onStateChange();
-
-    }
-    catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState > 1 && !((readyState == 4) && this._complete))
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  setRequestHeaders: function() {
-    var headers = {
-      'X-Requested-With': 'XMLHttpRequest',
-      'X-Prototype-Version': Prototype.Version,
-      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
-    };
-
-    if (this.method == 'post') {
-      headers['Content-type'] = this.options.contentType +
-        (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
-      /* Force "Connection: close" for older Mozilla browsers to work
-       * around a bug where XMLHttpRequest sends an incorrect
-       * Content-length header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType &&
-          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
-            headers['Connection'] = 'close';
-    }
-
-    // user-defined headers
-    if (typeof this.options.requestHeaders == 'object') {
-      var extras = this.options.requestHeaders;
-
-      if (Object.isFunction(extras.push))
-        for (var i = 0, length = extras.length; i < length; i += 2)
-          headers[extras[i]] = extras[i+1];
-      else
-        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
-    }
-
-    for (var name in headers)
-      this.transport.setRequestHeader(name, headers[name]);
-  },
-
-  success: function() {
-    var status = this.getStatus();
-    return !status || (status >= 200 && status < 300);
-  },
-
-  getStatus: function() {
-    try {
-      return this.transport.status || 0;
-    } catch (e) { return 0 }
-  },
-
-  respondToReadyState: function(readyState) {
-    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
-
-    if (state == 'Complete') {
-      try {
-        this._complete = true;
-        (this.options['on' + response.status]
-         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(response, response.headerJSON);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      var contentType = response.getHeader('Content-type');
-      if (this.options.evalJS == 'force'
-          || (this.options.evalJS && contentType
-          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
-        this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
-      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-    }
-  },
-
-  getHeader: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) { return null }
-  },
-
-  evalResponse: function() {
-    try {
-      return eval((this.transport.responseText || '').unfilterJSON());
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Response = Class.create({
-  initialize: function(request){
-    this.request = request;
-    var transport  = this.transport  = request.transport,
-        readyState = this.readyState = transport.readyState;
-
-    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
-      this.status       = this.getStatus();
-      this.statusText   = this.getStatusText();
-      this.responseText = String.interpret(transport.responseText);
-      this.headerJSON   = this._getHeaderJSON();
-    }
-
-    if(readyState == 4) {
-      var xml = transport.responseXML;
-      this.responseXML  = xml === undefined ? null : xml;
-      this.responseJSON = this._getResponseJSON();
-    }
-  },
-
-  status:      0,
-  statusText: '',
-
-  getStatus: Ajax.Request.prototype.getStatus,
-
-  getStatusText: function() {
-    try {
-      return this.transport.statusText || '';
-    } catch (e) { return '' }
-  },
-
-  getHeader: Ajax.Request.prototype.getHeader,
-
-  getAllHeaders: function() {
-    try {
-      return this.getAllResponseHeaders();
-    } catch (e) { return null }
-  },
-
-  getResponseHeader: function(name) {
-    return this.transport.getResponseHeader(name);
-  },
-
-  getAllResponseHeaders: function() {
-    return this.transport.getAllResponseHeaders();
-  },
-
-  _getHeaderJSON: function() {
-    var json = this.getHeader('X-JSON');
-    if (!json) return null;
-    json = decodeURIComponent(escape(json));
-    try {
-      return json.evalJSON(this.request.options.sanitizeJSON);
-    } catch (e) {
-      this.request.dispatchException(e);
-    }
-  },
-
-  _getResponseJSON: function() {
-    var options = this.request.options;
-    if (!options.evalJSON || (options.evalJSON != 'force' &&
-      !(this.getHeader('Content-type') || '').include('application/json')))
-        return null;
-    try {
-      return this.transport.responseText.evalJSON(options.sanitizeJSON);
-    } catch (e) {
-      this.request.dispatchException(e);
-    }
-  }
-});
-
-Ajax.Updater = Class.create(Ajax.Request, {
-  initialize: function($super, container, url, options) {
-    this.container = {
-      success: (container.success || container),
-      failure: (container.failure || (container.success ? null : container))
-    };
-
-    options = options || { };
-    var onComplete = options.onComplete;
-    options.onComplete = (function(response, param) {
-      this.updateContent(response.responseText);
-      if (Object.isFunction(onComplete)) onComplete(response, param);
-    }).bind(this);
-
-    $super(url, options);
-  },
-
-  updateContent: function(responseText) {
-    var receiver = this.container[this.success() ? 'success' : 'failure'],
-        options = this.options;
-
-    if (!options.evalScripts) responseText = responseText.stripScripts();
-
-    if (receiver = $(receiver)) {
-      if (options.insertion) {
-        if (Object.isString(options.insertion)) {
-          var insertion = { }; insertion[options.insertion] = responseText;
-          receiver.insert(insertion);
-        }
-        else options.insertion(receiver, responseText);
-      }
-      else receiver.update(responseText);
-    }
-
-    if (this.success()) {
-      if (this.onComplete) this.onComplete.bind(this).defer();
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
-  initialize: function($super, container, url, options) {
-    $super(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = { };
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.options.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(response) {
-    if (this.options.decay) {
-      this.decay = (response.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = response.responseText;
-    }
-    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-function $(element) {
-  if (arguments.length > 1) {
-    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
-      elements.push($(arguments[i]));
-    return elements;
-  }
-  if (Object.isString(element))
-    element = document.getElementById(element);
-  return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
-  document._getElementsByXPath = function(expression, parentElement) {
-    var results = [];
-    var query = document.evaluate(expression, $(parentElement) || document,
-      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-    for (var i = 0, length = query.snapshotLength; i < length; i++)
-      results.push(Element.extend(query.snapshotItem(i)));
-    return results;
-  };
-}
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Node) var Node = { };
-
-if (!Node.ELEMENT_NODE) {
-  // DOM level 2 ECMAScript Language Binding
-  Object.extend(Node, {
-    ELEMENT_NODE: 1,
-    ATTRIBUTE_NODE: 2,
-    TEXT_NODE: 3,
-    CDATA_SECTION_NODE: 4,
-    ENTITY_REFERENCE_NODE: 5,
-    ENTITY_NODE: 6,
-    PROCESSING_INSTRUCTION_NODE: 7,
-    COMMENT_NODE: 8,
-    DOCUMENT_NODE: 9,
-    DOCUMENT_TYPE_NODE: 10,
-    DOCUMENT_FRAGMENT_NODE: 11,
-    NOTATION_NODE: 12
-  });
-}
-
-(function() {
-  var element = this.Element;
-  this.Element = function(tagName, attributes) {
-    attributes = attributes || { };
-    tagName = tagName.toLowerCase();
-    var cache = Element.cache;
-    if (Prototype.Browser.IE && attributes.name) {
-      tagName = '<' + tagName + ' name="' + attributes.name + '">';
-      delete attributes.name;
-      return Element.writeAttribute(document.createElement(tagName), attributes);
-    }
-    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
-    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
-  };
-  Object.extend(this.Element, element || { });
-}).call(window);
-
-Element.cache = { };
-
-Element.Methods = {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function(element) {
-    element = $(element);
-    Element[Element.visible(element) ? 'hide' : 'show'](element);
-    return element;
-  },
-
-  hide: function(element) {
-    $(element).style.display = 'none';
-    return element;
-  },
-
-  show: function(element) {
-    $(element).style.display = '';
-    return element;
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-    return element;
-  },
-
-  update: function(element, content) {
-    element = $(element);
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-    content = Object.toHTML(content);
-    element.innerHTML = content.stripScripts();
-    content.evalScripts.bind(content).defer();
-    return element;
-  },
-
-  replace: function(element, content) {
-    element = $(element);
-    if (content && content.toElement) content = content.toElement();
-    else if (!Object.isElement(content)) {
-      content = Object.toHTML(content);
-      var range = element.ownerDocument.createRange();
-      range.selectNode(element);
-      content.evalScripts.bind(content).defer();
-      content = range.createContextualFragment(content.stripScripts());
-    }
-    element.parentNode.replaceChild(content, element);
-    return element;
-  },
-
-  insert: function(element, insertions) {
-    element = $(element);
-
-    if (Object.isString(insertions) || Object.isNumber(insertions) ||
-        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
-          insertions = {bottom:insertions};
-
-    var content, t, range;
-
-    for (position in insertions) {
-      content  = insertions[position];
-      position = position.toLowerCase();
-      t = Element._insertionTranslations[position];
-
-      if (content && content.toElement) content = content.toElement();
-      if (Object.isElement(content)) {
-        t.insert(element, content);
-        continue;
-      }
-
-      content = Object.toHTML(content);
-
-      range = element.ownerDocument.createRange();
-      t.initializeRange(element, range);
-      t.insert(element, range.createContextualFragment(content.stripScripts()));
-
-      content.evalScripts.bind(content).defer();
-    }
-
-    return element;
-  },
-
-  wrap: function(element, wrapper, attributes) {
-    element = $(element);
-    if (Object.isElement(wrapper))
-      $(wrapper).writeAttribute(attributes || { });
-    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
-    else wrapper = new Element('div', wrapper);
-    if (element.parentNode)
-      element.parentNode.replaceChild(wrapper, element);
-    wrapper.appendChild(element);
-    return wrapper;
-  },
-
-  inspect: function(element) {
-    element = $(element);
-    var result = '<' + element.tagName.toLowerCase();
-    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
-      if (value) result += ' ' + attribute + '=' + value.inspect(true);
-    });
-    return result + '>';
-  },
-
-  recursivelyCollect: function(element, property) {
-    element = $(element);
-    var elements = [];
-    while (element = element[property])
-      if (element.nodeType == 1)
-        elements.push(Element.extend(element));
-    return elements;
-  },
-
-  ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
-  },
-
-  descendants: function(element) {
-    return $A($(element).getElementsByTagName('*')).each(Element.extend);
-  },
-
-  firstDescendant: function(element) {
-    element = $(element).firstChild;
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    return $(element);
-  },
-
-  immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
-  },
-
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
-  },
-
-  nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
-  },
-
-  siblings: function(element) {
-    element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
-  },
-
-  match: function(element, selector) {
-    if (Object.isString(selector))
-      selector = new Selector(selector);
-    return selector.match($(element));
-  },
-
-  up: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(element.parentNode);
-    var ancestors = element.ancestors();
-    return expression ? Selector.findElement(ancestors, expression, index) :
-      ancestors[index || 0];
-  },
-
-  down: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return element.firstDescendant();
-    var descendants = element.descendants();
-    return expression ? Selector.findElement(descendants, expression, index) :
-      descendants[index || 0];
-  },
-
-  previous: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
-    var previousSiblings = element.previousSiblings();
-    return expression ? Selector.findElement(previousSiblings, expression, index) :
-      previousSiblings[index || 0];
-  },
-
-  next: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
-    var nextSiblings = element.nextSiblings();
-    return expression ? Selector.findElement(nextSiblings, expression, index) :
-      nextSiblings[index || 0];
-  },
-
-  select: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
-  },
-
-  adjacent: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element.parentNode, args).without(element);
-  },
-
-  identify: function(element) {
-    element = $(element);
-    var id = element.readAttribute('id'), self = arguments.callee;
-    if (id) return id;
-    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
-    element.writeAttribute('id', id);
-    return id;
-  },
-
-  readAttribute: function(element, name) {
-    element = $(element);
-    if (Prototype.Browser.IE) {
-      var t = Element._attributeTranslations.read;
-      if (t.values[name]) return t.values[name](element, name);
-      if (t.names[name]) name = t.names[name];
-      if (name.include(':')) {
-        return (!element.attributes || !element.attributes[name]) ? null :
-         element.attributes[name].value;
-      }
-    }
-    return element.getAttribute(name);
-  },
-
-  writeAttribute: function(element, name, value) {
-    element = $(element);
-    var attributes = { }, t = Element._attributeTranslations.write;
-
-    if (typeof name == 'object') attributes = name;
-    else attributes[name] = value === undefined ? true : value;
-
-    for (var attr in attributes) {
-      var name = t.names[attr] || attr, value = attributes[attr];
-      if (t.values[attr]) name = t.values[attr](element, value);
-      if (value === false || value === null)
-        element.removeAttribute(name);
-      else if (value === true)
-        element.setAttribute(name, name);
-      else element.setAttribute(name, value);
-    }
-    return element;
-  },
-
-  getHeight: function(element) {
-    return $(element).getDimensions().height;
-  },
-
-  getWidth: function(element) {
-    return $(element).getDimensions().width;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    var elementClassName = element.className;
-    return (elementClassName.length > 0 && (elementClassName == className ||
-      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    if (!element.hasClassName(className))
-      element.className += (element.className ? ' ' : '') + className;
-    return element;
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    element.className = element.className.replace(
-      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
-    return element;
-  },
-
-  toggleClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    return element[element.hasClassName(className) ?
-      'removeClassName' : 'addClassName'](className);
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    var node = element.firstChild;
-    while (node) {
-      var nextNode = node.nextSibling;
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        element.removeChild(node);
-      node = nextNode;
-    }
-    return element;
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.blank();
-  },
-
-  descendantOf: function(element, ancestor) {
-    element = $(element), ancestor = $(ancestor);
-
-    if (element.compareDocumentPosition)
-      return (element.compareDocumentPosition(ancestor) & 8) === 8;
-
-    if (element.sourceIndex && !Prototype.Browser.Opera) {
-      var e = element.sourceIndex, a = ancestor.sourceIndex,
-       nextAncestor = ancestor.nextSibling;
-      if (!nextAncestor) {
-        do { ancestor = ancestor.parentNode; }
-        while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
-      }
-      if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);
-    }
-
-    while (element = element.parentNode)
-      if (element == ancestor) return true;
-    return false;
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var pos = element.cumulativeOffset();
-    window.scrollTo(pos[0], pos[1]);
-    return element;
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    style = style == 'float' ? 'cssFloat' : style.camelize();
-    var value = element.style[style];
-    if (!value) {
-      var css = document.defaultView.getComputedStyle(element, null);
-      value = css ? css[style] : null;
-    }
-    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
-    return value == 'auto' ? null : value;
-  },
-
-  getOpacity: function(element) {
-    return $(element).getStyle('opacity');
-  },
-
-  setStyle: function(element, styles) {
-    element = $(element);
-    var elementStyle = element.style, match;
-    if (Object.isString(styles)) {
-      element.style.cssText += ';' + styles;
-      return styles.include('opacity') ?
-        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
-    }
-    for (var property in styles)
-      if (property == 'opacity') element.setOpacity(styles[property]);
-      else
-        elementStyle[(property == 'float' || property == 'cssFloat') ?
-          (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
-            property] = styles[property];
-
-    return element;
-  },
-
-  setOpacity: function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1 || value === '') ? '' :
-      (value < 0.00001) ? 0 : value;
-    return element;
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    var display = $(element).getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-    return element;
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-    return element;
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return element;
-    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
-    if (element._overflow !== 'hidden')
-      element.style.overflow = 'hidden';
-    return element;
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (!element._overflow) return element;
-    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
-    element._overflow = null;
-    return element;
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if (element.tagName == 'BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'absolute') return;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    var offsets = element.positionedOffset();
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-    return element;
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'relative') return;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-    return element;
-  },
-
-  cumulativeScrollOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  getOffsetParent: function(element) {
-    if (element.offsetParent) return $(element.offsetParent);
-    if (element == document.body) return $(element);
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return $(element);
-
-    return $(document.body);
-  },
-
-  viewportOffset: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent == document.body &&
-        Element.getStyle(element, 'position') == 'absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  clonePosition: function(element, source) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || { });
-
-    // find page position of source
-    source = $(source);
-    var p = source.viewportOffset();
-
-    // find coordinate system to use
-    element = $(element);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(element, 'position') == 'absolute') {
-      parent = element.getOffsetParent();
-      delta = parent.viewportOffset();
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
-    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
-    return element;
-  }
-};
-
-Element.Methods.identify.counter = 1;
-
-Object.extend(Element.Methods, {
-  getElementsBySelector: Element.Methods.select,
-  childElements: Element.Methods.immediateDescendants
-});
-
-Element._attributeTranslations = {
-  write: {
-    names: {
-      className: 'class',
-      htmlFor:   'for'
-    },
-    values: { }
-  }
-};
-
-
-if (!document.createRange || Prototype.Browser.Opera) {
-  Element.Methods.insert = function(element, insertions) {
-    element = $(element);
-
-    if (Object.isString(insertions) || Object.isNumber(insertions) ||
-        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
-          insertions = { bottom: insertions };
-
-    var t = Element._insertionTranslations, content, position, pos, tagName;
-
-    for (position in insertions) {
-      content  = insertions[position];
-      position = position.toLowerCase();
-      pos      = t[position];
-
-      if (content && content.toElement) content = content.toElement();
-      if (Object.isElement(content)) {
-        pos.insert(element, content);
-        continue;
-      }
-
-      content = Object.toHTML(content);
-      tagName = ((position == 'before' || position == 'after')
-        ? element.parentNode : element).tagName.toUpperCase();
-
-      if (t.tags[tagName]) {
-        var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
-        if (position == 'top' || position == 'after') fragments.reverse();
-        fragments.each(pos.insert.curry(element));
-      }
-      else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
-
-      content.evalScripts.bind(content).defer();
-    }
-
-    return element;
-  };
-}
-
-if (Prototype.Browser.Opera) {
-  Element.Methods._getStyle = Element.Methods.getStyle;
-  Element.Methods.getStyle = function(element, style) {
-    switch(style) {
-      case 'left':
-      case 'top':
-      case 'right':
-      case 'bottom':
-        if (Element._getStyle(element, 'position') == 'static') return null;
-      default: return Element._getStyle(element, style);
-    }
-  };
-  Element.Methods._readAttribute = Element.Methods.readAttribute;
-  Element.Methods.readAttribute = function(element, attribute) {
-    if (attribute == 'title') return element.title;
-    return Element._readAttribute(element, attribute);
-  };
-}
-
-else if (Prototype.Browser.IE) {
-  $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
-    Element.Methods[method] = Element.Methods[method].wrap(
-      function(proceed, element) {
-        element = $(element);
-        var position = element.getStyle('position');
-        if (position != 'static') return proceed(element);
-        element.setStyle({ position: 'relative' });
-        var value = proceed(element);
-        element.setStyle({ position: position });
-        return value;
-      }
-    );
-  });
-
-  Element.Methods.getStyle = function(element, style) {
-    element = $(element);
-    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
-    var value = element.style[style];
-    if (!value && element.currentStyle) value = element.currentStyle[style];
-
-    if (style == 'opacity') {
-      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
-        if (value[1]) return parseFloat(value[1]) / 100;
-      return 1.0;
-    }
-
-    if (value == 'auto') {
-      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
-        return element['offset' + style.capitalize()] + 'px';
-      return null;
-    }
-    return value;
-  };
-
-  Element.Methods.setOpacity = function(element, value) {
-    function stripAlpha(filter){
-      return filter.replace(/alpha\([^\)]*\)/gi,'');
-    }
-    element = $(element);
-    var currentStyle = element.currentStyle;
-    if ((currentStyle && !currentStyle.hasLayout) ||
-      (!currentStyle && element.style.zoom == 'normal'))
-        element.style.zoom = 1;
-
-    var filter = element.getStyle('filter'), style = element.style;
-    if (value == 1 || value === '') {
-      (filter = stripAlpha(filter)) ?
-        style.filter = filter : style.removeAttribute('filter');
-      return element;
-    } else if (value < 0.00001) value = 0;
-    style.filter = stripAlpha(filter) +
-      'alpha(opacity=' + (value * 100) + ')';
-    return element;
-  };
-
-  Element._attributeTranslations = {
-    read: {
-      names: {
-        'class': 'className',
-        'for':   'htmlFor'
-      },
-      values: {
-        _getAttr: function(element, attribute) {
-          return element.getAttribute(attribute, 2);
-        },
-        _getAttrNode: function(element, attribute) {
-          var node = element.getAttributeNode(attribute);
-          return node ? node.value : "";
-        },
-        _getEv: function(element, attribute) {
-          var attribute = element.getAttribute(attribute);
-          return attribute ? attribute.toString().slice(23, -2) : null;
-        },
-        _flag: function(element, attribute) {
-          return $(element).hasAttribute(attribute) ? attribute : null;
-        },
-        style: function(element) {
-          return element.style.cssText.toLowerCase();
-        },
-        title: function(element) {
-          return element.title;
-        }
-      }
-    }
-  };
-
-  Element._attributeTranslations.write = {
-    names: Object.clone(Element._attributeTranslations.read.names),
-    values: {
-      checked: function(element, value) {
-        element.checked = !!value;
-      },
-
-      style: function(element, value) {
-        element.style.cssText = value ? value : '';
-      }
-    }
-  };
-
-  Element._attributeTranslations.has = {};
-
-  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
-      'encType maxLength readOnly longDesc').each(function(attr) {
-    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
-    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
-  });
-
-  (function(v) {
-    Object.extend(v, {
-      href:        v._getAttr,
-      src:         v._getAttr,
-      type:        v._getAttr,
-      action:      v._getAttrNode,
-      disabled:    v._flag,
-      checked:     v._flag,
-      readonly:    v._flag,
-      multiple:    v._flag,
-      onload:      v._getEv,
-      onunload:    v._getEv,
-      onclick:     v._getEv,
-      ondblclick:  v._getEv,
-      onmousedown: v._getEv,
-      onmouseup:   v._getEv,
-      onmouseover: v._getEv,
-      onmousemove: v._getEv,
-      onmouseout:  v._getEv,
-      onfocus:     v._getEv,
-      onblur:      v._getEv,
-      onkeypress:  v._getEv,
-      onkeydown:   v._getEv,
-      onkeyup:     v._getEv,
-      onsubmit:    v._getEv,
-      onreset:     v._getEv,
-      onselect:    v._getEv,
-      onchange:    v._getEv
-    });
-  })(Element._attributeTranslations.read.values);
-}
-
-else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
-  Element.Methods.setOpacity = function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1) ? 0.999999 :
-      (value === '') ? '' : (value < 0.00001) ? 0 : value;
-    return element;
-  };
-}
-
-else if (Prototype.Browser.WebKit) {
-  Element.Methods.setOpacity = function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1 || value === '') ? '' :
-      (value < 0.00001) ? 0 : value;
-
-    if (value == 1)
-      if(element.tagName == 'IMG' && element.width) {
-        element.width++; element.width--;
-      } else try {
-        var n = document.createTextNode(' ');
-        element.appendChild(n);
-        element.removeChild(n);
-      } catch (e) { }
-
-    return element;
-  };
-
-  // Safari returns margins on body which is incorrect if the child is absolutely
-  // positioned.  For performance reasons, redefine Position.cumulativeOffset for
-  // KHTML/WebKit only.
-  Element.Methods.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return Element._returnOffset(valueL, valueT);
-  };
-}
-
-if (Prototype.Browser.IE || Prototype.Browser.Opera) {
-  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
-  Element.Methods.update = function(element, content) {
-    element = $(element);
-
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-
-    content = Object.toHTML(content);
-    var tagName = element.tagName.toUpperCase();
-
-    if (tagName in Element._insertionTranslations.tags) {
-      $A(element.childNodes).each(function(node) { element.removeChild(node) });
-      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
-        .each(function(node) { element.appendChild(node) });
-    }
-    else element.innerHTML = content.stripScripts();
-
-    content.evalScripts.bind(content).defer();
-    return element;
-  };
-}
-
-if (document.createElement('div').outerHTML) {
-  Element.Methods.replace = function(element, content) {
-    element = $(element);
-
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) {
-      element.parentNode.replaceChild(content, element);
-      return element;
-    }
-
-    content = Object.toHTML(content);
-    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
-
-    if (Element._insertionTranslations.tags[tagName]) {
-      var nextSibling = element.next();
-      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
-      parent.removeChild(element);
-      if (nextSibling)
-        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
-      else
-        fragments.each(function(node) { parent.appendChild(node) });
-    }
-    else element.outerHTML = content.stripScripts();
-
-    content.evalScripts.bind(content).defer();
-    return element;
-  };
-}
-
-Element._returnOffset = function(l, t) {
-  var result = [l, t];
-  result.left = l;
-  result.top = t;
-  return result;
-};
-
-Element._getContentFromAnonymousElement = function(tagName, html) {
-  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
-  div.innerHTML = t[0] + html + t[1];
-  t[2].times(function() { div = div.firstChild });
-  return $A(div.childNodes);
-};
-
-Element._insertionTranslations = {
-  before: {
-    adjacency: 'beforeBegin',
-    insert: function(element, node) {
-      element.parentNode.insertBefore(node, element);
-    },
-    initializeRange: function(element, range) {
-      range.setStartBefore(element);
-    }
-  },
-  top: {
-    adjacency: 'afterBegin',
-    insert: function(element, node) {
-      element.insertBefore(node, element.firstChild);
-    },
-    initializeRange: function(element, range) {
-      range.selectNodeContents(element);
-      range.collapse(true);
-    }
-  },
-  bottom: {
-    adjacency: 'beforeEnd',
-    insert: function(element, node) {
-      element.appendChild(node);
-    }
-  },
-  after: {
-    adjacency: 'afterEnd',
-    insert: function(element, node) {
-      element.parentNode.insertBefore(node, element.nextSibling);
-    },
-    initializeRange: function(element, range) {
-      range.setStartAfter(element);
-    }
-  },
-  tags: {
-    TABLE:  ['<table>',                '</table>',                   1],
-    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
-    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
-    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
-    SELECT: ['<select>',               '</select>',                  1]
-  }
-};
-
-(function() {
-  this.bottom.initializeRange = this.top.initializeRange;
-  Object.extend(this.tags, {
-    THEAD: this.tags.TBODY,
-    TFOOT: this.tags.TBODY,
-    TH:    this.tags.TD
-  });
-}).call(Element._insertionTranslations);
-
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    attribute = Element._attributeTranslations.has[attribute] || attribute;
-    var node = $(element).getAttributeNode(attribute);
-    return node && node.specified;
-  }
-};
-
-Element.Methods.ByTag = { };
-
-Object.extend(Element, Element.Methods);
-
-if (!Prototype.BrowserFeatures.ElementExtensions &&
-    document.createElement('div').__proto__) {
-  window.HTMLElement = { };
-  window.HTMLElement.prototype = document.createElement('div').__proto__;
-  Prototype.BrowserFeatures.ElementExtensions = true;
-}
-
-Element.extend = (function() {
-  if (Prototype.BrowserFeatures.SpecificElementExtensions)
-    return Prototype.K;
-
-  var Methods = { }, ByTag = Element.Methods.ByTag;
-
-  var extend = Object.extend(function(element) {
-    if (!element || element._extendedByPrototype ||
-        element.nodeType != 1 || element == window) return element;
-
-    var methods = Object.clone(Methods),
-      tagName = element.tagName, property, value;
-
-    // extend methods for specific tags
-    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
-
-    for (property in methods) {
-      value = methods[property];
-      if (Object.isFunction(value) && !(property in element))
-        element[property] = value.methodize();
-    }
-
-    element._extendedByPrototype = Prototype.emptyFunction;
-    return element;
-
-  }, {
-    refresh: function() {
-      // extend methods for all tags (Safari doesn't need this)
-      if (!Prototype.BrowserFeatures.ElementExtensions) {
-        Object.extend(Methods, Element.Methods);
-        Object.extend(Methods, Element.Methods.Simulated);
-      }
-    }
-  });
-
-  extend.refresh();
-  return extend;
-})();
-
-Element.hasAttribute = function(element, attribute) {
-  if (element.hasAttribute) return element.hasAttribute(attribute);
-  return Element.Methods.Simulated.hasAttribute(element, attribute);
-};
-
-Element.addMethods = function(methods) {
-  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
-
-  if (!methods) {
-    Object.extend(Form, Form.Methods);
-    Object.extend(Form.Element, Form.Element.Methods);
-    Object.extend(Element.Methods.ByTag, {
-      "FORM":     Object.clone(Form.Methods),
-      "INPUT":    Object.clone(Form.Element.Methods),
-      "SELECT":   Object.clone(Form.Element.Methods),
-      "TEXTAREA": Object.clone(Form.Element.Methods)
-    });
-  }
-
-  if (arguments.length == 2) {
-    var tagName = methods;
-    methods = arguments[1];
-  }
-
-  if (!tagName) Object.extend(Element.Methods, methods || { });
-  else {
-    if (Object.isArray(tagName)) tagName.each(extend);
-    else extend(tagName);
-  }
-
-  function extend(tagName) {
-    tagName = tagName.toUpperCase();
-    if (!Element.Methods.ByTag[tagName])
-      Element.Methods.ByTag[tagName] = { };
-    Object.extend(Element.Methods.ByTag[tagName], methods);
-  }
-
-  function copy(methods, destination, onlyIfAbsent) {
-    onlyIfAbsent = onlyIfAbsent || false;
-    for (var property in methods) {
-      var value = methods[property];
-      if (!Object.isFunction(value)) continue;
-      if (!onlyIfAbsent || !(property in destination))
-        destination[property] = value.methodize();
-    }
-  }
-
-  function findDOMClass(tagName) {
-    var klass;
-    var trans = {
-      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
-      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
-      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
-      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
-      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
-      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
-      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
-      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
-      "FrameSet", "IFRAME": "IFrame"
-    };
-    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
-    if (window[klass]) return window[klass];
-    klass = 'HTML' + tagName + 'Element';
-    if (window[klass]) return window[klass];
-    klass = 'HTML' + tagName.capitalize() + 'Element';
-    if (window[klass]) return window[klass];
-
-    window[klass] = { };
-    window[klass].prototype = document.createElement(tagName).__proto__;
-    return window[klass];
-  }
-
-  if (F.ElementExtensions) {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
-  }
-
-  if (F.SpecificElementExtensions) {
-    for (var tag in Element.Methods.ByTag) {
-      var klass = findDOMClass(tag);
-      if (Object.isUndefined(klass)) continue;
-      copy(T[tag], klass.prototype);
-    }
-  }
-
-  Object.extend(Element, Element.Methods);
-  delete Element.ByTag;
-
-  if (Element.extend.refresh) Element.extend.refresh();
-  Element.cache = { };
-};
-
-document.viewport = {
-  getDimensions: function() {
-    var dimensions = { };
-    $w('width height').each(function(d) {
-      var D = d.capitalize();
-      dimensions[d] = self['inner' + D] ||
-       (document.documentElement['client' + D] || document.body['client' + D]);
-    });
-    return dimensions;
-  },
-
-  getWidth: function() {
-    return this.getDimensions().width;
-  },
-
-  getHeight: function() {
-    return this.getDimensions().height;
-  },
-
-  getScrollOffsets: function() {
-    return Element._returnOffset(
-      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
-      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
-  }
-};
-/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
- * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
- * license.  Please see http://www.yui-ext.com/ for more information. */
-
-var Selector = Class.create({
-  initialize: function(expression) {
-    this.expression = expression.strip();
-    this.compileMatcher();
-  },
-
-  compileMatcher: function() {
-    // Selectors with namespaced attributes can't use the XPath version
-    if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression))
-      return this.compileXPathMatcher();
-
-    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
-        c = Selector.criteria, le, p, m;
-
-    if (Selector._cache[e]) {
-      this.matcher = Selector._cache[e];
-      return;
-    }
-
-    this.matcher = ["this.matcher = function(root) {",
-                    "var r = root, h = Selector.handlers, c = false, n;"];
-
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
-    	      new Template(c[i]).evaluate(m));
-          e = e.replace(m[0], '');
-          break;
-        }
-      }
-    }
-
-    this.matcher.push("return h.unique(n);\n}");
-    eval(this.matcher.join('\n'));
-    Selector._cache[this.expression] = this.matcher;
-  },
-
-  compileXPathMatcher: function() {
-    var e = this.expression, ps = Selector.patterns,
-        x = Selector.xpath, le, m;
-
-    if (Selector._cache[e]) {
-      this.xpath = Selector._cache[e]; return;
-    }
-
-    this.matcher = ['.//*'];
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        if (m = e.match(ps[i])) {
-          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
-            new Template(x[i]).evaluate(m));
-          e = e.replace(m[0], '');
-          break;
-        }
-      }
-    }
-
-    this.xpath = this.matcher.join('');
-    Selector._cache[this.expression] = this.xpath;
-  },
-
-  findElements: function(root) {
-    root = root || document;
-    if (this.xpath) return document._getElementsByXPath(this.xpath, root);
-    return this.matcher(root);
-  },
-
-  match: function(element) {
-    this.tokens = [];
-
-    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
-    var le, p, m;
-
-    while (e && le !== e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          // use the Selector.assertions methods unless the selector
-          // is too complex.
-          if (as[i]) {
-            this.tokens.push([i, Object.clone(m)]);
-            e = e.replace(m[0], '');
-          } else {
-            // reluctantly do a document-wide search
-            // and look for a match in the array
-            return this.findElements(document).include(element);
-          }
-        }
-      }
-    }
-
-    var match = true, name, matches;
-    for (var i = 0, token; token = this.tokens[i]; i++) {
-      name = token[0], matches = token[1];
-      if (!Selector.assertions[name](element, matches)) {
-        match = false; break;
-      }
-    }
-
-    return match;
-  },
-
-  toString: function() {
-    return this.expression;
-  },
-
-  inspect: function() {
-    return "#<Selector:" + this.expression.inspect() + ">";
-  }
-});
-
-Object.extend(Selector, {
-  _cache: { },
-
-  xpath: {
-    descendant:   "//*",
-    child:        "/*",
-    adjacent:     "/following-sibling::*[1]",
-    laterSibling: '/following-sibling::*',
-    tagName:      function(m) {
-      if (m[1] == '*') return '';
-      return "[local-name()='" + m[1].toLowerCase() +
-             "' or local-name()='" + m[1].toUpperCase() + "']";
-    },
-    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
-    id:           "[@id='#{1}']",
-    attrPresence: "[@#{1}]",
-    attr: function(m) {
-      m[3] = m[5] || m[6];
-      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
-    },
-    pseudo: function(m) {
-      var h = Selector.xpath.pseudos[m[1]];
-      if (!h) return '';
-      if (Object.isFunction(h)) return h(m);
-      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
-    },
-    operators: {
-      '=':  "[@#{1}='#{3}']",
-      '!=': "[@#{1}!='#{3}']",
-      '^=': "[starts-with(@#{1}, '#{3}')]",
-      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
-      '*=': "[contains(@#{1}, '#{3}')]",
-      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
-      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
-    },
-    pseudos: {
-      'first-child': '[not(preceding-sibling::*)]',
-      'last-child':  '[not(following-sibling::*)]',
-      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
-      'empty':       "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
-      'checked':     "[@checked]",
-      'disabled':    "[@disabled]",
-      'enabled':     "[not(@disabled)]",
-      'not': function(m) {
-        var e = m[6], p = Selector.patterns,
-            x = Selector.xpath, le, m, v;
-
-        var exclusion = [];
-        while (e && le != e && (/\S/).test(e)) {
-          le = e;
-          for (var i in p) {
-            if (m = e.match(p[i])) {
-              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
-              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
-              e = e.replace(m[0], '');
-              break;
-            }
-          }
-        }
-        return "[not(" + exclusion.join(" and ") + ")]";
-      },
-      'nth-child':      function(m) {
-        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
-      },
-      'nth-last-child': function(m) {
-        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
-      },
-      'nth-of-type':    function(m) {
-        return Selector.xpath.pseudos.nth("position() ", m);
-      },
-      'nth-last-of-type': function(m) {
-        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
-      },
-      'first-of-type':  function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
-      },
-      'last-of-type':   function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
-      },
-      'only-of-type':   function(m) {
-        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
-      },
-      nth: function(fragment, m) {
-        var mm, formula = m[6], predicate;
-        if (formula == 'even') formula = '2n+0';
-        if (formula == 'odd')  formula = '2n+1';
-        if (mm = formula.match(/^(\d+)$/)) // digit only
-          return '[' + fragment + "= " + mm[1] + ']';
-        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-          if (mm[1] == "-") mm[1] = -1;
-          var a = mm[1] ? Number(mm[1]) : 1;
-          var b = mm[2] ? Number(mm[2]) : 0;
-          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
-          "((#{fragment} - #{b}) div #{a} >= 0)]";
-          return new Template(predicate).evaluate({
-            fragment: fragment, a: a, b: b });
-        }
-      }
-    }
-  },
-
-  criteria: {
-    tagName:      'n = h.tagName(n, r, "#{1}", c);   c = false;',
-    className:    'n = h.className(n, r, "#{1}", c); c = false;',
-    id:           'n = h.id(n, r, "#{1}", c);        c = false;',
-    attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
-    attr: function(m) {
-      m[3] = (m[5] || m[6]);
-      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
-    },
-    pseudo: function(m) {
-      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
-      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
-    },
-    descendant:   'c = "descendant";',
-    child:        'c = "child";',
-    adjacent:     'c = "adjacent";',
-    laterSibling: 'c = "laterSibling";'
-  },
-
-  patterns: {
-    // combinators must be listed first
-    // (and descendant needs to be last combinator)
-    laterSibling: /^\s*~\s*/,
-    child:        /^\s*>\s*/,
-    adjacent:     /^\s*\+\s*/,
-    descendant:   /^\s/,
-
-    // selectors follow
-    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
-    id:           /^#([\w\-\*]+)(\b|$)/,
-    className:    /^\.([\w\-\*]+)(\b|$)/,
-    pseudo:       /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/,
-    attrPresence: /^\[([\w]+)\]/,
-    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
-  },
-
-  // for Selector.match and Element#match
-  assertions: {
-    tagName: function(element, matches) {
-      return matches[1].toUpperCase() == element.tagName.toUpperCase();
-    },
-
-    className: function(element, matches) {
-      return Element.hasClassName(element, matches[1]);
-    },
-
-    id: function(element, matches) {
-      return element.id === matches[1];
-    },
-
-    attrPresence: function(element, matches) {
-      return Element.hasAttribute(element, matches[1]);
-    },
-
-    attr: function(element, matches) {
-      var nodeValue = Element.readAttribute(element, matches[1]);
-      return Selector.operators[matches[2]](nodeValue, matches[3]);
-    }
-  },
-
-  handlers: {
-    // UTILITY FUNCTIONS
-    // joins two collections
-    concat: function(a, b) {
-      for (var i = 0, node; node = b[i]; i++)
-        a.push(node);
-      return a;
-    },
-
-    // marks an array of nodes for counting
-    mark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._counted = true;
-      return nodes;
-    },
-
-    unmark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._counted = undefined;
-      return nodes;
-    },
-
-    // mark each child node with its position (for nth calls)
-    // "ofType" flag indicates whether we're indexing for nth-of-type
-    // rather than nth-child
-    index: function(parentNode, reverse, ofType) {
-      parentNode._counted = true;
-      if (reverse) {
-        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
-          var node = nodes[i];
-          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
-        }
-      } else {
-        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
-          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
-      }
-    },
-
-    // filters out duplicates and extends all nodes
-    unique: function(nodes) {
-      if (nodes.length == 0) return nodes;
-      var results = [], n;
-      for (var i = 0, l = nodes.length; i < l; i++)
-        if (!(n = nodes[i])._counted) {
-          n._counted = true;
-          results.push(Element.extend(n));
-        }
-      return Selector.handlers.unmark(results);
-    },
-
-    // COMBINATOR FUNCTIONS
-    descendant: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, node.getElementsByTagName('*'));
-      return results;
-    },
-
-    child: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
-          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
-      }
-      return results;
-    },
-
-    adjacent: function(nodes) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        var next = this.nextElementSibling(node);
-        if (next) results.push(next);
-      }
-      return results;
-    },
-
-    laterSibling: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, Element.nextSiblings(node));
-      return results;
-    },
-
-    nextElementSibling: function(node) {
-      while (node = node.nextSibling)
-	      if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    previousElementSibling: function(node) {
-      while (node = node.previousSibling)
-        if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    // TOKEN FUNCTIONS
-    tagName: function(nodes, root, tagName, combinator) {
-      tagName = tagName.toUpperCase();
-      var results = [], h = Selector.handlers;
-      if (nodes) {
-        if (combinator) {
-          // fastlane for ordinary descendant combinators
-          if (combinator == "descendant") {
-            for (var i = 0, node; node = nodes[i]; i++)
-              h.concat(results, node.getElementsByTagName(tagName));
-            return results;
-          } else nodes = this[combinator](nodes);
-          if (tagName == "*") return nodes;
-        }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.tagName.toUpperCase() == tagName) results.push(node);
-        return results;
-      } else return root.getElementsByTagName(tagName);
-    },
-
-    id: function(nodes, root, id, combinator) {
-      var targetNode = $(id), h = Selector.handlers;
-      if (!targetNode) return [];
-      if (!nodes && root == document) return [targetNode];
-      if (nodes) {
-        if (combinator) {
-          if (combinator == 'child') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (targetNode.parentNode == node) return [targetNode];
-          } else if (combinator == 'descendant') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Element.descendantOf(targetNode, node)) return [targetNode];
-          } else if (combinator == 'adjacent') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Selector.handlers.previousElementSibling(targetNode) == node)
-                return [targetNode];
-          } else nodes = h[combinator](nodes);
-        }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node == targetNode) return [targetNode];
-        return [];
-      }
-      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
-    },
-
-    className: function(nodes, root, className, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      return Selector.handlers.byClassName(nodes, root, className);
-    },
-
-    byClassName: function(nodes, root, className) {
-      if (!nodes) nodes = Selector.handlers.descendant([root]);
-      var needle = ' ' + className + ' ';
-      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
-        nodeClassName = node.className;
-        if (nodeClassName.length == 0) continue;
-        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
-          results.push(node);
-      }
-      return results;
-    },
-
-    attrPresence: function(nodes, root, attr) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      var results = [];
-      for (var i = 0, node; node = nodes[i]; i++)
-        if (Element.hasAttribute(node, attr)) results.push(node);
-      return results;
-    },
-
-    attr: function(nodes, root, attr, value, operator) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      var handler = Selector.operators[operator], results = [];
-      for (var i = 0, node; node = nodes[i]; i++) {
-        var nodeValue = Element.readAttribute(node, attr);
-        if (nodeValue === null) continue;
-        if (handler(nodeValue, value)) results.push(node);
-      }
-      return results;
-    },
-
-    pseudo: function(nodes, name, value, root, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      return Selector.pseudos[name](nodes, value, root);
-    }
-  },
-
-  pseudos: {
-    'first-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.previousElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'last-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.nextElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'only-child': function(nodes, value, root) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
-          results.push(node);
-      return results;
-    },
-    'nth-child':        function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root);
-    },
-    'nth-last-child':   function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true);
-    },
-    'nth-of-type':      function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, false, true);
-    },
-    'nth-last-of-type': function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true, true);
-    },
-    'first-of-type':    function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, false, true);
-    },
-    'last-of-type':     function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, true, true);
-    },
-    'only-of-type':     function(nodes, formula, root) {
-      var p = Selector.pseudos;
-      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
-    },
-
-    // handles the an+b logic
-    getIndices: function(a, b, total) {
-      if (a == 0) return b > 0 ? [b] : [];
-      return $R(1, total).inject([], function(memo, i) {
-        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
-        return memo;
-      });
-    },
-
-    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
-    nth: function(nodes, formula, root, reverse, ofType) {
-      if (nodes.length == 0) return [];
-      if (formula == 'even') formula = '2n+0';
-      if (formula == 'odd')  formula = '2n+1';
-      var h = Selector.handlers, results = [], indexed = [], m;
-      h.mark(nodes);
-      for (var i = 0, node; node = nodes[i]; i++) {
-        if (!node.parentNode._counted) {
-          h.index(node.parentNode, reverse, ofType);
-          indexed.push(node.parentNode);
-        }
-      }
-      if (formula.match(/^\d+$/)) { // just a number
-        formula = Number(formula);
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.nodeIndex == formula) results.push(node);
-      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-        if (m[1] == "-") m[1] = -1;
-        var a = m[1] ? Number(m[1]) : 1;
-        var b = m[2] ? Number(m[2]) : 0;
-        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
-        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
-          for (var j = 0; j < l; j++)
-            if (node.nodeIndex == indices[j]) results.push(node);
-        }
-      }
-      h.unmark(nodes);
-      h.unmark(indexed);
-      return results;
-    },
-
-    'empty': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        // IE treats comments as element nodes
-        if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
-        results.push(node);
-      }
-      return results;
-    },
-
-    'not': function(nodes, selector, root) {
-      var h = Selector.handlers, selectorType, m;
-      var exclusions = new Selector(selector).findElements(root);
-      h.mark(exclusions);
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node._counted) results.push(node);
-      h.unmark(exclusions);
-      return results;
-    },
-
-    'enabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node.disabled) results.push(node);
-      return results;
-    },
-
-    'disabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.disabled) results.push(node);
-      return results;
-    },
-
-    'checked': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.checked) results.push(node);
-      return results;
-    }
-  },
-
-  operators: {
-    '=':  function(nv, v) { return nv == v; },
-    '!=': function(nv, v) { return nv != v; },
-    '^=': function(nv, v) { return nv.startsWith(v); },
-    '$=': function(nv, v) { return nv.endsWith(v); },
-    '*=': function(nv, v) { return nv.include(v); },
-    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
-    '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
-  },
-
-  matchElements: function(elements, expression) {
-    var matches = new Selector(expression).findElements(), h = Selector.handlers;
-    h.mark(matches);
-    for (var i = 0, results = [], element; element = elements[i]; i++)
-      if (element._counted) results.push(element);
-    h.unmark(matches);
-    return results;
-  },
-
-  findElement: function(elements, expression, index) {
-    if (Object.isNumber(expression)) {
-      index = expression; expression = false;
-    }
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    var exprs = expressions.join(','), expressions = [];
-    exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
-      expressions.push(m[1].strip());
-    });
-    var results = [], h = Selector.handlers;
-    for (var i = 0, l = expressions.length, selector; i < l; i++) {
-      selector = new Selector(expressions[i].strip());
-      h.concat(results, selector.findElements(element));
-    }
-    return (l > 1) ? h.unique(results) : results;
-  }
-});
-
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
-  reset: function(form) {
-    $(form).reset();
-    return form;
-  },
-
-  serializeElements: function(elements, options) {
-    if (typeof options != 'object') options = { hash: !!options };
-    else if (options.hash === undefined) options.hash = true;
-    var key, value, submitted = false, submit = options.submit;
-
-    var data = elements.inject({ }, function(result, element) {
-      if (!element.disabled && element.name) {
-        key = element.name; value = $(element).getValue();
-        if (value != null && (element.type != 'submit' || (!submitted &&
-            submit !== false && (!submit || key == submit) && (submitted = true)))) {
-          if (key in result) {
-            // a key is already present; construct an array of values
-            if (!Object.isArray(result[key])) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
-        }
-      }
-      return result;
-    });
-
-    return options.hash ? data : Object.toQueryString(data);
-  }
-};
-
-Form.Methods = {
-  serialize: function(form, options) {
-    return Form.serializeElements(Form.getElements(form), options);
-  },
-
-  getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name) return $A(inputs).map(Element.extend);
-
-    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) || (name && input.name != name))
-        continue;
-      matchingInputs.push(Element.extend(input));
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    form = $(form);
-    Form.getElements(form).invoke('disable');
-    return form;
-  },
-
-  enable: function(form) {
-    form = $(form);
-    Form.getElements(form).invoke('enable');
-    return form;
-  },
-
-  findFirstElement: function(form) {
-    var elements = $(form).getElements().findAll(function(element) {
-      return 'hidden' != element.type && !element.disabled;
-    });
-    var firstByIndex = elements.findAll(function(element) {
-      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
-    }).sortBy(function(element) { return element.tabIndex }).first();
-
-    return firstByIndex ? firstByIndex : elements.find(function(element) {
-      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    form = $(form);
-    form.findFirstElement().activate();
-    return form;
-  },
-
-  request: function(form, options) {
-    form = $(form), options = Object.clone(options || { });
-
-    var params = options.parameters, action = form.readAttribute('action') || '';
-    if (action.blank()) action = window.location.href;
-    options.parameters = form.serialize(true);
-
-    if (params) {
-      if (Object.isString(params)) params = params.toQueryParams();
-      Object.extend(options.parameters, params);
-    }
-
-    if (form.hasAttribute('method') && !options.method)
-      options.method = form.method;
-
-    return new Ajax.Request(action, options);
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
-  focus: function(element) {
-    $(element).focus();
-    return element;
-  },
-
-  select: function(element) {
-    $(element).select();
-    return element;
-  }
-};
-
-Form.Element.Methods = {
-  serialize: function(element) {
-    element = $(element);
-    if (!element.disabled && element.name) {
-      var value = element.getValue();
-      if (value != undefined) {
-        var pair = { };
-        pair[element.name] = value;
-        return Object.toQueryString(pair);
-      }
-    }
-    return '';
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    return Form.Element.Serializers[method](element);
-  },
-
-  setValue: function(element, value) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    Form.Element.Serializers[method](element, value);
-    return element;
-  },
-
-  clear: function(element) {
-    $(element).value = '';
-    return element;
-  },
-
-  present: function(element) {
-    return $(element).value != '';
-  },
-
-  activate: function(element) {
-    element = $(element);
-    try {
-      element.focus();
-      if (element.select && (element.tagName.toLowerCase() != 'input' ||
-          !['button', 'reset', 'submit'].include(element.type)))
-        element.select();
-    } catch (e) { }
-    return element;
-  },
-
-  disable: function(element) {
-    element = $(element);
-    element.blur();
-    element.disabled = true;
-    return element;
-  },
-
-  enable: function(element) {
-    element = $(element);
-    element.disabled = false;
-    return element;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Field = Form.Element;
-var $F = Form.Element.Methods.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
-  input: function(element, value) {
-    switch (element.type.toLowerCase()) {
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element, value);
-      default:
-        return Form.Element.Serializers.textarea(element, value);
-    }
-  },
-
-  inputSelector: function(element, value) {
-    if (value === undefined) return element.checked ? element.value : null;
-    else element.checked = !!value;
-  },
-
-  textarea: function(element, value) {
-    if (value === undefined) return element.value;
-    else element.value = value;
-  },
-
-  select: function(element, index) {
-    if (index === undefined)
-      return this[element.type == 'select-one' ?
-        'selectOne' : 'selectMany'](element);
-    else {
-      var opt, value, single = !Object.isArray(index);
-      for (var i = 0, length = element.length; i < length; i++) {
-        opt = element.options[i];
-        value = this.optionValue(opt);
-        if (single) {
-          if (value == index) {
-            opt.selected = true;
-            return;
-          }
-        }
-        else opt.selected = index.include(value);
-      }
-    }
-  },
-
-  selectOne: function(element) {
-    var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
-    var values, length = element.length;
-    if (!length) return null;
-
-    for (var i = 0, values = []; i < length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
-    }
-    return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
-  initialize: function($super, element, frequency, callback) {
-    $super(callback, frequency);
-    this.element   = $(element);
-    this.lastValue = this.getValue();
-  },
-
-  execute: function() {
-    var value = this.getValue();
-    if (Object.isString(this.lastValue) && Object.isString(value) ?
-        this.lastValue != value : String(this.lastValue) != String(value)) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-});
-
-Form.Element.Observer = Class.create(Abstract.TimedObserver, {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create(Abstract.TimedObserver, {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = Class.create({
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    Form.getElements(this.element).each(this.registerCallback, this);
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        default:
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-});
-
-Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create(Abstract.EventObserver, {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) var Event = { };
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-  KEY_INSERT:   45,
-
-  cache: { },
-
-  relatedTarget: function(event) {
-    var element;
-    switch(event.type) {
-      case 'mouseover': element = event.fromElement; break;
-      case 'mouseout':  element = event.toElement;   break;
-      default: return null;
-    }
-    return Element.extend(element);
-  }
-});
-
-Event.Methods = (function() {
-  var isButton;
-
-  if (Prototype.Browser.IE) {
-    var buttonMap = { 0: 1, 1: 4, 2: 2 };
-    isButton = function(event, code) {
-      return event.button == buttonMap[code];
-    };
-
-  } else if (Prototype.Browser.WebKit) {
-    isButton = function(event, code) {
-      switch (code) {
-        case 0: return event.which == 1 && !event.metaKey;
-        case 1: return event.which == 1 && event.metaKey;
-        default: return false;
-      }
-    };
-
-  } else {
-    isButton = function(event, code) {
-      return event.which ? (event.which === code + 1) : (event.button === code);
-    };
-  }
-
-  return {
-    isLeftClick:   function(event) { return isButton(event, 0) },
-    isMiddleClick: function(event) { return isButton(event, 1) },
-    isRightClick:  function(event) { return isButton(event, 2) },
-
-    element: function(event) {
-      var node = Event.extend(event).target;
-      return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
-    },
-
-    findElement: function(event, expression) {
-      var element = Event.element(event);
-      return element.match(expression) ? element : element.up(expression);
-    },
-
-    pointer: function(event) {
-      return {
-        x: event.pageX || (event.clientX +
-          (document.documentElement.scrollLeft || document.body.scrollLeft)),
-        y: event.pageY || (event.clientY +
-          (document.documentElement.scrollTop || document.body.scrollTop))
-      };
-    },
-
-    pointerX: function(event) { return Event.pointer(event).x },
-    pointerY: function(event) { return Event.pointer(event).y },
-
-    stop: function(event) {
-      Event.extend(event);
-      event.preventDefault();
-      event.stopPropagation();
-      event.stopped = true;
-    }
-  };
-})();
-
-Event.extend = (function() {
-  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
-    m[name] = Event.Methods[name].methodize();
-    return m;
-  });
-
-  if (Prototype.Browser.IE) {
-    Object.extend(methods, {
-      stopPropagation: function() { this.cancelBubble = true },
-      preventDefault:  function() { this.returnValue = false },
-      inspect: function() { return "[object Event]" }
-    });
-
-    return function(event) {
-      if (!event) return false;
-      if (event._extendedByPrototype) return event;
-
-      event._extendedByPrototype = Prototype.emptyFunction;
-      var pointer = Event.pointer(event);
-      Object.extend(event, {
-        target: event.srcElement,
-        relatedTarget: Event.relatedTarget(event),
-        pageX:  pointer.x,
-        pageY:  pointer.y
-      });
-      return Object.extend(event, methods);
-    };
-
-  } else {
-    Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
-    Object.extend(Event.prototype, methods);
-    return Prototype.K;
-  }
-})();
-
-Object.extend(Event, (function() {
-  var cache = Event.cache;
-
-  function getEventID(element) {
-    if (element._eventID) return element._eventID;
-    arguments.callee.id = arguments.callee.id || 1;
-    return element._eventID = ++arguments.callee.id;
-  }
-
-  function getDOMEventName(eventName) {
-    if (eventName && eventName.include(':')) return "dataavailable";
-    return eventName;
-  }
-
-  function getCacheForID(id) {
-    return cache[id] = cache[id] || { };
-  }
-
-  function getWrappersForEventName(id, eventName) {
-    var c = getCacheForID(id);
-    return c[eventName] = c[eventName] || [];
-  }
-
-  function createWrapper(element, eventName, handler) {
-    var id = getEventID(element);
-    var c = getWrappersForEventName(id, eventName);
-    if (c.pluck("handler").include(handler)) return false;
-
-    var wrapper = function(event) {
-      if (!Event || !Event.extend ||
-        (event.eventName && event.eventName != eventName))
-          return false;
-
-      Event.extend(event);
-      handler.call(element, event)
-    };
-
-    wrapper.handler = handler;
-    c.push(wrapper);
-    return wrapper;
-  }
-
-  function findWrapper(id, eventName, handler) {
-    var c = getWrappersForEventName(id, eventName);
-    return c.find(function(wrapper) { return wrapper.handler == handler });
-  }
-
-  function destroyWrapper(id, eventName, handler) {
-    var c = getCacheForID(id);
-    if (!c[eventName]) return false;
-    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
-  }
-
-  function destroyCache() {
-    for (var id in cache)
-      for (var eventName in cache[id])
-        cache[id][eventName] = null;
-  }
-
-  if (window.attachEvent) {
-    window.attachEvent("onunload", destroyCache);
-  }
-
-  return {
-    observe: function(element, eventName, handler) {
-      element = $(element);
-      var name = getDOMEventName(eventName);
-
-      var wrapper = createWrapper(element, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.addEventListener) {
-        element.addEventListener(name, wrapper, false);
-      } else {
-        element.attachEvent("on" + name, wrapper);
-      }
-
-      return element;
-    },
-
-    stopObserving: function(element, eventName, handler) {
-      element = $(element);
-      var id = getEventID(element), name = getDOMEventName(eventName);
-
-      if (!handler && eventName) {
-        getWrappersForEventName(id, eventName).each(function(wrapper) {
-          element.stopObserving(eventName, wrapper.handler);
-        });
-        return element;
-
-      } else if (!eventName) {
-        Object.keys(getCacheForID(id)).each(function(eventName) {
-          element.stopObserving(eventName);
-        });
-        return element;
-      }
-
-      var wrapper = findWrapper(id, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.removeEventListener) {
-        element.removeEventListener(name, wrapper, false);
-      } else {
-        element.detachEvent("on" + name, wrapper);
-      }
-
-      destroyWrapper(id, eventName, handler);
-
-      return element;
-    },
-
-    fire: function(element, eventName, memo) {
-      element = $(element);
-      if (element == document && document.createEvent && !element.dispatchEvent)
-        element = document.documentElement;
-
-      if (document.createEvent) {
-        var event = document.createEvent("HTMLEvents");
-        event.initEvent("dataavailable", true, true);
-      } else {
-        var event = document.createEventObject();
-        event.eventType = "ondataavailable";
-      }
-
-      event.eventName = eventName;
-      event.memo = memo || { };
-
-      if (document.createEvent) {
-        element.dispatchEvent(event);
-      } else {
-        element.fireEvent(event.eventType, event);
-      }
-
-      return event;
-    }
-  };
-})());
-
-Object.extend(Event, Event.Methods);
-
-Element.addMethods({
-  fire:          Event.fire,
-  observe:       Event.observe,
-  stopObserving: Event.stopObserving
-});
-
-Object.extend(document, {
-  fire:          Element.Methods.fire.methodize(),
-  observe:       Element.Methods.observe.methodize(),
-  stopObserving: Element.Methods.stopObserving.methodize()
-});
-
-(function() {
-  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
-     Matthias Miller, Dean Edwards and John Resig. */
-
-  var timer, fired = false;
-
-  function fireContentLoadedEvent() {
-    if (fired) return;
-    if (timer) window.clearInterval(timer);
-    document.fire("dom:loaded");
-    fired = true;
-  }
-
-  if (document.addEventListener) {
-    if (Prototype.Browser.WebKit) {
-      timer = window.setInterval(function() {
-        if (/loaded|complete/.test(document.readyState))
-          fireContentLoadedEvent();
-      }, 0);
-
-      Event.observe(window, "load", fireContentLoadedEvent);
-
-    } else {
-      document.addEventListener("DOMContentLoaded",
-        fireContentLoadedEvent, false);
-    }
-
-  } else {
-    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
-    $("__onDOMContentLoaded").onreadystatechange = function() {
-      if (this.readyState == "complete") {
-        this.onreadystatechange = null;
-        fireContentLoadedEvent();
-      }
-    };
-  }
-})();
-/*------------------------------- DEPRECATED -------------------------------*/
-
-Hash.toQueryString = Object.toQueryString;
-
-var Toggle = { display: Element.toggle };
-
-Element.Methods.childOf = Element.Methods.descendantOf;
-
-var Insertion = {
-  Before: function(element, content) {
-    return Element.insert(element, {before:content});
-  },
-
-  Top: function(element, content) {
-    return Element.insert(element, {top:content});
-  },
-
-  Bottom: function(element, content) {
-    return Element.insert(element, {bottom:content});
-  },
-
-  After: function(element, content) {
-    return Element.insert(element, {after:content});
-  }
-};
-
-var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
-
-// This should be moved to script.aculo.us; notice the deprecated methods
-// further below, that map to the newer Element methods.
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = Element.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = Element.cumulativeScrollOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = Element.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  // Deprecation layer -- use newer Element methods now (1.5.2).
-
-  cumulativeOffset: Element.Methods.cumulativeOffset,
-
-  positionedOffset: Element.Methods.positionedOffset,
-
-  absolutize: function(element) {
-    Position.prepare();
-    return Element.absolutize(element);
-  },
-
-  relativize: function(element) {
-    Position.prepare();
-    return Element.relativize(element);
-  },
-
-  realOffset: Element.Methods.cumulativeScrollOffset,
-
-  offsetParent: Element.Methods.getOffsetParent,
-
-  page: Element.Methods.viewportOffset,
-
-  clone: function(source, target, options) {
-    options = options || { };
-    return Element.clonePosition(target, source, options);
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
-  function iter(name) {
-    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
-  }
-
-  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
-  function(element, className) {
-    className = className.toString().strip();
-    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
-    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
-  } : function(element, className) {
-    className = className.toString().strip();
-    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
-    if (!classNames && !className) return elements;
-
-    var nodes = $(element).getElementsByTagName('*');
-    className = ' ' + className + ' ';
-
-    for (var i = 0, child, cn; child = nodes[i]; i++) {
-      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
-          (classNames && classNames.all(function(name) {
-            return !name.toString().blank() && cn.include(' ' + name + ' ');
-          }))))
-        elements.push(Element.extend(child));
-    }
-    return elements;
-  };
-
-  return function(className, parentElement) {
-    return $(parentElement || document.body).getElementsByClassName(className);
-  };
-}(Element.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set($A(this).concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set($A(this).without(classNameToRemove).join(' '));
-  },
-
-  toString: function() {
-    return $A(this).join(' ');
-  }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-
-/*--------------------------------------------------------------------------*/
-
-Element.addMethods();
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/extconf.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/extconf.rb
deleted file mode 100644
index 88aaf40..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/extconf.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'mkmf'
-require 'rbconfig'
-
-if CONFIG['CC'] =~ /gcc/
-  $CFLAGS += ' -Wall'
-  #$CFLAGS += ' -O0 -ggdb'
-end
-
-create_makefile 'generator'
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/generator.c b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/generator.c
deleted file mode 100644
index e5333b7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/generator.c
+++ /dev/null
@@ -1,875 +0,0 @@
-#include <string.h>
-#include "ruby.h"
-#include "st.h"
-#include "unicode.h"
-#include <math.h>
-
-#define check_max_nesting(state, depth) do {                                   \
-    long current_nesting = 1 + depth;                                          \
-    if (state->max_nesting != 0 && current_nesting > state->max_nesting)       \
-        rb_raise(eNestingError, "nesting of %ld is too deep", current_nesting); \
-} while (0);
-
-static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject,
-             mHash, mArray, mInteger, mFloat, mString, mString_Extend,
-             mTrueClass, mFalseClass, mNilClass, eGeneratorError,
-             eCircularDatastructure, eNestingError;
-
-static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before,
-          i_object_nl, i_array_nl, i_check_circular, i_max_nesting,
-          i_allow_nan, i_pack, i_unpack, i_create_id, i_extend;
-
-typedef struct JSON_Generator_StateStruct {
-    VALUE indent;
-    VALUE space;
-    VALUE space_before;
-    VALUE object_nl;
-    VALUE array_nl;
-    int check_circular;
-    VALUE seen;
-    VALUE memo;
-    VALUE depth;
-    long max_nesting;
-    int flag;
-    int allow_nan;
-} JSON_Generator_State;
-
-#define GET_STATE(self)                       \
-    JSON_Generator_State *state;              \
-    Data_Get_Struct(self, JSON_Generator_State, state);
-
-/* 
- * Document-module: JSON::Ext::Generator
- *
- * This is the JSON generator implemented as a C extension. It can be
- * configured to be used by setting
- *
- *  JSON.generator = JSON::Ext::Generator
- *
- * with the method generator= in JSON.
- *
- */
-
-static int hash_to_json_state_i(VALUE key, VALUE value, VALUE Vstate)
-{
-    VALUE json, buf, Vdepth;
-    GET_STATE(Vstate);
-    buf = state->memo;
-    Vdepth = state->depth;
-
-    if (key == Qundef) return ST_CONTINUE;
-    if (state->flag) {
-        state->flag = 0;
-        rb_str_buf_cat2(buf, ",");
-        if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(buf, state->object_nl);
-    }
-    if (RSTRING_LEN(state->object_nl)) {
-        rb_str_buf_append(buf, rb_str_times(state->indent, Vdepth));
-    }
-    json = rb_funcall(rb_funcall(key, i_to_s, 0), i_to_json, 2, Vstate, Vdepth);
-    Check_Type(json, T_STRING);
-    rb_str_buf_append(buf, json);
-    OBJ_INFECT(buf, json);
-    if (RSTRING_LEN(state->space_before)) {
-        rb_str_buf_append(buf, state->space_before);
-    }
-    rb_str_buf_cat2(buf, ":");
-    if (RSTRING_LEN(state->space)) rb_str_buf_append(buf, state->space);
-    json = rb_funcall(value, i_to_json, 2, Vstate, Vdepth);
-    Check_Type(json, T_STRING);
-    state->flag = 1;
-    rb_str_buf_append(buf, json);
-    OBJ_INFECT(buf, json);
-    state->depth = Vdepth;
-    state->memo = buf;
-    return ST_CONTINUE;
-}
-
-inline static VALUE mHash_json_transfrom(VALUE self, VALUE Vstate, VALUE Vdepth) {
-    long depth, len = RHASH(self)->tbl->num_entries;
-    VALUE result;
-    GET_STATE(Vstate);
-
-    depth = 1 + FIX2LONG(Vdepth);
-    result = rb_str_buf_new(len);
-    state->memo = result;
-    state->depth = LONG2FIX(depth);
-    state->flag = 0;
-    rb_str_buf_cat2(result, "{");
-    if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(result, state->object_nl);
-    rb_hash_foreach(self, hash_to_json_state_i, Vstate);
-    if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(result, state->object_nl);
-    if (RSTRING_LEN(state->object_nl)) {
-        rb_str_buf_append(result, rb_str_times(state->indent, Vdepth));
-    }
-    rb_str_buf_cat2(result, "}");
-    return result;
-}
-
-static int hash_to_json_i(VALUE key, VALUE value, VALUE buf)
-{
-    VALUE tmp;
-
-    if (key == Qundef) return ST_CONTINUE;
-    if (RSTRING_LEN(buf) > 1) rb_str_buf_cat2(buf, ",");
-    tmp = rb_funcall(rb_funcall(key, i_to_s, 0), i_to_json, 0);
-    Check_Type(tmp, T_STRING);
-    rb_str_buf_append(buf, tmp);
-    OBJ_INFECT(buf, tmp);
-    rb_str_buf_cat2(buf, ":");
-    tmp = rb_funcall(value, i_to_json, 0);
-    Check_Type(tmp, T_STRING);
-    rb_str_buf_append(buf, tmp);
-    OBJ_INFECT(buf, tmp);
-
-    return ST_CONTINUE;
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- * Returns a JSON string containing a JSON object, that is unparsed from
- * this Hash instance.
- * _state_ is a JSON::State object, that can also be used to configure the
- * produced JSON string output further.
- * _depth_ is used to find out nesting depth, to indent accordingly.
- */
-static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self)
-{
-    VALUE Vstate, Vdepth, result;
-    long depth;
-
-    rb_scan_args(argc, argv, "02", &Vstate, &Vdepth);
-    depth = NIL_P(Vdepth) ? 0 : FIX2LONG(Vdepth);
-    if (NIL_P(Vstate)) {
-        long len = RHASH(self)->tbl->num_entries;
-        result = rb_str_buf_new(len);
-        rb_str_buf_cat2(result, "{");
-        rb_hash_foreach(self, hash_to_json_i, result);
-        rb_str_buf_cat2(result, "}");
-    } else {
-        GET_STATE(Vstate);
-        check_max_nesting(state, depth);
-        if (state->check_circular) {
-            VALUE self_id = rb_obj_id(self);
-            if (RTEST(rb_hash_aref(state->seen, self_id))) {
-                rb_raise(eCircularDatastructure,
-                        "circular data structures not supported!");
-            }
-            rb_hash_aset(state->seen, self_id, Qtrue);
-            result = mHash_json_transfrom(self, Vstate, LONG2FIX(depth));
-            rb_hash_delete(state->seen, self_id);
-        } else {
-            result = mHash_json_transfrom(self, Vstate, LONG2FIX(depth));
-        }
-    }
-    OBJ_INFECT(result, self);
-    return result;
-}
-
-inline static VALUE mArray_json_transfrom(VALUE self, VALUE Vstate, VALUE Vdepth) {
-    long i, len = RARRAY_LEN(self);
-    VALUE shift, result;
-    long depth = NIL_P(Vdepth) ? 0 : FIX2LONG(Vdepth);
-    VALUE delim = rb_str_new2(",");
-    GET_STATE(Vstate);
-
-    check_max_nesting(state, depth);
-    if (state->check_circular) {
-        VALUE self_id = rb_obj_id(self);
-        rb_hash_aset(state->seen, self_id, Qtrue);
-        result = rb_str_buf_new(len);
-        if (RSTRING_LEN(state->array_nl)) rb_str_append(delim, state->array_nl);
-        shift = rb_str_times(state->indent, LONG2FIX(depth + 1));
-
-        rb_str_buf_cat2(result, "[");
-        OBJ_INFECT(result, self);
-        rb_str_buf_append(result, state->array_nl);
-        for (i = 0;  i < len; i++) {
-            VALUE element = RARRAY_PTR(self)[i];
-            if (RTEST(rb_hash_aref(state->seen, rb_obj_id(element)))) {
-                rb_raise(eCircularDatastructure,
-                        "circular data structures not supported!");
-            }
-            OBJ_INFECT(result, element);
-            if (i > 0) rb_str_buf_append(result, delim);
-            rb_str_buf_append(result, shift);
-            element = rb_funcall(element, i_to_json, 2, Vstate, LONG2FIX(depth + 1));
-            Check_Type(element, T_STRING);
-            rb_str_buf_append(result, element);
-        }
-        if (RSTRING_LEN(state->array_nl)) {
-            rb_str_buf_append(result, state->array_nl);
-            rb_str_buf_append(result, rb_str_times(state->indent, LONG2FIX(depth)));
-        }
-        rb_str_buf_cat2(result, "]");
-        rb_hash_delete(state->seen, self_id);
-    } else {
-        result = rb_str_buf_new(len);
-        OBJ_INFECT(result, self);
-        if (RSTRING_LEN(state->array_nl)) rb_str_append(delim, state->array_nl);
-        shift = rb_str_times(state->indent, LONG2FIX(depth + 1));
-
-        rb_str_buf_cat2(result, "[");
-        rb_str_buf_append(result, state->array_nl);
-        for (i = 0;  i < len; i++) {
-            VALUE element = RARRAY_PTR(self)[i];
-            OBJ_INFECT(result, element);
-            if (i > 0) rb_str_buf_append(result, delim);
-            rb_str_buf_append(result, shift);
-            element = rb_funcall(element, i_to_json, 2, Vstate, LONG2FIX(depth + 1));
-            Check_Type(element, T_STRING);
-            rb_str_buf_append(result, element);
-        }
-        rb_str_buf_append(result, state->array_nl);
-        if (RSTRING_LEN(state->array_nl)) {
-            rb_str_buf_append(result, rb_str_times(state->indent, LONG2FIX(depth)));
-        }
-        rb_str_buf_cat2(result, "]");
-    }
-    return result;
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- * Returns a JSON string containing a JSON array, that is unparsed from
- * this Array instance.
- * _state_ is a JSON::State object, that can also be used to configure the
- * produced JSON string output further.
- * _depth_ is used to find out nesting depth, to indent accordingly.
- */
-static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self) {
-    VALUE Vstate, Vdepth, result;
-
-    rb_scan_args(argc, argv, "02", &Vstate, &Vdepth);
-    if (NIL_P(Vstate)) {
-        long i, len = RARRAY_LEN(self);
-        result = rb_str_buf_new(2 + 2 * len);
-        rb_str_buf_cat2(result, "[");
-        OBJ_INFECT(result, self);
-        for (i = 0;  i < len; i++) {
-            VALUE element = RARRAY_PTR(self)[i];
-            OBJ_INFECT(result, element);
-            if (i > 0) rb_str_buf_cat2(result, ",");
-            element = rb_funcall(element, i_to_json, 0);
-            Check_Type(element, T_STRING);
-            rb_str_buf_append(result, element);
-        }
-        rb_str_buf_cat2(result, "]");
-    } else {
-        result = mArray_json_transfrom(self, Vstate, Vdepth);
-    }
-    OBJ_INFECT(result, self);
-    return result;
-}
-
-/*
- * call-seq: to_json(*)
- *
- * Returns a JSON string representation for this Integer number.
- */
-static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self)
-{
-    return rb_funcall(self, i_to_s, 0);
-}
-
-/*
- * call-seq: to_json(*)
- *
- * Returns a JSON string representation for this Float number.
- */
-static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self)
-{
-    JSON_Generator_State *state = NULL;
-    VALUE Vstate, rest, tmp;
-    double value = RFLOAT(self)->value;
-    rb_scan_args(argc, argv, "01*", &Vstate, &rest);
-    if (!NIL_P(Vstate)) Data_Get_Struct(Vstate, JSON_Generator_State, state);
-    if (isinf(value)) {
-        if (!state || state->allow_nan) {
-            return rb_funcall(self, i_to_s, 0);
-        } else {
-            tmp = rb_funcall(self, i_to_s, 0);
-            rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp));
-        }
-    } else if (isnan(value)) {
-        if (!state || state->allow_nan) {
-            return rb_funcall(self, i_to_s, 0);
-        } else {
-            tmp = rb_funcall(self, i_to_s, 0);
-            rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp));
-        }
-    } else {
-        return rb_funcall(self, i_to_s, 0);
-    }
-}
-
-/*
- * call-seq: String.included(modul)
- *
- * Extends _modul_ with the String::Extend module.
- */
-static VALUE mString_included_s(VALUE self, VALUE modul) {
-    return rb_funcall(modul, i_extend, 1, mString_Extend);
-}
-
-/*
- * call-seq: to_json(*)
- *
- * This string should be encoded with UTF-8 A call to this method
- * returns a JSON string encoded with UTF16 big endian characters as
- * \u????.
- */
-static VALUE mString_to_json(int argc, VALUE *argv, VALUE self)
-{
-    VALUE result = rb_str_buf_new(RSTRING_LEN(self));
-    rb_str_buf_cat2(result, "\"");
-    JSON_convert_UTF8_to_JSON(result, self, strictConversion);
-    rb_str_buf_cat2(result, "\"");
-    return result;
-}
-
-/*
- * call-seq: to_json_raw_object()
- *
- * This method creates a raw object hash, that can be nested into
- * other data structures and will be unparsed as a raw string. This
- * method should be used, if you want to convert raw strings to JSON
- * instead of UTF-8 strings, e. g. binary data.
- */
-static VALUE mString_to_json_raw_object(VALUE self) {
-    VALUE ary;
-    VALUE result = rb_hash_new();
-    rb_hash_aset(result, rb_funcall(mJSON, i_create_id, 0), rb_class_name(rb_obj_class(self)));
-    ary = rb_funcall(self, i_unpack, 1, rb_str_new2("C*"));
-    rb_hash_aset(result, rb_str_new2("raw"), ary);
-    return result;
-}
-
-/*
- * call-seq: to_json_raw(*args)
- *
- * This method creates a JSON text from the result of a call to
- * to_json_raw_object of this String.
- */
-static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self) {
-    VALUE obj = mString_to_json_raw_object(self);
-    Check_Type(obj, T_HASH);
-    return mHash_to_json(argc, argv, obj);
-}
-
-/*
- * call-seq: json_create(o)
- *
- * Raw Strings are JSON Objects (the raw bytes are stored in an array for the
- * key "raw"). The Ruby String can be created by this module method.
- */
-static VALUE mString_Extend_json_create(VALUE self, VALUE o) {
-    VALUE ary;
-    Check_Type(o, T_HASH);
-    ary = rb_hash_aref(o, rb_str_new2("raw"));
-    return rb_funcall(ary, i_pack, 1, rb_str_new2("C*"));
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- * Returns a JSON string for true: 'true'.
- */
-static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self)
-{
-    return rb_str_new2("true");
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- * Returns a JSON string for false: 'false'.
- */
-static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self)
-{
-    return rb_str_new2("false");
-}
-
-/*
- * call-seq: to_json(state = nil, depth = 0)
- *
- */
-static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self)
-{
-    return rb_str_new2("null");
-}
-
-/*
- * call-seq: to_json(*)
- *
- * Converts this object to a string (calling #to_s), converts
- * it to a JSON string, and returns the result. This is a fallback, if no
- * special method #to_json was defined for some object.
- */
-static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self)
-{
-    VALUE string = rb_funcall(self, i_to_s, 0);
-    Check_Type(string, T_STRING);
-    return mString_to_json(argc, argv, string);
-}
-
-/* 
- * Document-class: JSON::Ext::Generator::State
- *
- * This class is used to create State instances, that are use to hold data
- * while generating a JSON text from a a Ruby data structure.
- */
-
-static void State_mark(JSON_Generator_State *state)
-{
-    rb_gc_mark_maybe(state->indent);
-    rb_gc_mark_maybe(state->space);
-    rb_gc_mark_maybe(state->space_before);
-    rb_gc_mark_maybe(state->object_nl);
-    rb_gc_mark_maybe(state->array_nl);
-    rb_gc_mark_maybe(state->seen);
-    rb_gc_mark_maybe(state->memo);
-    rb_gc_mark_maybe(state->depth);
-}
-
-static JSON_Generator_State *State_allocate()
-{
-    JSON_Generator_State *state = ALLOC(JSON_Generator_State);
-    return state;
-}
-
-static VALUE cState_s_allocate(VALUE klass)
-{
-    JSON_Generator_State *state = State_allocate();
-    return Data_Wrap_Struct(klass, State_mark, -1, state);
-}
-
-/*
- * call-seq: configure(opts)
- *
- * Configure this State instance with the Hash _opts_, and return
- * itself.
- */
-static inline VALUE cState_configure(VALUE self, VALUE opts)
-{
-    VALUE tmp;
-    GET_STATE(self);
-    tmp = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
-    if (NIL_P(tmp)) tmp = rb_convert_type(opts, T_HASH, "Hash", "to_h");
-    if (NIL_P(tmp)) {
-        rb_raise(rb_eArgError, "opts has to be hash like or convertable into a hash");
-    }
-    opts = tmp;
-    tmp = rb_hash_aref(opts, ID2SYM(i_indent));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->indent = tmp;
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_space));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->space = tmp;
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_space_before));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->space_before = tmp;
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_array_nl));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->array_nl = tmp;
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_object_nl));
-    if (RTEST(tmp)) {
-        Check_Type(tmp, T_STRING);
-        state->object_nl = tmp;
-    }
-    tmp = ID2SYM(i_check_circular);
-    if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-        tmp = rb_hash_aref(opts, ID2SYM(i_check_circular));
-        state->check_circular = RTEST(tmp);
-    } else {
-        state->check_circular = 1;
-    }
-    tmp = ID2SYM(i_max_nesting);
-    state->max_nesting = 19;
-    if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-        VALUE max_nesting = rb_hash_aref(opts, tmp);
-        if (RTEST(max_nesting)) {
-            Check_Type(max_nesting, T_FIXNUM);
-            state->max_nesting = FIX2LONG(max_nesting);
-        } else {
-            state->max_nesting = 0;
-        }
-    }
-    tmp = rb_hash_aref(opts, ID2SYM(i_allow_nan));
-    state->allow_nan = RTEST(tmp);
-    return self;
-}
-
-/*
- * call-seq: to_h
- *
- * Returns the configuration instance variables as a hash, that can be
- * passed to the configure method.
- */
-static VALUE cState_to_h(VALUE self)
-{
-    VALUE result = rb_hash_new();
-    GET_STATE(self);
-    rb_hash_aset(result, ID2SYM(i_indent), state->indent);
-    rb_hash_aset(result, ID2SYM(i_space), state->space);
-    rb_hash_aset(result, ID2SYM(i_space_before), state->space_before);
-    rb_hash_aset(result, ID2SYM(i_object_nl), state->object_nl);
-    rb_hash_aset(result, ID2SYM(i_array_nl), state->array_nl);
-    rb_hash_aset(result, ID2SYM(i_check_circular), state->check_circular ? Qtrue : Qfalse);
-    rb_hash_aset(result, ID2SYM(i_allow_nan), state->allow_nan ? Qtrue : Qfalse);
-    rb_hash_aset(result, ID2SYM(i_max_nesting), LONG2FIX(state->max_nesting));
-    return result;
-}
-
-
-/*
- * call-seq: new(opts = {})
- *
- * Instantiates a new State object, configured by _opts_.
- *
- * _opts_ can have the following keys:
- *
- * * *indent*: a string used to indent levels (default: ''),
- * * *space*: a string that is put after, a : or , delimiter (default: ''),
- * * *space_before*: a string that is put before a : pair delimiter (default: ''),
- * * *object_nl*: a string that is put at the end of a JSON object (default: ''), 
- * * *array_nl*: a string that is put at the end of a JSON array (default: ''),
- * * *check_circular*: true if checking for circular data structures
- *   should be done, false (the default) otherwise.
- * * *allow_nan*: true if NaN, Infinity, and -Infinity should be
- *   generated, otherwise an exception is thrown, if these values are
- *   encountered. This options defaults to false.
- */
-static VALUE cState_initialize(int argc, VALUE *argv, VALUE self)
-{
-    VALUE opts;
-    GET_STATE(self);
-
-    rb_scan_args(argc, argv, "01", &opts);
-    state->indent = rb_str_new2("");
-    state->space = rb_str_new2("");
-    state->space_before = rb_str_new2("");
-    state->array_nl = rb_str_new2("");
-    state->object_nl = rb_str_new2("");
-    if (NIL_P(opts)) {
-        state->check_circular = 1;
-        state->allow_nan = 0;
-        state->max_nesting = 19;
-    } else {
-        cState_configure(self, opts);
-    }
-    state->seen = rb_hash_new();
-    state->memo = Qnil;
-    state->depth = INT2FIX(0);
-    return self;
-}
-
-/*
- * call-seq: from_state(opts)
- *
- * Creates a State object from _opts_, which ought to be Hash to create a
- * new State instance configured by _opts_, something else to create an
- * unconfigured instance. If _opts_ is a State object, it is just returned.
- */
-static VALUE cState_from_state_s(VALUE self, VALUE opts)
-{
-    if (rb_obj_is_kind_of(opts, self)) {
-        return opts;
-    } else if (rb_obj_is_kind_of(opts, rb_cHash)) {
-        return rb_funcall(self, i_new, 1, opts);
-    } else {
-        return rb_funcall(self, i_new, 0);
-    }
-}
-
-/*
- * call-seq: indent()
- *
- * This string is used to indent levels in the JSON text.
- */
-static VALUE cState_indent(VALUE self)
-{
-    GET_STATE(self);
-    return state->indent;
-}
-
-/*
- * call-seq: indent=(indent)
- *
- * This string is used to indent levels in the JSON text.
- */
-static VALUE cState_indent_set(VALUE self, VALUE indent)
-{
-    GET_STATE(self);
-    Check_Type(indent, T_STRING);
-    return state->indent = indent;
-}
-
-/*
- * call-seq: space()
- *
- * This string is used to insert a space between the tokens in a JSON
- * string.
- */
-static VALUE cState_space(VALUE self)
-{
-    GET_STATE(self);
-    return state->space;
-}
-
-/*
- * call-seq: space=(space)
- *
- * This string is used to insert a space between the tokens in a JSON
- * string.
- */
-static VALUE cState_space_set(VALUE self, VALUE space)
-{
-    GET_STATE(self);
-    Check_Type(space, T_STRING);
-    return state->space = space;
-}
-
-/*
- * call-seq: space_before()
- *
- * This string is used to insert a space before the ':' in JSON objects.
- */
-static VALUE cState_space_before(VALUE self)
-{
-    GET_STATE(self);
-    return state->space_before;
-}
-
-/*
- * call-seq: space_before=(space_before)
- *
- * This string is used to insert a space before the ':' in JSON objects.
- */
-static VALUE cState_space_before_set(VALUE self, VALUE space_before)
-{
-    GET_STATE(self);
-    Check_Type(space_before, T_STRING);
-    return state->space_before = space_before;
-}
-
-/*
- * call-seq: object_nl()
- *
- * This string is put at the end of a line that holds a JSON object (or
- * Hash).
- */
-static VALUE cState_object_nl(VALUE self)
-{
-    GET_STATE(self);
-    return state->object_nl;
-}
-
-/*
- * call-seq: object_nl=(object_nl)
- *
- * This string is put at the end of a line that holds a JSON object (or
- * Hash).
- */
-static VALUE cState_object_nl_set(VALUE self, VALUE object_nl)
-{
-    GET_STATE(self);
-    Check_Type(object_nl, T_STRING);
-    return state->object_nl = object_nl;
-}
-
-/*
- * call-seq: array_nl()
- *
- * This string is put at the end of a line that holds a JSON array.
- */
-static VALUE cState_array_nl(VALUE self)
-{
-    GET_STATE(self);
-    return state->array_nl;
-}
-
-/*
- * call-seq: array_nl=(array_nl)
- *
- * This string is put at the end of a line that holds a JSON array.
- */
-static VALUE cState_array_nl_set(VALUE self, VALUE array_nl)
-{
-    GET_STATE(self);
-    Check_Type(array_nl, T_STRING);
-    return state->array_nl = array_nl;
-}
-
-/*
- * call-seq: check_circular?
- *
- * Returns true, if circular data structures should be checked,
- * otherwise returns false.
- */
-static VALUE cState_check_circular_p(VALUE self)
-{
-    GET_STATE(self);
-    return state->check_circular ? Qtrue : Qfalse;
-}
-
-/*
- * call-seq: max_nesting
- *
- * This integer returns the maximum level of data structure nesting in
- * the generated JSON, max_nesting = 0 if no maximum is checked.
- */
-static VALUE cState_max_nesting(VALUE self)
-{
-    GET_STATE(self);
-    return LONG2FIX(state->max_nesting);
-}
-
-/*
- * call-seq: max_nesting=(depth)
- *
- * This sets the maximum level of data structure nesting in the generated JSON
- * to the integer depth, max_nesting = 0 if no maximum should be checked.
- */
-static VALUE cState_max_nesting_set(VALUE self, VALUE depth)
-{
-    GET_STATE(self);
-    Check_Type(depth, T_FIXNUM);
-    state->max_nesting = FIX2LONG(depth);
-    return Qnil;
-}
-
-/*
- * call-seq: allow_nan?
- *
- * Returns true, if NaN, Infinity, and -Infinity should be generated, otherwise
- * returns false.
- */
-static VALUE cState_allow_nan_p(VALUE self)
-{
-    GET_STATE(self);
-    return state->allow_nan ? Qtrue : Qfalse;
-}
-
-/*
- * call-seq: seen?(object)
- *
- * Returns _true_, if _object_ was already seen during this generating run. 
- */
-static VALUE cState_seen_p(VALUE self, VALUE object)
-{
-    GET_STATE(self);
-    return rb_hash_aref(state->seen, rb_obj_id(object));
-}
-
-/*
- * call-seq: remember(object)
- *
- * Remember _object_, to find out if it was already encountered (if a cyclic
- * data structure is rendered). 
- */
-static VALUE cState_remember(VALUE self, VALUE object)
-{
-    GET_STATE(self);
-    return rb_hash_aset(state->seen, rb_obj_id(object), Qtrue);
-}
-
-/*
- * call-seq: forget(object)
- *
- * Forget _object_ for this generating run.
- */
-static VALUE cState_forget(VALUE self, VALUE object)
-{
-    GET_STATE(self);
-    return rb_hash_delete(state->seen, rb_obj_id(object));
-}
-
-/*
- *
- */
-void Init_generator()
-{
-    rb_require("json/common");
-    mJSON = rb_define_module("JSON");
-    mExt = rb_define_module_under(mJSON, "Ext");
-    mGenerator = rb_define_module_under(mExt, "Generator");
-    eGeneratorError = rb_path2class("JSON::GeneratorError");
-    eCircularDatastructure = rb_path2class("JSON::CircularDatastructure");
-    eNestingError = rb_path2class("JSON::NestingError");
-    cState = rb_define_class_under(mGenerator, "State", rb_cObject);
-    rb_define_alloc_func(cState, cState_s_allocate);
-    rb_define_singleton_method(cState, "from_state", cState_from_state_s, 1);
-    rb_define_method(cState, "initialize", cState_initialize, -1);
-
-    rb_define_method(cState, "indent", cState_indent, 0);
-    rb_define_method(cState, "indent=", cState_indent_set, 1);
-    rb_define_method(cState, "space", cState_space, 0);
-    rb_define_method(cState, "space=", cState_space_set, 1);
-    rb_define_method(cState, "space_before", cState_space_before, 0);
-    rb_define_method(cState, "space_before=", cState_space_before_set, 1);
-    rb_define_method(cState, "object_nl", cState_object_nl, 0);
-    rb_define_method(cState, "object_nl=", cState_object_nl_set, 1);
-    rb_define_method(cState, "array_nl", cState_array_nl, 0);
-    rb_define_method(cState, "array_nl=", cState_array_nl_set, 1);
-    rb_define_method(cState, "check_circular?", cState_check_circular_p, 0);
-    rb_define_method(cState, "max_nesting", cState_max_nesting, 0);
-    rb_define_method(cState, "max_nesting=", cState_max_nesting_set, 1);
-    rb_define_method(cState, "allow_nan?", cState_allow_nan_p, 0);
-    rb_define_method(cState, "seen?", cState_seen_p, 1);
-    rb_define_method(cState, "remember", cState_remember, 1);
-    rb_define_method(cState, "forget", cState_forget, 1);
-    rb_define_method(cState, "configure", cState_configure, 1);
-    rb_define_method(cState, "to_h", cState_to_h, 0);
-
-    mGeneratorMethods = rb_define_module_under(mGenerator, "GeneratorMethods");
-    mObject = rb_define_module_under(mGeneratorMethods, "Object");
-    rb_define_method(mObject, "to_json", mObject_to_json, -1);
-    mHash = rb_define_module_under(mGeneratorMethods, "Hash");
-    rb_define_method(mHash, "to_json", mHash_to_json, -1);
-    mArray = rb_define_module_under(mGeneratorMethods, "Array");
-    rb_define_method(mArray, "to_json", mArray_to_json, -1);
-    mInteger = rb_define_module_under(mGeneratorMethods, "Integer");
-    rb_define_method(mInteger, "to_json", mInteger_to_json, -1);
-    mFloat = rb_define_module_under(mGeneratorMethods, "Float");
-    rb_define_method(mFloat, "to_json", mFloat_to_json, -1);
-    mString = rb_define_module_under(mGeneratorMethods, "String");
-    rb_define_singleton_method(mString, "included", mString_included_s, 1);
-    rb_define_method(mString, "to_json", mString_to_json, -1);
-    rb_define_method(mString, "to_json_raw", mString_to_json_raw, -1);
-    rb_define_method(mString, "to_json_raw_object", mString_to_json_raw_object, 0);
-    mString_Extend = rb_define_module_under(mString, "Extend");
-    rb_define_method(mString_Extend, "json_create", mString_Extend_json_create, 1);
-    mTrueClass = rb_define_module_under(mGeneratorMethods, "TrueClass");
-    rb_define_method(mTrueClass, "to_json", mTrueClass_to_json, -1);
-    mFalseClass = rb_define_module_under(mGeneratorMethods, "FalseClass");
-    rb_define_method(mFalseClass, "to_json", mFalseClass_to_json, -1);
-    mNilClass = rb_define_module_under(mGeneratorMethods, "NilClass");
-    rb_define_method(mNilClass, "to_json", mNilClass_to_json, -1);
-
-    i_to_s = rb_intern("to_s");
-    i_to_json = rb_intern("to_json");
-    i_new = rb_intern("new");
-    i_indent = rb_intern("indent");
-    i_space = rb_intern("space");
-    i_space_before = rb_intern("space_before");
-    i_object_nl = rb_intern("object_nl");
-    i_array_nl = rb_intern("array_nl");
-    i_check_circular = rb_intern("check_circular");
-    i_max_nesting = rb_intern("max_nesting");
-    i_allow_nan = rb_intern("allow_nan");
-    i_pack = rb_intern("pack");
-    i_unpack = rb_intern("unpack");
-    i_create_id = rb_intern("create_id");
-    i_extend = rb_intern("extend");
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.c b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.c
deleted file mode 100644
index 76834ea..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.c
+++ /dev/null
@@ -1,182 +0,0 @@
-#include "unicode.h"
-
-#define unicode_escape(buffer, character)          \
-    snprintf(buf, 7, "\\u%04x", (unsigned int) (character)); \
-         rb_str_buf_cat(buffer, buf, 6);
-
-/*
- * Copyright 2001-2004 Unicode, Inc.
- * 
- * Disclaimer
- * 
- * This source code is provided as is by Unicode, Inc. No claims are
- * made as to fitness for any particular purpose. No warranties of any
- * kind are expressed or implied. The recipient agrees to determine
- * applicability of information provided. If this file has been
- * purchased on magnetic or optical media from Unicode, Inc., the
- * sole remedy for any claim will be exchange of defective media
- * within 90 days of receipt.
- * 
- * Limitations on Rights to Redistribute This Code
- * 
- * Unicode, Inc. hereby grants the right to freely use the information
- * supplied in this file in the creation of products supporting the
- * Unicode Standard, and to make copies of this file in any form
- * for internal or external distribution as long as this notice
- * remains attached.
- */
-
-/*
- * Index into the table below with the first byte of a UTF-8 sequence to
- * get the number of trailing bytes that are supposed to follow it.
- * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
- * left as-is for anyone who may want to do such conversion, which was
- * allowed in earlier algorithms.
- */
-static const char trailingBytesForUTF8[256] = {
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
-};
-
-/*
- * Magic values subtracted from a buffer value during UTF8 conversion.
- * This table contains as many values as there might be trailing bytes
- * in a UTF-8 sequence.
- */
-static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 
-		     0x03C82080UL, 0xFA082080UL, 0x82082080UL };
-
-/*
- * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
- * into the first byte, depending on how many bytes follow.  There are
- * as many entries in this table as there are UTF-8 sequence types.
- * (I.e., one byte sequence, two byte... etc.). Remember that sequencs
- * for *legal* UTF-8 will be 4 or fewer bytes total.
- */
-static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
-
-/*
- * Utility routine to tell whether a sequence of bytes is legal UTF-8.
- * This must be called with the length pre-determined by the first byte.
- * If not calling this from ConvertUTF8to*, then the length can be set by:
- *  length = trailingBytesForUTF8[*source]+1;
- * and the sequence is illegal right away if there aren't that many bytes
- * available.
- * If presented with a length > 4, this returns 0.  The Unicode
- * definition of UTF-8 goes up to 4-byte sequences.
- */
-
-inline static unsigned char isLegalUTF8(const UTF8 *source, int length)
-{
-    UTF8 a;
-    const UTF8 *srcptr = source+length;
-    switch (length) {
-        default: return 0;
-                 /* Everything else falls through when "1"... */
-        case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
-        case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
-        case 2: if ((a = (*--srcptr)) > 0xBF) return 0;
-
-                    switch (*source) {
-                        /* no fall-through in this inner switch */
-                        case 0xE0: if (a < 0xA0) return 0; break;
-                        case 0xED: if (a > 0x9F) return 0; break;
-                        case 0xF0: if (a < 0x90) return 0; break;
-                        case 0xF4: if (a > 0x8F) return 0; break;
-                        default:   if (a < 0x80) return 0;
-                    }
-
-        case 1: if (*source >= 0x80 && *source < 0xC2) return 0;
-    }
-    if (*source > 0xF4) return 0;
-    return 1;
-}
-
-void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags)
-{
-    char buf[7];
-    const UTF8* source = (UTF8 *) RSTRING_PTR(string);
-    const UTF8* sourceEnd = source + RSTRING_LEN(string);
-
-    while (source < sourceEnd) {
-        UTF32 ch = 0;
-        unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
-        if (source + extraBytesToRead >= sourceEnd) {
-            rb_raise(rb_path2class("JSON::GeneratorError"),
-                    "partial character in source, but hit end");
-        }
-        if (!isLegalUTF8(source, extraBytesToRead+1)) {
-            rb_raise(rb_path2class("JSON::GeneratorError"),
-                    "source sequence is illegal/malformed");
-        }
-        /*
-         * The cases all fall through. See "Note A" below.
-         */
-        switch (extraBytesToRead) {
-            case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
-            case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
-            case 3: ch += *source++; ch <<= 6;
-            case 2: ch += *source++; ch <<= 6;
-            case 1: ch += *source++; ch <<= 6;
-            case 0: ch += *source++;
-        }
-        ch -= offsetsFromUTF8[extraBytesToRead];
-
-        if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */
-            /* UTF-16 surrogate values are illegal in UTF-32 */
-            if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
-                if (flags == strictConversion) {
-                    source -= (extraBytesToRead+1); /* return to the illegal value itself */
-                    rb_raise(rb_path2class("JSON::GeneratorError"),
-                        "source sequence is illegal/malformed");
-                } else {
-                    unicode_escape(buffer, UNI_REPLACEMENT_CHAR);
-                }
-            } else {
-                /* normal case */
-                if (ch == '"') {
-                    rb_str_buf_cat2(buffer, "\\\"");
-                } else if (ch == '\\') {
-                    rb_str_buf_cat2(buffer, "\\\\");
-                } else if (ch == '/') {
-                    rb_str_buf_cat2(buffer, "\\/");
-                } else if (ch >= 0x20 && ch <= 0x7f) {
-                    rb_str_buf_cat(buffer, (char *) source - 1, 1);
-                } else if (ch == '\n') {
-                    rb_str_buf_cat2(buffer, "\\n");
-                } else if (ch == '\r') {
-                    rb_str_buf_cat2(buffer, "\\r");
-                } else if (ch == '\t') {
-                    rb_str_buf_cat2(buffer, "\\t");
-                } else if (ch == '\f') {
-                    rb_str_buf_cat2(buffer, "\\f");
-                } else if (ch == '\b') {
-                    rb_str_buf_cat2(buffer, "\\b");
-                } else if (ch < 0x20) {
-                    unicode_escape(buffer, (UTF16) ch);
-                } else {
-                    unicode_escape(buffer, (UTF16) ch);
-                }
-            }
-        } else if (ch > UNI_MAX_UTF16) {
-            if (flags == strictConversion) {
-                source -= (extraBytesToRead+1); /* return to the start */
-                rb_raise(rb_path2class("JSON::GeneratorError"),
-                        "source sequence is illegal/malformed");
-            } else {
-                unicode_escape(buffer, UNI_REPLACEMENT_CHAR);
-            }
-        } else {
-            /* target is a character in range 0xFFFF - 0x10FFFF. */
-            ch -= halfBase;
-            unicode_escape(buffer, (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START));
-            unicode_escape(buffer, (UTF16)((ch & halfMask) + UNI_SUR_LOW_START));
-        }
-    }
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.h b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.h
deleted file mode 100644
index 841474b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/generator/unicode.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#include "ruby.h"
-
-#ifndef _GENERATOR_UNICODE_H_
-#define _GENERATOR_UNICODE_H_
-
-typedef enum {
-	conversionOK = 0, 	/* conversion successful */
-	sourceExhausted,	/* partial character in source, but hit end */
-	targetExhausted,	/* insuff. room in target for conversion */
-	sourceIllegal		/* source sequence is illegal/malformed */
-} ConversionResult;
-
-typedef enum {
-	strictConversion = 0,
-	lenientConversion
-} ConversionFlags;
-
-typedef unsigned long	UTF32;	/* at least 32 bits */
-typedef unsigned short	UTF16;	/* at least 16 bits */
-typedef unsigned char	UTF8;	/* typically 8 bits */
-
-#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
-#define UNI_MAX_BMP (UTF32)0x0000FFFF
-#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
-#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
-#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
-
-#define UNI_SUR_HIGH_START  (UTF32)0xD800
-#define UNI_SUR_HIGH_END    (UTF32)0xDBFF
-#define UNI_SUR_LOW_START   (UTF32)0xDC00
-#define UNI_SUR_LOW_END     (UTF32)0xDFFF
-
-static const int halfShift  = 10; /* used for shifting by 10 bits */
-
-static const UTF32 halfBase = 0x0010000UL;
-static const UTF32 halfMask = 0x3FFUL;
-
-void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags);
-
-#ifndef RARRAY_PTR
-#define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
-#endif
-#ifndef RARRAY_LEN
-#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
-#endif
-#ifndef RSTRING_PTR
-#define RSTRING_PTR(string) RSTRING(string)->ptr
-#endif
-#ifndef RSTRING_LEN
-#define RSTRING_LEN(string) RSTRING(string)->len
-#endif
-
-#endif
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/extconf.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/extconf.rb
deleted file mode 100644
index f511bf0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/extconf.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'mkmf'
-require 'rbconfig'
-
-if CONFIG['CC'] =~ /gcc/
-  $CFLAGS += ' -Wall'
-  #$CFLAGS += ' -O0 -ggdb'
-end
-
-create_makefile 'parser'
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.c b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.c
deleted file mode 100644
index b13c0e7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.c
+++ /dev/null
@@ -1,1758 +0,0 @@
-#line 1 "parser.rl"
-#include "ruby.h"
-#include "re.h"
-#include "st.h"
-#include "unicode.h"
-
-#define EVIL 0x666
-
-static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
-static VALUE CNaN, CInfinity, CMinusInfinity;
-
-static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
-          i_chr, i_max_nesting, i_allow_nan; 
-
-#define MinusInfinity "-Infinity"
-
-typedef struct JSON_ParserStruct {
-    VALUE Vsource;
-    char *source;
-    long len;
-    char *memo;
-    VALUE create_id;
-    int max_nesting;
-    int current_nesting;
-    int allow_nan;
-} JSON_Parser;
-
-static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
-
-#define GET_STRUCT                          \
-    JSON_Parser *json;                      \
-    Data_Get_Struct(self, JSON_Parser, json);
-
-#line 64 "parser.rl"
-
-
-
-#line 44 "parser.c"
-static const int JSON_object_start = 1;
-static const int JSON_object_first_final = 27;
-static const int JSON_object_error = 0;
-
-static const int JSON_object_en_main = 1;
-
-#line 97 "parser.rl"
-
-
-static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-    VALUE last_name = Qnil;
-
-    if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
-    }
-
-    *result = rb_hash_new();
-
-    
-#line 66 "parser.c"
-	{
-	cs = JSON_object_start;
-	}
-#line 111 "parser.rl"
-    
-#line 72 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	if ( (*p) == 123 )
-		goto st2;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	switch( (*p) ) {
-		case 13: goto st2;
-		case 32: goto st2;
-		case 34: goto tr2;
-		case 47: goto st23;
-		case 125: goto tr4;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st2;
-	goto st0;
-tr2:
-#line 83 "parser.rl"
-	{
-        char *np = JSON_parse_string(json, p, pe, &last_name);
-        if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st3;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-#line 110 "parser.c"
-	switch( (*p) ) {
-		case 13: goto st3;
-		case 32: goto st3;
-		case 47: goto st4;
-		case 58: goto st8;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st3;
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	switch( (*p) ) {
-		case 42: goto st5;
-		case 47: goto st7;
-	}
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	if ( (*p) == 42 )
-		goto st6;
-	goto st5;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	switch( (*p) ) {
-		case 42: goto st6;
-		case 47: goto st3;
-	}
-	goto st5;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( (*p) == 10 )
-		goto st3;
-	goto st7;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	switch( (*p) ) {
-		case 13: goto st8;
-		case 32: goto st8;
-		case 34: goto tr11;
-		case 45: goto tr11;
-		case 47: goto st19;
-		case 73: goto tr11;
-		case 78: goto tr11;
-		case 91: goto tr11;
-		case 102: goto tr11;
-		case 110: goto tr11;
-		case 116: goto tr11;
-		case 123: goto tr11;
-	}
-	if ( (*p) > 10 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr11;
-	} else if ( (*p) >= 9 )
-		goto st8;
-	goto st0;
-tr11:
-#line 72 "parser.rl"
-	{
-        VALUE v = Qnil;
-        char *np = JSON_parse_value(json, p, pe, &v); 
-        if (np == NULL) {
-            p--; {p++; cs = 9; goto _out;}
-        } else {
-            rb_hash_aset(*result, last_name, v);
-            {p = (( np))-1;}
-        }
-    }
-	goto st9;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-#line 193 "parser.c"
-	switch( (*p) ) {
-		case 13: goto st9;
-		case 32: goto st9;
-		case 44: goto st10;
-		case 47: goto st15;
-		case 125: goto tr4;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st9;
-	goto st0;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-	switch( (*p) ) {
-		case 13: goto st10;
-		case 32: goto st10;
-		case 34: goto tr2;
-		case 47: goto st11;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st10;
-	goto st0;
-st11:
-	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
-	switch( (*p) ) {
-		case 42: goto st12;
-		case 47: goto st14;
-	}
-	goto st0;
-st12:
-	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
-	if ( (*p) == 42 )
-		goto st13;
-	goto st12;
-st13:
-	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
-	switch( (*p) ) {
-		case 42: goto st13;
-		case 47: goto st10;
-	}
-	goto st12;
-st14:
-	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
-	if ( (*p) == 10 )
-		goto st10;
-	goto st14;
-st15:
-	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
-	switch( (*p) ) {
-		case 42: goto st16;
-		case 47: goto st18;
-	}
-	goto st0;
-st16:
-	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-	if ( (*p) == 42 )
-		goto st17;
-	goto st16;
-st17:
-	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
-	switch( (*p) ) {
-		case 42: goto st17;
-		case 47: goto st9;
-	}
-	goto st16;
-st18:
-	if ( ++p == pe )
-		goto _test_eof18;
-case 18:
-	if ( (*p) == 10 )
-		goto st9;
-	goto st18;
-tr4:
-#line 88 "parser.rl"
-	{ p--; {p++; cs = 27; goto _out;} }
-	goto st27;
-st27:
-	if ( ++p == pe )
-		goto _test_eof27;
-case 27:
-#line 289 "parser.c"
-	goto st0;
-st19:
-	if ( ++p == pe )
-		goto _test_eof19;
-case 19:
-	switch( (*p) ) {
-		case 42: goto st20;
-		case 47: goto st22;
-	}
-	goto st0;
-st20:
-	if ( ++p == pe )
-		goto _test_eof20;
-case 20:
-	if ( (*p) == 42 )
-		goto st21;
-	goto st20;
-st21:
-	if ( ++p == pe )
-		goto _test_eof21;
-case 21:
-	switch( (*p) ) {
-		case 42: goto st21;
-		case 47: goto st8;
-	}
-	goto st20;
-st22:
-	if ( ++p == pe )
-		goto _test_eof22;
-case 22:
-	if ( (*p) == 10 )
-		goto st8;
-	goto st22;
-st23:
-	if ( ++p == pe )
-		goto _test_eof23;
-case 23:
-	switch( (*p) ) {
-		case 42: goto st24;
-		case 47: goto st26;
-	}
-	goto st0;
-st24:
-	if ( ++p == pe )
-		goto _test_eof24;
-case 24:
-	if ( (*p) == 42 )
-		goto st25;
-	goto st24;
-st25:
-	if ( ++p == pe )
-		goto _test_eof25;
-case 25:
-	switch( (*p) ) {
-		case 42: goto st25;
-		case 47: goto st2;
-	}
-	goto st24;
-st26:
-	if ( ++p == pe )
-		goto _test_eof26;
-case 26:
-	if ( (*p) == 10 )
-		goto st2;
-	goto st26;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
-	_test_eof13: cs = 13; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-	_test_eof17: cs = 17; goto _test_eof; 
-	_test_eof18: cs = 18; goto _test_eof; 
-	_test_eof27: cs = 27; goto _test_eof; 
-	_test_eof19: cs = 19; goto _test_eof; 
-	_test_eof20: cs = 20; goto _test_eof; 
-	_test_eof21: cs = 21; goto _test_eof; 
-	_test_eof22: cs = 22; goto _test_eof; 
-	_test_eof23: cs = 23; goto _test_eof; 
-	_test_eof24: cs = 24; goto _test_eof; 
-	_test_eof25: cs = 25; goto _test_eof; 
-	_test_eof26: cs = 26; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 112 "parser.rl"
-
-    if (cs >= JSON_object_first_final) {
-        if (RTEST(json->create_id)) {
-            VALUE klassname = rb_hash_aref(*result, json->create_id);
-            if (!NIL_P(klassname)) {
-                VALUE klass = rb_path2class(StringValueCStr(klassname));
-                if RTEST(rb_funcall(klass, i_json_creatable_p, 0)) {
-                    *result = rb_funcall(klass, i_json_create, 1, *result);
-                }
-            }
-        }
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-#line 405 "parser.c"
-static const int JSON_value_start = 1;
-static const int JSON_value_first_final = 21;
-static const int JSON_value_error = 0;
-
-static const int JSON_value_en_main = 1;
-
-#line 210 "parser.rl"
-
-
-static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    
-#line 420 "parser.c"
-	{
-	cs = JSON_value_start;
-	}
-#line 217 "parser.rl"
-    
-#line 426 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	switch( (*p) ) {
-		case 34: goto tr0;
-		case 45: goto tr2;
-		case 73: goto st2;
-		case 78: goto st9;
-		case 91: goto tr5;
-		case 102: goto st11;
-		case 110: goto st15;
-		case 116: goto st18;
-		case 123: goto tr9;
-	}
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto tr2;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-tr0:
-#line 158 "parser.rl"
-	{
-        char *np = JSON_parse_string(json, p, pe, result);
-        if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st21;
-tr2:
-#line 163 "parser.rl"
-	{
-        char *np;
-        if(pe > p + 9 && !strncmp(MinusInfinity, p, 9)) {
-            if (json->allow_nan) {
-                *result = CMinusInfinity;
-                {p = (( p + 10))-1;}
-                p--; {p++; cs = 21; goto _out;}
-            } else {
-                rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-            }
-        }
-        np = JSON_parse_float(json, p, pe, result);
-        if (np != NULL) {p = (( np))-1;}
-        np = JSON_parse_integer(json, p, pe, result);
-        if (np != NULL) {p = (( np))-1;}
-        p--; {p++; cs = 21; goto _out;}
-    }
-	goto st21;
-tr5:
-#line 181 "parser.rl"
-	{ 
-        char *np;
-        json->current_nesting++;
-        np = JSON_parse_array(json, p, pe, result);
-        json->current_nesting--;
-        if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st21;
-tr9:
-#line 189 "parser.rl"
-	{ 
-        char *np;
-        json->current_nesting++;
-        np =  JSON_parse_object(json, p, pe, result);
-        json->current_nesting--;
-        if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st21;
-tr16:
-#line 151 "parser.rl"
-	{
-        if (json->allow_nan) {
-            *result = CInfinity;
-        } else {
-            rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
-        }
-    }
-	goto st21;
-tr18:
-#line 144 "parser.rl"
-	{
-        if (json->allow_nan) {
-            *result = CNaN;
-        } else {
-            rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
-        }
-    }
-	goto st21;
-tr22:
-#line 138 "parser.rl"
-	{
-        *result = Qfalse;
-    }
-	goto st21;
-tr25:
-#line 135 "parser.rl"
-	{
-        *result = Qnil;
-    }
-	goto st21;
-tr28:
-#line 141 "parser.rl"
-	{
-        *result = Qtrue;
-    }
-	goto st21;
-st21:
-	if ( ++p == pe )
-		goto _test_eof21;
-case 21:
-#line 197 "parser.rl"
-	{ p--; {p++; cs = 21; goto _out;} }
-#line 541 "parser.c"
-	goto st0;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	if ( (*p) == 110 )
-		goto st3;
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	if ( (*p) == 102 )
-		goto st4;
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	if ( (*p) == 105 )
-		goto st5;
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	if ( (*p) == 110 )
-		goto st6;
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	if ( (*p) == 105 )
-		goto st7;
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( (*p) == 116 )
-		goto st8;
-	goto st0;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	if ( (*p) == 121 )
-		goto tr16;
-	goto st0;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	if ( (*p) == 97 )
-		goto st10;
-	goto st0;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-	if ( (*p) == 78 )
-		goto tr18;
-	goto st0;
-st11:
-	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
-	if ( (*p) == 97 )
-		goto st12;
-	goto st0;
-st12:
-	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
-	if ( (*p) == 108 )
-		goto st13;
-	goto st0;
-st13:
-	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
-	if ( (*p) == 115 )
-		goto st14;
-	goto st0;
-st14:
-	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
-	if ( (*p) == 101 )
-		goto tr22;
-	goto st0;
-st15:
-	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
-	if ( (*p) == 117 )
-		goto st16;
-	goto st0;
-st16:
-	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-	if ( (*p) == 108 )
-		goto st17;
-	goto st0;
-st17:
-	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
-	if ( (*p) == 108 )
-		goto tr25;
-	goto st0;
-st18:
-	if ( ++p == pe )
-		goto _test_eof18;
-case 18:
-	if ( (*p) == 114 )
-		goto st19;
-	goto st0;
-st19:
-	if ( ++p == pe )
-		goto _test_eof19;
-case 19:
-	if ( (*p) == 117 )
-		goto st20;
-	goto st0;
-st20:
-	if ( ++p == pe )
-		goto _test_eof20;
-case 20:
-	if ( (*p) == 101 )
-		goto tr28;
-	goto st0;
-	}
-	_test_eof21: cs = 21; goto _test_eof; 
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
-	_test_eof13: cs = 13; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-	_test_eof17: cs = 17; goto _test_eof; 
-	_test_eof18: cs = 18; goto _test_eof; 
-	_test_eof19: cs = 19; goto _test_eof; 
-	_test_eof20: cs = 20; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 218 "parser.rl"
-
-    if (cs >= JSON_value_first_final) {
-        return p;
-    } else {
-        return NULL;
-    }
-}
-
-
-#line 711 "parser.c"
-static const int JSON_integer_start = 1;
-static const int JSON_integer_first_final = 5;
-static const int JSON_integer_error = 0;
-
-static const int JSON_integer_en_main = 1;
-
-#line 234 "parser.rl"
-
-
-static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    
-#line 726 "parser.c"
-	{
-	cs = JSON_integer_start;
-	}
-#line 241 "parser.rl"
-    json->memo = p;
-    
-#line 733 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	switch( (*p) ) {
-		case 45: goto st2;
-		case 48: goto st3;
-	}
-	if ( 49 <= (*p) && (*p) <= 57 )
-		goto st4;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	if ( (*p) == 48 )
-		goto st3;
-	if ( 49 <= (*p) && (*p) <= 57 )
-		goto st4;
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st0;
-	goto tr4;
-tr4:
-#line 231 "parser.rl"
-	{ p--; {p++; cs = 5; goto _out;} }
-	goto st5;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-#line 774 "parser.c"
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st4;
-	goto tr4;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 243 "parser.rl"
-
-    if (cs >= JSON_integer_first_final) {
-        long len = p - json->memo;
-        *result = rb_Integer(rb_str_new(json->memo, len));
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-#line 804 "parser.c"
-static const int JSON_float_start = 1;
-static const int JSON_float_first_final = 10;
-static const int JSON_float_error = 0;
-
-static const int JSON_float_en_main = 1;
-
-#line 265 "parser.rl"
-
-
-static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    
-#line 819 "parser.c"
-	{
-	cs = JSON_float_start;
-	}
-#line 272 "parser.rl"
-    json->memo = p;
-    
-#line 826 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	switch( (*p) ) {
-		case 45: goto st2;
-		case 48: goto st3;
-	}
-	if ( 49 <= (*p) && (*p) <= 57 )
-		goto st9;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	if ( (*p) == 48 )
-		goto st3;
-	if ( 49 <= (*p) && (*p) <= 57 )
-		goto st9;
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	switch( (*p) ) {
-		case 46: goto st4;
-		case 69: goto st6;
-		case 101: goto st6;
-	}
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st5;
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	switch( (*p) ) {
-		case 69: goto st6;
-		case 101: goto st6;
-	}
-	if ( (*p) > 46 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st5;
-	} else if ( (*p) >= 45 )
-		goto st0;
-	goto tr7;
-tr7:
-#line 259 "parser.rl"
-	{ p--; {p++; cs = 10; goto _out;} }
-	goto st10;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-#line 891 "parser.c"
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	switch( (*p) ) {
-		case 43: goto st7;
-		case 45: goto st7;
-	}
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st8;
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st8;
-	goto st0;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	switch( (*p) ) {
-		case 69: goto st0;
-		case 101: goto st0;
-	}
-	if ( (*p) > 46 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st8;
-	} else if ( (*p) >= 45 )
-		goto st0;
-	goto tr7;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	switch( (*p) ) {
-		case 46: goto st4;
-		case 69: goto st6;
-		case 101: goto st6;
-	}
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st9;
-	goto st0;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 274 "parser.rl"
-
-    if (cs >= JSON_float_first_final) {
-        long len = p - json->memo;
-        *result = rb_Float(rb_str_new(json->memo, len));
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-
-#line 964 "parser.c"
-static const int JSON_array_start = 1;
-static const int JSON_array_first_final = 17;
-static const int JSON_array_error = 0;
-
-static const int JSON_array_en_main = 1;
-
-#line 310 "parser.rl"
-
-
-static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
-    }
-    *result = rb_ary_new();
-
-    
-#line 984 "parser.c"
-	{
-	cs = JSON_array_start;
-	}
-#line 322 "parser.rl"
-    
-#line 990 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	if ( (*p) == 91 )
-		goto st2;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	switch( (*p) ) {
-		case 13: goto st2;
-		case 32: goto st2;
-		case 34: goto tr2;
-		case 45: goto tr2;
-		case 47: goto st13;
-		case 73: goto tr2;
-		case 78: goto tr2;
-		case 91: goto tr2;
-		case 93: goto tr4;
-		case 102: goto tr2;
-		case 110: goto tr2;
-		case 116: goto tr2;
-		case 123: goto tr2;
-	}
-	if ( (*p) > 10 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr2;
-	} else if ( (*p) >= 9 )
-		goto st2;
-	goto st0;
-tr2:
-#line 291 "parser.rl"
-	{
-        VALUE v = Qnil;
-        char *np = JSON_parse_value(json, p, pe, &v); 
-        if (np == NULL) {
-            p--; {p++; cs = 3; goto _out;}
-        } else {
-            rb_ary_push(*result, v);
-            {p = (( np))-1;}
-        }
-    }
-	goto st3;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-#line 1045 "parser.c"
-	switch( (*p) ) {
-		case 13: goto st3;
-		case 32: goto st3;
-		case 44: goto st4;
-		case 47: goto st9;
-		case 93: goto tr4;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st3;
-	goto st0;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	switch( (*p) ) {
-		case 13: goto st4;
-		case 32: goto st4;
-		case 34: goto tr2;
-		case 45: goto tr2;
-		case 47: goto st5;
-		case 73: goto tr2;
-		case 78: goto tr2;
-		case 91: goto tr2;
-		case 102: goto tr2;
-		case 110: goto tr2;
-		case 116: goto tr2;
-		case 123: goto tr2;
-	}
-	if ( (*p) > 10 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto tr2;
-	} else if ( (*p) >= 9 )
-		goto st4;
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	switch( (*p) ) {
-		case 42: goto st6;
-		case 47: goto st8;
-	}
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	if ( (*p) == 42 )
-		goto st7;
-	goto st6;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	switch( (*p) ) {
-		case 42: goto st7;
-		case 47: goto st4;
-	}
-	goto st6;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	if ( (*p) == 10 )
-		goto st4;
-	goto st8;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	switch( (*p) ) {
-		case 42: goto st10;
-		case 47: goto st12;
-	}
-	goto st0;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-	if ( (*p) == 42 )
-		goto st11;
-	goto st10;
-st11:
-	if ( ++p == pe )
-		goto _test_eof11;
-case 11:
-	switch( (*p) ) {
-		case 42: goto st11;
-		case 47: goto st3;
-	}
-	goto st10;
-st12:
-	if ( ++p == pe )
-		goto _test_eof12;
-case 12:
-	if ( (*p) == 10 )
-		goto st3;
-	goto st12;
-tr4:
-#line 302 "parser.rl"
-	{ p--; {p++; cs = 17; goto _out;} }
-	goto st17;
-st17:
-	if ( ++p == pe )
-		goto _test_eof17;
-case 17:
-#line 1152 "parser.c"
-	goto st0;
-st13:
-	if ( ++p == pe )
-		goto _test_eof13;
-case 13:
-	switch( (*p) ) {
-		case 42: goto st14;
-		case 47: goto st16;
-	}
-	goto st0;
-st14:
-	if ( ++p == pe )
-		goto _test_eof14;
-case 14:
-	if ( (*p) == 42 )
-		goto st15;
-	goto st14;
-st15:
-	if ( ++p == pe )
-		goto _test_eof15;
-case 15:
-	switch( (*p) ) {
-		case 42: goto st15;
-		case 47: goto st2;
-	}
-	goto st14;
-st16:
-	if ( ++p == pe )
-		goto _test_eof16;
-case 16:
-	if ( (*p) == 10 )
-		goto st2;
-	goto st16;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof11: cs = 11; goto _test_eof; 
-	_test_eof12: cs = 12; goto _test_eof; 
-	_test_eof17: cs = 17; goto _test_eof; 
-	_test_eof13: cs = 13; goto _test_eof; 
-	_test_eof14: cs = 14; goto _test_eof; 
-	_test_eof15: cs = 15; goto _test_eof; 
-	_test_eof16: cs = 16; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 323 "parser.rl"
-
-    if(cs >= JSON_array_first_final) {
-        return p + 1;
-    } else {
-        rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-    }
-}
-
-static VALUE json_string_unescape(char *p, char *pe)
-{
-    VALUE result = rb_str_buf_new(pe - p + 1);
-
-    while (p < pe) {
-        if (*p == '\\') {
-            p++;
-            if (p >= pe) return Qnil; /* raise an exception later, \ at end */
-            switch (*p) {
-                case '"':
-                case '\\':
-                    rb_str_buf_cat(result, p, 1);
-                    p++;
-                    break;
-                case 'b':
-                    rb_str_buf_cat2(result, "\b");
-                    p++;
-                    break;
-                case 'f':
-                    rb_str_buf_cat2(result, "\f");
-                    p++;
-                    break;
-                case 'n':
-                    rb_str_buf_cat2(result, "\n");
-                    p++;
-                    break;
-                case 'r':
-                    rb_str_buf_cat2(result, "\r");
-                    p++;
-                    break;
-                case 't':
-                    rb_str_buf_cat2(result, "\t");
-                    p++;
-                    break;
-                case 'u':
-                    if (p > pe - 4) { 
-                        return Qnil;
-                    } else {
-                        p = JSON_convert_UTF16_to_UTF8(result, p, pe, strictConversion);
-                    }
-                    break;
-                default:
-                    rb_str_buf_cat(result, p, 1);
-                    p++;
-                    break;
-            }
-        } else {
-            char *q = p;
-            while (*q != '\\' && q < pe) q++;
-            rb_str_buf_cat(result, p, q - p);
-            p = q;
-        }
-    }
-    return result;
-}
-
-
-#line 1273 "parser.c"
-static const int JSON_string_start = 1;
-static const int JSON_string_first_final = 8;
-static const int JSON_string_error = 0;
-
-static const int JSON_string_en_main = 1;
-
-#line 401 "parser.rl"
-
-
-static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    *result = rb_str_new("", 0);
-    
-#line 1289 "parser.c"
-	{
-	cs = JSON_string_start;
-	}
-#line 409 "parser.rl"
-    json->memo = p;
-    
-#line 1296 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-case 1:
-	if ( (*p) == 34 )
-		goto st2;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	switch( (*p) ) {
-		case 34: goto tr2;
-		case 92: goto st3;
-	}
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto st2;
-tr2:
-#line 393 "parser.rl"
-	{
-        *result = json_string_unescape(json->memo + 1, p);
-        if (NIL_P(*result)) { p--; {p++; cs = 8; goto _out;} } else {p = (( p + 1))-1;}
-    }
-#line 398 "parser.rl"
-	{ p--; {p++; cs = 8; goto _out;} }
-	goto st8;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-#line 1333 "parser.c"
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	if ( (*p) == 117 )
-		goto st4;
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto st2;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st5;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st5;
-	} else
-		goto st5;
-	goto st0;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st6;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st6;
-	} else
-		goto st6;
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st7;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st7;
-	} else
-		goto st7;
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st2;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st2;
-	} else
-		goto st2;
-	goto st0;
-	}
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 411 "parser.rl"
-
-    if (cs >= JSON_string_first_final) {
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-
-#line 1419 "parser.c"
-static const int JSON_start = 1;
-static const int JSON_first_final = 10;
-static const int JSON_error = 0;
-
-static const int JSON_en_main = 1;
-
-#line 445 "parser.rl"
-
-
-/* 
- * Document-class: JSON::Ext::Parser
- *
- * This is the JSON parser implemented as a C extension. It can be configured
- * to be used by setting
- *
- *  JSON.parser = JSON::Ext::Parser
- *
- * with the method parser= in JSON.
- *
- */
-
-/*
- * call-seq: new(source, opts => {})
- *
- * Creates a new JSON::Ext::Parser instance for the string _source_.
- *
- * Creates a new JSON::Ext::Parser instance for the string _source_.
- *
- * It will be configured by the _opts_ hash. _opts_ can have the following
- * keys:
- *
- * _opts_ can have the following keys:
- * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
- *   structures. Disable depth checking with :max_nesting => false|nil|0, it
- *   defaults to 19.
- * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
- *   defiance of RFC 4627 to be parsed by the Parser. This option defaults to
- *   false.
- * * *create_additions*: If set to false, the Parser doesn't create
- *   additions even if a matchin class and create_id was found. This option
- *   defaults to true.
- */
-static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
-{
-    char *ptr;
-    long len;
-    VALUE source, opts;
-    GET_STRUCT;
-    rb_scan_args(argc, argv, "11", &source, &opts);
-    source = StringValue(source);
-    ptr = RSTRING_PTR(source);
-    len = RSTRING_LEN(source);
-    if (len < 2) {
-        rb_raise(eParserError, "A JSON text must at least contain two octets!");
-    }
-    if (!NIL_P(opts)) {
-        opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
-        if (NIL_P(opts)) {
-            rb_raise(rb_eArgError, "opts needs to be like a hash");
-        } else {
-            VALUE tmp = ID2SYM(i_max_nesting);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE max_nesting = rb_hash_aref(opts, tmp);
-                if (RTEST(max_nesting)) {
-                    Check_Type(max_nesting, T_FIXNUM);
-                    json->max_nesting = FIX2INT(max_nesting);
-                } else {
-                    json->max_nesting = 0;
-                }
-            } else {
-                json->max_nesting = 19;
-            }
-            tmp = ID2SYM(i_allow_nan);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE allow_nan = rb_hash_aref(opts, tmp);
-                json->allow_nan = RTEST(allow_nan) ? 1 : 0;
-            } else {
-                json->allow_nan = 0;
-            }
-            tmp = ID2SYM(i_create_additions);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE create_additions = rb_hash_aref(opts, tmp);
-                if (RTEST(create_additions)) {
-                    json->create_id = rb_funcall(mJSON, i_create_id, 0);
-                } else {
-                    json->create_id = Qnil;
-                }
-            } else {
-                json->create_id = rb_funcall(mJSON, i_create_id, 0);
-            }
-        }
-    } else {
-        json->max_nesting = 19;
-        json->allow_nan = 0;
-        json->create_id = rb_funcall(mJSON, i_create_id, 0);
-    }
-    json->current_nesting = 0;
-    /*
-       Convert these?
-    if (len >= 4 &&  ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    }
-    */
-    json->len = len;
-    json->source = ptr;
-    json->Vsource = source;
-    return self;
-}
-
-/*
- * call-seq: parse()
- *
- *  Parses the current JSON text _source_ and returns the complete data
- *  structure as a result.
- */
-static VALUE cParser_parse(VALUE self)
-{
-    char *p, *pe;
-    int cs = EVIL;
-    VALUE result = Qnil;
-    GET_STRUCT;
-
-    
-#line 1549 "parser.c"
-	{
-	cs = JSON_start;
-	}
-#line 567 "parser.rl"
-    p = json->source;
-    pe = p + json->len;
-    
-#line 1557 "parser.c"
-	{
-	if ( p == pe )
-		goto _test_eof;
-	switch ( cs )
-	{
-st1:
-	if ( ++p == pe )
-		goto _test_eof1;
-case 1:
-	switch( (*p) ) {
-		case 13: goto st1;
-		case 32: goto st1;
-		case 47: goto st2;
-		case 91: goto tr3;
-		case 123: goto tr4;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st1;
-	goto st0;
-st0:
-cs = 0;
-	goto _out;
-st2:
-	if ( ++p == pe )
-		goto _test_eof2;
-case 2:
-	switch( (*p) ) {
-		case 42: goto st3;
-		case 47: goto st5;
-	}
-	goto st0;
-st3:
-	if ( ++p == pe )
-		goto _test_eof3;
-case 3:
-	if ( (*p) == 42 )
-		goto st4;
-	goto st3;
-st4:
-	if ( ++p == pe )
-		goto _test_eof4;
-case 4:
-	switch( (*p) ) {
-		case 42: goto st4;
-		case 47: goto st1;
-	}
-	goto st3;
-st5:
-	if ( ++p == pe )
-		goto _test_eof5;
-case 5:
-	if ( (*p) == 10 )
-		goto st1;
-	goto st5;
-tr3:
-#line 434 "parser.rl"
-	{
-        char *np;
-        json->current_nesting = 1;
-        np = JSON_parse_array(json, p, pe, &result);
-        if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st10;
-tr4:
-#line 427 "parser.rl"
-	{
-        char *np;
-        json->current_nesting = 1;
-        np = JSON_parse_object(json, p, pe, &result);
-        if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
-    }
-	goto st10;
-st10:
-	if ( ++p == pe )
-		goto _test_eof10;
-case 10:
-#line 1634 "parser.c"
-	switch( (*p) ) {
-		case 13: goto st10;
-		case 32: goto st10;
-		case 47: goto st6;
-	}
-	if ( 9 <= (*p) && (*p) <= 10 )
-		goto st10;
-	goto st0;
-st6:
-	if ( ++p == pe )
-		goto _test_eof6;
-case 6:
-	switch( (*p) ) {
-		case 42: goto st7;
-		case 47: goto st9;
-	}
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _test_eof7;
-case 7:
-	if ( (*p) == 42 )
-		goto st8;
-	goto st7;
-st8:
-	if ( ++p == pe )
-		goto _test_eof8;
-case 8:
-	switch( (*p) ) {
-		case 42: goto st8;
-		case 47: goto st10;
-	}
-	goto st7;
-st9:
-	if ( ++p == pe )
-		goto _test_eof9;
-case 9:
-	if ( (*p) == 10 )
-		goto st10;
-	goto st9;
-	}
-	_test_eof1: cs = 1; goto _test_eof; 
-	_test_eof2: cs = 2; goto _test_eof; 
-	_test_eof3: cs = 3; goto _test_eof; 
-	_test_eof4: cs = 4; goto _test_eof; 
-	_test_eof5: cs = 5; goto _test_eof; 
-	_test_eof10: cs = 10; goto _test_eof; 
-	_test_eof6: cs = 6; goto _test_eof; 
-	_test_eof7: cs = 7; goto _test_eof; 
-	_test_eof8: cs = 8; goto _test_eof; 
-	_test_eof9: cs = 9; goto _test_eof; 
-
-	_test_eof: {}
-	_out: {}
-	}
-#line 570 "parser.rl"
-
-    if (cs >= JSON_first_final && p == pe) {
-        return result;
-    } else {
-        rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-    }
-}
-
-inline static JSON_Parser *JSON_allocate()
-{
-    JSON_Parser *json = ALLOC(JSON_Parser);
-    MEMZERO(json, JSON_Parser, 1);
-    return json;
-}
-
-static void JSON_mark(JSON_Parser *json)
-{
-    rb_gc_mark_maybe(json->Vsource);
-    rb_gc_mark_maybe(json->create_id);
-}
-
-static void JSON_free(JSON_Parser *json)
-{
-    free(json);
-}
-
-static VALUE cJSON_parser_s_allocate(VALUE klass)
-{
-    JSON_Parser *json = JSON_allocate();
-    return Data_Wrap_Struct(klass, JSON_mark, JSON_free, json);
-}
-
-/*
- * call-seq: source()
- *
- * Returns a copy of the current _source_ string, that was used to construct
- * this Parser.
- */
-static VALUE cParser_source(VALUE self)
-{
-    GET_STRUCT;
-    return rb_str_dup(json->Vsource);
-}
-
-void Init_parser()
-{
-    rb_require("json/common");
-    mJSON = rb_define_module("JSON");
-    mExt = rb_define_module_under(mJSON, "Ext");
-    cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
-    eParserError = rb_path2class("JSON::ParserError");
-    eNestingError = rb_path2class("JSON::NestingError");
-    rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
-    rb_define_method(cParser, "initialize", cParser_initialize, -1);
-    rb_define_method(cParser, "parse", cParser_parse, 0);
-    rb_define_method(cParser, "source", cParser_source, 0);
-
-    CNaN = rb_const_get(mJSON, rb_intern("NaN"));
-    CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
-    CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
-
-    i_json_creatable_p = rb_intern("json_creatable?");
-    i_json_create = rb_intern("json_create");
-    i_create_id = rb_intern("create_id");
-    i_create_additions = rb_intern("create_additions");
-    i_chr = rb_intern("chr");
-    i_max_nesting = rb_intern("max_nesting");
-    i_allow_nan = rb_intern("allow_nan");
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.rl b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.rl
deleted file mode 100644
index f6f830a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/parser.rl
+++ /dev/null
@@ -1,638 +0,0 @@
-#include "ruby.h"
-#include "re.h"
-#include "st.h"
-#include "unicode.h"
-
-#define EVIL 0x666
-
-static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
-static VALUE CNaN, CInfinity, CMinusInfinity;
-
-static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
-          i_chr, i_max_nesting, i_allow_nan; 
-
-#define MinusInfinity "-Infinity"
-
-typedef struct JSON_ParserStruct {
-    VALUE Vsource;
-    char *source;
-    long len;
-    char *memo;
-    VALUE create_id;
-    int max_nesting;
-    int current_nesting;
-    int allow_nan;
-} JSON_Parser;
-
-static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
-static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
-
-#define GET_STRUCT                          \
-    JSON_Parser *json;                      \
-    Data_Get_Struct(self, JSON_Parser, json);
-
-%%{
-    machine JSON_common;
-
-    cr                  = '\n';
-    cr_neg              = [^\n];
-    ws                  = [ \t\r\n];
-    c_comment           = '/*' ( any* - (any* '*/' any* ) ) '*/';
-    cpp_comment         = '//' cr_neg* cr;
-    comment             = c_comment | cpp_comment;
-    ignore              = ws | comment;
-    name_separator      = ':';
-    value_separator     = ',';
-    Vnull               = 'null';
-    Vfalse              = 'false';
-    Vtrue               = 'true';
-    VNaN                = 'NaN';
-    VInfinity           = 'Infinity';
-    VMinusInfinity      = '-Infinity';
-    begin_value         = [nft"\-[{NI] | digit;
-    begin_object        = '{';
-    end_object          = '}';
-    begin_array         = '[';
-    end_array           = ']';
-    begin_string        = '"';
-    begin_name          = begin_string;
-    begin_number        = digit | '-';
-}%%
-
-%%{
-    machine JSON_object;
-    include JSON_common;
-
-    write data;
-
-    action parse_value {
-        VALUE v = Qnil;
-        char *np = JSON_parse_value(json, fpc, pe, &v); 
-        if (np == NULL) {
-            fhold; fbreak;
-        } else {
-            rb_hash_aset(*result, last_name, v);
-            fexec np;
-        }
-    }
-
-    action parse_name {
-        char *np = JSON_parse_string(json, fpc, pe, &last_name);
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action exit { fhold; fbreak; }
-
-    a_pair  = ignore* begin_name >parse_name
-        ignore* name_separator ignore*
-        begin_value >parse_value;
-
-    main := begin_object
-          (a_pair (ignore* value_separator a_pair)*)?
-          ignore* end_object @exit;
-}%%
-
-static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-    VALUE last_name = Qnil;
-
-    if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
-    }
-
-    *result = rb_hash_new();
-
-    %% write init;
-    %% write exec;
-
-    if (cs >= JSON_object_first_final) {
-        if (RTEST(json->create_id)) {
-            VALUE klassname = rb_hash_aref(*result, json->create_id);
-            if (!NIL_P(klassname)) {
-                VALUE klass = rb_path2class(StringValueCStr(klassname));
-                if RTEST(rb_funcall(klass, i_json_creatable_p, 0)) {
-                    *result = rb_funcall(klass, i_json_create, 1, *result);
-                }
-            }
-        }
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-%%{
-    machine JSON_value;
-    include JSON_common;
-
-    write data;
-
-    action parse_null {
-        *result = Qnil;
-    }
-    action parse_false {
-        *result = Qfalse;
-    }
-    action parse_true {
-        *result = Qtrue;
-    }
-    action parse_nan {
-        if (json->allow_nan) {
-            *result = CNaN;
-        } else {
-            rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
-        }
-    }
-    action parse_infinity {
-        if (json->allow_nan) {
-            *result = CInfinity;
-        } else {
-            rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
-        }
-    }
-    action parse_string {
-        char *np = JSON_parse_string(json, fpc, pe, result);
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action parse_number {
-        char *np;
-        if(pe > fpc + 9 && !strncmp(MinusInfinity, fpc, 9)) {
-            if (json->allow_nan) {
-                *result = CMinusInfinity;
-                fexec p + 10;
-                fhold; fbreak;
-            } else {
-                rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-            }
-        }
-        np = JSON_parse_float(json, fpc, pe, result);
-        if (np != NULL) fexec np;
-        np = JSON_parse_integer(json, fpc, pe, result);
-        if (np != NULL) fexec np;
-        fhold; fbreak;
-    }
-
-    action parse_array { 
-        char *np;
-        json->current_nesting++;
-        np = JSON_parse_array(json, fpc, pe, result);
-        json->current_nesting--;
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action parse_object { 
-        char *np;
-        json->current_nesting++;
-        np =  JSON_parse_object(json, fpc, pe, result);
-        json->current_nesting--;
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action exit { fhold; fbreak; }
-
-main := (
-              Vnull @parse_null |
-              Vfalse @parse_false |
-              Vtrue @parse_true |
-              VNaN @parse_nan |
-              VInfinity @parse_infinity |
-              begin_number >parse_number |
-              begin_string >parse_string |
-              begin_array >parse_array |
-              begin_object >parse_object
-        ) %*exit;
-}%%
-
-static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    %% write init;
-    %% write exec;
-
-    if (cs >= JSON_value_first_final) {
-        return p;
-    } else {
-        return NULL;
-    }
-}
-
-%%{
-    machine JSON_integer;
-
-    write data;
-
-    action exit { fhold; fbreak; }
-
-    main := '-'? ('0' | [1-9][0-9]*) (^[0-9] @exit);
-}%%
-
-static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    %% write init;
-    json->memo = p;
-    %% write exec;
-
-    if (cs >= JSON_integer_first_final) {
-        long len = p - json->memo;
-        *result = rb_Integer(rb_str_new(json->memo, len));
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-%%{
-    machine JSON_float;
-    include JSON_common;
-
-    write data;
-
-    action exit { fhold; fbreak; }
-
-    main := '-'? (
-              (('0' | [1-9][0-9]*) '.' [0-9]+ ([Ee] [+\-]?[0-9]+)?)
-              | (('0' | [1-9][0-9]*) ([Ee] [+\-]?[0-9]+))
-             )  (^[0-9Ee.\-] @exit );
-}%%
-
-static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    %% write init;
-    json->memo = p;
-    %% write exec;
-
-    if (cs >= JSON_float_first_final) {
-        long len = p - json->memo;
-        *result = rb_Float(rb_str_new(json->memo, len));
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-%%{
-    machine JSON_array;
-    include JSON_common;
-
-    write data;
-
-    action parse_value {
-        VALUE v = Qnil;
-        char *np = JSON_parse_value(json, fpc, pe, &v); 
-        if (np == NULL) {
-            fhold; fbreak;
-        } else {
-            rb_ary_push(*result, v);
-            fexec np;
-        }
-    }
-
-    action exit { fhold; fbreak; }
-
-    next_element  = value_separator ignore* begin_value >parse_value;
-
-    main := begin_array ignore*
-          ((begin_value >parse_value ignore*)
-           (ignore* next_element ignore*)*)?
-          end_array @exit;
-}%%
-
-static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    if (json->max_nesting && json->current_nesting > json->max_nesting) {
-        rb_raise(eNestingError, "nesting of %d is to deep", json->current_nesting);
-    }
-    *result = rb_ary_new();
-
-    %% write init;
-    %% write exec;
-
-    if(cs >= JSON_array_first_final) {
-        return p + 1;
-    } else {
-        rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-    }
-}
-
-static VALUE json_string_unescape(char *p, char *pe)
-{
-    VALUE result = rb_str_buf_new(pe - p + 1);
-
-    while (p < pe) {
-        if (*p == '\\') {
-            p++;
-            if (p >= pe) return Qnil; /* raise an exception later, \ at end */
-            switch (*p) {
-                case '"':
-                case '\\':
-                    rb_str_buf_cat(result, p, 1);
-                    p++;
-                    break;
-                case 'b':
-                    rb_str_buf_cat2(result, "\b");
-                    p++;
-                    break;
-                case 'f':
-                    rb_str_buf_cat2(result, "\f");
-                    p++;
-                    break;
-                case 'n':
-                    rb_str_buf_cat2(result, "\n");
-                    p++;
-                    break;
-                case 'r':
-                    rb_str_buf_cat2(result, "\r");
-                    p++;
-                    break;
-                case 't':
-                    rb_str_buf_cat2(result, "\t");
-                    p++;
-                    break;
-                case 'u':
-                    if (p > pe - 4) { 
-                        return Qnil;
-                    } else {
-                        p = JSON_convert_UTF16_to_UTF8(result, p, pe, strictConversion);
-                    }
-                    break;
-                default:
-                    rb_str_buf_cat(result, p, 1);
-                    p++;
-                    break;
-            }
-        } else {
-            char *q = p;
-            while (*q != '\\' && q < pe) q++;
-            rb_str_buf_cat(result, p, q - p);
-            p = q;
-        }
-    }
-    return result;
-}
-
-%%{
-    machine JSON_string;
-    include JSON_common;
-
-    write data;
-
-    action parse_string {
-        *result = json_string_unescape(json->memo + 1, p);
-        if (NIL_P(*result)) { fhold; fbreak; } else fexec p + 1;
-    }
-
-    action exit { fhold; fbreak; }
-
-    main := '"' ((^(["\\] | 0..0x1f) | '\\'["\\/bfnrt] | '\\u'[0-9a-fA-F]{4} | '\\'^(["\\/bfnrtu]|0..0x1f))* %parse_string) '"' @exit;
-}%%
-
-static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
-{
-    int cs = EVIL;
-
-    *result = rb_str_new("", 0);
-    %% write init;
-    json->memo = p;
-    %% write exec;
-
-    if (cs >= JSON_string_first_final) {
-        return p + 1;
-    } else {
-        return NULL;
-    }
-}
-
-
-%%{
-    machine JSON;
-
-    write data;
-
-    include JSON_common;
-
-    action parse_object {
-        char *np;
-        json->current_nesting = 1;
-        np = JSON_parse_object(json, fpc, pe, &result);
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    action parse_array {
-        char *np;
-        json->current_nesting = 1;
-        np = JSON_parse_array(json, fpc, pe, &result);
-        if (np == NULL) { fhold; fbreak; } else fexec np;
-    }
-
-    main := ignore* (
-            begin_object >parse_object |
-            begin_array >parse_array
-            ) ignore*;
-}%%
-
-/* 
- * Document-class: JSON::Ext::Parser
- *
- * This is the JSON parser implemented as a C extension. It can be configured
- * to be used by setting
- *
- *  JSON.parser = JSON::Ext::Parser
- *
- * with the method parser= in JSON.
- *
- */
-
-/*
- * call-seq: new(source, opts => {})
- *
- * Creates a new JSON::Ext::Parser instance for the string _source_.
- *
- * Creates a new JSON::Ext::Parser instance for the string _source_.
- *
- * It will be configured by the _opts_ hash. _opts_ can have the following
- * keys:
- *
- * _opts_ can have the following keys:
- * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
- *   structures. Disable depth checking with :max_nesting => false|nil|0, it
- *   defaults to 19.
- * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
- *   defiance of RFC 4627 to be parsed by the Parser. This option defaults to
- *   false.
- * * *create_additions*: If set to false, the Parser doesn't create
- *   additions even if a matchin class and create_id was found. This option
- *   defaults to true.
- */
-static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
-{
-    char *ptr;
-    long len;
-    VALUE source, opts;
-    GET_STRUCT;
-    rb_scan_args(argc, argv, "11", &source, &opts);
-    source = StringValue(source);
-    ptr = RSTRING_PTR(source);
-    len = RSTRING_LEN(source);
-    if (len < 2) {
-        rb_raise(eParserError, "A JSON text must at least contain two octets!");
-    }
-    if (!NIL_P(opts)) {
-        opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
-        if (NIL_P(opts)) {
-            rb_raise(rb_eArgError, "opts needs to be like a hash");
-        } else {
-            VALUE tmp = ID2SYM(i_max_nesting);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE max_nesting = rb_hash_aref(opts, tmp);
-                if (RTEST(max_nesting)) {
-                    Check_Type(max_nesting, T_FIXNUM);
-                    json->max_nesting = FIX2INT(max_nesting);
-                } else {
-                    json->max_nesting = 0;
-                }
-            } else {
-                json->max_nesting = 19;
-            }
-            tmp = ID2SYM(i_allow_nan);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE allow_nan = rb_hash_aref(opts, tmp);
-                json->allow_nan = RTEST(allow_nan) ? 1 : 0;
-            } else {
-                json->allow_nan = 0;
-            }
-            tmp = ID2SYM(i_create_additions);
-            if (st_lookup(RHASH(opts)->tbl, tmp, 0)) {
-                VALUE create_additions = rb_hash_aref(opts, tmp);
-                if (RTEST(create_additions)) {
-                    json->create_id = rb_funcall(mJSON, i_create_id, 0);
-                } else {
-                    json->create_id = Qnil;
-                }
-            } else {
-                json->create_id = rb_funcall(mJSON, i_create_id, 0);
-            }
-        }
-    } else {
-        json->max_nesting = 19;
-        json->allow_nan = 0;
-        json->create_id = rb_funcall(mJSON, i_create_id, 0);
-    }
-    json->current_nesting = 0;
-    /*
-       Convert these?
-    if (len >= 4 &&  ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
-        rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
-    }
-    */
-    json->len = len;
-    json->source = ptr;
-    json->Vsource = source;
-    return self;
-}
-
-/*
- * call-seq: parse()
- *
- *  Parses the current JSON text _source_ and returns the complete data
- *  structure as a result.
- */
-static VALUE cParser_parse(VALUE self)
-{
-    char *p, *pe;
-    int cs = EVIL;
-    VALUE result = Qnil;
-    GET_STRUCT;
-
-    %% write init;
-    p = json->source;
-    pe = p + json->len;
-    %% write exec;
-
-    if (cs >= JSON_first_final && p == pe) {
-        return result;
-    } else {
-        rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-    }
-}
-
-inline static JSON_Parser *JSON_allocate()
-{
-    JSON_Parser *json = ALLOC(JSON_Parser);
-    MEMZERO(json, JSON_Parser, 1);
-    return json;
-}
-
-static void JSON_mark(JSON_Parser *json)
-{
-    rb_gc_mark_maybe(json->Vsource);
-    rb_gc_mark_maybe(json->create_id);
-}
-
-static void JSON_free(JSON_Parser *json)
-{
-    free(json);
-}
-
-static VALUE cJSON_parser_s_allocate(VALUE klass)
-{
-    JSON_Parser *json = JSON_allocate();
-    return Data_Wrap_Struct(klass, JSON_mark, JSON_free, json);
-}
-
-/*
- * call-seq: source()
- *
- * Returns a copy of the current _source_ string, that was used to construct
- * this Parser.
- */
-static VALUE cParser_source(VALUE self)
-{
-    GET_STRUCT;
-    return rb_str_dup(json->Vsource);
-}
-
-void Init_parser()
-{
-    rb_require("json/common");
-    mJSON = rb_define_module("JSON");
-    mExt = rb_define_module_under(mJSON, "Ext");
-    cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
-    eParserError = rb_path2class("JSON::ParserError");
-    eNestingError = rb_path2class("JSON::NestingError");
-    rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
-    rb_define_method(cParser, "initialize", cParser_initialize, -1);
-    rb_define_method(cParser, "parse", cParser_parse, 0);
-    rb_define_method(cParser, "source", cParser_source, 0);
-
-    CNaN = rb_const_get(mJSON, rb_intern("NaN"));
-    CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
-    CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
-
-    i_json_creatable_p = rb_intern("json_creatable?");
-    i_json_create = rb_intern("json_create");
-    i_create_id = rb_intern("create_id");
-    i_create_additions = rb_intern("create_additions");
-    i_chr = rb_intern("chr");
-    i_max_nesting = rb_intern("max_nesting");
-    i_allow_nan = rb_intern("allow_nan");
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.c b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.c
deleted file mode 100644
index a16ff26..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.c
+++ /dev/null
@@ -1,154 +0,0 @@
-#include "unicode.h"
-
-/*
- * Copyright 2001-2004 Unicode, Inc.
- * 
- * Disclaimer
- * 
- * This source code is provided as is by Unicode, Inc. No claims are
- * made as to fitness for any particular purpose. No warranties of any
- * kind are expressed or implied. The recipient agrees to determine
- * applicability of information provided. If this file has been
- * purchased on magnetic or optical media from Unicode, Inc., the
- * sole remedy for any claim will be exchange of defective media
- * within 90 days of receipt.
- * 
- * Limitations on Rights to Redistribute This Code
- * 
- * Unicode, Inc. hereby grants the right to freely use the information
- * supplied in this file in the creation of products supporting the
- * Unicode Standard, and to make copies of this file in any form
- * for internal or external distribution as long as this notice
- * remains attached.
- */
-
-/*
- * Index into the table below with the first byte of a UTF-8 sequence to
- * get the number of trailing bytes that are supposed to follow it.
- * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
- * left as-is for anyone who may want to do such conversion, which was
- * allowed in earlier algorithms.
- */
-static const char trailingBytesForUTF8[256] = {
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
-};
-
-/*
- * Magic values subtracted from a buffer value during UTF8 conversion.
- * This table contains as many values as there might be trailing bytes
- * in a UTF-8 sequence.
- */
-static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 
-             0x03C82080UL, 0xFA082080UL, 0x82082080UL };
-
-/*
- * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
- * into the first byte, depending on how many bytes follow.  There are
- * as many entries in this table as there are UTF-8 sequence types.
- * (I.e., one byte sequence, two byte... etc.). Remember that sequencs
- * for *legal* UTF-8 will be 4 or fewer bytes total.
- */
-static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
-
-char *JSON_convert_UTF16_to_UTF8 (
-        VALUE buffer,
-        char *source,
-        char *sourceEnd,
-        ConversionFlags flags)
-{
-    UTF16 *tmp, *tmpPtr, *tmpEnd;
-    char buf[5];
-    long n = 0, i;
-    char *p = source - 1;
-
-    while (p < sourceEnd && p[0] == '\\' && p[1] == 'u') {
-        p += 6;
-        n++;
-    }
-    p = source + 1;
-    buf[4] = 0;
-    tmpPtr = tmp = ALLOC_N(UTF16, n);
-    tmpEnd = tmp + n;
-    for (i = 0; i < n; i++) {
-        buf[0] = *p++;
-        buf[1] = *p++;
-        buf[2] = *p++;
-        buf[3] = *p++;
-        tmpPtr[i] = strtol(buf, NULL, 16);
-        p += 2;
-    }
-
-    while (tmpPtr < tmpEnd) {
-        UTF32 ch;
-        unsigned short bytesToWrite = 0;
-        const UTF32 byteMask = 0xBF;
-        const UTF32 byteMark = 0x80; 
-        ch = *tmpPtr++;
-        /* If we have a surrogate pair, convert to UTF32 first. */
-        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) {
-            /* If the 16 bits following the high surrogate are in the source
-             * buffer... */
-            if (tmpPtr < tmpEnd) {
-                UTF32 ch2 = *tmpPtr;
-                /* If it's a low surrogate, convert to UTF32. */
-                if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) {
-                    ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
-                        + (ch2 - UNI_SUR_LOW_START) + halfBase;
-                    ++tmpPtr;
-                } else if (flags == strictConversion) { /* it's an unpaired high surrogate */
-                    free(tmp);
-                    rb_raise(rb_path2class("JSON::ParserError"),
-                            "source sequence is illegal/malformed near %s", source);
-                }
-            } else { /* We don't have the 16 bits following the high surrogate. */
-                free(tmp);
-                rb_raise(rb_path2class("JSON::ParserError"),
-                    "partial character in source, but hit end near %s", source);
-                break;
-            }
-        } else if (flags == strictConversion) {
-            /* UTF-16 surrogate values are illegal in UTF-32 */
-            if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) {
-                free(tmp);
-                rb_raise(rb_path2class("JSON::ParserError"),
-                    "source sequence is illegal/malformed near %s", source);
-            }
-        }
-        /* Figure out how many bytes the result will require */
-        if (ch < (UTF32) 0x80) {
-            bytesToWrite = 1;
-        } else if (ch < (UTF32) 0x800) {
-            bytesToWrite = 2;
-        } else if (ch < (UTF32) 0x10000) {
-            bytesToWrite = 3;
-        } else if (ch < (UTF32) 0x110000) {
-            bytesToWrite = 4;
-        } else {
-            bytesToWrite = 3;
-            ch = UNI_REPLACEMENT_CHAR;
-        }
-
-        buf[0] = 0;
-        buf[1] = 0;
-        buf[2] = 0;
-        buf[3] = 0;
-        p = buf + bytesToWrite;
-        switch (bytesToWrite) { /* note: everything falls through. */
-            case 4: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
-            case 3: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
-            case 2: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
-            case 1: *--p = (UTF8) (ch | firstByteMark[bytesToWrite]);
-        }
-        rb_str_buf_cat(buffer, p, bytesToWrite);
-    }
-    free(tmp);
-    source += 5 + (n - 1) * 6;
-    return source;
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.h b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.h
deleted file mode 100644
index 155da0c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/ext/json/ext/parser/unicode.h
+++ /dev/null
@@ -1,58 +0,0 @@
-
-#ifndef _PARSER_UNICODE_H_
-#define _PARSER_UNICODE_H_
-
-#include "ruby.h"
-
-typedef unsigned long	UTF32;	/* at least 32 bits */
-typedef unsigned short	UTF16;	/* at least 16 bits */
-typedef unsigned char	UTF8;	/* typically 8 bits */
-
-#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
-#define UNI_MAX_BMP (UTF32)0x0000FFFF
-#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
-#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
-#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
-
-#define UNI_SUR_HIGH_START  (UTF32)0xD800
-#define UNI_SUR_HIGH_END    (UTF32)0xDBFF
-#define UNI_SUR_LOW_START   (UTF32)0xDC00
-#define UNI_SUR_LOW_END     (UTF32)0xDFFF
-
-static const int halfShift  = 10; /* used for shifting by 10 bits */
-
-static const UTF32 halfBase = 0x0010000UL;
-static const UTF32 halfMask = 0x3FFUL;
-
-typedef enum {
-	conversionOK = 0, 	/* conversion successful */
-	sourceExhausted,	/* partial character in source, but hit end */
-	targetExhausted,	/* insuff. room in target for conversion */
-	sourceIllegal		/* source sequence is illegal/malformed */
-} ConversionResult;
-
-typedef enum {
-	strictConversion = 0,
-	lenientConversion
-} ConversionFlags;
-
-char *JSON_convert_UTF16_to_UTF8 (
-    VALUE buffer,
-    char *source,
-    char *sourceEnd,
-		ConversionFlags flags);
-
-#ifndef RARRAY_PTR
-#define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
-#endif
-#ifndef RARRAY_LEN
-#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
-#endif
-#ifndef RSTRING_PTR
-#define RSTRING_PTR(string) RSTRING(string)->ptr
-#endif
-#ifndef RSTRING_LEN
-#define RSTRING_LEN(string) RSTRING(string)->len
-#endif
-
-#endif
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/install.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/install.rb
deleted file mode 100755
index adf77a0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/install.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rbconfig'
-require 'fileutils'
-include FileUtils::Verbose
-
-include Config
-
-bindir = CONFIG["bindir"]
-cd 'bin' do
-  filename = 'edit_json.rb'
-  #install(filename, bindir)
-end
-sitelibdir = CONFIG["sitelibdir"]
-cd 'lib' do
-  install('json.rb', sitelibdir)
-  mkdir_p File.join(sitelibdir, 'json')
-  for file in Dir['json/**/*.{rb,xpm}']
-    d = File.join(sitelibdir, file)
-    mkdir_p File.dirname(d)
-    install(file, d)
-  end
-  install(File.join('json', 'editor.rb'), File.join(sitelibdir,'json'))
-  install(File.join('json', 'json.xpm'), File.join(sitelibdir,'json'))
-end
-warn " *** Installed PURE ruby library."
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json.rb
deleted file mode 100644
index 3b0b711..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json.rb
+++ /dev/null
@@ -1,235 +0,0 @@
-require 'json/common'
-# = json - JSON for Ruby
-#
-# == Description
-#
-# This is a implementation of the JSON specification according to RFC 4627
-# (http://www.ietf.org/rfc/rfc4627.txt). Starting from version 1.0.0 on there
-# will be two variants available:
-#
-# * A pure ruby variant, that relies on the iconv and the stringscan
-#   extensions, which are both part of the ruby standard library.
-# * The quite a bit faster C extension variant, which is in parts implemented
-#   in C and comes with its own unicode conversion functions and a parser
-#   generated by the ragel state machine compiler
-#   (http://www.cs.queensu.ca/~thurston/ragel).
-#
-# Both variants of the JSON generator escape all non-ASCII an control
-# characters with \uXXXX escape sequences, and support UTF-16 surrogate pairs
-# in order to be able to generate the whole range of unicode code points. This
-# means that generated JSON text is encoded as UTF-8 (because ASCII is a subset
-# of UTF-8) and at the same time avoids decoding problems for receiving
-# endpoints, that don't expect UTF-8 encoded texts. On the negative side this
-# may lead to a bit longer strings than necessarry.
-#
-# All strings, that are to be encoded as JSON strings, should be UTF-8 byte
-# sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8
-# encoded, please use the to_json_raw_object method of String (which produces
-# an object, that contains a byte array) and decode the result on the receiving
-# endpoint.
-#
-# == Author
-#
-# Florian Frank <mailto:flori at ping.de>
-#
-# == License
-#
-# This software is distributed under the same license as Ruby itself, see
-# http://www.ruby-lang.org/en/LICENSE.txt.
-#
-# == Download
-#
-# The latest version of this library can be downloaded at
-#
-# * http://rubyforge.org/frs?group_id=953
-#
-# Online Documentation should be located at
-#
-# * http://json.rubyforge.org
-#
-# == Usage
-# 
-# To use JSON you can
-#   require 'json'
-# to load the installed variant (either the extension 'json' or the pure
-# variant 'json_pure'). If you have installed the extension variant, you can
-# pick either the extension variant or the pure variant by typing
-#   require 'json/ext'
-# or
-#   require 'json/pure'
-#
-# You can choose to load a set of common additions to ruby core's objects if
-# you
-#   require 'json/add/core'
-#
-# After requiring this you can, e. g., serialise/deserialise Ruby ranges:
-#
-#   JSON JSON(1..10) # => 1..10
-#
-# To find out how to add JSON support to other or your own classes, read the
-# Examples section below.
-#
-# To get the best compatibility to rails' JSON implementation, you can
-#   require 'json/add/rails'
-#
-# Both of the additions attempt to require 'json' (like above) first, if it has
-# not been required yet.
-#
-# == Speed Comparisons
-#
-# I have created some benchmark results (see the benchmarks subdir of the
-# package) for the JSON-Parser to estimate the speed up in the C extension:
-#
-# JSON::Pure::Parser::  28.90  calls/second
-# JSON::Ext::Parser::  505.50 calls/second
-#
-# This is ca. <b>17.5</b> times the speed of the pure Ruby implementation.
-#
-# I have benchmarked the JSON-Generator as well. This generates a few more
-# values, because there are different modes, that also influence the achieved
-# speed:
-#
-# * JSON::Pure::Generator:
-#   generate::        35.06 calls/second
-#   pretty_generate:: 34.00 calls/second
-#   fast_generate::   41.06 calls/second
-#
-# * JSON::Ext::Generator:
-#   generate::        492.11 calls/second
-#   pretty_generate:: 348.85 calls/second
-#   fast_generate::   541.60 calls/second
-#
-# * Speedup Ext/Pure:
-#   generate safe::   14.0 times
-#   generate pretty:: 10.3 times
-#   generate fast::   13.2 times
-#
-# The rails framework includes a generator as well, also it seems to be rather
-# slow: I measured only 23.87 calls/second which is slower than any of my pure
-# generator results. Here a comparison of the different speedups with the Rails
-# measurement as the divisor:
-#
-# * Speedup Pure/Rails:
-#   generate safe::   1.5 times
-#   generate pretty:: 1.4 times
-#   generate fast::   1.7 times
-#
-# * Speedup Ext/Rails:
-#   generate safe::   20.6 times
-#   generate pretty:: 14.6 times
-#   generate fast::   22.7 times
-#
-# To achieve the fastest JSON text output, you can use the
-# fast_generate/fast_unparse methods. Beware, that this will disable the
-# checking for circular Ruby data structures, which may cause JSON to go into
-# an infinite loop.
-#
-# == Examples
-#
-# To create a JSON text from a ruby data structure, you
-# can call JSON.generate (or JSON.unparse) like that:
-#
-#  json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#  # => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]"
-#
-# To create a valid JSON text you have to make sure, that the output is
-# embedded in either a JSON array [] or a JSON object {}. The easiest way to do
-# this, is by putting your values in a Ruby Array or Hash instance.
-#
-# To get back a ruby data structure from a JSON text, you have to call
-# JSON.parse on it:
-#
-#  JSON.parse json
-#  # => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"]
-# 
-# Note, that the range from the original data structure is a simple
-# string now. The reason for this is, that JSON doesn't support ranges
-# or arbitrary classes. In this case the json library falls back to call
-# Object#to_json, which is the same as #to_s.to_json.
-#
-# It's possible to add JSON support serialization to arbitrary classes by
-# simply implementing a more specialized version of the #to_json method, that
-# should return a JSON object (a hash converted to JSON with #to_json) like
-# this (don't forget the *a for all the arguments):
-#
-#  class Range
-#    def to_json(*a)
-#      {
-#        'json_class'   => self.class.name, # = 'Range'
-#        'data'         => [ first, last, exclude_end? ]
-#      }.to_json(*a)
-#    end
-#  end
-#
-# The hash key 'json_class' is the class, that will be asked to deserialise the
-# JSON representation later. In this case it's 'Range', but any namespace of
-# the form 'A::B' or '::A::B' will do. All other keys are arbitrary and can be
-# used to store the necessary data to configure the object to be deserialised.
-#
-# If a the key 'json_class' is found in a JSON object, the JSON parser checks
-# if the given class responds to the json_create class method. If so, it is
-# called with the JSON object converted to a Ruby hash. So a range can
-# be deserialised by implementing Range.json_create like this:
-# 
-#  class Range
-#    def self.json_create(o)
-#      new(*o['data'])
-#    end
-#  end
-#
-# Now it possible to serialise/deserialise ranges as well:
-#
-#  json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#  # => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]"
-#  JSON.parse json
-#  # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
-#
-# JSON.generate always creates the shortest possible string representation of a
-# ruby data structure in one line. This good for data storage or network
-# protocols, but not so good for humans to read. Fortunately there's also
-# JSON.pretty_generate (or JSON.pretty_generate) that creates a more
-# readable output:
-#
-#  puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10])
-#  [
-#    1,
-#    2,
-#    {
-#      "a": 3.141
-#    },
-#    false,
-#    true,
-#    null,
-#    {
-#      "json_class": "Range",
-#      "data": [
-#        4,
-#        10,
-#        false
-#      ]
-#    }
-#  ]
-#
-# There are also the methods Kernel#j for unparse, and Kernel#jj for
-# pretty_unparse output to the console, that work analogous to Core Ruby's p
-# and the pp library's pp methods.
-#
-# The script tools/server.rb contains a small example if you want to test, how
-# receiving a JSON object from a webrick server in your browser with the
-# javasript prototype library (http://www.prototypejs.org) works.
-#
-module JSON
-  require 'json/version'
-
-  if VARIANT_BINARY
-    require 'json/ext'
-  else
-    begin
-      require 'json/ext'
-    rescue LoadError
-      require 'json/pure'
-    end
-  end
-
-  JSON_LOADED = true
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Array.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Array.xpm
deleted file mode 100644
index 27c4801..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Array.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * Array_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"   ..........   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   .        .   ",
-"   ..........   ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/FalseClass.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/FalseClass.xpm
deleted file mode 100644
index 25ce608..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/FalseClass.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * False_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #FF0000",
-"                ",
-"                ",
-"                ",
-"     ......     ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     ......     ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     .          ",
-"     .          ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Hash.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Hash.xpm
deleted file mode 100644
index cd8f6f7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Hash.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * Hash_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"       .  .     ",
-"       .  .     ",
-"       .  .     ",
-"    .........   ",
-"      .  .      ",
-"      .  .      ",
-"   .........    ",
-"     .  .       ",
-"     .  .       ",
-"     .  .       ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Key.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Key.xpm
deleted file mode 100644
index 9fd7281..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Key.xpm
+++ /dev/null
@@ -1,73 +0,0 @@
-/* XPM */
-static char * Key_xpm[] = {
-"16 16 54 1",
-" 	c None",
-".	c #110007",
-"+	c #0E0900",
-"@	c #000013",
-"#	c #070600",
-"$	c #F6F006",
-"%	c #ECE711",
-"&	c #E5EE00",
-"*	c #16021E",
-"=	c #120900",
-"-	c #EDF12B",
-";	c #000033",
-">	c #0F0000",
-",	c #FFFE03",
-"'	c #E6E500",
-")	c #16021B",
-"!	c #F7F502",
-"~	c #000E00",
-"{	c #130000",
-"]	c #FFF000",
-"^	c #FFE711",
-"/	c #140005",
-"(	c #190025",
-"_	c #E9DD27",
-":	c #E7DC04",
-"<	c #FFEC09",
-"[	c #FFE707",
-"}	c #FFDE10",
-"|	c #150021",
-"1	c #160700",
-"2	c #FAF60E",
-"3	c #EFE301",
-"4	c #FEF300",
-"5	c #E7E000",
-"6	c #FFFF08",
-"7	c #0E0206",
-"8	c #040000",
-"9	c #03052E",
-"0	c #041212",
-"a	c #070300",
-"b	c #F2E713",
-"c	c #F9DE13",
-"d	c #36091E",
-"e	c #00001C",
-"f	c #1F0010",
-"g	c #FFF500",
-"h	c #DEDE00",
-"i	c #050A00",
-"j	c #FAF14A",
-"k	c #F5F200",
-"l	c #040404",
-"m	c #1A0D00",
-"n	c #EDE43D",
-"o	c #ECE007",
-"                ",
-"                ",
-"    .+@         ",
-"   #$%&*        ",
-"  =-;>,')       ",
-"  >!~{]^/       ",
-"  (_:<[}|       ",
-"   1234567      ",
-"    890abcd     ",
-"       efghi    ",
-"         >jkl   ",
-"          mnol  ",
-"           >kl  ",
-"            ll  ",
-"                ",
-"                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/NilClass.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/NilClass.xpm
deleted file mode 100644
index 3509f06..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/NilClass.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * False_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #000000",
-"                ",
-"                ",
-"                ",
-"       ...      ",
-"      .   .     ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"     .     .    ",
-"      .   .     ",
-"       ...      ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Numeric.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Numeric.xpm
deleted file mode 100644
index e071e2e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/Numeric.xpm
+++ /dev/null
@@ -1,28 +0,0 @@
-/* XPM */
-static char * Numeric_xpm[] = {
-"16 16 9 1",
-" 	c None",
-".	c #FF0000",
-"+	c #0000FF",
-"@	c #0023DB",
-"#	c #00EA14",
-"$	c #00FF00",
-"%	c #004FAF",
-"&	c #0028D6",
-"*	c #00F20C",
-"                ",
-"                ",
-"                ",
-" ... +++@#$$$$  ",
-"   .+   %&   $$ ",
-"   .     +    $ ",
-"   .     +   $$ ",
-"   .    ++$$$$  ",
-"   .    +    $$ ",
-"   .   +      $ ",
-"   .  +       $ ",
-"   . +  $    $$ ",
-" .....++++*$$   ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/String.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/String.xpm
deleted file mode 100644
index f79a89c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/String.xpm
+++ /dev/null
@@ -1,96 +0,0 @@
-/* XPM */
-static char * String_xpm[] = {
-"16 16 77 1",
-" 	c None",
-".	c #000000",
-"+	c #040404",
-"@	c #080806",
-"#	c #090606",
-"$	c #EEEAE1",
-"%	c #E7E3DA",
-"&	c #E0DBD1",
-"*	c #D4B46F",
-"=	c #0C0906",
-"-	c #E3C072",
-";	c #E4C072",
-">	c #060505",
-",	c #0B0A08",
-"'	c #D5B264",
-")	c #D3AF5A",
-"!	c #080602",
-"~	c #E1B863",
-"{	c #DDB151",
-"]	c #DBAE4A",
-"^	c #DDB152",
-"/	c #DDB252",
-"(	c #070705",
-"_	c #0C0A07",
-":	c #D3A33B",
-"<	c #020201",
-"[	c #DAAA41",
-"}	c #040302",
-"|	c #E4D9BF",
-"1	c #0B0907",
-"2	c #030201",
-"3	c #020200",
-"4	c #C99115",
-"5	c #080704",
-"6	c #DBC8A2",
-"7	c #E7D7B4",
-"8	c #E0CD9E",
-"9	c #080601",
-"0	c #040400",
-"a	c #010100",
-"b	c #0B0B08",
-"c	c #DCBF83",
-"d	c #DCBC75",
-"e	c #DEB559",
-"f	c #040301",
-"g	c #BC8815",
-"h	c #120E07",
-"i	c #060402",
-"j	c #0A0804",
-"k	c #D4A747",
-"l	c #D6A12F",
-"m	c #0E0C05",
-"n	c #C8C1B0",
-"o	c #1D1B15",
-"p	c #D7AD51",
-"q	c #070502",
-"r	c #080804",
-"s	c #BC953B",
-"t	c #C4BDAD",
-"u	c #0B0807",
-"v	c #DBAC47",
-"w	c #1B150A",
-"x	c #B78A2C",
-"y	c #D8A83C",
-"z	c #D4A338",
-"A	c #0F0B03",
-"B	c #181105",
-"C	c #C59325",
-"D	c #C18E1F",
-"E	c #060600",
-"F	c #CC992D",
-"G	c #B98B25",
-"H	c #B3831F",
-"I	c #C08C1C",
-"J	c #060500",
-"K	c #0E0C03",
-"L	c #0D0A00",
-"                ",
-"   .+@#         ",
-"  .$%&*=        ",
-" .-;>,')!       ",
-" .~.  .{].      ",
-" .^/. (_:<      ",
-"  .[.}|$12      ",
-"   345678}90    ",
-"    a2bcdefgh   ",
-"      ijkl.mno  ",
-"      <pq. rstu ",
-"      .]v.  wx= ",
-"       .yzABCDE ",
-"        .FGHIJ  ",
-"         0KL0   ",
-"                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/TrueClass.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/TrueClass.xpm
deleted file mode 100644
index 143eef4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/TrueClass.xpm
+++ /dev/null
@@ -1,21 +0,0 @@
-/* XPM */
-static char * TrueClass_xpm[] = {
-"16 16 2 1",
-" 	c None",
-".	c #0BF311",
-"                ",
-"                ",
-"                ",
-"   .........    ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"       .        ",
-"                ",
-"                ",
-"                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/add/core.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/add/core.rb
deleted file mode 100644
index 5a56ed7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/add/core.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-# This file contains implementations of ruby core's custom objects for
-# serialisation/deserialisation.
-
-unless Object.const_defined?(:JSON) and ::JSON.const_defined?(:JSON_LOADED) and
-  ::JSON::JSON_LOADED
-  require 'json'
-end
-require 'date'
-
-class Time
-  def self.json_create(object)
-    if usec = object.delete('u') # used to be tv_usec -> tv_nsec
-      object['n'] = usec * 1000
-    end
-    if respond_to?(:tv_nsec)
-      at(*object.values_at('s', 'n'))
-    else
-      at(object['s'], object['n'] / 1000)
-    end
-  end
-
-  def to_json(*args)
-    {
-      'json_class' => self.class.name,
-      's' => tv_sec,
-      'n' => respond_to?(:tv_nsec) ? tv_nsec : tv_usec * 1000
-    }.to_json(*args)
-  end
-end
-
-class Date
-  def self.json_create(object)
-    civil(*object.values_at('y', 'm', 'd', 'sg'))
-  end
-
-  alias start sg unless method_defined?(:start)
-
-  def to_json(*args)
-    {
-      'json_class' => self.class.name,
-      'y' => year,
-      'm' => month,
-      'd' => day,
-      'sg' => start,
-    }.to_json(*args)
-  end
-end
-
-class DateTime
-  def self.json_create(object)
-    args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
-    of_a, of_b = object['of'].split('/')
-    if of_b and of_b != '0'
-      args << Rational(of_a.to_i, of_b.to_i)
-    else
-      args << of_a
-    end
-    args << object['sg']
-    civil(*args)
-  end
-
-  alias start sg unless method_defined?(:start)
-
-  def to_json(*args)
-    {
-      'json_class' => self.class.name,
-      'y' => year,
-      'm' => month,
-      'd' => day,
-      'H' => hour,
-      'M' => min,
-      'S' => sec,
-      'of' => offset.to_s,
-      'sg' => start,
-    }.to_json(*args)
-  end
-end
-
-class Range
-  def self.json_create(object)
-    new(*object['a'])
-  end
-
-  def to_json(*args)
-    {
-      'json_class'   => self.class.name,
-      'a'         => [ first, last, exclude_end? ]
-    }.to_json(*args)
-  end
-end
-
-class Struct
-  def self.json_create(object)
-    new(*object['v'])
-  end
-
-  def to_json(*args)
-    klass = self.class.name
-    klass.empty? and raise JSON::JSONError, "Only named structs are supported!"
-    {
-      'json_class' => klass,
-      'v'     => values,
-    }.to_json(*args)
-  end
-end
-
-class Exception
-  def self.json_create(object)
-    result = new(object['m'])
-    result.set_backtrace object['b']
-    result
-  end
-
-  def to_json(*args)
-    {
-      'json_class' => self.class.name,
-      'm'   => message,
-      'b' => backtrace,
-    }.to_json(*args)
-  end
-end
-
-class Regexp
-  def self.json_create(object)
-    new(object['s'], object['o'])
-  end
-
-  def to_json(*)
-    {
-      'json_class' => self.class.name,
-      'o' => options,
-      's' => source,
-    }.to_json
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/add/rails.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/add/rails.rb
deleted file mode 100644
index e86ed1a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/add/rails.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# This file contains implementations of rails custom objects for
-# serialisation/deserialisation.
-
-unless Object.const_defined?(:JSON) and ::JSON.const_defined?(:JSON_LOADED) and
-  ::JSON::JSON_LOADED
-  require 'json'
-end
-
-class Object
-  def self.json_create(object)
-    obj = new
-    for key, value in object
-      next if key == 'json_class'
-      instance_variable_set "@#{key}", value
-    end
-    obj
-  end
-
-  def to_json(*a)
-    result = {
-      'json_class' => self.class.name
-    }
-    instance_variables.inject(result) do |r, name|
-      r[name[1..-1]] = instance_variable_get name
-      r
-    end
-    result.to_json(*a)
-  end
-end
-
-class Symbol
-  def to_json(*a)
-    to_s.to_json(*a)
-  end
-end
-
-module Enumerable
-  def to_json(*a)
-    to_a.to_json(*a)
-  end
-end
-
-# class Regexp
-#   def to_json(*)
-#     inspect
-#   end
-# end
-#
-# The above rails definition has some problems:
-#
-# 1. { 'foo' => /bar/ }.to_json # => "{foo: /bar/}"
-#    This isn't valid JSON, because the regular expression syntax is not
-#    defined in RFC 4627. (And unquoted strings are disallowed there, too.)
-#    Though it is valid Javascript.
-#
-# 2. { 'foo' => /bar/mix }.to_json # => "{foo: /bar/mix}"
-#    This isn't even valid Javascript.
-
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/common.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/common.rb
deleted file mode 100644
index 499fcc0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/common.rb
+++ /dev/null
@@ -1,354 +0,0 @@
-require 'json/version'
-
-module JSON
-  class << self
-    # If _object_ is string-like parse the string and return the parsed result
-    # as a Ruby data structure. Otherwise generate a JSON text from the Ruby
-    # data structure object and return it.
-    #
-    # The _opts_ argument is passed through to generate/parse respectively, see
-    # generate and parse for their documentation.
-    def [](object, opts = {})
-      if object.respond_to? :to_str
-        JSON.parse(object.to_str, opts => {})
-      else
-        JSON.generate(object, opts => {})
-      end
-    end
-
-    # Returns the JSON parser class, that is used by JSON. This might be either
-    # JSON::Ext::Parser or JSON::Pure::Parser.
-    attr_reader :parser
-
-    # Set the JSON parser class _parser_ to be used by JSON.
-    def parser=(parser) # :nodoc:
-      @parser = parser
-      remove_const :Parser if const_defined? :Parser
-      const_set :Parser, parser
-    end
-
-    # Return the constant located at _path_. The format of _path_ has to be
-    # either ::A::B::C or A::B::C. In any case A has to be located at the top
-    # level (absolute namespace path?). If there doesn't exist a constant at
-    # the given path, an ArgumentError is raised.
-    def deep_const_get(path) # :nodoc:
-      path = path.to_s
-      path.split(/::/).inject(Object) do |p, c|
-        case
-        when c.empty?             then p
-        when p.const_defined?(c)  then p.const_get(c)
-        else                      raise ArgumentError, "can't find const #{path}"
-        end
-      end
-    end
-
-    # Set the module _generator_ to be used by JSON.
-    def generator=(generator) # :nodoc:
-      @generator = generator
-      generator_methods = generator::GeneratorMethods
-      for const in generator_methods.constants
-        klass = deep_const_get(const)
-        modul = generator_methods.const_get(const)
-        klass.class_eval do
-          instance_methods(false).each do |m|
-            m.to_s == 'to_json' and remove_method m
-          end
-          include modul
-        end
-      end
-      self.state = generator::State
-      const_set :State, self.state
-    end
-
-    # Returns the JSON generator modul, that is used by JSON. This might be
-    # either JSON::Ext::Generator or JSON::Pure::Generator.
-    attr_reader :generator
-
-    # Returns the JSON generator state class, that is used by JSON. This might
-    # be either JSON::Ext::Generator::State or JSON::Pure::Generator::State.
-    attr_accessor :state
-
-    # This is create identifier, that is used to decide, if the _json_create_
-    # hook of a class should be called. It defaults to 'json_class'.
-    attr_accessor :create_id
-  end
-  self.create_id = 'json_class'
-
-  NaN           = (-1.0) ** 0.5
-
-  Infinity      = 1.0/0
-
-  MinusInfinity = -Infinity
-
-  # The base exception for JSON errors.
-  class JSONError < StandardError; end
-
-  # This exception is raised, if a parser error occurs.
-  class ParserError < JSONError; end
-
-  # This exception is raised, if the nesting of parsed datastructures is too
-  # deep.
-  class NestingError < ParserError; end
-
-  # This exception is raised, if a generator or unparser error occurs.
-  class GeneratorError < JSONError; end
-  # For backwards compatibility
-  UnparserError = GeneratorError
-
-  # If a circular data structure is encountered while unparsing
-  # this exception is raised.
-  class CircularDatastructure < GeneratorError; end
-
-  # This exception is raised, if the required unicode support is missing on the
-  # system. Usually this means, that the iconv library is not installed.
-  class MissingUnicodeSupport < JSONError; end
-
-  module_function
-
-  # Parse the JSON string _source_ into a Ruby data structure and return it.
-  #
-  # _opts_ can have the following
-  # keys:
-  # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
-  #   structures. Disable depth checking with :max_nesting => false, it defaults
-  #   to 19.
-  # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
-  #   defiance of RFC 4627 to be parsed by the Parser. This option defaults
-  #   to false.
-  # * *create_additions*: If set to false, the Parser doesn't create
-  #   additions even if a matchin class and create_id was found. This option
-  #   defaults to true.
-  def parse(source, opts = {})
-    JSON.parser.new(source, opts).parse
-  end
-
-  # Parse the JSON string _source_ into a Ruby data structure and return it.
-  # The bang version of the parse method, defaults to the more dangerous values
-  # for the _opts_ hash, so be sure only to parse trusted _source_ strings.
-  #
-  # _opts_ can have the following keys:
-  # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
-  #   structures. Enable depth checking with :max_nesting => anInteger. The parse!
-  #   methods defaults to not doing max depth checking: This can be dangerous,
-  #   if someone wants to fill up your stack.
-  # * *allow_nan*: If set to true, allow NaN, Infinity, and -Infinity in
-  #   defiance of RFC 4627 to be parsed by the Parser. This option defaults
-  #   to true.
-  # * *create_additions*: If set to false, the Parser doesn't create
-  #   additions even if a matchin class and create_id was found. This option
-  #   defaults to true.
-  def parse!(source, opts = {})
-    opts = {
-      :max_nesting => false,
-      :allow_nan => true
-    }.update(opts)
-    JSON.parser.new(source, opts).parse
-  end
-
-  # Unparse the Ruby data structure _obj_ into a single line JSON string and
-  # return it. _state_ is
-  # * a JSON::State object,
-  # * or a Hash like object (responding to to_hash),
-  # * an object convertible into a hash by a to_h method,
-  # that is used as or to configure a State object.
-  #
-  # It defaults to a state object, that creates the shortest possible JSON text
-  # in one line, checks for circular data structures and doesn't allow NaN,
-  # Infinity, and -Infinity.
-  #
-  # A _state_ hash can have the following keys:
-  # * *indent*: a string used to indent levels (default: ''),
-  # * *space*: a string that is put after, a : or , delimiter (default: ''),
-  # * *space_before*: a string that is put before a : pair delimiter (default: ''),
-  # * *object_nl*: a string that is put at the end of a JSON object (default: ''), 
-  # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
-  # * *check_circular*: true if checking for circular data structures
-  #   should be done (the default), false otherwise.
-  # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
-  #   generated, otherwise an exception is thrown, if these values are
-  #   encountered. This options defaults to false.
-  # * *max_nesting*: The maximum depth of nesting allowed in the data
-  #   structures from which JSON is to be generated. Disable depth checking
-  #   with :max_nesting => false, it defaults to 19.
-  #
-  # See also the fast_generate for the fastest creation method with the least
-  # amount of sanity checks, and the pretty_generate method for some
-  # defaults for a pretty output.
-  def generate(obj, state = nil)
-    if state
-      state = State.from_state(state)
-    else
-      state = State.new
-    end
-    obj.to_json(state)
-  end
-
-  # :stopdoc:
-  # I want to deprecate these later, so I'll first be silent about them, and
-  # later delete them.
-  alias unparse generate
-  module_function :unparse
-  # :startdoc:
-
-  # Unparse the Ruby data structure _obj_ into a single line JSON string and
-  # return it. This method disables the checks for circles in Ruby objects, and
-  # also generates NaN, Infinity, and, -Infinity float values.
-  #
-  # *WARNING*: Be careful not to pass any Ruby data structures with circles as
-  # _obj_ argument, because this will cause JSON to go into an infinite loop.
-  def fast_generate(obj)
-    obj.to_json(nil)
-  end
-
-  # :stopdoc:
-  # I want to deprecate these later, so I'll first be silent about them, and later delete them.
-  alias fast_unparse fast_generate
-  module_function :fast_unparse
-  # :startdoc:
-
-  # Unparse the Ruby data structure _obj_ into a JSON string and return it. The
-  # returned string is a prettier form of the string returned by #unparse.
-  #
-  # The _opts_ argument can be used to configure the generator, see the
-  # generate method for a more detailed explanation.
-  def pretty_generate(obj, opts = nil)
-    state = JSON.state.new(
-      :indent     => '  ',
-      :space      => ' ',
-      :object_nl  => "\n",
-      :array_nl   => "\n",
-      :check_circular => true
-    )
-    if opts
-      if opts.respond_to? :to_hash
-        opts = opts.to_hash
-      elsif opts.respond_to? :to_h
-        opts = opts.to_h
-      else
-        raise TypeError, "can't convert #{opts.class} into Hash"
-      end
-      state.configure(opts)
-    end
-    obj.to_json(state)
-  end
-
-  # :stopdoc:
-  # I want to deprecate these later, so I'll first be silent about them, and later delete them.
-  alias pretty_unparse pretty_generate
-  module_function :pretty_unparse
-  # :startdoc:
-
-  # Load a ruby data structure from a JSON _source_ and return it. A source can
-  # either be a string-like object, an IO like object, or an object responding
-  # to the read method. If _proc_ was given, it will be called with any nested
-  # Ruby object as an argument recursively in depth first order.
-  #
-  # This method is part of the implementation of the load/dump interface of
-  # Marshal and YAML.
-  def load(source, proc = nil)
-    if source.respond_to? :to_str
-      source = source.to_str
-    elsif source.respond_to? :to_io
-      source = source.to_io.read
-    else
-      source = source.read
-    end
-    result = parse(source, :max_nesting => false, :allow_nan => true)
-    recurse_proc(result, &proc) if proc
-    result
-  end
-
-  def recurse_proc(result, &proc)
-    case result
-    when Array
-      result.each { |x| recurse_proc x, &proc }
-      proc.call result
-    when Hash
-      result.each { |x, y| recurse_proc x, &proc; recurse_proc y, &proc }
-      proc.call result
-    else
-      proc.call result
-    end
-  end
-  private :recurse_proc
-  module_function :recurse_proc
-
-  alias restore load
-  module_function :restore
-
-  # Dumps _obj_ as a JSON string, i.e. calls generate on the object and returns
-  # the result.
-  #
-  # If anIO (an IO like object or an object that responds to the write method)
-  # was given, the resulting JSON is written to it.
-  #
-  # If the number of nested arrays or objects exceeds _limit_ an ArgumentError
-  # exception is raised. This argument is similar (but not exactly the
-  # same!) to the _limit_ argument in Marshal.dump.
-  #
-  # This method is part of the implementation of the load/dump interface of
-  # Marshal and YAML.
-  def dump(obj, anIO = nil, limit = nil)
-    if anIO and limit.nil?
-      anIO = anIO.to_io if anIO.respond_to?(:to_io)
-      unless anIO.respond_to?(:write)
-        limit = anIO
-        anIO = nil
-      end
-    end
-    limit ||= 0
-    result = generate(obj, :allow_nan => true, :max_nesting => limit)
-    if anIO
-      anIO.write result
-      anIO
-    else
-      result
-    end
-  rescue JSON::NestingError
-    raise ArgumentError, "exceed depth limit"
-  end
-end
-
-module ::Kernel
-  # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
-  # one line.
-  def j(*objs)
-    objs.each do |obj|
-      puts JSON::generate(obj, :allow_nan => true, :max_nesting => false)
-    end
-    nil
-  end
-
-  # Ouputs _objs_ to STDOUT as JSON strings in a pretty format, with
-  # indentation and over many lines.
-  def jj(*objs)
-    objs.each do |obj|
-      puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)
-    end
-    nil
-  end
-
-  # If _object_ is string-like parse the string and return the parsed result as
-  # a Ruby data structure. Otherwise generate a JSON text from the Ruby data
-  # structure object and return it.
-  #
-  # The _opts_ argument is passed through to generate/parse respectively, see
-  # generate and parse for their documentation.
-  def JSON(object, opts = {})
-    if object.respond_to? :to_str
-      JSON.parse(object.to_str, opts)
-    else
-      JSON.generate(object, opts)
-    end
-  end
-end
-
-class ::Class
-  # Returns true, if this class can be used to create an instance
-  # from a serialised JSON string. The class has to implement a class
-  # method _json_create_ that expects a hash as first parameter, which includes
-  # the required data.
-  def json_creatable?
-    respond_to?(:json_create)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/editor.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/editor.rb
deleted file mode 100644
index 12a7f94..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/editor.rb
+++ /dev/null
@@ -1,1362 +0,0 @@
-# To use the GUI JSON editor, start the edit_json.rb executable script. It
-# requires ruby-gtk to be installed.
-
-require 'gtk2'
-require 'iconv'
-require 'json'
-require 'rbconfig'
-require 'open-uri'
-
-module JSON
-  module Editor
-    include Gtk
-
-    # Beginning of the editor window title
-    TITLE                 = 'JSON Editor'.freeze
-
-    # Columns constants
-    ICON_COL, TYPE_COL, CONTENT_COL = 0, 1, 2
-
-    # JSON primitive types (Containers)
-    CONTAINER_TYPES = %w[Array Hash].sort
-    # All JSON primitive types
-    ALL_TYPES = (%w[TrueClass FalseClass Numeric String NilClass] +
-                 CONTAINER_TYPES).sort
-
-    # The Nodes necessary for the tree representation of a JSON document
-    ALL_NODES = (ALL_TYPES + %w[Key]).sort
-
-    DEFAULT_DIALOG_KEY_PRESS_HANDLER = lambda do |dialog, event|
-      case event.keyval
-      when Gdk::Keyval::GDK_Return
-        dialog.response Dialog::RESPONSE_ACCEPT
-      when Gdk::Keyval::GDK_Escape
-        dialog.response Dialog::RESPONSE_REJECT
-      end
-    end
-
-    # Returns the Gdk::Pixbuf of the icon named _name_ from the icon cache.
-    def Editor.fetch_icon(name)
-      @icon_cache ||= {}
-      unless @icon_cache.key?(name)
-        path = File.dirname(__FILE__)
-        @icon_cache[name] = Gdk::Pixbuf.new(File.join(path, name + '.xpm'))
-      end
-     @icon_cache[name]
-    end
-
-    # Opens an error dialog on top of _window_ showing the error message
-    # _text_.
-    def Editor.error_dialog(window, text)
-      dialog = MessageDialog.new(window, Dialog::MODAL, 
-        MessageDialog::ERROR, 
-        MessageDialog::BUTTONS_CLOSE, text)
-      dialog.show_all
-      dialog.run
-    rescue TypeError
-      dialog = MessageDialog.new(Editor.window, Dialog::MODAL, 
-        MessageDialog::ERROR, 
-        MessageDialog::BUTTONS_CLOSE, text)
-      dialog.show_all
-      dialog.run
-    ensure
-      dialog.destroy if dialog
-    end
-
-    # Opens a yes/no question dialog on top of _window_ showing the error
-    # message _text_. If yes was answered _true_ is returned, otherwise
-    # _false_.
-    def Editor.question_dialog(window, text)
-      dialog = MessageDialog.new(window, Dialog::MODAL, 
-        MessageDialog::QUESTION, 
-        MessageDialog::BUTTONS_YES_NO, text)
-      dialog.show_all
-      dialog.run do |response|
-        return Gtk::Dialog::RESPONSE_YES === response
-      end
-    ensure
-      dialog.destroy if dialog
-    end
-
-    # Convert the tree model starting from Gtk::TreeIter _iter_ into a Ruby
-    # data structure and return it.
-    def Editor.model2data(iter)
-      return nil if iter.nil?
-      case iter.type
-      when 'Hash'
-        hash = {}
-        iter.each { |c| hash[c.content] = Editor.model2data(c.first_child) }
-        hash
-      when 'Array'
-        array = Array.new(iter.n_children)
-        iter.each_with_index { |c, i| array[i] = Editor.model2data(c) }
-        array
-      when 'Key'
-        iter.content
-      when 'String'
-        iter.content
-      when 'Numeric'
-        content = iter.content
-        if /\./.match(content)
-          content.to_f
-        else
-          content.to_i
-        end
-      when 'TrueClass'
-        true
-      when 'FalseClass'
-        false
-      when 'NilClass'
-        nil
-      else
-        fail "Unknown type found in model: #{iter.type}"
-      end
-    end
-
-    # Convert the Ruby data structure _data_ into tree model data for Gtk and
-    # returns the whole model. If the parameter _model_ wasn't given a new
-    # Gtk::TreeStore is created as the model. The _parent_ parameter specifies
-    # the parent node (iter, Gtk:TreeIter instance) to which the data is
-    # appended, alternativeley the result of the yielded block is used as iter.
-    def Editor.data2model(data, model = nil, parent = nil)
-      model ||= TreeStore.new(Gdk::Pixbuf, String, String)
-      iter = if block_given?
-        yield model
-      else
-        model.append(parent)
-      end
-      case data
-      when Hash
-        iter.type = 'Hash'
-        data.sort.each do |key, value|
-          pair_iter = model.append(iter)
-          pair_iter.type    = 'Key'
-          pair_iter.content = key.to_s
-          Editor.data2model(value, model, pair_iter)
-        end
-      when Array
-        iter.type = 'Array'
-        data.each do |value|
-          Editor.data2model(value, model, iter)
-        end
-      when Numeric
-        iter.type = 'Numeric'
-        iter.content = data.to_s
-      when String, true, false, nil
-        iter.type    = data.class.name
-        iter.content = data.nil? ? 'null' : data.to_s
-      else
-        iter.type    = 'String'
-        iter.content = data.to_s
-      end
-      model
-    end
-
-    # The Gtk::TreeIter class is reopened and some auxiliary methods are added.
-    class Gtk::TreeIter
-      include Enumerable
-
-      # Traverse each of this Gtk::TreeIter instance's children
-      # and yield to them.
-      def each
-        n_children.times { |i| yield nth_child(i) }
-      end
-
-      # Recursively traverse all nodes of this Gtk::TreeIter's subtree
-      # (including self) and yield to them.
-      def recursive_each(&block)
-        yield self
-        each do |i|
-          i.recursive_each(&block)
-        end
-      end
-
-      # Remove the subtree of this Gtk::TreeIter instance from the
-      # model _model_.
-      def remove_subtree(model)
-        while current = first_child
-          model.remove(current)
-        end
-      end
-
-      # Returns the type of this node.
-      def type
-        self[TYPE_COL]
-      end
-
-      # Sets the type of this node to _value_. This implies setting
-      # the respective icon accordingly.
-      def type=(value)
-        self[TYPE_COL] = value
-        self[ICON_COL] = Editor.fetch_icon(value)
-      end
-
-      # Returns the content of this node.
-      def content
-        self[CONTENT_COL]
-      end
-
-      # Sets the content of this node to _value_.
-      def content=(value)
-        self[CONTENT_COL] = value
-      end
-    end
-
-    # This module bundles some method, that can be used to create a menu. It
-    # should be included into the class in question.
-    module MenuExtension
-      include Gtk
-
-      # Creates a Menu, that includes MenuExtension. _treeview_ is the
-      # Gtk::TreeView, on which it operates.
-      def initialize(treeview)
-        @treeview = treeview
-        @menu = Menu.new
-      end
-
-      # Returns the Gtk::TreeView of this menu.
-      attr_reader :treeview
-
-      # Returns the menu.
-      attr_reader :menu
-
-      # Adds a Gtk::SeparatorMenuItem to this instance's #menu.
-      def add_separator
-        menu.append SeparatorMenuItem.new
-      end
-
-      # Adds a Gtk::MenuItem to this instance's #menu. _label_ is the label
-      # string, _klass_ is the item type, and _callback_ is the procedure, that
-      # is called if the _item_ is activated.
-      def add_item(label, keyval = nil, klass = MenuItem, &callback)
-        label = "#{label} (C-#{keyval.chr})" if keyval
-        item = klass.new(label)
-        item.signal_connect(:activate, &callback)
-        if keyval
-          self.signal_connect(:'key-press-event') do |item, event|
-            if event.state & Gdk::Window::ModifierType::CONTROL_MASK != 0 and
-              event.keyval == keyval
-              callback.call item
-            end
-          end
-        end
-        menu.append item
-        item
-      end
-
-      # This method should be implemented in subclasses to create the #menu of
-      # this instance. It has to be called after an instance of this class is
-      # created, to build the menu.
-      def create
-        raise NotImplementedError
-      end
-
-      def method_missing(*a, &b)
-        treeview.__send__(*a, &b)
-      end
-    end
-
-    # This class creates the popup menu, that opens when clicking onto the
-    # treeview.
-    class PopUpMenu
-      include MenuExtension
-
-      # Change the type or content of the selected node.
-      def change_node(item)
-        if current = selection.selected
-          parent = current.parent
-          old_type, old_content = current.type, current.content
-          if ALL_TYPES.include?(old_type)
-            @clipboard_data = Editor.model2data(current)
-            type, content = ask_for_element(parent, current.type,
-              current.content)
-            if type
-              current.type, current.content = type, content
-              current.remove_subtree(model)
-              toplevel.display_status("Changed a node in tree.")
-              window.change
-            end
-          else
-            toplevel.display_status(
-              "Cannot change node of type #{old_type} in tree!")
-          end
-        end
-      end
-
-      # Cut the selected node and its subtree, and save it into the
-      # clipboard.
-      def cut_node(item)
-        if current = selection.selected
-          if current and current.type == 'Key'
-            @clipboard_data = {
-              current.content => Editor.model2data(current.first_child)
-            }
-          else
-            @clipboard_data = Editor.model2data(current)
-          end
-          model.remove(current)
-          window.change
-          toplevel.display_status("Cut a node from tree.")
-        end
-      end
-
-      # Copy the selected node and its subtree, and save it into the
-      # clipboard.
-      def copy_node(item)
-        if current = selection.selected
-          if current and current.type == 'Key'
-            @clipboard_data = {
-              current.content => Editor.model2data(current.first_child)
-            }
-          else
-            @clipboard_data = Editor.model2data(current)
-          end
-          window.change
-          toplevel.display_status("Copied a node from tree.")
-        end
-      end
-
-      # Paste the data in the clipboard into the selected Array or Hash by
-      # appending it.
-      def paste_node_appending(item)
-        if current = selection.selected
-          if @clipboard_data
-            case current.type
-            when 'Array'
-              Editor.data2model(@clipboard_data, model, current)
-              expand_collapse(current)
-            when 'Hash'
-              if @clipboard_data.is_a? Hash
-                parent = current.parent
-                hash = Editor.model2data(current)
-                model.remove(current)
-                hash.update(@clipboard_data)
-                Editor.data2model(hash, model, parent)
-                if parent
-                  expand_collapse(parent)
-                elsif @expanded
-                  expand_all
-                end
-                window.change
-              else
-                toplevel.display_status(
-                  "Cannot paste non-#{current.type} data into '#{current.type}'!")
-              end
-            else
-              toplevel.display_status(
-                "Cannot paste node below '#{current.type}'!")
-            end
-          else
-            toplevel.display_status("Nothing to paste in clipboard!")
-          end
-        else
-            toplevel.display_status("Append a node into the root first!")
-        end
-      end
-
-      # Paste the data in the clipboard into the selected Array inserting it
-      # before the selected element.
-      def paste_node_inserting_before(item)
-        if current = selection.selected
-          if @clipboard_data
-            parent = current.parent or return
-            parent_type = parent.type
-            if parent_type == 'Array'
-              selected_index = parent.each_with_index do |c, i|
-                break i if c == current
-              end
-              Editor.data2model(@clipboard_data, model, parent) do |m|
-                m.insert_before(parent, current)
-              end
-              expand_collapse(current)
-              toplevel.display_status("Inserted an element to " +
-                "'#{parent_type}' before index #{selected_index}.")
-              window.change
-            else
-              toplevel.display_status(
-                "Cannot insert node below '#{parent_type}'!")
-            end
-          else
-            toplevel.display_status("Nothing to paste in clipboard!")
-          end
-        else
-            toplevel.display_status("Append a node into the root first!")
-        end
-      end
-
-      # Append a new node to the selected Hash or Array.
-      def append_new_node(item)
-        if parent = selection.selected
-          parent_type = parent.type
-          case parent_type
-          when 'Hash'
-            key, type, content = ask_for_hash_pair(parent)
-            key or return
-            iter = create_node(parent, 'Key', key)
-            iter = create_node(iter, type, content)
-            toplevel.display_status(
-              "Added a (key, value)-pair to '#{parent_type}'.")
-            window.change
-          when 'Array'
-            type, content = ask_for_element(parent)
-            type or return
-            iter = create_node(parent, type, content)
-            window.change
-            toplevel.display_status("Appendend an element to '#{parent_type}'.")
-          else
-            toplevel.display_status("Cannot append to '#{parent_type}'!")
-          end
-        else
-          type, content = ask_for_element
-          type or return
-          iter = create_node(nil, type, content)
-          window.change
-        end
-      end
-
-      # Insert a new node into an Array before the selected element.
-      def insert_new_node(item)
-        if current = selection.selected
-          parent = current.parent or return
-          parent_parent = parent.parent
-          parent_type = parent.type
-          if parent_type == 'Array'
-            selected_index = parent.each_with_index do |c, i|
-              break i if c == current
-            end
-            type, content = ask_for_element(parent)
-            type or return
-            iter = model.insert_before(parent, current)
-            iter.type, iter.content = type, content
-            toplevel.display_status("Inserted an element to " +
-              "'#{parent_type}' before index #{selected_index}.")
-            window.change
-          else
-            toplevel.display_status(
-              "Cannot insert node below '#{parent_type}'!")
-          end
-        else
-            toplevel.display_status("Append a node into the root first!")
-        end
-      end
-
-      # Recursively collapse/expand a subtree starting from the selected node.
-      def collapse_expand(item)
-        if current = selection.selected
-          if row_expanded?(current.path)
-            collapse_row(current.path)
-          else
-            expand_row(current.path, true)
-          end
-        else
-            toplevel.display_status("Append a node into the root first!")
-        end
-      end
-
-      # Create the menu.
-      def create
-        add_item("Change node", ?n, &method(:change_node))
-        add_separator
-        add_item("Cut node", ?X, &method(:cut_node))
-        add_item("Copy node", ?C, &method(:copy_node))
-        add_item("Paste node (appending)", ?A, &method(:paste_node_appending))
-        add_item("Paste node (inserting before)", ?I,
-          &method(:paste_node_inserting_before))
-        add_separator
-        add_item("Append new node", ?a, &method(:append_new_node))
-        add_item("Insert new node before", ?i, &method(:insert_new_node))
-        add_separator 
-        add_item("Collapse/Expand node (recursively)", ?e,
-          &method(:collapse_expand))
-
-        menu.show_all
-        signal_connect(:button_press_event) do |widget, event|
-          if event.kind_of? Gdk::EventButton and event.button == 3
-            menu.popup(nil, nil, event.button, event.time)
-          end
-        end
-        signal_connect(:popup_menu) do
-          menu.popup(nil, nil, 0, Gdk::Event::CURRENT_TIME)
-        end
-      end
-    end
-
-    # This class creates the File pulldown menu.
-    class FileMenu
-      include MenuExtension
-
-      # Clear the model and filename, but ask to save the JSON document, if
-      # unsaved changes have occured.
-      def new(item)
-        window.clear
-      end
-
-      # Open a file and load it into the editor. Ask to save the JSON document
-      # first, if unsaved changes have occured.
-      def open(item)
-        window.file_open
-      end
-
-      def open_location(item)
-        window.location_open
-      end
-
-      # Revert the current JSON document in the editor to the saved version.
-      def revert(item)
-        window.instance_eval do
-          @filename and file_open(@filename) 
-        end
-      end
-
-      # Save the current JSON document.
-      def save(item)
-        window.file_save
-      end
-
-      # Save the current JSON document under the given filename.
-      def save_as(item)
-        window.file_save_as
-      end
-
-      # Quit the editor, after asking to save any unsaved changes first.
-      def quit(item)
-        window.quit
-      end
-
-      # Create the menu.
-      def create
-        title = MenuItem.new('File')
-        title.submenu = menu
-        add_item('New', &method(:new))
-        add_item('Open', ?o, &method(:open))
-        add_item('Open location', ?l, &method(:open_location))
-        add_item('Revert', &method(:revert))
-        add_separator
-        add_item('Save', ?s, &method(:save))
-        add_item('Save As', ?S, &method(:save_as))
-        add_separator
-        add_item('Quit', ?q, &method(:quit))
-        title
-      end
-    end
-
-    # This class creates the Edit pulldown menu.
-    class EditMenu
-      include MenuExtension
-
-      # Copy data from model into primary clipboard.
-      def copy(item)
-        data = Editor.model2data(model.iter_first)
-        json = JSON.pretty_generate(data, :max_nesting => false)
-        c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
-        c.text = json
-      end
-
-      # Copy json text from primary clipboard into model.
-      def paste(item)
-        c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
-        if json = c.wait_for_text
-          window.ask_save if @changed
-          begin
-            window.edit json
-          rescue JSON::ParserError
-            window.clear
-          end
-        end
-      end
-
-      # Find a string in all nodes' contents and select the found node in the
-      # treeview.
-      def find(item)
-        @search = ask_for_find_term(@search) or return
-        iter = model.get_iter('0') or return
-        iter.recursive_each do |i|
-          if @iter
-            if @iter != i
-              next
-            else
-              @iter = nil
-              next
-            end
-          elsif @search.match(i[CONTENT_COL])
-             set_cursor(i.path, nil, false)
-             @iter = i
-             break
-          end
-        end
-      end
-
-      # Repeat the last search given by #find.
-      def find_again(item)
-        @search or return
-        iter = model.get_iter('0')
-        iter.recursive_each do |i|
-          if @iter
-            if @iter != i
-              next
-            else
-              @iter = nil
-              next
-            end
-          elsif @search.match(i[CONTENT_COL])
-             set_cursor(i.path, nil, false)
-             @iter = i
-             break
-          end
-        end
-      end
-
-      # Sort (Reverse sort) all elements of the selected array by the given
-      # expression. _x_ is the element in question.
-      def sort(item)
-        if current = selection.selected
-          if current.type == 'Array'
-            parent = current.parent
-            ary = Editor.model2data(current)
-            order, reverse = ask_for_order
-            order or return
-            begin
-              block = eval "lambda { |x| #{order} }"
-              if reverse
-                ary.sort! { |a,b| block[b] <=> block[a] }
-              else
-                ary.sort! { |a,b| block[a] <=> block[b] }
-              end
-            rescue => e
-              Editor.error_dialog(self, "Failed to sort Array with #{order}: #{e}!")
-            else
-              Editor.data2model(ary, model, parent) do |m|
-                m.insert_before(parent, current)
-              end
-              model.remove(current)
-              expand_collapse(parent)
-              window.change
-              toplevel.display_status("Array has been sorted.")
-            end
-          else
-            toplevel.display_status("Only Array nodes can be sorted!")
-          end
-        else
-            toplevel.display_status("Select an Array to sort first!")
-        end
-      end
-
-      # Create the menu.
-      def create
-        title = MenuItem.new('Edit')
-        title.submenu = menu
-        add_item('Copy', ?c, &method(:copy))
-        add_item('Paste', ?v, &method(:paste))
-        add_separator
-        add_item('Find', ?f, &method(:find))
-        add_item('Find Again', ?g, &method(:find_again))
-        add_separator
-        add_item('Sort', ?S, &method(:sort))
-        title
-      end
-    end
-
-    class OptionsMenu
-      include MenuExtension
-
-      # Collapse/Expand all nodes by default.
-      def collapsed_nodes(item)
-        if expanded
-          self.expanded = false
-          collapse_all
-        else
-          self.expanded = true
-          expand_all 
-        end
-      end
-
-      # Toggle pretty saving mode on/off.
-      def pretty_saving(item)
-        @pretty_item.toggled
-        window.change
-      end
-
-      attr_reader :pretty_item
-
-      # Create the menu.
-      def create
-        title = MenuItem.new('Options')
-        title.submenu = menu
-        add_item('Collapsed nodes', nil, CheckMenuItem, &method(:collapsed_nodes))
-        @pretty_item = add_item('Pretty saving', nil, CheckMenuItem,
-          &method(:pretty_saving))
-        @pretty_item.active = true
-        window.unchange
-        title
-      end
-    end
-
-    # This class inherits from Gtk::TreeView, to configure it and to add a lot
-    # of behaviour to it.
-    class JSONTreeView < Gtk::TreeView
-      include Gtk
-
-      # Creates a JSONTreeView instance, the parameter _window_ is
-      # a MainWindow instance and used for self delegation.
-      def initialize(window)
-        @window = window
-        super(TreeStore.new(Gdk::Pixbuf, String, String))
-        self.selection.mode = SELECTION_BROWSE
-
-        @expanded = false
-        self.headers_visible = false
-        add_columns
-        add_popup_menu
-      end
-
-      # Returns the MainWindow instance of this JSONTreeView.
-      attr_reader :window
-
-      # Returns true, if nodes are autoexpanding, false otherwise.
-      attr_accessor :expanded
-
-      private
-
-      def add_columns
-        cell = CellRendererPixbuf.new
-        column = TreeViewColumn.new('Icon', cell,
-          'pixbuf'      => ICON_COL
-        )
-        append_column(column)
-
-        cell = CellRendererText.new
-        column = TreeViewColumn.new('Type', cell,
-          'text'      => TYPE_COL
-        )
-        append_column(column)
-
-        cell = CellRendererText.new
-        cell.editable = true
-        column = TreeViewColumn.new('Content', cell,
-          'text'       => CONTENT_COL
-        )
-        cell.signal_connect(:edited, &method(:cell_edited))
-        append_column(column)
-      end
-
-      def unify_key(iter, key)
-        return unless iter.type == 'Key'
-        parent = iter.parent
-        if parent.any? { |c| c != iter and c.content == key }
-          old_key = key
-          i = 0
-          begin
-            key = sprintf("%s.%d", old_key, i += 1)
-          end while parent.any? { |c| c != iter and c.content == key }
-        end
-        iter.content = key
-      end
-
-      def cell_edited(cell, path, value)
-        iter = model.get_iter(path)
-        case iter.type
-        when 'Key'
-          unify_key(iter, value)
-          toplevel.display_status('Key has been changed.')
-        when 'FalseClass'
-          value.downcase!
-          if value == 'true'
-            iter.type, iter.content = 'TrueClass', 'true'
-          end
-        when 'TrueClass'
-          value.downcase!
-          if value == 'false'
-            iter.type, iter.content = 'FalseClass', 'false'
-          end
-        when 'Numeric'
-          iter.content = (Integer(value) rescue Float(value) rescue 0).to_s
-        when 'String'
-          iter.content = value
-        when 'Hash', 'Array'
-          return
-        else
-          fail "Unknown type found in model: #{iter.type}"
-        end
-        window.change
-      end
-
-      def configure_value(value, type)
-        value.editable = false
-        case type
-        when 'Array', 'Hash'
-          value.text = ''
-        when 'TrueClass'
-          value.text = 'true'
-        when 'FalseClass'
-          value.text = 'false'
-        when 'NilClass'
-          value.text = 'null'
-        when 'Numeric', 'String'
-          value.text ||= ''
-          value.editable = true
-        else
-          raise ArgumentError, "unknown type '#{type}' encountered"
-        end
-      end
-
-      def add_popup_menu
-        menu = PopUpMenu.new(self)
-        menu.create
-      end
-
-      public
-
-      # Create a _type_ node with content _content_, and add it to _parent_
-      # in the model. If _parent_ is nil, create a new model and put it into
-      # the editor treeview.
-      def create_node(parent, type, content)
-        iter = if parent
-          model.append(parent)
-        else
-          new_model = Editor.data2model(nil)
-          toplevel.view_new_model(new_model)
-          new_model.iter_first
-        end
-        iter.type, iter.content = type, content
-        expand_collapse(parent) if parent
-        iter
-      end
-
-      # Ask for a hash key, value pair to be added to the Hash node _parent_.
-      def ask_for_hash_pair(parent)
-        key_input = type_input = value_input = nil
-
-        dialog = Dialog.new("New (key, value) pair for Hash", nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        dialog.width_request = 640
-
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Key:"), false)
-        hbox.pack_start(key_input = Entry.new)
-        key_input.text = @key || ''
-        dialog.vbox.pack_start(hbox, false)
-        key_input.signal_connect(:activate) do
-          if parent.any? { |c| c.content == key_input.text }
-            toplevel.display_status('Key already exists in Hash!')
-            key_input.text = ''
-          else
-            toplevel.display_status('Key has been changed.')
-          end
-        end
-
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Type:"), false)
-        hbox.pack_start(type_input = ComboBox.new(true))
-        ALL_TYPES.each { |t| type_input.append_text(t) }
-        type_input.active = @type || 0
-        dialog.vbox.pack_start(hbox, false)
-
-        type_input.signal_connect(:changed) do
-          value_input.editable = false
-          case ALL_TYPES[type_input.active]
-          when 'Array', 'Hash'
-            value_input.text = ''
-          when 'TrueClass'
-            value_input.text = 'true'
-          when 'FalseClass'
-            value_input.text = 'false'
-          when 'NilClass'
-            value_input.text = 'null'
-          else
-            value_input.text = ''
-            value_input.editable = true
-          end
-        end
-
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Value:"), false)
-        hbox.pack_start(value_input = Entry.new)
-        value_input.width_chars = 60
-        value_input.text = @value || ''
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        self.focus = dialog
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            @key = key_input.text
-            type = ALL_TYPES[@type = type_input.active]
-            content = value_input.text
-            return @key, type, content
-          end
-        end
-        return
-      ensure
-        dialog.destroy
-      end
-
-      # Ask for an element to be appended _parent_.
-      def ask_for_element(parent = nil, default_type = nil, value_text = @content)
-        type_input = value_input = nil
-
-        dialog = Dialog.new(
-          "New element into #{parent ? parent.type : 'root'}",
-          nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Type:"), false)
-        hbox.pack_start(type_input = ComboBox.new(true))
-        default_active = 0
-        types = parent ? ALL_TYPES : CONTAINER_TYPES
-        types.each_with_index do |t, i|
-          type_input.append_text(t)
-          if t == default_type
-            default_active = i
-          end
-        end
-        type_input.active = default_active
-        dialog.vbox.pack_start(hbox, false)
-        type_input.signal_connect(:changed) do
-          configure_value(value_input, types[type_input.active])
-        end
-
-        hbox = HBox.new(false, 5)
-        hbox.pack_start(Label.new("Value:"), false)
-        hbox.pack_start(value_input = Entry.new)
-        value_input.width_chars = 60
-        value_input.text = value_text if value_text
-        configure_value(value_input, types[type_input.active])
-
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        self.focus = dialog
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            type = types[type_input.active]
-            @content = case type
-            when 'Numeric'
-              Integer(value_input.text) rescue Float(value_input.text) rescue 0
-            else
-              value_input.text
-            end.to_s
-            return type, @content
-          end
-        end
-        return
-      ensure
-        dialog.destroy if dialog
-      end
-
-      # Ask for an order criteria for sorting, using _x_ for the element in
-      # question. Returns the order criterium, and true/false for reverse
-      # sorting.
-      def ask_for_order
-        dialog = Dialog.new(
-          "Give an order criterium for 'x'.",
-          nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        hbox = HBox.new(false, 5)
-
-        hbox.pack_start(Label.new("Order:"), false)
-        hbox.pack_start(order_input = Entry.new)
-        order_input.text = @order || 'x'
-        order_input.width_chars = 60
-
-        hbox.pack_start(reverse_checkbox = CheckButton.new('Reverse'), false)
-
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        self.focus = dialog
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            return @order = order_input.text, reverse_checkbox.active?
-          end
-        end
-        return
-      ensure
-        dialog.destroy if dialog
-      end
-
-      # Ask for a find term to search for in the tree. Returns the term as a
-      # string.
-      def ask_for_find_term(search = nil)
-        dialog = Dialog.new(
-          "Find a node matching regex in tree.",
-          nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        hbox = HBox.new(false, 5)
-
-        hbox.pack_start(Label.new("Regex:"), false)
-        hbox.pack_start(regex_input = Entry.new)
-        hbox.pack_start(icase_checkbox = CheckButton.new('Icase'), false)
-        regex_input.width_chars = 60
-        if search
-          regex_input.text = search.source
-          icase_checkbox.active = search.casefold?
-        end
-
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        self.focus = dialog
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            begin
-              return Regexp.new(regex_input.text, icase_checkbox.active? ? Regexp::IGNORECASE : 0)
-            rescue => e
-              Editor.error_dialog(self, "Evaluation of regex /#{regex_input.text}/ failed: #{e}!")
-              return
-            end
-          end
-        end
-        return
-      ensure
-        dialog.destroy if dialog
-      end
-
-      # Expand or collapse row pointed to by _iter_ according
-      # to the #expanded attribute.
-      def expand_collapse(iter)
-        if expanded
-          expand_row(iter.path, true)
-        else
-          collapse_row(iter.path)
-        end
-      end
-    end
-
-    # The editor main window
-    class MainWindow < Gtk::Window
-      include Gtk
-
-      def initialize(encoding)
-        @changed  = false
-        @encoding = encoding
-        super(TOPLEVEL)
-        display_title
-        set_default_size(800, 600)
-        signal_connect(:delete_event) { quit }
-
-        vbox = VBox.new(false, 0)
-        add(vbox)
-        #vbox.border_width = 0
-
-        @treeview = JSONTreeView.new(self)
-        @treeview.signal_connect(:'cursor-changed') do
-          display_status('')
-        end
-
-        menu_bar = create_menu_bar
-        vbox.pack_start(menu_bar, false, false, 0)
-
-        sw = ScrolledWindow.new(nil, nil)
-        sw.shadow_type = SHADOW_ETCHED_IN
-        sw.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
-        vbox.pack_start(sw, true, true, 0)
-        sw.add(@treeview)
-
-        @status_bar = Statusbar.new
-        vbox.pack_start(@status_bar, false, false, 0)
-
-        @filename ||= nil
-        if @filename
-          data = read_data(@filename)
-          view_new_model Editor.data2model(data)
-        end
-
-        signal_connect(:button_release_event) do |_,event|
-          if event.button == 2
-            c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
-            if url = c.wait_for_text
-              location_open url
-            end
-            false
-          else
-            true
-          end
-        end
-      end
-
-      # Creates the menu bar with the pulldown menus and returns it.
-      def create_menu_bar
-        menu_bar = MenuBar.new
-        @file_menu = FileMenu.new(@treeview)
-        menu_bar.append @file_menu.create
-        @edit_menu = EditMenu.new(@treeview)
-        menu_bar.append @edit_menu.create
-        @options_menu = OptionsMenu.new(@treeview)
-        menu_bar.append @options_menu.create
-        menu_bar
-      end
-
-      # Sets editor status to changed, to indicate that the edited data
-      # containts unsaved changes.
-      def change
-        @changed = true
-        display_title
-      end
-
-      # Sets editor status to unchanged, to indicate that the edited data
-      # doesn't containt unsaved changes.
-      def unchange
-        @changed = false
-        display_title
-      end
-
-      # Puts a new model _model_ into the Gtk::TreeView to be edited.
-      def view_new_model(model)
-        @treeview.model     = model
-        @treeview.expanded  = true
-        @treeview.expand_all
-        unchange
-      end
-
-      # Displays _text_ in the status bar.
-      def display_status(text)
-        @cid ||= nil
-        @status_bar.pop(@cid) if @cid
-        @cid = @status_bar.get_context_id('dummy')
-        @status_bar.push(@cid, text)
-      end
-
-      # Opens a dialog, asking, if changes should be saved to a file.
-      def ask_save
-        if Editor.question_dialog(self,
-          "Unsaved changes to JSON model. Save?")
-          if @filename
-            file_save
-          else
-            file_save_as
-          end
-        end
-      end
-
-      # Quit this editor, that is, leave this editor's main loop.
-      def quit
-        ask_save if @changed
-        if Gtk.main_level > 0
-          destroy
-          Gtk.main_quit
-        end
-        nil
-      end
-
-      # Display the new title according to the editor's current state.
-      def display_title
-        title = TITLE.dup
-        title << ": #@filename" if @filename
-        title << " *" if @changed
-        self.title = title
-      end
-
-      # Clear the current model, after asking to save all unsaved changes.
-      def clear
-        ask_save if @changed
-        @filename = nil
-        self.view_new_model nil
-      end
-
-      def check_pretty_printed(json)
-        pretty = !!((nl_index = json.index("\n")) && nl_index != json.size - 1)
-        @options_menu.pretty_item.active = pretty
-      end
-      private :check_pretty_printed
-
-      # Open the data at the location _uri_, if given. Otherwise open a dialog
-      # to ask for the _uri_.
-      def location_open(uri = nil)
-        uri = ask_for_location unless uri
-        uri or return
-        ask_save if @changed
-        data = load_location(uri) or return
-        view_new_model Editor.data2model(data)
-      end
-
-      # Open the file _filename_ or call the #select_file method to ask for a
-      # filename.
-      def file_open(filename = nil)
-        filename = select_file('Open as a JSON file') unless filename
-        data = load_file(filename) or return
-        view_new_model Editor.data2model(data)
-      end
-
-      # Edit the string _json_ in the editor.
-      def edit(json)
-        if json.respond_to? :read
-          json = json.read
-        end
-        data = parse_json json
-        view_new_model Editor.data2model(data)
-      end
-
-      # Save the current file.
-      def file_save
-        if @filename
-          store_file(@filename)
-        else
-          file_save_as
-        end
-      end
-
-      # Save the current file as the filename 
-      def file_save_as
-        filename = select_file('Save as a JSON file')
-        store_file(filename)
-      end
-
-      # Store the current JSON document to _path_.
-      def store_file(path)
-        if path
-          data = Editor.model2data(@treeview.model.iter_first)
-          File.open(path + '.tmp', 'wb') do |output|
-            data or break
-            if @options_menu.pretty_item.active?
-              output.puts JSON.pretty_generate(data, :max_nesting => false)
-            else
-              output.write JSON.generate(data, :max_nesting => false)
-            end
-          end
-          File.rename path + '.tmp', path
-          @filename = path
-          toplevel.display_status("Saved data to '#@filename'.")
-          unchange
-        end
-      rescue SystemCallError => e
-        Editor.error_dialog(self, "Failed to store JSON file: #{e}!")
-      end
-  
-      # Load the file named _filename_ into the editor as a JSON document.
-      def load_file(filename)
-        if filename
-          if File.directory?(filename)
-            Editor.error_dialog(self, "Try to select a JSON file!")
-            nil
-          else
-            @filename = filename
-            if data = read_data(filename)
-              toplevel.display_status("Loaded data from '#@filename'.")
-            end
-            display_title
-            data
-          end
-        end
-      end
-
-      # Load the data at location _uri_ into the editor as a JSON document.
-      def load_location(uri)
-        data = read_data(uri) or return
-        @filename = nil
-        toplevel.display_status("Loaded data from '#{uri}'.")
-        display_title
-        data
-      end
-
-      def parse_json(json)
-        check_pretty_printed(json)
-        if @encoding && !/^utf8$/i.match(@encoding)
-          iconverter = Iconv.new('utf8', @encoding)
-          json = iconverter.iconv(json)
-        end
-        JSON::parse(json, :max_nesting => false, :create_additions => false)
-      end
-      private :parse_json
-
-      # Read a JSON document from the file named _filename_, parse it into a
-      # ruby data structure, and return the data.
-      def read_data(filename)
-        open(filename) do |f|
-          json = f.read
-          return parse_json(json)
-        end
-      rescue => e
-        Editor.error_dialog(self, "Failed to parse JSON file: #{e}!")
-        return
-      end
-
-      # Open a file selecton dialog, displaying _message_, and return the
-      # selected filename or nil, if no file was selected.
-      def select_file(message)
-        filename = nil
-        fs = FileSelection.new(message)
-        fs.set_modal(true)
-        @default_dir = File.join(Dir.pwd, '') unless @default_dir
-        fs.set_filename(@default_dir)
-        fs.set_transient_for(self)
-        fs.signal_connect(:destroy) { Gtk.main_quit }
-        fs.ok_button.signal_connect(:clicked) do
-          filename = fs.filename
-          @default_dir = File.join(File.dirname(filename), '')
-          fs.destroy
-          Gtk.main_quit
-        end
-        fs.cancel_button.signal_connect(:clicked) do
-          fs.destroy
-          Gtk.main_quit
-        end
-        fs.show_all
-        Gtk.main
-        filename
-      end
-
-      # Ask for location URI a to load data from. Returns the URI as a string.
-      def ask_for_location
-        dialog = Dialog.new(
-          "Load data from location...",
-          nil, nil,
-          [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
-          [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
-        )
-        hbox = HBox.new(false, 5)
-
-        hbox.pack_start(Label.new("Location:"), false)
-        hbox.pack_start(location_input = Entry.new)
-        location_input.width_chars = 60
-        location_input.text = @location || ''
-
-        dialog.vbox.pack_start(hbox, false)
-
-        dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
-        dialog.show_all
-        dialog.run do |response| 
-          if response == Dialog::RESPONSE_ACCEPT
-            return @location = location_input.text
-          end
-        end
-        return
-      ensure
-        dialog.destroy if dialog
-      end
-    end
-
-    class << self
-      # Starts a JSON Editor. If a block was given, it yields
-      # to the JSON::Editor::MainWindow instance.
-      def start(encoding = 'utf8') # :yield: window
-        Gtk.init
-        @window = Editor::MainWindow.new(encoding)
-        @window.icon_list = [ Editor.fetch_icon('json') ]
-        yield @window if block_given?
-        @window.show_all
-        Gtk.main
-      end
-
-      # Edit the string _json_ with encoding _encoding_ in the editor.
-      def edit(json, encoding = 'utf8')
-        start(encoding) do |window|
-          window.edit json
-        end
-      end
-
-      attr_reader :window
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/ext.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/ext.rb
deleted file mode 100644
index ff4fa42..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/ext.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'json/common'
-
-module JSON
-  # This module holds all the modules/classes that implement JSON's
-  # functionality as C extensions.
-  module Ext
-    require 'json/ext/parser'
-    require 'json/ext/generator'
-    $DEBUG and warn "Using c extension for JSON."
-    JSON.parser = Parser
-    JSON.generator = Generator
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/json.xpm b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/json.xpm
deleted file mode 100644
index 2cb626b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/json.xpm
+++ /dev/null
@@ -1,1499 +0,0 @@
-/* XPM */
-static char * json_xpm[] = {
-"64 64 1432 2",
-"  	c None",
-". 	c #641839",
-"+ 	c #CF163C",
-"@ 	c #D31C3B",
-"# 	c #E11A38",
-"$ 	c #5F242D",
-"% 	c #320C22",
-"& 	c #9B532D",
-"* 	c #F32E34",
-"= 	c #820F33",
-"- 	c #4B0F34",
-"; 	c #8E1237",
-"> 	c #944029",
-", 	c #961325",
-"' 	c #A00C24",
-") 	c #872C23",
-"! 	c #694021",
-"~ 	c #590D1F",
-"{ 	c #420528",
-"] 	c #D85A2D",
-"^ 	c #7E092B",
-"/ 	c #0E0925",
-"( 	c #0D081F",
-"_ 	c #0F081E",
-": 	c #12071F",
-"< 	c #360620",
-"[ 	c #682A21",
-"} 	c #673F21",
-"| 	c #780E21",
-"1 	c #A82320",
-"2 	c #8D1D1F",
-"3 	c #970127",
-"4 	c #0D0123",
-"5 	c #0D0324",
-"6 	c #3B1E28",
-"7 	c #C28429",
-"8 	c #0C0523",
-"9 	c #0C041E",
-"0 	c #0E031A",
-"a 	c #11031A",
-"b 	c #13031B",
-"c 	c #13031C",
-"d 	c #11031D",
-"e 	c #19051E",
-"f 	c #390E20",
-"g 	c #9C0C20",
-"h 	c #C00721",
-"i 	c #980320",
-"j 	c #14031E",
-"k 	c #CD9F32",
-"l 	c #C29F2E",
-"m 	c #0F0325",
-"n 	c #0D0321",
-"o 	c #0E0324",
-"p 	c #D08329",
-"q 	c #9D1B27",
-"r 	c #1C0320",
-"s 	c #0D011A",
-"t 	c #120117",
-"u 	c #130017",
-"v 	c #150018",
-"w 	c #160119",
-"x 	c #17021A",
-"y 	c #15021B",
-"z 	c #11021E",
-"A 	c #0F021F",
-"B 	c #8C1821",
-"C 	c #CF4522",
-"D 	c #831821",
-"E 	c #BA7033",
-"F 	c #EDB339",
-"G 	c #C89733",
-"H 	c #280727",
-"I 	c #0F051F",
-"J 	c #0E0420",
-"K 	c #591F27",
-"L 	c #E47129",
-"M 	c #612224",
-"N 	c #0C021D",
-"O 	c #120018",
-"P 	c #140017",
-"Q 	c #170017",
-"R 	c #190018",
-"S 	c #1B0019",
-"T 	c #1B011A",
-"U 	c #18011B",
-"V 	c #15011C",
-"W 	c #12031E",
-"X 	c #460A21",
-"Y 	c #A13823",
-"Z 	c #784323",
-"` 	c #5A0C21",
-" .	c #BC4530",
-"..	c #EB5B38",
-"+.	c #CE4E3B",
-"@.	c #DD9334",
-"#.	c #751A27",
-"$.	c #11071E",
-"%.	c #0F041C",
-"&.	c #1E0824",
-"*.	c #955A28",
-"=.	c #9A5027",
-"-.	c #1E0321",
-";.	c #11011A",
-">.	c #140018",
-",.	c #180018",
-"'.	c #1F001A",
-").	c #20001B",
-"!.	c #1E001A",
-"~.	c #1B001A",
-"{.	c #16021B",
-"].	c #16041E",
-"^.	c #220622",
-"/.	c #5F3525",
-"(.	c #DE5724",
-"_.	c #611021",
-":.	c #0F0925",
-"<.	c #D1892E",
-"[.	c #F27036",
-"}.	c #EC633B",
-"|.	c #DA293C",
-"1.	c #E64833",
-"2.	c #912226",
-"3.	c #11081C",
-"4.	c #110419",
-"5.	c #0F041E",
-"6.	c #451425",
-"7.	c #BF6F28",
-"8.	c #332225",
-"9.	c #0E021E",
-"0.	c #13001B",
-"a.	c #17001A",
-"b.	c #1C001B",
-"c.	c #21001C",
-"d.	c #23001C",
-"e.	c #21001B",
-"f.	c #19021A",
-"g.	c #17041E",
-"h.	c #150721",
-"i.	c #602424",
-"j.	c #D51223",
-"k.	c #540820",
-"l.	c #D04D2D",
-"m.	c #EA8933",
-"n.	c #875637",
-"o.	c #88543A",
-"p.	c #E5923A",
-"q.	c #891931",
-"r.	c #130B25",
-"s.	c #10051B",
-"t.	c #110217",
-"u.	c #12021A",
-"v.	c #761826",
-"w.	c #E2A728",
-"x.	c #300224",
-"y.	c #10011E",
-"z.	c #16001B",
-"A.	c #1B001B",
-"B.	c #21001A",
-"C.	c #1E0019",
-"D.	c #1D0019",
-"E.	c #1A011A",
-"F.	c #17031C",
-"G.	c #120720",
-"H.	c #4E0822",
-"I.	c #670721",
-"J.	c #C07630",
-"K.	c #F59734",
-"L.	c #BE1B35",
-"M.	c #0E1435",
-"N.	c #522037",
-"O.	c #DB8039",
-"P.	c #D45933",
-"Q.	c #420927",
-"R.	c #0F041D",
-"S.	c #140118",
-"T.	c #13021D",
-"U.	c #100423",
-"V.	c #7B6227",
-"W.	c #C04326",
-"X.	c #0E0020",
-"Y.	c #13001D",
-"Z.	c #18001B",
-"`.	c #1E001B",
-" +	c #22001C",
-".+	c #22001B",
-"++	c #1B011B",
-"@+	c #16041D",
-"#+	c #130520",
-"$+	c #860521",
-"%+	c #710520",
-"&+	c #670A2A",
-"*+	c #A66431",
-"=+	c #E97536",
-"-+	c #F8833A",
-";+	c #F77A3A",
-">+	c #C45337",
-",+	c #0A1C35",
-"'+	c #993638",
-")+	c #F7863B",
-"!+	c #F49736",
-"~+	c #94462B",
-"{+	c #0E031F",
-"]+	c #130119",
-"^+	c #160018",
-"/+	c #16011B",
-"(+	c #15021F",
-"_+	c #120123",
-":+	c #A65C28",
-"<+	c #5C4D23",
-"[+	c #0F001F",
-"}+	c #14001D",
-"|+	c #1A001B",
-"1+	c #1F001B",
-"2+	c #24001D",
-"3+	c #25001D",
-"4+	c #24001C",
-"5+	c #1F001C",
-"6+	c #1A011C",
-"7+	c #16021E",
-"8+	c #3F0421",
-"9+	c #BC0522",
-"0+	c #1C041E",
-"a+	c #7F5531",
-"b+	c #E68A38",
-"c+	c #F8933E",
-"d+	c #FA7942",
-"e+	c #FB7543",
-"f+	c #FA6F41",
-"g+	c #F1793D",
-"h+	c #7D3B3A",
-"i+	c #28263B",
-"j+	c #D45441",
-"k+	c #F8A238",
-"l+	c #996B2D",
-"m+	c #0E0421",
-"n+	c #12011A",
-"o+	c #180019",
-"p+	c #17001C",
-"q+	c #12001F",
-"r+	c #4C2B2A",
-"s+	c #DB8130",
-"t+	c #540023",
-"u+	c #0F0120",
-"v+	c #16011C",
-"w+	c #22001D",
-"x+	c #25001F",
-"y+	c #26001F",
-"z+	c #25001E",
-"A+	c #24001E",
-"B+	c #1D001C",
-"C+	c #18011D",
-"D+	c #16031F",
-"E+	c #3C0522",
-"F+	c #9B0821",
-"G+	c #13041E",
-"H+	c #F6462E",
-"I+	c #E6AB37",
-"J+	c #E7A03E",
-"K+	c #FA9F44",
-"L+	c #FB8A48",
-"M+	c #FD7A4A",
-"N+	c #FD794A",
-"O+	c #FD7748",
-"P+	c #FD7E45",
-"Q+	c #FD8343",
-"R+	c #FB5D42",
-"S+	c #6E3A40",
-"T+	c #EE8A37",
-"U+	c #7E252B",
-"V+	c #100520",
-"W+	c #13011A",
-"X+	c #170019",
-"Y+	c #15001C",
-"Z+	c #0F0020",
-"`+	c #564427",
-" @	c #E0BA29",
-".@	c #5E2B25",
-"+@	c #10011F",
-"@@	c #17011C",
-"#@	c #1E001D",
-"$@	c #23001F",
-"%@	c #250020",
-"&@	c #24001F",
-"*@	c #23001E",
-"=@	c #21001E",
-"-@	c #1B001C",
-";@	c #17021D",
-">@	c #14041E",
-",@	c #AC0B25",
-"'@	c #5E1420",
-")@	c #F28635",
-"!@	c #C2733E",
-"~@	c #984C44",
-"{@	c #EA9148",
-"]@	c #FB844B",
-"^@	c #FD7E4C",
-"/@	c #FE7E4C",
-"(@	c #FE7E4B",
-"_@	c #FE7749",
-":@	c #FD7148",
-"<@	c #FB7D46",
-"[@	c #F89641",
-"}@	c #B95634",
-"|@	c #0D0927",
-"1@	c #11041D",
-"2@	c #150119",
-"3@	c #180017",
-"4@	c #16001A",
-"5@	c #13001E",
-"6@	c #110023",
-"7@	c #944C29",
-"8@	c #EE6229",
-"9@	c #3D0324",
-"0@	c #12021F",
-"a@	c #19011D",
-"b@	c #21001F",
-"c@	c #22001F",
-"d@	c #20001E",
-"e@	c #1F001D",
-"f@	c #1C001C",
-"g@	c #19011C",
-"h@	c #3D1621",
-"i@	c #B53622",
-"j@	c #31061F",
-"k@	c #841D34",
-"l@	c #F2703F",
-"m@	c #C14445",
-"n@	c #E67349",
-"o@	c #FB8E4B",
-"p@	c #FD834C",
-"q@	c #FE834D",
-"r@	c #FE834C",
-"s@	c #FE804C",
-"t@	c #FD814B",
-"u@	c #FB7D49",
-"v@	c #F79B43",
-"w@	c #AF1234",
-"x@	c #0D0625",
-"y@	c #13021C",
-"z@	c #1A0019",
-"A@	c #190019",
-"B@	c #410225",
-"C@	c #D39729",
-"D@	c #AA5927",
-"E@	c #0E0422",
-"F@	c #15021E",
-"G@	c #1A011D",
-"H@	c #1D001D",
-"I@	c #15031D",
-"J@	c #240820",
-"K@	c #A01023",
-"L@	c #670B21",
-"M@	c #3D0D33",
-"N@	c #E63C3E",
-"O@	c #EF7C45",
-"P@	c #F59048",
-"Q@	c #FB944A",
-"R@	c #FD904A",
-"S@	c #FE8E4B",
-"T@	c #FE854A",
-"U@	c #FE854B",
-"V@	c #FE884C",
-"W@	c #FC954B",
-"X@	c #F8AB45",
-"Y@	c #C37A35",
-"Z@	c #0D0425",
-"`@	c #13011B",
-" #	c #170018",
-".#	c #1A0018",
-"+#	c #1C0019",
-"@#	c #15001B",
-"##	c #100120",
-"$#	c #311F25",
-"%#	c #E68E28",
-"&#	c #7A1425",
-"*#	c #130321",
-"=#	c #17011E",
-"-#	c #1A001D",
-";#	c #19001B",
-">#	c #16021C",
-",#	c #130521",
-"'#	c #6F3123",
-")#	c #6D3022",
-"!#	c #C89433",
-"~#	c #EA7E3E",
-"{#	c #DB2943",
-"]#	c #EF7745",
-"^#	c #FB8544",
-"/#	c #FD9A43",
-"(#	c #FE9941",
-"_#	c #FE9D43",
-":#	c #FEA548",
-"<#	c #FEAE49",
-"[#	c #FCB944",
-"}#	c #CA9F35",
-"|#	c #0E0225",
-"1#	c #11001B",
-"2#	c #160019",
-"3#	c #12011B",
-"4#	c #0F0220",
-"5#	c #351D26",
-"6#	c #D85B28",
-"7#	c #6C0F26",
-"8#	c #190121",
-"9#	c #1B001E",
-"0#	c #1A001C",
-"a#	c #1D001B",
-"b#	c #130220",
-"c#	c #703A23",
-"d#	c #713A23",
-"e#	c #140327",
-"f#	c #411B36",
-"g#	c #C8713E",
-"h#	c #7A3A3F",
-"i#	c #CE2C3C",
-"j#	c #E77338",
-"k#	c #9C6535",
-"l#	c #9C6233",
-"m#	c #9C6332",
-"n#	c #9C6A35",
-"o#	c #C37D3C",
-"p#	c #FEAC41",
-"q#	c #FEC23E",
-"r#	c #826330",
-"s#	c #100122",
-"t#	c #120019",
-"u#	c #150017",
-"v#	c #190017",
-"w#	c #1B0018",
-"x#	c #12001A",
-"y#	c #10021F",
-"z#	c #1A0326",
-"A#	c #5F292A",
-"B#	c #7B4E29",
-"C#	c #3C0E25",
-"D#	c #1A0020",
-"E#	c #14021F",
-"F#	c #723B23",
-"G#	c #14001A",
-"H#	c #58042A",
-"I#	c #A28337",
-"J#	c #C8813B",
-"K#	c #B14B38",
-"L#	c #761231",
-"M#	c #5A132A",
-"N#	c #0D0726",
-"O#	c #0C0623",
-"P#	c #0B0723",
-"Q#	c #0B0A26",
-"R#	c #321C2D",
-"S#	c #C45B33",
-"T#	c #FEBB33",
-"U#	c #13052A",
-"V#	c #13011F",
-"W#	c #160017",
-"X#	c #15001A",
-"Y#	c #12001D",
-"Z#	c #94062A",
-"`#	c #630D2C",
-" $	c #85292B",
-".$	c #AA5E29",
-"+$	c #1F0123",
-"@$	c #19011F",
-"#$	c #1E001C",
-"$$	c #15031F",
-"%$	c #712122",
-"&$	c #712223",
-"*$	c #14011B",
-"=$	c #110321",
-"-$	c #AF0C2B",
-";$	c #E7D534",
-">$	c #EAC934",
-",$	c #84582D",
-"'$	c #1B0824",
-")$	c #11041E",
-"!$	c #10021B",
-"~$	c #100119",
-"{$	c #100218",
-"]$	c #0F041A",
-"^$	c #0E0720",
-"/$	c #2C1026",
-"($	c #D8A328",
-"_$	c #140322",
-":$	c #160016",
-"<$	c #14001F",
-"[$	c #120024",
-"}$	c #100128",
-"|$	c #3C032F",
-"1$	c #2C062E",
-"2$	c #29022B",
-"3$	c #A31D29",
-"4$	c #976A25",
-"5$	c #1A0321",
-"6$	c #17031E",
-"7$	c #1B021D",
-"8$	c #20001C",
-"9$	c #14041F",
-"0$	c #703422",
-"a$	c #6F3522",
-"b$	c #8D0328",
-"c$	c #920329",
-"d$	c #0F0326",
-"e$	c #100321",
-"f$	c #11021B",
-"g$	c #130117",
-"h$	c #140016",
-"i$	c #150015",
-"j$	c #140015",
-"k$	c #130116",
-"l$	c #120219",
-"m$	c #11031C",
-"n$	c #12031D",
-"o$	c #170016",
-"p$	c #160020",
-"q$	c #250029",
-"r$	c #670033",
-"s$	c #DCA238",
-"t$	c #F5C736",
-"u$	c #9A732E",
-"v$	c #110227",
-"w$	c #110324",
-"x$	c #811924",
-"y$	c #A04323",
-"z$	c #250721",
-"A$	c #1A041F",
-"B$	c #1E011D",
-"C$	c #1C011C",
-"D$	c #18031D",
-"E$	c #130721",
-"F$	c #6F3623",
-"G$	c #6B3622",
-"H$	c #1A001A",
-"I$	c #14011F",
-"J$	c #12011E",
-"K$	c #11011C",
-"L$	c #140117",
-"M$	c #170015",
-"N$	c #150016",
-"O$	c #120119",
-"P$	c #11011B",
-"Q$	c #11001A",
-"R$	c #130018",
-"S$	c #170118",
-"T$	c #170119",
-"U$	c #18021E",
-"V$	c #1A0126",
-"W$	c #6F2332",
-"X$	c #E5563B",
-"Y$	c #F1B83F",
-"Z$	c #F6CC38",
-"`$	c #9D7A2D",
-" %	c #130123",
-".%	c #130320",
-"+%	c #2A0721",
-"@%	c #B00E24",
-"#%	c #7D0B23",
-"$%	c #1F0522",
-"%%	c #1E0220",
-"&%	c #1D011E",
-"*%	c #1A031E",
-"=%	c #15051F",
-"-%	c #241322",
-";%	c #A32F23",
-">%	c #670E21",
-",%	c #1C001A",
-"'%	c #19001A",
-")%	c #180016",
-"!%	c #160118",
-"~%	c #140219",
-"{%	c #11021C",
-"]%	c #10021E",
-"^%	c #0F011D",
-"/%	c #170117",
-"(%	c #160219",
-"_%	c #17041D",
-":%	c #190523",
-"<%	c #8C042E",
-"[%	c #B65838",
-"}%	c #E9D73F",
-"|%	c #EED43E",
-"1%	c #D85538",
-"2%	c #493129",
-"3%	c #130120",
-"4%	c #15021D",
-"5%	c #330822",
-"6%	c #8A0825",
-"7%	c #3C0424",
-"8%	c #1E0322",
-"9%	c #1C0321",
-"0%	c #180421",
-"a%	c #130822",
-"b%	c #AF2D24",
-"c%	c #BC5623",
-"d%	c #2F071F",
-"e%	c #1A041C",
-"f%	c #1C031C",
-"g%	c #1D011C",
-"h%	c #160117",
-"i%	c #150419",
-"j%	c #12081D",
-"k%	c #0F0923",
-"l%	c #A77027",
-"m%	c #A60525",
-"n%	c #11021A",
-"o%	c #130218",
-"p%	c #150319",
-"q%	c #16061D",
-"r%	c #180923",
-"s%	c #9C1D2B",
-"t%	c #A32636",
-"u%	c #A66E3B",
-"v%	c #4B2E3C",
-"w%	c #412C36",
-"x%	c #36012D",
-"y%	c #140123",
-"z%	c #17001E",
-"A%	c #19011B",
-"B%	c #1A0421",
-"C%	c #340425",
-"D%	c #9E0326",
-"E%	c #1F0424",
-"F%	c #1C0524",
-"G%	c #180724",
-"H%	c #A91024",
-"I%	c #D55D24",
-"J%	c #90071E",
-"K%	c #3C051D",
-"L%	c #1C021C",
-"M%	c #1C011A",
-"N%	c #1D001A",
-"O%	c #160116",
-"P%	c #150216",
-"Q%	c #140217",
-"R%	c #140618",
-"S%	c #120D1D",
-"T%	c #231925",
-"U%	c #B16A2E",
-"V%	c #FDAC34",
-"W%	c #D58631",
-"X%	c #280E2A",
-"Y%	c #0D0A23",
-"Z%	c #0F0920",
-"`%	c #120C21",
-" &	c #1F1026",
-".&	c #A3352E",
-"+&	c #EE9F36",
-"@&	c #5D2A3C",
-"#&	c #960D3C",
-"$&	c #970638",
-"%&	c #A00330",
-"&&	c #4D0126",
-"*&	c #1C001F",
-"=&	c #280120",
-"-&	c #290223",
-";&	c #1F0425",
-">&	c #260726",
-",&	c #340A26",
-"'&	c #850925",
-")&	c #3A0823",
-"!&	c #82071D",
-"~&	c #5E071D",
-"{&	c #18051C",
-"]&	c #18021A",
-"^&	c #190118",
-"/&	c #160217",
-"(&	c #150418",
-"_&	c #130618",
-":&	c #110718",
-"<&	c #10081A",
-"[&	c #110D1D",
-"}&	c #291C24",
-"|&	c #A73B2D",
-"1&	c #FD6B36",
-"2&	c #FD853C",
-"3&	c #FD863B",
-"4&	c #C24A35",
-"5&	c #6B442F",
-"6&	c #6D302D",
-"7&	c #6E252E",
-"8&	c #8E3B32",
-"9&	c #DE7739",
-"0&	c #F48E3F",
-"a&	c #DD8D41",
-"b&	c #854F3D",
-"c&	c #7E2D35",
-"d&	c #33082B",
-"e&	c #1C0222",
-"f&	c #20001F",
-"g&	c #1F0222",
-"h&	c #1A0524",
-"i&	c #440C27",
-"j&	c #BC1427",
-"k&	c #20041B",
-"l&	c #53061C",
-"m&	c #25071B",
-"n&	c #11061A",
-"o&	c #130418",
-"p&	c #140317",
-"q&	c #150217",
-"r&	c #160318",
-"s&	c #12051B",
-"t&	c #100C1D",
-"u&	c #0E101E",
-"v&	c #0C121F",
-"w&	c #0C1321",
-"x&	c #781725",
-"y&	c #B25D2C",
-"z&	c #FA6335",
-"A&	c #FD633C",
-"B&	c #FE6D42",
-"C&	c #FE7C42",
-"D&	c #FE813F",
-"E&	c #FE873C",
-"F&	c #FD743B",
-"G&	c #FB683B",
-"H&	c #FA7A3E",
-"I&	c #F98242",
-"J&	c #F97844",
-"K&	c #F98943",
-"L&	c #F79C3D",
-"M&	c #A25133",
-"N&	c #280B28",
-"O&	c #1D021F",
-"P&	c #1F011C",
-"Q&	c #280321",
-"R&	c #1C0724",
-"S&	c #3F1C27",
-"T&	c #D33C27",
-"U&	c #0E061B",
-"V&	c #0C091C",
-"W&	c #0C0A1B",
-"X&	c #0E091A",
-"Y&	c #11081B",
-"Z&	c #100A20",
-"`&	c #0E0D23",
-" *	c #551227",
-".*	c #B21829",
-"+*	c #C42329",
-"@*	c #C62C29",
-"#*	c #C55429",
-"$*	c #E76F2B",
-"%*	c #F14232",
-"&*	c #F95E3A",
-"**	c #FC6740",
-"=*	c #FE6E45",
-"-*	c #FE7246",
-";*	c #FE7545",
-">*	c #FE7744",
-",*	c #FD7745",
-"'*	c #FD7845",
-")*	c #FD7847",
-"!*	c #FD7948",
-"~*	c #FD7B44",
-"{*	c #FC7C3B",
-"]*	c #6F3130",
-"^*	c #140B24",
-"/*	c #19031D",
-"(*	c #1C011B",
-"_*	c #5A011F",
-":*	c #B70421",
-"<*	c #380824",
-"[*	c #3E2626",
-"}*	c #9F5626",
-"|*	c #13051E",
-"1*	c #360A21",
-"2*	c #361223",
-"3*	c #371724",
-"4*	c #381824",
-"5*	c #3B1524",
-"6*	c #3E1E26",
-"7*	c #471A29",
-"8*	c #DB252E",
-"9*	c #ED2733",
-"0*	c #EE5436",
-"a*	c #F04237",
-"b*	c #F33934",
-"c*	c #F53D2F",
-"d*	c #D7312B",
-"e*	c #AF212B",
-"f*	c #3A2C31",
-"g*	c #F65F39",
-"h*	c #FB6F41",
-"i*	c #FD6D45",
-"j*	c #FE7047",
-"k*	c #FE7647",
-"l*	c #FE7847",
-"m*	c #FE7848",
-"n*	c #FE7748",
-"o*	c #FE7948",
-"p*	c #FE7C48",
-"q*	c #FE7C47",
-"r*	c #FE7642",
-"s*	c #FE7439",
-"t*	c #6D332C",
-"u*	c #100B21",
-"v*	c #16031B",
-"w*	c #2B001B",
-"x*	c #22011F",
-"y*	c #220521",
-"z*	c #1B0A23",
-"A*	c #421425",
-"B*	c #951924",
-"C*	c #381023",
-"D*	c #E94028",
-"E*	c #E7302B",
-"F*	c #EF432D",
-"G*	c #F4302E",
-"H*	c #F32C30",
-"I*	c #CB4432",
-"J*	c #DD3235",
-"K*	c #EF4B3A",
-"L*	c #F0333E",
-"M*	c #CC3D3F",
-"N*	c #E4313C",
-"O*	c #F34834",
-"P*	c #D13E2C",
-"Q*	c #431825",
-"R*	c #0E1424",
-"S*	c #3C202C",
-"T*	c #F15537",
-"U*	c #F97140",
-"V*	c #FC6E45",
-"W*	c #FE7547",
-"X*	c #FE7947",
-"Y*	c #FE7B48",
-"Z*	c #FE7D48",
-"`*	c #FE8047",
-" =	c #FE7A42",
-".=	c #FE7A38",
-"+=	c #6D442B",
-"@=	c #0F0B21",
-"#=	c #15031A",
-"$=	c #49001B",
-"%=	c #2F001C",
-"&=	c #21021E",
-"*=	c #220620",
-"==	c #1B0D23",
-"-=	c #641625",
-";=	c #951823",
-">=	c #390F25",
-",=	c #AC3A2A",
-"'=	c #B6492E",
-")=	c #ED7531",
-"!=	c #F45A34",
-"~=	c #F54C36",
-"{=	c #C72D39",
-"]=	c #DE283C",
-"^=	c #F33B40",
-"/=	c #F34142",
-"(=	c #D0393F",
-"_=	c #E72E39",
-":=	c #DB3C2E",
-"<=	c #461724",
-"[=	c #0F0D1E",
-"}=	c #140B1E",
-"|=	c #341427",
-"1=	c #CB4834",
-"2=	c #F7743F",
-"3=	c #FB7145",
-"4=	c #FE7747",
-"5=	c #FE7A47",
-"6=	c #FF7B48",
-"7=	c #FF7C48",
-"8=	c #FE7F47",
-"9=	c #FE8247",
-"0=	c #FE8642",
-"a=	c #FE8439",
-"b=	c #6D442D",
-"c=	c #0F0A21",
-"d=	c #14031A",
-"e=	c #20031D",
-"f=	c #210821",
-"g=	c #191024",
-"h=	c #CC1C25",
-"i=	c #961423",
-"j=	c #2C162C",
-"k=	c #BD242E",
-"l=	c #EF2C31",
-"m=	c #F54C34",
-"n=	c #F34037",
-"o=	c #F5353A",
-"p=	c #F7413D",
-"q=	c #F8423D",
-"r=	c #F93A39",
-"s=	c #F95731",
-"t=	c #341425",
-"u=	c #110A1D",
-"v=	c #140619",
-"w=	c #18051B",
-"x=	c #200F26",
-"y=	c #864833",
-"z=	c #F8773F",
-"A=	c #FC7445",
-"B=	c #FF7E48",
-"C=	c #FF7E49",
-"D=	c #FF7D49",
-"E=	c #FF7D48",
-"F=	c #FE8347",
-"G=	c #FE8743",
-"H=	c #FE893B",
-"I=	c #6E452F",
-"J=	c #100E23",
-"K=	c #14041A",
-"L=	c #55041D",
-"M=	c #540921",
-"N=	c #161124",
-"O=	c #CE6A25",
-"P=	c #3F1129",
-"Q=	c #170A29",
-"R=	c #0F0F29",
-"S=	c #15132B",
-"T=	c #1E182D",
-"U=	c #A82B3D",
-"V=	c #CB6633",
-"W=	c #CC6932",
-"X=	c #CC3D2D",
-"Y=	c #331225",
-"Z=	c #0F091C",
-"`=	c #120417",
-" -	c #160216",
-".-	c #190419",
-"+-	c #210F26",
-"@-	c #8C4934",
-"#-	c #F97A40",
-"$-	c #FC7545",
-"%-	c #FF7B49",
-"&-	c #FE7D46",
-"*-	c #FE7E43",
-"=-	c #FD7B3E",
-"--	c #FA6934",
-";-	c #532328",
-">-	c #130B1D",
-",-	c #150519",
-"'-	c #14041C",
-")-	c #120920",
-"!-	c #C43624",
-"~-	c #A21E23",
-"{-	c #F87C30",
-"]-	c #C9302D",
-"^-	c #300F2A",
-"/-	c #591129",
-"(-	c #171328",
-"_-	c #171628",
-":-	c #141829",
-"<-	c #101A2B",
-"[-	c #0F172B",
-"}-	c #0F1226",
-"|-	c #0E0C20",
-"1-	c #100619",
-"2-	c #140316",
-"3-	c #19051B",
-"4-	c #3C1428",
-"5-	c #E04B36",
-"6-	c #FA7B41",
-"7-	c #FD7346",
-"8-	c #FE7548",
-"9-	c #FF7849",
-"0-	c #FF7749",
-"a-	c #FE7B47",
-"b-	c #FE7945",
-"c-	c #FC7740",
-"d-	c #FA7E39",
-"e-	c #C1432F",
-"f-	c #131523",
-"g-	c #130A1C",
-"h-	c #420621",
-"i-	c #D08423",
-"j-	c #F87739",
-"k-	c #C03D37",
-"l-	c #962B34",
-"m-	c #A14332",
-"n-	c #E54B30",
-"o-	c #9E3E2F",
-"p-	c #7F262E",
-"q-	c #922D2E",
-"r-	c #9C4B2E",
-"s-	c #65212C",
-"t-	c #101628",
-"u-	c #101022",
-"v-	c #11091C",
-"w-	c #130619",
-"x-	c #160A1E",
-"y-	c #43252C",
-"z-	c #F66439",
-"A-	c #FA6942",
-"B-	c #FD6C47",
-"C-	c #FE6E48",
-"D-	c #FE6F48",
-"E-	c #FE7049",
-"F-	c #FE714A",
-"G-	c #FE744A",
-"H-	c #FE7846",
-"I-	c #FD7243",
-"J-	c #FC703E",
-"K-	c #FA6C37",
-"L-	c #81312B",
-"M-	c #121123",
-"N-	c #15071D",
-"O-	c #16031A",
-"P-	c #17021B",
-"Q-	c #8F3D22",
-"R-	c #F8393E",
-"S-	c #E42A3D",
-"T-	c #E7473B",
-"U-	c #FB503B",
-"V-	c #FB4F3A",
-"W-	c #F95439",
-"X-	c #ED4C38",
-"Y-	c #F45938",
-"Z-	c #FB6537",
-"`-	c #EA5236",
-" ;	c #CE6232",
-".;	c #CD392C",
-"+;	c #181425",
-"@;	c #120F21",
-"#;	c #130D20",
-"$;	c #151225",
-"%;	c #903431",
-"&;	c #F8703D",
-"*;	c #FB6344",
-"=;	c #FD6748",
-"-;	c #FE6849",
-";;	c #FE6949",
-">;	c #FE6A49",
-",;	c #FE6C4A",
-"';	c #FE704A",
-");	c #FE734A",
-"!;	c #FE7449",
-"~;	c #FE7347",
-"{;	c #FE7145",
-"];	c #FD6C42",
-"^;	c #FD753D",
-"/;	c #F36E35",
-"(;	c #CB452C",
-"_;	c #600D24",
-":;	c #1C061F",
-"<;	c #1E031F",
-"[;	c #5B3821",
-"};	c #CE9822",
-"|;	c #FA4341",
-"1;	c #FB4341",
-"2;	c #FC4541",
-"3;	c #FC4542",
-"4;	c #FC4143",
-"5;	c #FC4D42",
-"6;	c #FB5042",
-"7;	c #FB5342",
-"8;	c #FC5242",
-"9;	c #FD4F40",
-"0;	c #FD503E",
-"a;	c #FB6339",
-"b;	c #F45E33",
-"c;	c #A12A2E",
-"d;	c #401E2C",
-"e;	c #452D2F",
-"f;	c #F74F38",
-"g;	c #FA5940",
-"h;	c #FC6245",
-"i;	c #FE6447",
-"j;	c #FE6449",
-"k;	c #FE6549",
-"l;	c #FE6749",
-"m;	c #FE6B49",
-"n;	c #FE6D49",
-"o;	c #FE6D48",
-"p;	c #FE6D47",
-"q;	c #FE6D45",
-"r;	c #FE6C44",
-"s;	c #FE6A42",
-"t;	c #FE663C",
-"u;	c #FC6233",
-"v;	c #752129",
-"w;	c #1F0922",
-"x;	c #750520",
-"y;	c #81061F",
-"z;	c #FA3D42",
-"A;	c #FB4142",
-"B;	c #FD4543",
-"C;	c #FD4844",
-"D;	c #FD4A45",
-"E;	c #FD4D45",
-"F;	c #FD5045",
-"G;	c #FD5345",
-"H;	c #FE5346",
-"I;	c #FE5445",
-"J;	c #FD5444",
-"K;	c #FC4F41",
-"L;	c #FA513D",
-"M;	c #F95339",
-"N;	c #F63736",
-"O;	c #F75737",
-"P;	c #F95F3B",
-"Q;	c #FB5840",
-"R;	c #FD5F43",
-"S;	c #FE6345",
-"T;	c #FE6547",
-"U;	c #FE6548",
-"V;	c #FE6448",
-"W;	c #FE6248",
-"X;	c #FE6348",
-"Y;	c #FE6748",
-"Z;	c #FE6848",
-"`;	c #FE6846",
-" >	c #FE6A45",
-".>	c #FE6D43",
-"+>	c #FE703F",
-"@>	c #FC6F36",
-"#>	c #6F302B",
-"$>	c #140A22",
-"%>	c #FA3B42",
-"&>	c #FC4243",
-"*>	c #FD4744",
-"=>	c #FE4A45",
-"->	c #FE4C47",
-";>	c #FE4D47",
-">>	c #FE5047",
-",>	c #FE5347",
-"'>	c #FE5447",
-")>	c #FD5246",
-"!>	c #FB503F",
-"~>	c #FA543D",
-"{>	c #9B3D3B",
-"]>	c #A3433B",
-"^>	c #F9683D",
-"/>	c #FC6940",
-"(>	c #FE6342",
-"_>	c #FE6645",
-":>	c #FE6646",
-"<>	c #FE6147",
-"[>	c #FE6048",
-"}>	c #FE6148",
-"|>	c #FE6746",
-"1>	c #FE6A46",
-"2>	c #FE6F45",
-"3>	c #FE7441",
-"4>	c #FC7D39",
-"5>	c #6C422E",
-"6>	c #0F0F23",
-"7>	c #FA4142",
-"8>	c #FC4643",
-"9>	c #FE4D46",
-"0>	c #FE4E47",
-"a>	c #FE4F48",
-"b>	c #FE5148",
-"c>	c #FE5348",
-"d>	c #FE5548",
-"e>	c #FE5247",
-"f>	c #FD5445",
-"g>	c #FC5544",
-"h>	c #F96041",
-"i>	c #D33F3D",
-"j>	c #392D39",
-"k>	c #973C38",
-"l>	c #F94E3A",
-"m>	c #FD693E",
-"n>	c #FE6C43",
-"o>	c #FE6047",
-"p>	c #FE5D47",
-"q>	c #FE5E48",
-"r>	c #FE6948",
-"s>	c #FE6947",
-"t>	c #FE6B47",
-"u>	c #FE6E46",
-"v>	c #FD6D43",
-"w>	c #FB723D",
-"x>	c #D54A33",
-"y>	c #301C29",
-"z>	c #FB4A42",
-"A>	c #FD4B44",
-"B>	c #FE4F47",
-"C>	c #FE5048",
-"D>	c #FE5648",
-"E>	c #FE5848",
-"F>	c #FE5747",
-"G>	c #FE5547",
-"H>	c #FC5945",
-"I>	c #F95742",
-"J>	c #F3543D",
-"K>	c #A33336",
-"L>	c #302032",
-"M>	c #152433",
-"N>	c #CD3E38",
-"O>	c #FD5A3F",
-"P>	c #FE6343",
-"Q>	c #FE6446",
-"R>	c #FE6247",
-"S>	c #FE6A47",
-"T>	c #FC6542",
-"U>	c #FB6A3B",
-"V>	c #FA6D34",
-"W>	c #D73C2D",
-"X>	c #442428",
-"Y>	c #281323",
-"Z>	c #FD4E42",
-"`>	c #FD4D43",
-" ,	c #FE4D45",
-".,	c #FE5248",
-"+,	c #FE5947",
-"@,	c #FE5C47",
-"#,	c #FE5B47",
-"$,	c #FE5A47",
-"%,	c #FE5847",
-"&,	c #FC5C45",
-"*,	c #F95B43",
-"=,	c #F3613F",
-"-,	c #E74F37",
-";,	c #8C2431",
-">,	c #161E2F",
-",,	c #CD4E33",
-"',	c #FD503A",
-"),	c #FE5D40",
-"!,	c #FE6445",
-"~,	c #FE6946",
-"{,	c #FE6847",
-"],	c #FE6747",
-"^,	c #FD6644",
-"/,	c #FD6241",
-"(,	c #FD5B3D",
-"_,	c #FE6739",
-":,	c #FE6135",
-"<,	c #AB4830",
-"[,	c #733E2A",
-"},	c #161224",
-"|,	c #FC4E42",
-"1,	c #FE4D44",
-"2,	c #FE4E46",
-"3,	c #FE5147",
-"4,	c #FE5E47",
-"5,	c #FD5C46",
-"6,	c #FA5B44",
-"7,	c #F45441",
-"8,	c #EB393A",
-"9,	c #CC3433",
-"0,	c #47212F",
-"a,	c #59242F",
-"b,	c #FC6734",
-"c,	c #FC6F3A",
-"d,	c #FC723E",
-"e,	c #FD6540",
-"f,	c #FE6442",
-"g,	c #FE6643",
-"h,	c #FE6944",
-"i,	c #FE6546",
-"j,	c #FE6444",
-"k,	c #FE6143",
-"l,	c #FE5E41",
-"m,	c #FE613F",
-"n,	c #FE683C",
-"o,	c #FE7937",
-"p,	c #A25030",
-"q,	c #692629",
-"r,	c #151122",
-"s,	c #FA573F",
-"t,	c #FB4D40",
-"u,	c #FC4F43",
-"v,	c #FE5246",
-"w,	c #FF6347",
-"x,	c #FE5F48",
-"y,	c #F65942",
-"z,	c #F0493D",
-"A,	c #ED3736",
-"B,	c #73262F",
-"C,	c #10152C",
-"D,	c #3B292F",
-"E,	c #363034",
-"F,	c #AC3938",
-"G,	c #FC6B3B",
-"H,	c #FD763C",
-"I,	c #FE6D3F",
-"J,	c #FE6341",
-"K,	c #FE6642",
-"L,	c #FE6745",
-"M,	c #FE6245",
-"N,	c #FE6244",
-"O,	c #FE6841",
-"P,	c #FF683B",
-"Q,	c #EC7035",
-"R,	c #D0412D",
-"S,	c #3A1627",
-"T,	c #CF3938",
-"U,	c #F6543C",
-"V,	c #FB5040",
-"W,	c #FD5544",
-"X,	c #FE5A48",
-"Y,	c #FE5D48",
-"Z,	c #FE5F47",
-"`,	c #FF6147",
-" '	c #FD5C45",
-".'	c #FB5B43",
-"+'	c #FA5A42",
-"@'	c #F76040",
-"#'	c #F4623D",
-"$'	c #F26D38",
-"%'	c #EC4130",
-"&'	c #380E2B",
-"*'	c #13122C",
-"='	c #362D31",
-"-'	c #353435",
-";'	c #352E37",
-">'	c #2D3337",
-",'	c #CC5838",
-"''	c #CD6F3A",
-")'	c #CE6E3D",
-"!'	c #FE793F",
-"~'	c #FD7541",
-"{'	c #FD6243",
-"]'	c #FE6545",
-"^'	c #FF6543",
-"/'	c #FF6240",
-"('	c #FE723B",
-"_'	c #FE8034",
-":'	c #442D2C",
-"<'	c #311725",
-"['	c #222830",
-"}'	c #B73B36",
-"|'	c #F94C3D",
-"1'	c #FD5543",
-"2'	c #FE5B48",
-"3'	c #FF5E47",
-"4'	c #FE5C48",
-"5'	c #FC5B44",
-"6'	c #F95640",
-"7'	c #C34E3D",
-"8'	c #A45A3A",
-"9'	c #F37438",
-"0'	c #F28935",
-"a'	c #AF422F",
-"b'	c #240D2B",
-"c'	c #88292F",
-"d'	c #FA8E34",
-"e'	c #FC7E38",
-"f'	c #FC5939",
-"g'	c #694A37",
-"h'	c #693437",
-"i'	c #382638",
-"j'	c #142439",
-"k'	c #9F483A",
-"l'	c #C45E3C",
-"m'	c #FD7240",
-"n'	c #FF6645",
-"o'	c #FF6245",
-"p'	c #FF6045",
-"q'	c #FF6146",
-"r'	c #FF6246",
-"s'	c #FF6446",
-"t'	c #FF6545",
-"u'	c #FE763F",
-"v'	c #FE7237",
-"w'	c #C65331",
-"x'	c #3D272A",
-"y'	c #0D1E2B",
-"z'	c #683032",
-"A'	c #F9453A",
-"B'	c #FD5341",
-"C'	c #FE5A46",
-"D'	c #FF5A48",
-"E'	c #FE5948",
-"F'	c #FD5A47",
-"G'	c #FC5D43",
-"H'	c #F95B3D",
-"I'	c #713F37",
-"J'	c #1E2D32",
-"K'	c #C44531",
-"L'	c #EF7A2F",
-"M'	c #6B2E2C",
-"N'	c #0F0E2C",
-"O'	c #F56633",
-"P'	c #FA803A",
-"Q'	c #FC673E",
-"R'	c #FD673E",
-"S'	c #FC6F3C",
-"T'	c #FA6E3B",
-"U'	c #C6633A",
-"V'	c #A06739",
-"W'	c #835638",
-"X'	c #381F38",
-"Y'	c #713B38",
-"Z'	c #7B503C",
-"`'	c #FE7741",
-" )	c #FE7344",
-".)	c #FE6D46",
-"+)	c #FF6946",
-"@)	c #FF5E46",
-"#)	c #FF5D46",
-"$)	c #FF5D47",
-"%)	c #FF5F48",
-"&)	c #FF6248",
-"*)	c #FE6941",
-"=)	c #FC783C",
-"-)	c #C46B35",
-";)	c #892730",
-">)	c #111629",
-",)	c #1F2630",
-"')	c #AD3939",
-"))	c #FC5D41",
-"!)	c #FE5946",
-"~)	c #FF5848",
-"{)	c #FE5549",
-"])	c #FC5E42",
-"^)	c #FA673B",
-"/)	c #DB7033",
-"()	c #392E2B",
-"_)	c #311A28",
-":)	c #3C2127",
-"<)	c #1D1027",
-"[)	c #92102C",
-"})	c #F58336",
-"|)	c #FA673E",
-"1)	c #FD6642",
-"2)	c #FD5A41",
-"3)	c #FC6D41",
-"4)	c #FC6D3F",
-"5)	c #FD683E",
-"6)	c #F38C39",
-"7)	c #CE6535",
-"8)	c #612E34",
-"9)	c #1D2637",
-"0)	c #71513E",
-"a)	c #FF6847",
-"b)	c #FF5F47",
-"c)	c #FF5A46",
-"d)	c #FF5847",
-"e)	c #FF5748",
-"f)	c #FF594A",
-"g)	c #FF5E4B",
-"h)	c #FE654C",
-"i)	c #FE694B",
-"j)	c #FE6B48",
-"k)	c #FC6A43",
-"l)	c #F7683E",
-"m)	c #EC6E39",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                              . + @ # $   %                                                     ",
-"                                                            & * = - ; > , ' ) ! ~                                               ",
-"                                                            { ] ^ / ( _ : < [ } | 1 2                                           ",
-"                                                        3 4 5 6 7 8 9 0 a b c d e f g h i j                                     ",
-"                                                      k l m n o p q r s t u v w x y z A B C D                                   ",
-"                                                    E F G H I J K L M N O P Q R S T U V W X Y Z `                               ",
-"                                                   ...+. at .#.$.%.&.*.=.-.;.>.,.S '.).!.~.{.].^./.(._.                            ",
-"                                              :.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.!.S f.g.h.i.j.k.                          ",
-"                                              l.m.n.o.p.q.r.s.t.u.J v.w.x.y.z.A.c.d.d.B.C.D.E.F.G.H.I.                          ",
-"                                            J.K.L.M.N.O.P.Q.R.t S.T.U.V.W.X.Y.Z.`. +d.d..+B.'.++ at +#+$+%+                        ",
-"                                      &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+d.2+3+4+d.5+6+7+8+9+0+                      ",
-"                                    a+b+c+d+e+f+g+h+i+j+k+l+m+n+^+o+p+q+r+s+t+u+v+b.w+x+y+z+A+w+B+C+D+E+F+G+                    ",
-"                                H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+Q ,.X+Y+Z+`+ @. at +@@@#@$@%@&@*@=@#@-@;@>@,@'@                    ",
-"                                )@!@~@{@]@^@/@(@_@:@<@[@}@|@1 at 2@3 at R ,.4 at 5@6 at 7@8 at 9@0 at a@#@b at c@=@d at e@f at g@>@h at i@j@                  ",
-"                                k at l@m at n@o at p@q at r@s at t@u at v@w at x@y@^+R S z at A@z.q+B at C@D at E@F at G@H@#@e@#@#@f at g@I at J@K at L@                  ",
-"                                M at N@O at P@Q at R@S at T@U at V@W at X@Y at Z@`@ #.#+#+#S A@@###$#%#&#*#=#-#f at B+B+B+f@;#>#,#'#)#                  ",
-"                                !#~#{#]#^#/#(#(#_#:#<#[#}#|#1#^+.#S +#+#z at 2#3#4#5#6#7#8#9#0#A.B+B+a#A.@@b#c#d#                  ",
-"                              e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#.#w#S R ^+x#y#z#A#B#C#D#-#A.a#`.`.b.g at E#d#F#                  ",
-"                          G#0 at H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#>.W#3 at v#R R X+X#Y#s#Z#`# $.$+$@$g at f@5+5+#$6+$$%$&$                  ",
-"                          *$=$-$;$>$,$'$)$!$~${$]$^$/$($_$*$u#:$Q 3@,.X+z.<$[$}$|$1$2$3$4$5$6$7$e at 8$#$G at 9$0$a$                  ",
-"                        ,.4 at E#b$c$d$e$f$g$h$i$j$k$l$m$n$`@>.:$o$3@,. #a.p$q$r$s$t$u$v$w$x$y$z$A$B$#@C$D$E$F$G$                  ",
-"                      R S H$v+I$J$K$n+L$:$o$o$M$N$L$O$P$Q$R$N$o$3 at S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%                  ",
-"                      E.,%~.'%Z.4 at v W#o$)%)%)%Q !%~%{%]%^%Q$u u#/%(%_%:%<%[%}%|%1%2%3%4%=%5%6%7%8%9%0%a%b%c%d%                  ",
-"                    e%f%g%a#,%,%z at R 3 at 3@3@)%Q h%i%j%k%l%m%{+n%o%p%q%r%s%t%u%v%w%x%y%z%A%*%B%C%D%E%F%G%H%I%                      ",
-"                    J%K%L%M%N%D.S v#)%)%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&f at a##@=&-&;&>&,&'&)&                        ",
-"                  !&~&{&]&^&.#w#^&/%/&(&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&e at 1+5+e@f&g&h&i&j&                            ",
-"                k&l&m&n&o&p&q&r&i%s&3.t&u&v&w&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&1+`.e at f&Q&R&S&T&                            ",
-"                0 U&V&W&X&<&Y&j%Z&`& *.*+*@*#*$*%*&***=*-*;*>*>*,*'*)*!*~*{*]*^*/*(*a#B+#@_*:*<*[*}*                            ",
-"                |*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*E.w*d.e at x*y*z*A*B*                            ",
-"                C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*l*X*o*o*Y*Z*`* =.=+=@=#='%$=%=e@&=*===-=;=                            ",
-"                >=,='=)=!=~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=p*6=6=7=8=9=0=a=b=c=d=A@~.b.B+e=f=g=h=i=                            ",
-"                    j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=5=Z*B=C=D=E=8=F=G=H=I=J=K=S$R z@'%L=M=N=O=                              ",
-"                    P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+- at -#-$-5=p*E=D=%-%-q*&-*-=---;->-,-/%3@^+'-)-!-~-                              ",
-"                  {-]-^-/-(-_-:-<-[-}-|-1-2- -3-4-5-6-7-8-n*m*9-0-9-o*a-b-c-d-e-f-g-(&h%w c h-i-                                ",
-"                j-k-l-m-n-o-p-q-r-s-t-u-v-w-,-x-y-z-A-B-C-D-E-E-F-G-_ at m*H-I-J-K-L-M-N-O-P-(+Q-                                  ",
-"                R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;-;;;>;,;';);!;~;{;];^;/;(;_;:;<;[;};                                  ",
-"                |;1;2;3;4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;j;k;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;                                    ",
-"                z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;k;Y;Z;`; >r;.>+>@>#>$>                                        ",
-"                %>&>*>=>->;>>>,>'>,>)>F;8;!>~>{>]>^>/>(>_>:>i;<>[>X;}>i;|>1>q;2>3>4>5>6>                                        ",
-"                7>8>=>9>0>a>b>c>d>,>e>e>f>g>h>i>j>k>l>m>n>:>i;o>p>q>W;r>s>t>p;u>v>w>x>y>                                        ",
-"                z>A>9>0>B>C>c>D>E>F>G>G>F>H>I>J>K>L>M>N>O>P>Q>R>o>R>T;s>S>S>S>t>1>T>U>V>W>X>Y>                                  ",
-"                Z>`> ,9>B>.,D>+,@,#,$,%,$,&,*,=,-,;,>,,,',),P>!,!,_>~,t>s>{,],{,],^,/,(,_,:,<,[,},                              ",
-"                |,`>1,2,3,G>+,4,o>o>4,@,@,5,6,7,8,9,0,a,b,c,d,e,f,g,h, >~,|>T;T;T;i,j,k,l,m,n,o,p,q,r,                          ",
-"                s,t,u,v,G>%,@,o>w,R>x,p>@,5,6,y,z,A,B,C,D,E,F,G,H,I,J,K,L,L,i,i;i;i;Q>S;M,N,P>O,P,Q,R,S,                        ",
-"                T,U,V,W,%,X,Y,Z,`,[>q>@, '.'+'@'#'$'%'&'*'='-';'>',''')'!'~'{'N,i,:>_>]'M,M,Q>_>^'/'('_':'<'                    ",
-"                ['}'|'1'$,X,2'p>3'4'2'@,5'6'7'8'9'0'a'b'c'd'e'f'g'h'i'j'k'l'd,m'g, > >n'o'p'q'r's't'.>u'v'w'x'                  ",
-"                y'z'A'B'C'X,X,2'D'E'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'`' ).)+)r'@)#)$)%)&)l;1>*)=)-);)                ",
-"                >),)')))!)X,E'X,~){)d>!)])^)/)()_):)<)[)})|)1)f,2)3)4)5)6)7)8)9)0)*--*a)b)c)d)e)f)g)h)i)j)k)l)m)                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                ",
-"                                                                                                                                "};
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure.rb
deleted file mode 100644
index b86d905..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-require 'json/common'
-require 'json/pure/parser'
-require 'json/pure/generator'
-
-module JSON
-  begin
-    require 'iconv'
-    # An iconv instance to convert from UTF8 to UTF16 Big Endian.
-    UTF16toUTF8 = Iconv.new('utf-8', 'utf-16be') # :nodoc:
-    # An iconv instance to convert from UTF16 Big Endian to UTF8.
-    UTF8toUTF16 = Iconv.new('utf-16be', 'utf-8') # :nodoc:
-    UTF8toUTF16.iconv('no bom')
-  rescue Errno::EINVAL, Iconv::InvalidEncoding
-    # Iconv doesn't support big endian utf-16. Let's try to hack this manually
-    # into the converters.
-    begin
-      old_verbose, $VERBSOSE = $VERBOSE, nil
-      # An iconv instance to convert from UTF8 to UTF16 Big Endian.
-      UTF16toUTF8 = Iconv.new('utf-8', 'utf-16') # :nodoc:
-      # An iconv instance to convert from UTF16 Big Endian to UTF8.
-      UTF8toUTF16 = Iconv.new('utf-16', 'utf-8') # :nodoc:
-      UTF8toUTF16.iconv('no bom')
-      if UTF8toUTF16.iconv("\xe2\x82\xac") == "\xac\x20"
-        swapper = Class.new do
-          def initialize(iconv) # :nodoc:
-            @iconv = iconv
-          end
-
-          def iconv(string) # :nodoc:
-            result = @iconv.iconv(string)
-            JSON.swap!(result)
-          end
-        end
-        UTF8toUTF16 = swapper.new(UTF8toUTF16) # :nodoc:
-      end
-      if UTF16toUTF8.iconv("\xac\x20") == "\xe2\x82\xac"
-        swapper = Class.new do
-          def initialize(iconv) # :nodoc:
-            @iconv = iconv
-          end
-
-          def iconv(string) # :nodoc:
-            string = JSON.swap!(string.dup)
-            @iconv.iconv(string)
-          end
-        end
-        UTF16toUTF8 = swapper.new(UTF16toUTF8) # :nodoc:
-      end
-    rescue Errno::EINVAL, Iconv::InvalidEncoding
-      raise MissingUnicodeSupport, "iconv doesn't seem to support UTF-8/UTF-16 conversions"
-    ensure
-      $VERBOSE = old_verbose
-    end
-  rescue LoadError
-    raise MissingUnicodeSupport,
-      "iconv couldn't be loaded, which is required for UTF-8/UTF-16 conversions"
-  end
-
-  # Swap consecutive bytes of _string_ in place.
-  def self.swap!(string) # :nodoc:
-    0.upto(string.size / 2) do |i|
-      break unless string[2 * i + 1]
-      string[2 * i], string[2 * i + 1] = string[2 * i + 1], string[2 * i]
-    end
-    string
-  end
-
-  # This module holds all the modules/classes that implement JSON's
-  # functionality in pure ruby.
-  module Pure
-    $DEBUG and warn "Using pure library for JSON."
-    JSON.parser = Parser
-    JSON.generator = Generator
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure/generator.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure/generator.rb
deleted file mode 100644
index c8bbfd0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure/generator.rb
+++ /dev/null
@@ -1,394 +0,0 @@
-module JSON
-  MAP = {
-    "\x0" => '\u0000',
-    "\x1" => '\u0001',
-    "\x2" => '\u0002',
-    "\x3" => '\u0003',
-    "\x4" => '\u0004',
-    "\x5" => '\u0005',
-    "\x6" => '\u0006',
-    "\x7" => '\u0007',
-    "\b"  =>  '\b',
-    "\t"  =>  '\t',
-    "\n"  =>  '\n',
-    "\xb" => '\u000b',
-    "\f"  =>  '\f',
-    "\r"  =>  '\r',
-    "\xe" => '\u000e',
-    "\xf" => '\u000f',
-    "\x10" => '\u0010',
-    "\x11" => '\u0011',
-    "\x12" => '\u0012',
-    "\x13" => '\u0013',
-    "\x14" => '\u0014',
-    "\x15" => '\u0015',
-    "\x16" => '\u0016',
-    "\x17" => '\u0017',
-    "\x18" => '\u0018',
-    "\x19" => '\u0019',
-    "\x1a" => '\u001a',
-    "\x1b" => '\u001b',
-    "\x1c" => '\u001c',
-    "\x1d" => '\u001d',
-    "\x1e" => '\u001e',
-    "\x1f" => '\u001f',
-    '"'   =>  '\"',
-    '\\'  =>  '\\\\',
-    '/'   =>  '\/',
-  } # :nodoc:
-
-  # Convert a UTF8 encoded Ruby string _string_ to a JSON string, encoded with
-  # UTF16 big endian characters as \u????, and return it.
-  def utf8_to_json(string) # :nodoc:
-    string = string.gsub(/["\\\/\x0-\x1f]/) { MAP[$&] }
-    string.gsub!(/(
-                    (?:
-                      [\xc2-\xdf][\x80-\xbf]    |
-                      [\xe0-\xef][\x80-\xbf]{2} |
-                      [\xf0-\xf4][\x80-\xbf]{3}
-                    )+ |
-                    [\x80-\xc1\xf5-\xff]       # invalid
-                  )/nx) { |c|
-      c.size == 1 and raise GeneratorError, "invalid utf8 byte: '#{c}'"
-      s = JSON::UTF8toUTF16.iconv(c).unpack('H*')[0]
-      s.gsub!(/.{4}/n, '\\\\u\&')
-    }
-    string
-  rescue Iconv::Failure => e
-    raise GeneratorError, "Caught #{e.class}: #{e}"
-  end
-  module_function :utf8_to_json
-
-  module Pure
-    module Generator
-      # This class is used to create State instances, that are use to hold data
-      # while generating a JSON text from a a Ruby data structure.
-      class State
-        # Creates a State object from _opts_, which ought to be Hash to create
-        # a new State instance configured by _opts_, something else to create
-        # an unconfigured instance. If _opts_ is a State object, it is just
-        # returned.
-        def self.from_state(opts)
-          case opts
-          when self
-            opts
-          when Hash
-            new(opts)
-          else
-            new
-          end
-        end
-
-        # Instantiates a new State object, configured by _opts_.
-        #
-        # _opts_ can have the following keys:
-        #
-        # * *indent*: a string used to indent levels (default: ''),
-        # * *space*: a string that is put after, a : or , delimiter (default: ''),
-        # * *space_before*: a string that is put before a : pair delimiter (default: ''),
-        # * *object_nl*: a string that is put at the end of a JSON object (default: ''), 
-        # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
-        # * *check_circular*: true if checking for circular data structures
-        #   should be done (the default), false otherwise.
-        # * *check_circular*: true if checking for circular data structures
-        #   should be done, false (the default) otherwise.
-        # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
-        #   generated, otherwise an exception is thrown, if these values are
-        #   encountered. This options defaults to false.
-        def initialize(opts = {})
-          @seen = {}
-          @indent         = ''
-          @space          = ''
-          @space_before   = ''
-          @object_nl      = ''
-          @array_nl       = ''
-          @check_circular = true
-          @allow_nan      = false
-          configure opts
-        end
-
-        # This string is used to indent levels in the JSON text.
-        attr_accessor :indent
-
-        # This string is used to insert a space between the tokens in a JSON
-        # string.
-        attr_accessor :space
-
-        # This string is used to insert a space before the ':' in JSON objects.
-        attr_accessor :space_before
-
-        # This string is put at the end of a line that holds a JSON object (or
-        # Hash).
-        attr_accessor :object_nl
-
-        # This string is put at the end of a line that holds a JSON array.
-        attr_accessor :array_nl
-
-        # This integer returns the maximum level of data structure nesting in
-        # the generated JSON, max_nesting = 0 if no maximum is checked.
-        attr_accessor :max_nesting
-
-        def check_max_nesting(depth) # :nodoc:
-          return if @max_nesting.zero?
-          current_nesting = depth + 1
-          current_nesting > @max_nesting and
-            raise NestingError, "nesting of #{current_nesting} is too deep"
-        end
-
-        # Returns true, if circular data structures should be checked,
-        # otherwise returns false.
-        def check_circular?
-          @check_circular
-        end
-
-        # Returns true if NaN, Infinity, and -Infinity should be considered as
-        # valid JSON and output.
-        def allow_nan?
-          @allow_nan
-        end
-
-        # Returns _true_, if _object_ was already seen during this generating
-        # run. 
-        def seen?(object)
-          @seen.key?(object.__id__)
-        end
-
-        # Remember _object_, to find out if it was already encountered (if a
-        # cyclic data structure is if a cyclic data structure is rendered). 
-        def remember(object)
-          @seen[object.__id__] = true
-        end
-
-        # Forget _object_ for this generating run.
-        def forget(object)
-          @seen.delete object.__id__
-        end
-
-        # Configure this State instance with the Hash _opts_, and return
-        # itself.
-        def configure(opts)
-          @indent         = opts[:indent] if opts.key?(:indent)
-          @space          = opts[:space] if opts.key?(:space)
-          @space_before   = opts[:space_before] if opts.key?(:space_before)
-          @object_nl      = opts[:object_nl] if opts.key?(:object_nl)
-          @array_nl       = opts[:array_nl] if opts.key?(:array_nl)
-          @check_circular = !!opts[:check_circular] if opts.key?(:check_circular)
-          @allow_nan      = !!opts[:allow_nan] if opts.key?(:allow_nan)
-          if !opts.key?(:max_nesting) # defaults to 19
-            @max_nesting = 19
-          elsif opts[:max_nesting]
-            @max_nesting = opts[:max_nesting]
-          else
-            @max_nesting = 0
-          end
-          self
-        end
-
-        # Returns the configuration instance variables as a hash, that can be
-        # passed to the configure method.
-        def to_h
-          result = {}
-          for iv in %w[indent space space_before object_nl array_nl check_circular allow_nan max_nesting]
-            result[iv.intern] = instance_variable_get("@#{iv}")
-          end
-          result
-        end
-      end
-
-      module GeneratorMethods
-        module Object
-          # Converts this object to a string (calling #to_s), converts
-          # it to a JSON string, and returns the result. This is a fallback, if no
-          # special method #to_json was defined for some object.
-          def to_json(*) to_s.to_json end
-        end
-
-        module Hash
-          # Returns a JSON string containing a JSON object, that is unparsed from
-          # this Hash instance.
-          # _state_ is a JSON::State object, that can also be used to configure the
-          # produced JSON string output further.
-          # _depth_ is used to find out nesting depth, to indent accordingly.
-          def to_json(state = nil, depth = 0, *)
-            if state
-              state = JSON.state.from_state(state)
-              state.check_max_nesting(depth)
-              json_check_circular(state) { json_transform(state, depth) }
-            else
-              json_transform(state, depth)
-            end
-          end
-
-          private
-
-          def json_check_circular(state)
-            if state and state.check_circular?
-              state.seen?(self) and raise JSON::CircularDatastructure,
-                  "circular data structures not supported!"
-              state.remember self
-            end
-            yield
-          ensure
-            state and state.forget self
-          end
-
-          def json_shift(state, depth)
-            state and not state.object_nl.empty? or return ''
-            state.indent * depth
-          end
-
-          def json_transform(state, depth)
-            delim = ','
-            delim << state.object_nl if state
-            result = '{'
-            result << state.object_nl if state
-            result << map { |key,value|
-              s = json_shift(state, depth + 1)
-              s << key.to_s.to_json(state, depth + 1)
-              s << state.space_before if state
-              s << ':'
-              s << state.space if state
-              s << value.to_json(state, depth + 1)
-            }.join(delim)
-            result << state.object_nl if state
-            result << json_shift(state, depth)
-            result << '}'
-            result
-          end
-        end
-
-        module Array
-          # Returns a JSON string containing a JSON array, that is unparsed from
-          # this Array instance.
-          # _state_ is a JSON::State object, that can also be used to configure the
-          # produced JSON string output further.
-          # _depth_ is used to find out nesting depth, to indent accordingly.
-          def to_json(state = nil, depth = 0, *)
-            if state
-              state = JSON.state.from_state(state)
-              state.check_max_nesting(depth)
-              json_check_circular(state) { json_transform(state, depth) }
-            else
-              json_transform(state, depth)
-            end
-          end
-
-          private
-
-          def json_check_circular(state)
-            if state and state.check_circular?
-              state.seen?(self) and raise JSON::CircularDatastructure,
-                "circular data structures not supported!"
-              state.remember self
-            end
-            yield
-          ensure
-            state and state.forget self
-          end
-
-          def json_shift(state, depth)
-            state and not state.array_nl.empty? or return ''
-            state.indent * depth
-          end
-
-          def json_transform(state, depth)
-            delim = ','
-            delim << state.array_nl if state
-            result = '['
-            result << state.array_nl if state
-            result << map { |value|
-              json_shift(state, depth + 1) << value.to_json(state, depth + 1)
-            }.join(delim)
-            result << state.array_nl if state
-            result << json_shift(state, depth) 
-            result << ']'
-            result
-          end
-        end
-
-        module Integer
-          # Returns a JSON string representation for this Integer number.
-          def to_json(*) to_s end
-        end
-
-        module Float
-          # Returns a JSON string representation for this Float number.
-          def to_json(state = nil, *)
-            case
-            when infinite?
-              if !state || state.allow_nan?
-                to_s
-              else
-                raise GeneratorError, "#{self} not allowed in JSON"
-              end
-            when nan?
-              if !state || state.allow_nan?
-                to_s
-              else
-                raise GeneratorError, "#{self} not allowed in JSON"
-              end
-            else
-              to_s
-            end
-          end
-        end
-
-        module String
-          # This string should be encoded with UTF-8 A call to this method
-          # returns a JSON string encoded with UTF16 big endian characters as
-          # \u????.
-          def to_json(*)
-            '"' << JSON.utf8_to_json(self) << '"'
-          end
-
-          # Module that holds the extinding methods if, the String module is
-          # included.
-          module Extend
-            # Raw Strings are JSON Objects (the raw bytes are stored in an array for the
-            # key "raw"). The Ruby String can be created by this module method.
-            def json_create(o)
-              o['raw'].pack('C*')
-            end
-          end
-
-          # Extends _modul_ with the String::Extend module.
-          def self.included(modul)
-            modul.extend Extend
-          end
-
-          # This method creates a raw object hash, that can be nested into
-          # other data structures and will be unparsed as a raw string. This
-          # method should be used, if you want to convert raw strings to JSON
-          # instead of UTF-8 strings, e. g. binary data.
-          def to_json_raw_object
-            {
-              JSON.create_id  => self.class.name,
-              'raw'           => self.unpack('C*'),
-            }
-          end
-
-          # This method creates a JSON text from the result of
-          # a call to to_json_raw_object of this String.
-          def to_json_raw(*args)
-            to_json_raw_object.to_json(*args)
-          end
-        end
-
-        module TrueClass
-          # Returns a JSON string for true: 'true'.
-          def to_json(*) 'true' end
-        end
-
-        module FalseClass
-          # Returns a JSON string for false: 'false'.
-          def to_json(*) 'false' end
-        end
-
-        module NilClass
-          # Returns a JSON string for nil: 'null'.
-          def to_json(*) 'null' end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure/parser.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure/parser.rb
deleted file mode 100644
index 9b30f15..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/pure/parser.rb
+++ /dev/null
@@ -1,259 +0,0 @@
-require 'strscan'
-
-module JSON
-  module Pure
-    # This class implements the JSON parser that is used to parse a JSON string
-    # into a Ruby data structure.
-    class Parser < StringScanner
-      STRING                = /" ((?:[^\x0-\x1f"\\] |
-                                  \\["\\\/bfnrt] |
-                                  \\u[0-9a-fA-F]{4} |
-                                  \\[\x20-\xff])*)
-                              "/nx
-      INTEGER               = /(-?0|-?[1-9]\d*)/
-      FLOAT                 = /(-?
-                                (?:0|[1-9]\d*)
-                                (?:
-                                  \.\d+(?i:e[+-]?\d+) |
-                                  \.\d+ |
-                                  (?i:e[+-]?\d+)
-                                )
-                                )/x
-      NAN                   = /NaN/
-      INFINITY              = /Infinity/
-      MINUS_INFINITY        = /-Infinity/
-      OBJECT_OPEN           = /\{/
-      OBJECT_CLOSE          = /\}/
-      ARRAY_OPEN            = /\[/
-      ARRAY_CLOSE           = /\]/
-      PAIR_DELIMITER        = /:/
-      COLLECTION_DELIMITER  = /,/
-      TRUE                  = /true/
-      FALSE                 = /false/
-      NULL                  = /null/
-      IGNORE                = %r(
-        (?:
-         //[^\n\r]*[\n\r]| # line comments
-         /\*               # c-style comments
-         (?:
-          [^*/]|        # normal chars
-          /[^*]|        # slashes that do not start a nested comment
-          \*[^/]|       # asterisks that do not end this comment
-          /(?=\*/)      # single slash before this comment's end 
-         )*
-           \*/               # the End of this comment
-           |[ \t\r\n]+       # whitespaces: space, horicontal tab, lf, cr
-        )+
-      )mx
-
-      UNPARSED = Object.new
-
-      # Creates a new JSON::Pure::Parser instance for the string _source_.
-      #
-      # It will be configured by the _opts_ hash. _opts_ can have the following
-      # keys:
-      # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
-      #   structures. Disable depth checking with :max_nesting => false|nil|0,
-      #   it defaults to 19.
-      # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
-      #   defiance of RFC 4627 to be parsed by the Parser. This option defaults
-      #   to false.
-      # * *create_additions*: If set to false, the Parser doesn't create
-      #   additions even if a matchin class and create_id was found. This option
-      #   defaults to true.
-      def initialize(source, opts = {})
-        super
-        if !opts.key?(:max_nesting) # defaults to 19
-          @max_nesting = 19
-        elsif opts[:max_nesting]
-          @max_nesting = opts[:max_nesting]
-        else
-          @max_nesting = 0
-        end
-        @allow_nan = !!opts[:allow_nan]
-        ca = true
-        ca = opts[:create_additions] if opts.key?(:create_additions)
-        @create_id = ca ? JSON.create_id : nil
-      end
-
-      alias source string
-
-      # Parses the current JSON string _source_ and returns the complete data
-      # structure as a result.
-      def parse
-        reset
-        obj = nil
-        until eos?
-          case
-          when scan(OBJECT_OPEN)
-            obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
-            @current_nesting = 1
-            obj = parse_object
-          when scan(ARRAY_OPEN)
-            obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
-            @current_nesting = 1
-            obj = parse_array
-          when skip(IGNORE)
-            ;
-          else
-            raise ParserError, "source '#{peek(20)}' not in JSON!"
-          end
-        end
-        obj or raise ParserError, "source did not contain any JSON!"
-        obj
-      end
-
-      private
-
-      # Unescape characters in strings.
-      UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
-      UNESCAPE_MAP.update({
-        ?"  => '"',
-        ?\\ => '\\',
-        ?/  => '/',
-        ?b  => "\b",
-        ?f  => "\f",
-        ?n  => "\n",
-        ?r  => "\r",
-        ?t  => "\t",
-        ?u  => nil, 
-      })
-
-      def parse_string
-        if scan(STRING)
-          return '' if self[1].empty?
-          self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c|
-            if u = UNESCAPE_MAP[$&[1]]
-              u
-            else # \uXXXX
-              bytes = ''
-              i = 0
-              while c[6 * i] == ?\\ && c[6 * i + 1] == ?u 
-                bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16)
-                i += 1
-              end
-              JSON::UTF16toUTF8.iconv(bytes)
-            end
-          end
-        else
-          UNPARSED
-        end
-      rescue Iconv::Failure => e
-        raise GeneratorError, "Caught #{e.class}: #{e}"
-      end
-
-      def parse_value
-        case
-        when scan(FLOAT)
-          Float(self[1])
-        when scan(INTEGER)
-          Integer(self[1])
-        when scan(TRUE)
-          true
-        when scan(FALSE)
-          false
-        when scan(NULL)
-          nil
-        when (string = parse_string) != UNPARSED
-          string
-        when scan(ARRAY_OPEN)
-          @current_nesting += 1
-          ary = parse_array
-          @current_nesting -= 1
-          ary
-        when scan(OBJECT_OPEN)
-          @current_nesting += 1
-          obj = parse_object
-          @current_nesting -= 1
-          obj
-        when @allow_nan && scan(NAN)
-          NaN
-        when @allow_nan && scan(INFINITY)
-          Infinity
-        when @allow_nan && scan(MINUS_INFINITY)
-          MinusInfinity
-        else
-          UNPARSED
-        end
-      end
-
-      def parse_array
-        raise NestingError, "nesting of #@current_nesting is to deep" if
-          @max_nesting.nonzero? && @current_nesting > @max_nesting
-        result = []
-        delim = false
-        until eos?
-          case
-          when (value = parse_value) != UNPARSED
-            delim = false
-            result << value
-            skip(IGNORE)
-            if scan(COLLECTION_DELIMITER)
-              delim = true
-            elsif match?(ARRAY_CLOSE)
-              ;
-            else
-              raise ParserError, "expected ',' or ']' in array at '#{peek(20)}'!"
-            end
-          when scan(ARRAY_CLOSE)
-            if delim
-              raise ParserError, "expected next element in array at '#{peek(20)}'!"
-            end
-            break
-          when skip(IGNORE)
-            ;
-          else
-            raise ParserError, "unexpected token in array at '#{peek(20)}'!"
-          end
-        end
-        result
-      end
-
-      def parse_object
-        raise NestingError, "nesting of #@current_nesting is to deep" if
-          @max_nesting.nonzero? && @current_nesting > @max_nesting
-        result = {}
-        delim = false
-        until eos?
-          case
-          when (string = parse_string) != UNPARSED
-            skip(IGNORE)
-            unless scan(PAIR_DELIMITER)
-              raise ParserError, "expected ':' in object at '#{peek(20)}'!"
-            end
-            skip(IGNORE)
-            unless (value = parse_value).equal? UNPARSED
-              result[string] = value
-              delim = false
-              skip(IGNORE)
-              if scan(COLLECTION_DELIMITER)
-                delim = true
-              elsif match?(OBJECT_CLOSE)
-                ;
-              else
-                raise ParserError, "expected ',' or '}' in object at '#{peek(20)}'!"
-              end
-            else
-              raise ParserError, "expected value in object at '#{peek(20)}'!"
-            end
-          when scan(OBJECT_CLOSE)
-            if delim
-              raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!"
-            end
-            if @create_id and klassname = result[@create_id]
-              klass = JSON.deep_const_get klassname
-              break unless klass and klass.json_creatable?
-              result = klass.json_create(result)
-            end
-            break
-          when skip(IGNORE)
-            ;
-          else
-            raise ParserError, "unexpected token in object at '#{peek(20)}'!"
-          end
-        end
-        result
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/version.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/version.rb
deleted file mode 100644
index acf8217..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/lib/json/version.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module JSON
-  # JSON version
-  VERSION         = '1.1.3'
-  VERSION_ARRAY   = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
-  VERSION_MAJOR   = VERSION_ARRAY[0] # :nodoc:
-  VERSION_MINOR   = VERSION_ARRAY[1] # :nodoc:
-  VERSION_BUILD   = VERSION_ARRAY[2] # :nodoc:
-  VARIANT_BINARY  = false
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail1.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail1.json
deleted file mode 100644
index 6216b86..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail1.json
+++ /dev/null
@@ -1 +0,0 @@
-"A JSON payload should be an object or array, not a string."
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail10.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail10.json
deleted file mode 100644
index 5d8c004..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail10.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Extra value after close": true} "misplaced quoted value"
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail11.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail11.json
deleted file mode 100644
index 76eb95b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail11.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Illegal expression": 1 + 2}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail12.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail12.json
deleted file mode 100644
index 77580a4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail12.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Illegal invocation": alert()}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail13.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail13.json
deleted file mode 100644
index 379406b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail13.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Numbers cannot have leading zeroes": 013}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail14.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail14.json
deleted file mode 100644
index 0ed366b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail14.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Numbers cannot be hex": 0x14}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail18.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail18.json
deleted file mode 100644
index e2d130c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail18.json
+++ /dev/null
@@ -1 +0,0 @@
-[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail19.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail19.json
deleted file mode 100644
index 3b9c46f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail19.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Missing colon" null}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail2.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail2.json
deleted file mode 100644
index 6b7c11e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail2.json
+++ /dev/null
@@ -1 +0,0 @@
-["Unclosed array"
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail20.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail20.json
deleted file mode 100644
index 27c1af3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail20.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Double colon":: null}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail21.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail21.json
deleted file mode 100644
index 6247457..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail21.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Comma instead of colon", null}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail22.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail22.json
deleted file mode 100644
index a775258..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail22.json
+++ /dev/null
@@ -1 +0,0 @@
-["Colon instead of comma": false]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail23.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail23.json
deleted file mode 100644
index 494add1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail23.json
+++ /dev/null
@@ -1 +0,0 @@
-["Bad value", truth]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail24.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail24.json
deleted file mode 100644
index caff239..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail24.json
+++ /dev/null
@@ -1 +0,0 @@
-['single quote']
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail25.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail25.json
deleted file mode 100644
index 2dfbd25..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail25.json
+++ /dev/null
@@ -1 +0,0 @@
-["tab	character	in	string	"]
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail27.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail27.json
deleted file mode 100644
index 6b01a2c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail27.json
+++ /dev/null
@@ -1,2 +0,0 @@
-["line
-break"]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail28.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail28.json
deleted file mode 100644
index 621a010..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail28.json
+++ /dev/null
@@ -1,2 +0,0 @@
-["line\
-break"]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail3.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail3.json
deleted file mode 100644
index 168c81e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail3.json
+++ /dev/null
@@ -1 +0,0 @@
-{unquoted_key: "keys must be quoted"}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail4.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail4.json
deleted file mode 100644
index 9de168b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail4.json
+++ /dev/null
@@ -1 +0,0 @@
-["extra comma",]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail5.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail5.json
deleted file mode 100644
index ddf3ce3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail5.json
+++ /dev/null
@@ -1 +0,0 @@
-["double extra comma",,]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail6.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail6.json
deleted file mode 100644
index ed91580..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail6.json
+++ /dev/null
@@ -1 +0,0 @@
-[   , "<-- missing value"]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail7.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail7.json
deleted file mode 100644
index 8a96af3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail7.json
+++ /dev/null
@@ -1 +0,0 @@
-["Comma after the close"],
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail8.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail8.json
deleted file mode 100644
index b28479c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail8.json
+++ /dev/null
@@ -1 +0,0 @@
-["Extra close"]]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail9.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail9.json
deleted file mode 100644
index 5815574..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/fail9.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Extra comma": true,}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass1.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass1.json
deleted file mode 100644
index 7828fcc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass1.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
-    "JSON Test Pattern pass1",
-    {"object with 1 member":["array with 1 element"]},
-    {},
-    [],
-    -42,
-    true,
-    false,
-    null,
-    {
-        "integer": 1234567890,
-        "real": -9876.543210,
-        "e": 0.123456789e-12,
-        "E": 1.234567890E+34,
-        "":  23456789012E666,
-        "zero": 0,
-        "one": 1,
-        "space": " ",
-        "quote": "\"",
-        "backslash": "\\",
-        "controls": "\b\f\n\r\t",
-        "slash": "/ & \/",
-        "alpha": "abcdefghijklmnopqrstuvwyz",
-        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
-        "digit": "0123456789",
-        "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
-        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
-        "true": true,
-        "false": false,
-        "null": null,
-        "array":[  ],
-        "object":{  },
-        "address": "50 St. James Street",
-        "url": "http://www.JSON.org/",
-        "comment": "// /* <!-- --",
-        "# -- --> */": " ",
-        " s p a c e d " :[1,2 , 3
-
-,
-
-4 , 5        ,          6           ,7        ],
-        "compact": [1,2,3,4,5,6,7],
-        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
-        "quotes": "" \u0022 %22 0x22 034 &#x22;",
-        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
-: "A key can be any string"
-    },
-    0.5 ,98.6
-,
-99.44
-,
-
-1066
-
-
-,"rosebud"]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass15.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass15.json
deleted file mode 100644
index fc8376b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass15.json
+++ /dev/null
@@ -1 +0,0 @@
-["Illegal backslash escape: \x15"]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass16.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass16.json
deleted file mode 100644
index c43ae3c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass16.json
+++ /dev/null
@@ -1 +0,0 @@
-["Illegal backslash escape: \'"]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass17.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass17.json
deleted file mode 100644
index 62b9214..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass17.json
+++ /dev/null
@@ -1 +0,0 @@
-["Illegal backslash escape: \017"]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass2.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass2.json
deleted file mode 100644
index d3c63c7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass2.json
+++ /dev/null
@@ -1 +0,0 @@
-[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass26.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass26.json
deleted file mode 100644
index 845d26a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass26.json
+++ /dev/null
@@ -1 +0,0 @@
-["tab\   character\   in\  string\  "]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass3.json b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass3.json
deleted file mode 100644
index 4528d51..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/fixtures/pass3.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-    "JSON Test Pattern pass3": {
-        "The outermost value": "must be an object or array.",
-        "In this test": "It is an object."
-    }
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/runner.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/runner.rb
deleted file mode 100755
index 9ad0448..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/runner.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit/ui/console/testrunner'
-require 'test/unit/testsuite'
-$:.unshift File.expand_path(File.dirname($0))
-$:.unshift 'tests'
-require 'test_json'
-require 'test_json_generate'
-require 'test_json_unicode'
-require 'test_json_addition'
-require 'test_json_rails'
-require 'test_json_fixtures'
-
-class TS_AllTests
-  def self.suite
-    suite = Test::Unit::TestSuite.new name
-    suite << TC_JSONGenerate.suite
-    suite << TC_JSON.suite
-    suite << TC_JSONUnicode.suite
-    suite << TC_JSONAddition.suite
-    suite << TC_JSONRails.suite
-    suite << TC_JSONFixtures.suite
-  end
-end
-Test::Unit::UI::Console::TestRunner.run(TS_AllTests)
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json.rb
deleted file mode 100755
index d7e8288..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json.rb
+++ /dev/null
@@ -1,293 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json'
-require 'stringio'
-
-class TC_JSON < Test::Unit::TestCase
-  include JSON
-
-  def setup
-    $KCODE = 'UTF8'
-    @ary = [1, "foo", 3.14, 4711.0, 2.718, nil, [1,-2,3], false, true].map do
-      |x| [x]
-    end
-    @ary_to_parse = ["1", '"foo"', "3.14", "4711.0", "2.718", "null",
-      "[1,-2,3]", "false", "true"].map do
-      |x| "[#{x}]"
-    end
-    @hash = {
-      'a' => 2,
-      'b' => 3.141,
-      'c' => 'c',
-      'd' => [ 1, "b", 3.14 ],
-      'e' => { 'foo' => 'bar' },
-      'g' => "\"\0\037",
-      'h' => 1000.0,
-      'i' => 0.001
-    }
-    @json = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' +
-      '"g":"\\"\\u0000\\u001f","h":1.0E3,"i":1.0E-3}'
-  end
-    suite << TC_JSON.suite
-
-  def test_construction
-    parser = JSON::Parser.new('test')
-    assert_equal 'test', parser.source
-  end
-
-  def assert_equal_float(expected, is)
-    assert_in_delta(expected.first, is.first, 1e-2)
-  end
-
-  def test_parse_simple_arrays
-    assert_equal([], parse('[]'))
-    assert_equal([], parse('  [  ] '))
-    assert_equal([nil], parse('[null]'))
-    assert_equal([false], parse('[false]'))
-    assert_equal([true], parse('[true]'))
-    assert_equal([-23], parse('[-23]'))
-    assert_equal([23], parse('[23]'))
-    assert_equal([0.23], parse('[0.23]'))
-    assert_equal([0.0], parse('[0e0]'))
-    assert_raises(JSON::ParserError) { parse('[+23.2]') }
-    assert_raises(JSON::ParserError) { parse('[+23]') }
-    assert_raises(JSON::ParserError) { parse('[.23]') }
-    assert_raises(JSON::ParserError) { parse('[023]') }
-    assert_equal_float [3.141], parse('[3.141]')
-    assert_equal_float [-3.141], parse('[-3.141]')
-    assert_equal_float [3.141], parse('[3141e-3]')
-    assert_equal_float [3.141], parse('[3141.1e-3]')
-    assert_equal_float [3.141], parse('[3141E-3]')
-    assert_equal_float [3.141], parse('[3141.0E-3]')
-    assert_equal_float [-3.141], parse('[-3141.0e-3]')
-    assert_equal_float [-3.141], parse('[-3141e-3]')
-    assert_raises(ParserError) { parse('[NaN]') }
-    assert parse('[NaN]', :allow_nan => true).first.nan?
-    assert_raises(ParserError) { parse('[Infinity]') }
-    assert_equal [1.0/0], parse('[Infinity]', :allow_nan => true)
-    assert_raises(ParserError) { parse('[-Infinity]') }
-    assert_equal [-1.0/0], parse('[-Infinity]', :allow_nan => true)
-    assert_equal([""], parse('[""]'))
-    assert_equal(["foobar"], parse('["foobar"]'))
-    assert_equal([{}], parse('[{}]'))
-  end
-
-  def test_parse_simple_objects
-    assert_equal({}, parse('{}'))
-    assert_equal({}, parse(' {   }   '))
-    assert_equal({ "a" => nil }, parse('{   "a"   :  null}'))
-    assert_equal({ "a" => nil }, parse('{"a":null}'))
-    assert_equal({ "a" => false }, parse('{   "a"  :  false  }  '))
-    assert_equal({ "a" => false }, parse('{"a":false}'))
-    assert_raises(JSON::ParserError) { parse('{false}') }
-    assert_equal({ "a" => true }, parse('{"a":true}'))
-    assert_equal({ "a" => true }, parse('  { "a" :  true  }   '))
-    assert_equal({ "a" => -23 }, parse('  {  "a"  :  -23  }  '))
-    assert_equal({ "a" => -23 }, parse('  { "a" : -23 } '))
-    assert_equal({ "a" => 23 }, parse('{"a":23  } '))
-    assert_equal({ "a" => 23 }, parse('  { "a"  : 23  } '))
-    assert_equal({ "a" => 0.23 }, parse(' { "a"  :  0.23 }  '))
-    assert_equal({ "a" => 0.23 }, parse('  {  "a"  :  0.23  }  '))
-  end
-
-  begin
-    require 'permutation'
-    def test_parse_more_complex_arrays
-      a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
-      perms = Permutation.for a
-      perms.each do |perm|
-        orig_ary = perm.project
-        json = pretty_generate(orig_ary)
-        assert_equal orig_ary, parse(json)
-      end
-    end
-
-    def test_parse_complex_objects
-      a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
-      perms = Permutation.for a
-      perms.each do |perm|
-        s = "a"
-        orig_obj = perm.project.inject({}) { |h, x| h[s.dup] = x; s = s.succ; h }
-        json = pretty_generate(orig_obj)
-        assert_equal orig_obj, parse(json)
-      end
-    end
-  rescue LoadError
-    warn "Skipping permutation tests."
-  end
-
-  def test_parse_arrays
-    assert_equal([1,2,3], parse('[1,2,3]'))
-    assert_equal([1.2,2,3], parse('[1.2,2,3]'))
-    assert_equal([[],[[],[]]], parse('[[],[[],[]]]'))
-  end
-
-  def test_parse_values
-    assert_equal([""], parse('[""]'))
-    assert_equal(["\\"], parse('["\\\\"]'))
-    assert_equal(['"'], parse('["\""]'))
-    assert_equal(['\\"\\'], parse('["\\\\\\"\\\\"]'))
-    assert_equal(["\"\b\n\r\t\0\037"],
-      parse('["\"\b\n\r\t\u0000\u001f"]'))
-    for i in 0 ... @ary.size
-      assert_equal(@ary[i], parse(@ary_to_parse[i]))
-    end
-  end
-
-  def test_parse_array
-    assert_equal([], parse('[]'))
-    assert_equal([], parse('  [  ]  '))
-    assert_equal([1], parse('[1]'))
-    assert_equal([1], parse('  [ 1  ]  '))
-    assert_equal(@ary,
-      parse('[[1],["foo"],[3.14],[47.11e+2],[2718.0E-3],[null],[[1,-2,3]]'\
-      ',[false],[true]]'))
-    assert_equal(@ary, parse(%Q{   [   [1] , ["foo"]  ,  [3.14] \t ,  [47.11e+2] 
-      , [2718.0E-3 ],\r[ null] , [[1, -2, 3 ]], [false ],[ true]\n ]  }))
-  end
-
-  def test_parse_object
-    assert_equal({}, parse('{}'))
-    assert_equal({}, parse('  {  }  '))
-    assert_equal({'foo'=>'bar'}, parse('{"foo":"bar"}'))
-    assert_equal({'foo'=>'bar'}, parse('    { "foo"  :   "bar"   }   '))
-  end
-
-  def test_parser_reset
-    parser = Parser.new(@json)
-    assert_equal(@hash, parser.parse)
-    assert_equal(@hash, parser.parse)
-  end
-
-  def test_comments
-    json = <<EOT
-{
-  "key1":"value1", // eol comment
-  "key2":"value2"  /* multi line
-                    *  comment */,
-  "key3":"value3"  /* multi line
-                    // nested eol comment
-                    *  comment */
-}
-EOT
-    assert_equal(
-      { "key1" => "value1", "key2" => "value2", "key3" => "value3" },
-      parse(json))
-    json = <<EOT
-{
-  "key1":"value1"  /* multi line
-                    // nested eol comment
-                    /* illegal nested multi line comment */
-                    *  comment */
-}
-EOT
-    assert_raises(ParserError) { parse(json) }
-    json = <<EOT
-{
-  "key1":"value1"  /* multi line
-                   // nested eol comment
-                   closed multi comment */
-                   and again, throw an Error */
-}
-EOT
-    assert_raises(ParserError) { parse(json) }
-    json = <<EOT
-{
-  "key1":"value1"  /*/*/
-}
-EOT
-    assert_equal({ "key1" => "value1" }, parse(json))
-  end
-
-  def test_backslash
-    data = [ '\\.(?i:gif|jpe?g|png)$' ]
-    json = '["\\\\.(?i:gif|jpe?g|png)$"]'
-    assert_equal json, JSON.unparse(data)
-    assert_equal data, JSON.parse(json)
-    #
-    data = [ '\\"' ]
-    json = '["\\\\\""]'
-    assert_equal json, JSON.unparse(data)
-    assert_equal data, JSON.parse(json)
-    #
-    json = '["\/"]'
-    data = JSON.parse(json)
-    assert_equal ['/'], data
-    assert_equal json, JSON.unparse(data)
-    #
-    json = '["\""]'
-    data = JSON.parse(json)
-    assert_equal ['"'], data
-    assert_equal json, JSON.unparse(data)
-    json = '["\\\'"]'
-    data = JSON.parse(json)
-    assert_equal ["'"], data
-    assert_equal '["\'"]', JSON.unparse(data)
-  end
-
-  def test_wrong_inputs
-    assert_raises(ParserError) { JSON.parse('"foo"') }
-    assert_raises(ParserError) { JSON.parse('123') }
-    assert_raises(ParserError) { JSON.parse('[] bla') }
-    assert_raises(ParserError) { JSON.parse('[] 1') }
-    assert_raises(ParserError) { JSON.parse('[] []') }
-    assert_raises(ParserError) { JSON.parse('[] {}') }
-    assert_raises(ParserError) { JSON.parse('{} []') }
-    assert_raises(ParserError) { JSON.parse('{} {}') }
-    assert_raises(ParserError) { JSON.parse('[NULL]') }
-    assert_raises(ParserError) { JSON.parse('[FALSE]') }
-    assert_raises(ParserError) { JSON.parse('[TRUE]') }
-    assert_raises(ParserError) { JSON.parse('[07]    ') }
-    assert_raises(ParserError) { JSON.parse('[0a]') }
-    assert_raises(ParserError) { JSON.parse('[1.]') }
-    assert_raises(ParserError) { JSON.parse('     ') }
-  end
-
-  def test_nesting
-    assert_raises(JSON::NestingError) { JSON.parse '[[]]', :max_nesting => 1 }
-    assert_raises(JSON::NestingError) { JSON.parser.new('[[]]', :max_nesting => 1).parse }
-    assert_equal [[]], JSON.parse('[[]]', :max_nesting => 2)
-    too_deep = '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]'
-    too_deep_ary = eval too_deep
-    assert_raises(JSON::NestingError) { JSON.parse too_deep }
-    assert_raises(JSON::NestingError) { JSON.parser.new(too_deep).parse }
-    assert_raises(JSON::NestingError) { JSON.parse too_deep, :max_nesting => 19 }
-    ok = JSON.parse too_deep, :max_nesting => 20
-    assert_equal too_deep_ary, ok
-    ok = JSON.parse too_deep, :max_nesting => nil
-    assert_equal too_deep_ary, ok
-    ok = JSON.parse too_deep, :max_nesting => false
-    assert_equal too_deep_ary, ok
-    ok = JSON.parse too_deep, :max_nesting => 0
-    assert_equal too_deep_ary, ok
-    assert_raises(JSON::NestingError) { JSON.generate [[]], :max_nesting => 1 }
-    assert_equal '[[]]', JSON.generate([[]], :max_nesting => 2)
-    assert_raises(JSON::NestingError) { JSON.generate too_deep_ary }
-    assert_raises(JSON::NestingError) { JSON.generate too_deep_ary, :max_nesting => 19 }
-    ok = JSON.generate too_deep_ary, :max_nesting => 20
-    assert_equal too_deep, ok
-    ok = JSON.generate too_deep_ary, :max_nesting => nil
-    assert_equal too_deep, ok
-    ok = JSON.generate too_deep_ary, :max_nesting => false
-    assert_equal too_deep, ok
-    ok = JSON.generate too_deep_ary, :max_nesting => 0
-    assert_equal too_deep, ok
-  end
-
-  def test_load_dump
-    too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
-    assert_equal too_deep, JSON.dump(eval(too_deep))
-    assert_kind_of String, Marshal.dump(eval(too_deep))
-    assert_raises(ArgumentError) { JSON.dump(eval(too_deep), 19) }
-    assert_raises(ArgumentError) { Marshal.dump(eval(too_deep), 19) }
-    assert_equal too_deep, JSON.dump(eval(too_deep), 20)
-    assert_kind_of String, Marshal.dump(eval(too_deep), 20)
-    output = StringIO.new
-    JSON.dump(eval(too_deep), output)
-    assert_equal too_deep, output.string
-    output = StringIO.new
-    JSON.dump(eval(too_deep), output, 20)
-    assert_equal too_deep, output.string
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_addition.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_addition.rb
deleted file mode 100755
index 248b7c9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_addition.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json/add/core'
-require 'date'
-
-class TC_JSONAddition < Test::Unit::TestCase
-  include JSON
-
-  class A
-    def initialize(a)
-      @a = a
-    end
-
-    attr_reader :a
-
-    def ==(other)
-      a == other.a
-    end
-    
-    def self.json_create(object)
-      new(*object['args'])
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => self.class.name,
-        'args'        => [ @a ],
-      }.to_json(*args)
-    end
-  end
-
-  class B
-    def self.json_creatable?
-      false
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => self.class.name,
-      }.to_json(*args)
-    end
-  end
-
-  class C
-    def self.json_creatable?
-      false
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => 'TC_JSONAddition::Nix',
-      }.to_json(*args)
-    end
-  end
-
-  def setup
-    $KCODE = 'UTF8'
-  end
-
-  def test_extended_json
-    a = A.new(666)
-    assert A.json_creatable?
-    json = generate(a)
-    a_again = JSON.parse(json)
-    assert_kind_of a.class, a_again
-    assert_equal a, a_again
-  end
-
-  def test_extended_json_disabled
-    a = A.new(666)
-    assert A.json_creatable?
-    json = generate(a)
-    a_again = JSON.parse(json, :create_additions => true)
-    assert_kind_of a.class, a_again
-    assert_equal a, a_again
-    a_hash = JSON.parse(json, :create_additions => false)
-    assert_kind_of Hash, a_hash
-    assert_equal(
-      {"args"=>[666], "json_class"=>"TC_JSONAddition::A"}.sort_by { |k,| k },
-      a_hash.sort_by { |k,| k }
-    )
-  end
-
-  def test_extended_json_fail1
-    b = B.new
-    assert !B.json_creatable?
-    json = generate(b)
-    assert_equal({ "json_class"=>"TC_JSONAddition::B" }, JSON.parse(json))
-  end
-
-  def test_extended_json_fail2
-    c = C.new
-    assert !C.json_creatable?
-    json = generate(c)
-    assert_raises(ArgumentError) { JSON.parse(json) }
-  end
-
-  def test_raw_strings
-    raw = ''
-    raw_array = []
-    for i in 0..255
-      raw << i
-      raw_array << i
-    end
-    json = raw.to_json_raw
-    json_raw_object = raw.to_json_raw_object
-    hash = { 'json_class' => 'String', 'raw'=> raw_array }
-    assert_equal hash, json_raw_object
-    json_raw = <<EOT.chomp
-{\"json_class\":\"String\",\"raw\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
-EOT
-# "
-    assert_equal json_raw, json
-    raw_again = JSON.parse(json)
-    assert_equal raw, raw_again
-  end
-
-  MyJsonStruct = Struct.new 'MyJsonStruct', :foo, :bar
-
-  def test_core
-    t = Time.now
-    assert_equal t, JSON(JSON(t))
-    d = Date.today
-    assert_equal d, JSON(JSON(d))
-    d = DateTime.civil(2007, 6, 14, 14, 57, 10, Rational(1, 12), 2299161)
-    assert_equal d, JSON(JSON(d))
-    assert_equal 1..10, JSON(JSON(1..10))
-    assert_equal 1...10, JSON(JSON(1...10))
-    assert_equal "a".."c", JSON(JSON("a".."c"))
-    assert_equal "a"..."c", JSON(JSON("a"..."c"))
-    s = MyJsonStruct.new 4711, 'foot'
-    assert_equal s, JSON(JSON(s))
-    struct = Struct.new :foo, :bar
-    s = struct.new 4711, 'foot'
-    assert_raises(JSONError) { JSON(s) }
-    begin
-      raise TypeError, "test me"
-    rescue TypeError => e
-      e_json = JSON.generate e
-      e_again = JSON e_json
-      assert_kind_of TypeError, e_again
-      assert_equal e.message, e_again.message
-      assert_equal e.backtrace, e_again.backtrace
-    end
-    assert_equal(/foo/, JSON(JSON(/foo/)))
-    assert_equal(/foo/i, JSON(JSON(/foo/i)))
-  end
-
-  def test_utc_datetime
-    now = Time.now
-    d = DateTime.parse(now.to_s)                    # usual case
-    assert d, JSON.parse(d.to_json)
-    d = DateTime.parse(now.utc.to_s)                # of = 0
-    assert d, JSON.parse(d.to_json)
-    d = DateTime.civil(2008, 6, 17, 11, 48, 32, 1)  # of = 1 / 12 => 1/12
-    assert d, JSON.parse(d.to_json)
-    d = DateTime.civil(2008, 6, 17, 11, 48, 32, 12) # of = 12 / 12 => 12
-    assert d, JSON.parse(d.to_json)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_fixtures.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_fixtures.rb
deleted file mode 100755
index 665dcbd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_fixtures.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json'
-
-class TC_JSONFixtures < Test::Unit::TestCase
-  def setup
-    $KCODE = 'UTF8'
-    fixtures = File.join(File.dirname(__FILE__), 'fixtures/*.json')
-    passed, failed = Dir[fixtures].partition { |f| f['pass'] }
-    @passed = passed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
-    @failed = failed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
-  end
-
-  def test_passing
-    for name, source in @passed
-      assert JSON.parse(source),
-        "Did not pass for fixture '#{name}'"
-    end
-  end
-
-  def test_failing
-    for name, source in @failed
-      assert_raises(JSON::ParserError, JSON::NestingError,
-        "Did not fail for fixture '#{name}'") do
-        JSON.parse(source)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_generate.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_generate.rb
deleted file mode 100755
index f09e9d5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_generate.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-require 'test/unit'
-require 'json'
-
-class TC_JSONGenerate < Test::Unit::TestCase
-  include JSON
-
-  def setup
-    $KCODE = 'UTF8'
-    @hash = {
-      'a' => 2,
-      'b' => 3.141,
-      'c' => 'c',
-      'd' => [ 1, "b", 3.14 ],
-      'e' => { 'foo' => 'bar' },
-      'g' => "\"\0\037",
-      'h' => 1000.0,
-      'i' => 0.001
-    }
-    @json2 = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' +
-      '"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}'
-    @json3 = <<'EOT'.chomp
-{
-  "a": 2,
-  "b": 3.141,
-  "c": "c",
-  "d": [
-    1,
-    "b",
-    3.14
-  ],
-  "e": {
-    "foo": "bar"
-  },
-  "g": "\"\u0000\u001f",
-  "h": 1000.0,
-  "i": 0.001
-}
-EOT
-  end
-
-  def test_unparse
-    json = unparse(@hash)
-    assert_equal(JSON.parse(@json2), JSON.parse(json))
-    parsed_json = parse(json)
-    assert_equal(@hash, parsed_json)
-    json = generate({1=>2})
-    assert_equal('{"1":2}', json)
-    parsed_json = parse(json)
-    assert_equal({"1"=>2}, parsed_json)
-  end
-
-  def test_unparse_pretty
-    json = pretty_unparse(@hash)
-    assert_equal(JSON.parse(@json3), JSON.parse(json))
-    parsed_json = parse(json)
-    assert_equal(@hash, parsed_json)
-    json = pretty_generate({1=>2})
-    assert_equal(<<'EOT'.chomp, json)
-{
-  "1": 2
-}
-EOT
-    parsed_json = parse(json)
-    assert_equal({"1"=>2}, parsed_json)
-  end
-
-  def test_states
-    json = generate({1=>2}, nil)
-    assert_equal('{"1":2}', json)
-    s = JSON.state.new(:check_circular => true)
-    #assert s.check_circular
-    h = { 1=>2 }
-    h[3] = h
-    assert_raises(JSON::CircularDatastructure) {  generate(h) }
-    assert_raises(JSON::CircularDatastructure) {  generate(h, s) }
-    s = JSON.state.new(:check_circular => true)
-    #assert s.check_circular
-    a = [ 1, 2 ]
-    a << a
-    assert_raises(JSON::CircularDatastructure) {  generate(a, s) }
-  end
-
-  def test_allow_nan
-    assert_raises(GeneratorError) { generate([JSON::NaN]) }
-    assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true)
-    assert_equal '[NaN]', fast_generate([JSON::NaN])
-    assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) }
-    assert_equal "[\n  NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true)
-    assert_raises(GeneratorError) { generate([JSON::Infinity]) }
-    assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true)
-    assert_equal '[Infinity]', fast_generate([JSON::Infinity])
-    assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) }
-    assert_equal "[\n  Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true)
-    assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) }
-    assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true)
-    assert_equal '[-Infinity]', fast_generate([JSON::MinusInfinity])
-    assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
-    assert_equal "[\n  -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_rails.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_rails.rb
deleted file mode 100755
index c004860..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_rails.rb
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json/add/rails'
-require 'date'
-
-class TC_JSONRails < Test::Unit::TestCase
-  include JSON
-
-  class A
-    def initialize(a)
-      @a = a
-    end
-
-    attr_reader :a
-
-    def ==(other)
-      a == other.a
-    end
-    
-    def self.json_create(object)
-      new(*object['args'])
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => self.class.name,
-        'args'        => [ @a ],
-      }.to_json(*args)
-    end
-  end
-
-  class B
-    def self.json_creatable?
-      false
-    end
-
-    def to_json(*args)
-      {
-        'json_class'  => self.class.name,
-      }.to_json(*args)
-    end
-  end
-
-  class C
-    def to_json(*args)
-      {
-        'json_class'  => 'TC_JSONRails::Nix',
-      }.to_json(*args)
-    end
-  end
-
-  def setup
-    $KCODE = 'UTF8'
-  end
-
-  def test_extended_json
-    a = A.new(666)
-    assert A.json_creatable?
-    json = generate(a)
-    a_again = JSON.parse(json)
-    assert_kind_of a.class, a_again
-    assert_equal a, a_again
-  end
-
-  def test_extended_json_disabled
-    a = A.new(666)
-    assert A.json_creatable?
-    json = generate(a)
-    a_again = JSON.parse(json, :create_additions => true)
-    assert_kind_of a.class, a_again
-    assert_equal a, a_again
-    a_hash = JSON.parse(json, :create_additions => false)
-    assert_kind_of Hash, a_hash
-    assert_equal(
-      {"args"=>[666], "json_class"=>"TC_JSONRails::A"}.sort_by { |k,| k },
-      a_hash.sort_by { |k,| k }
-    )
-  end
-
-  def test_extended_json_fail1
-    b = B.new
-    assert !B.json_creatable?
-    json = generate(b)
-    assert_equal({ 'json_class' => B.name }, JSON.parse(json))
-  end
-
-  def test_extended_json_fail2
-    c = C.new # with rails addition all objects are theoretically creatable
-    assert C.json_creatable?
-    json = generate(c)
-    assert_raises(ArgumentError) { JSON.parse(json) }
-  end
-
-  def test_raw_strings
-    raw = ''
-    raw_array = []
-    for i in 0..255
-      raw << i
-      raw_array << i
-    end
-    json = raw.to_json_raw
-    json_raw_object = raw.to_json_raw_object
-    hash = { 'json_class' => 'String', 'raw'=> raw_array }
-    assert_equal hash, json_raw_object
-    json_raw = <<EOT.chomp
-{\"json_class\":\"String\",\"raw\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
-EOT
-# "
-    assert_equal json_raw, json
-    raw_again = JSON.parse(json)
-    assert_equal raw, raw_again
-  end
-
-  def test_symbol
-    assert_equal '"foo"', JSON(:foo) #  we don't want an object here
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_unicode.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_unicode.rb
deleted file mode 100755
index a91f4b5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tests/test_json_unicode.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'json'
-
-class TC_JSONUnicode < Test::Unit::TestCase
-  include JSON
-
-  def setup
-    $KCODE = 'UTF8'
-  end
-
-  def test_unicode
-    assert_equal '""', ''.to_json
-    assert_equal '"\\b"', "\b".to_json
-    assert_equal '"\u0001"', 0x1.chr.to_json
-    assert_equal '"\u001f"', 0x1f.chr.to_json
-    assert_equal '" "', ' '.to_json
-    assert_equal "\"#{0x7f.chr}\"", 0x7f.chr.to_json
-    utf8 = [ "© ≠ €! \01" ]
-    json = '["\u00a9 \u2260 \u20ac! \u0001"]'
-    assert_equal json, utf8.to_json
-    assert_equal utf8, parse(json)
-    utf8 = ["\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212"]
-    json = "[\"\\u3042\\u3044\\u3046\\u3048\\u304a\"]"
-    assert_equal json, utf8.to_json
-    assert_equal utf8, parse(json)
-    utf8 = ['საქართველო']
-    json = "[\"\\u10e1\\u10d0\\u10e5\\u10d0\\u10e0\\u10d7\\u10d5\\u10d4\\u10da\\u10dd\"]"
-    assert_equal json, utf8.to_json
-    assert_equal utf8, parse(json)
-    assert_equal '["\\u00c3"]', JSON.generate(["Ã"])
-    assert_equal ["€"], JSON.parse('["\u20ac"]')
-    utf8 = ["\xf0\xa0\x80\x81"]
-    json = '["\ud840\udc01"]'
-    assert_equal json, JSON.generate(utf8)
-    assert_equal utf8, JSON.parse(json)
-  end
-
-  def test_chars
-    (0..0x7f).each do |i|
-      json = '["\u%04x"]' % i
-      if RUBY_VERSION >= "1.9."
-        i = i.chr
-      end
-      assert_equal i, JSON.parse(json).first[0]
-      if i == ?\b
-        generated = JSON.generate(["" << i])
-        assert '["\b"]' == generated || '["\10"]' == generated
-      elsif [?\n, ?\r, ?\t, ?\f].include?(i)
-        assert_equal '[' << ('' << i).dump << ']', JSON.generate(["" << i])
-      elsif i.chr < 0x20.chr
-        assert_equal json, JSON.generate(["" << i])
-      end
-    end
-    assert_raises(JSON::GeneratorError) do
-      JSON.generate(["" << 0x80])
-    end
-    assert_equal "\302\200", JSON.parse('["\u0080"]').first
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tools/fuzz.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tools/fuzz.rb
deleted file mode 100755
index 8735963..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tools/fuzz.rb
+++ /dev/null
@@ -1,140 +0,0 @@
-$KCODE='UTF8'
-require 'json'
-
-require 'iconv'
-ISO_8859_1_TO_UTF8 = Iconv.new('utf-8', 'iso-8859-15')
-class ::String
-  def to_utf8
-    ISO_8859_1_TO_UTF8.iconv self
-  end
-end
-
-class Fuzzer
-  def initialize(n, freqs = {})
-    sum = freqs.inject(0.0) { |s, x| s + x.last }
-    freqs.each_key { |x| freqs[x] /= sum }
-    s = 0.0
-    freqs.each_key do |x|
-      freqs[x] = s .. (s + t = freqs[x])
-      s += t
-    end
-    @freqs = freqs
-    @n = n
-    @alpha = (0..0xff).to_a
-  end
-
-  def random_string
-    s = ''
-    30.times { s << @alpha[rand(@alpha.size)] }
-    s.to_utf8
-  end
-
-  def pick
-    r = rand
-    found = @freqs.find { |k, f| f.include? rand }
-    found && found.first
-  end
-
-  def make_pick
-    k = pick
-    case
-    when k == Hash, k == Array
-      k.new
-    when k == true, k == false, k == nil
-      k
-    when k == String
-      random_string
-    when k == Fixnum
-      rand(2 ** 30) - 2 ** 29
-    when k == Bignum
-      rand(2 ** 70) - 2 ** 69
-    end
-  end
-
-  def fuzz(current = nil)
-    if @n > 0
-      case current
-      when nil
-        @n -= 1
-        current = fuzz [ Hash, Array ][rand(2)].new
-      when Array
-        while @n > 0
-          @n -= 1
-          current << case p = make_pick
-          when Array, Hash
-            fuzz(p)
-          else
-            p
-          end
-        end
-      when Hash
-        while @n > 0
-          @n -= 1
-          current[random_string] = case p = make_pick
-          when Array, Hash
-            fuzz(p)
-          else
-            p
-          end
-        end
-      end
-    end
-    current
-  end
-end
-
-class MyState < JSON.state
-  WS = " \r\t\n"
-
-  def initialize
-    super(
-          :indent       => make_spaces,
-          :space        => make_spaces,
-          :space_before => make_spaces,
-          :object_nl    => make_spaces,
-          :array_nl     => make_spaces,
-          :max_nesting  => false
-         )
-  end
-
-  def make_spaces
-    s = ''
-    rand(1).times { s << WS[rand(WS.size)] }
-    s
-  end
-end
-
-n = (ARGV.shift || 500).to_i
-loop do
-  fuzzer = Fuzzer.new(n,
-                      Hash => 25,
-                      Array => 25,
-                      String => 10,
-                      Fixnum => 10,
-                      Bignum => 10,
-                      nil => 5,
-                      true => 5,
-                      false => 5
-                     )
-  o1 = fuzzer.fuzz
-  json = JSON.generate o1, MyState.new
-  if $DEBUG
-    puts "-" * 80
-    puts json, json.size
-  else 
-    puts json.size
-  end
-  begin
-    o2 = JSON.parse(json, :max_nesting => false)
-  rescue JSON::ParserError => e
-    puts "Caught #{e.class}: #{e.message}\n#{e.backtrace * "\n"}"
-    puts "o1 = #{o1.inspect}", "json = #{json}", "json_str = #{json.inspect}"
-    puts "locals = #{local_variables.inspect}"
-    exit
-  end
-  if o1 != o2
-    puts "mismatch", "o1 = #{o1.inspect}", "o2 = #{o2.inspect}",
-      "json = #{json}", "json_str = #{json.inspect}"
-    puts "locals = #{local_variables.inspect}"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tools/server.rb b/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tools/server.rb
deleted file mode 100755
index 9508311..0000000
--- a/spec10/public/webrat/test_app/gems/gems/json_pure-1.1.3/tools/server.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env ruby
-
-$KCODE='UTF8'
-require 'webrick'
-include WEBrick
-$:.unshift 'ext'
-$:.unshift 'lib'
-require 'json'
-
-class JSONServlet < HTTPServlet::AbstractServlet
-  @@count = 1
-
-  def do_GET(req, res)
-    obj = {
-      "TIME" => Time.now.strftime("%FT%T"),
-      "foo" => "Bär",
-      "bar" => "© ≠ €!",
-      'a' => 2,
-      'b' => 3.141,
-      'COUNT' => @@count += 1,
-      'c' => 'c',
-      'd' => [ 1, "b", 3.14 ],
-      'e' => { 'foo' => 'bar' },
-      'g' => "松本行弘",
-      'h' => 1000.0,
-      'i' => 0.001,
-      'j' => "\xf0\xa0\x80\x81",
-    }
-    res.body = JSON.generate obj
-    res['Content-Type'] = "application/json"
-  end
-end
-
-def create_server(err, dir, port)
-  dir = File.expand_path(dir)
-  err.puts "Surf to:", "http://#{Socket.gethostname}:#{port}"
-
-  s = HTTPServer.new(
-    :Port         => port,
-    :DocumentRoot => dir,
-    :Logger       => WEBrick::Log.new(err),
-    :AccessLog    => [
-      [ err, WEBrick::AccessLog::COMMON_LOG_FORMAT  ],
-      [ err, WEBrick::AccessLog::REFERER_LOG_FORMAT ],
-      [ err, WEBrick::AccessLog::AGENT_LOG_FORMAT   ]
-    ]
-  )
-  s.mount("/json", JSONServlet)
-  s
-end
-
-default_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'data'))
-dir = ARGV.shift || default_dir
-port = (ARGV.shift || 6666).to_i
-s = create_server(STDERR, dir, 6666)
-t = Thread.new { s.start }
-trap(:INT) do
-  s.shutdown
-  t.join
-  exit
-end
-sleep
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/CHANGELOG b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/CHANGELOG
deleted file mode 100644
index 6102eb0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/CHANGELOG
+++ /dev/null
@@ -1,1126 +0,0 @@
-== 0.9.8 "Time Machine" 2008-06-10
-
-* Pre-release contributors file update.
-* Nillify Merb.logger first.
-* Legacy Merb apps log again. And Merb tells you where it logs on boot unless you are testing.
-* Fixes up RSpec matcher for request helper
-* remove vestigal  @_template_stack variable.
-* remove rogure require no longer needed
-* compile templates with preambles to assign locals, support recompiling partial templates if previously unseen locals are provided
-* Add a note on Dictionary and inflection code to public changelog.
-* Nuke files that are already part of Extlib.
-* Update public changelog.
-* Fixed Merb::BootLoader::Router issue
-* -core now depends on most recent Extlib
-* Revert "Added MinimalPrivilege to merb.thor. Thanks namelessjon."
-* Fixed stats.rake to check if directory exists
-* Move inflection code and Dictionary to extlib.
-* Rakefiles should be empty by default (so RSpec is not pushed down test unit users' throat).
-* Added MinimalPrivilege to merb.thor. Thanks namelessjon.
-* Added Merb::BootLoader::Router
-* Improve public specs for logger. Use Mash for log levels.
-* Untabify logger.rb.
-* Allow Merb.disable(:signals) to keep Merb from installing any signal handlers.
-* Added the ability to specify resource actions in the block
-* Fixed bug where subgems (of meta-gems) weren't reinstalled each time
-* Added process title reporting as per: LH #517
-* Making the :key a synonym to :keys for Behavior#resource
-* Fixing the rspec error when running rake tasks
-* Cleaned up the specs. Removed any stray pending specs.
-* Added stacking and redirecting deferred routing blocks.
-* Removed private/dispatch/route_params_spec.rb
-* New spec helpers ported over. Old #request helper becomes #mock_request, which uses some mocking and stubbing to set up the request. The new #request API uses no mocking, and has the following API changes:
-* Removed spec/private/config
-* Added dependency 'foo', :immediate => true for loading dependencies immediately
-* call to_s in the csrf middlewre
-* make StreamWrapper more duck typed to the old body string.
-* If --log-level or --log is explicitly given, never log to STDOUT, alsways to file
-* If Merb.env?(:test) we don't need ugly  = true spread all over the place
-* use Proc === @body instead
-* Bring the console adapter's #url back into action
-* update specs for new rack stream_wrapper
-* Updating streaming methods to work on *all* rack adapters.
-* Make Merb::Config[]= work without calling setup 1st
-* Default to  = 'UTF8' - you can just set this in init.rb if needed
-* Colorful GemManagement
-* Removed unused directory under spec.
-* Reorganized URL generation methods across Controller classes
-* Added a :singular option to resource route building
-* merb -k works right
-* Fixes stupid issue in spec loader
-* Route matching handles slashes according to the RFC
-* Added the #resource controller helper for URL generation.
-* Fixes #503; raise InternalServerError works now.
-* We shouldn't use minigems explicitly in our code (yet)
-* Add missing pieces of forking awesomeness.
-* Executable wrappers use /usr/bin/env again - run them with /path/to/ruby -S if you need a specific Ruby version
-* Merge in forking branch.
-* Use trenary operator here.
-* capture returns return value of passed in block if it is not a template block
-* Updated PUBLIC_CHANGELOG regarding Merb::RakeHelper
-* reverts URI generation on requests
-* Updates full_uri for the changes to the Request#protocol
-* Reorganized merb-core/tasks/merb to require merb-core/tasks/merb_rake_helper (see merb-gen too)
-* Cleanup of tasks/merb_rake_helper.rb
-* Added :gemspec task to Rakefile
-* Fixed executable wrapper code (for loading local gems)
-* Added Merb::RakeHelper.install_package method to install packages directly
-* Merb::RakeHelper now handles local ./bin and GEM_DIR installs correctly
-* Rakefile now uses Merb::RakeHelper.install
-* Added GemManagement module - working towards new install/uninstall rake tasks
-* Removed Merb::BootLoader::ReloadTemplates; Merb::Config[:reload_templates] needs to be set explicitly
-* Marked Kernel#track_dependency as @api private - updated specs to reflect this
-* Added warning when specs are run without memcached being available
-* Refactored Kernel#dependency and #load_dependency to work with Gem::Dependency
-* Include request uri in routing exception raised by request helpers.
-* Added require 'thread' explicitly for Mutex to be available
-* Revert "Initial support for fast redeploys and code reloading via forks."
-* Revert "Split out the code transaction into a method and do some experimentation with cluster forking."
-* Revert "Better exit message"
-* Revert "Initial experiments are a success. TODO: Move the logic out of mongrel and make a proper clustering instead of hardcoding to 4"
-* Fixes issue people were having
-* Initial experiments are a success. TODO: Move the logic out of mongrel and make a proper clustering instead of hardcoding to 4
-* Split out the code transaction into a method and do some experimentation with cluster forking.
-* Better exit message
-* Initial support for fast redeploys and code reloading via forks.
-* Fixed that YAML plugin configuratator wasn't requiring YAML.
-* Reindent core_ext/kernel.rb.
-* Register dependencies even after the BootLoader has finished
-* Fixes Merb::Request#protocol to remove the ://.  May Break things in apps if you're checking protocol directly.
-* Moves actual url generation methods onto the request object from the controller.
-  Also updates the Merb::Request#redirect method to be usable just like the controller version.
-* Throw the correct error when generating a non existent route.
-* Modify throw_content to not append. Add append_content for that purpose.
-* Significant router refactoring and feature development
-* Run specs in groups
-* Added more discriptive message when a class fails to load
-* Optimized Merb::Request.query_parse - fixed silly spec
-* Update Rack application spec to reflect current affairs.
-* Document template_for.
-* Make merb fast again. Also make rake install work from any Ruby via -S
-* ControllerMixin#html_escape => #escape_html (bring it in line with #escape_xml).
-* Protected makes no sense for class methods.
-* Remove dead code from responder.
-* Adds abstract! and abstract? for controller classes for your inheritance pleasure
-* Server#add_irb_trap should play nice with ruby-debugger.
-* Reworked the Server#add_irb_trap to suppress the warnings.
-* added flag for an IRB trap
-* Add links to nginx_send_file examples: gist and app at GitHub.
-* Untabify fixture controller for streaming.
-* Make Merb::Controller#nginx_send_file more user friendly.
-* More fine-grained check to see if a local ./bin executable should have been used
-* Ignore products RDoc generates.
-* Include RDoc in the gem.
-* Ignore RDoc template cache.
-* Remove RDoc template cache from version control.
-* Session cookies now expire at the end of a browser session again (instead of 2 weeks)
-* Second attempt: fixed load_dependency (hopefully)
-* Fixed failing spec regarding 'dependency' change
-* Make flat! more useful
-* This rescue is obsolete and is obscuring useful failing information, as well as loading
-  from the system even when you require a specific version that isn't available in the bundled gems.
-* Clean before installation. Remove *.so and *.log under spec.
-* Make gem 3 times lighter.
-* Merb::Release is gone.
-* Bump up version
-* Set @_content_type before running transform blocks
-* sneaky merge failure piece that shouldn't be here
-* Revert "Add specs for action-level only_provides"
-* Revert "add specs for does_not_provide"
-* add specs for does_not_provide
-* Add specs for action-level only_provides
-* Make controller.route work
-
-
-== 0.9.7 "Universe In A Bundle" 2008-13-09
-
-* Made the post body available to the routing when testing a request.
-* Better local gems dir detection and end-user feedback
-* Updated PUBLIC_CHANGELOG regarding gem management and merb.thor
-* Fixed compatibility with the *new* bundle logic
-* Made request('/path', {}, {:post_body => 'some XML'}) not setting the post body to nil.
-* Added two specs for setting request.raw_post. Passes for #dispatch_to, fails for #request.
-* You can now use request_to with a post body:
-* It's official: Thor is now a dependency
-* Removed MerbScriptHelper - simplified loading bundled gems - see merb.thor
-* Bug Fix: Cookie headers not being formatted correctly
-* Added request.session.clear! method to clear and destroy the session (including the _session_id cookie itself)
-* Both memcache-client and memcached gems are supported by the session store
-* Added better query param parsing (naive but adequate) for nested params
-* Added specs to make sure blank cookie options aren't used for Set-Cookie
-* Fixed cookie issues in WebKit/Safari browsers
-* Log ControllerExceptions with error level and only ServerErrors with info.
-* Modified absolute_url to handle an object as well as a Hash
-* Touches to new sessions: doc and minor code improvements.
-* More meaningful exception message when no session container is configured.
-* Make it clear how session mixin makes it's way into controller.
-* Leave a note where new sessions doc needs to be improved.
-* Fix smart formatting.
-* Give smart people proper credit when you use their work.
-* Loosen extlib dependency a bit.
-* Meaningful message when Memcached session store can't be loaded because of load error.
-* Remove libxml-ruby and memcache-client dev dependencies.
-* Require memcached gem where memcached session store is defined (it's lazy loaded).
-* Meaninful message when have_xpath matcher is used but libxml-ruby fails to load.
-* Don't blow up when there are no system paths.
-
-== 0.9.6 "Therapy session" 2008-08-09
-
-* Merge in simple conditional get support at controller level.
-* Merged in new bundling (aka freezer) branch
-* Merged in new-sessions branch
-* Simplify one more clever line.
-* Trenary operator is always hard to read.
-* Added PUBLIC_CHANGELOG note on Language::English::Inflector => English::Inflect
-* Filters with procs created via class methods have identical signatures regardless if they handle content differently or not. So modified add_filter to just append procs to the filter list.
-* Consolidating raw Rakefile commands to merb-core/tasks/merb_rake_helper.rb
-* Update contributors list.
-* Ticket #461 - This simply adds output for what host and port the adapter has started on.
-* More Language::English::Inflect to English::Inflect changes - getting ready for Extlib move soon
-* Language::English::Inflect => English::Inflect name changes
-* Use frozen strings where possible.
-* First pass at adding in CSRF protection in to Rack middleware.
-* Query string of the format "foo=bar&foo=baz" should return params {"foo" => "baz"}
-* Fixed multiple select not honored in params bug
-* Public specs for 'fragment' changes in url.
-* AbstractController now uniformly uses instance_eval for Procs where previously
-* Renamed anchor to fragment along with some minor tweeks to follow rfc2396 better.
-* Add support for :anchor when generating url's. Ex. url(:root, :anchor => :lower_half).
-* Revert "Make Merb::Request#protocol return valid protocol names (http, not http://)."
-* Adds specs for previous commit
-* Fixes display @object, :template => "path/to/foo"
-* Clean up Rakefile.
-* Remove a line of extra code
-* Set cookie expires to nil when session_expiry is set to 0.
-* ConditionalGet refactoring.
-* Fix: ConditionalGet should not return the message body when the status code is 304.
-* Rescue Exception subclasses, not only StandardError subclasses.
-* Make Merb::Request#protocol return valid protocol names (http, not http://).
-* Add :protocol and :host options to absolute_url
-* extends basic authentication a bit to allow usage outside of before filters
-
-== 0.9.5 "Knife and Spoons" 2008-26-08
-* Add Hpricot to dependencies: provided RSpec matchers depend on it.
-* Documentation fixes
-* Make Rack application set Date header as required by RFC2616.
-* Port Django's conditional GET middleware to Rack.
-* Fix passenger issue
-* Make Autotest consume less CPU by adding excludes.
-* Add extract! experimentally
-* Adds dev deps on rake install
-* Add necessary dev dependencies
-* Make route_to(...).with matcher work properly with empty hashes
-* Make Merb::Request#query_parse a bit faster.
-* Speed up dispatcher specs by using libxml
-* throw :halt, nil spec
-* More rigid specs
-* merb-core really cannot use >= with extlib 0.9.3 at this point, so update gemspec
-* Use Logger from Extlib
-* Fix issue with Safari having weird ordering by fixing the issue in general.
-* Fixes up a bunch of specs
-* Add ContentLength middleware.
-* Rename Rack middleware spec file
-* Add Tracer middleware.
-* Improve the documentation of AbstractController.
-* Move Merb::Rack::Middleware#deferred\? to Merb::Rack::Application.
-* No longer use Pathname for Merb.root and friends.
-* fixed merb_erb bug
-* readded _generator_scope methods with deprecation warnings
-* added use_template_engine method and removed generator_scope code that is no longer needed
-* Add clear_content to renderer
-
-== 0.9.4 "Leave No Broken Windows" 2008-12-08
-* Update required Ruby version to 1.8.6.
-* Make dispatch_to set params[:controller] and params[:action].
-* Update RedirectTo matcher documentation.
-* redirect_to matcher now has :message option
-* Adds some detail to the public changelog
-* Fix rakefile
-* Make history Rake tasks work again.
-* Add contributors file.
-* Add Rake tasks that list and update contributors file.
-* A bit more readable spec example titles. Follow one assertion per test rule.
-* Make Merb::Controller#send_file set header with respect to Rack specification.
-* Removed TODO in Dispatcher#handle.
-* More updates to Merb::Request methods documentation.
-* Document Router#route_for(request).
-* Document some new Request methods.
-* Doc correction: Request#params returns instance of Mash.
-* Doc correction: Request#body_and_query_params returns instance of Mash.
-* ! for methods that change the receiver
-* Remove old code
-* Moves session fixation into request
-* re-add permanent redirects
-* Don't need this spec anymore.
-* More work on the dispatcher.
-* Documentation improvement + improvement in division of responsibilities.
-* Before moving stuff into the Rack adapter.
-* Additional refactor of the default Exceptions to use an actual Merb controller. Almost ready for a merge. Yeehaw!
-* Even more awesome dispatcher improvements.
-* Fixes an issue with status symbols
-* Class extensions spec moved to Extlib.
-* Move all accessors in AbstractController to the top so one can see them easily.
-* We don't need this anymore
-* Continues dispatch refactor. Exceptions now maintain a stack that is reported in the case of exceptions that, themselves, throw exceptions.
-* Document :with option of filters.
-* Fixed a typo in AbstractController documentation.
-* Extra specs and love to Merb::Controller._session_*
-* Added fixture config/init.rb
-* Resolved conflict after cherry-pick of 9d1a11ff.
-* Fixtures and pending specs for controller/cookie store integration.
-* Re-set session cookie expiry and friends once init file/configuration is loaded.
-* Two more specs for class_inheritable_accessor.
-* Make spec for #342 do correct assertions.
-* Fixed a bug where changes to inherited controller filters would bleed acrosss siblings
-* the dispatcher specs
-* Add more edge-case specs to Dispatcher and make sure they pass.
-* Make Cookie#set_cookie handle more options. Improve spec coverage.
-* Refactor Dispatcher.handle to reduce complexity
-* Fix some ruby warnings
-* Added flog tasks to rake
-* add in stats task
-* Forgotten changes to Rakefile.
-* resource urls with additional params
-* Remove double-start in Thin adapter.
-* Merb::SimpleSet => Extlib::SimpleSet
-* merb-extlib => extlib
-* add spec for empty raw_post on xml content type
-* make sure to resuce JSON parse errors and return {}
-* Use Pathname in some more places, fix breakages.
-* Added more documentation for some of the extra options available to #partial
-* Temp commit.
-* Relative :template paths can be extensionless again.
-* Oops - forgot some files...
-* Fixed nasty bugs in controller/mixins/responder and its specs.
-* Reworded the documentation for #partial a little bit
-* Added some documentation for the new partial collection counter
-* Slight refactoring of the partial method
-* Adding views for the new partial collection counter specs
-* Adding the current index and collection size for partials rendered with a collection
-* Use gem release task that's in Extlib now.
-* If someone can figure out why this is already defined, please let me know
-* Yeah... not a good idea
-* ADd push_paths to the load path.
-* another tiny tweak
-* Fixes open IO issue
-* Switch to merged extlib.
-* Use Pathname in some more places, fix breakages.
-* Move to merb-extlib is almost there.
-* Output a warning about merb-extlib if it can't be loaded.
-* Applying patch to allow use of thin_turbo adapter. Thanks dkubb!
-* Did I really commit that?
-* Use :info as default log level for now: people wonder "where the output is gone".
-* Make sure default config has log level of error so template inlining bootloader won't dump everything to the tty.
-* Do not reference to old merb.yml in doc.
-* whoops... dup
-* Add support for argument capture and fix $DEBUG bootloader stuff [#390 state:resolved]
-* Ignore temp Emacs files.
-* Generate tags only for lib.
-* Adds Rake tasks to generate Emacs tags.
-* Touch RDoc of LoadClasses bootloder.
-* LoadClasses#remove_file => LoadClasses#remove_classes_in_file.
-* Output extra information on boot when verbose config option is given from
-* Make Logger bootloader print meaningful warning when RubyGems is outdated.
-* capture_erb correctly passes arguments to the block again
-* Let world know what this delete vs. destroy thing is all about.
-* Add support for OPTIONS
-* display doesn't throw an error if a layout is not found, even if one is specified (because of class-wide layout options)
-* throw_content now concatenates, not replaces, content
-* Added view for throw_content spec
-* Clean up resource regexps after ; separator is gone.
-* @@parent_resources, not @@parent_resource
-* Semicolon as action separator for resources is no longer supported: breaks basic http auth in Safari.
-* Small doc update.  Thanx jackdempsey
-* Adds message support (like flash in Rails but with somewhat different semantics)
-* Add .tmproj to the list of ignores
-* Fix bug with :status
-* Spec for :status in display
-* display handles :status and :location
-* Improved RDoc of Merb#load_dependencies.
-* script/frozen-merb => merb-freezer in RDoc
-* Adjusted logging message for thin sockets vs ports.
-* Added socket option to thin.rb and to the command line options.
-* send_file opens files in 'rb' binary mode so windows doesn't shit itself
-* added add_generators, which allows plugins to load their own generator in the same way as rakefiles
-* fix nginx_send_file
-* Spec for previously applied patch to Behavior#defer_to.
-* use Route#register in defer_to so that deferred routes get an index
-* Make Autotest ignore doc/ as well.
-* Ensure Autotest ignores changes in log directory.
-* Add helpers directory to load path
-* Modules don't get duped right.
-* Redo Merb's inheritable_accessors so that they have correct semantics, then redo everything that uses inheritable_accessors so they don't have to hack around the bad semantics.
-* Added spec for the route matcher testing regexp routes. [#386]
-* Add Merb.started? alias for Merb.started reader.
-* Add reader for @started flag which shows when Merb environment is started.
-* Update memory session storage documentation.
-* Use warn logger level instead of debug, if session persisting fails.
-* FileUtils#touch only added mtime option in ruby 1.8.6. let's use File#utime instead
-* better log message
-* rescue excpetions in Worker thread, log them and then restart the work queue
-* Router now can do r.match("/this/old/url").redirect("/where/this/resides/now").
-* Refactor Merb::Test::RequestHelper and introduce build_request helper.
-* spoke too soon.
-* we actually don't need to log this at all as its logged latert in the _benchmarks
-* Update link to wiki page on Rack in exception.
-* Add link to Rack page at wiki to Controller not found exception. This confuses people a lot.
-* Log namespaced controller name when it's class is not found.
-* I will test first next time, I promise.
-* Tell what's actually started when Dispatcher begins to handle request.
-* Fixed typo in yet another exception message.
-* Log an info message when route fixation actually happens. Those heavily using Flash will find it helpful.
-* Log a warning if controller class cannot be found.
-* A bit more verbose exception message when route does not specify a controller.
-* Documentation: add deprecation warning to AbstractController. Manually applied patch from dstar.
-* Increase header level on sub-headers of Filters in AbstractController
-* Fixes request helper bug [#378: resolved]
-* Fixes case of :format being ignored.
-* If the spec.opts file exists, use it.
-* use Thread.pass to avoid running newly queued item before the action's thread finishes
-* Added Merb::Worker. You can now add a block to be run in a separate thread
-* Let's try again, this time with <% end =%>
-* Try #concat to resolve some issues.
-* One more time.
-* Should handle denormalized multiline blocks now.
-* wycats needs to learn to escape pipes.
-* Make Merb::Plugins.config[:foo] default to {}
-* Long lines make wycats' eyes' bleed. Plus, why do all those .joins twice?
-* jackdempsey's inflector improvements (backported from wycats' patch to Rails)
-* Fixes typo.
-* <%= now takes a block in Erubis. Erubis buffer now an ivar (@_erb_buf) so eval is no longer required for capture. Helpers that take a block should now return a string.
-* Fixes the after filters
-* Reorganize experimental stuff.
-* Additional slight efficiency and readability improvement.
-* Improve speed of content-type=. 5% speed on hello world requests.
-* Improve the speed of _perform_content_negotiation (and got 10% better speed on requests)
-* Old stuff that should be committed.
-* Speed up synonym lookup by order of magnitude :(
-* add Merb::Rack::Profiler middleware. to use add the following to your config/rack.rb file:
-* update license
-* Missing require
-* require 'stringio'
-* Add support for non-standard template reloading. Plugin authors need to override load_template_io to handle special reloading logic.
-* Add support for IO templates instead of just paths. See PLUGIN_API_CHANGELOG for details.
-* add swiftiplied mongrel rack adapter.
-* Swapped the order of helper and controller in the default_framework
-* Why should capture be private?
-* Merb::Config[:framework] now needs absolute paths to work (breaks BC)
-* Merb::Config[:framework] paths now pickup files using glob **/*.rb unless specified otherwise
-* Don't automatically use Facebook signature
-* Fixes failing spec.
-* make the default rake task 'specs' so running rake in merb-core just runs the specs
-* Rename @status to @_status
-* Avoid adding nil values in place of missing keys for Hash#only
-* Fix issue with null segments
-* Fixed session cookie expires value [#366 state:resolved]
-* Made HTTP method override proc-based and pluggable. [#364]
-* siiiiiigh.
-* Revert partial counter and yielding.
-* Remove some duplication
-* For crying out loud.
-* Refactor display. WARNING: This commit might not be stable. I need to add a bunch more specs for display before I feel confident.
-* Make the TemplateNotFound error read better. Slight refactor of _get_layout.
-* Fix _template_for so it's actually readable
-* uhhhhhhhh...
-* Added Merb::Router.reset! and Merb::Router.capture
-* Speedup Route URL generation
-* Start work on fixing contaminated cousins bug.
-* Changed controller inheritance of _template_root
-* Added the ability to use full/absolute template paths for render, display and partial views
-* This cannot be tested this way. It needs to be tested as a public spec (testing it privately here was a cop-out and fails when I fixed up the way dependency works).
-* Allows passage of query string via env["QUERY_STRING"] in tests. [#358 state:resolved]
-* Handles use of dependency after BootLoading. [#360 state:resolved]
-* properly set the session_id_key
-* added 2 specs for multipart formdata: (1) for checking request with IO, (2) for testing GET with content_type not erroring on multipart/form-data absence; fixed error with multipart/form-data absence.
-* Made Class a lot more sane.
-* Fix README for merb-gen app foo
-* Do not duplicate work Merb::Template.template_extensions does in Templates bootloader.
-* Make exception message when Merb cannot find template explain what it was
-* Fixed 2 problems with multipart form upload after application is deployed to Tomcat via warble: (1) The @body object in this environment is an IO object, not a StringIO, so doesn't have a size method, and (2) 'tempfile' needs to be explicitly required.
-* made only and except uglier and faster
-* Preserve order parse query, respect query string override in test request
-* Added partial counter and yielding for collections
-* Remove occasionly committed *.rbc files.
-* Ignore *.rbc created by Rubinius compiler.
-* Send the route into the controller
-* Add Merb::Request.browser_method_workarounds
-* Revert ca92bdfc89afda04cbb4fd3d3e5848648cc0b326
-* Refactored Merb::BootLoader::LoadClasses.reload into an additional remove_file method for other usage
-* Fixed some failing specs
-* Added rake :audit namespace to list routes, controllers and actions
-* Remove occasionly committed *.rbc files.
-* Ignore *.rbc created by Rubinius compiler.
-* Make obj.full_const_get more robust
-* forgot to comment out the text
-* added DHH copyright notice to conre_ext/class.rb
-* Better usage of merb_rake_helper.rb
-* Added tasks/merb_rake_helper.rb - removed it from merb-more
-* Refactored Merb::Controller.callable_actions
-* Fixing bug in the rspec route matcher.
-* More useful error for display errors
-* Make load_paths a dictionary so models load first.
-* Added Merb::Template.template_extensions as a semi-public method for getting known template extensions
-* Prevent anonymous controller classes from making a Helper module
-* We've Been Dup'd! - fixed nasty bug concerning class inheritable attrs
-* Added Object.full_const_set
-* Add helper for full_uri
-* Adds a timestamp to a requests output
-* Fixed documentation examples for dispatch spec helpers
-* Added public method Merb::BootLoader::LoadClasses.load_classes(*paths)
-* Only do the rubygems hack if it's needed and deal with cases where people are using the Gem cache library without using the commands.
-* Updated docs on Merb#merge_env
-* Merb Personalized Environments; Completed Merb#merge_env method, now accepts boolean parameter to optionally use the merged environments database connection
-* fix typo in spec
-* Check to see if the session responds to :data
-* make nice for windows - remove app level loading (is handled in rakefile in merb-more now
-* Typos
-* YARD conversion of set.rb and time.rb
-* YARD conversion of rubygems.rb
-* YARD conversion of object_space.rb
-* YARD conversion of object.rb
-* YARD conversion of mash.rb
-* YARD conversion of kernel.rb
-* YARD conversion for hash.rb
-* Convert class.rb over to YARD.
-* Convert string.rb over to YARD format.
-* Patch for missing inner_content method bug in HasTag
-* Correct lable and line number in Router#compile
-* Make merb.show_routes show named routes a bit more verbose.
-* Make merb.show_routes a bit more verbose.
-* Use single symbol instead of Array for ORM/test framework generator scopes.
-* Add links to source at GitHub to boot diagram
-* Merb core boot diagram is done and prettified
-* Add support for a :session_cookie_domain config option to allow for setting the session cookie's domain.
-* Add more advanced nested routes examples to Merb::Router::Behavior#match documentation.
-* Add a bunch of pretty advanced spec examples for nested matches in routes.
-* Code clean-up behavior.rb
-* Created Documentation for new #match functionality
-* Changes to behavior.rb to allow for :controller, :actions and :params options to be passed in
-* Implemented Merb::Router::Behavior#match! that is a shortcut for match(...).to({}).
-* Improve Merb boot diagram.
-* Make each subsequent call to use_orm just replace effect of previos.
-* Remove WIP spec for Merb::Router::Behavior#redirect.
-* fix typo in request_spec.rb
-* Needs to raise here since if the generator scope has more than one ORM the geneartors will not work.
-* Log instead of raising when dependencies mechanism this ORM required twice.
-* Get rid of Kernel#registered_orm?, it is no longer in use.
-* Make Kernel#registred_orm? use simple include lookup.
-* Fix spec and Kernel#registred_orm? conditions bug.
-* Fix a typo.
-* Fixed erronous documentation in Merb::Router::Behavior
-* Working on Behaviour#redirect feature: stashing changes.
-* update callable_actions to exclude any methods beggining with an _underscope
-* Adds template-checking code to branch where :with option is specified in partials.
-* Add two notes on layout method versus :layout option of render method.
-* Forget to add template for added spec example.
-* Add spec example for render :layout => false that overrides layout.
-* More sweet empty lines management in controller fixtures.
-* Clean up empty lines in fixture controller.
-* Fix _template_for documentation: content type does not default to nil.
-* Update render method documentation, we support :layout => false.
-* JSON objects that do not inflate to hashes should populate params[:inflated_object] (Ticket #316)
-* update new rack middleware machinery to be more merb style in the bootloader
-* Changed MerbDispatch to MerbApplication. Fixed error in deferred? call chain.
-* More flexible composition of merb application
-* Start implementing Merb::Router::Behavior#redirect.
-* A note on condition block and deferred routes.
-* Note on thread safety of routes compilation.
-* Explain what Merb::Router does and what routes compilation is.
-* Explain how "form used by Merb::Router" is often referred.
-* Be explicit on what Merb::Router::Route#if_condition actually does and how it is used.
-* Add a note that Merb::Router::Route#generate uses #to_param on parameters.
-* Be explicit on what Merb::Router::Route#generate actually does.
-* Add a note to Merb::Router::Route#name documentation.
-* Add note on string representation of routes.
-* More explicit documentation for Merb::Router::Router#register.
-* Add section on fixation of routes.
-* Another take on better Merb::Router::Route documentation.
-* New Merb::Router::Route documentation probably got a bit better.
-* Something that looks like detailed Merb::Router::Route but needs a lot of work.
-* Add first naive spec examples for Merb::Router::Route#compile.
-* Use .prepare when we do not really need .prepend
-* Made sure default format response_header can set explicit Content-Type header
-* Default format response_headers cannot overwrite runtime-set (controller) headers
-* Mirror plural spec from singular. Fix a couple of revealed failures.
-* Actually implemented Merb.add_mime_type's new_response_headers
-* Add cases that were failing in pluralization specs to singularization spec.
-* Fix failures in pluralization specs. Add more cases.
-* spec/private/vendor/inflector => spec/private/vendor/facets
-* Pluralization spec examples.
-* Move singularization specs to separate file.
-* More spec examples for inflector.
-* Improve spec coverage of inflector.
-* Improve inflector spec coverage: separate cases into groups.
-* Fix a typo exposed by spec suite.
-* Initial set of spec examples for inflector.
-* Changed vague :request_headers term into :accepts (meaning HTTP Accept header)
-* Sweet empty lines management in spec helper.
-* Increase sleep time reloader spec.
-* Unwanted change to autotest slipped in, must get better at git
-* More reliable reloader test with fewer sleeps
-* remove :nodoc: from merb-core DO NOT USE :nodoc: EVAR!!
-* More lower-level spec examples for Merb::Router::Route.
-* More lower-level specs for Merb::Routing::Route.
-* Initial set of lower-level specs for Merb::Router::Route methods.
-* Rename file with extra unit specs for Merb::Router
-* Removed extra comment.
-* Finished Merb::Router unit-ish spec.
-* Initial lower-level specs for router.
-* Fix for users with spaces in gem path
-* Add missing specs for route fixation.
-* Add matched_route_for spec helper to get raw Route instance.
-* Exclude unwanted files from rcov analysis.
-* Make Rakefile respect GEM_HOME. Thanks Corey Jewett.
-* Add extra output lines to Merb::Server methods if verbose mode is on.
-* Add -V/--verbose options.
-* Improve documentation of session persist/finalize exception callbacks.
-* Initial specs for Merb::SessionMixin
-* Tiny documentation touchups
-* Require RubyGems first before spec to satisfy Autotest.
-* Exception handler callbacks for finalize_session and persist
-* Update Merb core boot diagram a bit.
-* Documentation for Merb::BootLoader::DropPid bootloader.
-* add in string so that @element.contains? will work when @element is a string and not just Hpricot::Elem
-* remove hpricot as a merb-core dependency since it is never loaded at runtime.
-* Merb::BootLoader::Templates now uses _template_roots not just _template_root
-* add in support for core tasks, and first core task -- routes
-* Fix Webrick support by preferring REQUEST_PATH over REQUEST_URI
-* Changed Merb::BootLoader::BeforeAppRuns into Merb::BootLoader::BeforeAppLoads which matches Merb::BootLoader::AfterAppLoads
-* Added option to Controller#redirect(url, permanent) so 301 responses can be returned as well
-* Bump version in core to 0.9.4.
-* Pump version to 0.9.4.
-* throw argument error when filter receives an invalid option
-* spec for ticket 307
-* Update GitHub gemspec.
-* fixed description of daemonize spec in Merb::Config
-* Trick Git: change SHA1 of tree to push recent binary files changes.
-* Add PNG version of call stack diagram
-* Add call stack diagram source file, in Mind Manager format.
-* Add expanded call stack diagram: probably Git does not work perfectly with binary diffs.
-* Temporarily wipe out call stack diagram
-* Expand all nodes on call stack diagram.
-* Add Merb core call stack (yet to be finished).
-* Fixed cruddy doc comments.
-* Remove nil items from params when generating routes
-* Fixed typo in resource rdoc
-* cleaned up a bit. removed dependency on to_params value in controller test.
-* added ability to set the Location header with display and render
-* remove useless complexity from the logger.
-* 0.9.3 changelog
-* Remove special case for dm-core in use_orm
-* removing __app_file_trace__  since it doesn't work.
-* Add Emacs TAGS to ignore
-* Explain Merb application layouts in documentation.
-* Benchmarks
-* Allow http status to be a symbol - refactored String snake_case method
-* Explain how to set up /lib autoload in documentation.
-* Make change_priveledge actually work
-* bump merb-core version to 0.9.3 in prep for release.
-* Add new -R/--rackup option to the full(-ish) list of options.
-* Provide opts for alternate rackup config path. This is consistent with --rackup option for thin and gives a little more freedom to specify the rackup config (instead of being forced to rack.rb).
-* Testing Merb::Test::RequestHelper#request method to properly handle namespaced routes
-* test request helpers support namespaced routes
-* Added parentheses to be_kind_of to get rid of warnings when running application_spec.rb
-* Fixing pidfiles glob on cluster and pidfile argument
-* replaced nested 'if' with an 'elseif'
-* params array serialization
-* Added handling of INT signal for Merb server in foreground mode
-* Remove redundant unescape for cookie string
-* Ensure that Merb::Logger doesn't try to close terminal streams.
-* Ensure that Merb::Logger doesn't try to close terminal streams.
-* Added support for multiple keys to designate a resource. For use with Datamapper composite keys support http://www.datamapper.org/articles/spotlight_on_cpk.html
-* Make Provide controller matcher doc conform to Merb standards.
-* Whoops. Had target and expected backwards.
-* Added Provide matcher class, so you can do "controller.should provide( :xml )" in your specs.
-* completed spec to Merb::Logger#new
-* Adding missing info about ebb adapter.
-* Show merb usage if first argument is not a switch
-* Fix a spelling error and properly RDoc'ify a method name
-* Fix bug in --very-flat (allow direct inheritance from Merb::Controller)
-* Changed copyright date in footer of HTML pages from 2007 to 2008
-* Append the content_type to the given :template option for render()
-* Replaced remaining ::STATUS constant references to .status method calls
-* Refactored Exception status handling/inheritance (it actually works now!)
-* Make Inflector#plural and Inflector#singular conform to Merb doc standard.
-* Update inflector documentation.
-* Tiny docs update to Merb::Server.
-* Example (from merb_sequel) and corrections to the way Merb finds out plugins Rakefiles.
-* Docs updates for lib/merb-core.rb.
-* Reasonable doc examples for Merb.push_path and Merb.remove_paths.
-* Fix for kill so that cli options are read and handled before kill is actually called. Need this to handle kill under custom pid file scenario.
-* Updating pidfile cluster fix to handle any extension.
-* Adding support for pidfile setting with cluster nodes setting. Moving pid file path lookup to separate method.
-* Correction to Merb::GlobalHelper.log_path docs.
-* Use Notes instead of Note in docs.
-* Use Notes instead of Note everywhere in docs.
-* Add reference to Merb configuration options list to #config method docs.
-* Wording (Merb::GlobalHelpers.testing? docs).
-* Better docs for configuration parameters.
-* Document Merb configuration options in one place.
-* Another note on framework freezing in docs.
-* Add explaination of freezing to the documentation
-* Add a note on supported session types.
-* Insert line for viewing convenience.
-* Make Merb::GlobalHelpers.deferrable_actions conform to Merb documentation standard.
-* Missing documentation for Merb::GlobarHelpers.deferred_actions
-* Update Kernel#__profile__ documentation.
-* make in? splat args
-* Add Object#in? for checking array inclusion
-* Removed dependency on memcache-client 'memcache_util.rb' which was dependent on ActiveRecord::Base for logging exceptions.
-* Update documentation to reflect changes in the way #display handles custom options.
-* Make #display method pass all 'unknown' options to serialization method.
-* Adds the github gemspec file
-* Adds Code for generating a gemspec for github
-* Adds a question method to determine environment.  eg Merb.env?(:production)
-* Give useful information when no template is found for a partial
-* Really resolve merge conflicts.
-* Provide hook for param filtering
-* hopefully the last fix for session fixation, woot woot
-* Be clear about what is the default init file Merb uses in RDoc.
-* A bit clearer --init-file option description.
-* Fix header shown in help: Merb is not longer 'Mongrel + Erb, a lightweight replacement for ActionPack' but a framework on it's own.
-* Correct doc in Merb::Controller: it uses SimpleSet for callable actions at the moment.
-* Document Merb::SimpleSet
-* Remove InvalidPathConversion exception: it is used nowhere in the core.
-* Update homepage in gem specification.
-* Clean up String extensions spec.
-* Remove it, hopefully no one seen it.
-* Add a note on drawbacks of usage of ObjectSpace.
-* Use a constant for reload spec instead of hardcoding time in 5 places or so.
-* Revert "Refactor ToHashParser#from_xml a bit to be able to use parser faster than REXML. It is planned to support Hpricot and fall back to REXML."
-* Use @ in publicity markers in RDoc.
-* Use a constant for sleep time in reloading specs
-* Refactor ToHashParser#from_xml a bit to be able to use parser faster than REXML. It is planned to support Hpricot and fall back to REXML.
-* Empty lines management, how cool is that?
-* Missing specs and improved documentation for Hash#to_mash.
-* Tiny improvement to Object extensions documentation. More empty line management.
-* One more example for Object#full_const_get; new spec group for Object#make_module.
-* Missing specs for Object#full_const_path.
-* Sweet empty lines management, what a wonderful way to apply yourself to.
-* Kick off Class extensions spec-ing.
-* Document inheritable attributes Class extension the Merb way, not ActiveSupport way with :nodoc:
-* Remove Emacs-generated cruft from specs directory.
-* Add missing specs for Class#reset_inheritable_attributes.
-* Split Kernel#use_test into smaller methos. Document them. Add specs for them beforehand.
-* Empty lines management, wonderful way to waste priceless time.
-* Kernel#already_registred_orm? is a sucky name. Make it Kernel#registred_orm?. Yay.
-* Split Kernel#use_orm guts into a bunch of smaller methods. Document those.
-* Add missing specs for Kernel#dependencies and Kernel#load_dependencies.
-* Pretty naive spec examples for Kernel#load_dependency.
-* Add missing specs for Kernel#dependency
-* Split 'misc' examples group in Kernel extensions spec: each method should have a separate group, ever.
-* Clean up empty lines in Kernel extensions.
-* Documentation for String#relative_path_from
-* Add missing specs for String extensions.
-* Remove helper that duplicated String#camel_case functionality, update the rest of spec suite.
-* Fix a nasty String#camel_case bug revealed but new shiny spec for String extensions.
-* Better formatting of spec suite run benchmark with good old sprintf.
-* Use RSPEC_OPTS environment variable to override default spec run options.
-* Report total spec suite run time.
-* Add spec command run options to run_specs. Add tasks for profiled spec run.
-* Unify &block documentation across Merb::Test::RequestHelper
-* Fix example in Merb::Test::RequestHelper#request documentation.
-* If deferred_actions are empty? we want a regex that will never match.
-* More polish for deferred_actions support. Thin, Ebb and EMongrel adapters
-* deferred?(env) now works with thin and ebb.
-* Fixed some its vs. it's issues. (Learning git :)
-* added delete action to docs
-* Added error message for when a content_type is requested but not provided
-* Syncronized code with rails branch. Delete call is required, because user cookie must be cleaned when TamperedWithCookie is raised.
-* Specs using a method that called must_support_streaming! weren't recognizing the custom NotImplemented error. This change fixes this issue by specifying the entire object chain for its usage within the method.
-* Fix number of examples in HTTP authentication spec.
-* first step to adding deferred?(env) support for ebb and thin
-* Use a dictionary instead of a Hash.
-* Changed the display method to handle options properly, so that passing :layout => :false works.  Added specs.
-* Added \- to String.unescape_regexp
-* added HasContent matcher
-* Standardises the call to set_cookie to use the set_cookie method in cookies.rb by default
-* Fix cookie sessions bug where you could not properly delete a cookie
-* should not delete the key
-* pass arguments to filters
-* Added thrown_content? predicate method for use in templates.
-* Added ability to specify :format in url() for named routes
-* modified specs to test a route restriction based on the type of request (POST, GET, UPDATE, DELETE)
-* Added 'use_orm :dm_core' option to use datamapper 0.9.0 with the dm-merb gem from dm-more
-* fixed example for dispatch_with_basic_authentication_to
-* Fixed typo
-* reverted mistakenly introduced change in abstract controller
-* added documentation
-* slight fix to basic auth spec
-* added support and specs for http basic authorization
-* added dispatch helper for http basic authentication
-* HTTP Basic authentication based on Rack
-* Fixed lurking infinite loop with not so common formats and ExceptionController
-* Refactored Merb::AbstractController.layout class method
-* _dispatch returns @body
-* really truly(?) fix stream_file ?
-* really make sure stream_file works
-* redo stream_file to (hopefully) work
-* Added Time#to_json to Core Extensions, making the default JSON formatted output for Time objects ISO 8601 compatible.
-* Added + unescape to String#unescape_regexp
-* Added String#unescape_regexp for usage in Router::Route#generate
-* BootLoader::LoadClasses now logs the actual exceptions
-* add mutex around compiled statement generation in the router so reloading doesn't step
-* Revert ExampleGroup changes as they were causing failing specs
-* Added render(template_path) feature to view specs.
-* RSpec ExampleGroups for Merb controllers, views, helpers, models and routes.
-* Prep 0.9.2
-* Resolves #209
-* * removed Merb.logger calls due to the fact the bootloader did not ran by now and it is not initialized.
-* use __send__ rather than send
-* Fixed exception setting route when route_index is nil
-* memoize the raw_post body after its called once
-* fix Request#raw_post to respect bodies with no rewind method
-* remove Kernel#requires it wasn't being used.
-* Move fixation to post initialize
-* typo
-* add specs for does_not_provide
-* Add specs for action-level only_provides
-* Make controller.route work
-* Update Ebb adapter to work with latest Ebb 0.1.0 [Ry Dahl]
-* fix PATH_INFO bug for fcgi
-* Rename url_with_host to absolute_url
-* Add url_with_host() and allow params to be pushed into FCGI adapter
-* More correct to_json of dictionary.
-* Modify dispatcher to be sane to XHRs; add to_json to dictionaries.
-* Added html_escape around the exception.message in the show details section.
-* Fixed bug not allowing have_tag to be called without a attribute hash, even when one is not desired
-* fix typo
-* refactor and clean up Merb::BootLoader::Dependencies [James Herdman]
-* ticket 202
-* This keeps erroring out, i hope it didnt commit multiple times:
-* Merb::BootLoader::LoadClasses should keep unique list of classes
-* Logger now works as expected, fixed ReloadClasses bootloader
-* Fixes cookie sessions when the session is blanked out.
-* catch_content should default to :for_layout
-* Added --sandbox (-S) option for IRB console
-* Fixes the dispatch_to request helper to conver the action name to a string.
-* Added Merb.testing? method
-* Fixed critical bug in LoadClasses BootLoader concerning reloading
-* Important changes to the BootLoader process
-* Added Kernel.load_dependencies method; better docs/comments.
-* Bugfixes concerning BootLoader and load order in general
-* fully qualify fcgi rack handler
-* Set mongrel as default adapter unless other alternative options are specified
-* Fix configuring session_id_key so that it works
-* url(:foo, 3) should notice 3 is a Fixnum, and use it instead of 3.id
-
-== 0.9.3 "We Sold Our Soul for Rock 'n' Roll" 2008-05-03
-* Added render(template_path) feature to view specs.
-* add mutex around compiled statement generation in the router so reloading doesn't step
-* BootLoader::LoadClasses now logs the actual exceptions
-* Added String#unescape_regexp for usage in Router::Route#generate
-* Added Time#to_json to Core Extensions so JSON formatted output for Time is ISO 8601 compatible
-* redo stream_file to (hopefully) work
-* _dispatch returns @body
-* Refactored Merb::AbstractController.layout class method
-* Fixed lurking infinite loop with not so common formats and ExceptionController
-* HTTP Basic authentication based on Rack
-* added dispatch helper for http basic authentication
-* added support and specs for http basic authorization
-* modified specs to test a route restriction based on the request method
-* Added ability to specify :format in url() for named routes
-* Added thrown_content? predicate method for use in templates.
-* pass arguments to filters
-* Fix cookie sessions bug where you could not properly delete a cookie
-* Standardises the call to set_cookie to use the set_cookie method in cookies.rb by default
-* added HasContent matcher
-* Added \- to String.unescape_regexp
-* Changed the display method to handle options properly, so that passing :layout => :false works.
-* Added error message for when a content_type is requested but not provided
-* added delete action to docs
-* deferred?(env) now works with thin and ebb.
-* If deferred_actions are empty? we want a regex that will never match.
-* Fix example in Merb::Test::RequestHelper#request documentation.
-* Unify &block documentation across Merb::Test::RequestHelper
-* Add spec command run options to run_specs. Add tasks for profiled spec run.
-* Report total spec suite run time.
-* Use RSPEC_OPTS environment variable to override default spec run options.
-* Better formatting of spec suite run benchmark with good old sprintf.
-* Fix a nasty String#camel_case bug revealed but new shiny spec for String extensions.
-* Remove helper that duplicated String#camel_case functionality, update the rest of spec suite.
-* Split 'misc' examples group in Kernel extensions spec: each method should have a separate group
-* Split Kernel#use_orm guts into a bunch of smaller methods. Document those.
-* Kernel#already_registred_orm? is a sucky name. Make it Kernel#registred_orm?. Yay.
-* Split Kernel#use_test into smaller methos. Document them. Add specs for them beforehand.
-* Use a constant for sleep time in reloading specs
-* Use @ in publicity markers in RDoc.
-* Remove InvalidPathConversion exception: it is used nowhere in the core.
-* A bit clearer --init-file option description.
-* Be clear about what is the default init file Merb uses in RDoc.
-* hopefully the last fix for session fixation, woot woot
-* Provide hook for param filtering
-* Give useful information when no template is found for a partial
-* Adds a question method to determine environment.  eg Merb.env?(:production)
-* Make #display method pass all 'unknown' options to serialization method.
-* Add Object#in? for checking array inclusion
-* Update Kernel#__profile__ documentation.
-* Adding support for pidfile setting with cluster nodes setting.
-* Updating pidfile cluster fix to handle any extension.
-* Fix for kill so that cli options are read and handled before kill is actually called.
-* Refactored Exception status handling/inheritance (it actually works now!)
-* Replaced remaining ::STATUS constant references to .status method calls
-* Append the content_type to the given :template option for render()
-* Fix bug in --very-flat (allow direct inheritance from Merb::Controller)
-* Show merb usage if first argument is not a switch
-* Adding missing info about ebb adapter.
-* completed spec to Merb::Logger#new
-* Added Provide matcher class, so you can do "controller.should provide( :xml )" in your specs.
-* Added support for multiple keys to designate a resource. For use with Datamapper composite keys
-* Ensure that Merb::Logger doesn't try to close terminal streams.
-* Remove redundant unescape for cookie string
-* Added handling of INT signal for Merb server in foreground mode
-* params array serialization
-* Fixing pidfiles glob on cluster and pidfile argument
-* test request helpers support namespaced routes
-* Testing Merb::Test::RequestHelper#request method to properly handle namespaced routes
-* Provide opts for alternate rackup config path.
-* Add new -R/--rackup option to the full(-ish) list of options.
-* Make change_priveledge actually work
-* Allow http status to be a symbol - refactored String snake_case method
-* removing __app_file_trace__  since it doesn't work.
-
-== 0.9.2 "appropriate response to reality" 2008-03-24
-* removed Merb.logger calls due to the fact the bootloader did not ran by now and it is not initialized.
-* use __send__ rather than send
-* Fixed exception setting route when route_index is nil
-* memoize the raw_post body after it's called once
-* fix Request#raw_post to respect bodies with no rewind method
-* remove Kernel#requires it wasn't being used.
-* Move fixation to post initialize
-* add specs for does_not_provide
-* Add specs for action-level only_provides
-* Make controller.route work
-* Update Ebb adapter to work with latest Ebb 0.1.0 [Ry Dahl]
-* fix PATH_INFO bug for fcgi
-* Rename url_with_host to absolute_url
-* Add url_with_host() and allow params to be pushed into FCGI adapter
-* More correct to_json of dictionary.
-* Modify dispatcher to be sane to XHRs; add to_json to dictionaries.
-* Added html_escape around the exception.message in the show details section.
-* Fixed bug not allowing have_tag to be called without a attribute hash, even when one is not desired
-* refactor and clean up Merb::BootLoader::Dependencies [James Herdman]
-* Merb::BootLoader::LoadClasses should keep unique list of classes
-* Logger now works as expected, fixed ReloadClasses bootloader
-* Fixes cookie sessions when the session is blanked out.
-* catch_content should default to :for_layout
-* Added --sandbox (-S) option for IRB console
-* Added Merb.testing? method
-* Fixes the dispatch_to request helper to conver the action name to a string.
-* Added Merb.testing? method
-* Fixed critical bug in LoadClasses BootLoader concerning reloading
-* Important changes to the BootLoader process
-* Added Kernel.load_dependencies method; better docs/comments.
-* Bugfixes concerning BootLoader and load order in general
-* fully qualify fcgi rack handler
-* Set mongrel as default adapter unless other alternative options are specified
-* Fix configuring session_id_key so that it works
-* url(:foo, 3) should notice 3 is a Fixnum, and use it instead of 3.id
-* make load order of core_ext explicit
-* Modifies before/after in BootLoader to actually work.
-* ix not-available vs. not-provided bug in content negotiation
-* Fixed display bug which caused default error exception pages to improperly display drop-down twirly if the path name exceeded the line length.
-* remove symbolize_keys! as we don't use it anywhere. by now..
-* Rework bootloader to make more sense for flat apps (specifically framework load)
-* More fixes to the flat autoloader
-* remove custom_* resource route, use :member or :collection instead
-* fix logger specs
-* Fixes bug with framework not being defined.
-* make sure logger bang! methods do not flush unless the proper log level is used.
-* Updates the request spec to account for the new from_xml behaviour
-* Adds specs and changes for compatibility with ActiveSupport.  There is one caveat.  It will not change YAML generated Hash keys to strings if they are defined as symbols as is currently the behaviour of ActiveSupport.
-* update the logger. no longer accept an optional block to call.
-* remove some vestigal config defaults
-* Add rack adapter for Ebb, damn it's fast!
-* coerce the port to an integer when starting mongrel (jruby compat)
-* remove specs for dependency as they were broittle and not testing the right thing.
-* Fixes #155 (_perform_content_negotiation doesn't find */* if it comes last in the accept header order, and nothing else matches)
-* Changes use_test to wrap only the call to dependencies in the check for Merb.environment == "test"
-
-== 0.9.1 "Some are half-wild, and some are just outlaws." 2008-02-29
-
-* Put spec tasks into namespaces and method for specifying pnly a certain model/controller/view to run against
-* As a last resort, look for */* in the formats before throwing NotAcceptable (TODO: Clean this up)
-* Fix perform_content_negotiation to correctly handle :format in params. Fix render_* to correctly return the correct content_type.
-* remove hooks.rb, they were premature and only used in one place
-* fix evented mongrel to not go crazy
-* Calling /foo.pdf should throw a 406 if :pdf is not a registered mime.
-* touch up dispatcher a bit, remove some un-needed code from the hot path
-* fix dispatcher to not parse the params twice, still supports request_params
-* fix Exception in exception.html.erb
-* moved rspec rake tasks into core.  Added Merb.rakefiles, which is now used by Merb::Plugins.rakefiles.  Changed Kernel#use_test to only load dependency arguments when Merb.env is nil or test.
-* do not load test framework unless Merb.env == 'test'
-* Use new Object.make_module to create the module instead of old hackish solution.
-* Don't clear our mimes previously defined.
-* Fixed clean task deleting everything in the lib folder
-* Kernel#dependency requires gems/files in a before_app_loads block.
-* Move dependency loading after framework and look for framework.rb
-* Creates helper stub modules for controllers.
-* fix blank path error.
-* Cooler errors
-* add named routes to error page
-* updates to nested resources
-* get autotest working for merb-core
-* Symbolize params in route generation, to accomodate Mashes
-* Fixes :status not working on strings.
-* update thin adapter to newest way of silencing the log
-* :format => :html possible in partials
-* print request URI when "No routes match the request" error thrown
-* fix merb -i
-* Make Merb.start default to the runner adapter
-* It's now possible to send binary data using the send_data method
-  and to specify the disposition, filename and type of the data being sent.
-* Fix memcached session writes
-* allow the setting of a custom session key
-* Changed TemplateNotFound to stop so much confusion about incorrect
-  template locations because it doesn't include .*
-* fix dropping of pid files in cluster and daemon mode
-* Nested partials don't blow away locals.
-* Better loading of classes
-* Support concat and test capture/concat
-* Added single key assignment to Merb.config
-* Move url method from ControllerMixin to AbstractController for use in
-  Mailers and Parts etc.
-* Merb.config now returns Merb::Config instead of the current
-  configuration hash.
-* Added Merb.reload which reloads the framework classes.
-* Adding Merb.env shorthand for Merb.environment
-* Added a quaint Merb Configurator
-* With bootloader order changes, environment was not getting loaded
-* Fix cookie parsing from localhost, add spec
-* Add support for multiple template roots
-* Allow override of router.rb file in config
-* Modify behavior of 'namespace' in the router
-* Fix content negotiation for IE and its stupid accept header.
-* Only serve static files when the HTTP method is GET or HEAD. Other
-  requests should still be handled by Merb.
-* Add path_prefix support.
-* Changes dispatch_to spec helper to yield the controller
-* redo of load_dependency, after_app_loads callback, and Kernel changes
-* Added Merb.logger.auto_flush
-* Fix nested resource routing
-* Do not drop PID file is not running as daemon or cluster
-* Fixed problem with resources inside a namespace block
-* Added support for dynamic layouts.
-* adding conditional behaviour to filters :if and :unless
-* Use the escape_xml from Erubis rather than rolling our own
-* Add a merb.reload! command to the merb -i console.
-* Get rid of StringScanner dependency.
-* Fix render_then_call to support new streaming tech.
-* Fix filter specs to respect append order of filters.
-* check for empty string before calling to_sym on the format parameter
-* fake requests are incorrectly loading controller classes with namespaces
-* Fix the RubyGems monkeypatch by testing for Merb.root instead of looking in $"
-* fix core spec dependency on merb_rspec
-* Replace calls to puts with Merb.logger
-* Fix problem with static files, use Proc === body
-* Added file and line information for evals in router.rb.
-
-== 0.9.0 "All you need, none you don't" 2008-02-13
-* Developer Only Release
-* Split merb into merb-core and merb-more
-
-== 0.5.3 "Inexperienced With Girls" 2008-01-28
-* Improved handling of models/controllers with dependencies
-* Improved cluster starting/stopping
-* Frozen script/merb should really work now
-* Merb::Cookies is used for cookie jar purposes
-* test_helper no longer assumes rspec mocking framework
-* asset bundler handles strings and symbols
-* render() now has an option for explicitly rendering an object
-* Fixed annoying bug in exception rendering for 500 internal_server_error
-* testing request helper accepts an option hash
-
-== 0.5.2 "Great White North" 2008-01-14
-* Make Merb.load_paths accessible for modification
-* Fix issues with running frozen apps
-
-== 0.5.1 "Electic Boogaloo" 2008-01-10
-* Fix 0.5.0
-
-== 0.5.0 "Thanks Zed" 2008-01-09
-* Added asset bundling for Javascript and stylesheet files
-
-== 0.4.2 "Surf's up." 2007-12-14
-* Super-huge speed boost for rendering Erubis templates with partials
-* Windows-specific fixes to Merb's Rakefile
-* Blocking write is called when in development, test, Windows and jRuby environments and platforms.
-* merb_helpers: form field labels are now explicit, huge documentation update, added select, fieldset, more helpers
-* Fixed merb.show_routes within merb -i
-* Fixed image_tag, css_include_tag, and js_include_tag to work with path_prefix
-* Adds spec helper methods with_route and dispatch_to
-* fix rakefile cfor cygwin
-* add count with collection to partial()
-* Form control mixin is deprecated Use merb_helpers plugin.
-* add redirect matcher to rspec test helpers
-* allow r.resource(:foo, :myparam => 42) resource routes pass on params to underlying match() call
-* spit out error and help message if you call merb with no args
-* get rid of dependency on mongrel for escape and unescape
-* make sure not to use write_nonblock when logging to STDOUT
-* Fixed image_tag, css_include_tag, and js_include_tag to work with path_prefix
-* fix set_status to actually work, add docs,
-* config/merb.yml is now correctly loaded from Rake and test environment - using Merb::Server.load_config
-* added config option to disable loading of the JSON gem - still enabled by default 
-* don't raise if names local on a partial is nil
-* Use svn export instead of checkout upon merb:freeze_from_svn
-* Extracted url and other general methods out of ControllerMixin into GeneralControllerMixin
-* fix caching of @_buffer in render, form_for
-* Seperates spec helpers into the Merb::Test namespace to prevent spec methods leaking into specs
-* Changes the spec url helper method to the same used in the controller
-* Made Request#parse_multipart return an empty hash instead of nil if the request is not multipart
-* Changes throw_content so that it can be called without a block
-* Added :namespace option to routes.
-
-== 0.4.1 "Faster Partials or Partially Faster?" 2007-11-12
-* Fixed pluralization issues with generators
-* Resource generators are much improved
-* url() helper now supports nested resources
-* url(:post, @post) observers @post.new_record? and adjusts accordingly
-* Fixed bug with empty Accept headers
-* Added config/boot.rb to load framework from gems or framework/ dir
-* New partial() is much faster (and less buggy)
-* render :partial no longer supported
-* Add a buffered logger
-* Fixes bug with parameterized actions on some platforms
-* partial can now be called on collections:
-*  partial("widget", :with => @new_widgets, :as => "widget")
-* SMTP mailer now supports non-AUTH setups
-* set_status() can take symbolic codes like :not_found
-* JRuby compat fixes
-* Speed boost, esp. with rendering
-* Fix spec_helper running against development database
-* Fix major bug with sessions not working
-
-== 0.4.0 "This ain't yo mommas merb" 2007-11-06
-
-== 0.3.7 "Out of the basement" 2007-08-05
-
-== 0.3.4 "Route fixer" 2007-05-31
-
-== 0.3.3 "Hey buddy can you spare a route generator?" 2007-05-31
-
-== 0.3.1 "The Fixed and the Furious" 2007-04-30
-
-== 0.3.0 "The Fast and the Furious" 2007-04-28
-
-== 0.2.0 "Accept your fate and respond_to change" 2007-03-18
-
-== 0.1.0 "Generation Herb" 2007-01-18
-
-== 0.0.9 "merb is the new black" 2007-01-14
-
-== 0.0.8 "Merbivore" 2006-12-17
-
-== 0.0.7 "Lean and mean merbing machine" 2006-11-29
-
-== 0.0.6 "The Black Belt Release" 2006-11-09
-
-== 0.0.5 "The getting real release" 2006-11-01
-
-== 0.0.4 "The toddler phase" 2006-10-26
-
-== 0.0.3 "the switchblade suicide release" 2006-10-17
-
-== 0.0.2 "the quicksliver release" 2006-10-16
-
-== 0.0.1 "The pocket rocket release" 2006-10-15
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/CONTRIBUTORS b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/CONTRIBUTORS
deleted file mode 100644
index ef17155..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/CONTRIBUTORS
+++ /dev/null
@@ -1,133 +0,0 @@
-Use merb? Say thanks the following people:
-
-Aaron Wheeler
-Abhay Kumar
-Adam Jacob
-Andy C
-Andy Delcambre
-Antti Tarvainen
-Ben Burkert
-Ben Chiu
-Ben Griffiths
-Bradly Feeley
-Brandon Dimcheff
-Brandon Mitchell
-Brian Mitchell
-Bryan Ray
-Carl Lerche
-Carlos Villela
-Charles Jolley
-Cheah Chu Yeow
-Chris Van Pelt
-Coda Hale
-Cory ODaniel
-Cristi Balan
-Damian Terentiev
-Daniel Neighman
-Daniel Schierbeck
-Daniel Siemssen
-David James
-Debian User
-Diego Scataglini
-Dirkjan Bussink
-Dr Nic
-Drew Colthorp
-Duane Johnson
-Dudley Flanders
-Eric D. White
-Ezra Zygmuntowicz
-Fabien Franzen
-Flea
-Foy Savas
-Gabe
-Geoffrey Grosenbach
-Gert Goet
-Glenn Rempe
-Goh Toh Chye
-Grant Hollingworth
-Guillaume Maury
-Hampton Catlin
-Ho-Sheng Hsiao
-Jack Dempsey
-Jakub Šťastný aka Botanicus
-James Herdman
-James Whiteman
-Janne Asmala
-Jarkko Laine
-Jaroslaw Zabiello
-Jed Hurt
-Jonas Nicklas
-Jonathan Stott
-Jonathan Younger
-Josh Nichols
-Justin Pease
-Justin S. Leitgeb
-Kyle Drake
-Lachie Cox
-Lance Carlson
-Loren Segal
-Lori Holden
-Maciej Piechotka
-Martin Grund
-Mason Browne
-Matt Aimonetti
-Matt Todd
-Matthew Ford
-Matthew Windwer
-Matthijs Langenberg
-Max Aller
-Max Lapshin
-Michael D'Auria
-Michael D. Ivey
-Michael Holub
-Michael Klishin
-Michael Latta
-Michael S. Klishin
-Michael Sheakoski
-Mirko Froehlich
-Nathan Weizenbaum
-Nick Dufresne
-Nicos Gollan
-Nikos Dimitrakopoulos
-Oliver Jakubiec
-Paul Barry
-Paul Boone
-Paul Carey
-Ray Morgan
-Rich Cavanaugh
-Richard Grundy
-Rob Ares
-Rob Kaufman
-Ross Lawley
-Sergey Molodtsoff
-Seth Thomas Rasmussen
-Shalon Wood
-Shay Arnett
-Simon Jefford
-Simon Rozet
-Sindre Aarsaether
-StarTrader
-Steve Tooke
-Thomas Reynolds
-Tim Kofol
-Tyler Hunt
-Tymon (teamon) Tobolski
-Wayne E. Seguin
-Wayne Larsen
-Wesley Beary
-Will Prater
-William Smith
-Wilson Bilkovich
-Yehuda Katz
-Zach Holt
-atmos
-booss
-brainopia
-gert at pacificstarfish.net
-jonas
-jonuts
-macournoyer
-mde
-michael.s.klishin at gmail.com
-rick
-wvl
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/LICENSE b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/LICENSE
deleted file mode 100644
index b450b28..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2008 Engine Yard Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/PUBLIC_CHANGELOG b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/PUBLIC_CHANGELOG
deleted file mode 100644
index 84e4cb0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/PUBLIC_CHANGELOG
+++ /dev/null
@@ -1,157 +0,0 @@
-10/06/2008:
-
-* Use -L option or :log_file or :log_stream in init.rb or env init file
-  to point logger where you want.
-
-10/05/2008:
-* Merb does not add spec tasks to Rakefiles list by default. Add
-  require "merb-core/test/tasks/spectasks" in your existing Rakefiles
-	explicitly. This is done so that test unit users do not get spec
-	tasks they do not need down their throat in any merb application,
-	even running on just -core.
-
-* Dictionary and inflection code are now parts of Extlib library and shared
-  with other frameworks that use it (DataMapper, Halcyon, Mack, etc).
-
-9/26/2008:
-* For Merb developers, Rakefile features a new implementation of the :install
-  and :uninstall tasks. These will work with Gems directly, without running
-  the intermediate commands on the shell. This means 'sudo' is now explicitly
-  needed when installing gems system-wide; implicit sudo (prompt) is considered   
-  harmful. The new code will write appropriate executable wrappers that feature 
-  local gem loading and minigems usage. All gems in -more and -core now use this
-  new (un)install procedure.
-
-9/25/2008:
-* Merb::Config[:reload_templates] needs to be set explicitly in 
-  config/environments/development.rb - which is true for newly generated apps.
-  Previously Merb.env?(:development) meant that reload_templates was enabled.
-  Since we don't want to depend on Merb.env like that, we're using Merb::Config.
-
-9/24/2008:
-* Kernel#dependency and Kernel#load_dependency will now register the requested
-  dependency on Merb::BootLoader::Dependencies.dependencies. Doing so creates a
-  Gem::Dependency instance, which will be returned from these methods. 
-  Before, an Array of [name, ver] was returned. Working with Gem::Dependency 
-  makes the dependency information more uniform, regardless of the original 
-  version requirements.
-
-9/13/2008:
-* Merb apps will always give priority to gems that are available locally in
-  Merb.root / gems. Because of the specific load order, you will need to use
-  bin/merb to load merb-core from local gems, as detailed below. This is also
-  the case for bin/merb-gen, bin/rake and bin/spec for example. The added 
-  advantage is that your app will be completely independent from system gems.
-
-* Thor tasks 'merb.thor' have been added for newly generated apps; regenerate
-  your app to get them; alternatively these are available on merbivore.com:
-  
-  http://merbivore.com/merb.thor
-  
-* Release 0.9.6 introduced 'merb-gen scripts' which added script/merb and
-  script/merb-gen. However, now that merb.thor provides tasks to manage
-  bundled gems, we can directly extract the correct executables. To follow the
-  standard convention, these will be installed in ./bin instead of ./script.
-  
-  With merb.thor installed, run the following to get started:
-  
-  $ thor merb:tasks:setup # adds bin/thor, bin/rake etc.
-  
-  As soon as you install other gems using merb.thor you'll have the required
-  bin executables available; these are setup so that running them will load
-  merb-core from the local gems dir, not from the system-wide rubygems.
-  
-  To get bin/merb and bin/merb-gen for a fresh application, you can use:
-  
-  $ thor merb:stable -a mongrel # install a full merb stack from stable rubygems
-  
-  Alternatively, you can install from the bleeding edge:
-  
-  $ thor merb:edge --install # install a full merb stack from github
-  $ thor merb:gems:install mongrel # or ebb, thin...
-  
-9/5/2008:
-* Language::English::Inflector is now English::Inflect - be sure to change your
-  custom inflections in config/init.rb. Additionally, the merb-gen template 
-  config/init.rb has been changed to document the features accordingly.
-
-9/2/2008:
-* AbstractController now uniformly uses instance_eval for Procs where previously
-  the controller instance (self) was passed as an argument:
-  - Procs thrown during dispatch 
-  - Procs used as before/after filters
-  - Procs used as conditions to before/after filters
-  
-  This means that code like this:
-  
-  proc { |c| c.a_controller_method }
-  
-  Becomes the following for the cases mentioned:
-  
-  proc { a_controller_method }
-
-8/29/2008:
-* The directory Merb.root / 'framework' is now gone - framework gems are
-  expected to be installed as local gems in Merb.root / 'gems':
-  sudo gem install merb -i ./gems
-* The notion of a frozen application setup (using bundled gems) is now known
-  as a bundled setup; Merb.frozen? => Merb.bundled? By default an app uses
-  bundled gems (the -B or --bundle options to merb), to disable this use
-  the option --no-bundle.
-
-8/27/2008:
-* Merb::Request#protocol now returns valid protocol names: http, not http://.
-
-8/22/2008:
-* controller.cookies['foo'] = { ... } (Hash with options) is now deprecated;
-  use controller.cookies['foo'] = 'bar' for simple cookies without options, or
-  use controller.cookies.set_cookie('foo', 'bar', options) for more control.
-
-8/21/2008:
-* Memcached sessions are now configured by assignment to 
-  Merb::MemcachedSession.store (previously the CACHE constant was used)
-* Added Merb::Config[:ignore_tampered_cookies] option to skip cookie warnings   
-  during development. This defaults to 'on' in the development environment.
-* Merb::Config[:session_store] or Merb::Config[:session_stores] now accept an
-  Array (or String); when an Array is given, multiple session stores will be
-  available to the application.
-* If you have custom session stores (that inherit from Merb::SessionContainer)
-  be sure to require them in your init.rb
-
-8/20/2008:
-* Merb::Config[:session_cookie_domain] is now     
-  Merb::Config[:default_cookie_domain]
-* Merb.registered_session_types is now Merb::Request.registered_session_types
-* When running in :development env, cookie-based sessions won't bother you 
-  by raising TamperedWithCookie anymore.
-
-8/14/2008:
-*  Merb.orm_generator_scope and friends are renamed.
-** Merb.orm_generator_scope => Merb.orm
-** Merb.test_framework_generator_scope => Merb.test_framework
-** Added Merb.template_engine
-
-Merb-gen is updated accordingly. This let us add --haml and similar
-options to merb-gen and plugin generators.
-
-8/10/2008:
-* Modified the way Exceptions are handled in the Dispatcher
-** To rescue all exceptions, supply Exceptions#exception
-** To rescue all Merb-generated exceptions, supply Exceptions#base
-** Exceptions#internal_server_error is no longer a catch-all and should
-   not be used as such.
-
-6/22/2008:
-
-Erubis modified:
-* <%= %> now can take a block, so <%= helper do %>Hello<% end %> now works
-* Erubis buffer is now an ivar (@_erb_buf), which eliminates the need for
-  eval in capture helpers.
-  
-CONSEQUENCE:
-Helpers that take a block should simply return a string, and should not
-use concat. Example:
-  
-  def my_helper(&blk)
-    "My helper says #{capture(&blk)}."
-  end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/README b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/README
deleted file mode 100644
index f9b033e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/README
+++ /dev/null
@@ -1,53 +0,0 @@
-merb-core 
-
-A new branch of Merb (sometimes referred to as merb-next) which aims to provide 
-a stable, stripped down API for the Merb 1.0 release.
-
-This branch was based off the 0.5 release series with *significant* rewrites.
-
-Goals of this release:
-
-  * Stabilize the @public interface methods to provide for a more consistent application development experience.
-  * Remove features until nothing except a central application API is left
-  * Improve comments on methods using a standard documentation methodology as described in DOCUMENTATION_STANDARDS
-  * Separate the tests into two sections... "private" and "public"
-    * Public methods are methods tagged with @public that will be part of the standard, stable Merb API
-    * Private methods are implementation methods that might 
-  * Implement a new render API
-  * Build more extensions to regain selected features when needed
-  
-To familiarize yourself with how a merb-core application might look, 
-use merb-gen (from merb-more) to generate a few apps:
-
-$ merb-gen app myapp         # merb stack app, assuming you are using DM and RSpec
-
-The only option you can use with stack is --template_engine=(erb|haml).
-Default is erb.
-
-$ merb-gen core myapp        # a "regular" app without any predefined dependencies
-
-Options available:
-
---orm=datamapper
---orm=sequel
---orm=activerecord
-
-Default is no ORM.
-
---testing_framework=rspec
---testing_framework=test_unit
-
-Default is rspec.
-
---template_enging=erb
---template_enging=haml
-
-Default is erb.
-
-$ merb-gen flat myapp        # a flattened app: one file and directory for views
-
-Options are same as for "regular" app.
-
-$ merb-gen very_flat myapp   # a single-file app
-
-Options are same as for "regular" app.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/Rakefile b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/Rakefile
deleted file mode 100644
index a7c3816..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/Rakefile
+++ /dev/null
@@ -1,461 +0,0 @@
-require "rake"
-require "rake/clean"
-require "rake/gempackagetask"
-require "rake/rdoctask"
-require "rake/testtask"
-require "spec/rake/spectask"
-require "fileutils"
-require "extlib"
-
-def __DIR__
-  File.dirname(__FILE__)
-end
-
-require __DIR__ + "/tools/rakehelp"
-require __DIR__ + "/tools/annotation_extract"
-
-include FileUtils
-
-require "lib/merb-core/version"
-require 'lib/merb-core/tasks/merb_rake_helper'
-
-##############################################################################
-# Package && release
-##############################################################################
-RUBY_FORGE_PROJECT  = "merb"
-PROJECT_URL         = "http://merbivore.com"
-PROJECT_SUMMARY     = "Merb. Pocket rocket web framework."
-PROJECT_DESCRIPTION = PROJECT_SUMMARY
-
-AUTHOR = "Ezra Zygmuntowicz"
-EMAIL  = "ez at engineyard.com"
-
-GEM_NAME    = "merb-core"
-PKG_BUILD   = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
-GEM_VERSION = Merb::VERSION + PKG_BUILD
-
-RELEASE_NAME    = "REL #{GEM_VERSION}"
-
-require "extlib/tasks/release"
-
-spec = Gem::Specification.new do |s|
-  s.name         = GEM_NAME
-  s.version      = GEM_VERSION
-  s.platform     = Gem::Platform::RUBY
-  s.author       = AUTHOR
-  s.email        = EMAIL
-  s.homepage     = PROJECT_URL
-  s.summary      = PROJECT_SUMMARY
-  s.bindir       = "bin"
-  s.description  = PROJECT_DESCRIPTION
-  s.executables  = %w( merb )
-  s.require_path = "lib"
-  s.files        = %w( LICENSE README Rakefile TODO CHANGELOG PUBLIC_CHANGELOG CONTRIBUTORS ) + Dir["{doc/rdoc,bin,lib}/**/*"]
-
-  # rdoc
-  s.has_rdoc         = true
-  s.extra_rdoc_files = %w( README LICENSE TODO )
-
-  # Dependencies
-  s.add_dependency "extlib", ">= 0.9.8"
-  s.add_dependency "erubis", ">= 2.6.2"
-  s.add_dependency "rake"
-  s.add_dependency "json_pure"
-  s.add_dependency "rspec"
-  s.add_dependency "rack"
-  s.add_dependency "mime-types"
-  s.add_dependency "thor", ">= 0.9.7"
-  # this escalates to "regular" dependencies, comment it out
-  # for now. RubyGems need some love.
-  #s.add_development_dependency "libxml-ruby"
-  #s.add_development_dependency "memcache-client"
-  # Requirements
-  s.requirements << "install the json gem to get faster json parsing"
-  s.required_ruby_version = ">= 1.8.6"
-end
-
-Rake::GemPackageTask.new(spec) do |package|
-  package.gem_spec = spec
-end
-
-desc "Run :package and install the resulting .gem"
-task :install => :clean do
-  Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION)
-end
-
-desc "Install Merb with development dependencies"
-task :dev_install => :clean do
-  Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION, :development => true)
-end
-
-desc "Run :clean and uninstall the .gem"
-task :uninstall => :clean do
-  Merb::RakeHelper.uninstall(GEM_NAME, :version => GEM_VERSION)
-end
-
-desc "Create a gemspec file"
-task :gemspec do
-  File.open("#{GEM_NAME}.gemspec", "w") do |file|
-    file.puts spec.to_ruby
-  end
-end
-
-CLEAN.include ["**/.*.sw?", "pkg", "lib/*.bundle", "lib/*.so", "*.gem", "doc/rdoc", ".config", "coverage", "cache", "spec/**/*.log"]
-
-desc "Run the specs."
-task :default => :specs
-
-task :merb => [:clean, :rdoc, :package]
-
-##############################################################################
-# Github
-##############################################################################
-namespace :github do
-  desc "Update Github Gemspec"
-  task :update_gemspec do
-    skip_fields = %w(new_platform original_platform)
-    integer_fields = %w(specification_version)
-
-    result = "Gem::Specification.new do |s|\n"
-    spec.instance_variables.each do |ivar|
-      value = spec.instance_variable_get(ivar)
-      name  = ivar.split("@").last
-      next if skip_fields.include?(name) || value.nil? || value == "" || (value.respond_to?(:empty?) && value.empty?)
-      if name == "dependencies"
-        value.each do |d|
-          dep, *ver = d.to_s.split(" ")
-          result <<  "  s.add_dependency #{dep.inspect}, #{ver.join(" ").inspect.gsub(/[()]/, "")}\n"
-        end
-      else
-        case value
-        when Array
-          value =  name != "files" ? value.inspect : value.inspect.split(",").join(",\n")
-        when String
-          value = value.to_i if integer_fields.include?(name)
-          value = value.inspect
-        else
-          value = value.to_s.inspect
-        end
-        result << "  s.#{name} = #{value}\n"
-      end
-    end
-    result << "end"
-    File.open(File.join(File.dirname(__FILE__), "#{spec.name}.gemspec"), "w"){|f| f << result}
-  end
-end
-
-##############################################################################
-# Documentation
-##############################################################################
-task :doc => [:rdoc]
-namespace :doc do
-
-  Rake::RDocTask.new do |rdoc|
-    files = ["README", "LICENSE", "CHANGELOG", "lib/**/*.rb"]
-    rdoc.rdoc_files.add(files)
-    rdoc.main = "README"
-    rdoc.title = "Merb Docs"
-    rdoc.template = __DIR__ + "/tools/allison-2.0.2/lib/allison.rb"
-    rdoc.rdoc_dir = "doc/rdoc"
-    rdoc.options << "--line-numbers" << "--inline-source"
-  end
-
-  desc "run webgen"
-  task :webgen do
-    sh %{cd doc/site; webgen}
-  end
-
-  desc "rdoc to rubyforge"
-  task :rubyforge do
-    sh %{#{Merb::RakeHelper.sudo} chmod -R 755 doc} unless Merb::RakeHelper.windows?
-    sh %{/usr/bin/scp -r -p doc/rdoc/* ezmobius at rubyforge.org:/var/www/gforge-projects/merb}
-  end
-
-end
-
-##############################################################################
-# rSpec & rcov
-##############################################################################
-desc "Run :specs, :rcov"
-task :aok => [:specs, :rcov]
-
-def setup_specs(name, spec_cmd='spec', run_opts = "-c")
-  except = []
-  except += Dir["spec/**/memcache*_spec.rb"] if ENV['MEMCACHED'] == 'no'
-
-  public_globs = Dir["#{Dir.pwd}/spec/public/**/*_spec.rb"]
-
-  private_globs = Dir["#{Dir.pwd}/spec/private/**/*_spec.rb"]
-
-  desc "Run all specs (#{name})"
-  task "specs:#{name}" do
-    require "lib/merb-core/test/run_specs"
-    globs = public_globs + private_globs
-    run_specs(globs, spec_cmd, ENV['RSPEC_OPTS'] || run_opts, except)
-  end
-  
-  desc "Run private specs (#{name})"
-  task "specs:#{name}:private" do
-    require "lib/merb-core/test/run_specs"
-    run_specs(private_globs, spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
-  end
-
-  desc "Run public specs (#{name})"
-  task "specs:#{name}:public" do
-    require "lib/merb-core/test/run_specs"
-    run_specs(public_globs, spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
-  end
-  
-  # With profiling formatter
-  desc "Run all specs (#{name}) with profiling formatter"
-  task "specs:#{name}_profiled" do
-    require "lib/merb-core/test/run_specs"
-    run_specs("spec/**/*_spec.rb", spec_cmd, "-c -f o")
-  end
-
-  desc "Run private specs (#{name}) with profiling formatter"
-  task "specs:#{name}_profiled:private" do
-    require "lib/merb-core/test/run_specs"
-    run_specs("spec/private/**/*_spec.rb", spec_cmd, "-c -f o")
-  end
-
-  desc "Run public specs (#{name}) with profiling formatter"
-  task "specs:#{name}_profiled:public" do
-    require "lib/merb-core/test/run_specs"
-    run_specs("spec/public/**/*_spec.rb", spec_cmd, "-c -f o")
-  end  
-end
-
-setup_specs("mri", "spec")
-setup_specs("jruby", "jruby -S spec")
-
-task "specs:core_ext" do
-  require "lib/merb-core/test/run_specs"
-  run_specs("spec/public/core_ext/*_spec.rb", "spec", "-c -f o")
-end
-
-task "spec"           => ["specs:mri"]
-task "specs"          => ["specs:mri"]
-task "specs:private"  => ["specs:mri:private"]
-task "specs:public"   => ["specs:mri:public"]
-
-desc "Run coverage suite"
-task :rcov do
-  require 'fileutils'
-  FileUtils.rm_rf("coverage") if File.directory?("coverage")
-  FileUtils.mkdir("coverage")
-  path = File.expand_path(Dir.pwd)
-  files = Dir["spec/**/*_spec.rb"]
-  files.each do |spec|
-    puts "Getting coverage for #{File.expand_path(spec)}"
-    command = %{rcov #{File.expand_path(spec)} --aggregate #{path}/coverage/data.data --exclude ".*" --include-file "lib/merb-core(?!\/vendor)"}
-    command += " --no-html" unless spec == files.last
-    `#{command} 2>&1`
-  end
-end
-
-desc "Run a specific spec with TASK=xxxx"
-Spec::Rake::SpecTask.new("spec") do |t|
-  t.spec_opts = ["--colour"]
-  t.libs = ["lib", "server/lib" ]
-  t.spec_files = (ENV["TASK"] || '').split(',').map do |task|
-    "spec/**/#{task}_spec.rb"
-  end
-end
-
-desc "Run all specs output html"
-Spec::Rake::SpecTask.new("specs_html") do |t|
-  t.spec_opts = ["--format", "html"]
-  t.libs = ["lib", "server/lib" ]
-  t.spec_files = Dir["spec/**/*_spec.rb"].sort
-end
-
-STATS_DIRECTORIES = [
-  ['Code', 'lib/'],
-  ['Unit tests', 'spec']
-].collect { |name, dir| [ name, "./#{dir}" ] }.
-  select  { |name, dir| File.directory?(dir) }
-
-desc "Report code statistics (KLOCs, etc) from the application"
-task :stats do
-  require __DIR__ + "/tools/code_statistics"
-  # require "extra/stats"
-  verbose = true
-  CodeStatistics.new(*STATS_DIRECTORIES).to_s
-end
-
-##############################################################################
-# SYNTAX CHECKING
-##############################################################################
-
-task :check_syntax do
-  `find . -name "*.rb" |xargs -n1 ruby -c |grep -v "Syntax OK"`
-  puts "* Done"
-end
-
-##############################################################################
-# Git and SVN
-##############################################################################
-namespace :repo do
-
-  desc "Add new files to repository"
-  task :add do
-    if File.directory?(".git")
-      system "git add *"
-    elsif File.directory?(".svn")
-      system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
-    end
-  end
-
-  desc "Fetch changes from master repository"
-  task :rebase do
-    if File.directory?(".git")
-      system "git stash ; git svn rebase ; git stash apply"
-    elsif File.directory?(".svn")
-      system "svn update"
-    end
-  end
-
-  desc "commit modified changes to the repository"
-  task :commit do
-    if File.directory?(".git")
-      system "git commit"
-    elsif File.directory?(".svn")
-      system "svn commit"
-    end
-  end
-
-end
-
-def git_log(since_release = nil, log_format = "%an")
-  git_log_query = "git log"
-  git_log_query << " v#{since_release}..HEAD" if since_release
-  git_log_query << " --pretty='format:#{log_format}' --no-merges"
-  puts
-  puts "Running #{git_log_query}"
-  puts
-  `#{git_log_query}`
-end
-
-def contributors(since_release = nil)
-  git_log(since_release).split("\n").uniq.sort
-end
-
-PREVIOUS_RELEASE = '0.9.9'
-namespace :history do
-  namespace :update do
-    desc "updates contributors list"
-    task :contributors do
-      list = contributors.join "\n"
-
-      path = File.join(File.dirname(__FILE__), 'CONTRIBUTORS')
-
-      rm path if File.exists?(path)
-
-      puts "Writing contributors (#{contributors.size} entries)."
-      # windows needs wb
-      File.open(path, "wb") do |io|
-        io << "Use #{RUBY_FORGE_PROJECT}? Say thanks the following people:\n\n"
-        io << list
-      end
-    end
-  end
-
-  
-  namespace :alltime do
-    desc 'shows all-time committers'
-    task :contributors do
-      puts 'All-time contributors (#{contributors.size} total): '
-      puts '=============================='
-      puts
-      puts contributors.join("\n")
-    end
-  end
-  
-  namespace :current_release do
-    desc "show changes since previous release"
-    task :changes do
-      puts git_log(PREVIOUS_RELEASE, "* %s")
-    end
-
-
-    desc 'shows current release committers'
-    task :contributors do
-      puts "Current release contributors (#{contributors.size} total): "
-      puts '=============================='
-      puts
-      puts contributors(PREVIOUS_RELEASE).join("\n")
-    end
-  end
-end
-
-
-# Run specific tests or test files. Searches nested spec directories as well.
-#
-# Based on a technique popularized by Geoffrey Grosenbach
-rule "" do |t|
-  spec_cmd = (RUBY_PLATFORM =~ /java/) ? "jruby -S spec" : "spec"
-  # spec:spec_file:spec_name
-  if /spec:(.*)$/.match(t.name)
-    arguments = t.name.split(':')
-
-    file_name = arguments[1]
-    spec_name = arguments[2..-1]
-
-    spec_filename = "#{file_name}_spec.rb"
-    specs = Dir["spec/**/#{spec_filename}"]
-
-    if path = specs.detect { |f| spec_filename == File.basename(f) }
-      run_file_name = path
-    else
-      puts "No specs found for #{t.name.inspect}"
-      exit
-    end
-
-    example = " -e '#{spec_name}'" unless spec_name.empty?
-
-    sh "#{spec_cmd} #{run_file_name} --colour #{example}"
-  end
-end
-
-##############################################################################
-# Flog
-##############################################################################
-
-namespace :flog do
-  task :worst_methods do
-    require "flog"
-    flogger = Flog.new
-    flogger.flog_files Dir["lib/**/*.rb"]
-    totals = flogger.totals.sort_by {|k,v| v}.reverse[0..10]
-    totals.each do |meth, total|
-      puts "%50s: %s" % [meth, total]
-    end
-  end
-  
-  task :total do
-    require "flog"
-    flogger = Flog.new
-    flogger.flog_files Dir["lib/**/*.rb"]
-    puts "Total: #{flogger.total}"
-  end
-  
-  task :per_method do
-    require "flog"
-    flogger = Flog.new
-    flogger.flog_files Dir["lib/**/*.rb"]
-    methods = flogger.totals.reject { |k,v| k =~ /\#none$/ }.sort_by { |k,v| v }
-    puts "Total Flog:    #{flogger.total}"
-    puts "Total Methods: #{flogger.totals.size}"
-    puts "Flog / Method: #{flogger.total / methods.size}"
-  end
-end
-
-namespace :tools do
-  namespace :tags do
-    desc "Generates Emacs tags using Exuberant Ctags."
-    task :emacs do
-      sh "ctags -e --Ruby-kinds=-f -o TAGS -R lib"
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/TODO b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/TODO
deleted file mode 100644
index e69de29..0000000
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/bin/merb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/bin/merb
deleted file mode 100755
index 562bedd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/bin/merb
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rubygems'
-require 'merb-core'
-
-ARGV.push '-H' if ARGV[0] && ARGV[0] =~ /^[^-]/
-unless %w[-a --adapter -i --irb-console -r --script-runner].any? { |o| ARGV.index(o) }
-  ARGV.push *%w[-a mongrel]
-end
-
-Merb.start
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/bin/merb-specs b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/bin/merb-specs
deleted file mode 100755
index baba82b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/bin/merb-specs
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.join(File.dirname(__FILE__),"..","lib","merb-core","test","run_specs")
-
-run_specs ARGV
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core.rb
deleted file mode 100644
index f0a6e8d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core.rb
+++ /dev/null
@@ -1,750 +0,0 @@
-# require 'merb' must happen after Merb::Config is instantiated
-require "rubygems"
-
-# Add the local gems dir if found within the app root; any dependencies loaded
-# hereafter will try to load from the local gems before loading system gems.
-root_key = %w[-m --merb-root].detect { |o| ARGV.index(o) }
-root = ARGV[ARGV.index(root_key) + 1] if root_key
-root = root.to_a.empty? ? Dir.getwd : root
-if File.directory?(gems_dir = File.join(root, "gems")) && !$BUNDLE
-  $BUNDLE = true; Gem.clear_paths; Gem.path.unshift(gems_dir)
-  # Warn if local merb-core is available but not loaded.
-  if File.expand_path($0).index(root) != 0 && 
-    (local_mc = Dir[File.join(gems_dir, "specifications", "merb-core-*.gemspec")].last)
-    puts "Warning: please use bin/#{File.basename($0)} to load #{File.basename(local_mc, ".gemspec")} from ./gems"
-  end
-end
-
-require "thread"
-require "set"
-require "fileutils"
-require "socket"
-require "pathname"
-require "extlib"
-require "extlib/dictionary"
-
-Thread.abort_on_exception = true
-
-__DIR__ = File.dirname(__FILE__)
-
-$LOAD_PATH.unshift __DIR__ unless
-  $LOAD_PATH.include?(__DIR__) ||
-  $LOAD_PATH.include?(File.expand_path(__DIR__))
-
-# Some dependencies tend to require&rescue for optionally required files;
-# doing so will load the full rubygems, even though it was just optional.
-$MINIGEMS_SKIPPABLE = ['encoding/character/utf-8']
-
-module Merb
-  # Create stub module for global controller helpers.
-  module GlobalHelpers; end
-  
-  class << self
-    attr_reader :exiting
-
-    def exiting=(bool)
-      Extlib.exiting = bool
-      if bool && Extlib.const_defined?("Pooling") && Extlib::Pooling.scavenger
-        Extlib::Pooling.scavenger.wakeup
-      end
-      @exiting = bool
-    end
-
-    # Merge environment settings
-    #
-    # This can allow you to have a "localdev" environment that runs like your "development".
-    #   OR
-    # A "staging" environment that runs identical to your "production" environment.
-    #
-    # ==== Examples
-    # From any environment config file (ie, development.rb, custom.rb, localdev.rb, etc).
-    #   staging.rb:
-    #     Merb.merge_env "production"         # We want to use all the settings production uses
-    #     Merb::Config.use do |c|
-    #       c[:log_level]         = "debug"   # except we want debug log level
-    #       c[:log_stream]        = @some_io  # and log to this IO handle
-    #       c[:exception_details] = true      # and we want to see exception details
-    #     end
-    #
-    # ==== Parameters
-    # env<~String>:: Environment to run like
-    # use_db<~Boolean>:: Should Merb use the merged environments DB connection
-    #     Defaults to +false+
-    #
-    # @api public
-    def merge_env(env,use_db=false)
-      if Merb.environment_info.nil?
-        Merb.environment_info = {
-          :real_env => Merb.environment,
-          :merged_envs => [],
-          :db_env => Merb.environment
-        }
-      end
-      
-      #Only load if it hasn't been loaded
-      unless Merb.environment_info[:merged_envs].member? env
-        Merb.environment_info[:merged_envs] << env
-        
-        env_file = Merb.dir_for(:config) / "environments" / ("#{env}.rb")
-        if File.exists?(env_file)
-          load(env_file)
-        else
-          Merb.logger.warn! "Environment file does not exist! #{env_file}"
-        end
-      end
-      
-      # Mark specific environment to load when ORM loads,
-      # if multiple environments are loaded, the last one
-      # with use_db as TRUE will be loaded
-      if use_db
-        Merb.environment_info[:db_env] = env
-      end
-    end
-
-    # Start Merb by setting up the Config and then starting the server.
-    # Set the Merb application environment and the root path.
-    #
-    # ==== Parameters
-    # argv<String, Hash>::
-    #   The config arguments to start Merb with. Defaults to +ARGV+.
-    #
-    # @api public
-    def start(argv = ARGV)
-      Merb::Config[:original_log_stream] = Merb::Config[:log_stream]
-      Merb::Config[:log_stream] ||= STDOUT
-      if Hash === argv
-        Merb::Config.setup(argv)
-      elsif !argv.nil?
-        Merb::Config.parse_args(argv)
-      end
-
-      Merb::Config[:log_stream] = STDOUT
-      
-      Merb.environment = Merb::Config[:environment]
-      Merb.root = Merb::Config[:merb_root]
-
-      case Merb::Config[:action]
-      when :kill
-        Merb::Server.kill(Merb::Config[:port], 2)
-      when :kill_9
-        Merb::Server.kill(Merb::Config[:port], 9)
-      when :fast_deploy
-        Merb::Server.kill("main", "HUP")
-      else
-        Merb::Server.start(Merb::Config[:port], Merb::Config[:cluster])
-        @started = true
-      end
-    end
-
-    # Start the Merb environment, but only if it hasn't been loaded yet.
-    #
-    # ==== Parameters
-    # argv<String, Hash>::
-    #   The config arguments to start Merb with. Defaults to +ARGV+.
-    #
-    # @api public
-    def start_environment(argv=ARGV)
-      start(argv) unless (@started ||= false)
-    end
-
-    # Restart the Merb environment explicitly.
-    #
-    # ==== Parameters
-    # argv<String, Hash>::
-    #   The config arguments to restart Merb with. Defaults to +Merb::Config+.
-    #
-    # @api public
-    def restart_environment(argv={})
-      @started = false
-      start_environment(Merb::Config.to_hash.merge(argv))
-    end
-
-    attr_accessor :environment, :load_paths, :adapter, :environment_info, :started
-
-    alias :env :environment
-    alias :started? :started
-
-    Merb.load_paths = Dictionary.new { [Merb.root] } unless Merb.load_paths.is_a?(Dictionary)
-
-    # This is the mechanism for setting up your application layout.
-    # There are three application layouts in Merb:
-    #
-    # 1. Regular app/:type layout of Ruby on Rails fame:
-    #
-    # app/models       for models
-    # app/mailers      for mailers (special type of controllers)
-    # app/parts        for parts, Merb components
-    # app/views        for templates
-    # app/controllers  for controller
-    # lib              for libraries
-    #
-    # 2. Flat application layout:
-    #
-    # application.rb       for models, controllers, mailers, etc
-    # config/init.rb       for initialization and router configuration
-    # config/framework.rb  for framework and dependencies configuration
-    # views                for views
-    #
-    # 3. Camping-style "very flat" application layout, where the whole Merb
-    # application and configs are contained within a single file.
-    #
-    # ==== Notes
-    # Autoloading for lib uses an empty glob by default. If you
-    # want to have your libraries under lib use autoload, add
-    # the following to Merb init file:
-    #
-    # Merb.push_path(:lib, Merb.root / "lib", "**/*.rb") # glob set explicity.
-    #
-    # Then lib/magicwand/lib/magicwand.rb with MagicWand module will
-    # be autoloaded when you first access that constant.
-    #
-    # ==== Examples
-    # This method gives you a way to build up your own application
-    # structure, for instance, to reflect the structure Rails
-    # uses to simplify transition of legacy application, you can
-    # set it up like this:
-    #
-    # Merb.push_path(:model,      Merb.root / "app" / "models",      "**/*.rb")
-    # Merb.push_path(:mailer,     Merb.root / "app" / "models",      "**/*.rb")
-    # Merb.push_path(:controller, Merb.root / "app" / "controllers", "**/*.rb")
-    # Merb.push_path(:view,       Merb.root / "app" / "views",       "**/*.rb")
-    #
-    # ==== Parameters
-    # type<Symbol>:: The type of path being registered (i.e. :view)
-    # path<String>:: The full path
-    # file_glob<String>::
-    #   A glob that will be used to autoload files under the path. Defaults to
-    #   "**/*.rb".
-    #
-    # @api public
-    def push_path(type, path, file_glob = "**/*.rb")
-      enforce!(type => Symbol)
-      load_paths[type] = [path, file_glob]
-    end
-
-    # Removes given types of application components
-    # from load path Merb uses for autoloading.
-    #
-    # ==== Parameters
-    # *args<Array(Symbol)>::
-    #   component(s) names, for instance, :views, :models
-    #
-    # ==== Examples
-    # Using this combined with Merb::GlobalHelpers.push_path you can make 
-    # your Merb application use legacy Rails application components.
-    #
-    # Merb.root = "path/to/legacy/app/root"
-    # Merb.remove_paths(:mailer)
-    # Merb.push_path(:mailer, Merb.root / "app" / "models", "**/*.rb")
-    #
-    # Will make Merb use app/models for mailers just like Ruby on Rails does.
-    #
-    # @api public
-    def remove_paths(*args)
-      args.each {|arg| load_paths.delete(arg)}
-    end
-
-    # ==== Parameters
-    # type<Symbol>:: The type of path to retrieve directory for, e.g. :view.
-    #
-    # ==== Returns
-    # String:: The directory for the requested type.
-    #
-    # @api public
-    def dir_for(type)
-      Merb.load_paths[type].first
-    end
-
-    # ==== Parameters
-    # type<Symbol>:: The type of path to retrieve glob for, e.g. :view.
-    #
-    # ===== Returns
-    # String:: The pattern with which to match files within the type directory.
-    #
-    # @api public
-    def glob_for(type)
-      Merb.load_paths[type][1]
-    end
-
-    # ==== Returns
-    # String:: The Merb root path.
-    #
-    # @api public
-    def root
-      @root || Merb::Config[:merb_root] || File.expand_path(Dir.pwd)
-    end
-
-    # ==== Parameters
-    # value<String>:: Path to the root directory.
-    #
-    # @api public
-    def root=(value)
-      @root = value
-    end
-
-    # ==== Parameters
-    # *path::
-    #   The relative path (or list of path components) to a directory under the
-    #   root of the application.
-    #
-    # ==== Returns
-    # String:: The full path including the root.
-    #
-    # ==== Examples
-    #   Merb.root = "/home/merb/app"
-    #   Merb.path("images") # => "/home/merb/app/images"
-    #   Merb.path("views", "admin") # => "/home/merb/app/views/admin"
-    #
-    # @public
-    def root_path(*path)
-      File.join(root, *path)
-    end
-
-    # Return the Merb Logger object for the current thread.
-    # Set it up if it does not exist.
-    # 
-    # @api public
-    def logger
-      Thread.current[:merb_logger] ||= Merb::Logger.new
-    end
-
-    # Removes the logger for the current thread (nil).
-    # 
-    # @api public
-    def reset_logger!
-      Thread.current[:merb_logger] = nil
-    end
-
-    # ==== Returns
-    # String::
-    #   The path to the log file. 
-    #   If this Merb instance is running as a daemon this will return +STDOUT+.
-    #
-    # ==== Notes
-    # When Merb.testing? the port is modified to become :test - this keeps this
-    # special environment situation from ending up in the memoized @streams
-    # just once, thereby never taking changes into account again. Now, it will
-    # be memoized as :test - and just logging to merb_test.log.
-    # 
-    # @api public
-    def log_stream(port = "main")
-      port = :test if Merb.testing?
-      @streams ||= {}
-      @streams[port] ||= begin
-        log = if Merb.testing?
-          log_path / "merb_test.log"
-        elsif !Merb::Config[:daemonize] && !Merb::Config[:force_logging]
-          STDOUT
-        else
-          log_path / "merb.#{port}.log"
-        end
-        
-        if log.is_a?(IO)
-          stream = log
-        elsif File.exist?(log)
-          stream = File.open(log, (File::WRONLY | File::APPEND))
-        else
-          FileUtils.mkdir_p(File.dirname(log))
-          stream = File.open(log, (File::WRONLY | File::APPEND | File::CREAT))
-          stream.write("#{Time.now.httpdate} #{Merb::Config[:log_delimiter]} " \
-            "info #{Merb::Config[:log_delimiter]} Logfile created\n")
-        end
-        stream.sync = true
-        stream
-      end
-    end
-
-    # ==== Returns
-    # String:: Path to the log directory which contains the log file.
-    # 
-    # @api public
-    def log_path
-      case Merb::Config[:log_file]
-      when String then File.dirname(Merb::Config[:log_file])
-      else Merb.root_path("log")
-      end
-    end
-
-    # ==== Returns
-    # String:: The path of root directory of the Merb framework.
-    # 
-    # @api public
-    def framework_root
-      @framework_root ||= File.dirname(__FILE__)
-    end
-
-    # ==== Returns
-    # RegExp::
-    #   Regular expression against which deferred actions
-    #   are matched by Rack application handler.
-    #
-    # ==== Notes
-    # Concatenates :deferred_actions configuration option values.
-    # 
-    # @api public
-    def deferred_actions
-      @deferred ||= begin
-        if Merb::Config[:deferred_actions].empty?
-          /^\0$/
-        else
-          /#{Merb::Config[:deferred_actions].join("|")}/
-        end
-      end
-    end
-
-    # Perform a hard Exit.
-    # Print a backtrace to the merb logger before exiting if verbose is enabled.
-    #
-    # @api private
-    def fatal!(str, e = nil)
-      Merb.logger.fatal!
-      Merb.logger.fatal!("\e[1;31;47mFATAL: #{str}\e[0m")
-      Merb.logger.fatal!
-
-      print_colorized_backtrace(e) if e && Merb::Config[:verbose]
-      
-      if Merb::Config[:show_ugly_backtraces]
-        raise e
-      else
-        exit(1)
-      end
-    end
-    
-    # Print a colorized backtrace to the merb logger.
-    #
-    # @api private
-    def print_colorized_backtrace(e)
-      e.backtrace.map! do |line|
-        line.gsub!(/^#{Merb.framework_root}/, "\e[34mFRAMEWORK_ROOT\e[31m")
-      end
-      
-      Merb.logger.fatal! "\e[34mFRAMEWORK_ROOT\e[0m = #{Merb.framework_root}"
-      Merb.logger.fatal!
-      Merb.logger.fatal! "\e[31m#{e.class}: \e[1;31;47m#{e.message}\e[0m"
-      e.backtrace.each do |line|
-        Merb.logger.fatal! "\e[31m#{line}\e[0m"
-      end      
-    end
-
-    # Set up default variables under Merb
-    attr_accessor :klass_hashes, :orm, :test_framework, :template_engine
-
-    # Returns the default ORM for this application. For instance, :datamapper.
-    #
-    # ==== Returns
-    # <Symbol>:: default ORM.
-    #
-    # @api public
-    def orm
-      @orm ||= :none
-    end
-    
-    # @deprecated
-    def orm_generator_scope
-      Merb.logger.warn!("WARNING: Merb.orm_generator_scope is deprecated!")
-      return :merb_default if Merb.orm == :none
-      Merb.orm
-    end
-
-    # Returns the default test framework for this application. For instance :rspec.
-    #
-    # ==== Returns
-    # <Symbol>:: default test framework.
-    #
-    # @api public
-    def test_framework
-      @test_framework ||= :rspec
-    end
-    
-    # @deprecated
-    def test_framework_generator_scope
-      Merb.logger.warn!("WARNING: Merb.test_framework_generator_scope is deprecated")
-      Merb.test_framework
-    end
-    
-    # Returns the default template engine for this application. For instance :haml.
-    #
-    # ==== Returns
-    # <Symbol>:: default template engine.
-    #
-    # @api public
-    def template_engine
-      @template_engine ||= :erb
-    end
-
-    Merb.klass_hashes = []
-
-    # ==== Returns
-    # Boolean:: True if Merb is running as an application with bundled gems.
-    #
-    # ==== Notes
-    # Bundling required gems makes your application independent from the 
-    # environment it runs in. It is a good practice to freeze application 
-    # framework and gems and is very useful when application is run in 
-    # some sort of sandbox, for instance, shared hosting with preconfigured gems.
-    #
-    # @api public
-    def bundled?
-      $BUNDLE || ENV.key?("BUNDLE")
-    end
-
-    # Load configuration and assign the logger.
-    #
-    # ==== Parameters
-    # options<Hash>:: Options to pass on to the Merb config.
-    #
-    # ==== Options
-    # :host<String>::             host to bind to,
-    #                             default is 0.0.0.0.
-    #
-    # :port<Fixnum>::             port to run Merb application on,
-    #                             default is 4000.
-    #
-    # :adapter<String>::          name of Rack adapter to use,
-    #                             default is "runner"
-    #
-    # :rackup<String>::           name of Rack init file to use,
-    #                             default is "rack.rb"
-    #
-    # :reload_classes<Boolean>::  whether Merb should reload
-    #                             classes on each request,
-    #                             default is true
-    #
-    # :environment<String>::      name of environment to use,
-    #                             default is development
-    #
-    # :merb_root<String>::        Merb application root,
-    #                             default is Dir.pwd
-    #
-    # :use_mutex<Boolean>::       turns action dispatch synchronization
-    #                             on or off, default is on (true)
-    #
-    # :log_delimiter<String>::    what Merb logger uses as delimiter
-    #                             between message sections, default is " ~ "
-    #
-    # :log_auto_flush<Boolean>::  whether the log should automatically
-    #                             flush after new messages are
-    #                             added, defaults to true.
-    #
-    # :log_stream<IO>::           IO handle for logger. Defaults to STDOUT.
-    #
-    # :log_file<String>::         File path for logger. Overrides :log_stream.
-    #
-    # :log_level<Symbol>::        logger level, default is :info
-    #
-    # :disabled_components<Array[Symbol]>::
-    #   array of disabled component names,
-    #   for instance, to disable json gem,
-    #   specify :json. Default is empty array.
-    #
-    # :deferred_actions<Array(Symbol, String)]>::
-    #   names of actions that should be deferred
-    #   no matter what controller they belong to.
-    #   Default is empty array.
-    #
-    # Some of these options come from command line on Merb
-    # application start, some of them are set in Merb init file
-    # or environment-specific.
-    #
-    # @api public
-    def load_config(options = {})
-      Merb::Config.setup(Merb::Config.defaults.merge(options))
-      Merb::BootLoader::Logger.run
-    end
-
-    # Load all basic dependencies (selected BootLoaders only).
-    # This sets up Merb framework component paths
-    # (directories for models, controllers, etc) using
-    # framework.rb or default layout, loads init file
-    # and dependencies specified in it and runs before_app_loads hooks.
-    #
-    # ==== Parameters
-    # options<Hash>:: Options to pass on to the Merb config.
-    #
-    # @api public
-    def load_dependencies(options = {})
-      load_config(options)
-      Merb::BootLoader::BuildFramework.run
-      Merb::BootLoader::Dependencies.run
-      Merb::BootLoader::BeforeAppLoads.run
-    end
-
-    # Reload application and framework classes.
-    # See Merb::BootLoader::ReloadClasses for details.
-    #
-    # @api public
-    def reload
-      Merb::BootLoader::ReloadClasses.reload
-    end
-
-    # ==== Returns
-    # Boolean:: True if Merb environment is testing for instance,
-    # Merb is running with RSpec, Test::Unit of other testing facility.
-    #
-    # @api public
-    def testing?
-      $TESTING ||= env?(:test) || Merb::Config[:testing]
-    end
-
-    # Ask the question about which environment you're in.
-    # ==== Parameters
-    # env<Symbol, String>:: Name of the environment to query
-    #
-    # ==== Examples
-    # Merb.env #=> production
-    # Merb.env?(:production) #=> true
-    # Merb.env?(:development) #=> false
-    #
-    # @api public
-    def env?(env)
-      Merb.env == env.to_s
-    end
-
-    # If block was given configures using the block.
-    #
-    # ==== Parameters
-    # &block:: Configuration parameter block, see example below.
-    #
-    # ==== Returns
-    # Hash:: The current configuration.
-    #
-    # ==== Notes
-    # See Merb::GlobalHelpers.load_config for configuration
-    # options list.
-    #
-    # ==== Examples
-    #   Merb.config do
-    #     beer               "good"
-    #     hashish            :foo => "bar"
-    #     environment        "development"
-    #     log_level          "debug"
-    #     use_mutex          false
-    #     exception_details  true
-    #     reload_classes     true
-    #     reload_time        0.5
-    #   end
-    #
-    # @api public
-    def config(&block)
-      Merb::Config.configure(&block) if block_given?
-      Config
-    end
-
-    # Disables the given core components, like a Gem for example.
-    #
-    # ==== Parameters
-    # *args:: One or more symbols of Merb internal components.
-    #
-    # @api public
-    def disable(*components)
-      disabled_components.push(*components)
-    end
-
-    # ==== Parameters
-    # Array:: All components that should be disabled.
-    #
-    # @api public
-    def disabled_components=(components)
-      disabled_components.replace components
-    end
-
-    # ==== Returns
-    # Array:: All components that have been disabled.
-    #
-    # @api public
-    def disabled_components
-      Merb::Config[:disabled_components] ||= []
-    end
-
-    # ==== Returns
-    # Boolean:: True if all components (or just one) are disabled.
-    #
-    # @api public
-    def disabled?(*components)
-      components.all? { |c| disabled_components.include?(c) }
-    end
-
-    # ==== Returns
-    # Array(String):: Paths Rakefiles are loaded from.
-    #
-    # ==== Notes
-    # Recommended way to find out what paths Rakefiles
-    # are loaded from.
-    #
-    # @api public
-    def rakefiles
-      @rakefiles ||= []
-    end
-    
-    # === Returns
-    # Array(String):: Paths generators are loaded from
-    #
-    # === Notes
-    # Recommended way to find out what paths generators are loaded from.
-    #
-    # @api public
-    def generators
-      @generators ||= []
-    end
-
-    # ==== Parameters
-    # *rakefiles:: Rakefile paths to add to the list of Rakefiles.
-    #
-    # ==== Notes
-    # Recommended way to add Rakefiles load path for plugins authors.
-    #
-    # @api public
-    def add_rakefiles(*rakefiles)
-      @rakefiles ||= []
-      @rakefiles += rakefiles
-    end
-    
-    # ==== Parameters
-    # *generators:: Generator paths to add to the list of generators.
-    #
-    # ==== Notes
-    # Recommended way to add Generator load paths for plugin authors.
-    #
-    # @api public
-    def add_generators(*generators)
-      @generators ||= []
-      @generators += generators
-    end
-
-    # Install a signal handler for a given signal unless signals have
-    # been disabled with Merb.disable(:signals)
-    # ==== Parameters
-    # signal:: The name of the signal to install a handler for.
-    # &block:: The block to be run when the given signal is received.
-    #
-    # @api public
-    def trap(signal, &block)
-      if Signal.list.include?(signal)
-        Kernel.trap(signal, &block) unless Merb.disabled?(:signals)
-      end
-    end
-
-    def forking_environment?
-      !on_windows? && !on_jruby?
-    end
-
-    def on_jruby?
-      RUBY_PLATFORM =~ Merb::Const::JAVA_PLATFORM_REGEXP
-    end
-
-    def on_windows?
-      RUBY_PLATFORM =~ Merb::Const::WIN_PLATFORM_REGEXP
-    end
-
-  end
-end
-
-require "merb-core/autoload"
-require "merb-core/server"
-require "merb-core/gem_ext/erubis"
-require "merb-core/logger"
-require "merb-core/version"
-require "merb-core/controller/mime"
-
-# Set the environment if it hasn't already been set.
-Merb.environment ||= ENV["MERB_ENV"] || Merb::Config[:environment] || (Merb.testing? ? "test" : "development")
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/autoload.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/autoload.rb
deleted file mode 100644
index c18922d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/autoload.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-module Merb
-  autoload :AbstractController,       "merb-core/controller/abstract_controller"
-  autoload :BootLoader,               "merb-core/bootloader"
-  autoload :Config,                   "merb-core/config"
-  autoload :Const,                    "merb-core/constants"
-  autoload :ConditionalGetMixin,      "merb-core/controller/mixins/conditional_get"
-  autoload :ControllerMixin,          "merb-core/controller/mixins/controller"
-  autoload :ControllerExceptions,     "merb-core/controller/exceptions"
-  autoload :Dispatcher,               "merb-core/dispatch/dispatcher"
-  autoload :AuthenticationMixin,      "merb-core/controller/mixins/authentication"
-  autoload :BasicAuthenticationMixin, "merb-core/controller/mixins/authentication/basic"
-  autoload :ErubisCaptureMixin,       "merb-core/controller/mixins/erubis_capture"
-  autoload :Plugins,                  "merb-core/plugins"
-  autoload :Rack,                     "merb-core/rack"
-  autoload :RenderMixin,              "merb-core/controller/mixins/render"
-  autoload :Request,                  "merb-core/dispatch/request"
-  autoload :Parse,                    "merb-core/dispatch/request_parsers.rb"
-  autoload :ResponderMixin,           "merb-core/controller/mixins/responder"
-  autoload :Router,                   "merb-core/dispatch/router"
-  autoload :Test,                     "merb-core/test"
-  autoload :Worker,                   "merb-core/dispatch/worker"
-end
-
-# Require this rather than autoloading it so we can be sure the default template
-# gets registered
-require 'merb-core/core_ext'
-require "merb-core/controller/template"
-require "merb-core/controller/merb_controller"
-
-module Merb
-  module InlineTemplates; end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/bootloader.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/bootloader.rb
deleted file mode 100644
index 7b16d6a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/bootloader.rb
+++ /dev/null
@@ -1,1346 +0,0 @@
-module Merb
-
-  class BootLoader
-
-    # def self.subclasses
-    #
-    # @api plugin
-    cattr_accessor :subclasses, :after_load_callbacks, :before_load_callbacks,
-    :finished, :before_worker_shutdown_callbacks, :before_master_shutdown_callbacks
-
-    self.subclasses, self.after_load_callbacks,
-      self.before_load_callbacks, self.finished, self.before_master_shutdown_callbacks,
-      self.before_worker_shutdown_callbacks = [], [], [], [], [], []
-
-    class << self
-
-      # Adds the inheriting class to the list of subclasses in a position
-      # specified by the before and after methods.
-      #
-      # ==== Parameters
-      # klass<Class>:: The class inheriting from Merb::BootLoader.
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api plugin
-      def inherited(klass)
-        subclasses << klass.to_s
-        super
-      end
-
-      # Execute this boot loader after the specified boot loader.
-      #
-      # ==== Parameters
-      # klass<~to_s>::
-      #   The boot loader class after which this boot loader should be run.
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api plugin
-      def after(klass)
-        move_klass(klass, 1)
-        nil
-      end
-
-      # Execute this boot loader before the specified boot loader.
-      #
-      # ==== Parameters
-      # klass<~to_s>::
-      #   The boot loader class before which this boot loader should be run.
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api plugin
-      def before(klass)
-        move_klass(klass, 0)
-        nil
-      end
-
-      # Move a class that is inside the bootloader to some place in the Array,
-      # relative to another class.
-      #
-      # ==== Parameters
-      # klass<~to_s>::
-      #   The klass to move the bootloader relative to
-      # where<Integer>::
-      #   0 means insert it before; 1 means insert it after
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api private
-      def move_klass(klass, where)
-        index = Merb::BootLoader.subclasses.index(klass.to_s)
-        if index
-          Merb::BootLoader.subclasses.delete(self.to_s)
-          Merb::BootLoader.subclasses.insert(index + where, self.to_s)
-        end
-        nil
-      end
-
-      # Runs all boot loader classes by calling their run methods.
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api plugin
-      def run
-        Merb.started = true
-        subklasses = subclasses.dup
-        until subclasses.empty?
-          time = Time.now.to_i
-          bootloader = subclasses.shift
-          if (ENV['DEBUG'] || $DEBUG || Merb::Config[:verbose]) && Merb.logger
-            Merb.logger.debug!("Loading: #{bootloader}")
-          end
-          Object.full_const_get(bootloader).run
-          if (ENV['DEBUG'] || $DEBUG || Merb::Config[:verbose]) && Merb.logger
-            Merb.logger.debug!("It took: #{Time.now.to_i - time}")
-          end
-          self.finished << bootloader
-        end
-        self.subclasses = subklasses
-        nil
-      end
-
-      # Determines whether or not a specific bootloader has finished yet.
-      #
-      # ==== Parameters
-      # bootloader<String, Class>:: The name of the bootloader to check.
-      #
-      # ==== Returns
-      # Boolean:: Whether or not the bootloader has finished.
-      #
-      # @api private
-      def finished?(bootloader)
-        self.finished.include?(bootloader.to_s)
-      end
-
-      # Set up the default framework
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api plugin
-      # @overridable
-      def default_framework
-        %w[view model helper controller mailer part].each do |component|
-          Merb.push_path(component.to_sym, Merb.root_path("app/#{component}s"))
-        end
-        Merb.push_path(:application,  Merb.root_path("app" / "controllers" / "application.rb"))
-        Merb.push_path(:config,       Merb.root_path("config"), nil)
-        Merb.push_path(:router,       Merb.dir_for(:config), (Merb::Config[:router_file] || "router.rb"))
-        Merb.push_path(:lib,          Merb.root_path("lib"), nil)
-        Merb.push_path(:merb_session, Merb.root_path("merb" / "session"))
-        Merb.push_path(:log,          Merb.log_path, nil)
-        Merb.push_path(:public,       Merb.root_path("public"), nil)
-        Merb.push_path(:stylesheet,   Merb.dir_for(:public) / "stylesheets", nil)
-        Merb.push_path(:javascript,   Merb.dir_for(:public) / "javascripts", nil)
-        Merb.push_path(:image,        Merb.dir_for(:public) / "images", nil)
-        nil
-      end
-
-      # Execute a block of code after the app loads.
-      #
-      # ==== Parameters
-      # &block::
-      #   A block to be added to the callbacks that will be executed after the
-      #   app loads.
-      #
-      # @api public
-      def after_app_loads(&block)
-        after_load_callbacks << block
-      end
-
-      # Execute a block of code before the app loads but after dependencies load.
-      #
-      # ==== Parameters
-      # &block::
-      #   A block to be added to the callbacks that will be executed before the
-      #   app loads.
-      #
-      # @api public
-      def before_app_loads(&block)
-        before_load_callbacks << block
-      end
-
-      # Execute a block of code before master process is shut down.
-      # Only makes sense on platforms where Merb server can use forking.
-      #
-      # ==== Parameters
-      # &block::
-      #   A block to be added to the callbacks that will be executed
-      #   before master process is shut down.
-      #
-      # @api public
-      def before_master_shutdown(&block)
-        before_master_shutdown_callbacks << block
-      end
-
-      # Execute a block of code before worker process is shut down.
-      # Only makes sense on platforms where Merb server can use forking.
-      #
-      # ==== Parameters
-      # &block::
-      #   A block to be added to the callbacks that will be executed
-      #   before worker process is shut down.
-      #
-      # @api public
-      def before_worker_shutdown(&block)
-        before_worker_shutdown_callbacks << block
-      end
-    end
-
-  end
-
-end
-
-# Set up the logger.
-#
-# Place the logger inside of the Merb log directory (set up in
-# Merb::BootLoader::BuildFramework)
-class Merb::BootLoader::Logger < Merb::BootLoader
-
-  # Sets Merb.logger to a new logger created based on the config settings.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    Merb::Config[:log_level] ||= begin
-      if Merb.environment == "production"
-        Merb::Logger::Levels[:warn]
-      else
-        Merb::Logger::Levels[:debug]
-      end
-    end
-
-    Merb::Config[:log_stream] = 
-      Merb::Config[:original_log_stream] || Merb.log_stream
-
-    print_warnings
-
-    nil
-  end
-
-  # Print a warning if the installed version of rubygems is not supported
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api private
-  def self.print_warnings
-    if Gem::Version.new(Gem::RubyGemsVersion) < Gem::Version.new("1.1")
-      Merb.fatal! "Merb requires Rubygems 1.1 and later. " \
-        "Please upgrade RubyGems with gem update --system."
-    end
-  end
-end
-
-# Stores pid file.
-#
-# Only run if daemonization or clustering options specified on start.
-# Port is taken from Merb::Config and must be already set at this point.
-class Merb::BootLoader::DropPidFile < Merb::BootLoader
-  class << self
-
-    # Stores a PID file if Merb is running daemonized or clustered.
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api plugin
-    def run
-      Merb::Server.store_pid("main") #if Merb::Config[:daemonize] || Merb::Config[:cluster]
-      nil
-    end
-  end
-end
-
-# Setup some useful defaults
-class Merb::BootLoader::Defaults < Merb::BootLoader
-  # Sets up the defaults
-  # 
-  # ==== Returns
-  # nil
-  # 
-  # @api plugin
-  def self.run
-    Merb::Request.http_method_overrides.concat([
-      proc { |c| c.params[:_method] },
-      proc { |c| c.env['HTTP_X_HTTP_METHOD_OVERRIDE'] }
-    ])
-    nil
-  end
-end
-
-
-# Build the framework paths.
-#
-# By default, the following paths will be used:
-# application:: Merb.root/app/controller/application.rb
-# config:: Merb.root/config
-# lib:: Merb.root/lib
-# log:: Merb.root/log
-# view:: Merb.root/app/views
-# model:: Merb.root/app/models
-# controller:: Merb.root/app/controllers
-# helper:: Merb.root/app/helpers
-# mailer:: Merb.root/app/mailers
-# part:: Merb.root/app/parts
-#
-# To override the default, set Merb::Config[:framework] in your initialization
-# file. Merb::Config[:framework] takes a Hash whose key is the name of the
-# path, and whose values can be passed into Merb.push_path (see Merb.push_path
-# for full details).
-#
-# ==== Notes
-# All paths will default to Merb.root, so you can get a flat-file structure by
-# doing Merb::Config[:framework] = {}.
-#
-# ==== Example
-#   Merb::Config[:framework] = {
-#     :view   => Merb.root / "views",
-#     :model  => Merb.root / "models",
-#     :lib    => Merb.root / "lib",
-#     :public => [Merb.root / "public", nil]
-#     :router => [Merb.root / "config", "router.rb"]
-#   }
-#
-# That will set up a flat directory structure with the config files and
-# controller files under Merb.root, but with models, views, and lib with their
-# own folders off of Merb.root.
-class Merb::BootLoader::BuildFramework < Merb::BootLoader
-  class << self
-
-    # Builds the framework directory structure.
-    #
-    # ==== Returns
-    # nil
-    def run
-      $:.push Merb.root unless Merb.root == File.expand_path(Dir.pwd)
-      build_framework
-      nil
-    end
-
-    # Sets up merb paths to support the app's file layout. First, config/framework.rb is checked,
-    # next we look for Merb.root/framework.rb, finally we use the default merb layout (Merb::BootLoader.default_framework)
-    #
-    # This method can be overriden to support other application layouts.
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api plugin
-    # @overridable
-    def build_framework
-      if File.exists?(Merb.root / "config" / "framework.rb")
-        require Merb.root / "config" / "framework"
-      elsif File.exists?(Merb.root / "framework.rb")
-        require Merb.root / "framework"
-      else
-        Merb::BootLoader.default_framework
-      end
-      (Merb::Config[:framework] || {}).each do |name, path|
-        path = Array(path)
-        Merb.push_path(name, path.first, path.length == 2 ? path[1] : "**/*.rb")
-      end
-      nil
-    end
-  end
-end
-
-class Merb::BootLoader::Dependencies < Merb::BootLoader
-
-  # ==== Returns
-  # Array[Gem::Dependency]:: The dependencies regiestered in init.rb.
-  #
-  # @api plugin
-  cattr_accessor :dependencies
-  self.dependencies = []
-
-  # Load the init_file specified in Merb::Config or if not specified, the
-  # init.rb file from the Merb configuration directory, and any environment
-  # files, which register the list of necessary dependencies and any
-  # after_app_loads hooks.
-  #
-  # Dependencies can hook into the bootloader process itself by using
-  # before or after insertion methods. Since these are loaded from this
-  # bootloader (Dependencies), they can only adapt the bootloaders that
-  # haven't been loaded up until this point.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    set_encoding
-    # this is crucial: load init file with all the preferences
-    # then environment init file, then start enabling specific
-    # components, load dependencies and update logger.
-    unless Merb::disabled?(:initfile)
-      load_initfile
-      load_env_config
-    end
-    expand_ruby_path
-    enable_json_gem unless Merb::disabled?(:json)
-    load_dependencies
-    update_logger
-    nil
-  end
-
-  # Load each dependency that has been declared so far.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api private
-  def self.load_dependencies
-    dependencies.each { |dependency| Kernel.load_dependency(dependency) }
-    nil
-  end
-
-  # Loads json or json_pure and requires it.
-  #
-  # ==== Returns
-  # nil
-  def self.enable_json_gem
-    gem "json"
-    require "json/ext"
-  rescue LoadError
-    gem "json_pure"
-    require "json/pure"
-  end
-
-  # Resets the logger and sets the log_stream to Merb::Config[:log_file]
-  # if one is specified, falling back to STDOUT.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api private
-  def self.update_logger
-    Merb.reset_logger!
-
-    # If log file is given, use it and not log stream we have.
-    if Merb::Config[:log_file]
-      raise "log file should be a string, got: #{Merb::Config[:log_file].inspect}" unless Merb::Config[:log_file].is_a?(String)
-      STDOUT.puts "Logging to file at #{Merb::Config[:log_file]}" unless Merb.testing?
-      Merb::Config[:log_stream] = File.open(Merb::Config[:log_file], "w+")
-    # but if it's not given, fallback to log stream or stdout
-    else
-      Merb::Config[:log_stream] ||= STDOUT
-    end
-
-    nil
-  end
-
-  # Default encoding to UTF8 if it has not already been set to something else.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api private
-  def self.set_encoding
-    $KCODE = 'UTF8' if $KCODE == 'NONE' || $KCODE.blank?
-    nil
-  end
-
-  private
-
-    # Determines the path for the environment configuration file
-    #
-    # ==== Returns
-    # String:: The path to the config file for the environment
-    #
-    # @api private
-    def self.env_config
-      Merb.dir_for(:config) / "environments" / (Merb.environment + ".rb")
-    end
-
-    # Checks to see whether or not an environment configuration exists
-    #
-    # ==== Returns
-    # Boolean:: Whether or not the environment configuration file exists.
-    #
-    # @api private
-    def self.env_config?
-      Merb.environment && File.exist?(env_config)
-    end
-
-    # Loads the environment configuration file, if it is present
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def self.load_env_config
-      if env_config?
-        STDOUT.puts "Loading #{env_config}" unless Merb.testing?
-        load(env_config)
-      end
-      nil
-    end
-
-    # Determines the init file to use, if any.
-    # By default Merb uses init.rb from application config directory.
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def self.initfile
-      if Merb::Config[:init_file]
-        Merb::Config[:init_file].chomp(".rb") + ".rb"
-      else
-        Merb.dir_for(:config) / "init.rb"
-      end
-    end
-
-    # Loads the init file, should one exist
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def self.load_initfile
-      if File.exists?(initfile)
-        STDOUT.puts "Loading init file from #{initfile}" unless Merb.testing?
-        load(initfile)
-      elsif !Merb.testing?
-        Merb.fatal! "You are not in a Merb application, or you are in " \
-          "a flat application and have not specified the init file. If you " \
-          "are trying to create a new merb application, use merb-gen app."
-      end
-      nil
-    end
-
-    # Expands Ruby path with framework directories (for models, lib, etc). Only run once.
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def self.expand_ruby_path
-      # Add models, controllers, helpers and lib to the load path
-      unless @ran
-        Merb.logger.info "Expanding RUBY_PATH..." if Merb::Config[:verbose]
-
-        $LOAD_PATH.unshift Merb.dir_for(:model)
-        $LOAD_PATH.unshift Merb.dir_for(:controller)
-        $LOAD_PATH.unshift Merb.dir_for(:lib)
-        $LOAD_PATH.unshift Merb.dir_for(:helper)
-      end
-
-      @ran = true
-      nil
-    end
-end
-
-class Merb::BootLoader::MixinSession < Merb::BootLoader
-
-  # Mixin the session functionality; this is done before BeforeAppLoads
-  # so that SessionContainer and SessionStoreContainer can be subclassed by
-  # plugin session stores for example - these need to be loaded in a
-  # before_app_loads block or a BootLoader that runs after MixinSession.
-  #
-  # Note: access to Merb::Config is needed, so it needs to run after
-  # Merb::BootLoader::Dependencies is done.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    require 'merb-core/dispatch/session'
-    Merb::Controller.send(:include, ::Merb::SessionMixin)
-    Merb::Request.send(:include, ::Merb::SessionMixin::RequestMixin)
-  end
-
-end
-
-class Merb::BootLoader::BeforeAppLoads < Merb::BootLoader
-
-  # Call any before_app_loads hooks that were registered via before_app_loads
-  # in any plugins.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    Merb::BootLoader.before_load_callbacks.each { |x| x.call }
-    nil
-  end
-end
-
-# Load all classes inside the load paths.
-#
-# This is used in conjunction with Merb::BootLoader::ReloadClasses to track
-# files that need to be reloaded, and which constants need to be removed in
-# order to reload a file.
-#
-# This also adds the model, controller, and lib directories to the load path,
-# so they can be required in order to avoid load-order issues.
-class Merb::BootLoader::LoadClasses < Merb::BootLoader
-  LOADED_CLASSES = {}
-  MTIMES = {}
-
-  class << self
-
-    # Load all classes from Merb's native load paths.
-    #
-    # If fork-based loading is used, every time classes are loaded this will return in a new spawner process
-    # and boot loading will continue from this point in the boot loading process.
-    #
-    # If fork-based loading is not in use, this only returns once and does not fork a new
-    # process.
-    #
-    # ==== Returns
-    # Returns at least once:
-    #   nil
-    #
-    # @api plugin
-    def run
-      # process name you see in ps output
-      $0 = "merb#{" : " + Merb::Config[:name] if Merb::Config[:name]} : master"
-
-      # Log the process configuration user defined signal 1 (SIGUSR1) is received.
-      Merb.trap("USR1") do
-        require "yaml"
-        Merb.logger.fatal! "Configuration:\n#{Merb::Config.to_hash.merge(:pid => $$).to_yaml}\n\n"
-      end
-
-      if Merb::Config[:fork_for_class_load] && !Merb.testing?
-        start_transaction
-      else
-        Merb.trap('INT') do
-          Merb.logger.warn! "Reaping Workers"
-          reap_workers
-        end
-      end
-
-      # Load application file if it exists - for flat applications
-      load_file Merb.dir_for(:application) if File.file?(Merb.dir_for(:application))
-
-      # Load classes and their requirements
-      Merb.load_paths.each do |component, path|
-        next if path.last.blank? || component == :application || component == :router
-        load_classes(path.first / path.last)
-      end
-
-      Merb::Controller.send :include, Merb::GlobalHelpers
-
-      nil
-    end
-
-    # Wait for any children to exit, remove the "main" PID, and
-    # exit.
-    #
-    # ==== Returns
-    # (Does not return.)
-    #
-    # @api private
-    def exit_gracefully
-      # wait all workers to exit
-      Process.waitall
-      # remove master process pid
-      Merb::Server.remove_pid("main")
-      # terminate, workers remove their own pids
-      # in on exit hook
-
-      Merb::BootLoader.before_master_shutdown_callbacks.each do |cb|
-        begin
-          cb.call
-        rescue Exception => e
-          Merb.logger.fatal "before_master_shutdown callback crashed: #{e.message}"
-        end
-      end
-      exit
-    end
-
-    # Set up the BEGIN point for fork-based loading and sets up
-    # any signals in the parent and child. This is done by forking
-    # the app. The child process continues on to run the app. The parent
-    # process waits for the child process to finish and either forks again
-    #
-    #
-    # ==== Returns
-    # Parent Process:
-    #   (Does not return.)
-    # Child Process returns at least once:
-    #   nil
-    #
-    # @api private
-
-    def start_transaction
-      Merb.logger.warn! "Parent pid: #{Process.pid}"
-      reader, writer = nil, nil
-
-      if GC.respond_to?(:copy_on_write_friendly=)
-        GC.copy_on_write_friendly = true
-      end
-
-      loop do
-        # create two connected endpoints
-        # we use them for master/workers communication
-        reader, @writer = IO.pipe
-        pid = Kernel.fork
-
-        # pid means we're in the parent; only stay in the loop if that is case
-        break unless pid
-        # writer must be closed so reader can generate EOF condition
-        @writer.close
-
-        # master process stores pid to merb.main.pid
-        Merb::Server.store_pid("main")
-
-        if Merb::Config[:console_trap]
-          Merb.trap("INT") {}
-        else
-          # send ABRT to worker on INT
-          Merb.trap("INT") do
-            Merb.logger.warn! "Reaping Workers"
-            begin
-              Process.kill("ABRT", pid)
-            rescue SystemCallError
-            end
-            exit_gracefully
-          end
-        end
-
-        Merb.trap("HUP") do
-          Merb.logger.warn! "Doing a fast deploy\n"
-          Process.kill("HUP", pid)
-        end
-
-        reader_ary = [reader]
-        loop do
-          # wait for worker to exit and capture exit status
-          #
-          #
-          # WNOHANG specifies that wait2 exists without waiting
-          # if no worker processes are ready to be noticed.
-          if exit_status = Process.wait2(pid, Process::WNOHANG)
-            # wait2 returns a 2-tuple of process id and exit
-            # status.
-            #
-            # We do not care about specific pid here.
-            exit_status[1] && exit_status[1].exitstatus == 128 ? break : exit
-          end
-          # wait for data to become available, timeout in 0.25 of a second
-          if select(reader_ary, nil, nil, 0.25)
-            begin
-              # no open writers
-              next if reader.eof?
-              msg = reader.readline
-              if msg =~ /128/
-                Process.detach(pid)
-                break
-              else
-                exit_gracefully
-              end
-            rescue SystemCallError
-              exit_gracefully
-            end
-          end
-        end
-      end
-
-      reader.close
-
-      # add traps to the worker
-      if Merb::Config[:console_trap]
-        Merb::Server.add_irb_trap
-        at_exit { reap_workers }
-      else
-        Merb.trap('INT') { Merb::BootLoader.before_worker_shutdown_callbacks.each { |cb| cb.call } }
-        Merb.trap('ABRT') { reap_workers }
-        Merb.trap('HUP') { reap_workers(128) }
-      end
-    end
-
-    # Reap any workers of the spawner process and
-    # exit with an appropriate status code.
-    #
-    # Note that exiting the spawner process with a status code
-    # of 128 when a master process exists will cause the
-    # spawner process to be recreated, and the app code reloaded.
-    #
-    # ==== Parameters
-    # status<Integer>:: The status code to exit with. Defaults to 0.
-    #
-    # ==== Returns
-    # (Does not return.)
-    #
-    # @api private
-    # @param status<Integer> The status code to exit with
-    # @param sig<String>     The signal to send to workers
-    def reap_workers(status = 0, sig = "ABRT")
-      Merb.logger.info "Executed all before worker shutdown callbacks..."
-      Merb::BootLoader.before_worker_shutdown_callbacks.each do |cb|
-        begin
-          cb.call
-        rescue Exception => e
-          Merb.logger.fatal "before worker shutdown callback crashed: #{e.message}"
-        end
-
-      end
-
-      Merb.exiting = true unless status == 128
-
-      begin
-        @writer.puts(status.to_s) if @writer
-      rescue SystemCallError
-      end
-
-      threads = []
-
-      ($WORKERS || []).each do |p|
-        threads << Thread.new do
-          begin
-            Process.kill(sig, p)
-            Process.wait2(p)
-          rescue SystemCallError
-          end
-        end
-      end
-      threads.each {|t| t.join }
-      exit(status)
-    end
-
-    # Loads a file, tracking its modified time and, if necessary, the classes it declared.
-    #
-    # ==== Parameters
-    # file<String>:: The file to load.
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def load_file(file)
-      # Don't do this expensive operation unless we need to
-      unless Merb::Config[:fork_for_class_load]
-        klasses = ObjectSpace.classes.dup
-      end
-
-      # Ignore the file for syntax errors. The next time
-      # the file is changed, it'll be reloaded again
-      begin
-        require file
-      rescue SyntaxError => e
-        Merb.logger.error "Cannot load #{file} because of syntax error: #{e.message}"
-      ensure
-        if Merb::Config[:reload_classes]
-          MTIMES[file] = File.mtime(file)
-        end
-      end
-
-      # Don't do this expensive operation unless we need to
-      unless Merb::Config[:fork_for_class_load]
-        LOADED_CLASSES[file] = ObjectSpace.classes - klasses
-      end
-
-      nil
-    end
-
-    # Load classes from given paths - using path/glob pattern.
-    #
-    # ==== Parameters
-    # *paths<Array>::
-    #   Array of paths to load classes from - may contain glob pattern
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def load_classes(*paths)
-      orphaned_classes = []
-      paths.flatten.each do |path|
-        Dir[path].each do |file|
-          begin
-            load_file file
-          rescue NameError => ne
-            orphaned_classes.unshift(file)
-          end
-        end
-      end
-      load_classes_with_requirements(orphaned_classes)
-    end
-
-    # Reloads the classes in the specified file. If fork-based loading is used,
-    # this causes the current processes to be killed and and all classes to be
-    # reloaded. If class-based loading is not in use, the classes declared in that file
-    # are removed and the file is reloaded.
-    #
-    # ==== Parameters
-    # file<String>:: The file to reload.
-    #
-    # ==== Returns
-    # When fork-based loading is used:
-    #   (Does not return.)
-    # When fork-based loading is not in use:
-    #   nil
-    #
-    # @api private
-    def reload(file)
-      if Merb::Config[:fork_for_class_load]
-        reap_workers(128)
-      else
-        remove_classes_in_file(file) { |f| load_file(f) }
-      end
-    end
-
-    # Removes all classes declared in the specified file. Any hashes which use classes as keys
-    # will be protected provided they have been added to Merb.klass_hashes. These hashes have their
-    # keys substituted with placeholders before the file's classes are unloaded. If a block is provided,
-    # it is called before the substituted keys are reconstituted.
-    #
-    # ==== Parameters
-    # file<String>:: The file to remove classes for.
-    # &block:: A block to call with the file that has been removed before klass_hashes are updated
-    # to use the current values of the constants they used as keys.
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def remove_classes_in_file(file, &block)
-      Merb.klass_hashes.each { |x| x.protect_keys! }
-      if klasses = LOADED_CLASSES.delete(file)
-        klasses.each { |klass| remove_constant(klass) unless klass.to_s =~ /Router/ }
-      end
-      yield file if block_given?
-      Merb.klass_hashes.each {|x| x.unprotect_keys!}
-      nil
-    end
-
-    # Removes the specified class.
-    #
-    # Additionally, removes the specified class from the subclass list of every superclass that
-    # tracks it's subclasses in an array returned by _subclasses_list. Classes that wish to use this
-    # functionality are required to alias the reader for their list of subclasses
-    # to _subclasses_list. Plugins for ORMs and other libraries should keep this in mind.
-    #
-    # ==== Parameters
-    # const<Class>:: The class to remove.
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def remove_constant(const)
-      # This is to support superclasses (like AbstractController) that track
-      # their subclasses in a class variable.
-      superklass = const
-      until (superklass = superklass.superclass).nil?
-        if superklass.respond_to?(:_subclasses_list)
-          superklass.send(:_subclasses_list).delete(klass)
-          superklass.send(:_subclasses_list).delete(klass.to_s)
-        end
-      end
-
-      parts = const.to_s.split("::")
-      base = parts.size == 1 ? Object : Object.full_const_get(parts[0..-2].join("::"))
-      object = parts[-1].to_s
-      begin
-        base.send(:remove_const, object)
-        Merb.logger.debug("Removed constant #{object} from #{base}")
-      rescue NameError
-        Merb.logger.debug("Failed to remove constant #{object} from #{base}")
-      end
-      nil
-    end
-
-    private
-
-    # "Better loading" of classes.  If a file fails to load due to a NameError
-    # it will be added to the failed_classes and load cycle will be repeated unless
-    # no classes load.
-    #
-    # ==== Parameters
-    # klasses<Array[Class]>:: Classes to load.
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api private
-    def load_classes_with_requirements(klasses)
-      klasses.uniq!
-
-      while klasses.size > 0
-        # Note size to make sure things are loading
-        size_at_start = klasses.size
-
-        # List of failed classes
-        failed_classes = []
-        # Map classes to exceptions
-        error_map = {}
-
-        klasses.each do |klass|
-          klasses.delete(klass)
-          begin
-            load_file klass
-          rescue NameError => ne
-            error_map[klass] = ne
-            failed_classes.push(klass)
-          end
-        end
-
-        # Keep list of classes unique
-        failed_classes.each { |k| klasses.push(k) unless klasses.include?(k) }
-
-        # Stop processing if nothing loads or if everything has loaded
-        if klasses.size == size_at_start && klasses.size != 0
-          # Write all remaining failed classes and their exceptions to the log
-          messages = error_map.only(*failed_classes).map do |klass, e|
-            ["Could not load #{klass}:\n\n#{e.message} - (#{e.class})",
-              "#{(e.backtrace || []).join("\n")}"]
-          end
-          messages.each { |msg, trace| Merb.logger.fatal!("#{msg}\n\n#{trace}") }
-          Merb.fatal! "#{failed_classes.join(", ")} failed to load."
-        end
-        break if(klasses.size == size_at_start || klasses.size == 0)
-      end
-
-      nil
-    end
-
-  end
-
-end
-
-# Loads the router file. This needs to happen after everything else is loaded while merb is starting up to ensure
-# the router has everything it needs to run.
-class Merb::BootLoader::Router < Merb::BootLoader
-  class << self
-
-    # load the router file
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api plugin
-    def run
-      Merb::BootLoader::LoadClasses.load_file(router_file) if router_file
-
-      nil
-    end
-
-    # Tries to find the router file.
-    #
-    # ==== Returns
-    # String:: The path to the router file if it exists, nil otherwise.
-    def router_file
-      @router_file ||= begin
-        if File.file?(router = Merb.dir_for(:router) / Merb.glob_for(:router))
-          router
-        end
-      end
-    end
-
-  end
-end
-
-# Precompiles all non-partial templates.
-class Merb::BootLoader::Templates < Merb::BootLoader
-  class << self
-
-    # Loads all non-partial templates into the Merb::InlineTemplates module.
-    #
-    # ==== Returns
-    # Array[String]:: The list of template files which were loaded.
-    #
-    # @api plugin
-    def run
-      template_paths.each do |path|
-        Merb::Template.inline_template(File.open(path))
-      end
-    end
-
-    # Finds a list of templates to load.
-    #
-    # ==== Returns
-    # Array[String]:: All found template files whose basename does not begin with "_".
-    #
-    # @api private
-    def template_paths
-      extension_glob = "{#{Merb::Template.template_extensions.join(',')}}"
-
-      # This gets all templates set in the controllers template roots
-      # We separate the two maps because most of controllers will have
-      # the same _template_root, so it's silly to be globbing the same
-      # path over and over.
-      controller_view_paths = []
-      Merb::AbstractController._abstract_subclasses.each do |klass|
-        next if (const = Object.full_const_get(klass))._template_root.blank?
-        controller_view_paths += const._template_roots.map { |pair| pair.first }
-      end
-      template_paths = controller_view_paths.uniq.compact.map { |path| Dir["#{path}/**/*.#{extension_glob}"] }
-
-      # This gets the templates that might be created outside controllers
-      # template roots.  eg app/views/shared/*
-      template_paths << Dir["#{Merb.dir_for(:view)}/**/*.#{extension_glob}"] if Merb.dir_for(:view)
-
-      # This ignores templates for partials, which need to be compiled at use time to generate
-      # a preamble that assigns local variables
-      template_paths.flatten.compact.uniq.grep(%r{^.*/[^_][^/]*$})
-    end
-  end
-end
-
-# Register the default MIME types:
-#
-# By default, the mime-types include:
-# :all:: no transform, */*
-# :yaml:: to_yaml, application/x-yaml or text/yaml
-# :text:: to_text, text/plain
-# :html:: to_html, text/html or application/xhtml+xml or application/html
-# :xml:: to_xml, application/xml or text/xml or application/x-xml
-# :js:: to_json, text/javascript ot application/javascript or application/x-javascript
-# :json:: to_json, application/json or text/x-json
-class Merb::BootLoader::MimeTypes < Merb::BootLoader
-
-  # Registers the default MIME types.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    Merb.add_mime_type(:all,  nil,      %w[*/*])
-    Merb.add_mime_type(:yaml, :to_yaml, %w[application/x-yaml text/yaml], :charset => "utf-8")
-    Merb.add_mime_type(:text, :to_text, %w[text/plain], :charset => "utf-8")
-    Merb.add_mime_type(:html, :to_html, %w[text/html application/xhtml+xml application/html], :charset => "utf-8")
-    Merb.add_mime_type(:xml,  :to_xml,  %w[application/xml text/xml application/x-xml], {:charset => "utf-8"}, 0.9998)
-    Merb.add_mime_type(:js,   :to_json, %w[text/javascript application/javascript application/x-javascript], :charset => "utf-8")
-    Merb.add_mime_type(:json, :to_json, %w[application/json text/x-json], :charset => "utf-8")
-    nil
-  end
-end
-
-# Set up cookies support in Merb::Controller and Merb::Request
-class Merb::BootLoader::Cookies < Merb::BootLoader
-
-  # Set up cookies support in Merb::Controller and Merb::Request
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    require 'merb-core/dispatch/cookies'
-    Merb::Controller.send(:include, Merb::CookiesMixin)
-    Merb::Request.send(:include, Merb::CookiesMixin::RequestMixin)
-    nil
-  end
-
-end
-
-class Merb::BootLoader::SetupSession < Merb::BootLoader
-
-  # Enable the configured session container(s); any class that inherits from
-  # SessionContainer will be considered by its session_store_type attribute.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    # Require all standard session containers.
-    Dir[Merb.framework_root / "merb-core" / "dispatch" / "session" / "*.rb"].each do |file|
-      base_name = File.basename(file, ".rb")
-      require file unless base_name == "container" || base_name == "store_container"
-    end
-
-    # Set some defaults.
-    Merb::Config[:session_id_key] ||= "_session_id"
-
-    # List of all session_stores from :session_stores and :session_store config options.
-    config_stores = Merb::Config.session_stores
-
-    # Register all configured session stores - any loaded session container class
-    # (subclassed from Merb::SessionContainer) will be available for registration.
-    Merb::SessionContainer.subclasses.each do |class_name|
-      if(store = Object.full_const_get(class_name)) &&
-        config_stores.include?(store.session_store_type)
-          Merb::Request.register_session_type(store.session_store_type, class_name)
-      end
-    end
-
-    # Mixin the Merb::Session module to add app-level functionality to sessions
-    overrides = (Merb::Session.instance_methods & Merb::SessionContainer.instance_methods)
-    overrides.each do |m| 
-      Merb.logger.warn!("Warning: Merb::Session##{m} overrides existing " \
-                        "Merb::SessionContainer##{m}")
-    end    
-    Merb::SessionContainer.send(:include, Merb::Session)
-    nil
-  end
-
-end
-
-# In case someone's running a sparse app, the default exceptions require the
-# Exceptions class.  This must run prior to the AfterAppLoads BootLoader
-# So that plugins may have ensured access in the after_app_loads block
-class Merb::BootLoader::SetupStubClasses < Merb::BootLoader
-  # Declares empty Application and Exception controllers.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    unless defined?(Exceptions)
-      Object.class_eval <<-RUBY
-        class Application < Merb::Controller
-          abstract!
-        end
-
-        class Exceptions < Merb::Controller
-        end
-      RUBY
-    end
-    nil
-  end
-end
-
-class Merb::BootLoader::AfterAppLoads < Merb::BootLoader
-
-  # Call any after_app_loads hooks that were registered via after_app_loads in
-  # init.rb.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    Merb::BootLoader.after_load_callbacks.each {|x| x.call }
-    nil
-  end
-end
-
-class Merb::BootLoader::ChooseAdapter < Merb::BootLoader
-
-  # Choose the Rack adapter/server to use and set Merb.adapter.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    Merb.adapter = Merb::Rack::Adapter.get(Merb::Config[:adapter])
-  end
-end
-
-class Merb::BootLoader::RackUpApplication < Merb::BootLoader
-  # Setup the Merb Rack App or read a rackup file located at
-  # Merb::Config[:rackup] with the same syntax as the
-  # rackup tool that comes with rack. Automatically evals the file in
-  # the context of a Rack::Builder.new { } block. Allows for mounting
-  # additional apps or middleware.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    require 'rack'
-    if File.exists?(Merb.dir_for(:config) / "rack.rb")
-      Merb::Config[:rackup] ||= Merb.dir_for(:config) / "rack.rb"
-    end
-
-    if Merb::Config[:rackup]
-      rackup_code = File.read(Merb::Config[:rackup])
-      Merb::Config[:app] = eval("::Rack::Builder.new {( #{rackup_code}\n )}.to_app", TOPLEVEL_BINDING, Merb::Config[:rackup])
-    else
-      Merb::Config[:app] = ::Rack::Builder.new {
-         if prefix = ::Merb::Config[:path_prefix]
-           use Merb::Rack::PathPrefix, prefix
-         end
-         use Merb::Rack::Static, Merb.dir_for(:public)
-         run Merb::Rack::Application.new
-       }.to_app
-    end
-
-    nil
-  end
-end
-
-class Merb::BootLoader::ReloadClasses < Merb::BootLoader
-
-  class TimedExecutor
-    # Executes the associated block every @seconds@ seconds in a separate thread.
-    #
-    # ==== Parameters
-    # seconds<Integer>:: Number of seconds to sleep in between runs of &block.
-    # &block:: The block to execute periodically.
-    #
-    # ==== Returns
-    # Thread:: The thread executing the block periodically.
-    #
-    # @api private
-    def self.every(seconds, &block)
-      Thread.new do
-        loop do
-          sleep( seconds )
-          yield
-        end
-        Thread.exit
-      end
-    end
-  end
-
-  # Set up the class reloader if class reloading is enabled. This checks periodically
-  # for modifications to files loaded by the LoadClasses BootLoader and reloads them
-  # when they are modified.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api plugin
-  def self.run
-    return unless Merb::Config[:reload_classes]
-
-    paths = []
-    Merb.load_paths.each do |path_name, file_info|
-      path, glob = file_info
-      next unless glob
-      paths << Dir[path / glob]
-    end
-
-    if Merb.dir_for(:application) && File.file?(Merb.dir_for(:application))
-      paths << Merb.dir_for(:application)
-    end
-
-    paths.flatten!
-
-    TimedExecutor.every(Merb::Config[:reload_time] || 0.5) do
-      GC.start
-      reload(paths)
-    end
-
-    nil
-  end
-
-  # Reloads all files which have been modified since they were last loaded.
-  #
-  # ==== Returns
-  # nil
-  #
-  # @api private
-  def self.reload(paths)
-    paths.each do |file|
-      next if LoadClasses::MTIMES[file] &&
-        LoadClasses::MTIMES[file] == File.mtime(file)
-
-      LoadClasses.reload(file)
-    end
-
-    nil
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/config.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/config.rb
deleted file mode 100644
index 0e9c9a2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/config.rb
+++ /dev/null
@@ -1,470 +0,0 @@
-require "optparse"
-
-module Merb
-
-  class Config
-
-    class << self
-
-      # Returns the hash of default config values for Merb.
-      #
-      # ==== Returns
-      # Hash:: The defaults for the config.
-      #
-      # @api private
-      def defaults
-        @defaults ||= {
-          :host                   => "0.0.0.0",
-          :port                   => "4000",
-          :adapter                => "runner",
-          :reload_classes         => true,
-          :fork_for_class_load    => Merb.forking_environment?,
-          :environment            => "development",
-          :merb_root              => Dir.pwd,
-          :use_mutex              => true,
-          :log_delimiter          => " ~ ",
-          :log_auto_flush         => false,
-          :log_level              => :info,
-          :log_stream             => STDOUT,
-          :disabled_components    => Merb.on_windows? ? [:signals] : [],
-          :deferred_actions       => [],
-          :verbose                => false,
-          :name                   => "merb"
-        }
-      end
-
-      # Yields the configuration.
-      #
-      # ==== Block parameters
-      # c<Hash>:: The configuration parameters.
-      #
-      # ==== Examples
-      #   Merb::Config.use do |config|
-      #     config[:exception_details] = false
-      #     config[:log_stream]        = STDOUT
-      #   end
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api public
-      def use
-        @configuration ||= {}
-        yield @configuration
-        nil
-      end
-      
-      # Detects whether the provided key is in the config.
-      #
-      # ==== Parameters
-      # key<Object>:: The key to check.
-      #
-      # ==== Returns
-      # Boolean:: True if the key exists in the config.
-      #
-      # @api public
-      def key?(key)
-        @configuration.key?(key)
-      end
-
-      # Retrieve the value of a config entry.
-      #
-      # ==== Parameters
-      # key<Object>:: The key to retrieve the parameter for.
-      #
-      # ==== Returns
-      # Object:: The value of the configuration parameter.
-      #
-      # @api public
-      def [](key)
-        (@configuration ||= setup)[key]
-      end
-
-      # Set the value of a config entry.
-      #
-      # ==== Parameters
-      # key<Object>:: The key to set the parameter for.
-      # val<Object>:: The value of the parameter.
-      def []=(key, val)
-        (@configuration ||= setup)[key] = val
-      end
-
-      # Remove the value of a config entry.
-      #
-      # ==== Parameters
-      # key<Object>:: The key of the parameter to delete.
-      #
-      # ==== Returns
-      # Object:: The value of the removed entry.
-      #
-      # @api public
-      def delete(key)
-        @configuration.delete(key)
-      end
-
-      # Retrieve the value of a config entry, returning the provided default if the key is not present
-      #
-      # ==== Parameters
-      # key<Object>:: The key to retrieve the parameter for.
-      # default<Object>::
-      #   The default value to return if the parameter is not set.
-      #
-      # ==== Returns
-      # Object:: The value of the configuration parameter or the default.
-      def fetch(key, default)
-        @configuration.fetch(key, default)
-      end
-
-      # Returns the configuration as a hash.
-      #
-      # ==== Returns
-      # Hash:: The config as a hash.
-      #
-      # @api public
-      def to_hash
-        @configuration
-      end
-
-      # Returns the config as YAML.
-      #
-      # ==== Returns
-      # String:: The config as YAML.
-      #
-      # @api public
-      def to_yaml
-        require "yaml"
-        @configuration.to_yaml
-      end
-
-      # Sets up the configuration by storing the given settings.
-      #
-      # ==== Parameters
-      # settings<Hash>::
-      #   Configuration settings to use. These are merged with the defaults.
-      #
-      # ==== Returns
-      # The configuration as a hash.
-      #
-      # @api private
-      def setup(settings = {})
-        @configuration = defaults.merge(settings)
-        
-        unless @configuration[:reload_classes]
-          @configuration[:fork_for_class_load] = false
-        end
-        
-        @configuration
-      end
-
-      # Parses the command line arguments and stores them in the config.
-      #
-      # ==== Parameters
-      # argv<String>:: The command line arguments. Defaults to +ARGV+.
-      #
-      # ==== Returns
-      # The configuration as a hash.
-      #
-      # @api private
-      def parse_args(argv = ARGV)
-        @configuration ||= {}
-        # Our primary configuration hash for the length of this method
-        options = {}
-
-        # Environment variables always win
-        options[:environment] = ENV["MERB_ENV"] if ENV["MERB_ENV"]
-        
-        # Build a parser for the command line arguments
-        opts = OptionParser.new do |opts|
-          opts.version = Merb::VERSION
-
-          opts.banner = "Usage: merb [uGdcIpPhmailLerkKX] [argument]"
-          opts.define_head "Merb. Pocket rocket web framework"
-          opts.separator '*' * 80
-          opts.separator "If no flags are given, Merb starts in the " \
-            "foreground on port 4000."
-          opts.separator '*' * 80
-
-          opts.on("-u", "--user USER", "This flag is for having merb run " \
-                  "as a user other than the one currently logged in. Note: " \
-                  "if you set this you must also provide a --group option " \
-                  "for it to take effect.") do |user|
-            options[:user] = user
-          end
-
-          opts.on("-G", "--group GROUP", "This flag is for having merb run " \
-                  "as a group other than the one currently logged in. Note: " \
-                  "if you set this you must also provide a --user option " \
-                  "for it to take effect.") do |group|
-            options[:group] = group
-          end
-
-          opts.on("-d", "--daemonize", "This will run a single merb in the " \
-                  "background.") do |daemon|
-            options[:daemonize] = true
-          end
-          
-          opts.on("-N", "--no-daemonize", "This will allow you to run a " \
-                  "cluster in console mode") do |no_daemon|
-            options[:daemonize] = false
-          end
-
-          opts.on("-c", "--cluster-nodes NUM_MERBS", Integer, 
-                  "Number of merb daemons to run.") do |nodes|
-            options[:daemonize] = true unless options.key?(:daemonize)
-            options[:cluster] = nodes
-          end
-
-          opts.on("-I", "--init-file FILE", "File to use for initialization " \
-                  "on load, defaults to config/init.rb") do |init_file|
-            options[:init_file] = init_file
-          end
-
-          opts.on("-p", "--port PORTNUM", Integer, "Port to run merb on, " \
-                  "defaults to 4000.") do |port|
-            options[:port] = port
-          end
-
-          opts.on("-o", "--socket-file FILE", "Socket file to run merb on, " \
-                  "defaults to [Merb.root]/log/merb.sock. This is for " \
-                  "web servers, like thin, that use sockets." \
-                  "Specify this *only* if you *must*.") do |port|
-            options[:socket_file] = port
-          end
-
-          opts.on("-s", "--socket SOCKNUM", Integer, "Socket number to run " \
-                  "merb on, defaults to 0.") do |port|
-            options[:socket] = port
-          end
-
-          opts.on("-n", "--name NAME", String, "Set the name of the application. "\
-                  "This is used in the process title and log file names.") do |name|
-            options[:name] = name
-          end
-
-          opts.on("-P", "--pid PIDFILE", "PID file, defaults to " \
-                  "[Merb.root]/log/merb.main.pid for the master process and" \
-                  "[Merb.root]/log/merb.[port number].pid for worker " \
-                  "processes. For clusters, use %s to specify where " \
-                  "in the file merb should place the port number. For " \
-                  "instance: -P myapp.%s.pid") do |pid_file|
-            options[:pid_file] = pid_file
-          end
-
-          opts.on("-h", "--host HOSTNAME", "Host to bind to " \
-                  "(default is 0.0.0.0).") do |host|
-            options[:host] = host
-          end
-
-          opts.on("-m", "--merb-root /path/to/approot", "The path to the " \
-                  "Merb.root for the app you want to run " \
-                  "(default is current working directory).") do |root|
-            options[:merb_root] = File.expand_path(root)
-          end
-
-          adapters = [:mongrel, :emongrel, :thin, :ebb, :fastcgi, :webrick]
-
-          opts.on("-a", "--adapter ADAPTER",
-                  "The rack adapter to use to run merb (default is mongrel)" \
-                  "[#{adapters.join(', ')}]") do |adapter|
-            options[:adapter] ||= adapter
-          end
-
-          opts.on("-R", "--rackup FILE", "Load an alternate Rack config " \
-                  "file (default is config/rack.rb)") do |rackup|
-            options[:rackup] = rackup
-          end
-
-          opts.on("-i", "--irb-console", "This flag will start merb in " \
-                  "irb console mode. All your models and other classes will " \
-                  "be available for you in an irb session.") do |console|
-            options[:adapter] = 'irb'
-          end
-
-          opts.on("-S", "--sandbox", "This flag will enable a sandboxed irb " \
-                  "console. If your ORM supports transactions, all edits will " \
-                  "be rolled back on exit.") do |sandbox|
-            options[:sandbox] = true
-          end
-
-          opts.on("-l", "--log-level LEVEL", "Log levels can be set to any of " \
-                  "these options: debug < info < warn < error < " \
-                  "fatal (default is info)") do |log_level|
-            options[:log_level] = log_level.to_sym
-            options[:force_logging] = true
-          end
-
-          opts.on("-L", "--log LOGFILE", "A string representing the logfile to " \
-                  "use. Defaults to [Merb.root]/log/merb.[main].log for the " \
-                  "master process and [Merb.root]/log/merb[port number].log" \
-                  "for worker processes") do |log_file|
-            options[:log_file] = log_file
-            options[:force_logging] = true
-          end
-
-          opts.on("-e", "--environment STRING", "Environment to run Merb " \
-                  "under [development, production, testing] " \
-                  "(default is development)") do |env|
-            options[:environment] = env
-          end
-
-          opts.on("-r", "--script-runner ['RUBY CODE'| FULL_SCRIPT_PATH]",
-                  "Command-line option to run scripts and/or code in the " \
-                  "merb app.") do |code_or_file|
-            options[:runner_code] = code_or_file
-            options[:adapter] = 'runner'
-          end
-
-          opts.on("-K", "--graceful PORT or all", "Gracefully kill one " \
-                  "merb proceses by port number.  Use merb -K all to " \
-                  "gracefully kill all merbs.") do |ports|
-            options[:action] = :kill
-            ports = "main" if ports == "all"
-            options[:port] = ports
-          end
-
-          opts.on("-k", "--kill PORT", "Force kill one merb worker " \
-                  "by port number. This will cause the worker to" \
-                  "be respawned.") do |port|
-            options[:action] = :kill_9
-            port = "main" if port == "all"
-            options[:port] = port
-          end
-          
-          opts.on("--fast-deploy", "Reload the code, but not your" \
-            "init.rb or gems") do
-              options[:action] = :fast_deploy
-          end
-
-          # @todo Do we really need this flag? It seems unlikely to want to
-          #   change the mutex from the command-line.
-          opts.on("-X", "--mutex on/off", "This flag is for turning the " \
-                  "mutex lock on and off.") do |mutex|
-            if mutex == "off"
-              options[:use_mutex] = false
-            else
-              options[:use_mutex] = true
-            end
-          end
-
-          opts.on("-D", "--debugger", "Run merb using rDebug.") do
-            begin
-              require "ruby-debug"
-              Debugger.start
-
-              # Load up any .rdebugrc files we find
-              [".", ENV["HOME"], ENV["HOMEPATH"]].each do |script_dir|
-                script_file = "#{script_dir}/.rdebugrc"
-                Debugger.run_script script_file, StringIO.new if File.exists?(script_file)
-              end
-
-              if Debugger.respond_to?(:settings)
-                Debugger.settings[:autoeval] = true
-              end
-              puts "Debugger enabled"
-            rescue LoadError
-              puts "You need to install ruby-debug to run the server in " \
-                "debugging mode. With gems, use `gem install ruby-debug'"
-              exit
-            end
-          end
-
-          opts.on("-V", "--verbose", "Print extra information") do
-            options[:verbose] = true
-          end
-
-          opts.on("-C", "--console-trap", "Enter an irb console on ^C") do
-            options[:console_trap] = true
-          end
-
-          opts.on("-?", "-H", "--help", "Show this help message") do
-            puts opts
-            exit
-          end
-        end
-
-        # Parse what we have on the command line
-        begin
-          opts.parse!(argv)
-        rescue OptionParser::InvalidOption => e
-          Merb.fatal! e.message, e
-        end
-        Merb::Config.setup(options)
-      end
-
-      attr_accessor :configuration
-
-      # Set configuration parameters from a code block, where each method
-      # evaluates to a config parameter.
-      #
-      # ==== Parameters
-      # &block:: Configuration parameter block.
-      #
-      # ==== Examples
-      #   # Set environment and log level.
-      #   Merb::Config.configure do
-      #     environment "development"
-      #     log_level   "debug"
-      #     log_file    Merb.root / "log" / "special.log"
-      #   end
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api public
-      def configure(&block)
-        ConfigBlock.new(self, &block) if block_given?
-        nil
-      end
-
-      # Allows retrieval of single key config values via Merb.config.<key>
-      # Allows single key assignment via Merb.config.<key> = ...
-      #
-      # ==== Parameters
-      # method<~to_s>:: Method name as hash key value.
-      # *args:: Value to set the configuration parameter to.
-      #
-      # ==== Returns
-      # The value of the entry fetched or assigned to.
-      #
-      # @api public
-      def method_missing(method, *args)
-        if method.to_s[-1,1] == '='
-          @configuration[method.to_s.tr('=','').to_sym] = *args
-        else
-          @configuration[method]
-        end
-      end
-
-    end # class << self
-
-    class ConfigBlock
-
-      # Evaluates the provided block, where any call to a method causes
-      # #[]= to be called on klass with the method name as the key and the arguments
-      # as the value.
-      #
-      # ==== Parameters
-      # klass<Object~[]=>:: The object on which to assign values.
-      # &block:: The block which specifies the config values to set.
-      #
-      # ==== Returns
-      # nil
-      #
-      # @api private
-      def initialize(klass, &block)
-        @klass = klass
-        instance_eval(&block)
-      end
-
-      # Assign args as the value of the entry keyed by method.
-      #
-      # @api private
-      def method_missing(method, *args)
-        @klass[method] = *args
-      end
-
-    end # class Configurator
-
-  end # Config
-
-end # Merb
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/constants.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/constants.rb
deleted file mode 100644
index 7230dbc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/constants.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-# Most of this list is simply constants frozen for efficiency
-# and lowered memory consumption. Every time Ruby VM comes
-# across a string or a number or a regexp literal,
-# new object is created.
-#
-# This means if you refer to the same string 6 times per request
-# and your application takes 100 requests per second, there are
-# 600 objects for weak MRI garbage collector to work on.
-#
-# GC cycles take up to 80% (!) time of request processing in
-# some cases. Eventually Rubinius and maybe MRI 2.0 gonna
-# improve this situation but at the moment, all commonly used
-# strings, regexp and numbers used as constants so no extra
-# objects created and VM just operates pointers.
-module Merb
-  module Const
-
-    DEFAULT_SEND_FILE_OPTIONS = {
-      :type         => 'application/octet-stream'.freeze,
-      :disposition  => 'attachment'.freeze
-    }.freeze
-
-    RACK_INPUT               = 'rack.input'.freeze
-    SET_COOKIE               = " %s=%s; path=/; expires=%s".freeze
-    COOKIE_EXPIRATION_FORMAT = "%a, %d-%b-%Y %H:%M:%S GMT".freeze
-    COOKIE_SPLIT             = /[;,] */n.freeze
-    COOKIE_REGEXP            = /\s*(.+)=(.*)\s*/.freeze
-    COOKIE_EXPIRED_TIME      = Time.at(0).freeze
-    HOUR                     = 60 * 60
-    DAY                      = HOUR * 24
-    WEEK                     = DAY * 7
-    MULTIPART_REGEXP         = /\Amultipart\/form-data.*boundary=\"?([^\";,]+)/n.freeze
-    HTTP_COOKIE              = 'HTTP_COOKIE'.freeze
-    QUERY_STRING             = 'QUERY_STRING'.freeze
-    JSON_MIME_TYPE_REGEXP    = %r{^application/json|^text/x-json}.freeze
-    XML_MIME_TYPE_REGEXP     = %r{^application/xml|^text/xml}.freeze
-    FORM_URL_ENCODED_REGEXP  = %r{^application/x-www-form-urlencoded}.freeze
-    LOCAL_IP_REGEXP          = /^unknown$|^(127|10|172\.16|192\.168)\./i.freeze
-    XML_HTTP_REQUEST_REGEXP  = /XMLHttpRequest/i.freeze
-    UPCASE_CONTENT_TYPE      = 'CONTENT_TYPE'.freeze
-    CONTENT_TYPE             = "Content-Type".freeze
-    DATE                     = 'Date'.freeze
-    UPCASE_HTTPS             = 'HTTPS'.freeze
-    HTTPS                    = 'https'.freeze
-    HTTP                     = 'http'.freeze
-    ETAG                     = 'ETag'.freeze
-    LAST_MODIFIED            = "Last-Modified".freeze
-    GET                      = "GET".freeze
-    POST                     = "POST".freeze
-    HEAD                     = "HEAD".freeze
-    CONTENT_LENGTH           = "CONTENT_LENGTH".freeze
-    HTTP_CLIENT_IP           = "HTTP_CLIENT_IP".freeze
-    HTTP_X_REQUESTED_WITH    = "HTTP_X_REQUESTED_WITH".freeze
-    HTTP_X_FORWARDED_FOR     = "HTTP_X_FORWARDED_FOR".freeze
-    HTTP_X_FORWARDED_PROTO   = "HTTP_X_FORWARDED_PROTO".freeze
-    HTTP_X_FORWARDED_HOST    = "HTTP_X_FORWARDED_HOST".freeze
-    HTTP_IF_MODIFIED_SINCE   = "HTTP_IF_MODIFIED_SINCE".freeze
-    HTTP_IF_NONE_MATCH       = "HTTP_IF_NONE_MATCH".freeze
-    HTTP_CONTENT_TYPE        = "HTTP_CONTENT_TYPE".freeze
-    HTTP_CONTENT_LENGTH      = "HTTP_CONTENT_LENGTH".freeze
-    HTTP_REFERER             = "HTTP_REFERER".freeze
-    HTTP_USER_AGENT          = "HTTP_USER_AGENT".freeze
-    HTTP_HOST                = "HTTP_HOST".freeze
-    HTTP_CONNECTION          = "HTTP_CONNECTION".freeze
-    HTTP_KEEP_ALIVE          = "HTTP_KEEP_ALIVE".freeze
-    HTTP_ACCEPT              = "HTTP_ACCEPT".freeze
-    HTTP_ACCEPT_ENCODING     = "HTTP_ACCEPT_ENCODING".freeze
-    HTTP_ACCEPT_LANGUAGE     = "HTTP_ACCEPT_LANGUAGE".freeze
-    HTTP_ACCEPT_CHARSET      = "HTTP_ACCEPT_CHARSET".freeze
-    HTTP_CACHE_CONTROL       = "HTTP_CACHE_CONTROL".freeze
-    UPLOAD_ID                = "upload_id".freeze
-    PATH_INFO                = "PATH_INFO".freeze
-    HTTP_VERSION             = "HTTP_VERSION".freeze
-    GATEWAY_INTERFACE        = "GATEWAY_INTERFACE".freeze
-    SCRIPT_NAME              = "SCRIPT_NAME".freeze
-    SERVER_NAME              = "SERVER_NAME".freeze
-    SERVER_SOFTWARE          = "SERVER_SOFTWARE".freeze
-    SERVER_PROTOCOL          = "SERVER_PROTOCOL".freeze
-    SERVER_PORT              = "SERVER_PORT".freeze
-    REQUEST_URI              = "REQUEST_URI".freeze
-    REQUEST_PATH             = "REQUEST_PATH".freeze
-    REQUEST_METHOD           = "REQUEST_METHOD".freeze
-    REMOTE_ADDR              = "REMOTE_ADDR".freeze
-    BREAK_TAG                = "<br/>".freeze
-    EMPTY_STRING             = "".freeze
-    NEWLINE                  = "\n".freeze
-    SLASH                    = "/".freeze
-    DOT                      = ".".freeze
-    QUESTION_MARK            = "?".freeze
-    DOUBLE_NEWLINE           = "\n\n".freeze
-    LOCATION                 = "Location".freeze
-    TEXT_SLASH_HTML          = "text/html".freeze
-
-    WIN_PLATFORM_REGEXP      = /(:?mswin|mingw)/.freeze
-    JAVA_PLATFORM_REGEXP     = /java/.freeze
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/abstract_controller.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/abstract_controller.rb
deleted file mode 100644
index 6eefe83..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/abstract_controller.rb
+++ /dev/null
@@ -1,713 +0,0 @@
-# ==== Why do we use Underscores?
-# In Merb, views are actually methods on controllers. This provides
-# not-insignificant speed benefits, as well as preventing us from
-# needing to copy over instance variables, which we think is proof
-# that everything belongs in one class to begin with.
-#
-# Unfortunately, this means that view helpers need to be included
-# into the <strong>Controller</strong> class. To avoid causing confusion
-# when your helpers potentially conflict with our instance methods,
-# we use an _ to disambiguate. As long as you don't begin your helper
-# methods with _, you only need to worry about conflicts with Merb
-# methods that are part of the public API.
-#
-#
-#
-# ==== Filters
-# #before is a class method that allows you to specify before filters in
-# your controllers. Filters can either be a symbol or string that
-# corresponds to a method name to call, or a proc object. if it is a method
-# name that method will be called and if it is a proc it will be called
-# with an argument of self where self is the current controller object.
-# When you use a proc as a filter it needs to take one parameter.
-# 
-# #after is identical, but the filters are run after the action is invoked.
-#
-# ===== Examples
-#   before :some_filter
-#   before :authenticate, :exclude => [:login, :signup]
-#   before :has_role, :with => ["Admin"], :exclude => [:index, :show]
-#   before Proc.new { some_method }, :only => :foo
-#   before :authorize, :unless => :logged_in?  
-#
-# You can use either <code>:only => :actionname</code> or 
-# <code>:exclude => [:this, :that]</code> but not both at once. 
-# <code>:only</code> will only run before the listed actions and 
-# <code>:exclude</code> will run for every action that is not listed.
-#
-# Merb's before filter chain is very flexible. To halt the filter chain you
-# use <code>throw :halt</code>. If <code>throw</code> is called with only one 
-# argument of <code>:halt</code> the return value of the method 
-# <code>filters_halted</code> will be what is rendered to the view. You can 
-# override <code>filters_halted</code> in your own controllers to control what 
-# it outputs. But the <code>throw</code> construct is much more powerful than 
-# just that.
-#
-# <code>throw :halt</code> can also take a second argument. Here is what that 
-# second argument can be and the behavior each type can have:
-#
-# * +String+:
-#   when the second argument is a string then that string will be what
-#   is rendered to the browser. Since merb's <code>#render</code> method returns
-#   a string you can render a template or just use a plain string:
-#
-#     throw :halt, "You don't have permissions to do that!"
-#     throw :halt, render(:action => :access_denied)
-#
-# * +Symbol+:
-#   If the second arg is a symbol, then the method named after that
-#   symbol will be called
-#
-#     throw :halt, :must_click_disclaimer
-#
-# * +Proc+:
-#   If the second arg is a Proc, it will be called and its return
-#   value will be what is rendered to the browser:
-#
-#     throw :halt, proc { access_denied }
-#     throw :halt, proc { Tidy.new(c.index) }
-#
-# ===== Filter Options (.before, .after, .add_filter, .if, .unless)
-# :only<Symbol, Array[Symbol]>::
-#   A list of actions that this filter should apply to
-#
-# :exclude<Symbol, Array[Symbol]::
-#   A list of actions that this filter should *not* apply to
-# 
-# :if<Symbol, Proc>::
-#   Only apply the filter if the method named after the symbol or calling the proc evaluates to true
-# 
-# :unless<Symbol, Proc>::
-#   Only apply the filter if the method named after the symbol or calling the proc evaluates to false
-#
-# :with<Array[Object]>::
-#   Arguments to be passed to the filter. Since we are talking method/proc calls,
-#   filter method or Proc should to have the same arity
-#   as number of elements in Array you pass to this option.
-#
-# ===== Types (shortcuts for use in this file)
-# Filter:: <Array[Symbol, (Symbol, String, Proc)]>
-#
-# ==== params[:action] and params[:controller] deprecated
-# <code>params[:action]</code> and <code>params[:controller]</code> have been deprecated as of
-# the 0.9.0 release. They are no longer set during dispatch, and
-# have been replaced by <code>action_name</code> and <code>controller_name</code> respectively.
-class Merb::AbstractController
-  include Merb::RenderMixin
-  include Merb::InlineTemplates
-  
-  class_inheritable_accessor :_layout, :_template_root, :template_roots
-  class_inheritable_accessor :_before_filters, :_after_filters
-  class_inheritable_accessor :_before_dispatch_callbacks, :_after_dispatch_callbacks
-
-  cattr_accessor :_abstract_subclasses
-
-  #---
-  # @api semipublic
-  attr_accessor :body
-  attr_accessor :action_name
-  attr_accessor :_benchmarks, :_thrown_content  
-
-  # Stub so content-type support in RenderMixin doesn't throw errors
-  attr_accessor :content_type
-
-  FILTER_OPTIONS = [:only, :exclude, :if, :unless, :with]
-
-  self._before_filters, self._after_filters = [], []
-  self._before_dispatch_callbacks, self._after_dispatch_callbacks = [], []
-
-  #---
-  # We're using abstract_subclasses so that Merb::Controller can have its
-  # own subclasses. We're using a Set so we don't have to worry about
-  # uniqueness.
-  self._abstract_subclasses = Set.new
-
-  # ==== Returns
-  # String:: The controller name in path form, e.g. "admin/items".
-  # @api public
-  def self.controller_name() @controller_name ||= self.name.to_const_path end
-
-  # ==== Returns
-  # String:: The controller name in path form, e.g. "admin/items".
-  #
-  # @api public
-  def controller_name()      self.class.controller_name                   end
-  
-  # This is called after the controller is instantiated to figure out where to
-  # look for templates under the _template_root. Override this to define a new
-  # structure for your app.
-  #
-  # ==== Parameters
-  # context<~to_s>:: The controller context (the action or template name).
-  # type<~to_s>:: The content type. Could be nil. 
-  # controller<~to_s>::
-  #   The name of the controller. Defaults to being called with the controller_name.  Set t
-  #
-  #
-  # ==== Returns
-  # String:: 
-  #   Indicating where to look for the template for the current controller,
-  #   context, and content-type.
-  #
-  # ==== Notes
-  # The type is irrelevant for controller-types that don't support
-  # content-type negotiation, so we default to not include it in the
-  # superclass.
-  #
-  # ==== Examples
-  #   def _template_location
-  #     "#{params[:controller]}.#{params[:action]}.#{content_type}"
-  #   end
-  #
-  # This would look for templates at controller.action.mime.type instead
-  # of controller/action.mime.type
-  #
-  # @api public
-  # @overridable
-  def _template_location(context, type, controller)
-    controller ? "#{controller}/#{context}" : context
-  end
-
-  # The location to look for a template - override this method for particular behaviour. 
-  #
-  # ==== Parameters
-  # template<String>:: The absolute path to a template - without template extension.
-  # type<~to_s>::
-  #    The mime-type of the template that will be rendered. Defaults to being called with nil.
-  #
-  # @api public
-  # @overridable
-  def _absolute_template_location(template, type)
-    template
-  end
-
-  # Resets the template roots to the template root passed in.
-  #
-  # ==== Parameters
-  # root<~to_s>:: 
-  #   The new path to set the template root to.  
-  #
-  # @api public
-  def self._template_root=(root)
-    @_template_root = root
-    _reset_template_roots
-  end
-
-  # Reset the template root based on the @_template_root ivar.
-  #
-  # @api private
-  def self._reset_template_roots
-    self.template_roots = [[self._template_root, :_template_location]]
-  end
-
-  # ==== Returns
-  # roots<Array[Array]>::
-  #   Template roots as pairs of template root path and template location
-  #   method.
-  #
-  # @api unknown
-  def self._template_roots
-    self.template_roots || _reset_template_roots
-  end
-
-  # ==== Parameters
-  # roots<Array[Array]>::
-  #   Template roots as pairs of template root path and template location
-  #   method.
-  #
-  # @api unknown
-  def self._template_roots=(roots)
-    self.template_roots = roots
-  end
-  
-  # Returns the list of classes that have specifically subclassed AbstractController.  
-  # Does not include all decendents.  
-  #
-  # ==== Returns
-  # Set:: The subclasses.
-  #
-  # @api private
-  def self.subclasses_list() _abstract_subclasses end
-  
-  # ==== Parameters
-  # klass<Merb::AbstractController>::
-  #   The controller that is being inherited from Merb::AbstractController
-  #
-  # @api private
-  def self.inherited(klass)
-    _abstract_subclasses << klass.to_s
-    helper_module_name = klass.to_s =~ /^(#|Merb::)/ ? "#{klass}Helper" : "Merb::#{klass}Helper"
-    Object.make_module helper_module_name
-    klass.class_eval <<-HERE
-      include Object.full_const_get("#{helper_module_name}") rescue nil
-    HERE
-    super
-  end    
-  
-  # This will initialize the controller, it is designed to be overridden in subclasses (like MerbController)
-  # ==== Parameters
-  # *args:: The args are ignored in this class, but we need this so that subclassed initializes can have parameters
-  #
-  # @overridable
-  def initialize(*args)
-    @_benchmarks = {}
-    @_caught_content = {}
-  end
-  
-  # This will dispatch the request, calling internal before/after dispatch callbacks.  
-  # If the return value of _call_filters is not :filter_chain_completed the action is not called, and the return from the filters is used instead. 
-  # 
-  # ==== Parameters
-  # action<~to_s>::
-  #   The action to dispatch to. This will be #send'ed in _call_action.
-  #   Defaults to :to_s.
-  #
-  # ==== Returns
-  # <~to_s>::
-  #   Returns the string that was returned from the action. 
-  #
-  # ==== Raises
-  # ArgumentError:: Invalid result caught from before filters.
-  #
-  # @api plugin
-  def _dispatch(action)
-    self.action_name = action
-    self._before_dispatch_callbacks.each { |cb| cb.call(self) }
-
-    caught = catch(:halt) do
-      start = Time.now
-      result = _call_filters(_before_filters)
-      @_benchmarks[:before_filters_time] = Time.now - start if _before_filters
-      result
-    end
-  
-    @body = case caught
-    when :filter_chain_completed  then _call_action(action_name)
-    when String                   then caught
-    # return *something* if you throw halt with nothing
-    when nil                      then "<html><body><h1>Filter Chain Halted!</h1></body></html>"
-    when Symbol                   then __send__(caught)
-    when Proc                     then self.instance_eval(&caught)
-    else
-      raise ArgumentError, "Threw :halt, #{caught}. Expected String, nil, Symbol, Proc."
-    end
-    start = Time.now
-    _call_filters(_after_filters)
-    @_benchmarks[:after_filters_time] = Time.now - start if _after_filters
-    
-    self._after_dispatch_callbacks.each { |cb| cb.call(self) }
-    
-    @body
-  end
-  
-  # This method exists to provide an overridable hook for ActionArgs.  It uses #send to call the action method.
-  #
-  # ==== Parameters
-  # action<~to_s>:: the action method to dispatch to
-  #
-  # @api plugin
-  # @overridable
-  def _call_action(action)
-    send(action)
-  end
-  
-  # Calls a filter chain. 
-  #
-  # ==== Parameters
-  # filter_set<Array[Filter]>::
-  #   A set of filters in the form [[:filter, rule], [:filter, rule]]
-  #
-  # ==== Returns
-  # Symbol:: :filter_chain_completed.
-  #
-  # ==== Notes
-  # Filter rules can be Symbols, Strings, or Procs.
-  #
-  # Symbols or Strings::
-  #   Call the method represented by the +Symbol+ or +String+.
-  # Procs::
-  #   Execute the +Proc+, in the context of the controller (self will be the
-  #   controller)
-  #
-  # @api private
-  def _call_filters(filter_set)
-    (filter_set || []).each do |filter, rule|
-      if _call_filter_for_action?(rule, action_name) && _filter_condition_met?(rule)
-        case filter
-        when Symbol, String
-          if rule.key?(:with)
-            args = rule[:with]
-            send(filter, *args)
-          else
-            send(filter)
-          end
-        when Proc then self.instance_eval(&filter)
-        end
-      end
-    end
-    return :filter_chain_completed
-  end
-
-  # Determine whether the filter should be called for the current action using :only and :exclude.
-  #
-  # ==== Parameters
-  # rule<Hash>:: Rules for the filter (see below).
-  # action_name<~to_s>:: The name of the action to be called.
-  #
-  # ==== Options (rule)
-  # :only<Array>::
-  #   Optional list of actions to fire. If given, action_name must be a part of
-  #   it for this function to return true.
-  # :exclude<Array>::
-  #   Optional list of actions not to fire. If given, action_name must not be a
-  #   part of it for this function to return true.
-  #
-  # ==== Returns
-  # Boolean:: True if the action should be called.
-  #
-  # @api private
-  def _call_filter_for_action?(rule, action_name)
-    # Both:
-    # * no :only or the current action is in the :only list
-    # * no :exclude or the current action is not in the :exclude list
-    (!rule.key?(:only) || rule[:only].include?(action_name)) &&
-    (!rule.key?(:exclude) || !rule[:exclude].include?(action_name))
-  end
-
-  # Determines whether the filter should be run based on the conditions passed (:if and :unless)
-  #
-  # ==== Parameters
-  # rule<Hash>:: Rules for the filter (see below).
-  #
-  # ==== Options (rule)
-  # :if<Array>:: Optional conditions that must be met for the filter to fire.
-  # :unless<Array>::
-  #   Optional conditions that must not be met for the filter to fire.
-  #
-  # ==== Returns
-  # Boolean:: True if the conditions are met.
-  #
-  # @api private
-  def _filter_condition_met?(rule)
-    # Both:
-    # * no :if or the if condition evaluates to true
-    # * no :unless or the unless condition evaluates to false
-    (!rule.key?(:if) || _evaluate_condition(rule[:if])) &&
-    (!rule.key?(:unless) || ! _evaluate_condition(rule[:unless]))
-  end
-
-  # Evaluates a filter condition (:if or :unless)
-  #
-  # ==== Parameters
-  # condition<Symbol, Proc>:: The condition to evaluate.
-  #
-  # ==== Raises
-  # ArgumentError:: condition not a Symbol or Proc.
-  #
-  # ==== Returns
-  # Boolean:: True if the condition is met.
-  #
-  # ==== Alternatives
-  # If condition is a symbol, it will be send'ed. If it is a Proc it will be
-  # called directly with self as an argument.
-  #
-  # @api private
-  def _evaluate_condition(condition)
-    case condition
-    when Symbol : self.send(condition)
-    when Proc : self.instance_eval(&condition)
-    else
-      raise ArgumentError,
-            'Filter condtions need to be either a Symbol or a Proc'
-    end
-  end
-
-  # Adds a filter to the after filter chain
-  # ==== Parameters
-  # filter<Symbol, Proc>:: The filter to add. Defaults to nil.
-  # opts<Hash>::
-  #   Filter options (see class documentation under <tt>Filter Options</tt>).
-  # &block:: A block to use as a filter if filter is nil.
-  #
-  # ==== Notes
-  # If the filter already exists, its options will be replaced with opts.;
-  #
-  # @api public
-  def self.after(filter = nil, opts = {}, &block)
-    add_filter(self._after_filters, filter || block, opts)
-  end
-
-  # Adds a filter to the before filter chain.  
-  #
-  # ==== Parameters
-  # filter<Symbol, Proc>:: The filter to add. Defaults to nil.
-  # opts<Hash>::
-  #   Filter options (see class documentation under <tt>Filter Options</tt>).
-  # &block:: A block to use as a filter if filter is nil.
-  #
-  # ==== Notes
-  # If the filter already exists, its options will be replaced with opts.
-  #
-  # @api public
-  def self.before(filter = nil, opts = {}, &block)
-    add_filter(self._before_filters, filter || block, opts)
-  end
-     
-  # Removes a filter from the after filter chain.  This removes the 
-  # filter from the filter chain for the whole controller and does not 
-  # take any options. 
-  #
-  # ==== Parameters
-  # filter<Symbol, String>:: A filter name to skip.
-  #
-  # @api public
-  def self.skip_after(filter)
-    skip_filter(self._after_filters, filter)
-  end
-  
-  # Removes a filter from the before filter chain.  This removes the 
-  # filter from the filter chain for the whole controller and does not 
-  # take any options.
-  #
-  # ==== Parameters
-  # filter<Symbol, String>:: A filter name to skip.
-  #
-  # @api public
-  def self.skip_before(filter)
-    skip_filter(self._before_filters , filter)
-  end  
-
-  # There are three possible ways to use this method.  First, if you have a named route, 
-  # you can specify the route as the first parameter as a symbol and any paramters in a 
-  # hash.  Second, you can generate the default route by just passing the params hash, 
-  # just passing the params hash.  Finally, you can use the anonymous parameters.  This 
-  # allows you to specify the parameters to a named route in the order they appear in the 
-  # router.  
-  #
-  # ==== Parameters(Named Route)
-  # name<Symbol>:: 
-  #   The name of the route. 
-  # args<Hash>:: 
-  #   Parameters for the route generation.
-  #
-  # ==== Parameters(Default Route)
-  # args<Hash>:: 
-  #   Parameters for the route generation.  This route will use the default route. 
-  #
-  # ==== Parameters(Anonymous Parameters)
-  # name<Symbol>::
-  #   The name of the route.  
-  # args<Array>:: 
-  #   An array of anonymous parameters to generate the route
-  #   with. These parameters are assigned to the route parameters
-  #   in the order that they are passed.
-  #
-  # ==== Returns
-  # String:: The generated URL.
-  #
-  # ==== Examples
-  # Named Route
-  #
-  # Merb::Router.prepare do
-  #   match("/articles/:title").to(:controller => :articles, :action => :show).name("articles")
-  # end
-  #
-  # url(:articles, :title => "new_article")
-  #
-  # Default Route
-  #
-  # Merb::Router.prepare do
-  #   default_routes
-  # end
-  #
-  # url(:controller => "articles", :action => "new")
-  #
-  # Anonymous Paramters
-  #
-  # Merb::Router.prepare do
-  #   match("/articles/:year/:month/:title").to(:controller => :articles, :action => :show).name("articles")
-  # end
-  #
-  # url(:articles, 2008, 10, "test_article")
-  #
-  # @api public
-  def url(name, *args)
-    args << {}
-    Merb::Router.url(name, *args)
-  end
-  
-  alias_method :relative_url, :url
-
-  # Returns the absolute url including the passed protocol and host.  
-  # 
-  # This uses the same arguments as the url method, with added requirements 
-  # of protocol and host options. 
-  #
-  # @api public
-  def absolute_url(*args)
-    # FIXME: arrgh, why request.protocol returns http://?
-    # :// is not part of protocol name
-    options  = extract_options_from_args!(args) || {}
-    protocol = options.delete(:protocol)
-    host     = options.delete(:host)
-    
-    raise ArgumentError, "The :protocol option must be specified" unless protocol
-    raise ArgumentError, "The :host option must be specified"     unless host
-    
-    args << options
-    
-    protocol + "://" + host + url(*args)
-  end
-  
-  # Generates a URL for a single or nested resource.
-  #
-  # ==== Parameters
-  # resources<Symbol,Object>:: The resources for which the URL
-  #   should be generated. These resources should be specified
-  #   in the router.rb file using #resources and #resource.
-  #
-  # options<Hash>:: Any extra parameters that are needed to
-  #   generate the URL.
-  #
-  # ==== Returns
-  # String:: The generated URL.
-  #
-  # ==== Examples
-  #
-  # Merb::Router.prepare do
-  #   resources :users do
-  #     resources :comments
-  #   end
-  # end
-  #
-  # resource(:users)            # => /users
-  # resource(@user)             # => /users/10
-  # resource(@user, :comments)  # => /users/10/comments
-  # resource(@user, @comment)   # => /users/10/comments/15
-  # resource(:users, :new)      # => /users/new
-  # resource(:@user, :edit)     # => /users/10/edit
-  #
-  # @api public
-  def resource(*args)
-    args << {}
-    Merb::Router.resource(*args)
-  end
-
-  # Calls the capture method for the selected template engine.
-  #
-  # ==== Parameters
-  # *args:: Arguments to pass to the block.
-  # &block:: The block to call.
-  #
-  # ==== Returns
-  # String:: The output of a template block or the return value of a non-template block converted to a string.
-  #
-  # @api public
-  def capture(*args, &block)
-    ret = nil
-
-    captured = send("capture_#{@_engine}", *args) do |*args|
-      ret = yield *args
-    end
-
-    # return captured value only if it is not empty
-    captured.empty? ? ret.to_s : captured
-  end
-
-  # Calls the concatenate method for the selected template engine.
-  #
-  # ==== Parameters
-  # str<String>:: The string to concatenate to the buffer.
-  # binding<Binding>:: The binding to use for the buffer.
-  #
-  # @api public
-  def concat(str, binding)
-    send("concat_#{@_engine}", str, binding)
-  end
-
-  private
-  # adds a filter to the specified filter chain
-  # ==== Parameters
-  # filters<Array[Filter]>:: The filter chain that this should be added to.
-  # filter<Filter>:: A filter that should be added.
-  # opts<Hash>::
-  #   Filter options (see class documentation under <tt>Filter Options</tt>).
-  #
-  # ==== Raises
-  # ArgumentError::
-  #   Both :only and :exclude, or :if and :unless given, if filter is not a
-  #   Symbol, String or Proc, or if an unknown option is passed.
-  #
-  # @api private
-  def self.add_filter(filters, filter, opts={})
-    raise(ArgumentError,
-      "You can specify either :only or :exclude but 
-       not both at the same time for the same filter.") if opts.key?(:only) && opts.key?(:exclude)
-       
-     raise(ArgumentError,
-       "You can specify either :if or :unless but 
-        not both at the same time for the same filter.") if opts.key?(:if) && opts.key?(:unless)
-        
-    opts.each_key do |key| raise(ArgumentError,
-      "You can only specify known filter options, #{key} is invalid.") unless FILTER_OPTIONS.include?(key)
-    end
-
-    opts = normalize_filters!(opts)
-    
-    case filter
-    when Proc
-      # filters with procs created via class methods have identical signature
-      # regardless if they handle content differently or not. So procs just
-      # get appended
-      filters << [filter, opts]
-    when Symbol, String
-      if existing_filter = filters.find {|f| f.first.to_s == filter.to_s}
-        filters[ filters.index(existing_filter) ] = [filter, opts]
-      else
-        filters << [filter, opts]
-      end
-    else
-      raise(ArgumentError, 
-        'Filters need to be either a Symbol, String or a Proc'
-      )        
-    end
-  end  
-
-  # Skip a filter that was previously added to the filter chain. Useful in
-  # inheritence hierarchies.
-  #
-  # ==== Parameters
-  # filters<Array[Filter]>:: The filter chain that this should be removed from.
-  # filter<Filter>:: A filter that should be removed.
-  #
-  # ==== Raises
-  # ArgumentError:: filter not Symbol or String.
-  #
-  # @api private
-  def self.skip_filter(filters, filter)
-    raise(ArgumentError, 'You can only skip filters that have a String or Symbol name.') unless
-      [Symbol, String].include? filter.class
-
-    Merb.logger.warn("Filter #{filter} was not found in your filter chain.") unless
-      filters.reject! {|f| f.first.to_s[filter.to_s] }
-  end
-
-  # Ensures that the passed in hash values are always arrays.
-  #
-  # ==== Parameters
-  # opts<Hash>:: Options for the filters (see below).
-  #
-  # ==== Options (opts)
-  # :only<Symbol, Array[Symbol]>:: A list of actions.
-  # :exclude<Symbol, Array[Symbol]>:: A list of actions.
-  #
-  # ==== Examples
-  #   normalize_filters!(:only => :new) #=> {:only => [:new]}
-  #
-  # @api public
-  def self.normalize_filters!(opts={})
-    opts[:only]     = Array(opts[:only]).map {|x| x.to_s} if opts[:only]
-    opts[:exclude]  = Array(opts[:exclude]).map {|x| x.to_s} if opts[:exclude]
-    return opts
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/exceptions.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/exceptions.rb
deleted file mode 100644
index d95ed99..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/exceptions.rb
+++ /dev/null
@@ -1,346 +0,0 @@
-class Exception
-  # Returns the action_name that will be invoked on your Exceptions controller when this
-  # exception is raised. Override this method to force a different action to be invoked.
-  #
-  # ==== Returns
-  # String:: The name of the action in the Exceptions controller which will get invoked
-  #   when this exception is raised during a request.
-  # 
-  # @api public
-  # @overridable
-  def action_name() self.class.action_name end
-  
-  
-  # ==== Returns
-  # Boolean:: Whether or not this exception is the same as another.
-  #
-  # @api public
-  def same?(other)
-    self.class == other.class &&
-    self.message == other.message &&
-    self.backtrace == other.backtrace
-  end
-  
-  # Returns the action_name that will be invoked on your Exceptions controller when an instance
-  # is raised during a request.
-  #
-  # ==== Returns
-  # String:: The name of the action in the Exceptions controller which will get invoked
-  #   when an instance of this Exception sub/class is raised by an action.
-  # 
-  # @api public
-  # @overridable
-  def self.action_name
-    if self == Exception
-      return nil unless Object.const_defined?(:Exceptions) && 
-        Exceptions.method_defined?(:exception)
-    end
-    name = self.to_s.split('::').last.snake_case
-    Object.const_defined?(:Exceptions) && 
-      Exceptions.method_defined?(name) ? name : superclass.action_name
-  end
-  
-  # The status that will be sent in the response when an instance is
-  # raised during a request. Override this to send a different status.
-  #
-  # ==== Returns
-  # Integer:: The status code to send in the response. Defaults to 500.
-  #
-  # @api public
-  # @overridable
-  def self.status
-    500
-  end
-end
-
-module Merb
-  # ControllerExceptions are a way of simplifying controller code by placing
-  # exception logic back into the MVC pattern.
-  #
-  # When a ControllerException is raised within your application merb will
-  # attempt to re-route the request to your Exceptions controller to render
-  # the error in a friendly manor.
-  #
-  # For example you might have an action in your app that raises NotFound
-  # if a resource was not available
-  #
-
-  #   def show
-  #     product = Product.find(params[:id])
-  #     raise NotFound if product.nil?
-  #     [...]
-  #   end
-  #
-  # This would halt execution of your action and re-route it over to your
-  # Exceptions controller which might look something like:
-  #
-  # class Exceptions < Merb::Controller
-
-  #   def not_found
-  #     render :layout => :none
-  #   end
-  # end
-  #
-  # As usual, the not_found action will look for a template in
-  #   app/views/exceptions/not_found.html.erb
-  #
-  # Note: All standard ControllerExceptions have an HTTP status code associated 
-  # with them which is sent to the browser when the action is rendered.
-  #
-  # Note: If you do not specifiy how to handle raised ControllerExceptions 
-  # or an unhandlable exception occurs within your customised exception action
-  # then they will be rendered using the built-in error template.
-  # In development mode this "built in" template will show stack-traces for
-  # any of the ServerError family of exceptions (you can force the stack-trace
-  # to display in production mode using the :exception_details config option in 
-  # merb.yml)
-  #
-  #
-  # ==== Internal Exceptions 
-  #
-  # Any other rogue errors (not ControllerExceptions) that occur during the 
-  # execution of your app will be converted into the ControllerException 
-  # InternalServerError. And like all other exceptions, the ControllerExceptions  
-  # can be caught on your Exceptions controller.
-  #
-  # InternalServerErrors return status 500, a common use for customizing this
-  # action might be to send emails to the development team, warning that their
-  # application has exploded. Mock example:
-  #
-
-  #   def internal_server_error
-  #     MySpecialMailer.deliver(
-  #       "team at cowboys.com", 
-  #       "Exception occured at #{Time.now}", 
-  #       self.request.exceptions.first)
-  #     render 'Something is wrong, but the team is on it!'
-  #   end
-  #
-  # Note: The special method +exceptions+ is available on Merb::Request instances 
-  # and contains the exceptions that was raised (this is handy if
-  # you want to display the associated message or display more detailed info).
-  #
-  #
-  # ==== Extending ControllerExceptions
-  #
-  # To extend the use of the ControllerExceptions one may extend any of the 
-  # HTTPError classes.
-  #
-  # As an example we can create an exception called AdminAccessRequired.
-  #
-  #   class AdminAccessRequired < Merb::ControllerExceptions::Unauthorized; end
-  #
-  # Add the required action to our Exceptions controller
-  #
-  #   class Exceptions < Merb::Controller
-
-  #     def admin_access_required
-  #       render
-  #     end
-  #   end
-  #
-  # In app/views/exceptions/admin_access_required.rhtml
-  # 
-  #   <h1>You're not an administrator!</h1>
-  #   <p>You tried to access <%= @tried_to_access %> but that URL is 
-  #   restricted to administrators.</p>
-  #
-  module ControllerExceptions
-    
-    # Mapping of status code names to their numeric value.
-    STATUS_CODES = {}
-
-    class Base < StandardError #:doc:
-
-      # === Returns
-      # Integer:: The status-code of the error.
-      def status; self.class.status; end
-      alias :to_i :status
-
-      class << self
-
-        # Get the actual status-code for an Exception class.
-        #
-        # As usual, this can come from a constant upwards in
-        # the inheritance chain.
-        #
-        # ==== Returns
-        # Fixnum:: The status code of this exception.
-        #
-        # @api public
-        def status
-          const_get(:STATUS) rescue 0
-        end
-        alias :to_i :status
-        
-        # Set the actual status-code for an Exception class.
-        #
-        # If possible, set the STATUS constant, and update
-        # any previously registered (inherited) status-code.
-        #
-        # ==== Parameters
-        # num<~to_i>:: The status code
-        #
-        # ==== Returns
-        # (Integer, nil):: The status set on this exception, or nil if a status was already set.
-        #
-        # @api private
-        def status=(num)
-          unless self.status?
-            register_status_code(self, num)
-            self.const_set(:STATUS, num.to_i)
-          end
-        end
-      
-        # See if a status-code has been defined (on self explicitly).
-        #
-        # ==== Returns
-        # Boolean:: Whether a status code has been set
-        #
-        # @api private
-        def status?
-          self.const_defined?(:STATUS)
-        end
-      
-        # Registers any subclasses with status codes for easy lookup by
-        # set_status in Merb::Controller.
-        #
-        # Inheritance ensures this method gets inherited by any subclasses, so
-        # it goes all the way down the chain of inheritance.
-        #
-        # ==== Parameters
-        # 
-        # subclass<Merb::ControllerExceptions::Base>::
-        #   The Exception class that is inheriting from Merb::ControllerExceptions::Base
-        #
-        # @api public
-        def inherited(subclass)
-          # don't set the constant yet - any class methods will be called after self.inherited
-          # unless self.status = ... is set explicitly, the status code will be inherited
-          register_status_code(subclass, self.status) if self.status?
-        end
-        
-        private
-        
-        # Register the status-code for an Exception class.
-        #
-        # ==== Parameters
-        # num<~to_i>:: The status code
-        #
-        # @api privaate
-        def register_status_code(klass, code)
-          name = self.to_s.split('::').last.snake_case
-          STATUS_CODES[name.to_sym] = code.to_i
-        end
-        
-      end
-    end
-
-    class Informational                 < Merb::ControllerExceptions::Base; end
-
-      class Continue                    < Merb::ControllerExceptions::Informational; self.status = 100; end
-
-      class SwitchingProtocols          < Merb::ControllerExceptions::Informational; self.status = 101; end
-
-    class Successful                    < Merb::ControllerExceptions::Base; end
-
-      class OK                          < Merb::ControllerExceptions::Successful; self.status = 200; end
-
-      class Created                     < Merb::ControllerExceptions::Successful; self.status = 201; end
-
-      class Accepted                    < Merb::ControllerExceptions::Successful; self.status = 202; end
-
-      class NonAuthoritativeInformation < Merb::ControllerExceptions::Successful; self.status = 203; end
-
-      class NoContent                   < Merb::ControllerExceptions::Successful; self.status = 204; end
-
-      class ResetContent                < Merb::ControllerExceptions::Successful; self.status = 205; end
-
-      class PartialContent              < Merb::ControllerExceptions::Successful; self.status = 206; end
-
-    class Redirection                   < Merb::ControllerExceptions::Base; end
-
-      class MultipleChoices             < Merb::ControllerExceptions::Redirection; self.status = 300; end
-
-      class MovedPermanently            < Merb::ControllerExceptions::Redirection; self.status = 301; end
-
-      class MovedTemporarily            < Merb::ControllerExceptions::Redirection; self.status = 302; end
-
-      class SeeOther                    < Merb::ControllerExceptions::Redirection; self.status = 303; end
-
-      class NotModified                 < Merb::ControllerExceptions::Redirection; self.status = 304; end
-
-      class UseProxy                    < Merb::ControllerExceptions::Redirection; self.status = 305; end
-
-      class TemporaryRedirect           < Merb::ControllerExceptions::Redirection; self.status = 307; end
-
-    class ClientError                   < Merb::ControllerExceptions::Base; end
-
-      class BadRequest                  < Merb::ControllerExceptions::ClientError; self.status = 400; end
-
-      class MultiPartParseError         < Merb::ControllerExceptions::BadRequest; end
-
-      class Unauthorized                < Merb::ControllerExceptions::ClientError; self.status = 401; end
-
-      class PaymentRequired             < Merb::ControllerExceptions::ClientError; self.status = 402; end
-
-      class Forbidden                   < Merb::ControllerExceptions::ClientError; self.status = 403; end
-
-      class NotFound                    < Merb::ControllerExceptions::ClientError; self.status = 404; end
-
-      class ActionNotFound              < Merb::ControllerExceptions::NotFound; end
-
-      class TemplateNotFound            < Merb::ControllerExceptions::NotFound; end
-
-      class LayoutNotFound              < Merb::ControllerExceptions::NotFound; end
-
-      class MethodNotAllowed            < Merb::ControllerExceptions::ClientError; self.status = 405; end
-
-      class NotAcceptable               < Merb::ControllerExceptions::ClientError; self.status = 406; end
-
-      class ProxyAuthenticationRequired < Merb::ControllerExceptions::ClientError; self.status = 407; end
-
-      class RequestTimeout              < Merb::ControllerExceptions::ClientError; self.status = 408; end
-
-      class Conflict                    < Merb::ControllerExceptions::ClientError; self.status = 409; end
-
-      class Gone                        < Merb::ControllerExceptions::ClientError; self.status = 410; end
-
-      class LengthRequired              < Merb::ControllerExceptions::ClientError; self.status = 411; end
-
-      class PreconditionFailed          < Merb::ControllerExceptions::ClientError; self.status = 412; end
-
-      class RequestEntityTooLarge       < Merb::ControllerExceptions::ClientError; self.status = 413; end
-
-      class RequestURITooLarge          < Merb::ControllerExceptions::ClientError; self.status = 414; end
-
-      class UnsupportedMediaType        < Merb::ControllerExceptions::ClientError; self.status = 415; end
-
-      class RequestRangeNotSatisfiable  < Merb::ControllerExceptions::ClientError; self.status = 416; end
-
-      class ExpectationFailed           < Merb::ControllerExceptions::ClientError; self.status = 417; end
-
-    class ServerError                   < Merb::ControllerExceptions::Base; end
-
-      class InternalServerError         < Merb::ControllerExceptions::ServerError; self.status = 500; end
-
-      class NotImplemented              < Merb::ControllerExceptions::ServerError; self.status = 501; end
-
-      class BadGateway                  < Merb::ControllerExceptions::ServerError; self.status = 502; end
-
-      class ServiceUnavailable          < Merb::ControllerExceptions::ServerError; self.status = 503; end
-
-      class GatewayTimeout              < Merb::ControllerExceptions::ServerError; self.status = 504; end
-
-      class HTTPVersionNotSupported     < Merb::ControllerExceptions::ServerError; self.status = 505; end
-  end
-  
-  # Required to show exceptions in the log file
-  #
-  # e<Exception>:: The exception that a message is being generated for
-  def self.exception(e)
-    "#{ e.message } - (#{ e.class })\n" <<  
-    "#{(e.backtrace or []).join("\n")}" 
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/merb_controller.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/merb_controller.rb
deleted file mode 100644
index 1ef778e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/merb_controller.rb
+++ /dev/null
@@ -1,390 +0,0 @@
-class Merb::Controller < Merb::AbstractController
-
-  class_inheritable_accessor :_hidden_actions, :_shown_actions
-
-  self._hidden_actions ||= []
-  self._shown_actions  ||= []
-
-  cattr_accessor :_subclasses
-  self._subclasses = Set.new
-
-  def self.subclasses_list() _subclasses end
-
-  include Merb::ResponderMixin
-  include Merb::ControllerMixin
-  include Merb::AuthenticationMixin
-  include Merb::ConditionalGetMixin
-
-  # ==== Parameters
-  # klass<Merb::Controller>::
-  #   The Merb::Controller inheriting from the base class.
-  #
-  # @api private
-  def self.inherited(klass)
-    _subclasses << klass.to_s
-    super
-    klass._template_root = Merb.dir_for(:view) unless self._template_root
-  end
-
-  # Hide each of the given methods from being callable as actions.
-  #
-  # ==== Parameters
-  # *names<~to-s>:: Actions that should be added to the list.
-  #
-  # ==== Returns
-  # Array[String]::
-  #   An array of actions that should not be possible to dispatch to.
-  #
-  # @api public
-  def self.hide_action(*names)
-    self._hidden_actions = self._hidden_actions | names.map { |n| n.to_s }
-  end
-
-  # Makes each of the given methods being callable as actions. You can use
-  # this to make methods included from modules callable as actions.
-  #
-  # ==== Parameters
-  # *names<~to-s>:: Actions that should be added to the list.
-  #
-  # ==== Returns
-  # Array[String]::
-  #   An array of actions that should be dispatched to even if they would not
-  #   otherwise be.
-  #
-  # ==== Example
-  #   module Foo
-  #     def self.included(base)
-  #       base.show_action(:foo)
-  #     end
-  #
-  #     def foo
-  #       # some actiony stuff
-  #     end
-  #
-  #     def foo_helper
-  #       # this should not be an action
-  #     end
-  #   end
-  #
-  # @api public
-  def self.show_action(*names)
-    self._shown_actions = self._shown_actions | names.map {|n| n.to_s}
-  end
-
-  # The list of actions that are callable, after taking defaults,
-  # _hidden_actions and _shown_actions into consideration. It is calculated
-  # once, the first time an action is dispatched for this controller.
-  #
-  # ==== Returns
-  # SimpleSet[String]:: A set of actions that should be callable.
-  #
-  # @api public
-  def self.callable_actions
-    @callable_actions ||= Extlib::SimpleSet.new(_callable_methods)
-  end
-
-  # This is a stub method so plugins can implement param filtering if they want.
-  #
-  # ==== Parameters
-  # params<Hash{Symbol => String}>:: A list of params
-  #
-  # ==== Returns
-  # Hash{Symbol => String}:: A new list of params, filtered as desired
-  # 
-  # @api plugin
-  # @overridable
-  def self._filter_params(params)
-    params
-  end
-
-  # All methods that are callable as actions.
-  #
-  # ==== Returns
-  # Array:: A list of method names that are also actions
-  #
-  # @api private
-  def self._callable_methods
-    callables = []
-    klass = self
-    begin
-      callables << (klass.public_instance_methods(false) + klass._shown_actions) - klass._hidden_actions
-      klass = klass.superclass
-    end until klass == Merb::AbstractController || klass == Object
-    callables.flatten.reject{|action| action =~ /^_.*/}
-  end
-
-  # The location to look for a template for a particular controller, context,
-  # and mime-type. This is overridden from AbstractController, which defines a
-  # version of this that does not involve mime-types.
-  #
-  # ==== Parameters
-  # context<~to_s>:: The name of the action or template basename that will be rendered.
-  # type<~to_s>::
-  #    The mime-type of the template that will be rendered. Defaults to nil.
-  # controller<~to_s>::
-  #   The name of the controller that will be rendered. Defaults to
-  #   controller_name.  This will be "layout" for rendering a layout.  
-  #
-  # ==== Notes
-  # By default, this renders ":controller/:action.:type". To change this,
-  # override it in your application class or in individual controllers.
-  #
-  # @api public
-  # @overridable
-  def _template_location(context, type, controller)
-    _conditionally_append_extension(controller ? "#{controller}/#{context}" : "#{context}", type)
-  end
-
-  # The location to look for a template and mime-type. This is overridden
-  # from AbstractController, which defines a version of this that does not
-  # involve mime-types.
-  #
-  # ==== Parameters
-  # template<String>::
-  #    The absolute path to a template - without mime and template extension.
-  #    The mime-type extension is optional - it will be appended from the
-  #    current content type if it hasn't been added already.
-  # type<~to_s>::
-  #    The mime-type of the template that will be rendered. Defaults to nil.
-  #
-  # @api public
-  def _absolute_template_location(template, type)
-    _conditionally_append_extension(template, type)
-  end
-
-  # Build a new controller.
-  #
-  # Sets the variables that came in through the dispatch as available to
-  # the controller.
-  #
-  # ==== Parameters
-  # request<Merb::Request>:: The Merb::Request that came in from Rack.
-  # status<Integer>:: An integer code for the status. Defaults to 200.
-  # headers<Hash{header => value}>::
-  #   A hash of headers to start the controller with. These headers can be
-  #   overridden later by the #headers method.
-  # 
-  # @api plugin
-  # @overridable
-  def initialize(request, status=200, headers={'Content-Type' => 'text/html; charset=utf-8'})
-    super()
-    @request, @_status, @headers = request, status, headers
-  end
-
-  # Dispatch the action.
-  #
-  # ==== Parameters
-  # action<~to_s>:: An action to dispatch to. Defaults to :index.
-  #
-  # ==== Returns
-  # String:: The string sent to the logger for time spent.
-  #
-  # ==== Raises
-  # ActionNotFound:: The requested action was not found in class.
-  #
-  # @api plugin
-  def _dispatch(action=:index)
-    Merb.logger.info("Params: #{self.class._filter_params(request.params).inspect}")
-    start = Time.now
-    if self.class.callable_actions.include?(action.to_s)
-      super(action)
-    else
-      raise ActionNotFound, "Action '#{action}' was not found in #{self.class}"
-    end
-    @_benchmarks[:action_time] = Time.now - start
-    self
-  end
-
-  attr_reader :request, :headers
-
-  # ==== Returns
-  # Fixnum:: The response status code
-  #
-  # @api public
-  def status
-    @_status
-  end
-
-  # Set the response status code.
-  #
-  # ==== Parameters
-  # s<Fixnum, Symbol>:: A status-code or named http-status
-  #
-  # @api public
-  def status=(s)
-    if s.is_a?(Symbol) && STATUS_CODES.key?(s)
-      @_status = STATUS_CODES[s]
-    elsif s.is_a?(Fixnum)
-      @_status = s
-    else
-      raise ArgumentError, "Status should be of type Fixnum or Symbol, was #{s.class}"
-    end
-  end
-
-  # ==== Returns
-  # Hash:: The parameters from the request object
-  # 
-  # @api public
-  def params()  request.params  end
-    
-  # There are three possible ways to use this method.  First, if you have a named route, 
-  # you can specify the route as the first parameter as a symbol and any paramters in a 
-  # hash.  Second, you can generate the default route by just passing the params hash, 
-  # just passing the params hash.  Finally, you can use the anonymous parameters.  This 
-  # allows you to specify the parameters to a named route in the order they appear in the 
-  # router.  
-  #
-  # ==== Parameters(Named Route)
-  # name<Symbol>:: 
-  #   The name of the route. 
-  # args<Hash>:: 
-  #   Parameters for the route generation.
-  #
-  # ==== Parameters(Default Route)
-  # args<Hash>:: 
-  #   Parameters for the route generation.  This route will use the default route. 
-  #
-  # ==== Parameters(Anonymous Parameters)
-  # name<Symbol>::
-  #   The name of the route.  
-  # args<Array>:: 
-  #   An array of anonymous parameters to generate the route
-  #   with. These parameters are assigned to the route parameters
-  #   in the order that they are passed.
-  #
-  # ==== Returns
-  # String:: The generated URL.
-  #
-  # ==== Examples
-  # Named Route
-  #
-  # Merb::Router.prepare do
-  #   match("/articles/:title").to(:controller => :articles, :action => :show).name("articles")
-  # end
-  #
-  # url(:articles, :title => "new_article")
-  #
-  # Default Route
-  #
-  # Merb::Router.prepare do
-  #   default_routes
-  # end
-  #
-  # url(:controller => "articles", :action => "new")
-  #
-  # Anonymous Paramters
-  #
-  # Merb::Router.prepare do
-  #   match("/articles/:year/:month/:title").to(:controller => :articles, :action => :show).name("articles")
-  # end
-  #
-  # url(:articles, 2008, 10, "test_article")
-  #
-  # @api public
-  def url(name, *args)
-    args << params
-    name = request.route if name == :this
-    Merb::Router.url(name, *args)
-  end
-  
-  # Generates a URL for a single or nested resource.
-  #
-  # ==== Parameters
-  # resources<Symbol,Object>:: The resources for which the URL
-  #   should be generated. These resources should be specified
-  #   in the router.rb file using #resources and #resource.
-  #
-  # options<Hash>:: Any extra parameters that are needed to
-  #   generate the URL.
-  #
-  # ==== Returns
-  # String:: The generated URL.
-  #
-  # ==== Examples
-  #
-  # Merb::Router.prepare do
-  #   resources :users do
-  #     resources :comments
-  #   end
-  # end
-  #
-  # resource(:users)            # => /users
-  # resource(@user)             # => /users/10
-  # resource(@user, :comments)  # => /users/10/comments
-  # resource(@user, @comment)   # => /users/10/comments/15
-  # resource(:users, :new)      # => /users/new
-  # resource(:@user, :edit)     # => /users/10/edit
-  #
-  # @api public
-  def resource(*args)
-    args << params
-    Merb::Router.resource(*args)
-  end
-  
-
-  alias_method :relative_url, :url
-  
-  # Returns the absolute url including the passed protocol and host.  
-  # 
-  # This uses the same arguments as the url method, with added requirements 
-  # of protocol and host options. 
-  #
-  # @api public
-  def absolute_url(*args)
-    options  = extract_options_from_args!(args) || {}
-    options[:protocol] ||= request.protocol
-    options[:host] ||= request.host
-    args << options
-    super(*args)
-  end
-
-  # The results of the controller's render, to be returned to Rack.
-  #
-  # ==== Returns
-  # Array[Integer, Hash, String]::
-  #   The controller's status code, headers, and body
-  #
-  # @api private
-  def rack_response
-    [status, headers, Merb::Rack::StreamWrapper.new(body)]
-  end
-
-  # Sets a controller to be "abstract" 
-  # This controller will not be able to be routed to
-  # and is used for super classing only
-  #
-  # @api public
-  def self.abstract!
-    @_abstract = true
-  end
-  
-  # Asks a controller if it is abstract
-  #
-  # === Returns
-  # Boolean
-  #  true if the controller has been set as abstract
-  #
-  # @api public
-  def self.abstract?
-    !!@_abstract 
-  end
-
-  # Hide any methods that may have been exposed as actions before.
-  hide_action(*_callable_methods)
-
-  private
-
-  # If not already added, add the proper mime extension to the template path.
-  #
-  # ==== Parameters
-  #
-  # template<~to_s> ::
-  #   The template path to append the mime type to.
-  # type<~to_s> ::
-  #   The extension to append to the template path conditionally
-  #
-  # @api private
-  def _conditionally_append_extension(template, type)
-    type && !template.match(/\.#{type.to_s.escape_regexp}$/) ? "#{template}.#{type}" : template
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mime.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mime.rb
deleted file mode 100644
index d04bb73..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mime.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-module Merb
-  class << self
-
-    
-    # Returns a hash of the available mime types. 
-    #
-    # ==== Returns
-    # Hash{Symbol => Hash{Symbol => Object}}:: The available mime types.
-    #
-    # ==== Notes
-    # Each entry corresponds to a call to add_mime_type, having the mime type key (:html, :xml, :json, etc.)
-    # as the key and a hash containing the following entries:
-    #   :accepts           # the mime types that will be recognized by this entry
-    #   :transform_method  # the method called on an object to convert it to content of this type (such as to_json)
-    #   :content_type      # the value set to the "Content-Type" HTTP header when this mime is sent in a response
-    #   :response_headers  # sent in a response using this content type
-    #   :default_quality   # the scale factor used in describing content type preference
-    #   :response_block    # the block to be called with the controller when a request responds to this mime type
-    #
-    # @api public
-    def available_mime_types
-      ResponderMixin::TYPES
-    end
-
-    # ==== Returns
-    # Hash{String => Symbol}:: 
-    #   A hash mapping Content-Type values to the mime type key of the appropriate entry in #available_mime_types
-    #
-    # @api public
-    def available_accepts
-      ResponderMixin::MIMES
-    end
-
-    # Any specific outgoing headers should be included here.  These are not
-    # the content-type header but anything in addition to it.
-    # +transform_method+ should be set to a symbol of the method used to
-    # transform a resource into this mime type.
-    # For example for the :xml mime type an object might be transformed by
-    # calling :to_xml, or for the :js mime type, :to_json.
-    # If there is no transform method, use nil.
-    #
-    # ==== Autogenerated Methods
-    # Adding a mime-type adds a render_type method that sets the content
-    # type and calls render.
-    # 
-    # By default this does: def render_all, def render_yaml, def render_text,
-    # def render_html, def render_xml, def render_js, and def render_yaml
-    #
-    # ==== Parameters
-    # key<Symbol>:: The name of the mime-type. This is used by the provides API
-    # transform_method<~to_s>:: 
-    #   The associated method to call on objects to convert them to the
-    #   appropriate mime-type. For instance, :json would use :to_json as its
-    #   transform_method.
-    # mimes<Array[String]>::
-    #   A list of possible values sent in the Accept header, such as text/html,
-    #   that should be associated with this content-type.
-    # new_response_headers<Hash>::
-    #   The response headers to set for the the mime type. For example: 
-    #   'Content-Type' => 'application/json; charset=utf-8'; As a shortcut for
-    #   the common charset option, use :charset => 'utf-8', which will be
-    #   correctly appended to the mimetype itself.
-    # &block:: a block which recieves the current controller when the format
-    #   is set (in the controller's #content_type method)
-    #
-    # ==== Returns
-    # nil
-    #
-    # @api public
-    def add_mime_type(key, transform_method, mimes, new_response_headers = {}, default_quality = 1, &block) 
-      enforce!(key => Symbol, mimes => Array)
-      
-      content_type = new_response_headers["Content-Type"] || mimes.first
-      
-      if charset = new_response_headers.delete(:charset)
-        content_type += "; charset=#{charset}"
-      end
-      
-      ResponderMixin::TYPES.update(key => 
-        {:accepts           => mimes, 
-         :transform_method  => transform_method,
-         :content_type      => content_type,
-         :response_headers  => new_response_headers,
-         :default_quality   => default_quality,
-         :response_block    => block })
-
-      mimes.each do |mime|
-        ResponderMixin::MIMES.update(mime => key)
-      end
-
-      Merb::RenderMixin.class_eval <<-EOS, __FILE__, __LINE__
-        def render_#{key}(thing = nil, opts = {})
-          self.content_type = :#{key}
-          render thing, opts
-        end
-      EOS
-      
-      nil
-    end
-
-    # Removes a MIME-type from the mime-type list.
-    #
-    # ==== Parameters
-    # key<Symbol>:: The key that represents the mime-type to remove.
-    #
-    # ==== Returns
-    # (Boolean, Hash{Symbol => Object}):: If it was present, the old specification of the MIME-type. Same structure
-    #   as a value in Merb.available_mime_types. False if the key was not present.
-    #
-    # ==== Notes
-    # :all is the key for */*; It can't be removed.
-    #
-    # @api public
-    def remove_mime_type(key)
-      return false if key == :all
-      ResponderMixin::TYPES.delete(key)
-    end
-
-    # ==== Parameters
-    # key<Symbol>:: The key that represents the mime-type.
-    #
-    # ==== Returns
-    # Symbol:: The transform method for the mime type, e.g. :to_json.
-    #
-    # ==== Raises
-    # ArgumentError:: The requested mime type is not valid.
-    #
-    # @api private
-    def mime_transform_method(key)
-      raise ArgumentError, ":#{key} is not a valid MIME-type" unless ResponderMixin::TYPES.key?(key)
-      ResponderMixin::TYPES[key][:transform_method]
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/authentication.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/authentication.rb
deleted file mode 100644
index 696e72b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/authentication.rb
+++ /dev/null
@@ -1,168 +0,0 @@
-module Merb::AuthenticationMixin
-  
-  # Attempts to authenticate the user via HTTP Basic authentication. Takes a
-  # block with the username and password, if the block yields false the
-  # authentication is not accepted and :halt is thrown.
-  #
-  # If no block is passed, +basic_authentication+, the +request+ and +authenticate+
-  # methods can be chained. These can be used to independently request authentication
-  # or confirm it, if more control is desired.
-  #
-  # ==== Parameters
-  # realm<~to_s>:: The realm to authenticate against. Defaults to 'Application'.
-  # &authenticator:: A block to check if the authentication is valid.
-  #
-  # ==== Returns
-  # Merb::AuthenticationMixin::BasicAuthentication
-  #
-  # ==== Examples
-  #     class Application < Merb::Controller
-  #     
-  #       before :authenticate
-  #     
-  #       protected
-  #     
-  #       def authenticate
-  #         basic_authentication("My App") do |username, password|
-  #           password == "secret"
-  #         end
-  #       end
-  #     
-  #     end
-  #
-  #     class Application < Merb::Controller
-  #     
-  #       before :authenticate
-  #     
-  #       def authenticate
-  #         user = basic_authentication.authenticate do |username, password|
-  #           User.authenticate(username, password)
-  #         end
-  #     
-  #         if user
-  #           @current_user = user
-  #         else
-  #           basic_authentication.request
-  #         end
-  #       end
-  #     
-  #     end
-  #
-  # If you need to request basic authentication inside an action you need to use the request! method.
-  #
-  # ==== Example
-  #
-  #    class Sessions < Application
-  #  
-  #      def new
-  #        case content_type
-  #        when :html
-  #          render
-  #
-  #        else
-  #         user = basic_authentication.authenticate do |username, password|
-  #           User.authenticate(username, password)
-  #         end
-  #
-  #         if user
-  #           display(user)
-  #         else
-  #           basic_authentication.request
-  #         end
-  #        end
-  #      end
-  # 
-  #    end 
-  #
-  #
-  # @api public
-  def basic_authentication(realm = "Application", &authenticator)
-    @_basic_authentication ||= BasicAuthentication.new(self, realm, &authenticator)
-  end
-  
-  class BasicAuthentication
-    # So we can have access to the status codes
-    include Merb::ControllerExceptions
-
-    # @api private
-    def initialize(controller, realm = "Application", &authenticator)
-      @controller = controller
-      @realm = realm
-      @auth = Rack::Auth::Basic::Request.new(@controller.request.env)
-      authenticate_or_request(&authenticator) if authenticator
-    end
-
-    # Determines whether or not the user is authenticated using the criteria
-    # in the provided authenticator block.
-    #
-    # ==== Parameters
-    # &authenticator:: A block that decides whether the provided username and password
-    #   are valid.
-    #
-    # ==== Returns
-    # Object:: False if basic auth is not provided, otherwise the return value of the authenticator block.
-    def authenticate(&authenticator)
-      if @auth.provided? and @auth.basic?
-        authenticator.call(*@auth.credentials)
-      else
-        false
-      end
-    end
-
-    # Request basic authentication and halt the filter chain. This is for use in a before filter.
-    #
-    # ==== Throws
-    # :halt with an "HTTP Basic: Access denied." message with no layout, and sets the status to Unauthorized.
-    #
-    # @api public
-    def request
-      request!
-      throw :halt, @controller.render("HTTP Basic: Access denied.\n", :status => Unauthorized.status, :layout => false)
-    end
-    
-    # Sets headers to request basic auth.
-    #
-    # ==== Returns
-    # String:: Returns the empty string to provide a response body.
-    #
-    # @api public
-    def request!
-      @controller.status = Unauthorized.status
-      @controller.headers['WWW-Authenticate'] = 'Basic realm="%s"' % @realm
-      ""
-    end
-    
-    # ==== Returns
-    # Boolean:: Whether there has been any basic authentication credentials provided
-    #
-    # @api public
-    def provided?
-      @auth.provided?
-    end
-    
-    # ==== Returns
-    # String:: The username provided in the request.
-    #
-    # @api public
-    def username
-      provided? ? @auth.credentials.first : nil
-    end
-    
-    # ==== Returns
-    # String:: The password provided in the request.
-    #
-    # @api public
-    def password
-      provided? ? @auth.credentials.last : nil
-    end
-    
-    protected
-    
-    # @api private
-    def authenticate_or_request(&authenticator)
-      authenticate(&authenticator) || request
-    end
-    
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/conditional_get.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/conditional_get.rb
deleted file mode 100644
index e22b69d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/conditional_get.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-# Provides conditional get support in Merb core.
-# Conditional get support is intentionally
-# simple and does not do fancy stuff like making
-# ETag value from Ruby objects for you.
-#
-# The most interesting method for end user is
-# +request_fresh?+ that is used after setting of
-# last modification time or ETag:
-#
-# ==== Example
-#
-# def show
-#   self.etag = Digest::SHA1.hexdigest(calculate_cache_key(params))
-#
-#   if request_fresh?
-#     self.status = 304
-#     return ''
-#   else
-#     @product = Product.get(params[:id])
-#     display @product
-#   end
-# end
-module Merb::ConditionalGetMixin
-
-  # Sets ETag response header by calling
-  # #to_s on the argument.
-  #
-  # ==== Parameters
-  # tag<~to_s>::
-  #   value of ETag header enclosed in double quotes
-  #   as required by the RFC
-  #
-  # @api public
-  def etag=(tag)
-    headers[Merb::Const::ETAG] = %("#{tag}")
-  end
-
-  # ==== Returns
-  # <String>::
-  #   Value of ETag response header or nil if it's not set.
-  #
-  # @api public
-  def etag
-    headers[Merb::Const::ETAG]
-  end
-
-  # ==== Returns
-  # <Boolean>::
-  # true if ETag response header equals If-None-Match request header,
-  # false otherwise
-  #
-  # @api public
-  def etag_matches?(tag = self.etag)
-    tag == self.request.if_none_match
-  end
-
-  # Sets Last-Modified response header.
-  #
-  # ==== Parameters
-  # tag<Time>::
-  # resource modification timestamp converted into format
-  # required by the RFC
-  #
-  # @api public
-  def last_modified=(time)
-    headers[Merb::Const::LAST_MODIFIED] = time.httpdate
-  end
-
-  # ==== Returns
-  # <String>::
-  #   Value of Last-Modified response header or nil if it's not set.
-  #
-  # @api public
-  def last_modified
-    Time.rfc2822(headers[Merb::Const::LAST_MODIFIED])
-  end
-
-  # ==== Returns
-  # <Boolean>::
-  # true if Last-Modified response header is < than
-  # If-Modified-Since request header value, false otherwise.
-  #
-  # @api public
-  def not_modified?(time = self.last_modified)
-    request.if_modified_since && time && time <= request.if_modified_since
-  end
-
-  # ==== Returns
-  # <Boolean>::
-  # true if either ETag matches or entity is not modified,
-  # so request is fresh; false otherwise
-  #
-  # @api public
-  def request_fresh?
-    etag_matches?(self.etag) || not_modified?(self.last_modified)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/controller.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/controller.rb
deleted file mode 100644
index 283bc1b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/controller.rb
+++ /dev/null
@@ -1,348 +0,0 @@
-module Merb
-  # Module that is mixed in to all implemented controllers.
-  module ControllerMixin
-    
-    # Enqueu a block to run in a background thread outside of the request
-    # response dispatch
-    # 
-    # ==== Parameters
-    # &blk:: proc to run later
-    # 
-    # ==== Example
-    # run_later do
-    #   SomeBackgroundTask.run
-    # end
-    # 
-    # @api public
-    def run_later(&blk)
-      Merb::Dispatcher.work_queue << blk
-    end
-    
-    # Renders the block given as a parameter using chunked encoding.
-    # 
-    # ==== Parameters
-    # &blk::
-    #   A block that, when called, will use send_chunks to send chunks of data
-    #   down to the server. The chunking will terminate once the block returns.
-    # 
-    # ==== Examples
-    #   def stream
-    #     prefix = '<p>'
-    #     suffix = "</p>\r\n"
-    #     render_chunked do
-    #       IO.popen("cat /tmp/test.log") do |io|
-    #         done = false
-    #         until done
-    #           sleep 0.3
-    #           line = io.gets.chomp
-    #           
-    #           if line == 'EOF'
-    #             done = true
-    #           else
-    #             send_chunk(prefix + line + suffix)
-    #           end
-    #         end
-    #       end
-    #     end
-    #   end
-    # 
-    # @api public
-    def render_chunked(&blk)
-      must_support_streaming!
-      headers['Transfer-Encoding'] = 'chunked'
-      Proc.new { |response|
-        @response = response
-        response.send_status_no_connection_close('')
-        response.send_header
-        blk.call
-        response.write("0\r\n\r\n")
-      }
-    end
-    
-    # Writes a chunk from +render_chunked+ to the response that is sent back to
-    # the client. This should only be called within a +render_chunked+ block.
-    #
-    # ==== Parameters
-    # data<String>:: a chunk of data to return.
-    # 
-    # @api public
-    def send_chunk(data)
-      only_runs_on_mongrel!
-      @response.write('%x' % data.size + "\r\n")
-      @response.write(data + "\r\n")
-    end
-    
-    # ==== Parameters
-    # &blk::
-    #   A proc that should get called outside the mutex, and which will return
-    #   the value to render.
-    # 
-    # ==== Returns
-    # Proc::
-    #   A block that the server can call later, allowing Merb to release the
-    #   thread lock and render another request.
-    # 
-    # @api public
-    def render_deferred(&blk)
-      Proc.new do |response|
-        response.write(blk.call)
-      end
-    end
-    
-    # Renders the passed in string, then calls the block outside the mutex and
-    # after the string has been returned to the client.
-    # 
-    # ==== Parameters
-    # str<String>:: A +String+ to return to the client.
-    # &blk:: A block that should get called once the string has been returned.
-    # 
-    # ==== Returns
-    # Proc::
-    #   A block that Mongrel can call after returning the string to the user.
-    # 
-    # @api public
-    def render_then_call(str, &blk)
-      Proc.new do |response|
-        response.write(str)
-        blk.call
-      end
-    end
-    
-    # ==== Parameters
-    # url<String>::
-    #   URL to redirect to. It can be either a relative or fully-qualified URL.
-    # opts<Hash>:: An options hash (see below)
-    # 
-    # ==== Options (opts)
-    # :message<Hash>::
-    #   Messages to pass in url query string as value for "_message"
-    # :permanent<Boolean>::
-    #   When true, return status 301 Moved Permanently
-    # 
-    # ==== Returns
-    # String:: Explanation of redirect.
-    # 
-    # ==== Examples
-    #   redirect("/posts/34")
-    #   redirect("/posts/34", :message => { :notice => 'Post updated successfully!' })
-    #   redirect("http://www.merbivore.com/")
-    #   redirect("http://www.merbivore.com/", :permanent => true)
-    # 
-    # @api public
-    def redirect(url, opts = {})
-      default_redirect_options = { :message => nil, :permanent => false }
-      opts = default_redirect_options.merge(opts)
-      if opts[:message]
-        notice = Merb::Parse.escape([Marshal.dump(opts[:message])].pack("m"))
-        url = url =~ /\?/ ? "#{url}&_message=#{notice}" : "#{url}?_message=#{notice}"
-      end
-      self.status = opts[:permanent] ? 301 : 302
-      Merb.logger.info("Redirecting to: #{url} (#{self.status})")
-      headers['Location'] = url
-      "<html><body>You are being <a href=\"#{url}\">redirected</a>.</body></html>"
-    end
-    
-    # Retreives the redirect message either locally or from the request.
-    # 
-    # @api public
-    def message
-      @_message = defined?(@_message) ? @_message : request.message
-    end
-    
-    # Sends a file over HTTP.  When given a path to a file, it will set the
-    # right headers so that the static file is served directly.
-    # 
-    # ==== Parameters
-    # file<String>:: Path to file to send to the client.
-    # opts<Hash>:: Options for sending the file (see below).
-    # 
-    # ==== Options (opts)
-    # :disposition<String>::
-    #   The disposition of the file send. Defaults to "attachment".
-    # :filename<String>::
-    #   The name to use for the file. Defaults to the filename of file.
-    # :type<String>:: The content type.
-    #
-    # ==== Returns
-    # IO:: An I/O stream for the file.
-    # 
-    # @api public
-    def send_file(file, opts={})
-      opts.update(Merb::Const::DEFAULT_SEND_FILE_OPTIONS.merge(opts))
-      disposition = opts[:disposition].dup || 'attachment'
-      disposition << %(; filename="#{opts[:filename] ? opts[:filename] : File.basename(file)}")
-      headers.update(
-        'Content-Type'              => opts[:type].strip,  # fixes a problem with extra '\r' with some browsers
-        'Content-Disposition'       => disposition,
-        'Content-Transfer-Encoding' => 'binary'
-      )
-      Proc.new do |response|
-        file = File.open(file, 'rb')
-        while chunk = file.read(16384)
-          response.write chunk
-        end
-        file.close
-      end
-    end
-    
-    # Send binary data over HTTP to the user as a file download. May set content type,
-    # apparent file name, and specify whether to show data inline or download as an attachment.
-    # 
-    # ==== Parameters
-    # data<String>:: Path to file to send to the client.
-    # opts<Hash>:: Options for sending the data (see below).
-    # 
-    # ==== Options (opts)
-    # :disposition<String>::
-    #   The disposition of the file send. Defaults to "attachment".
-    # :filename<String>::
-    #   The name to use for the file. Defaults to the filename of file.
-    # :type<String>:: The content type.
-    # 
-    # @api public
-    def send_data(data, opts={})
-      opts.update(Merb::Const::DEFAULT_SEND_FILE_OPTIONS.merge(opts))
-      disposition = opts[:disposition].dup || 'attachment'
-      disposition << %(; filename="#{opts[:filename]}") if opts[:filename]
-      headers.update(
-        'Content-Type'              => opts[:type].strip,  # fixes a problem with extra '\r' with some browsers
-        'Content-Disposition'       => disposition,
-        'Content-Transfer-Encoding' => 'binary'
-      )
-      data
-    end
-    
-    # Streams a file over HTTP.
-    # 
-    # ==== Parameters
-    # opts<Hash>:: Options for the file streaming (see below).
-    # &stream::
-    #   A block that, when called, will return an object that responds to
-    #   +get_lines+ for streaming.
-    # 
-    # ==== Options
-    # :disposition<String>::
-    #   The disposition of the file send. Defaults to "attachment".
-    # :type<String>:: The content type.
-    # :content_length<Numeric>:: The length of the content to send.
-    # :filename<String>:: The name to use for the streamed file.
-    #
-    # ==== Examples
-    #   stream_file({ :filename => file_name, :type => content_type,
-    #     :content_length => content_length }) do |response|
-    #     AWS::S3::S3Object.stream(user.folder_name + "-" + user_file.unique_id, bucket_name) do |chunk|
-    #       response.write chunk
-    #     end
-    #   end
-    # 
-    # @api public
-    def stream_file(opts={}, &stream)
-      opts.update(Merb::Const::DEFAULT_SEND_FILE_OPTIONS.merge(opts))
-      disposition = opts[:disposition].dup || 'attachment'
-      disposition << %(; filename="#{opts[:filename]}")
-      headers.update(
-        'Content-Type'              => opts[:type].strip,  # fixes a problem with extra '\r' with some browsers
-        'Content-Disposition'       => disposition,
-        'Content-Transfer-Encoding' => 'binary',
-        # Rack specification requires header values to respond to :each
-        'CONTENT-LENGTH'            => opts[:content_length].to_s
-      )
-      Proc.new do |response|
-        stream.call(response)
-      end
-    end
-    
-    # Uses the nginx specific +X-Accel-Redirect+ header to send a file directly
-    # from nginx.
-    # 
-    # ==== Notes
-    # Unless Content-Disposition is set before calling this method,
-    # it is set to attachment with streamed file name.
-    # 
-    # For more information, see the nginx wiki:
-    # http://wiki.codemongers.com/NginxXSendfile
-    # 
-    # and the following sample gist:
-    # http://gist.github.com/11225
-    # 
-    # there's also example application up on GitHub:
-    # 
-    # http://github.com/michaelklishin/nginx-x-accel-redirect-example-application/tree/master
-    # 
-    # ==== Parameters
-    # path<String>:: Path to file to send to the client.
-    # content_type<String>:: content type header value. By default is set to empty string to let
-    #                        Nginx detect it.
-    # 
-    # ==== Return
-    # String:: precisely a single space.
-    # 
-    # @api public
-    def nginx_send_file(path, content_type = "")
-      # Let Nginx detect content type unless it is explicitly set
-      headers['Content-Type']        = content_type
-      headers["Content-Disposition"] ||= "attachment; filename=#{path.split('/').last}"
-      
-      headers['X-Accel-Redirect']    = path
-      
-      return ' '
-    end  
-    
-    # Sets a cookie to be included in the response.
-    # 
-    # If you need to set a cookie, then use the +cookies+ hash.
-    # 
-    # ==== Parameters
-    # name<~to_s>:: A name for the cookie.
-    # value<~to_s>:: A value for the cookie.
-    # expires<~gmtime:~strftime, Hash>:: An expiration time for the cookie, or a hash of cookie options.
-    # 
-    # @api public
-    def set_cookie(name, value, expires)
-      options = expires.is_a?(Hash) ? expires : {:expires => expires}
-      cookies.set_cookie(name, value, options)
-    end
-    
-    # Marks a cookie as deleted and gives it an expires stamp in the past. This
-    # method is used primarily internally in Merb.
-    # 
-    # Use the +cookies+ hash to manipulate cookies instead.
-    # 
-    # ==== Parameters
-    # name<~to_s>:: A name for the cookie to delete.
-    # 
-    # @api public
-    def delete_cookie(name)
-      set_cookie(name, nil, Merb::Const::COOKIE_EXPIRED_TIME)
-    end
-    
-    # Escapes the string representation of +obj+ and escapes it for use in XML.
-    #
-    # ==== Parameter
-    # obj<~to_s>:: The object to escape for use in XML.
-    #
-    # ==== Returns
-    # String:: The escaped object.
-    # 
-    # @api public
-    def escape_xml(obj)
-      Erubis::XmlHelper.escape_xml(obj.to_s)
-    end
-    alias h escape_xml
-    alias escape_html escape_xml
-    
-    private
-    
-    # Marks an output method that only runs on the Mongrel webserver.
-    # 
-    # ==== Raises
-    # NotImplemented:: The Rack adapter is not mongrel.
-    # 
-    # @api private
-    def only_runs_on_mongrel!
-      unless Merb::Config[:log_stream] == 'mongrel'
-        raise(Merb::ControllerExceptions::NotImplemented, "Current Rack adapter is not mongrel. cannot support this feature")
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/render.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/render.rb
deleted file mode 100644
index 1f8a7da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/render.rb
+++ /dev/null
@@ -1,532 +0,0 @@
-module Merb::RenderMixin
-  # So we can do raise TemplateNotFound
-  include Merb::ControllerExceptions
-
-  # ==== Parameters
-  # base<Module>:: Module that is including RenderMixin (probably a controller)
-  #
-  # @private
-  def self.included(base)
-    base.extend(ClassMethods)
-    base.class_eval do
-      class_inheritable_accessor :_default_render_options
-    end
-  end
-
-  module ClassMethods
-
-    # Return the default render options.
-    #
-    # ==== Returns
-    # Hash:: An options hash
-    #
-    # @api public
-    def default_render_options
-      self._default_render_options ||= {}
-    end
-
-    # Set default render options at the class level.
-    #
-    # ==== Parameters
-    # opts<Hash>:: An options hash
-    #
-    # @api public
-    def render_options(opts)
-      self._default_render_options = opts
-    end
-
-    # Set the default layout to use or nil/false to disable layout rendering.
-    # This is a shortcut for render_options :layout => false.
-    #
-    # ==== Parameters
-    # layout<~to_s>:: The layout that should be used for this class.
-    #
-    # ==== Notes
-    # You can override by passing :layout => true to render method.
-    #
-    # ==== Returns
-    # Hash:: The default render options.
-    #
-    # @api public
-    def layout(layout)
-      self.default_render_options.update(:layout => (layout || false))
-    end
-
-    # Enable the default layout logic - reset the layout option.
-    #
-    # ==== Returns
-    # ~to_s:: The layout that was previously set.
-    #
-    # @api public
-    def default_layout
-      self.default_render_options.delete(:layout)
-    end
-
-  end
-
-  # Render the specified item, with the specified options.
-  #
-  # ==== Parameters
-  # thing<String, Symbol, nil>::
-  #   The thing to render. This will default to the current action
-  # opts<Hash>:: An options hash (see below)
-  #
-  # ==== Options (opts)
-  # :format<Symbol>:: A registered mime-type format
-  # :template<String>::
-  #   The path to the template relative to the template root
-  # :status<~to_i>::
-  #   The status to send to the client. Typically, this would be an integer
-  #   (200), or a Merb status code (Accepted)
-  # :layout<~to_s, FalseClass>::
-  #   A layout to use instead of the default. This should be relative to the
-  #   layout root. By default, the layout will be either the controller_name or
-  #   application. If you want to use an alternative content-type than the one
-  #   that the base template was rendered as, you will need to do :layout =>
-  #   "foo.#{content_type}" (i.e. "foo.json"). If you want to render without
-  #   layout, use :layout => false. This overrides layout set by +layout+ method.
-  #
-  # ==== Returns
-  # String:: The rendered template, including layout, if appropriate.
-  #
-  # ==== Raises
-  # TemplateNotFound:: There is no template for the specified location.
-  #
-  # ==== Alternatives
-  # If you pass a Hash as the first parameter, it will be moved to opts and
-  # "thing" will be the current action
-  #
-  # @api public
-  def render(thing = nil, opts = {})
-    # render :format => :xml means render nil, :format => :xml
-    opts, thing = thing, nil if thing.is_a?(Hash)
-
-    # Merge with class level default render options
-    opts = self.class.default_render_options.merge(opts)
-
-    # If you don't specify a thing to render, assume they want to render the current action
-    thing ||= action_name.to_sym
-
-    # Content negotiation
-    self.content_type = opts[:format] if opts[:format]
-
-    # Handle options (:status)
-    _handle_options!(opts)
-
-    # Do we have a template to try to render?
-    if thing.is_a?(Symbol) || opts[:template]
-
-      template_method, template_location = 
-        _template_for(thing, content_type, controller_name, opts[:template])
-
-      # Raise an error if there's no template
-      unless template_method && self.respond_to?(template_method)
-        template_files = Merb::Template.template_extensions.map { |ext| "#{template_location}.#{ext}" }
-        raise TemplateNotFound, "Oops! No template found. Merb was looking for #{template_files.join(', ')}" + 
-          "for content type '#{content_type}'. You might have mispelled the template or file name. " + 
-          "Registered template extensions: #{Merb::Template.template_extensions.join(', ')}. " +
-          "If you use Haml or some other template plugin, make sure you required Merb plugin dependency " + 
-          "in your init file."
-      end
-
-      # Call the method in question and throw the content for later consumption by the layout
-      throw_content(:for_layout, self.send(template_method))
-
-    # Do we have a string to render?
-    elsif thing.is_a?(String)
-
-      # Throw it for later consumption by the layout
-      throw_content(:for_layout, thing)
-    end
-
-    # If we find a layout, use it. Otherwise, just render the content thrown for layout.
-    (layout = _get_layout(opts[:layout])) ? send(layout) : catch_content(:for_layout)
-  end
-
-  # Renders an object using to registered transform method based on the
-  # negotiated content-type, if a template does not exist. For instance, if the
-  # content-type is :json, Merb will first look for current_action.json.*.
-  # Failing that, it will run object.to_json.
-  #
-  # ==== Parameter
-  # object<Object>::
-  #   An object that responds_to? the transform method registered for the
-  #   negotiated mime-type.
-  # thing<String, Symbol>::
-  #   The thing to attempt to render via #render before calling the transform
-  #   method on the object. Defaults to nil.
-  # opts<Hash>::
-  #   An options hash that will be used for rendering
-  #   (passed on to #render or serialization methods like #to_json or #to_xml)
-  #
-  # ==== Returns
-  # String::
-  #   The rendered template or if no template is found, the transformed object.
-  #
-  # ==== Raises
-  # NotAcceptable::
-  #   If there is no transform method for the specified mime-type or the object
-  #   does not respond to the transform method.
-  #
-  # ==== Alternatives
-  # A string in the second parameter will be interpreted as a template:
-  #   display @object, "path/to/foo"
-  #   #=> display @object, nil, :template => "path/to/foo"
-  #
-  # A hash in the second parameters will be interpreted as opts:
-  #   display @object, :layout => "zoo"
-  #   #=> display @object, nil, :layout => "zoo"
-  #
-  # If you need to pass extra parameters to serialization method, for instance,
-  # to exclude some of attributes or serialize associations, just pass options
-  # for it.
-  # For instance,
-  #
-  # display @locations, :except => [:locatable_type, :locatable_id], :include => [:locatable]
-  #
-  # serializes object with polymorphic association, not raw locatable_* attributes.
-  #
-  #
-  # ==== Options
-  #
-  # :template                a template to use for rendering
-  # :layout                  a layout to use for rendering
-  # :status                  the status code to return (defaults to 200)
-  # :location                the value of the Location header
-  #
-  # all other options        options that will be pass to serialization method
-  #                          like #to_json or #to_xml
-  #
-  # ==== Notes
-  # The transformed object will not be used in a layout unless a :layout is
-  # explicitly passed in the opts.
-  #
-  # @api public
-  def display(object, thing = nil, opts = {})
-    template_opt = thing.is_a?(Hash) ? thing.delete(:template) : opts.delete(:template)
-
-    case thing
-    # display @object, "path/to/foo" means display @object, nil, :template => "path/to/foo"
-    when String
-      template_opt, thing = thing, nil
-    # display @object, :template => "path/to/foo" means display @object, nil, :template => "path/to/foo"
-    when Hash
-      opts, thing = thing, nil
-    end
-
-    # Try to render without the object
-    render(thing || action_name.to_sym, opts.merge(:template => template_opt))
-
-  # If the render fails (i.e. a template was not found)
-  rescue TemplateNotFound => e
-    # Merge with class level default render options
-    # @todo can we find a way to refactor this out so we don't have to do it everywhere?
-    opts = self.class.default_render_options.merge(opts)
-
-    # Figure out what to transform and raise NotAcceptable unless there's a transform method assigned
-    transform = Merb.mime_transform_method(content_type)
-    if !transform
-      raise NotAcceptable, "#{e.message} and there was no transform method registered for #{content_type.inspect}"
-    elsif !object.respond_to?(transform)
-      raise NotAcceptable, "#{e.message} and your object does not respond to ##{transform}"
-    end
-
-    layout_opt = opts.delete(:layout)
-    _handle_options!(opts)
-    throw_content(:for_layout, opts.empty? ? object.send(transform) : object.send(transform, opts))
-    
-    meth, _ = _template_for(layout_opt, layout_opt.to_s.index(".") ? nil : content_type, "layout") if layout_opt
-    meth ? send(meth) : catch_content(:for_layout)
-  end
-
-  # Render a partial template.
-  #
-  # ==== Parameters
-  # template<~to_s>::
-  #   The path to the template, relative to the current controller or the
-  #   template root; absolute path will work too. If the template contains a "/", 
-  #   Merb will search for it relative to the template root; otherwise, 
-  #   Merb will search for it relative to the current controller.
-  # opts<Hash>:: A hash of options (see below)
-  #
-  # ==== Options (opts)
-  # :with<Object, Array>::
-  #   An object or an array of objects that will be passed into the partial.
-  # :as<~to_sym>:: The local name of the :with Object inside of the partial.
-  # :format<Symbol>:: The mime format that you want the partial to be in (:js, :html, etc.)
-  # others::
-  #   A Hash object names and values that will be the local names and values
-  #   inside the partial.
-  #
-  # ==== Examples
-  #   partial :foo, :hello => @object
-  #
-  # The "_foo" partial will be called, relative to the current controller,
-  # with a local variable of +hello+ inside of it, assigned to @object.
-  #
-  #   partial :bar, :with => ['one', 'two', 'three']
-  #
-  # The "_bar" partial will be called once for each element of the array
-  # specified by :with for a total of three iterations. Each element
-  # of the array will be available in the partial via a local variable named
-  # +bar+. Additionally, there will be two extra local variables:
-  # +collection_index+ and +collection_size+. +collection_index+ is the index
-  # of the object currently referenced by +bar+ in the collection passed to
-  # the partial. +collection_size+ is the total size of the collection.
-  #
-  # By default, the object specified by :with will be available through a
-  # local variable with the same name as the partial template. However,
-  # this can be changed using the :as option.
-  #
-  #   partial :bar, :with => "one", :as => :number
-  #
-  # In this case, "one" will be available in the partial through the local
-  # variable named +number+.
-  #
-  # @api public
-  def partial(template, opts={})
-
-    # partial :foo becomes "#{controller_name}/_foo"
-    # partial "foo/bar" becomes "foo/_bar"
-    template = template.to_s
-    if template =~ %r{^/}
-      template_path = File.dirname(template) / "_#{File.basename(template)}"
-    else
-      kontroller = (m = template.match(/.*(?=\/)/)) ? m[0] : controller_name
-      template = "_#{File.basename(template)}"
-    end
-
-    # This handles no :with as well
-    with = [opts.delete(:with)].flatten
-    as = (opts.delete(:as) || template.match(%r[(?:.*/)?_([^\./]*)])[1]).to_sym
-
-    # Ensure that as is in the locals hash even if it isn't passed in here
-    # so that it's included in the preamble. 
-    locals = opts.merge(:collection_index => -1, :collection_size => with.size, as => opts[as])
-    template_method, template_location = _template_for(
-      template, 
-      opts.delete(:format) || content_type, 
-      kontroller, 
-      template_path, 
-      locals.keys)
-    
-    # this handles an edge-case where the name of the partial is _foo.* and your opts
-    # have :foo as a key.
-    named_local = opts.key?(as)
-    
-    sent_template = with.map do |temp|
-      locals[as] = temp unless named_local
-
-      if template_method && self.respond_to?(template_method)
-        locals[:collection_index] += 1
-        send(template_method, locals)
-      else
-        raise TemplateNotFound, "Could not find template at #{template_location}.*"
-      end
-    end.join
-    
-    sent_template
-  end
-
-  # Take the options hash and handle it as appropriate.
-  #
-  # ==== Parameters
-  # opts<Hash>:: The options hash that was passed into render.
-  #
-  # ==== Options
-  # :status<~to_i>::
-  #   The status of the response will be set to opts[:status].to_i
-  #
-  # ==== Returns
-  # Hash:: The options hash that was passed in.
-  #
-  # @api private
-  def _handle_options!(opts)
-    self.status = opts.delete(:status).to_i if opts[:status]
-    headers["Location"] = opts.delete(:location) if opts[:location]
-    opts
-  end
-
-  # Get the layout that should be used. The content-type will be appended to
-  # the layout unless the layout already contains a "." in it.
-  #
-  # If no layout was passed in, this method will look for one with the same
-  # name as the controller, and finally one in "application.#{content_type}".
-  #
-  # ==== Parameters
-  # layout<~to_s>:: A layout, relative to the layout root. Defaults to nil.
-  #
-  # ==== Returns
-  # String:: The method name that corresponds to the found layout.
-  #
-  # ==== Raises
-  # TemplateNotFound::
-  #   If a layout was specified (either via layout in the class or by passing
-  #   one in to this method), and not found. No error will be raised if no
-  #   layout was specified, and the default layouts were not found.
-  #
-  # @api private
-  def _get_layout(layout = nil)
-    return false if layout == false
-    
-    layout = layout.instance_of?(Symbol) && self.respond_to?(layout, true) ? send(layout) : layout
-    layout = layout.to_s if layout
-
-    # If a layout was provided, throw an error if it's not found
-    if layout      
-      template_method, template_location = 
-        _template_for(layout, layout.index(".") ? nil : content_type, "layout")
-        
-      raise TemplateNotFound, "No layout found at #{template_location}" unless template_method
-      template_method
-
-    # If a layout was not provided, try the default locations
-    else
-      template, location = _template_for(controller_name, content_type, "layout")
-      template, location = _template_for("application", content_type, "layout") unless template
-      template
-    end
-  end
-
-  # Iterate over the template roots in reverse order, and return the template
-  # and template location of the first match.
-  #
-  # ==== Parameters
-  # context<Object>:: The controller action or template (basename or absolute path).
-  # content_type<~to_s>:: The content type (like html or json).
-  # controller<~to_s>:: The name of the controller. Defaults to nil.
-  # locals<Array[Symbol]>:: A list of locals to assign from the args passed into the compiled template.
-  #
-  # ==== Options (opts)
-  # :template<String>::
-  #   The location of the template to use. Defaults to whatever matches this
-  #   context, content_type and controller.
-  #
-  # ==== Returns
-  # Array[Symbol, String]::
-  #   A pair consisting of the template method and location.
-  #
-  # @api private
-  def _template_for(context, content_type, controller=nil, template=nil, locals=[])
-    template_method, template_location = nil, nil
-
-    # absolute path to a template (:template => "/foo/bar")
-    if template.is_a?(String) && template =~ %r{^/}
-      template_location = self._absolute_template_location(template, content_type)
-      return [_template_method_for(template_location, locals), template_location]
-    end
-
-    self.class._template_roots.reverse_each do |root, template_meth|
-      # :template => "foo/bar.html" where root / "foo/bar.html.*" exists
-      if template
-        template_location = root / self.send(template_meth, template, content_type, nil)
-      # :layout => "foo" where root / "layouts" / "#{controller}.html.*" exists        
-      else
-        template_location = root / self.send(template_meth, context, content_type, controller)
-      end
-      
-      break if template_method = _template_method_for(template_location.to_s, locals)
-    end
-
-    # template_location is a Pathname
-    [template_method, template_location.to_s]
-  end
-  
-  # Return the template method for a location, and check to make sure the current controller
-  # actually responds to the method.
-  #
-  # ==== Parameters
-  # template_location<String>:: The phyical path of the template
-  # locals<Array[Symbol]>:: A list of locals to assign from the args passed into the compiled template.
-  #
-  # ==== Returns
-  # String:: The method, if it exists. Otherwise return nil.
-  #
-  # @api private
-  def _template_method_for(template_location, locals)
-    meth = Merb::Template.template_for(template_location, [], locals)
-    meth && self.respond_to?(meth) ? meth : nil
-  end
-
-  # Called in templates to get at content thrown in another template. The
-  # results of rendering a template are automatically thrown into :for_layout,
-  # so catch_content or catch_content(:for_layout) can be used inside layouts
-  # to get the content rendered by the action template.
-  #
-  # ==== Parameters
-  # obj<Object>:: The key in the thrown_content hash. Defaults to :for_layout.
-  #
-  # @api public
-  def catch_content(obj = :for_layout)
-    @_caught_content[obj] || ''
-  end
-
-  # Called in templates to test for the existence of previously thrown content.
-  #
-  # ==== Parameters
-  # obj<Object>:: The key in the thrown_content hash. Defaults to :for_layout.
-  #
-  # @api public
-  def thrown_content?(obj = :for_layout)
-    @_caught_content.key?(obj)
-  end
-
-  # Called in templates to store up content for later use. Takes a string
-  # and/or a block. First, the string is evaluated, and then the block is
-  # captured using the capture() helper provided by the template languages. The
-  # two are concatenated together.
-  #
-  # ==== Parameters
-  # obj<Object>:: The key in the thrown_content hash.
-  # string<String>:: Textual content. Defaults to nil.
-  # &block:: A block to be evaluated and concatenated to string.
-  #
-  # ==== Raises
-  # ArgumentError:: Neither string nor block given.
-  #
-  # ==== Example
-  #   throw_content(:foo, "Foo")
-  #   catch_content(:foo) #=> "Foo"
-  #
-  # @api public
-  def throw_content(obj, string = nil, &block)
-    unless string || block_given?
-      raise ArgumentError, "You must pass a block or a string into throw_content"
-    end
-    @_caught_content[obj] = string.to_s << (block_given? ? capture(&block) : "")
-  end
-
-  # Called in templates to append content for later use. Works like throw_content.
-  #
-  # @param [Object] obj
-  #   Key used in the thrown_content hash.
-  # @param [String] string
-  #   Textual content. Default to nil.
-  # @yield 
-  #   Evaluated with result concatenated to string.
-  #
-  # @raise [ArgumentError]
-  #   Neither string nor block given
-  #
-  # @api public
-  def append_content(obj, string = nil, &block)
-    unless string || block_given?
-      raise ArgumentError, "You must pass a block or a string into append_content"
-    end
-    @_caught_content[obj] = [] if @_caught_content[obj].nil?
-    @_caught_content[obj] << string.to_s << (block_given? ? capture(&block) : "")
-  end
-
-  # Called when renderers need to be sure that existing thrown content is cleared
-  # before throwing new content. This prevents double rendering of content when
-  # multiple templates are rendered after each other.
-  #
-  # ==== Parameters
-  # obj<Object>:: The key in the thrown_content hash. Defaults to :for_layout.
-  #
-  # @api public
-  def clear_content(obj = :for_layout)
-    @_caught_content.delete(obj) unless @_caught_content[obj].nil?
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/responder.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/responder.rb
deleted file mode 100644
index d1880ce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/mixins/responder.rb
+++ /dev/null
@@ -1,492 +0,0 @@
-require 'enumerator'
-require 'merb-core/controller/mime'
-
-module Merb
-  # The ResponderMixin adds methods that help you manage what
-  # formats your controllers have available, determine what format(s)
-  # the client requested and is capable of handling, and perform
-  # content negotiation to pick the proper content format to
-  # deliver.
-  # 
-  # If you hear someone say "Use provides" they're talking about the
-  # Responder.  If you hear someone ask "What happened to respond_to?"
-  # it was replaced by provides and the other Responder methods.
-  # 
-  # == A simple example
-  # 
-  # The best way to understand how all of these pieces fit together is
-  # with an example.  Here's a simple web-service ready resource that
-  # provides a list of all the widgets we know about.  The widget list is 
-  # available in 3 formats: :html (the default), plus :xml and :text.
-  # 
-  #     class Widgets < Application
-  #       provides :html   # This is the default, but you can
-  #                        # be explicit if you like.
-  #       provides :xml, :text
-  #       
-  #       def index
-  #         @widgets = Widget.fetch
-  #         render @widgets
-  #       end
-  #     end
-  # 
-  # Let's look at some example requests for this list of widgets.  We'll
-  # assume they're all GET requests, but that's only to make the examples
-  # easier; this works for the full set of RESTful methods.
-  # 
-  # 1. The simplest case, /widgets.html
-  #    Since the request includes a specific format (.html) we know
-  #    what format to return.  Since :html is in our list of provided
-  #    formats, that's what we'll return.  +render+ will look
-  #    for an index.html.erb (or another template format
-  #    like index.html.mab; see the documentation on Template engines)
-  # 
-  # 2. Almost as simple, /widgets.xml
-  #    This is very similar.  They want :xml, we have :xml, so
-  #    that's what they get.  If +render+ doesn't find an 
-  #    index.xml.builder or similar template, it will call +to_xml+
-  #    on @widgets.  This may or may not do something useful, but you can 
-  #    see how it works.
-  #
-  # 3. A browser request for /widgets
-  #    This time the URL doesn't say what format is being requested, so
-  #    we'll look to the HTTP Accept: header.  If it's '*/*' (anything),
-  #    we'll use the first format on our list, :html by default.
-  #    
-  #    If it parses to a list of accepted formats, we'll look through 
-  #    them, in order, until we find one we have available.  If we find
-  #    one, we'll use that.  Otherwise, we can't fulfill the request: 
-  #    they asked for a format we don't have.  So we raise
-  #    406: Not Acceptable.
-  # 
-  # == A more complex example
-  # 
-  # Sometimes you don't have the same code to handle each available 
-  # format. Sometimes you need to load different data to serve
-  # /widgets.xml versus /widgets.txt.  In that case, you can use
-  # +content_type+ to determine what format will be delivered.
-  # 
-  #     class Widgets < Application
-  #       def action1
-  #         if content_type == :text
-  #           Widget.load_text_formatted(params[:id])
-  #         else
-  #           render
-  #         end
-  #       end
-  #       
-  #       def action2
-  #         case content_type
-  #         when :html
-  #           handle_html()
-  #         when :xml
-  #           handle_xml()
-  #         when :text
-  #           handle_text()
-  #         else
-  #           render
-  #         end
-  #       end
-  #     end
-  # 
-  # You can do any standard Ruby flow control using +content_type+.  If
-  # you don't call it yourself, it will be called (triggering content
-  # negotiation) by +render+.
-  #
-  # Once +content_type+ has been called, the output format is frozen,
-  # and none of the provides methods can be used.
-  module ResponderMixin
-    
-    TYPES = Dictionary.new
-    MIMES = {}
-
-    class ContentTypeAlreadySet < StandardError; end
-    
-    # ==== Parameters
-    # base<Module>:: The module that ResponderMixin was mixed into
-    #
-    # @api private
-    def self.included(base)
-      base.extend(ClassMethods)
-      base.class_eval do
-        class_inheritable_accessor :class_provided_formats
-        self.class_provided_formats = []
-      end
-      base.reset_provides
-    end
-
-    module ClassMethods
-      
-      # Adds symbols representing formats to the controller's default list of
-      # provided_formats. These will apply to every action in the controller,
-      # unless modified in the action. If the last argument is a Hash or an
-      # Array, these are regarded as arguments to pass to the to_<mime_type>
-      # method as needed.
-      #
-      # ==== Parameters
-      # *formats<Symbol>::
-      #   A list of mime-types that the controller should provide.
-      #
-      # ==== Returns
-      # Array[Symbol]:: List of formats passed in.
-      #
-      # ==== Examples
-      #   provides :html, :xml
-      #
-      # @api public
-      def provides(*formats)
-        self.class_provided_formats |= formats
-      end
-      
-      # This class should only provide the formats listed here, despite any
-      # other definitions previously or in superclasses.
-      #
-      # ==== Parameters
-      # *formats<Symbol>:: Registered mime-types.
-      # 
-      # ==== Returns
-      # Array[Symbol]:: List of formats passed in.      
-      #
-      # @api public
-      def only_provides(*formats)
-        clear_provides
-        provides(*formats)
-      end
-
-      # This class should not provide any of this list of formats, despite any.
-      # other definitions previously or in superclasses.
-      # 
-      # ==== Parameters
-      # *formats<Symbol>:: Registered mime-types.
-      # 
-      # ==== Returns
-      # Array[Symbol]::
-      #   List of formats that remain after removing the ones not to provide.
-      #
-      # @api public
-      def does_not_provide(*formats)
-        self.class_provided_formats -= formats
-      end
-
-      # Clear the list of provides.
-      #
-      # ==== Returns
-      # Array:: An empty Array.
-      #
-      # @api public
-      def clear_provides
-        self.class_provided_formats.clear
-      end
-      
-      # Reset the list of provides to include only :html.
-      #
-      # ==== Returns
-      # Array[Symbol]:: [:html].
-      #
-      # @api public
-      def reset_provides
-        only_provides(:html)
-      end
-    end
-
-    # ==== Returns
-    # Array[Symbol]::
-    #   The current list of formats provided for this instance of the
-    #   controller. It starts with what has been set in the controller (or
-    #   :html by default) but can be modifed on a per-action basis.      
-    #
-    # @api private
-    def _provided_formats
-      @_provided_formats ||= class_provided_formats.dup
-    end
-    
-    # Adds formats to the list of provided formats for this particular request.
-    # Usually used to add formats to a single action. See also the
-    # controller-level provides that affects all actions in a controller.
-    #
-    # ==== Parameters
-    # *formats<Symbol>::
-    #   A list of formats to add to the per-action list of provided formats.
-    #
-    # ==== Raises
-    # Merb::ResponderMixin::ContentTypeAlreadySet::
-    #   Content negotiation already occured, and the content_type is set.
-    #
-    # ==== Returns
-    # Array[Symbol]:: List of formats passed in.
-    #
-    # @api public
-    def provides(*formats)
-      if @_content_type
-        raise ContentTypeAlreadySet, "Cannot modify provided_formats because content_type has already been set"
-      end
-      @_provided_formats = self._provided_formats | formats # merges with class_provided_formats if not already
-    end
-
-    # Sets list of provided formats for this particular request. Usually used
-    # to limit formats to a single action. See also the controller-level
-    # only_provides that affects all actions in a controller.      
-    # 
-    # ==== Parameters
-    # *formats<Symbol>::
-    #   A list of formats to use as the per-action list of provided formats.
-    #
-    # ==== Returns
-    # Array[Symbol]:: List of formats passed in.
-    #
-    # @api public
-    def only_provides(*formats)
-      @_provided_formats = []
-      provides(*formats)
-    end
-    
-    # Removes formats from the list of provided formats for this particular 
-    # request. Usually used to remove formats from a single action.  See
-    # also the controller-level does_not_provide that affects all actions in a
-    # controller.
-    #
-    # ==== Parameters
-    # *formats<Symbol>:: Registered mime-type
-    # 
-    # ==== Returns
-    # Array[Symbol]::
-    #   List of formats that remain after removing the ones not to provide.
-    #
-    # @api public
-    def does_not_provide(*formats)
-      @_provided_formats -= formats.flatten
-    end
-    
-    # Do the content negotiation:
-    # 1. if params[:format] is there, and provided, use it
-    # 2. Parse the Accept header
-    # 3. If it's */*, use the first provided format
-    # 4. Look for one that is provided, in order of request
-    # 5. Raise 406 if none found
-    #
-    # @api private
-    def _perform_content_negotiation
-      if (fmt = params[:format]) && !fmt.empty?
-        accepts = [fmt.to_sym]
-      elsif request.accept =~ %r{^(text/html|\*/\*)} && _provided_formats.first == :html
-        # Handle the common case of text/html and :html provided after checking :format
-        return :html
-      else
-        accepts = Responder.parse(request.accept).map {|t| t.to_sym}.compact
-      end
-      
-      # no need to make a bunch of method calls to _provided_formats
-      provided_formats = _provided_formats
-      
-      specifics = accepts & provided_formats
-      return specifics.first unless specifics.length == 0
-      return provided_formats.first if accepts.include?(:all) && !provided_formats.empty?
-      
-      message  = "A format (%s) that isn't provided (%s) has been requested. "
-      message += "Make sure the action provides the format, and be "
-      message += "careful of before filters which won't recognize "
-      message += "formats provided within actions."
-      raise Merb::ControllerExceptions::NotAcceptable,
-        (message % [accepts.join(', '), provided_formats.join(', ')])
-    end
-
-    # Returns the output format for this request, based on the 
-    # provided formats, <tt>params[:format]</tt> and the client's HTTP
-    # Accept header.
-    #
-    # The first time this is called, it triggers content negotiation
-    # and caches the value.  Once you call +content_type+ you can
-    # not set or change the list of provided formats.
-    #
-    # Called automatically by +render+, so you should only call it if
-    # you need the value, not to trigger content negotiation. 
-    # 
-    # ==== Parameters
-    # fmt<String>:: 
-    #   An optional format to use instead of performing content negotiation.
-    #   This can be used to pass in the values of opts[:format] from the 
-    #   render function to short-circuit content-negotiation when it's not
-    #   necessary. This optional parameter should not be considered part
-    #   of the public API.
-    #
-    # ==== Returns
-    # Symbol:: The content-type that will be used for this controller.
-    #
-    # @api public
-    def content_type(fmt = nil)
-      self.content_type = (fmt || _perform_content_negotiation) unless @_content_type
-      @_content_type
-    end
-    
-    # Sets the content type of the current response to a value based on 
-    # a passed in key. The Content-Type header will be set to the first
-    # registered header for the mime-type.
-    #
-    # ==== Parameters
-    # type<Symbol>:: The content type.
-    #
-    # ==== Raises
-    # ArgumentError:: type is not in the list of registered mime-types.
-    #
-    # ==== Returns
-    # Symbol:: The content-type that was passed in.
-    #
-    # @api plugin
-    def content_type=(type)
-      unless Merb.available_mime_types.has_key?(type)
-        raise Merb::ControllerExceptions::NotAcceptable.new("Unknown content_type for response: #{type}") 
-      end
-
-      @_content_type = type
-
-      mime = Merb.available_mime_types[type]
-      
-      headers["Content-Type"] = mime[:content_type]
-      
-      # merge any format specific response headers
-      mime[:response_headers].each { |k,v| headers[k] ||= v }
-      
-      # if given, use a block to finetune any runtime headers
-      mime[:response_block].call(self) if mime[:response_block]
-
-      @_content_type
-    end
-    
-  end
-
-  class Responder
-    # Parses the raw accept header into an array of sorted AcceptType objects.
-    #
-    # ==== Parameters
-    # accept_header<~to_s>:: The raw accept header.
-    #
-    # ==== Returns
-    # Array[AcceptType]:: The accepted types.
-    #
-    # @private
-    def self.parse(accept_header)
-      headers = accept_header.split(/,/)
-      idx, list = 0, []
-      while idx < headers.size
-        list << AcceptType.new(headers[idx], idx)
-        idx += 1
-      end
-      list.sort
-    end
-  end
-
-  class AcceptType
-    attr_reader :media_range, :quality, :index, :type, :sub_type
-
-    # ==== Parameters
-    # entry<String>:: The accept type pattern
-    # index<Fixnum>::
-    #   The index used for sorting accept types. A lower value indicates higher
-    #   priority.
-    # 
-    # @api private
-    def initialize(entry,index)
-      @index = index
-      
-      entry =~ /\s*([^;\s]*)\s*(;\s*q=\s*(.*))?/
-      @media_range, quality = $1, $3
-      
-      @type, @sub_type = @media_range.split(%r{/})
-      (quality ||= 0.0) if @media_range == "*/*"
-      @quality = quality ? (quality.to_f * 100).to_i : 100
-      @quality *= (mime && mime[:default_quality] || 1)
-    end
-    
-    # Compares two accept types for sorting purposes.
-    #
-    # ==== Parameters
-    # entry<AcceptType>:: The accept type to compare.
-    #
-    # ==== Returns
-    # Fixnum::
-    #   -1, 0 or 1, depending on whether entry has a lower, equal or higher
-    #   priority than the accept type being compared.
-    #
-    # @api private
-    def <=>(entry)
-      if entry.quality == quality
-        @index <=> entry.index
-      else
-        entry.quality <=> @quality
-      end
-    end
-
-
-    # ==== Parameters
-    # entry<AcceptType>:: The accept type to compare.
-    #
-    # ==== Returns
-    # Boolean::
-    #   True if the accept types are equal, i.e. if the synonyms for this
-    #   accept type includes the entry media range.
-    #
-    # @api private
-    def eql?(entry)
-      synonyms.include?(entry.media_range)
-    end
-
-    # An alias for eql?.
-    #
-    # @api private
-    def ==(entry); eql?(entry); end
-
-    # ==== Returns
-    # Fixnum:: A hash based on the super range.
-    #
-    # @api private
-    def hash; super_range.hash; end
-
-    # ==== Returns
-    # Array[String]::
-    #   All Accept header values, such as "text/html", that match this type.
-    #
-    # @api private
-    def synonyms
-      return @syns if @syns
-      if _mime = mime
-        @syns = _mime[:accepts]
-      else
-        @syns = []
-      end
-    end
-    
-    # @api private
-    def mime
-      @mime ||= Merb.available_mime_types[Merb::ResponderMixin::MIMES[@media_range]]
-    end
-
-    # ==== Returns
-    # String::
-    #   The primary media range for this accept type, i.e. either the first
-    #   synonym or, if none exist, the media range.
-    #
-    # @api private
-    def super_range
-      synonyms.first || @media_range
-    end
-
-    # ==== Returns
-    # Symbol: The type as a symbol, e.g. :html.
-    #
-    # @api private
-    def to_sym
-      Merb.available_mime_types.select{|k,v| 
-        v[:accepts] == synonyms || v[:accepts][0] == synonyms[0]}.flatten.first
-    end
-
-    # ==== Returns
-    # String:: The accept type as a string, i.e. the media range.
-    #
-    # @api private
-    def to_s
-      @media_range
-    end
-  
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/template.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/template.rb
deleted file mode 100644
index d056c65..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/controller/template.rb
+++ /dev/null
@@ -1,299 +0,0 @@
-module Merb::InlineTemplates
-end
-
-module Merb::Template
-  
-  EXTENSIONS            = {} unless defined?(EXTENSIONS)
-  METHOD_LIST           = {} unless defined?(METHOD_LIST)
-  SUPPORTED_LOCALS_LIST = Hash.new([].freeze) unless defined?(SUPPORTED_LOCALS_LIST)
-  MTIMES                = {} unless defined?(MTIMES)
-  
-  class << self
-    # Get the template's method name from a full path. This replaces
-    # non-alphanumeric characters with __ and "." with "_"
-    #
-    # Collisions are potentially possible with something like:
-    # ~foo.bar and __foo.bar or !foo.bar.
-    #
-    # ==== Parameters
-    # path<String>:: A full path to convert to a valid Ruby method name
-    #
-    # ==== Returns
-    # String:: The template name.
-    #
-    #
-    # We might want to replace this with something that varies the
-    # character replaced based on the non-alphanumeric character
-    # to avoid edge-case collisions.
-    #
-    # @api private
-    def template_name(path)
-      path = File.expand_path(path)      
-      path.gsub(/[^\.a-zA-Z0-9]/, "__").gsub(/\./, "_")
-    end
-
-    # For a given path, get an IO object that responds to #path.
-    #
-    # This is so that plugins can override this if they provide
-    # mechanisms for specifying templates that are not just simple
-    # files. The plugin is responsible for ensuring that the fake
-    # path provided will work with #template_for, and thus the
-    # RenderMixin in general.
-    #
-    # ==== Parameters
-    # path<String>:: A full path to find a template for. This is the
-    #   path that the RenderMixin assumes it should find the template
-    #   in.
-    # 
-    # ==== Returns
-    # IO#path:: An IO object that responds to path (File or VirtualFile).
-    #
-    # @api plugin
-    # @overridable
-    def load_template_io(path)
-      File.open(path, "r")
-    end
-
-    # Get the name of the template method for a particular path.
-    #
-    # ==== Parameters
-    # path<String>:: A full path to find a template method for.
-    # template_stack<Array>:: The template stack. Not used.
-    # locals<Array[Symbol]>:: The names of local variables
-    #
-    # ==== Returns
-    # <String>:: name of the method that inlines the template.
-    #
-    # @api private
-    def template_for(path, template_stack = [], locals=[])
-      path = File.expand_path(path)
-      
-      if needs_compilation?(path, locals)
-        file = Dir["#{path}.{#{template_extensions.join(',')}}"].first
-        METHOD_LIST[path] = file ? inline_template(load_template_io(file), locals) : nil
-      end
-      
-      METHOD_LIST[path]
-    end
-    
-    # Decide if a template needs to be re/compiled.
-    #
-    # ==== Parameters
-    # path<String>:: The full path of the template to check support for.
-    # locals<Array[Symbol]>:: The list of locals that need to be supported
-    #
-    # ==== Returns
-    # Boolean:: Whether or not the template for the provided path needs to be recompiled
-    #
-    # @api private
-    def needs_compilation?(path, locals)
-      return true if Merb::Config[:reload_templates] || !METHOD_LIST[path]
-      
-      current_locals = SUPPORTED_LOCALS_LIST[path]
-      current_locals != locals &&
-        !(locals - current_locals).empty?
-    end
-    
-    # Get all known template extensions
-    #
-    # ==== Returns
-    #   Array:: Extension strings.
-    #
-    # @api plugin
-    def template_extensions
-      EXTENSIONS.keys
-    end
-    
-    # Takes a template at a particular path and inlines it into a module and
-    # adds it to the METHOD_LIST table to speed lookup later.
-    # 
-    # ==== Parameters
-    # io<#path>::
-    #   An IO that responds to #path (File or VirtualFile)
-    # locals<Array[Symbol]>::
-    #   A list of local names that should be assigned in the template method
-    #   from the arguments hash. Defaults to [].
-    # mod<Module>::
-    #   The module to put the compiled method into. Defaults to
-    #   Merb::InlineTemplates
-    #
-    # ==== Returns
-    # Symbol:: The name of the method that the template was compiled into.
-    #
-    # ==== Notes
-    # Even though this method supports inlining into any module, the method
-    # must be available to instances of AbstractController that will use it.
-    #
-    # @api private
-    def inline_template(io, locals=[], mod = Merb::InlineTemplates)
-      full_file_path = File.expand_path(io.path)
-      engine_neutral_path = full_file_path.gsub(/\.[^\.]*$/, "")
-      
-      SUPPORTED_LOCALS_LIST[engine_neutral_path] |= locals unless locals.empty?
-      ret = METHOD_LIST[engine_neutral_path] =
-        engine_for(full_file_path).compile_template(io, template_name(full_file_path), locals, mod)
-        
-      io.close
-      ret
-    end
-    
-    # Finds the engine for a particular path.
-    # 
-    # ==== Parameters
-    # path<String>:: The path of the file to find an engine for.
-    #
-    # ==== Returns
-    # Class:: The engine.
-    #
-    # @api private
-    def engine_for(path)
-      path = File.expand_path(path)      
-      EXTENSIONS[path.match(/\.([^\.]*)$/)[1]]
-    end
-    
-    # Registers the extensions that will trigger a particular templating
-    # engine.
-    # 
-    # ==== Parameters
-    # engine<Class>:: The class of the engine that is being registered
-    # extensions<Array[String]>:: 
-    #   The list of extensions that will be registered with this templating
-    #   language
-    #
-    # ==== Raises
-    # ArgumentError:: engine does not have a compile_template method.
-    #
-    # ==== Returns
-    # nil
-    #
-    # ==== Example
-    #   Merb::Template.register_extensions(Merb::Template::Erubis, ["erb"])
-    #
-    # @api plugin
-    def register_extensions(engine, extensions) 
-      raise ArgumentError, "The class you are registering does not have a compile_template method" unless
-        engine.respond_to?(:compile_template)
-      extensions.each{|ext| EXTENSIONS[ext] = engine }
-      Merb::AbstractController.class_eval <<-HERE
-        include #{engine}::Mixin
-      HERE
-    end
-  end
-  
-  require 'erubis'
-
-  class Erubis    
-    # ==== Parameters
-    # io<#path>:: An IO containing the full path of the template.
-    # name<String>:: The name of the method that will be created.
-    # locals<Array[Symbol]>:: A list of locals to assign from the args passed into the compiled template.
-    # mod<Module>:: The module that the compiled method will be placed into.
-    #
-    # @api private
-    def self.compile_template(io, name, locals, mod)
-      template = ::Erubis::BlockAwareEruby.new(io.read)
-      _old_verbose, $VERBOSE = $VERBOSE, nil
-      assigns = locals.inject([]) do |assigns, local|
-        assigns << "#{local} = _locals[#{local.inspect}]"
-      end.join(";")
-      
-      code = "def #{name}(_locals={}); #{assigns}; #{template.src}; end"
-      mod.module_eval code, File.expand_path(io.path)
-      $VERBOSE = _old_verbose
-      
-      name
-    end
-
-    module Mixin
-      
-      # ==== Parameters
-      # *args:: Arguments to pass to the block.
-      # &block:: The template block to call.
-      #
-      # ==== Returns
-      # String:: The output of the block.
-      #
-      # ==== Examples
-      # Capture being used in a .html.erb page:
-      # 
-      #   <% @foo = capture do %>
-      #     <p>Some Foo content!</p> 
-      #   <% end %>
-      #
-      # @private
-      def capture_erb(*args, &block)
-        _old_buf, @_erb_buf = @_erb_buf, ""
-        block.call(*args)
-        ret = @_erb_buf
-        @_erb_buf = _old_buf
-        ret
-      end
-
-      # @private
-      def concat_erb(string, binding)
-        @_erb_buf << string
-      end
-            
-    end
-  
-    Merb::Template.register_extensions(self, %w[erb])    
-  end
-  
-end
-
-module Erubis
-  module BlockAwareEnhancer
-    # @api private
-    def add_preamble(src)
-      src << "_old_buf, @_erb_buf = @_erb_buf, ''; "
-      src << "@_engine = 'erb'; "
-    end
-
-    # @api private
-    def add_postamble(src)
-      src << "\n" unless src[-1] == ?\n      
-      src << "_ret = @_erb_buf; @_erb_buf = _old_buf; _ret.to_s;\n"
-    end
-
-    # @api private
-    def add_text(src, text)
-      src << " @_erb_buf.concat('" << escape_text(text) << "'); "
-    end
-
-    # @api private
-    def add_expr_escaped(src, code)
-      src << ' @_erb_buf.concat(' << escaped_expr(code) << ');'
-    end
-    
-    # @api private
-    def add_stmt2(src, code, tailch)
-      src << code
-      src << " ).to_s; " if tailch == "="
-      src << ';' unless code[-1] == ?\n
-    end
-    
-    # @api private
-    def add_expr_literal(src, code)
-      if code =~ /(do|\{)(\s*\|[^|]*\|)?\s*\Z/
-        src << ' @_erb_buf.concat( ' << code << "; "
-      else
-        src << ' @_erb_buf.concat((' << code << ').to_s);'
-      end
-    end
-  end
-
-  class BlockAwareEruby < Eruby
-    include BlockAwareEnhancer
-  end
-  
-  # module RubyEvaluator
-  # 
-  #   # DOC
-  #   def def_method(object, method_name, filename=nil)
-  #     m = object.is_a?(Module) ? :module_eval : :instance_eval
-  #     setup = "@_engine = 'erb'"
-  #     object.__send__(m, "def #{method_name}(locals={}); #{setup}; #{@src}; end", filename || @filename || '(erubis)')
-  #   end
-  #  
-  # end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext.rb
deleted file mode 100644
index 54f403a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-begin
-  require "extlib"
-rescue LoadError => e
-  puts "Merb-core 0.9.4 and later uses extlib for Ruby core class extensions. Install it from github.com/sam/extlib."
-  exit
-end
-
-require File.dirname(__FILE__) / "core_ext" / "kernel"
-require File.dirname(__FILE__) / "core_ext" / "hash"
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext/hash.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext/hash.rb
deleted file mode 100644
index 48819e1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext/hash.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-class Hash
-  # Returns the value of self for each argument and deletes those entries.
-  #
-  # ==== Parameters
-  # *args:: the keys whose values should be extracted and deleted.
-  #
-  # ==== Returns
-  # Array[Object]:: The values of the provided arguments in corresponding order.
-  #
-  # @api public
-  def extract!(*args)
-    args.map do |arg|
-      self.delete(arg)
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext/kernel.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext/kernel.rb
deleted file mode 100644
index 421ce72..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/core_ext/kernel.rb
+++ /dev/null
@@ -1,406 +0,0 @@
-require 'rubygems/dependency'
-
-module Gem
-  class Dependency
-    attr_accessor :require_block, :require_as
-  end
-end
-
-module Kernel
-  
-  # Keep track of all required dependencies. 
-  #
-  # @param name<String> The name of the gem to load.
-  # @param *ver<Gem::Requirement, Gem::Version, Array, #to_str>
-  #   Version requirements to be passed to Gem::Dependency.new.
-  #
-  # @return <Gem::Dependency> Dependency information
-  #
-  # @api private
-  def track_dependency(name, *ver, &blk)
-    options = ver.pop if ver.last.is_a?(Hash)
-    new_dep = Gem::Dependency.new(name, ver.empty? ? nil : ver)
-    new_dep.require_block = blk
-    new_dep.require_as = (options && options[:require_as]) || name
-    
-    deps = Merb::BootLoader::Dependencies.dependencies
-
-    idx = deps.each_with_index {|d,i| break i if d.name == new_dep.name}
-
-    idx = idx.is_a?(Array) ? deps.size + 1 : idx
-    deps.delete_at(idx)
-    deps.insert(idx - 1, new_dep)
-
-    new_dep
-  end
-  
-  # Loads the given string as a gem. Execution is deferred until
-  # after the logger has been instantiated and the framework directory
-  # structure is defined.
-  #
-  # If that has already happened, the gem will be activated
-  # immediately, but it will still be registered.
-  # 
-  # ==== Parameters
-  # name<String> The name of the gem to load.
-  # *ver<Gem::Requirement, Gem::Version, Array, #to_str>
-  #   Version requirements to be passed to Gem::Dependency.new.
-  #   If the last argument is a Hash, extract the :immediate option,
-  #   forcing a dependency to load immediately.
-  #
-  # ==== Returns
-  # Gem::Dependency:: The dependency information.
-  #
-  # @api public
-  def dependency(name, *ver, &blk)
-    immediate = ver.last.delete(:immediate) if ver.last.is_a?(Hash)
-    if immediate || Merb::BootLoader.finished?(Merb::BootLoader::Dependencies)
-      load_dependency(name, *ver, &blk)
-    else
-      track_dependency(name, *ver, &blk)
-    end
-  end
-
-  # Loads the given string as a gem.
-  #
-  # This new version tries to load the file via ROOT/gems first before moving
-  # off to the system gems (so if you have a lower version of a gem in
-  # ROOT/gems, it'll still get loaded).
-  #
-  # @param name<String,Gem::Dependency> 
-  #   The name or dependency object of the gem to load.
-  # @param *ver<Gem::Requirement, Gem::Version, Array, #to_str>
-  #   Version requirements to be passed to Gem.activate.
-  #
-  # @note
-  #   If the gem cannot be found, the method will attempt to require the string
-  #   as a library.
-  #
-  # @return <Gem::Dependency> The dependency information.
-  #
-  # @api private
-  def load_dependency(name, *ver, &blk)
-    dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver, &blk)
-    gem(dep)
-  rescue Gem::LoadError => e
-    Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
-  ensure
-    begin
-      require dep.require_as
-    rescue LoadError => e
-      Merb.fatal! "The file #{dep.require_as} was not found", e
-    end
-
-    if block = dep.require_block
-      block.call
-    end
-
-    Merb.logger.verbose!("loading gem '#{dep.name}' ...")
-    return dep # ensure needs explicit return
-  end
-
-  # Loads both gem and library dependencies that are passed in as arguments.
-  # Execution is deferred to the Merb::BootLoader::Dependencies.run during bootup.
-  #
-  # ==== Parameters
-  # *args<String, Hash, Array> The dependencies to load.
-  #
-  # ==== Returns
-  # Array[(Gem::Dependency, Array[Gem::Dependency])]:: Gem::Dependencies for the
-  #   dependencies specified in args.
-  #
-  # @api public
-  def dependencies(*args)
-    args.map do |arg|
-      case arg
-      when String then dependency(arg)
-      when Hash   then arg.map { |r,v| dependency(r, v) }
-      when Array  then arg.map { |r|   dependency(r)    }
-      end
-    end
-  end
-
-  # Loads both gem and library dependencies that are passed in as arguments.
-  #
-  # @param *args<String, Hash, Array> The dependencies to load.
-  #
-  # @note
-  #   Each argument can be:
-  #   String:: Single dependency.
-  #   Hash::
-  #     Multiple dependencies where the keys are names and the values versions.
-  #   Array:: Multiple string dependencies.
-  #
-  # @example dependencies "RedCloth"                 # Loads the the RedCloth gem
-  # @example dependencies "RedCloth", "merb_helpers" # Loads RedCloth and merb_helpers
-  # @example dependencies "RedCloth" => "3.0"        # Loads RedCloth 3.0
-  #
-  # @api private
-  def load_dependencies(*args)
-    args.map do |arg|
-      case arg
-      when String then load_dependency(arg)
-      when Hash   then arg.map { |r,v| load_dependency(r, v) }
-      when Array  then arg.map { |r|   load_dependency(r)    }
-      end
-    end
-  end
-
-  # Does a basic require, and prints a message if an error occurs.
-  #
-  # @param library<to_s> The library to attempt to include.
-  # @param message<String> The error to add to the log upon failure. Defaults to nil.
-  #
-  # @api private
-  # @deprecated
-  def rescue_require(library, message = nil)
-    Merb.logger.warn("Deprecation warning: rescue_require is deprecated")
-    sleep 2.0
-    require library
-  rescue LoadError, RuntimeError
-    Merb.logger.error!(message) if message
-  end
-
-  # Used in Merb.root/config/init.rb to tell Merb which ORM (Object Relational
-  # Mapper) you wish to use. Currently Merb has plugins to support
-  # ActiveRecord, DataMapper, and Sequel.
-  #
-  # ==== Parameters
-  # orm<Symbol>:: The ORM to use.
-  #
-  # ==== Returns
-  # nil
-  #
-  # ==== Example
-  #   use_orm :datamapper
-  #
-  #   # This will use the DataMapper generator for your ORM
-  #   $ merb-gen model ActivityEvent
-  #
-  # ==== Notes
-  #   If for some reason this is called more than once, latter
-  #   call takes over other.
-  #
-  # @api public
-  def use_orm(orm, &blk)
-    begin
-      Merb.orm = orm
-      orm_plugin = "merb_#{orm}"
-      Kernel.dependency(orm_plugin, &blk)
-    rescue LoadError => e
-      Merb.logger.warn!("The #{orm_plugin} gem was not found.  You may need to install it.")
-      raise e
-    end
-    nil
-  end
-
-  # Used in Merb.root/config/init.rb to tell Merb which testing framework to
-  # use. Currently Merb has plugins to support RSpec and Test::Unit.
-  #
-  # ==== Parameters
-  # test_framework<Symbol>::
-  #   The test framework to use. Currently only supports :rspec and :test_unit.
-  #
-  # ==== Returns
-  # nil
-  #
-  # ==== Example
-  #   use_test :rspec
-  #
-  #   # This will now use the RSpec generator for tests
-  #   $ merb-gen model ActivityEvent
-  #
-  # @api public
-  def use_testing_framework(test_framework, *test_dependencies)
-    Merb.test_framework = test_framework
-    
-    Kernel.dependencies test_dependencies if Merb.env == "test" || Merb.env.nil?
-    nil
-  end
-
-  def use_test(*args)
-    use_testing_framework(*args)
-  end
-  
-  # Used in Merb.root/config/init.rb to tell Merb which template engine to
-  # prefer.
-  #
-  # ==== Parameters
-  # template_engine<Symbol>
-  #   The template engine to use.
-  #
-  # ==== Returns
-  # nil
-  #
-  # ==== Example
-  #   use_template_engine :haml
-  #
-  #   # This will now use haml templates in generators where available.
-  #   $ merb-gen resource_controller Project 
-  #
-  # @api public
-  def use_template_engine(template_engine, &blk)
-    Merb.template_engine = template_engine
-
-    if template_engine != :erb
-      if template_engine.in?(:haml, :builder)
-        template_engine_plugin = "merb-#{template_engine}"
-      else
-        template_engine_plugin = "merb_#{template_engine}"
-      end
-      Kernel.dependency(template_engine_plugin, &blk)
-    end
-    
-    nil
-  rescue LoadError => e
-    Merb.logger.warn!("The #{template_engine_plugin} gem was not found.  You may need to install it.")
-    raise e
-  end
-
-
-  # @param i<Fixnum> The caller number. Defaults to 1.
-  #
-  # @return <Array[Array]> The file, line and method of the caller.
-  #
-  # @example
-  #   __caller_info__(1)
-  #     # => ['/usr/lib/ruby/1.8/irb/workspace.rb', '52', 'irb_binding']
-  #
-  # @api private
-  def __caller_info__(i = 1)
-    file, line, meth = caller[i].scan(/(.*?):(\d+):in `(.*?)'/).first
-  end
-
-  # @param file<String> The file to read.
-  # @param line<Fixnum> The line number to look for.
-  # @param size<Fixnum>
-  #   Number of lines to include above and below the the line to look for.
-  #   Defaults to 4.
-  #
-  # @return <Array[Array]>
-  #   Triplets containing the line number, the line and whether this was the
-  #   searched line.
-  #
-  # @example
-  #   __caller_lines__('/usr/lib/ruby/1.8/debug.rb', 122, 2) # =>
-  #     [
-  #       [ 120, "  def check_suspend",                               false ],
-  #       [ 121, "    return if Thread.critical",                     false ],
-  #       [ 122, "    while (Thread.critical = true; @suspend_next)", true  ],
-  #       [ 123, "      DEBUGGER__.waiting.push Thread.current",      false ],
-  #       [ 124, "      @suspend_next = false",                       false ]
-  #     ]
-  #
-  # @api private
-  def __caller_lines__(file, line, size = 4)
-    line = line.to_i
-    if file =~ /\(erubis\)/
-      yield :error, "Template Error! Problem while rendering", false
-    elsif !File.file?(file) || !File.readable?(file)
-      yield :error, "File `#{file}' not available", false
-    else
-      lines = File.read(file).split("\n")
-      first_line = (f = line - size - 1) < 0 ? 0 : f
-      
-      if first_line.zero?
-        new_size = line - 1
-        lines = lines[first_line, size + new_size + 1]
-      else
-        new_size = nil
-        lines = lines[first_line, size * 2 + 1]
-      end
-
-      lines && lines.each_with_index do |str, index|
-        line_n = index + line
-        line_n = (new_size.nil?) ? line_n - size : line_n - new_size
-        yield line_n, str.chomp
-      end
-    end
-  end
-
-  # Takes a block, profiles the results of running the block
-  # specified number of times and generates HTML report.
-  #
-  # @param name<#to_s>
-  #   The file name. The result will be written out to
-  #   Merb.root/"log/#{name}.html".
-  # @param min<Fixnum>
-  #   Minimum percentage of the total time a method must take for it to be
-  #   included in the result. Defaults to 1.
-  #
-  # @return <String>
-  #   The result of the profiling.
-  #
-  # @note
-  #   Requires ruby-prof (<tt>sudo gem install ruby-prof</tt>)
-  #
-  # @example
-  #   __profile__("MyProfile", 5, 30) do
-  #     rand(10)**rand(10)
-  #     puts "Profile run"
-  #   end
-  #
-  #   Assuming that the total time taken for #puts calls was less than 5% of the
-  #   total time to run, #puts won't appear in the profile report.
-  #   The code block will be run 30 times in the example above.
-  #
-  # @api private
-  def __profile__(name, min=1, iter=100)
-    require 'ruby-prof' unless defined?(RubyProf)
-    return_result = ''
-    result = RubyProf.profile do
-      iter.times{return_result = yield}
-    end
-    printer = RubyProf::GraphHtmlPrinter.new(result)
-    path = File.join(Merb.root, 'log', "#{name}.html")
-    File.open(path, 'w') do |file|
-      printer.print(file, {:min_percent => min,
-                      :print_file => true})
-    end
-    return_result
-  end
-
-  # Extracts an options hash if it is the last item in the args array. Used
-  # internally in methods that take *args.
-  #
-  # @param args<Array> The arguments to extract the hash from.
-  #
-  # @example
-  #   def render(*args,&blk)
-  #     opts = extract_options_from_args!(args) || {}
-  #     # [...]
-  #   end
-  #
-  # @api public
-  def extract_options_from_args!(args)
-    args.pop if Hash === args.last
-  end
-
-  # Checks that the given objects quack like the given conditions.
-  #
-  # @param opts<Hash>
-  #   Conditions to enforce. Each key will receive a quacks_like? call with the
-  #   value (see Object#quacks_like? for details).
-  #
-  # @raise <ArgumentError>
-  #   An object failed to quack like a condition.
-  #
-  # @api public
-  def enforce!(opts = {})
-    opts.each do |k,v|
-      raise ArgumentError, "#{k.inspect} doesn't quack like #{v.inspect}" unless k.quacks_like?(v)
-    end
-  end
-
-  unless Kernel.respond_to?(:debugger)
-
-    # Define debugger method so that code even works if debugger was not
-    # requested. Drops a note to the logs that Debugger was not available.
-    def debugger
-      Merb.logger.info! "\n***** Debugger requested, but was not " +
-        "available: Start server with --debugger " +
-        "to enable *****\n"
-    end
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/cookies.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/cookies.rb
deleted file mode 100644
index 17d784c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/cookies.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-module Merb
-
-  class Cookies < Mash
-  
-    def initialize(constructor = {})
-      @_options_lookup  = Mash.new
-      @_cookie_defaults = { "domain" => Merb::Controller._default_cookie_domain, "path" => '/' }
-      super constructor
-    end
-    
-    # Implicit assignment of cookie key and value.
-    #
-    # ==== Parameters
-    # name<~to_s>:: Name of the cookie.
-    # value<~to_s>:: Value of the cookie.
-    #
-    # ==== Notes
-    # By using this method, a cookie key is marked for being
-    # included in the Set-Cookie response header.
-    def []=(key, value)
-      @_options_lookup[key] ||= {}
-      super
-    end
-    
-    # Explicit assignment of cookie key, value and options
-    #
-    # ==== Parameters
-    # name<~to_s>:: Name of the cookie.
-    # value<~to_s>:: Value of the cookie.
-    # options<Hash>:: Additional options for the cookie (see below).
-    #
-    # ==== Options (options)
-    # :path<String>:: The path for which this cookie applies. Defaults to "/".
-    # :expires<Time>:: Cookie expiry date.
-    # :domain<String>:: The domain for which this cookie applies.
-    # :secure<Boolean>:: Security flag.
-    #
-    # ==== Notes
-    # By using this method, a cookie key is marked for being
-    # included in the Set-Cookie response header.
-    def set_cookie(name, value, options = {})
-      @_options_lookup[name] = options
-      self[name] = value
-    end
-    
-    # Removes the cookie on the client machine by setting the value to an empty
-    # string and setting its expiration date into the past.
-    #
-    # ==== Parameters
-    # name<~to_s>:: Name of the cookie to delete.
-    # options<Hash>:: Additional options to pass to +set_cookie+.
-    def delete(name, options = {})
-      set_cookie(name, "", options.merge("expires" => Time.at(0)))
-    end
-    
-    # Generate any necessary headers.
-    #
-    # ==== Returns
-    # Hash:: The headers to set, or an empty array if no cookies are set.
-    def extract_headers(controller_defaults = {})
-      defaults = @_cookie_defaults.merge(controller_defaults)
-      cookies = []
-      self.each do |name, value|
-        # Only set cookies that marked for inclusion in the response header. 
-        next unless @_options_lookup[name]
-        options = defaults.merge(@_options_lookup[name])
-        if (expiry = options["expires"]).respond_to?(:gmtime)
-          options["expires"] = expiry.gmtime.strftime(Merb::Const::COOKIE_EXPIRATION_FORMAT)
-        end
-        secure  = options.delete("secure")
-        kookie  = "#{name}=#{Merb::Parse.escape(value)}; "
-        # WebKit in particular doens't like empty cookie options - skip them.
-        options.each { |k, v| kookie << "#{k}=#{v}; " unless v.blank? }
-        kookie  << 'secure' if secure
-        cookies << kookie.rstrip
-      end
-      cookies.empty? ? {} : { 'Set-Cookie' => cookies }
-    end
-    
-  end
-  
-  module CookiesMixin
-    
-    def self.included(base)
-      # Allow per-controller default cookie domains (see callback below)
-      base.class_inheritable_accessor :_default_cookie_domain
-      base._default_cookie_domain = Merb::Config[:default_cookie_domain]
-      
-      # Add a callback to enable Set-Cookie headers
-      base._after_dispatch_callbacks << lambda do |c|
-        headers = c.request.cookies.extract_headers("domain" => c._default_cookie_domain)
-        c.headers.update(headers)
-      end
-    end
-    
-    # ==== Returns
-    # Merb::Cookies::
-    #   A new Merb::Cookies instance representing the cookies that came in
-    #   from the request object
-    #
-    # ==== Notes
-    # Headers are passed into the cookie object so that you can do:
-    #   cookies[:foo] = "bar"
-    def cookies
-      request.cookies
-    end
-    
-    module RequestMixin
-            
-      # ==== Returns
-      # Hash:: The cookies for this request.
-      #
-      # ==== Notes
-      # If a method #default_cookies is defined it will be called. This can
-      # be used for session fixation purposes for example. The method returns
-      # a Hash of key => value pairs.
-      def cookies
-        @cookies ||= begin
-          values  = Merb::Parse.query(@env[Merb::Const::HTTP_COOKIE], ';,')
-          cookies = Merb::Cookies.new(values)
-          cookies.update(default_cookies) if respond_to?(:default_cookies)
-          cookies
-        end
-      end
-      
-    end   
-    
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/default_exception.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/default_exception.rb
deleted file mode 100644
index 72257b2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/default_exception.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-module Merb
-  class Dispatcher
-    module DefaultExceptionHelper
-      def humanize_exception(e)
-        e.class.name.split("::").last.gsub(/([a-z])([A-Z])/, '\1 \2')
-      end
-
-      def error_codes(exception)
-        if @show_details
-          message, message_details = exception.message.split("\n", 2)
-          "<h2>#{escape_html(message)}</h2><p>#{escape_html(message_details)}</p>"
-        else
-          "<h2>Sorry about that...</h2>"
-        end
-      end
-
-      def frame_details(line)
-        filename, lineno, location = line.split(":")
-        if filename.index(Merb.framework_root)
-          type = "framework"
-          shortname = Pathname.new(filename).relative_path_from(Pathname.new(Merb.framework_root))
-        elsif filename.index(Merb.root)
-          type = "app"
-          shortname = Pathname.new(filename).relative_path_from(Pathname.new(Merb.root))
-        elsif path = Gem.path.find {|p| filename.index(p)}
-          type = "gem"
-          shortname = Pathname.new(filename).relative_path_from(Pathname.new(path))
-        else
-          type = "other"
-          shortname = filename
-        end
-        [type, shortname, filename, lineno, location]
-      end
-
-      def listing(key, value, arr)
-        ret   =  []
-        ret   << "<table class=\"listing\" style=\"display: none\">"
-        ret   << "  <thead>"
-        ret   << "    <tr><th width='25%'>#{key}</th><th width='75%'>#{value}</th></tr>"
-        ret   << "  </thead>"
-        ret   << "  <tbody>"
-        (arr || []).each_with_index do |(key, val), i|
-          klass = i % 2 == 0 ? "even" : "odd"
-          ret << "    <tr class=\"#{klass}\"><td>#{key}</td><td>#{val.inspect}</td></tr>"
-        end
-        if arr.blank?
-          ret << "    <tr class='odd'><td colspan='2'>None</td></tr>"
-        end
-        ret   << "  </tbody>"
-        ret   << "</table>"
-        ret.join("\n")
-      end
-      
-      def textmate_url(filename, line)
-        "<a href='txmt://open?url=file://#{filename}&line=#{line}'>#{line}</a>"
-      end
-      
-      def render_source(filename, line)
-        line = line.to_i
-        ret   =  []
-        ret   << "<tr class='source'>"
-        ret   << "  <td class='collapse'></td>"
-        str   =  "  <td class='code' colspan='2'><div>"
-        
-        __caller_lines__(filename, line, 5) do |lline, lcode|
-          str << "<a href='txmt://open?url=file://#{filename}&line=#{lline}'>#{lline}</a>"
-          str << "<em>" if line == lline
-          str << Erubis::XmlHelper.escape_xml(lcode)
-          str << "</em>" if line == lline
-          str << "\n"
-        end
-        str   << "</div></td>"
-        ret   << str
-        ret   << "</tr>"
-        ret.join("\n")
-      end
-    end
-    
-    class DefaultException < Merb::Controller
-      self._template_root = File.dirname(__FILE__) / "views"
-      
-      def _template_location(context, type = nil, controller = controller_name)
-        "#{context}.#{type}"
-      end    
-      
-      def index
-        @exceptions = request.exceptions
-        @show_details = Merb::Config[:exception_details]
-        render :format => :html
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/_css.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/_css.html.erb
deleted file mode 100644
index 00b3a08..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/_css.html.erb
+++ /dev/null
@@ -1,200 +0,0 @@
-<% if Merb.env != "test" %>
-<style type="text/css" media="screen">
-  body {
-    font-family:arial;
-    font-size:11px;
-  }
-  p.options {
-    text-align: right;
-  }
-    p.options label {
-      margin-left: 10px;
-    }
-    p.options span.all {
-      padding: 5px;
-      border: 1px solid #000;
-      background-color: #fff;
-    }
-    p.options input {
-      position: relative;
-    }
-  h1 {
-    font-size:48px;
-    letter-spacing:-4px;
-    margin:0 0 20px 0;
-    line-height:36px;
-    color:#333;
-  }
-    h1 sup {
-      font-size: 0.5em;
-    }
-    h1 sup.error_500, h1 sup.error_400 {
-      color:#990E05;
-    }
-    h1 sup.error_100, h1 sup.error_200 {
-      color:#00BF10;
-    }
-    h1 sup.error_300 {
-      /* pretty sure you cant 'see' status 300 
-      errors but if you could I think they 
-      would be blue */
-      color:#1B2099;
-    }
-  h2 {
-    font-size:24px;
-    letter-spacing:-1px;
-    margin:0;
-    line-height:28px;
-    color:#444;
-  }
-  h3 {
-    cursor: pointer;
-    color: #006;
-    text-decoration: underline;
-  }
-  a, a:visited {
-    color:#00BF10;
-  }
-  .internalError {
-    width:800px;
-    margin:50px auto;
-  }
-  .header {
-    border-bottom:10px solid #333;
-    margin-bottom:1px;
-    background-image: url("data:image/gif;base64,R0lGODlhAwADAIAAAP///8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7");
-    padding:20px;
-  }
-    .header ul {
-      padding: 5px;
-      background-color: white;
-    }
-      .header ul li {
-        list-style-type: none;
-        font-size: 16px;
-        margin-bottom: 6px;
-      }
-  
-  table.listing {
-    border-collapse: collapse;
-    font-size: 12px;
-    width: 100%;
-  }
-  
-  table.listing th {
-    background-color: #000;
-    color: #fff;
-  }
-  
-  table.listing td, table.listing th {
-    padding: 5px;
-    text-align: left;
-    vertical-align: top;
-  }
-  
-  table.listing tr.odd {
-    background-color: #ccc;
-  }
-  
-  table.listing tr.even {
-    background-color: #aaa;
-  }
-  
-  table.listing td[colspan=2] {
-    text-align: center;
-  }
-  
-  table.trace {
-    width:100%;
-    font-family:courier, monospace;
-    letter-spacing:-1px;
-    border-collapse: collapse;
-    border-spacing:0;
-  }
-  table.trace tr td{
-    padding:0;
-    height:26px;
-    font-size:13px;
-    vertical-align:middle;
-  }
-  table.trace tr.file{
-    border-top:2px solid #fff;
-    background-color:#F3F3F3;
-  }
-  table.trace tr.source {
-    background-color:#F8F8F8;
-    display:none;
-  }
-  table.trace .open tr.source {
-    display:table-row;
-  }
-    table.trace tr.file td.expand {
-      width:23px;
-      background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAIAAABvSEP3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqMVL+TwUAYxaRIOlEhlZHGDAUzzOQ61+AqXMV1lJSU7q/QRqm8KFUcJTNn5qJkaPyoKKVz7y4mF8na5Kt29tt9+/Z97/u81+vVQ4r9frdarS6Xi7ETDIZisRjxMGPfmk4niNPpZE+xLAugbPaZ53nzvtfMBe/3+/3dbuehBrAKhZdUKkVAWa9Xsiybv0CPZDJZLr/qa5/BwgwRjYqOKIvFYjQa/aNommZh0Ww2K5UqzwfoQOPxaLPZ3FAmk0+7lplMpt1u53J5OpBOR0eZEE9wHJfP5zud93g88QhluwWbjW+5VOmKBgKBer3eaDTDYeGBQF8+x7rqIYoiPgixWJazpA6HA+MSxRArkUgMh0M409g8Ho8+9wYxxCqVSq1W26EDHGM2m4HOHQrEc38f/Yn7cLmlIRhBENzcx8cVRZnPZ/YUep2BWkjTIfA+PKVpZAXR5QxsjiqCKvGEqqp443w+0dvy17swqD0HB3S73V5PpkNg1qBqt8kwGCjmPkinM0QJbIoEa7U6UG6ToVgs4V9G2g0ESoP5Aoi7KYX5oCgf8IKbkvn9/mr1LRQKESamzgJy0g0tSZIuB3nuGqRU9Vv9C4sKkUhEkp4soxvxI8AAhWrrtXa3X8EAAAAASUVORK5CYII=);
-      background-position:top left;
-      background-repeat:no-repeat;
-    }
-    table.trace tr.file td.expand div {
-      width:23px;
-    }
-    table.trace .open tr.file td.expand {
-      width:23px;
-      background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXZJREFUeNrslK1ywkAUhcMOBomEOiSdqLxEBJX0NaijOsjyHGGmCGyQQYaiiiw4gktkcOmZbpsuuzQ/M5XnqJ2d3S/n3nM3rTzPLUP7/Tt0+pLcGQwG3W53OLyHzPMtjYL7q9UqSRLrD4E1Gj1orCvKYuFHUWTVkOM44/HjDcp8/lL4r6NerzeZPMm1KFw0QkDn83m5fP2lHA4fNQvRtNvtjsfDd0WzmSfb2e/fdTqdOvdh/HLJZLOn0+d2HJ+KRGzbdl23EpFlmed5cp2maRzHQq1lvQ5KMi6EUZBGfup6E1pTfd+vrGW7jbQ2C9hTt9BpqNyIWaAwAy6xg2eBz5iRC/NomiZhGN5sqmnkauo0BUGgVQoBjQ80oCACgNQdZHfTYBkF2mxCtWWAqunWpahxIDUt3QYUxIFQpJHyIWpXjinabKbbwItMHT+NyjchrP8QKaSQQgoppJBCCimkkEIKKaSQQgoppJBCCimkkEIKKaSo+hRgAEFD17X08O2NAAAAAElFTkSuQmCC);
-      background-position:top left;
-      background-repeat:no-repeat;        
-    }
-    table.trace .open tr.file td.expand div {
-      width:23px;
-    }
-    table.trace tr.source td.collapse {
-      width:23px;
-      background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVxJREFUeNrs0zFygkAUBmBlUkgJHdABlQwVkVJKKUxBYWbkALTxMJwhltyDFkss03IF8pudIcwaDaDl/6pd2P327b7d+eHwMXs4lNkzggoVKlSoUKFChQoVKlSoUKFChQoVKlSoUKFChQqVEYqm6ft9+qiSJEkYho7jTlcw2fd9NOI4nq4gEdFwXXe1Cqco63VkWVbXRTqLhTpOwQRpF7quR1E0TgGhqvLKUFCyoQqG/rks3O6kZKW/eRFpevOCoGTXVTcMQ5EyxyDEkML1c5RzuZOICIyXqn7JBVez6282MWrx731HOv2qB8Hri2lamNk0DfpVVdV1Peodappmmua8bdvzuc7zfNprzrLMth1FnGh/X8MjCAIQv/cFz/+65PcDh7rbvYv2ZUfdj+PxsyzLgVl0hKwgTqeqKApx2LeOc7t98zyv/1FWOgvx9RPii23bmL9cetJ8Ed8CDAC6aFW8bCzFhwAAAABJRU5ErkJggg==);
-      background-position:bottom left;
-      background-repeat:no-repeat;  
-      background-color:#6F706F;     
-    }
-    table.trace tr td.path {
-      padding-left:10px;
-    }
-    table.trace tbody.app td.path {
-      color: #900;
-    }
-    table.trace tbody.framework td.path {
-      color: #009;
-    }
-    table.trace tbody.gem td.path {
-      color: #090;
-    }
-    table.trace tr td.code {
-      padding: 10px 0 10px 20px;
-      white-space: pre;
-    }
-      table.trace tr td.code div {
-        width: 700px;
-        overflow-x: auto;
-        overflow-y: hidden;
-      }
-      table.trace tr td.code em {
-        font-weight:bold;
-        color:#00BF10;
-      }
-      table.trace tr td.code a {
-        width: 20px;
-        float: left;
-      }
-      table.trace tr td.code .more {
-        color:#666;
-      }
-    table.trace tr td.line {
-      width:30px;
-      text-align:right;
-      padding-right:4px;
-    }
-  .footer {
-    margin-top:5px;
-    font-size:11px;
-    color:#444;
-    text-align:right;
-  }
-</style>
-<% end %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/_javascript.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/_javascript.html.erb
deleted file mode 100644
index 2d761cf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/_javascript.html.erb
+++ /dev/null
@@ -1,77 +0,0 @@
-<% if Merb.env != "test" %>
-<script type="text/javascript">
-  //<![CDATA[
-    (function() {
-      els = document.getElementsByTagName('td');
-      var forEach = function(arr, fn) {
-        for(var i=0; i<arr.length; i++) {
-          var res = fn(arr[i]);
-          if(res === false) break;
-        }
-      }
-      var toggleClasses = function(node, first, second) {
-        var classes = node.className.split(" ");
-        var newClasses = [];
-        forEach(classes, function(k) {
-          if(k == first) newClasses.push(second);
-          else if(k == second) newClasses.push(first);
-          else newClasses.push(k);
-        });
-        node.className = newClasses.join(" ");
-      }
-      forEach(els, function(el) {
-        // swap the open & closed classes       
-        if(hasClass(el, "expand") || hasClass(el, "collapse")) {
-          el.onclick = function(e){
-            tbody = this.parentNode.parentNode;
-            toggleClasses(tbody, "open", "close");
-          }
-        }        
-      })
-      forEach(document.getElementsByTagName("h3"), function(el) {
-        el.onclick = function(e) {
-          var tag = this.nextSibling;
-          while(tag.nodeType != 1) tag = tag.nextSibling;
-          tag.style.display = tag.style.display == "none" ? "" : "none";
-        }        
-      })
-      function hasClass(node, matchClass) {
-        var classes = node.className.split(" ");
-        for(var i=0,className;className=classes[i];i++)
-          if(className == matchClass) return true;
-        return false;
-      }
-      var els = document.getElementsByTagName("p");
-      forEach(els, function(tag) {
-        if(tag.className != "options") return true;
-        var checkboxes = tag.getElementsByTagName("input");
-        forEach(checkboxes, function(box) {
-          if(window.navigator.userAgent.match(/Firefox/)) {
-            box.style.top = "3px";
-          }
-        });
-        tag.getElementsByTagName("input")[0].onclick = function(e) {
-          forEach(checkboxes, function(box) {
-            if(box == e.target) return true;
-            box.checked = e.target.checked;
-            toggleTraces(box, box);
-          })
-        };
-        var toggleTraces = function(box, target) {
-          var tbodies = tag.parentNode.getElementsByTagName("tbody");
-          forEach(tbodies, function(tbody) {
-            if(hasClass(tbody, target.parentNode.className)) {
-              if(target.checked) tbody.style.display = "";
-              else tbody.style.display = "none";
-            }
-          })
-        }
-        forEach(checkboxes, function(box) {
-          if(box == checkboxes[0]) return true;
-          box.onchange = function(e) { toggleTraces(box, e.target) }
-        })
-      })
-    })();
-  //]]>
-</script>
-<% end %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/index.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/index.html.erb
deleted file mode 100644
index 4ee431b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/default_exception/views/index.html.erb
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
-<head>
-  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
-  <title><%= humanize_exception(@exceptions.first) %></title>
-  <%= partial :css %>
-</head>
-<body>
-  <% if @show_details %>
-  <% if @exceptions.size > 1 %>
-  <div class="internalError">
-    <div class="header">
-      <h1>Error Stack</h1>
-      <ul>
-        <% @exceptions.each_with_index do |exception,i| %>
-          <li>
-            <a href="#exception_<%= i %>"><%= humanize_exception(exception) %></a>
-            <%= escape_html(exception.message.split("\n",2).first) %>
-          </li>
-        <% end %>
-      </ul>
-    </div>
-  </div>
-  <% end %>
-  
-  <div class="internalError">
-    <div class="header">
-      <h1>Request Details</h1>
-      <h3>Parameters</h3>
-      <%= listing("Parameter", "Value", request.params) %>
-
-      <% if request.session? %>
-      <h3>Session</h3>
-      <%= listing("Key", "Value", request.session) %>
-      <% end %>
-
-      <h3>Cookies</h3>
-      <%= listing("Cookie", "Value", request.cookies) %>
-
-      <h3>Named Routes</h3>
-      <%= listing("Name", "Route", Merb::Router.named_routes) %>
-    </div>      
-  </div>
-  <% end %>
-
-  <% @exceptions.each_with_index do |exception,i| %>
-  <div class="internalError" id="exception_<%= i %>">
-    <div class="header">
-      <h1>
-        <%= humanize_exception(exception) %> 
-        <sup class="error_<%= exception.class.status %>"><%= exception.class.status %></sup>
-      </h1>
-      <%= error_codes(exception) %>
-      <p class="options">
-        <label class="all">All<input type="checkbox" autocomplete="off" /></label>
-        <span class="all">
-          <label class="app">App<input type="checkbox" checked="checked" autocomplete="off"/></label>
-          <label class="framework">Framework<input type="checkbox" autocomplete="off"/></label>
-          <label class="gem">Gem<input type="checkbox" autocomplete="off"/></label>
-          <label class="other">Other<input type="checkbox" autocomplete="off"/></label>
-        </span>
-      </p>
-
-    <% if @show_details %>
-    <table class="trace">
-      <% exception.backtrace.each_with_index do |line, index| %>
-        <% type, shortname, filename, lineno, location = frame_details(line) %>
-        <tbody class="close <%= type %>" <%= "style='display:none'" unless type == "app" %>>
-          <tr class="file">
-            <td class="expand"><div> </div></td>              
-            <td class="path">
-              <%= shortname %>
-              <% if filename && filename.match(/\.erb$/) %>
-                (<strong>ERB Template</strong>)
-              <% else %>
-                in <strong><%= location ? location.match(/in (`.+')$/)[1] : 'main' %></strong>
-              <% end %>
-            </td>
-            <td class="line">
-              <%= textmate_url(filename, lineno) %>
-            </td>
-          </tr>
-          <%= render_source(filename, lineno) %>
-        </tbody>
-      <% end %>
-    </table>
-  <% end %>
-  </div>
-  <div class="footer">
-    lots of love, from <a href="http://www.merbivore.com">merb</a>
-  </div>
-  </div>
-  <% end %>
-  <%= partial :javascript %>
-</body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/dispatcher.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/dispatcher.rb
deleted file mode 100644
index 46dec12..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/dispatcher.rb
+++ /dev/null
@@ -1,156 +0,0 @@
-require Merb.framework_root / "merb-core" / "dispatch" / "default_exception" / "default_exception"
-
-module Merb
-  class Dispatcher
-    class << self
-      include Merb::ControllerExceptions
-      
-      attr_accessor :use_mutex
-      
-      @@work_queue = Queue.new
-      
-      # ==== Returns
-      # Queue:: the current queue of dispatch jobs.
-      # 
-      # @api private
-      def work_queue
-        @@work_queue
-      end  
-      
-      Merb::Dispatcher.use_mutex = ::Merb::Config[:use_mutex]
-      
-      # Dispatch the rack environment. ControllerExceptions are rescued here
-      # and redispatched.
-      #
-      # ==== Parameters
-      # rack_env<Rack::Environment>::
-      #   The rack environment, which is used to instantiate a Merb::Request
-      #
-      # ==== Returns
-      # Merb::Controller::
-      #   The Merb::Controller that was dispatched to
-      # 
-      # @api private
-      def handle(request)
-        request.handle
-      end
-    end
-  end
-  
-  class Request
-    include Merb::ControllerExceptions
-    
-    @@mutex = Mutex.new
-    
-    # Handles request routing and action dispatch.
-    # 
-    # ==== Returns
-    # Merb::Controller:: the controller that handled the action dispatch.
-    # 
-    # @api private
-    def handle
-      start = Time.now
-      Merb.logger.info "Started request handling: #{start.to_s}"
-      
-      find_route!
-      return rack_response if handled?
-      
-      klass = controller
-      Merb.logger.debug("Routed to: #{params.inspect}")
-      
-      unless klass < Controller
-        raise NotFound, 
-          "Controller '#{klass}' not found.\n" \
-          "If Merb tries to find a controller for static files, " \
-          "you may need to check your Rackup file, see the Problems " \
-          "section at: http://wiki.merbivore.com/pages/rack-middleware"
-      end
-      
-      if klass.abstract?
-        raise NotFound, "The '#{klass}' controller has no public actions"
-      end
-      
-      controller = dispatch_action(klass, params[:action])
-      controller._benchmarks[:dispatch_time] = Time.now - start
-      Merb.logger.info controller._benchmarks.inspect
-      Merb.logger.flush
-      controller.rack_response
-    rescue Object => exception
-      dispatch_exception(exception).rack_response
-    end
-    
-    private
-    # Setup the controller and call the chosen action 
-    #
-    # ==== Parameters
-    # klass<Merb::Controller>:: The controller class to dispatch to.
-    # action<Symbol>:: The action to dispatch.
-    # status<Integer>:: The status code to respond with.
-    #
-    # ==== Returns
-    # Merb::Controller::
-    #   The Merb::Controller that was dispatched to.
-    # 
-    # @api private
-    def dispatch_action(klass, action, status=200)
-      # build controller
-      controller = klass.new(self, status)
-      if Dispatcher.use_mutex
-        @@mutex.synchronize { controller._dispatch(action) }
-      else
-        controller._dispatch(action)
-      end
-      controller
-    end
-    
-    # Re-route the current request to the Exception controller if it is
-    # available, and try to render the exception nicely.  
-    #
-    # You can handle exceptions by implementing actions for specific
-    # exceptions such as not_found or for entire classes of exceptions
-    # such as client_error. You can also implement handlers for 
-    # exceptions outside the Merb exception hierarchy (e.g.
-    # StandardError is caught in standard_error).
-    #
-    # ==== Parameters
-    # exception<Object>::
-    #   The exception object that was created when trying to dispatch the
-    #   original controller.
-    #
-    # ==== Returns
-    # Exceptions::
-    #   The Merb::Controller that was dispatched to. 
-    # 
-    # @api private
-    def dispatch_exception(exception)
-      if(exception.is_a?(Merb::ControllerExceptions::Base) &&
-         !exception.is_a?(Merb::ControllerExceptions::ServerError))
-        Merb.logger.info(Merb.exception(exception))
-      else
-        Merb.logger.error(Merb.exception(exception))
-      end
-      
-      self.exceptions = [exception]
-      
-      begin
-        e = exceptions.first
-        
-        if action_name = e.action_name
-          dispatch_action(Exceptions, action_name, e.class.status)
-        else
-          Merb::Dispatcher::DefaultException.new(self, e.class.status)._dispatch
-        end
-      rescue Object => dispatch_issue
-        if e.same?(dispatch_issue) || exceptions.size > 5
-          Merb::Dispatcher::DefaultException.new(self, e.class.status)._dispatch
-        else
-          Merb.logger.error("Dispatching #{e.class} raised another error.")
-          Merb.logger.error(Merb.exception(dispatch_issue))
-          
-          exceptions.unshift dispatch_issue
-          retry
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/request.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/request.rb
deleted file mode 100644
index a3667ca..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/request.rb
+++ /dev/null
@@ -1,608 +0,0 @@
-require 'tempfile'
-
-module Merb
-
-  class Request
-    # def env def exceptions def route_params
-    attr_accessor :env, :exceptions, :route
-    attr_reader :route_params
-
-    # by setting these to false, auto-parsing is disabled; this way you can
-    # do your own parsing instead
-    cattr_accessor :parse_multipart_params, :parse_json_params,
-      :parse_xml_params
-    self.parse_multipart_params = true
-    self.parse_json_params = true
-    self.parse_xml_params = true
-
-    # Flash, and some older browsers can't use arbitrary
-    # request methods -- i.e., are limited to GET/POST.
-    # These user-agents can make POST requests in combination
-    # with these overrides to participate fully in REST.
-    # Common examples are _method or fb_sig_request_method
-    # in the params, or an X-HTTP-Method-Override header
-    cattr_accessor :http_method_overrides
-    self.http_method_overrides = []
-
-    # Initialize the request object.
-    #
-    # ==== Parameters
-    # http_request<~params:~[], ~body:IO>::
-    #   An object like an HTTP Request.
-    #
-    # @api private
-    def initialize(rack_env)
-      @env  = rack_env
-      @body = rack_env[Merb::Const::RACK_INPUT]
-      @route_params = {}
-    end
-
-    # Returns the controller object for initialization and dispatching the
-    # request.
-    #
-    # ==== Returns
-    # Class:: The controller class matching the routed request,
-    #   e.g. Posts.
-    #
-    # @api private
-    def controller
-      unless params[:controller]
-        raise ControllerExceptions::NotFound,
-          "Route matched, but route did not specify a controller.\n" +
-          "Did you forgot to add :controller => \"people\" or :controller " +
-          "segment to route definition?\nHere is what's specified:\n" +
-          route.inspect
-      end
-      path = [params[:namespace], params[:controller]].compact.join(Merb::Const::SLASH)
-      controller = path.snake_case.to_const_string
-
-      begin
-        Object.full_const_get(controller)
-      rescue NameError => e
-        msg = "Controller class not found for controller `#{path}'"
-        Merb.logger.warn!(msg)
-        raise ControllerExceptions::NotFound, msg
-      end
-    end
-
-    METHODS = %w{get post put delete head options}
-
-    # ==== Returns
-    # Symbol:: The name of the request method, e.g. :get.
-    #
-    # ==== Notes
-    # If the method is post, then the blocks specified in
-    # http_method_overrides will be checked for the masquerading method.
-    # The block will get the controller yielded to it.  The first matching workaround wins.
-    # To disable this behavior, set http_method_overrides = []
-    #
-    # @api public
-    def method
-      @method ||= begin
-        request_method = @env[Merb::Const::REQUEST_METHOD].downcase.to_sym
-        case request_method
-        when :get, :head, :put, :delete, :options
-          request_method
-        when :post
-          m = nil
-          self.class.http_method_overrides.each do |o|
-            m ||= o.call(self); break if m
-          end
-          m.downcase! if m
-          METHODS.include?(m) ? m.to_sym : :post
-        else
-          raise "Unknown REQUEST_METHOD: #{@env[Merb::Const::REQUEST_METHOD]}"
-        end
-      end
-    end
-
-    # create predicate methods for querying the REQUEST_METHOD
-    # get? post? head? put? etc
-    METHODS.each do |m|
-      class_eval "def #{m}?() method == :#{m} end"
-    end
-
-    # ==== Notes
-    # Find route using requested URI and merges route
-    # parameters (:action, :controller and named segments)
-    # into request params hash.
-    #
-    # @api private
-    def find_route!
-      @route, @route_params = Merb::Router.route_for(self)
-      params.merge! @route_params if @route_params.is_a?(Hash)
-    end
-
-    # ==== Notes
-    # Processes the return value of a deferred router block
-    # and returns the current route params for the current
-    # request evaluation
-    #
-    # @api private
-    def _process_block_return(retval)
-      # If the return value is an array, then it is a redirect
-      # so we must set the request as a redirect and extract
-      # the redirect params and return it as a hash so that the
-      # dispatcher can handle it
-      matched! if retval.is_a?(Array)
-      retval
-    end
-
-    # Sets the request as matched. This will abort evaluating any
-    # further deferred procs.
-    #
-    # @api private
-    def matched!
-      @matched = true
-    end
-
-    # Checks whether or not the request has been matched to a route.
-    #
-    # @api private
-    def matched?
-      @matched
-    end
-
-    # ==== Returns
-    # (Array, Hash):: the route params for the matched route.
-    #
-    # ==== Notes
-    # If the response is an Array then it is considered a direct Rack response
-    # to be sent back as a response. Otherwise, the route_params is a Hash with
-    # routing data (controller, action, et al).
-    #
-    # @api private
-    def rack_response
-      @route_params
-    end
-
-    # If @route_params is an Array, then it will be the rack response.
-    # In this case, the request is considered handled.
-    #
-    # ==== Returns
-    # Boolean:: true if @route_params is an Array, false otherwise.
-    #
-    # @api private
-    def handled?
-      @route_params.is_a?(Array)
-    end
-
-    # == Params
-    #
-    # Handles processing params from raw data and merging them together to get
-    # the final request params.
-
-    private
-
-    # ==== Returns
-    # Hash:: Parameters passed from the URL like ?blah=hello.
-    #
-    # @api private
-    def query_params
-      @query_params ||= Merb::Parse.query(query_string || '')
-    end
-
-    # Parameters passed in the body of the request. Ajax calls from
-    # prototype.js and other libraries pass content this way.
-    #
-    # ==== Returns
-    # Hash:: The parameters passed in the body.
-    #
-    # @api private
-    def body_params
-      @body_params ||= begin
-        if content_type && content_type.match(Merb::Const::FORM_URL_ENCODED_REGEXP) # or content_type.nil?
-          Merb::Parse.query(raw_post)
-        end
-      end
-    end
-
-    # ==== Returns
-    # Mash::
-    #   The parameters gathered from the query string and the request body,
-    #   with parameters in the body taking precedence.
-    #
-    # @api private
-    def body_and_query_params
-      # ^-- FIXME a better name for this method
-      @body_and_query_params ||= begin
-        h = query_params
-        h.merge!(body_params) if body_params
-        h.to_mash
-      end
-    end
-
-    # ==== Raises
-    # ControllerExceptions::MultiPartParseError::
-    #   Unable to parse the multipart form data.
-    #
-    # ==== Returns
-    # Hash:: The parsed multipart parameters.
-    #
-    # @api private
-    def multipart_params
-      @multipart_params ||=
-        begin
-          # if the content-type is multipart
-          # parse the multipart. Otherwise return {}
-          if (Merb::Const::MULTIPART_REGEXP =~ content_type)
-            Merb::Parse.multipart(@body, $1, content_length)
-          else
-            {}
-          end
-        rescue ControllerExceptions::MultiPartParseError => e
-          @multipart_params = {}
-          raise e
-        end
-    end
-
-    # ==== Returns
-    # Hash:: Parameters from body if this is a JSON request.
-    #
-    # ==== Notes
-    # If the JSON object parses as a Hash, it will be merged with the
-    # parameters hash.  If it parses to anything else (such as an Array, or
-    # if it inflates to an Object) it will be accessible via the inflated_object
-    # parameter.
-    #
-    # @api private
-    def json_params
-      @json_params ||= begin
-        if Merb::Const::JSON_MIME_TYPE_REGEXP.match(content_type)
-          begin
-            jobj = JSON.parse(raw_post)
-            jobj = jobj.to_mash if jobj.is_a?(Hash)
-          rescue JSON::ParserError
-            jobj = Mash.new
-          end
-          jobj.is_a?(Hash) ? jobj : { :inflated_object => jobj }
-        end
-      end
-    end
-
-    # ==== Returns
-    # Hash:: Parameters from body if this is an XML request.
-    #
-    # @api private
-    def xml_params
-      @xml_params ||= begin
-        if Merb::Const::XML_MIME_TYPE_REGEXP.match(content_type)
-          Hash.from_xml(raw_post) rescue Mash.new
-        end
-      end
-    end
-
-    public
-
-    # ==== Returns
-    # Mash:: All request parameters.
-    #
-    # ==== Notes
-    # The order of precedence for the params is XML, JSON, multipart, body and
-    # request string.
-    #
-    # @api public
-    def params
-      @params ||= begin
-        h = body_and_query_params.merge(route_params)
-        h.merge!(multipart_params) if self.class.parse_multipart_params && multipart_params
-        h.merge!(json_params) if self.class.parse_json_params && json_params
-        h.merge!(xml_params) if self.class.parse_xml_params && xml_params
-        h
-      end
-    end
-
-    # ==== Returns
-    # String:: Returns the redirect message Base64 unencoded.
-    #
-    # @api public
-    def message
-      return {} unless params[:_message]
-      begin
-        Marshal.load(Merb::Parse.unescape(params[:_message]).unpack("m").first)
-      rescue ArgumentError, TypeError
-        {}
-      end
-    end
-
-    # ==== Notes
-    # Resets the params to a nil value.
-    #
-    # @api private
-    def reset_params!
-      @params = nil
-    end
-
-    # ==== Returns
-    # String:: The raw post.
-    #
-    # @api private
-    def raw_post
-      @body.rewind if @body.respond_to?(:rewind)
-      @raw_post ||= @body.read
-    end
-
-    # ==== Returns
-    # Boolean:: If the request is an XML HTTP request.
-    #
-    # @api public
-    def xml_http_request?
-      not Merb::Const::XML_HTTP_REQUEST_REGEXP.match(@env[Merb::Const::HTTP_X_REQUESTED_WITH]).nil?
-    end
-    alias xhr? :xml_http_request?
-    alias ajax? :xml_http_request?
-
-    # ==== Returns
-    # String:: The remote IP address.
-    #
-    # @api public
-    def remote_ip
-      return @env[Merb::Const::HTTP_CLIENT_IP] if @env.include?(Merb::Const::HTTP_CLIENT_IP)
-
-      if @env.include?(Merb::Const::HTTP_X_FORWARDED_FOR) then
-        remote_ips = @env[Merb::Const::HTTP_X_FORWARDED_FOR].split(',').reject do |ip|
-          ip =~ Merb::Const::LOCAL_IP_REGEXP
-        end
-
-        return remote_ips.first.strip unless remote_ips.empty?
-      end
-
-      return @env[Merb::Const::REMOTE_ADDR]
-    end
-
-    # ==== Returns
-    # String::
-    #   The protocol, i.e. either "https" or "http" depending on the
-    #   HTTPS header.
-    #
-    # @api public
-    def protocol
-      ssl? ? Merb::Const::HTTPS : Merb::Const::HTTP
-    end
-
-    # ==== Returns
-    # Boolean::: True if the request is an SSL request.
-    #
-    # @api public
-    def ssl?
-      @env[Merb::Const::UPCASE_HTTPS] == 'on' || @env[Merb::Const::HTTP_X_FORWARDED_PROTO] == Merb::Const::HTTPS
-    end
-
-    # ==== Returns
-    # String:: The HTTP referer.
-    #
-    # @api public
-    def referer
-      @env[Merb::Const::HTTP_REFERER]
-    end
-
-    # ==== Returns
-    # String:: The full URI, including protocol and host
-    #
-    # @api public
-    def full_uri
-      protocol + "://" + host + uri
-    end
-
-    # ==== Returns
-    # String:: The request URI.
-    #
-    # @api public
-    def uri
-      @env[Merb::Const::REQUEST_PATH] || @env[Merb::Const::REQUEST_URI] || path_info
-    end
-
-    # ==== Returns
-    # String:: The HTTP user agent.
-    #
-    # @api public
-    def user_agent
-      @env[Merb::Const::HTTP_USER_AGENT]
-    end
-
-    # ==== Returns
-    # String:: The server name.
-    #
-    # @api public
-    def server_name
-      @env[Merb::Const::SERVER_NAME]
-    end
-
-    # ==== Returns
-    # String:: The accepted encodings.
-    #
-    # @api private
-    def accept_encoding
-      @env[Merb::Const::HTTP_ACCEPT_ENCODING]
-    end
-
-    # ==== Returns
-    # String:: The script name.
-    #
-    # @api public
-    def script_name
-      @env[Merb::Const::SCRIPT_NAME]
-    end
-
-    # ==== Returns
-    # String:: HTTP cache control.
-    #
-    # @api public
-    def cache_control
-      @env[Merb::Const::HTTP_CACHE_CONTROL]
-    end
-
-    # ==== Returns
-    # String:: The accepted language.
-    #
-    # @api public
-    def accept_language
-      @env[Merb::Const::HTTP_ACCEPT_LANGUAGE]
-    end
-
-    # ==== Returns
-    # String:: The server software.
-    #
-    # @api public
-    def server_software
-      @env[Merb::Const::SERVER_SOFTWARE]
-    end
-
-    # ==== Returns
-    # String:: Value of HTTP_KEEP_ALIVE.
-    #
-    # @api public
-    def keep_alive
-      @env[Merb::Const::HTTP_KEEP_ALIVE]
-    end
-
-    # ==== Returns
-    # String:: The accepted character sets.
-    #
-    # @api public
-    def accept_charset
-      @env[Merb::Const::HTTP_ACCEPT_CHARSET]
-    end
-
-    # ==== Returns
-    # String:: The HTTP version
-    #
-    # @api private
-    def version
-      @env[Merb::Const::HTTP_VERSION]
-    end
-
-    # ==== Returns
-    # String:: The gateway.
-    #
-    # @api public
-    def gateway
-      @env[Merb::Const::GATEWAY_INTERFACE]
-    end
-
-    # ==== Returns
-    # String:: The accepted response types. Defaults to "*/*".
-    #
-    # @api private
-    def accept
-      @env[Merb::Const::HTTP_ACCEPT].blank? ? "*/*" : @env[Merb::Const::HTTP_ACCEPT]
-    end
-
-    # ==== Returns
-    # String:: The HTTP connection.
-    #
-    # @api private
-    def connection
-      @env[Merb::Const::HTTP_CONNECTION]
-    end
-
-    # ==== Returns
-    # String:: The query string.
-    #
-    # @api private
-    def query_string
-      @env[Merb::Const::QUERY_STRING]
-    end
-
-    # ==== Returns
-    # String:: The request content type.
-    #
-    # @api private
-    def content_type
-      @env[Merb::Const::UPCASE_CONTENT_TYPE]
-    end
-
-    # ==== Returns
-    # Fixnum:: The request content length.
-    #
-    # @api public
-    def content_length
-      @content_length ||= @env[Merb::Const::CONTENT_LENGTH].to_i
-    end
-
-    # ==== Returns
-    # String::
-    #   The URI without the query string. Strips trailing "/" and reduces
-    #   duplicate "/" to a single "/".
-    #
-    # @api public
-    def path
-      # Merb::Const::SLASH is /
-      # Merb::Const::QUESTION_MARK is ?
-      path = (uri.empty? ? Merb::Const::SLASH : uri.split(Merb::Const::QUESTION_MARK).first).squeeze(Merb::Const::SLASH)
-      path = path[0..-2] if (path[-1] == ?/) && path.size > 1
-      path
-    end
-
-    # ==== Returns
-    # String:: The path info.
-    #
-    # @api public
-    def path_info
-      @path_info ||= Merb::Parse.unescape(@env[Merb::Const::PATH_INFO])
-    end
-
-    # ==== Returns
-    # Fixnum:: The server port.
-    #
-    # @api public
-    def port
-      @env[Merb::Const::SERVER_PORT].to_i
-    end
-
-    # ==== Returns
-    # String:: The full hostname including the port.
-    #
-    # @api public
-    def host
-      @env[Merb::Const::HTTP_X_FORWARDED_HOST] || @env[Merb::Const::HTTP_HOST] ||
-        @env[Merb::Const::SERVER_NAME]
-    end
-
-    # ==== Parameters
-    # tld_length<Fixnum>::
-    #   Number of domains levels to inlclude in the top level domain. Defaults
-    #   to 1.
-    #
-    # ==== Returns
-    # Array:: All the subdomain parts of the host.
-    #
-    # @api public
-    def subdomains(tld_length = 1)
-      parts = host.split(Merb::Const::DOT)
-      parts[0..-(tld_length+2)]
-    end
-
-    # ==== Parameters
-    # tld_length<Fixnum>::
-    #   Number of domains levels to inlclude in the top level domain. Defaults
-    #   to 1.
-    #
-    # ==== Returns
-    # String:: The full domain name without the port number.
-    #
-    # @api public
-    def domain(tld_length = 1)
-      host.split(Merb::Const::DOT).last(1 + tld_length).join(Merb::Const::DOT).sub(/:\d+$/,'')
-    end
-
-    # ==== Returns
-    # Value of If-None-Match request header.
-    #
-    # @api private
-    def if_none_match
-      @env[Merb::Const::HTTP_IF_NONE_MATCH]
-    end
-
-    # ==== Returns
-    # Value of If-Modified-Since request header.
-    #
-    # @api private
-    def if_modified_since
-      if time = @env[Merb::Const::HTTP_IF_MODIFIED_SINCE]
-        Time.rfc2822(time)
-      end
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/request_parsers.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/request_parsers.rb
deleted file mode 100644
index f876107..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/request_parsers.rb
+++ /dev/null
@@ -1,236 +0,0 @@
-module Merb
-  module Parse
-  
-    # ==== Parameters
-    # query_string<String>:: The query string.
-    # delimiter<String>:: The query string divider. Defaults to "&".
-    # preserve_order<Boolean>:: Preserve order of args. Defaults to false.
-    #
-    # ==== Returns
-    # Mash:: The parsed query string (Dictionary if preserve_order is set).
-    #
-    # ==== Examples
-    #   Merb::Parse.query("bar=nik&post[body]=heya")
-    #     # => { :bar => "nik", :post => { :body => "heya" } }
-    #
-    # @api plugin
-    def self.query(query_string, delimiter = '&;', preserve_order = false)
-      query = preserve_order ? Dictionary.new : {}
-      for pair in (query_string || '').split(/[#{delimiter}] */n)
-        key, value = unescape(pair).split('=',2)
-        next if key.nil?
-        if key.include?('[')
-          normalize_params(query, key, value)
-        else
-          query[key] = value
-        end
-      end
-      preserve_order ? query : query.to_mash
-    end
-
-    NAME_REGEX         = /Content-Disposition:.* name="?([^\";]*)"?/ni.freeze
-    CONTENT_TYPE_REGEX = /Content-Type: (.*)\r\n/ni.freeze
-    FILENAME_REGEX     = /Content-Disposition:.* filename="?([^\";]*)"?/ni.freeze
-    CRLF               = "\r\n".freeze
-    EOL                = CRLF
-  
-    # ==== Parameters
-    # request<IO>:: The raw request.
-    # boundary<String>:: The boundary string.
-    # content_length<Fixnum>:: The length of the content.
-    #
-    # ==== Raises
-    # ControllerExceptions::MultiPartParseError:: Failed to parse request.
-    #
-    # ==== Returns
-    # Hash:: The parsed request.
-    #
-    # @api plugin
-    def self.multipart(request, boundary, content_length)
-      boundary = "--#{boundary}"
-      paramhsh = {}
-      buf      = ""
-      input    = request
-      input.binmode if defined? input.binmode
-      boundary_size = boundary.size + EOL.size
-      bufsize       = 16384
-      content_length -= boundary_size
-      # status is boundary delimiter line
-      status = input.read(boundary_size)
-      return {} if status == nil || status.empty?
-      raise ControllerExceptions::MultiPartParseError, "bad content body:\n'#{status}' should == '#{boundary + EOL}'"  unless status == boundary + EOL
-      # second argument to Regexp.quote is for KCODE
-      rx = /(?:#{EOL})?#{Regexp.quote(boundary,'n')}(#{EOL}|--)/
-      loop {
-        head      = nil
-        body      = ''
-        filename  = content_type = name = nil
-        read_size = 0
-        until head && buf =~ rx
-          i = buf.index("\r\n\r\n")
-          if( i == nil && read_size == 0 && content_length == 0 )
-            content_length = -1
-            break
-          end
-          if !head && i
-            head = buf.slice!(0, i+2) # First \r\n
-            buf.slice!(0, 2)          # Second \r\n
-
-            # String#[] with 2nd arg here is returning
-            # a group from match data
-            filename     = head[FILENAME_REGEX, 1]
-            content_type = head[CONTENT_TYPE_REGEX, 1]
-            name         = head[NAME_REGEX, 1]
-
-            if filename && !filename.empty?
-              body = Tempfile.new(:Merb)
-              body.binmode if defined? body.binmode
-            end
-            next
-          end
-
-          # Save the read body part.
-          if head && (boundary_size+4 < buf.size)
-            body << buf.slice!(0, buf.size - (boundary_size+4))
-          end
-
-          read_size = bufsize < content_length ? bufsize : content_length
-          if( read_size > 0 )
-            c = input.read(read_size)
-            raise ControllerExceptions::MultiPartParseError, "bad content body"  if c.nil? || c.empty?
-            buf << c
-            content_length -= c.size
-          end
-        end
-
-        # Save the rest.
-        if i = buf.index(rx)
-          # correct value of i for some edge cases
-          if (i > 2) && (j = buf.index(rx, i-2)) && (j < i)
-             i = j
-           end
-          body << buf.slice!(0, i)
-          buf.slice!(0, boundary_size+2)
-
-          content_length = -1  if $1 == "--"
-        end
-
-        if filename && !filename.empty?
-          body.rewind
-          data = {
-            :filename => File.basename(filename),
-            :content_type => content_type,
-            :tempfile => body,
-            :size => File.size(body.path)
-          }
-        else
-          data = body
-        end
-        paramhsh = normalize_params(paramhsh,name,data)
-        break  if buf.empty? || content_length == -1
-      }
-      paramhsh
-    end
-
-    # ==== Parameters
-    # value<Array, Hash, Dictionary ~to_s>:: The value for the query string.
-    # prefix<~to_s>:: The prefix to add to the query string keys.
-    #
-    # ==== Returns
-    # String:: The query string.
-    #
-    # ==== Alternatives
-    # If the value is a string, the prefix will be used as the key.
-    #
-    # ==== Examples
-    #   params_to_query_string(10, "page")
-    #     # => "page=10"
-    #   params_to_query_string({ :page => 10, :word => "ruby" })
-    #     # => "page=10&word=ruby"
-    #   params_to_query_string({ :page => 10, :word => "ruby" }, "search")
-    #     # => "search[page]=10&search[word]=ruby"
-    #   params_to_query_string([ "ice-cream", "cake" ], "shopping_list")
-    #     # => "shopping_list[]=ice-cream&shopping_list[]=cake"
-    #
-    # @api plugin
-    def self.params_to_query_string(value, prefix = nil)
-      case value
-      when Array
-        value.map { |v|
-          params_to_query_string(v, "#{prefix}[]")
-        } * "&"
-      when Hash, Dictionary
-        value.map { |k, v|
-          params_to_query_string(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
-        } * "&"
-      else
-        "#{prefix}=#{escape(value)}"
-      end
-    end
-
-    # ==== Parameters
-    # s<String>:: String to URL escape.
-    #
-    # ==== returns
-    # String:: The escaped string.
-    #
-    # @api public
-    def self.escape(s)
-      s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
-        '%'+$1.unpack('H2'*$1.size).join('%').upcase
-      }.tr(' ', '+')
-    end
-
-    # ==== Parameter
-    # s<String>:: String to URL unescape.
-    #
-    # ==== returns
-    # String:: The unescaped string.
-    #
-    # @api public
-    def self.unescape(s)
-      s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n){
-        [$1.delete('%')].pack('H*')
-      }
-    end
-
-    private
-
-    # Converts a query string snippet to a hash and adds it to existing
-    # parameters.
-    #
-    # ==== Parameters
-    # parms<Hash>:: Parameters to add the normalized parameters to.
-    # name<String>:: The key of the parameter to normalize.
-    # val<String>:: The value of the parameter.
-    #
-    # ==== Returns
-    # Hash:: Normalized parameters
-    #
-    # @api private
-    def self.normalize_params(parms, name, val=nil)
-      name =~ %r([\[\]]*([^\[\]]+)\]*)
-      key = $1 || ''
-      after = $' || ''
-
-      if after == ""
-        parms[key] = val
-      elsif after == "[]"
-        (parms[key] ||= []) << val
-      elsif after =~ %r(^\[\]\[([^\[\]]+)\]$)
-        child_key = $1
-        parms[key] ||= []
-        if parms[key].last.is_a?(Hash) && !parms[key].last.key?(child_key)
-          parms[key].last.update(child_key => val)
-        else
-          parms[key] << { child_key => val }
-        end
-      else
-        parms[key] ||= {}
-        parms[key] = normalize_params(parms[key], after, val)
-      end
-      parms
-    end  
-  
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router.rb
deleted file mode 100644
index d7bbd49..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router.rb
+++ /dev/null
@@ -1,355 +0,0 @@
-require 'merb-core/dispatch/router/cached_proc'
-require 'merb-core/dispatch/router/behavior'
-require 'merb-core/dispatch/router/resources'
-require 'merb-core/dispatch/router/route'
-
-module Merb
-  # Router stores route definitions and finds the first
-  # route that matches the incoming request URL.
-  # 
-  # Then information from route is used by dispatcher to
-  # call action on the controller.
-  # 
-  # ==== Routes compilation.
-  # 
-  # The most interesting method of Router (and heart of
-  # route matching machinery) is match method generated
-  # on the fly from routes definitions. It is called routes
-  # compilation. Generated match method body contains
-  # one if/elsif statement that picks the first matching route
-  # definition and sets values to named parameters of the route.
-  # 
-  # Compilation is synchronized by mutex.
-  class Router
-    @routes          = []
-    @named_routes    = {}
-    @resource_routes = {}
-    @compiler_mutex  = Mutex.new
-    @root_behavior   = Behavior.new.defaults(:action => "index")
-    
-    # Raised when route lookup fails.
-    class RouteNotFound < StandardError; end;
-    # Raised when parameters given to generation
-    # method do not match route parameters.
-    class GenerationError < StandardError; end;
-    class NotCompiledError < StandardError; end;
-    
-    class << self
-      # An array containing all the application routes in order of
-      # priority.
-      # ---
-      # @api private
-      attr_accessor :routes
-      
-      # A hash containing all the named application routes. The names
-      # are absolute (as in, all routes named in a namespace will
-      # contain the name of the namespace).
-      # ---
-      # @api private
-      attr_accessor :named_routes
-      
-      # A hash of all the application resource routes. The key of the hash
-      # is an array with each element containing the "path" for the resource
-      # for example, given the following resource routes:
-      #
-      # resources :users do
-      #   resources :comments
-      # end
-      #
-      # The show comment route will have a key of ["User", "Comment"]
-      # ---
-      # @api private
-      attr_accessor :resource_routes
-      
-      # The starting point for route definition. Any route defined in a
-      # Merb::Router.prepare block will defined in context of this 
-      # behavior.
-      #
-      # ==== Examples
-      #
-      # Merb::Router.root_behavior = Merb::Router.root_bavior.match("/hello")
-      #
-      # In the previous example, all routes will have the path prefix /hello.
-      # It is important to note that this attribute must be set before any
-      # routes are defined in order for the behavior to be applied to the
-      # routes.
-      # ---
-      # @api plugin
-      attr_accessor :root_behavior
-      
-      # A block that will be run around route matching. This block must yield
-      # in order for the actual matching to happen.
-      # ---
-      # @api plugin
-      attr_accessor :around_match
-      
-      # Creates a route building context and evaluates the block in it. A
-      # copy of +root_behavior+ (and instance of Behavior) is copied as
-      # the context.
-      # 
-      # ==== Parameters
-      # first<Array>::
-      #   An array containing routes that should be prepended to the routes
-      #   defined in the block.
-      # last<Array>::
-      #   An array containing routes that should be appended to the routes
-      #   defined in the block.
-      # 
-      # ==== Returns
-      # Merb::Router::
-      #   Returns self to allow chaining of methods.
-      # ---
-      # @api public
-      def prepare(first = [], last = [], &block)
-        @routes = []
-        root_behavior._with_proxy(&block)
-        @routes = first + @routes + last
-        compile
-        self
-      end
-      
-      # Clears the routing table. Route generation and request matching
-      # won't work anymore until a new routing table is built.
-      # 
-      # @api private
-      def reset!
-        class << self
-          alias_method :match, :match_before_compilation
-        end
-        self.routes, self.named_routes, self.resource_routes = [], {}, {}
-      end
-      
-      # Finds route matching URI of the request and returns a tuple of
-      # [route index, route params]. This method is called by the
-      # dispatcher and isn't as useful in applications.
-      # 
-      # ==== Parameters
-      # request<Merb::Request>:: request to match.
-      # 
-      # ==== Returns
-      # Array[Integer, Hash]::
-      #   Two-tuple: route index and route parameters. Route parameters
-      #   are :controller, :action and all the named segments of the route.
-      # 
-      # @api private
-      def route_for(request)
-        index, params = if @around_match
-          send(@around_match, request) { match(request) }
-        else
-          match(request)
-        end
-        route = routes[index] if index
-        if !route
-          raise ControllerExceptions::NotFound, 
-            "No routes match the request: #{request.uri}"
-        end
-        [route, params]
-      end
-      
-      # A placeholder for the compiled match method.
-      # 
-      # ==== Notes
-      # This method is aliased as +match+ but this method gets overridden with
-      # the actual +match+ method (generated from the routes definitions) after
-      # being compiled. This method is only ever called before routes are
-      # compiled.
-      # 
-      # ==== Raises
-      # NotCompiledError:: routes have not been compiled yet.
-      # 
-      # @api private
-      def match_before_compilation(request) #:nodoc:
-        raise NotCompiledError, "The routes have not been compiled yet"
-      end
-      
-      alias_method :match, :match_before_compilation
-      
-      # There are three possible ways to use this method.  First, if you have a named route, 
-      # you can specify the route as the first parameter as a symbol and any paramters in a 
-      # hash.  Second, you can generate the default route by just passing the params hash, 
-      # just passing the params hash.  Finally, you can use the anonymous parameters.  This 
-      # allows you to specify the parameters to a named route in the order they appear in the 
-      # router.  
-      #
-      # ==== Parameters(Named Route)
-      # name<Symbol>:: 
-      #   The name of the route. 
-      # args<Hash>:: 
-      #   Parameters for the route generation.
-      #
-      # ==== Parameters(Default Route)
-      # args<Hash>:: 
-      #   Parameters for the route generation.  This route will use the default route. 
-      #
-      # ==== Parameters(Anonymous Parameters)
-      # name<Symbol>::
-      #   The name of the route.  
-      # args<Array>:: 
-      #   An array of anonymous parameters to generate the route
-      #   with. These parameters are assigned to the route parameters
-      #   in the order that they are passed.
-      #
-      # ==== Returns
-      # String:: The generated URL.
-      #
-      # ==== Examples
-      # Named Route
-      #
-      # Merb::Router.prepare do
-      #   match("/articles/:title").to(:controller => :articles, :action => :show).name("articles")
-      # end
-      #
-      # url(:articles, :title => "new_article")
-      #
-      # Default Route
-      #
-      # Merb::Router.prepare do
-      #   default_routes
-      # end
-      #
-      # url(:controller => "articles", :action => "new")
-      #
-      # Anonymous Paramters
-      #
-      # Merb::Router.prepare do
-      #   match("/articles/:year/:month/:title").to(:controller => :articles, :action => :show).name("articles")
-      # end
-      #
-      # url(:articles, 2008, 10, "test_article")
-      # ---
-      # @api plugin
-      def url(name, *args)
-        if name.is_a?(Route)
-          route = name
-        else
-          unless name.is_a?(Symbol)
-            args.unshift(name)
-            name = :default
-          end
-
-          unless route = Merb::Router.named_routes[name]
-            raise Merb::Router::GenerationError, "Named route not found: #{name}"
-          end
-        end
-        
-        defaults = args.pop
-        
-        route.generate(args, defaults)
-      end
-      
-      # Generates a URL from the resource(s)
-      # 
-      # ==== Parameters
-      # resources<Symbol,Object>::
-      #   The identifiers for the resource route to generate. These
-      #   can either be symbols or objects. Symbols denote resource
-      #   collection routes and objects denote the members.
-      # 
-      # params<Hash>::
-      #   Any extra parameters needed to generate the route.
-      #
-      # ==== Returns
-      # String:: The generated URL
-      # ---
-      # @api plugin
-      def resource(*args)
-        defaults = args.pop
-        options  = extract_options_from_args!(args) || {}
-        key      = []
-        params   = []
-        
-        args.each do |arg|
-          if arg.is_a?(Symbol) || arg.is_a?(String)
-            key << arg.to_s
-          else
-            key << arg.class.to_s
-            params << arg
-          end
-        end
-        
-        unless route = Merb::Router.resource_routes[key]
-          raise Merb::Router::GenerationError, "Resource route not found: #{args.inspect}"
-        end
-
-        params << options
-        
-        route.generate(params, defaults, true)
-      end
-      
-      # Add functionality to the router. This can be in the form of
-      # including a new module or directly defining new methods.
-      #
-      # ==== Parameters
-      # &block<Block>::
-      #   A block of code used to extend the route builder with. This
-      #   can be including a module or directly defining some new methods
-      #   that should be available to building routes.
-      #
-      # ==== Returns
-      # nil
-      #
-      # ==== Example
-      # Merb::Router.extensions do
-      #   def domain(name, domain, options={}, &block)
-      #     match(:domain => domain).namespace(name, :path => nil, &block)
-      #   end
-      # end
-      #
-      # In this case, a method 'domain' will be available to the route builder
-      # which will create namespaces around domains instead of path prefixes.
-      #
-      # This can then be used as follows.
-      #
-      # Merb::Router.prepare do
-      #   domain(:admin, "my-admin.com") do
-      #     # ... routes come here ...
-      #   end
-      # end
-      # ---
-      # @api public
-      def extensions(&block)
-        Router::Behavior.class_eval(&block)
-      end
-
-    private
-    
-      # Compiles the routes and creates the +match+ method.
-      # ---
-      # @api private
-      def compile
-        if routes.any?
-          eval(compiled_statement, binding, "Generated Code for Router", 1)
-        else
-          reset!
-        end
-      end
-      
-      # Generates the method for evaluation defining a +match+ method to match
-      # a request with the defined routes.
-      # ---
-      # @api private
-      def compiled_statement
-        @compiler_mutex.synchronize do
-          condition_keys, if_statements = Set.new, ""
-          
-          routes.each_with_index do |route, i|
-            route.freeze
-            route.conditions.keys.each { |key| condition_keys << key }
-            if_statements << route.compiled_statement(i == 0)
-          end
-          
-          statement =  "def match(request)\n"
-          statement << condition_keys.inject("") do |cached, key|
-            cached << "  cached_#{key} = request.#{key}.to_s\n"
-          end
-          statement <<    if_statements
-          statement << "  else\n"
-          statement << "    [nil, {}]\n"
-          statement << "  end\n"
-          statement << "end"
-        end
-      end
-      
-    end # class << self
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/behavior.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/behavior.rb
deleted file mode 100644
index 859802c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/behavior.rb
+++ /dev/null
@@ -1,785 +0,0 @@
-module Merb
-  
-  class Router
-    
-    class Behavior
-      
-      class Error < StandardError; end
-      
-      # Proxy catches any methods and proxies them to the current behavior.
-      # This allows building routes without constantly having to catching the
-      # yielded behavior object
-      # 
-      # @api private
-      class Proxy
-        
-        # Undefine as many methods as possible so that everything can be proxied
-        # along to the behavior
-        instance_methods.each { |m| undef_method m unless %w[ __id__ __send__ class kind_of? respond_to? assert_kind_of should should_not instance_variable_set instance_variable_get instance_eval].include?(m) }
-        
-        # @api private
-        def initialize
-          @behaviors = []
-        end
-        
-        # Puts a behavior on the bottom of the stack.
-        # 
-        # ==== Notes
-        # The behaviors keep track of nested scopes.
-        # 
-        # @api private
-        def push(behavior)
-          @behaviors.push(behavior)
-        end
-        
-        # Removes the top-most behavior.
-        # 
-        # ==== Notes
-        # This occurs at the end of a nested scope (namespace, etc).
-        # 
-        # @api private
-        def pop
-          @behaviors.pop
-        end
-        
-        # Tests whether the top-most behavior responds to the arguments.
-        # 
-        # ==== Notes
-        # Behaviors contain the actual functionality of the proxy.
-        # 
-        # @api private
-        def respond_to?(*args)
-          super || @behaviors.last.respond_to?(*args)
-        end
-        
-        # Rake does some stuff with methods in the global namespace, so if I don't
-        # explicitly define the Behavior methods to proxy here (specifically namespace)
-        # Rake's methods take precedence.
-        # 
-        # Removing the following:
-        # name full_name fixatable redirect
-        %w(
-          match to with register default defaults options option namespace identify
-          default_routes defer defer_to capture resources resource
-        ).each do |method|
-          class_eval %{
-            def #{method}(*args, &block)
-              @behaviors.last.#{method}(*args, &block)
-            end
-          }
-        end
-        
-        # == These methods are to be used in defer_to blocks
-        
-        # There are three possible ways to use this method.  First, if you have a named route, 
-        # you can specify the route as the first parameter as a symbol and any paramters in a 
-        # hash.  Second, you can generate the default route by just passing the params hash, 
-        # just passing the params hash.  Finally, you can use the anonymous parameters.  This 
-        # allows you to specify the parameters to a named route in the order they appear in the 
-        # router.  
-        #
-        # ==== Parameters(Named Route)
-        # name<Symbol>:: 
-        #   The name of the route. 
-        # args<Hash>:: 
-        #   Parameters for the route generation.
-        #
-        # ==== Parameters(Default Route)
-        # args<Hash>:: 
-        #   Parameters for the route generation.  This route will use the default route. 
-        #
-        # ==== Parameters(Anonymous Parameters)
-        # name<Symbol>::
-        #   The name of the route.  
-        # args<Array>:: 
-        #   An array of anonymous parameters to generate the route
-        #   with. These parameters are assigned to the route parameters
-        #   in the order that they are passed.
-        #
-        # ==== Returns
-        # String:: The generated URL.
-        #
-        # ==== Examples
-        # Named Route
-        #
-        # Merb::Router.prepare do
-        #   match("/articles/:title").to(:controller => :articles, :action => :show).name("articles")
-        # end
-        #
-        # url(:articles, :title => "new_article")
-        #
-        # Default Route
-        #
-        # Merb::Router.prepare do
-        #   default_routes
-        # end
-        #
-        # url(:controller => "articles", :action => "new")
-        #
-        # Anonymous Paramters
-        #
-        # Merb::Router.prepare do
-        #   match("/articles/:year/:month/:title").to(:controller => :articles, :action => :show).name("articles")
-        # end
-        #
-        # url(:articles, 2008, 10, "test_article")
-        #
-        # @api public
-        def url(name, *args)
-          args << {}
-          Merb::Router.url(name, *args)
-        end
-        
-        # Generates a Rack redirection response.
-        # 
-        # ==== Notes
-        # Refer to Merb::Rack::Helpers.redirect for documentation.
-        # 
-        # @api public
-        def redirect(url, opts = {})
-          Merb::Rack::Helpers.redirect(url, opts)
-        end
-        
-        private
-        
-        # Proxies the method calls to the behavior.
-        # 
-        # ==== Notes
-        # Please refer to:
-        # http://ruby-doc.org/core/classes/Kernel.html#M005951
-        # 
-        # @api private
-        def method_missing(method, *args, &block)
-          behavior = @behaviors.last
-          
-          if behavior.respond_to?(method)
-            behavior.send(method, *args, &block)
-          else
-            super
-          end
-        end
-      end
-      
-      # Behavior objects are used for the Route building DSL. Each object keeps
-      # track of the current definitions for the level at which it is defined.
-      # Each time a method is called on a Behavior object that accepts a block,
-      # a new instance of the Behavior class is created.
-      # 
-      # ==== Parameters
-      # 
-      # proxy<Proxy>::
-      #   This is the object initialized by Merb::Router.prepare that tracks the
-      #   current Behavior object stack so that Behavior methods can be called
-      #   without explicitly calling them on an instance of Behavior.
-      # conditions<Hash>::
-      #   The initial route conditions. See #match.
-      # params<Hash>::
-      #   The initial route parameters. See #to.
-      # defaults<Hash>::
-      #   The initial route default parameters. See #defaults.
-      # options<Hash>::
-      #   The initial route options. See #options.
-      # blocks<Array>::
-      #   The stack of deferred routing blocks for the route
-      # 
-      # ==== Returns
-      # Behavior:: The initialized Behavior object
-      # 
-      # @api private
-      def initialize(proxy = nil, conditions = {}, params = {}, defaults = {}, identifiers = {}, options = {}, blocks = []) #:nodoc:
-        @proxy       = proxy
-        @conditions  = conditions
-        @params      = params
-        @defaults    = defaults
-        @identifiers = identifiers
-        @options     = options
-        @blocks      = blocks
-        
-        stringify_condition_values
-      end
-      
-      # Defines the +conditions+ that are required to match a Request. Each
-      # +condition+ is applied to a method of the Request object. Conditions
-      # can also be applied to segments of the +path+.
-      # 
-      # If #match is passed a block, it will create a new route scope with
-      # the conditions passed to it and yield to the block such that all
-      # routes that are defined in the block have the conditions applied
-      # to them.
-      # 
-      # ==== Parameters
-      # 
-      # path<String, Regexp>::
-      #   The pattern against which Merb::Request path is matched.
-      # 
-      #   When +path+ is a String, any substring that is wrapped in parenthesis
-      #   is considered optional and any segment that begins with a colon, ex.:
-      #   ":login", defines both a capture and a named param. Extra conditions
-      #   can then be applied each named param individually.
-      # 
-      #   When +path+ is a Regexp, the pattern is left untouched and the
-      #   Merb::Request path is matched against it as is.
-      #
-      #   +path+ is optional.
-      # 
-      # conditions<Hash>::
-      #   Additional conditions that the request must meet in order to match.
-      #   The keys must be the names of previously defined path segments or
-      #   be methods that the Merb::Request instance will respond to.  The
-      #   value is the string or regexp that matched the returned value.
-      #   Conditions are inherited by child routes.
-      # 
-      # &block::
-      #   All routes defined in the block will be scoped to the conditions
-      #   defined by the #match method.
-      # 
-      # ==== Block parameters
-      # r<Behavior>:: +optional+ - The match behavior object.
-      # 
-      # ==== Returns
-      # Behavior::
-      #   A new instance of Behavior with the specified path and conditions.
-      # 
-      # +Tip+: When nesting always make sure the most inner sub-match registers
-      # a Route and doesn't just return new Behaviors.
-      # 
-      # ==== Examples
-      # 
-      #   # registers /foo/bar to controller => "foo", :action => "bar"
-      #   # and /foo/baz to controller => "foo", :action => "baz"
-      #   match("/foo") do
-      #     match("/bar").to(:controller => "foo", :action => "bar")
-      #     match("/baz").to(:controller => "foo", :action => "caz")
-      #   end
-      # 
-      #   # Checks the format of the segments against the specified Regexp
-      #   match("/:string/:number", :string => /[a-z]+/, :number => /\d+/).
-      #     to(:controller => "string_or_numbers")
-      # 
-      #   # Equivalent to the default_route
-      #   match("/:controller(/:action(:id))(.:format)").register
-      # 
-      #   #match only if the browser string contains MSIE or Gecko
-      #   match("/foo", :user_agent => /(MSIE|Gecko)/ )
-      #        .to(:controller => 'foo', :action => 'popular')
-      # 
-      #   # Route GET and POST requests to different actions (see also #resources)
-      #   r.match('/foo', :method => :get).to(:action => 'show')
-      #   r.match('/foo', :method => :post).to(:action => 'create')
-      # 
-      #   # match also takes regular expressions
-      # 
-      #   r.match(%r[/account/([a-z]{4,6})]).to(:controller => "account",
-      #      :action => "show", :id => "[1]")
-      # 
-      #   r.match(%r{/?(en|es|fr|be|nl)?}).to(:language => "[1]") do
-      #     match("/guides/:action/:id").to(:controller => "tour_guides")
-      #   end
-      # 
-      # @api public
-      def match(path = {}, conditions = {}, &block)
-        path, conditions = path[:path], path if path.is_a?(Hash)
-        
-        raise Error, "The route has already been committed. Further conditions cannot be specified" if @route
-        
-        conditions.delete_if { |k, v| v.nil? }
-        conditions[:path] = merge_paths(path)
-        
-        behavior = Behavior.new(@proxy, @conditions.merge(conditions), @params, @defaults, @identifiers, @options, @blocks)
-        with_behavior_context(behavior, &block)
-      end
-      
-      # Creates a Route from one or more Behavior objects, unless a +block+ is
-      # passed in.
-      # 
-      # ==== Parameters
-      # params<Hash>:: The parameters the route maps to.
-      # 
-      # &block::
-      #   All routes defined in the block will be scoped to the params
-      #   defined by the #to method.
-      # 
-      # ==== Block parameters
-      # r<Behavior>:: +optional+ - The to behavior object.
-      # 
-      # ==== Returns
-      # Route:: It registers a new route and returns it.
-      # 
-      # ==== Examples
-      #   match('/:controller/:id).to(:action => 'show')
-      # 
-      #   to(:controller => 'simple') do
-      #     match('/test').to(:action => 'index')
-      #     match('/other').to(:action => 'other')
-      #   end
-      # 
-      # @api public
-      def to(params = {}, &block)
-        raise Error, "The route has already been committed. Further params cannot be specified" if @route
-        
-        behavior = Behavior.new(@proxy, @conditions, @params.merge(params), @defaults, @identifiers, @options, @blocks)
-        
-        if block_given?
-          with_behavior_context(behavior, &block)
-        else
-          behavior.to_route
-        end
-      end
-      
-      # Equivalent of #to. Allows for some nicer syntax when scoping blocks
-      # 
-      # ==== Examples
-      # Merb::Router.prepare do
-      #   with(:controller => "users") do
-      #     match("/signup").to(:action => "signup")
-      #     match("/login").to(:action => "login")
-      #     match("/logout").to(:action => "logout")
-      #   end
-      # end
-      alias :with :to
-      
-      # Equivalent of #to. Allows for nicer syntax when registering routes with no params
-      # 
-      # ==== Examples
-      # Merb::Router.prepare do
-      #   match("/:controller(/:action(/:id))(.:format)").register
-      # end
-      alias :register :to
-      
-      # Sets default values for route parameters. If no value for the key
-      # can be extracted from the request, then the value provided here
-      # will be used.
-      # 
-      # ==== Parameters
-      # defaults<Hash>::
-      #   The default values for named segments.
-      # 
-      # &block::
-      #   All routes defined in the block will be scoped to the defaults defined
-      #   by the #default method.
-      # 
-      # ==== Block parameters
-      # r<Behavior>:: +optional+ - The defaults behavior object.
-      # 
-      # @api public
-      def default(defaults = {}, &block)
-        behavior = Behavior.new(@proxy, @conditions, @params, @defaults.merge(defaults), @identifiers, @options, @blocks)
-        with_behavior_context(behavior, &block)
-      end
-      
-      alias_method :defaults, :default
-      
-      # Allows the fine tuning of certain router options.
-      # 
-      # ==== Parameters
-      # options<Hash>::
-      #   The options to set for all routes defined in the scope. The currently
-      #   supported options are:
-      #   * :controller_prefix - The module that the controller is included in.
-      #   * :name_prefix       - The prefix added to all routes named with #name
-      # 
-      # &block::
-      #   All routes defined in the block will be scoped to the options defined
-      #   by the #options method.
-      # 
-      # ==== Block parameters
-      # r<Behavior>:: The options behavior object. This is optional
-      # 
-      # ==== Examples
-      #   # If :group is not matched in the path, it will be "registered" instead
-      #   # of nil.
-      #   match("/users(/:group)").default(:group => "registered")
-      # 
-      # @api public
-      def options(opts = {}, &block)
-        options = @options.dup
-        
-        opts.each_pair do |key, value|
-          options[key] = (options[key] || []) + [value.freeze] if value
-        end
-        
-        behavior = Behavior.new(@proxy, @conditions, @params, @defaults, @identifiers, options, @blocks)
-        with_behavior_context(behavior, &block)
-      end
-      
-      alias_method :options, :options
-      
-      # Creates a namespace for a route. This way you can have logical
-      # separation to your routes.
-      # 
-      # ==== Parameters
-      # name_or_path<String, Symbol>::
-      #   The name or path of the namespace.
-      # 
-      # options<Hash>::
-      #   Optional hash (see below)
-      # 
-      # &block::
-      #   All routes defined in the block will be scoped to the namespace defined
-      #   by the #namespace method.
-      # 
-      # ==== Options (opts)
-      # :path<String>:: match against this url
-      # 
-      # ==== Block parameters
-      # r<Behavior>:: The namespace behavior object. This is optional
-      # 
-      # ==== Examples
-      #   namespace :admin do
-      #     resources :accounts
-      #     resource :email
-      #   end
-      # 
-      #   # /super_admin/accounts
-      #   namespace(:admin, :path=>"super_admin") do
-      #     resources :accounts
-      #   end
-      # 
-      # @api public
-      def namespace(name_or_path, opts = {}, &block)
-        name = name_or_path.to_s # We don't want this modified ever
-        path = opts.has_key?(:path) ? opts[:path] : name
-        
-        raise Error, "The route has already been committed. Further options cannot be specified" if @route
-        
-        # option keys could be nil
-        opts[:controller_prefix] = name unless opts.has_key?(:controller_prefix)
-        opts[:name_prefix]       = name unless opts.has_key?(:name_prefix)
-        opts[:resource_prefix]   = opts[:name_prefix] unless opts.has_key?(:resource_prefix)
-        
-        behavior = self
-        behavior = behavior.match("/#{path}") unless path.nil? || path.empty?
-        behavior.options(opts, &block)
-      end
-      
-      # Sets a method for instances of specified Classes to be called before
-      # insertion into a route. This is useful when using models and want a
-      # specific method to be called on it (For example, for ActiveRecord::Base
-      # it would be #to_param).
-      # 
-      # The default method called on objects is #to_s.
-      # 
-      # ==== Paramters
-      # identifiers<Hash>::
-      #   The keys are Classes and the values are the method that instances of the specified
-      #   class should have called on.
-      # 
-      # &block::
-      #   All routes defined in the block will be call the specified methods during
-      #   generation.
-      # 
-      # ==== Block parameters
-      # r<Behavior>:: The identify behavior object. This is optional
-      # 
-      # @api public
-      def identify(identifiers = {}, &block)
-        identifiers = if Hash === identifiers
-          @identifiers.merge(identifiers)
-        else
-          { Object => identifiers }
-        end
-        
-        behavior = Behavior.new(@proxy, @conditions, @params, @defaults, identifiers.freeze, @options, @blocks)
-        with_behavior_context(behavior, &block)
-      end
-      
-      # Creates the most common routes /:controller/:action/:id.format when
-      # called with no arguments. You can pass a hash or a block to add parameters
-      # or override the default behavior.
-      # 
-      # ==== Parameters
-      # params<Hash>::
-      #   This optional hash can be used to augment the default settings
-      # 
-      # &block::
-      #   When passing a block a new behavior is yielded and more refinement is
-      #   possible.
-      # 
-      # ==== Returns
-      # Route:: the default route
-      # 
-      # ==== Examples
-      # 
-      #   # Passing an extra parameter "mode" to all matches
-      #   r.default_routes :mode => "default"
-      # 
-      #   # specifying exceptions within a block
-      #   r.default_routes do |nr|
-      #     nr.defer_to do |request, params|
-      #       nr.match(:protocol => "http://").to(:controller => "login",
-      #         :action => "new") if request.env["REQUEST_URI"] =~ /\/private\//
-      #     end
-      #   end
-      # 
-      # @api public
-      def default_routes(params = {}, &block)
-        match("/:controller(/:action(/:id))(.:format)").to(params, &block).name(:default)
-      end
-      
-      # Takes a block and stores it for deferred conditional routes. The block
-      # takes the +request+ object and the +params+ hash as parameters.
-      # 
-      # ==== Parameters
-      # params<Hash>:: Parameters and conditions associated with this behavior.
-      # &conditional_block::
-      #   A block with the conditions to be met for the behavior to take
-      #   effect.
-      # 
-      # ==== Returns
-      # Route :: The default route.
-      # 
-      # ==== Examples
-      #   defer_to do |request, params|
-      #     params.merge :controller => 'here',
-      #       :action => 'there' if request.xhr?
-      #   end
-      # 
-      # @api public
-      def defer_to(params = {}, &block)
-        defer(block).to(params)
-      end
-      
-      # Takes a Proc as a parameter and applies it as a deferred proc for all the
-      # routes defined in the block. This is mostly interesting for plugin
-      # developers.
-      # 
-      # ==== Examples
-      #   defered_block = proc do |r, p|
-      #     p.merge :controller => 'api/comments' if request.xhr?
-      #   end
-      #   defer(defered_block) do
-      #     resources :comments
-      #   end
-      # 
-      # @api public
-      def defer(deferred_block, &block)
-        blocks = @blocks + [CachedProc.new(deferred_block)]
-        behavior = Behavior.new(@proxy, @conditions, @params, @defaults, @identifiers, @options, blocks)
-        with_behavior_context(behavior, &block)
-      end
-      
-      # Registers the route as a named route with the name given.
-      # 
-      # ==== Parameters
-      # symbol<Symbol>:: the name of the route.
-      # 
-      # ==== Raises
-      # ArgumentError:: symbol is not a Symbol.
-      # 
-      # @api public
-      def name(prefix, name = nil)
-        unless name
-          name, prefix = prefix, nil
-        end
-        
-        full_name([prefix, @options[:name_prefix], name].flatten.compact.join('_'))
-      end
-      
-      # Names this route in Router. Name must be a Symbol. The current
-      # name_prefix is ignored.
-      #
-      # ==== Parameters
-      # symbol<Symbol>:: The name of the route.
-      #
-      # ==== Raises
-      # ArgumentError:: symbol is not a Symbol.
-      # 
-      # @api private
-      def full_name(name)
-        raise Error, ":this is reserved. Please pick another name." if name == :this
-        
-        if @route
-          @route.name = name
-          self
-        else
-          register.full_name(name)
-        end
-      end
-      
-      # Specifies that a route can be fixatable.
-      # 
-      # ==== Parameters
-      # enabled<Boolean>:: True enables fixation on the route.
-      # 
-      # @api public
-      def fixatable(enable = true)
-        @route.fixation = enable
-        self
-      end
-      
-      # Redirects the current route.
-      # 
-      # ==== Parameters
-      # path<String>:: The path to redirect to.
-      # 
-      # options<Hash>::
-      #   Options (see below)
-      # 
-      # ==== Options (opts)
-      # :permanent<Boolean>::
-      #   Whether or not the redirect should be permanent.
-      #   The default value is false.
-      # 
-      # @api public
-      def redirect(url, opts = {})
-        raise Error, "The route has already been committed." if @route
-        
-        status = opts[:permanent] ? 301 : 302
-        @route = Route.new(@conditions, {:url => url.freeze, :status => status.freeze}, @blocks, :redirects => true)
-        @route.register
-        self
-      end
-      
-      # Capture any new routes that have been added within the block.
-      #
-      # This utility method lets you track routes that have been added;
-      # it doesn't affect how/which routes are added.
-      #
-      # &block:: A context in which routes are generated.
-      # 
-      # @api public
-      def capture(&block)
-        captured_routes = {}
-        name_prefix     = [@options[:name_prefix]].flatten.compact.map { |p| "#{p}_"}
-        current_names   = Merb::Router.named_routes.keys
-        
-        behavior = Behavior.new(@proxy, @conditions, @params, @defaults, @identifiers, @options, @blocks)
-        with_behavior_context(behavior, &block)
-        
-        Merb::Router.named_routes.reject { |k,v| current_names.include?(k) }.each do |name, route|
-          name = route.name.to_s.sub("#{name_prefix}", '').to_sym unless name_prefix.empty?
-          captured_routes[name] = route
-        end
-        
-        captured_routes
-      end
-      
-      # Proxy routes with the default behaviors.
-      # 
-      # ==== Parameters
-      # &block:: defines routes within the provided context.
-      # 
-      # @api private
-      def _with_proxy(&block)
-        proxy = Proxy.new
-        proxy.push Behavior.new(proxy, @conditions, @params, @defaults, @identifiers, @options, @blocks)
-        proxy.instance_eval(&block)
-        proxy
-      end
-      
-      protected
-      
-      # Returns the current route.
-      # 
-      # ==== Returns
-      # Route:: the route.
-      # 
-      # @api private
-      def _route
-        @route
-      end
-      
-      # Turns a route definition into a Route object.
-      # 
-      # ==== Returns
-      # Route:: the route generated.
-      # 
-      # @api private
-      def to_route
-        raise Error, "The route has already been committed." if @route
-        
-        controller = @params[:controller]
-        
-        if prefixes = @options[:controller_prefix]
-          controller ||= ":controller"
-          
-          prefixes.reverse_each do |prefix|
-            break if controller =~ %r{^/(.*)} && controller = $1
-            controller = "#{prefix}/#{controller}"
-          end
-        end
-        
-        @params.merge!(:controller => controller.to_s.gsub(%r{^/}, '')) if controller
-        
-        # Sorts the identifiers so that modules that are at the bottom of the
-        # inheritance chain come first (more specific modules first). Object
-        # should always be last.
-        identifiers = @identifiers.sort { |(first,_),(sec,_)| first <=> sec || 1 }
-        
-        @route = Route.new(@conditions.dup, at params, @blocks, :defaults => @defaults.dup, :identifiers => identifiers)
-        
-        if before = @options[:before] && @options[:before].last
-          @route.register_at(Router.routes.index(before))
-        else
-          @route.register
-        end
-        self
-      end
-      
-      # Allows to insert the route at a certain spot in the list of routes
-      # instead of appending to the list.
-      # 
-      # ==== Params
-      # route<Route>:: the route to insert before.
-      # &block:: the route definition to insert.
-      # 
-      # @api plugin
-      def before(route, &block)
-        options(:before => route, &block)
-      end
-      
-      private
-      
-      # Takes @conditions and turns values into strings (except for Regexp and
-      # Array values).
-      # 
-      # @api private
-      def stringify_condition_values # :nodoc:
-        @conditions.each do |key, value|
-          unless value.nil? || Regexp === value || Array === value
-            @conditions[key] = value.to_s
-          end
-        end
-      end
-      
-      # Creates a new context with a given behavior for the route definition in
-      # the block.
-      # 
-      # ==== Params
-      # behavior<Behavior>:: the behavior to proxy the calls in the block.
-      # &block:: the routing definitions to be nested within the behavior.
-      # 
-      # ==== Returns
-      # Behavior:: the behavior wrapping.
-      # 
-      # @api private
-      def with_behavior_context(behavior, &block) # :nodoc:
-        if block_given?
-          @proxy.push(behavior)
-          retval = yield(behavior)
-          @proxy.pop
-        end
-        behavior
-      end
-      
-      # Merges the path elements together into an array to be joined for
-      # generating named routes.
-      # 
-      # ==== Parameters
-      # path<String>:: the path to merge at the end.
-      # 
-      # ==== Returns
-      # Array:: array of path elements.
-      # 
-      # ==== Notes
-      # An array of ['a', 'b'] (the 'a' namespace with the 'b' action) will
-      # produce a name of :a_b.
-      # 
-      # @api private
-      def merge_paths(path) # :nodoc:
-        [@conditions[:path], path.freeze].flatten.compact
-      end
-      
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/cached_proc.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/cached_proc.rb
deleted file mode 100644
index a290e1e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/cached_proc.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-module Merb
-  
-  class Router
-    # Cache procs for future reference in eval statement
-    class CachedProc
-      @@index = 0
-      @@list = []
-
-      attr_accessor :cache, :index
-
-      # ==== Parameters
-      # cache<Proc>:: The block of code to cache.
-      def initialize(cache)
-        @cache, @index = cache, CachedProc.register(self)
-      end
-
-      # ==== Returns
-      # String:: The CachedProc object in a format embeddable within a string.
-      def to_s
-        "CachedProc[#{@index}].cache"
-      end
-
-      class << self
-
-        # ==== Parameters
-        # cached_code<CachedProc>:: The cached code to register.
-        #
-        # ==== Returns
-        # Fixnum:: The index of the newly registered CachedProc.
-        def register(cached_code)
-          CachedProc[@@index] = cached_code
-          @@index += 1
-          @@index - 1
-        end
-
-        # Sets the cached code for a specific index.
-        #
-        # ==== Parameters
-        # index<Fixnum>:: The index of the cached code to set.
-        # code<CachedProc>:: The cached code to set.
-        def []=(index, code) @@list[index] = code end
-
-        # ==== Parameters
-        # index<Fixnum>:: The index of the cached code to retrieve.
-        #
-        # ==== Returns
-        # CachedProc:: The cached code at index.
-        def [](index) @@list[index] end
-      end
-    end # CachedProc
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/resources.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/resources.rb
deleted file mode 100644
index 913a508..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/resources.rb
+++ /dev/null
@@ -1,329 +0,0 @@
-module Merb
-  class Router
-    
-    module Resources
-      # Behavior#+resources+ is a route helper for defining a collection of
-      # RESTful resources. It yields to a block for child routes.
-      #
-      # ==== Parameters
-      # name<String, Symbol>:: The name of the resources
-      # options<Hash>::
-      #   Ovverides and parameters to be associated with the route
-      #
-      # ==== Options (options)
-      # :namespace<~to_s>: The namespace for this route.
-      # :name_prefix<~to_s>:
-      #   A prefix for the named routes. If a namespace is passed and there
-      #   isn't a name prefix, the namespace will become the prefix.
-      # :controller<~to_s>: The controller for this route
-      # :collection<~to_s>: Special settings for the collections routes
-      # :member<Hash>:
-      #   Special settings and resources related to a specific member of this
-      #   resource.
-      # :identify<Symbol|Array>: The method(s) that should be called on the object
-      #   before inserting it into an URL.
-      # :keys<Array>:
-      #   A list of the keys to be used instead of :id with the resource in the order of the url.
-      # :singular<Symbol>
-      #
-      # ==== Block parameters
-      # next_level<Behavior>:: The child behavior.
-      #
-      # ==== Returns
-      # Array::
-      #   Routes which will define the specified RESTful collection of resources
-      #
-      # ==== Examples
-      #
-      #  r.resources :posts # will result in the typical RESTful CRUD
-      #    # lists resources
-      #    # GET     /posts/?(\.:format)?      :action => "index"
-      #    # GET     /posts/index(\.:format)?  :action => "index"
-      #
-      #    # shows new resource form
-      #    # GET     /posts/new                :action => "new"
-      #
-      #    # creates resource
-      #    # POST    /posts/?(\.:format)?,     :action => "create"
-      #
-      #    # shows resource
-      #    # GET     /posts/:id(\.:format)?    :action => "show"
-      #
-      #    # shows edit form
-      #    # GET     /posts/:id/edit        :action => "edit"
-      #
-      #    # updates resource
-      #    # PUT     /posts/:id(\.:format)?    :action => "update"
-      #
-      #    # shows deletion confirmation page
-      #    # GET     /posts/:id/delete      :action => "delete"
-      #
-      #    # destroys resources
-      #    # DELETE  /posts/:id(\.:format)?    :action => "destroy"
-      #
-      #  # Nesting resources
-      #  r.resources :posts do |posts|
-      #    posts.resources :comments
-      #  end
-      #
-      # @api public
-      def resources(name, *args, &block)
-        name       = name.to_s
-        options    = extract_options_from_args!(args) || {}
-        match_opts = options.except(*resource_options)
-        options    = options.only(*resource_options)
-        singular   = options[:singular] ? options[:singular].to_s : Extlib::Inflection.singularize(name)
-        klass_name = args.first ? args.first.to_s : singular.to_const_string
-        keys       = options.delete(:keys) || options.delete(:key)
-        params     = { :controller => options.delete(:controller) || name }
-        collection = options.delete(:collection) || {}
-        member     = { :edit => :get, :delete => :get }.merge(options.delete(:member) || {})
-        
-        # Use the identifier for the class as a default
-        begin
-          if klass = Object.full_const_get(klass_name)
-            keys ||= options[:identify]
-            keys ||= @identifiers[klass]
-          elsif options[:identify]
-            raise Error, "The constant #{klass_name} does not exist, please specify the constant for this resource"
-          end
-        rescue NameError => e
-          Merb.logger.debug!("Could not find resource model #{klass_name}")
-        end
-        
-        keys = [ keys || :id ].flatten
-        
-
-        # Try pulling :namespace out of options for backwards compatibility
-        options[:name_prefix]       ||= nil # Don't use a name_prefix if not needed
-        options[:resource_prefix]   ||= nil # Don't use a resource_prefix if not needed
-        options[:controller_prefix] ||= options.delete(:namespace)
-
-        context = options[:identify]
-        context = klass && options[:identify] ? identify(klass => options.delete(:identify)) : self
-        context.namespace(name, options).to(params) do |resource|
-          root_keys = keys.map { |k| ":#{k}" }.join("/")
-          
-          # => index
-          resource.match("(/index)(.:format)", :method => :get).to(:action => "index").
-            name(name).register_resource(name)
-            
-          # => create
-          resource.match("(.:format)", :method => :post).to(:action => "create")
-          
-          # => new
-          resource.match("/new(.:format)", :method => :get).to(:action => "new").
-            name("new", singular).register_resource(name, "new")
-
-          # => user defined collection routes
-          collection.each_pair do |action, method|
-            action = action.to_s
-            resource.match("/#{action}(.:format)", :method => method).to(:action => "#{action}").
-              name(action, name).register_resource(name, action)
-          end
-
-          # => show
-          resource.match("/#{root_keys}(.:format)", match_opts.merge(:method => :get)).to(:action => "show").
-            name(singular).register_resource(klass_name, :identifiers => keys)
-
-          # => user defined member routes
-          member.each_pair do |action, method|
-            action = action.to_s
-            resource.match("/#{root_keys}/#{action}(.:format)", match_opts.merge(:method => method)).
-              to(:action => "#{action}").name(action, singular).register_resource(klass_name, action, :identifiers => keys)
-          end
-
-          # => update
-          resource.match("/#{root_keys}(.:format)", match_opts.merge(:method => :put)).
-            to(:action => "update")
-            
-          # => destroy
-          resource.match("/#{root_keys}(.:format)", match_opts.merge(:method => :delete)).
-            to(:action => "destroy")
-
-          if block_given?
-            parent_keys = keys.map do |k|
-              k == :id ? "#{singular}_id".to_sym : k
-            end
-            
-            nested_keys = parent_keys.map { |k| ":#{k}" }.join("/")
-
-            nested_match_opts = match_opts.except(:id)
-            nested_match_opts["#{singular}_id".to_sym] = match_opts[:id] if match_opts[:id]
-            
-            # Procs for building the extra collection/member resource routes
-            placeholder = Router.resource_routes[ [@options[:resource_prefix], klass_name].flatten.compact ]
-            builders    = {}
-            
-            builders[:collection] = lambda do |action, to, method|
-              resource.before(placeholder).match("/#{action}(.:format)", match_opts.merge(:method => method)).
-                to(:action => to).name(action, name).register_resource(name, action)
-            end
-            
-            builders[:member] = lambda do |action, to, method|
-              resource.match("/#{root_keys}/#{action}(.:format)", match_opts.merge(:method => method)).
-                to(:action => to).name(action, singular).register_resource(klass_name, action, :identifiers => keys)
-            end
-            
-            resource.options(:name_prefix => singular, :resource_prefix => klass_name, :parent_keys => parent_keys).
-              match("/#{nested_keys}", nested_match_opts).resource_block(builders, &block)
-          end
-        end # namespace
-      end # resources
-
-      # Behavior#+resource+ is a route helper for defining a singular RESTful
-      # resource. It yields to a block for child routes.
-      #
-      # ==== Parameters
-      # name<String, Symbol>:: The name of the resource.
-      # options<Hash>::
-      #   Overides and parameters to be associated with the route.
-      #
-      # ==== Options (options)
-      # :namespace<~to_s>: The namespace for this route.
-      # :name_prefix<~to_s>:
-      #   A prefix for the named routes. If a namespace is passed and there
-      #   isn't a name prefix, the namespace will become the prefix.
-      # :controller<~to_s>: The controller for this route
-      #
-      # ==== Block parameters
-      # next_level<Behavior>:: The child behavior.
-      #
-      # ==== Returns
-      # Array:: Routes which define a RESTful single resource.
-      #
-      # ==== Examples
-      #
-      #  r.resource :account # will result in the typical RESTful CRUD
-      #    # shows new resource form      
-      #    # GET     /account/new                :action => "new"
-      #
-      #    # creates resource      
-      #    # POST    /account/?(\.:format)?,     :action => "create"
-      #
-      #    # shows resource      
-      #    # GET     /account/(\.:format)?       :action => "show"
-      #
-      #    # shows edit form      
-      #    # GET     /account//edit           :action => "edit"
-      #
-      #    # updates resource      
-      #    # PUT     /account/(\.:format)?       :action => "update"
-      #
-      #    # shows deletion confirmation page      
-      #    # GET     /account//delete         :action => "delete"
-      #
-      #    # destroys resources      
-      #    # DELETE  /account/(\.:format)?       :action => "destroy"
-      #
-      # You can optionally pass :namespace and :controller to refine the routing
-      # or pass a block to nest resources.
-      #
-      #   r.resource :account, :namespace => "admin" do |account|
-      #     account.resources :preferences, :controller => "settings"
-      #   end
-      #
-      # @api public
-      def resource(name, *args, &block)
-        name    = name.to_s
-        options = extract_options_from_args!(args) || {}
-        params  = { :controller => options.delete(:controller) || name.pluralize }
-        member  = { :new => :get, :edit => :get, :delete => :get }.merge(options.delete(:member) || {})
-
-        options[:name_prefix]       ||= nil # Don't use a name_prefix if not needed
-        options[:resource_prefix]   ||= nil # Don't use a resource_prefix if not needed
-        options[:controller_prefix] ||= options.delete(:namespace)
-
-        self.namespace(name, options).to(params) do |resource|
-          # => show
-          
-          resource.match("(.:format)", :method => :get).to(:action => "show").
-            name(name).register_resource(name)
-            
-          # => create
-          resource.match("(.:format)", :method => :post).to(:action => "create")
-            
-          # => update
-          resource.match("(.:format)", :method => :put).to(:action => "update")
-            
-          # => destroy
-          resource.match("(.:format)", :method => :delete).to(:action => "destroy")
-          
-          member.each_pair do |action, method|
-            action = action.to_s
-            resource.match("/#{action}(.:format)", :method => method).to(:action => action).
-              name(action, name).register_resource(name, action)
-          end
-
-          if block_given?
-            builders = {}
-            
-            builders[:member] = lambda do |action, to, method|
-              resource.match("/#{action}(.:format)", :method => method).to(:action => to).
-                name(action, name).register_resource(name, action)
-            end
-            
-            resource.options(:name_prefix => name, :resource_prefix => name).
-              resource_block(builders, &block)
-          end
-        end
-      end
-      
-    protected
-    
-      #api private
-      def register_resource(*key)
-        options     = extract_options_from_args!(key) || {}
-        key         = [ @options[:resource_prefix], key ].flatten.compact
-        identifiers = [ @options[:parent_keys], options[:identifiers] ]
-        @route.resource = key
-        @route.resource_identifiers = identifiers.flatten.compact.map { |id| id.to_sym }
-        self
-      end
-
-      #api private
-      def resource_block(builders, &block)
-        behavior = ResourceBehavior.new(builders, @proxy, @conditions, @params, @defaults, @identifiers, @options, @blocks)
-        with_behavior_context(behavior, &block)
-      end
-      
-      def resource_options
-        [:singular, :keys, :key, :controller, :member, :collection, :identify,
-          :name_prefix, :resource_prefix, :controller_prefix, :namespace, :path]
-      end
-
-    end # Resources
-    
-    class Behavior
-      include Resources
-    end
-    
-    # Adding the collection and member methods to behavior
-    class ResourceBehavior < Behavior #:nodoc:
-      
-      #api private
-      def initialize(builders, *args)
-        super(*args)
-        @collection = builders[:collection]
-        @member     = builders[:member]
-      end
-      
-      #api private
-      def collection(action, options = {})
-        action = action.to_s
-        method = options[:method]
-        to     = options[:to] || action
-        @collection[action, to, method]
-      end
-      
-      # @api private
-      def member(action, options = {})
-        action = action.to_s
-        method = options[:method]
-        to     = options[:to] || action
-        @member[action, to, method]
-      end
-      
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/route.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/route.rb
deleted file mode 100644
index 5dad813..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/router/route.rb
+++ /dev/null
@@ -1,632 +0,0 @@
-module Merb
-
-  class Router
-    # This entire class is private and should never be accessed outside of
-    # Merb::Router and Behavior
-    class Route #:nodoc:
-      SEGMENT_REGEXP               = /(:([a-z](_?[a-z0-9])*))/
-      OPTIONAL_SEGMENT_REGEX       = /^.*?([\(\)])/i
-      SEGMENT_REGEXP_WITH_BRACKETS = /(:[a-z_]+)(\[(\d+)\])?/
-      JUST_BRACKETS                = /\[(\d+)\]/
-      SEGMENT_CHARACTERS           = "[^\/.,;?]".freeze
-
-      attr_reader :conditions, :params, :segments
-      attr_reader :index, :variables, :name
-      attr_accessor :fixation, :resource_identifiers
-
-      def initialize(conditions, params, deferred_procs, options = {})
-        @conditions, @params = conditions, params
-
-        if options[:redirects]
-          @redirects         = true
-          @redirect_status   = @params[:status]
-          @redirect_url      = @params[:url]
-          @defaults          = {}
-        else
-          @generatable       = true
-          @defaults          = options[:defaults] || {}
-        end
-        
-        @identifiers       = options[:identifiers]
-        @deferred_procs    = deferred_procs
-        @segments          = []
-        @symbol_conditions = {}
-        @placeholders      = {}
-        compile
-      end
-
-      def regexp?
-        @regexp
-      end
-      
-      def generatable?
-        @generatable && !regexp?
-      end
-
-      def allow_fixation?
-        @fixation
-      end
-      
-      def to_s
-        regexp? ?
-          "/#{conditions[:path].source}/" :
-          segment_level_to_s(segments)
-      end
-      
-      alias_method :inspect, :to_s
-
-      # Appends self to Merb::Router.routes
-      def register
-        @index = Merb::Router.routes.size
-        Merb::Router.routes << self
-        self
-      end
-      
-      # Inserts self to Merb::Router.routes at the specified index.
-      def register_at(index)
-        @index = index
-        Merb::Router.routes.insert(index, self)
-        self
-      end
-      
-      # Sets the route as a resource route with the given key as the 
-      # lookup key.
-      def resource=(key)
-        Router.resource_routes[key] = self
-        key
-      end
-      
-      def name=(name)
-        @name = name.to_sym
-        Router.named_routes[@name] = self
-        @name
-      end
-      
-      # Generates the URL for the route given the passed arguments. The
-      # method will first match the anonymous parameters to route params
-      # and will convert all the parameters according to the specifed
-      # object identifiers.
-      #
-      # Then the named parameters are passed to a compiled generation proc.
-      #
-      # ==== Parameters
-      # args<Array>::
-      #   The arguments passed to the public #url method with the name
-      #   of the route removed. This is an array of the anonymous parameters
-      #   followed by a hash containing the named parameters.
-      #
-      # defaults<Hash>::
-      #   A hash of parameters to use to generate the route if there are
-      #   any missing required parameters. This is usually the parameters
-      #   for the current request
-      #
-      # ==== Returns
-      # String:: The generated URL.
-      def generate(args = [], defaults = {}, resource = false)
-        unless generatable?
-          raise GenerationError, "Cannot generate regexp Routes" if regexp?
-          raise GenerationError, "Cannot generate this route"
-        end
-        
-        params = extract_options_from_args!(args) || { }
-        
-        params.each do |k, v|
-          params[k] = identify(v, k)
-        end
-        
-        # Support for anonymous params
-        unless args.empty?
-          # First, let's determine which variables are missing
-          variables = (resource ? @resource_identifiers : @variables) - params.keys
-          
-          args.each do |param|
-            raise GenerationError, "The route has #{@variables.length} variables: #{@variables.inspect}" if variables.empty?
-            
-            if identifier = identifier_for(param) and identifier.is_a?(Array)
-              identifier.each { |ident| params[variables.shift] = param.send(ident) }
-            else
-              params[variables.shift] ||= identify(param)
-            end
-          end
-        end
-        
-        uri = @generator[params, defaults] or raise GenerationError, "Named route #{name} could not be generated with #{params.inspect}"
-        uri = Merb::Config[:path_prefix] + uri if Merb::Config[:path_prefix]
-        uri
-      end
-      
-      # Identifies the object according to the identifiers set while building
-      # the routes. Identifying an object means picking an instance method to
-      # call on the object that will return a string representation of the
-      # object for the route being generated. If the identifier is an array,
-      # then a param_key must be present and match one of the elements of the
-      # identifier array.
-      #
-      # param_keys that end in _id are treated slightly differently in order
-      # to get nested resources to work correctly.
-      def identify(obj, param_key = nil)
-        identifier = identifier_for(obj)
-        if identifier.is_a?(Array)
-          # First check if the param_key exists as an identifier
-          return obj.send(param_key) if identifier.include?(param_key)
-          # If the param_key ends in _id, just return the object id
-          return obj.id if "#{param_key}" =~ /_id$/
-          # Otherwise, raise an error
-          raise GenerationError, "The object #{obj.inspect} cannot be identified with #{identifier.inspect} for #{param_key}"
-        else
-          identifier ? obj.send(identifier) : obj
-        end
-      end
-      
-      # Returns the identifier for the passed object. Built in core ruby classes are
-      # always identified with to_s. The method will return nil in that case (since
-      # to_s is the default for objects that do not have identifiers.)
-      def identifier_for(obj)
-        return if obj.is_a?(String)    || obj.is_a?(Symbol)     || obj.is_a?(Numeric)  ||
-                  obj.is_a?(TrueClass) || obj.is_a?(FalseClass) || obj.is_a?(NilClass) ||
-                  obj.is_a?(Array)     || obj.is_a?(Hash)
-        
-        @identifiers.each do |klass, identifier|
-          return identifier if obj.is_a?(klass)
-        end
-        
-        return nil
-      end
-
-      # Returns the if statement and return value for for the main
-      # Router.match compiled method.
-      def compiled_statement(first)
-        els_if = first ? '  if ' : '  elsif '
-
-        code = ""
-        code << els_if << condition_statements.join(" && ") << "\n"
-        
-        # First, we need to always return the value of the
-        # deferred block if it explicitly matched the route
-        if @redirects
-          code << "    return [#{@index.inspect}, block_result] if request.matched?" << "\n" if @deferred_procs.any?
-          code << "    [#{@index.inspect}, Merb::Rack::Helpers.redirect(#{@redirect_url.inspect}, :status => #{@redirect_status.inspect})]" << "\n"
-        elsif @deferred_procs.any?
-          code << "    [#{@index.inspect}, block_result]" << "\n"
-        else
-          code << "    [#{@index.inspect}, #{params_as_string}]" << "\n"
-        end
-      end
-
-    private
-      
-    # === Compilation ===
-
-      def compile
-        compile_conditions
-        compile_params
-        @generator = Generator.new(@segments, @symbol_conditions, @identifiers).compiled
-      end
-      
-      # The Generator class handles compiling the route down to a lambda that
-      # can generate the URL from a params hash and a default params hash.
-      class Generator #:nodoc:
-        
-        def initialize(segments, symbol_conditions, identifiers)
-          @segments          = segments
-          @symbol_conditions = symbol_conditions
-          @identifiers       = identifiers
-          @stack             = []
-          @opt_segment_count = 0
-          @opt_segment_stack = [[]]
-        end
-        
-        def compiled
-          ruby  = ""
-          ruby << "lambda do |params, defaults|\n"
-          ruby << "  fragment     = params.delete(:fragment)\n"
-          ruby << "  query_params = params.dup\n"
-          
-          with(@segments) do
-            ruby << "  include_defaults = true\n"
-            ruby << "  return unless url = #{block_for_level}\n"
-          end
-          
-          ruby << "  query_params.delete_if { |key, value| value.nil? }\n"
-          ruby << "  unless query_params.empty?\n"
-          ruby << '    url << "?#{Merb::Parse.params_to_query_string(query_params)}"' << "\n"
-          ruby << "  end\n"
-          ruby << '  url << "##{fragment}" if fragment' << "\n"
-          ruby << "  url\n"
-          ruby << "end\n"
-          
-          eval(ruby)
-        end
-        
-      private
-      
-        # Cleans up methods a bunch. We don't need to pass the current segment
-        # level around everywhere anymore. It's kept track for us in the stack.
-        def with(segments, &block)
-          @stack.push(segments)
-          retval = yield
-          @stack.pop
-          retval
-        end
-  
-        def segments
-          @stack.last || []
-        end
-        
-        def symbol_segments
-          segments.flatten.select { |s| s.is_a?(Symbol)  }
-        end
-        
-        def current_segments
-          segments.select { |s| s.is_a?(Symbol) }
-        end
-        
-        def nested_segments
-          segments.select { |s| s.is_a?(Array) }.flatten.select { |s| s.is_a?(Symbol) }
-        end
-      
-        def block_for_level
-          ruby  = ""
-          ruby << "if #{segment_level_matches_conditions}\n"
-          ruby << "  #{remove_used_segments_in_query_path}\n"
-          ruby << "  #{generate_optional_segments}\n"
-          ruby << %{ "#{combine_required_and_optional_segments}"\n}
-          ruby << "end"
-        end
-        
-        def check_if_defaults_should_be_included
-          ruby = ""
-          ruby << "include_defaults = "
-          symbol_segments.each { |s| ruby << "params[#{s.inspect}] || " }
-          ruby << "false"
-        end
-
-        # --- Not so pretty ---
-        def segment_level_matches_conditions
-          conditions = current_segments.map do |segment|
-            condition = "(cached_#{segment} = params[#{segment.inspect}] || include_defaults && defaults[#{segment.inspect}])"
-
-            if @symbol_conditions[segment] && @symbol_conditions[segment].is_a?(Regexp)
-              condition << " =~ #{@symbol_conditions[segment].inspect}"
-            elsif @symbol_conditions[segment]
-              condition << " == #{@symbol_conditions[segment].inspect}"
-            end
-
-            condition
-          end
-          
-          conditions << "true" if conditions.empty?
-          conditions.join(" && ")
-        end
-
-        def remove_used_segments_in_query_path
-          "#{current_segments.inspect}.each { |s| query_params.delete(s) }"
-        end
-
-        def generate_optional_segments
-          optionals = []
-
-          segments.each_with_index do |segment, i|
-            if segment.is_a?(Array) && segment.any? { |s| !s.is_a?(String) }
-              with(segment) do
-                @opt_segment_stack.last << (optional_name = "_optional_segments_#{@opt_segment_count += 1}")
-                @opt_segment_stack.push []
-                optionals << "#{check_if_defaults_should_be_included}\n"
-                optionals << "#{optional_name} = #{block_for_level}"
-                @opt_segment_stack.pop
-              end
-            end
-          end
-
-          optionals.join("\n")
-        end
-
-        def combine_required_and_optional_segments
-          bits = ""
-
-          segments.each_with_index do |segment, i|
-            bits << case
-              when segment.is_a?(String) then segment
-              when segment.is_a?(Symbol) then '#{cached_' + segment.to_s + '}'
-              when segment.is_a?(Array) && segment.any? { |s| !s.is_a?(String) } then "\#{#{@opt_segment_stack.last.shift}}"
-              else ""
-            end
-          end
-
-          bits
-        end
-        
-      end
-
-    # === Conditions ===
-
-      def compile_conditions
-        @original_conditions = conditions.dup
-        
-        if conditions[:path] && !conditions[:path].empty?
-          path = conditions[:path].flatten.compact
-          if path = compile_path(path)
-            conditions[:path] = Regexp.new("^#{path}$")
-          else
-            conditions.delete(:path)
-          end
-        else
-          # If there is no path, we can't generate it
-          @generatable = false
-        end
-      end
-
-      # The path is passed in as an array of different parts. We basically have
-      # to concat all the parts together, then parse the path and extract the
-      # variables. However, if any of the parts are a regular expression, then
-      # we abort the parsing and just convert it to a regexp.
-      def compile_path(path)
-        @segments = []
-        compiled  = ""
-
-        return nil if path.nil? || path.empty?
-
-        path.each do |part|
-          case part
-          when Regexp
-            @regexp   = true
-            @segments = []
-            compiled << part.source.sub(/^\^/, '').sub(/\$$/, '')
-          when String
-            segments = segments_with_optionals_from_string(part.dup)
-            compile_path_segments(compiled, segments)
-            # Concat the segments
-            unless regexp?
-              if @segments[-1].is_a?(String) && segments[0].is_a?(String)
-                @segments[-1] << segments.shift
-              end
-              @segments.concat segments
-            end
-          else
-            raise ArgumentError.new("A route path can only be specified as a String or Regexp")
-          end
-        end
-        
-        unless regexp?
-          @variables = @segments.flatten.select { |s| s.is_a?(Symbol)  }
-          compiled.gsub!(%r[/+], '/')
-          compiled.gsub!(%r[(.+)/$], '\1')
-        end
-
-        compiled
-      end
-
-      # Simple nested parenthesis parser
-      def segments_with_optionals_from_string(path, nest_level = 0)
-        segments = []
-
-        # Extract all the segments at this parenthesis level
-        while segment = path.slice!(OPTIONAL_SEGMENT_REGEX)
-          # Append the segments that we came across so far
-          # at this level
-          segments.concat segments_from_string(segment[0..-2]) if segment.length > 1
-          # If the parenthesis that we came across is an opening
-          # then we need to jump to the higher level
-          if segment[-1,1] == '('
-            segments << segments_with_optionals_from_string(path, nest_level + 1)
-          else
-            # Throw an error if we can't actually go back down (aka syntax error)
-            raise "There are too many closing parentheses" if nest_level == 0
-            return segments
-          end
-        end
-
-        # Save any last bit of the string that didn't match the original regex
-        segments.concat segments_from_string(path) unless path.empty?
-
-        # Throw an error if the string should not actually be done (aka syntax error)
-        raise "You have too many opening parentheses" unless nest_level == 0
-
-        segments
-      end
-
-      def segments_from_string(path)
-        segments = []
-
-        while match = (path.match(SEGMENT_REGEXP))
-          segments << match.pre_match unless match.pre_match.empty?
-          segments << match[2].intern
-          path = match.post_match
-        end
-        
-        raise Router::Behavior::Error, "cannot use :path as a route placeholder" if segments.include?(:path)
-
-        segments << path unless path.empty?
-        segments
-      end
-
-      # --- Yeah, this could probably be refactored
-      def compile_path_segments(compiled, segments)
-        segments.each do |segment|
-          case segment
-          when String
-            compiled << Regexp.escape(segment)
-          when Symbol
-            condition = (@symbol_conditions[segment] ||= @conditions.delete(segment))
-            compiled << compile_segment_condition(condition)
-            # Create a param for the Symbol segment if none already exists
-            @params[segment] = "#{segment.inspect}" unless @params.has_key?(segment)
-            @placeholders[segment] ||= capturing_parentheses_count(compiled)
-          when Array
-            compiled << "(?:"
-            compile_path_segments(compiled, segment)
-            compiled << ")?"
-          else
-            raise ArgumentError, "conditions[:path] segments can only be a Strings, Symbols, or Arrays"
-          end
-        end
-      end
-
-      # Handles anchors in Regexp conditions
-      def compile_segment_condition(condition)
-        return "(#{SEGMENT_CHARACTERS}+)" unless condition
-        return "(#{condition})"           unless condition.is_a?(Regexp)
-
-        condition = condition.source
-        # Handle the start anchor
-        condition = if condition =~ /^\^/
-          condition[1..-1]
-        else
-          "#{SEGMENT_CHARACTERS}*#{condition}"
-        end
-        # Handle the end anchor
-        condition = if condition =~ /\$$/
-          condition[0..-2]
-        else
-          "#{condition}#{SEGMENT_CHARACTERS}*"
-        end
-
-        "(#{condition})"
-      end
-
-      def compile_params
-        # Loop through each param and compile it
-        @defaults.merge(@params).each do |key, value|
-          if value.nil?
-            @params.delete(key)
-          elsif value.is_a?(String)
-            @params[key] = compile_param(value)
-          else
-            @params[key] = value.inspect
-          end
-        end
-      end
-
-      # This was pretty much a copy / paste from the old router
-      def compile_param(value)
-        result = []
-        match  = true
-        while match
-          if match = SEGMENT_REGEXP_WITH_BRACKETS.match(value)
-            result << match.pre_match.inspect unless match.pre_match.empty?
-            placeholder_key = match[1][1..-1].intern
-            if match[2] # has brackets, e.g. :path[2]
-              result << "#{placeholder_key}#{match[3]}"
-            else # no brackets, e.g. a named placeholder such as :controller
-              if place = @placeholders[placeholder_key]
-                # result << "(path#{place} || )" # <- Defaults
-                with_defaults  = ["(path#{place}"]
-                with_defaults << " || #{@defaults[placeholder_key].inspect}" if @defaults[placeholder_key]
-                with_defaults << ")"
-                result << with_defaults.join
-              else
-                raise GenerationError, "Placeholder not found while compiling routes: #{placeholder_key.inspect}. Add it to the conditions part of the route."
-              end
-            end
-            value = match.post_match
-          elsif match = JUST_BRACKETS.match(value)
-            result << match.pre_match.inspect unless match.pre_match.empty?
-            result << "path#{match[1]}"
-            value = match.post_match
-          else
-            result << value.inspect unless value.empty?
-          end
-        end
-
-        result.join(' + ').gsub("\\_", "_")
-      end
-
-      def condition_statements
-        statements = []
-
-        # First, let's build the conditions for the regular 
-        conditions.each_pair do |key, value|
-          statements << case value
-          when Regexp
-            captures = ""
-
-            if (max = capturing_parentheses_count(value)) > 0
-              captures << (1..max).to_a.map { |n| "#{key}#{n}" }.join(", ")
-              captures << " = "
-              captures << (1..max).to_a.map { |n| "$#{n}" }.join(", ")
-            end
-
-            # Note: =~ is slightly faster than .match
-            %{(#{value.inspect} =~ cached_#{key} #{' && ((' + captures + ') || true)' unless captures.empty?})}
-          when Array
-            %{(#{arrays_to_regexps(value).inspect} =~ cached_#{key})}
-          else
-            %{(cached_#{key} == #{value.inspect})}
-          end
-        end
-        
-        # The first one is special, so let's extract it
-        if first = @deferred_procs.first
-          deferred = ""
-          deferred << "(block_result = "
-          deferred <<   "request._process_block_return("
-          deferred <<     "#{first}.call(request, #{params_as_string})"
-          deferred <<   ")"
-          deferred << ")"
-          
-          # Let's build the rest of them now
-          if @deferred_procs.length > 1
-            deferred << deferred_condition_statement(@deferred_procs[1..-1])
-          end
-          
-          statements << deferred
-        end
-
-        statements
-      end
-      
-      # (request.matched? || ((block_result = process(proc.call))))
-      def deferred_condition_statement(deferred)
-        if current = deferred.first
-          html  = " && (request.matched? || ("
-          html <<   "(block_result = "
-          html <<     "request._process_block_return("
-          html <<       "#{current}.call(request, block_result)"
-          html <<     ")"
-          html <<   ")"
-          html <<   "#{deferred_condition_statement(deferred[1..-1])}"
-          html << "))"
-        end
-      end
-
-      def params_as_string
-        elements = params.keys.map do |k|
-          "#{k.inspect} => #{params[k]}"
-        end
-        "{#{elements.join(', ')}}"
-      end
-
-    # ---------- Utilities ----------
-      
-      def arrays_to_regexps(condition)
-        return condition unless condition.is_a?(Array)
-        
-        source = condition.map do |value|
-          value = if value.is_a?(Regexp)
-            value.source
-          else
-            "^#{Regexp.escape(value.to_s)}$"
-          end
-          "(?:#{value})"
-        end
-        
-        Regexp.compile(source.join('|'))
-      end
-    
-      def segment_level_to_s(segments)
-        (segments || []).inject('') do |str, seg|
-          str << case seg
-            when String then seg
-            when Symbol then ":#{seg}"
-            when Array  then "(#{segment_level_to_s(seg)})"
-          end
-        end
-      end
-
-      def capturing_parentheses_count(regexp)
-        regexp = regexp.source if regexp.is_a?(Regexp)
-        regexp.scan(/(?!\\)[(](?!\?[#=:!>-imx])/).length
-      end
-    end
-  end  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session.rb
deleted file mode 100644
index cb72299..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session.rb
+++ /dev/null
@@ -1,266 +0,0 @@
-require 'merb-core/dispatch/session/container'
-require 'merb-core/dispatch/session/store_container'
-
-module Merb
-  class Config
-    # Returns stores list constructed from
-    # configured session stores (:session_stores config option)
-    # or default one (:session_store config option).
-    # 
-    # @api private
-    def self.session_stores
-      @session_stores ||= begin
-        config_stores = Array(
-          Merb::Config[:session_stores] || Merb::Config[:session_store]
-        )
-        config_stores.map { |name| name.to_sym }
-      end
-    end
-  end # Config
-  
-  # The Merb::Session module gets mixed into Merb::SessionContainer to allow
-  # app-level functionality (usually found in ./merb/session/session.rb) for
-  # session.
-  #
-  # You can use this module to implement additional methods to simplify
-  # building wizard-like application components,
-  # authentication frameworks, etc.
-  # 
-  # Session configuration options:
-  #
-  # :session_id_key           The key by which a session value/id is
-  #                           retrieved; defaults to _session_id
-  #
-  # :session_expiry           When to expire the session cookie;
-  #                           by defaults session expires when browser quits.
-  #
-  # :session_secret_key       A secret string which is used to sign/validate
-  #                           session data; min. 16 chars
-  #
-  # :default_cookie_domain    The default domain to write cookies for.
-  module Session    
-  end
-  
-  # This is mixed into Merb::Controller on framework boot.
-  module SessionMixin
-    # Raised when no suitable session store has been setup.
-    class NoSessionContainer < StandardError; end
-    
-    # Raised when storing more data than the available space reserved.
-    class SessionOverflow < StandardError; end
-    
-    # @api private
-    def self.included(base)
-      # Register a callback to finalize sessions - needs to run before the cookie
-      # callback extracts Set-Cookie headers from request.cookies.
-      base._after_dispatch_callbacks.unshift lambda { |c| c.request.finalize_session }
-    end
-    
-    # ==== Parameters
-    # session_store<String>:: The type of session store to access.
-    #
-    # ==== Returns
-    # SessionContainer:: The session that was extracted from the request object.
-    def session(session_store = nil)
-      request.session(session_store)
-    end
-    
-    # Module methods
-    
-    # ==== Returns
-    # String:: A random 32 character string for use as a unique session ID.
-    def rand_uuid
-      values = [
-        rand(0x0010000),
-        rand(0x0010000),
-        rand(0x0010000),
-        rand(0x0010000),
-        rand(0x0010000),
-        rand(0x1000000),
-        rand(0x1000000),
-      ]
-      "%04x%04x%04x%04x%04x%06x%06x" % values
-    end
-    
-    # Marks this session as needing a new cookie.
-    # 
-    # @api private
-    def needs_new_cookie!
-      @_new_cookie = true
-    end
-    
-    # Does session need new cookie?
-    # 
-    # ==== Returns
-    # Boolean:: true if a new cookie is needed, false otherwise.
-    # 
-    # @api private
-    def needs_new_cookie?
-      @_new_cookie
-    end
-    
-    module_function :rand_uuid, :needs_new_cookie!, :needs_new_cookie?
-    
-    module RequestMixin
-      
-      # Adds class methods to Merb::Request object.
-      # Sets up repository of session store types.
-      # Sets the session ID key and expiry values.
-      def self.included(base)
-        base.extend ClassMethods
-        
-        # Keep track of all known session store types.
-        base.cattr_accessor :registered_session_types
-        base.registered_session_types = Dictionary.new
-        base.class_inheritable_accessor :_session_id_key, :_session_secret_key,
-                                        :_session_expiry
-        
-        base._session_id_key        = Merb::Config[:session_id_key] || '_session_id'
-        base._session_expiry        = Merb::Config[:session_expiry] || 0
-        base._session_secret_key    = Merb::Config[:session_secret_key]
-      end
-      
-      module ClassMethods
-        
-        # ==== Parameters
-        # name<~to_sym>:: Name of the session type to register.
-        # class_name<String>:: The corresponding class name.
-        #
-        # === Notres
-        # This is automatically called when Merb::SessionContainer is subclassed.
-        # 
-        # @api private
-        def register_session_type(name, class_name)
-          self.registered_session_types[name.to_sym] = class_name
-        end
-        
-      end
-      
-      # The default session store type.
-      # 
-      # @api private
-      def default_session_store
-        Merb::Config[:session_store] && Merb::Config[:session_store].to_sym
-      end
-      
-      # ==== Returns
-      # Hash:: All active session stores by type.
-      # 
-      # @api private
-      def session_stores
-        @session_stores ||= {}
-      end
-      
-      # Returns session container. Merb is able to handle multiple session
-      # stores, hence a parameter to pick it.
-      #
-      # ==== Parameters
-      # session_store<String>:: The type of session store to access,
-      # defaults to default_session_store.
-      #
-      # === Notes
-      # If no suitable session store type is given, it defaults to
-      # cookie-based sessions.
-      # 
-      # ==== Returns
-      # SessionContainer::
-      #   an instance of a session store extending Merb::SessionContainer.
-      # 
-      # @api public
-      def session(session_store = nil)
-        session_store ||= default_session_store
-        if class_name = self.class.registered_session_types[session_store]
-          session_stores[session_store] ||= Object.full_const_get(class_name).setup(self)
-        elsif fallback = self.class.registered_session_types.keys.first
-          Merb.logger.warn "Session store '#{session_store}' not found. Check your configuration in init file."
-          Merb.logger.warn "Falling back to #{fallback} session store."
-          session(fallback)
-        else
-          msg = "No session store set. Set it in init file like this: c[:session_store] = 'activerecord'"
-          Merb.logger.error!(msg)
-          raise NoSessionContainer, msg            
-        end
-      end
-      
-      # ==== Parameters
-      # new_session<Merb::SessionContainer>:: A session store instance.
-      #
-      # === Notes
-      # The session is assigned internally by its session_store_type key.
-      # 
-      # @api private
-      def session=(new_session)
-        if self.session?(new_session.class.session_store_type)
-          original_session_id = self.session(new_session.class.session_store_type).session_id
-          if new_session.session_id != original_session_id
-            set_session_id_cookie(new_session.session_id)
-          end
-        end
-        session_stores[new_session.class.session_store_type] = new_session
-      end
-      
-      # Whether a session has been setup
-      # 
-      # ==== Returns
-      # Boolean:: true if the session is part of the session stores configured.
-      # 
-      # @api private
-      def session?(session_store = nil)
-        (session_store ? [session_store] : session_stores).any? do |type, store|
-          store.is_a?(Merb::SessionContainer)
-        end
-      end
-      
-      # Teardown and/or persist the current sessions.
-      # 
-      # @api private
-      def finalize_session
-        session_stores.each { |name, store| store.finalize(self) }
-      end
-      alias :finalize_sessions :finalize_session
-      
-      # Assign default cookie values
-      # 
-      # @api private
-      def default_cookies
-        defaults = {}
-        if route && route.allow_fixation? && params.key?(_session_id_key)
-          Merb.logger.info("Fixated session id: #{_session_id_key}")
-          defaults[_session_id_key] = params[_session_id_key]
-        end
-        defaults
-      end
-
-      # Sets session cookie value.
-      #
-      # ==== Parameters
-      # value<String>:: The value of the session cookie; either the session id or the actual encoded data.
-      # options<Hash>:: Cookie options like domain, path and expired.
-      # 
-      # @api private
-      def set_session_cookie_value(value, options = {})
-        defaults = {}
-        defaults[:expires] = Time.now + _session_expiry if _session_expiry > 0
-        cookies.set_cookie(_session_id_key, value, defaults.merge(options))
-      end
-      alias :set_session_id_cookie :set_session_cookie_value
-
-      # ==== Returns
-      # String:: The value of the session cookie; either the session id or the actual encoded data.
-      # 
-      # @api private
-      def session_cookie_value
-        cookies[_session_id_key]
-      end
-      alias :session_id :session_cookie_value
-      
-      # Destroy the session cookie.
-      # 
-      # @api private
-      def destroy_session_cookie
-        cookies.delete(_session_id_key)
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/container.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/container.rb
deleted file mode 100644
index 82fc096..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/container.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-module Merb
-  class SessionContainer < Mash
-    
-    class_inheritable_accessor :session_store_type
-    cattr_accessor :subclasses 
-    self.subclasses = []
-    
-    attr_reader :session_id
-    attr_accessor :needs_new_cookie
-    
-    class << self
-      
-      # Register the subclass as an available session store type.
-      def inherited(klass)
-        self.subclasses << klass.to_s
-        super
-      end
-      
-      # Generates a new session ID and creates a new session.
-      #
-      # ==== Returns
-      # SessionContainer:: The new session.
-      # 
-      # @api private
-      def generate
-      end
-      
-      # ==== Parameters
-      # request<Merb::Request>:: The Merb::Request that came in from Rack.
-      #
-      # ==== Notes
-      # If no sessions were found, a new SessionContainer will be generated.
-      # 
-      # ==== Returns
-      # SessionContainer:: a SessionContainer.
-      # 
-      # @api private
-      def setup(request)
-      end
-      
-    end
-    
-    # ==== Parameters
-    # session_id<String>:: A unique identifier for this session.
-    # 
-    # @api private
-    def initialize(session_id)
-      @_destroy = false
-      self.session_id = session_id
-    end
-    
-    # Assign a new session_id.
-    #
-    # Recreates the cookie with the default expiration time. Useful during log
-    # in for pushing back the expiration date.
-    # 
-    # @api private
-    def session_id=(sid)
-      self.needs_new_cookie = (@session_id && @session_id != sid)
-      @session_id = sid
-    end
-    
-    # Teardown and/or persist the current session.
-    #
-    # If @_destroy is true, clear out the session completely, including
-    # removal of the session cookie itself.
-    #
-    # ==== Parameters
-    # request<Merb::Request>:: The Merb::Request that came in from Rack.
-    # 
-    # @api private
-    def finalize(request)
-    end
-    
-    # Destroy the current session - clears data and removes session cookie.
-    # 
-    # @api private
-    def clear!
-      @_destroy = true
-      self.clear
-    end
-    
-    # Regenerate the session_id.
-    # 
-    # @api private
-    def regenerate
-    end
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/cookie.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/cookie.rb
deleted file mode 100644
index 534f6b6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/cookie.rb
+++ /dev/null
@@ -1,202 +0,0 @@
-require 'base64'        # to convert Marshal.dump to ASCII
-require 'openssl'       # to generate the HMAC message digest
-module Merb
-  
-  # If you have more than 4K of session data or don't want your data to be
-  # visible to the user, pick another session store.
-  #
-  # CookieOverflow is raised if you attempt to store more than 4K of data.
-  # TamperedWithCookie is raised if the data integrity check fails.
-  #
-  # A message digest is included with the cookie to ensure data integrity:
-  # a user cannot alter session data without knowing the secret key included
-  # in the hash.
-  #
-  # To use Cookie Sessions, set in config/merb.yml
-  #  :session_secret_key - your secret digest key
-  #  :session_store: cookie
-  class CookieSession < SessionContainer
-    # TODO (maybe):
-    # include request ip address
-    # AES encrypt marshaled data
-    
-    # Raised when storing more than 4K of session data.
-    class CookieOverflow < StandardError; end
-    
-    # Raised when the cookie fails its integrity check.
-    class TamperedWithCookie < StandardError; end
-    
-    # Cookies can typically store 4096 bytes.
-    MAX = 4096
-    DIGEST = OpenSSL::Digest::Digest.new('SHA1') # or MD5, RIPEMD160, SHA256?
-    
-    attr_accessor :_original_session_data
-    
-    # The session store type
-    self.session_store_type = :cookie
-    
-    class << self
-      # Generates a new session ID and creates a new session.
-      #
-      # ==== Returns
-      # SessionContainer:: The new session.
-      # 
-      # @api private
-      def generate
-        self.new(Merb::SessionMixin.rand_uuid, "", Merb::Request._session_secret_key)
-      end
-      
-      # Set up a new session on request: make it available on request instance.
-      #
-      # ==== Parameters
-      # request<Merb::Request>:: The Merb::Request that came in from Rack.
-      #
-      # ==== Returns
-      # SessionContainer:: a SessionContainer. If no sessions were found,
-      # a new SessionContainer will be generated.
-      # 
-      # @api private
-      def setup(request)
-        session = self.new(Merb::SessionMixin.rand_uuid,
-          request.session_cookie_value, request._session_secret_key)
-        session._original_session_data = session.to_cookie
-        request.session = session
-      end
-      
-    end
-    
-    # ==== Parameters
-    # session_id<String>:: A unique identifier for this session.
-    # cookie<String>:: The raw cookie data.
-    # secret<String>:: A session secret.
-    #
-    # ==== Raises
-    # ArgumentError:: blank or insufficiently long secret.
-    # 
-    # @api private
-    def initialize(session_id, cookie, secret)
-      super session_id
-      if secret.blank? || secret.length < 16
-        msg = "You must specify a session_secret_key in your init file, and it must be at least 16 characters"
-        Merb.logger.warn(msg)
-        raise ArgumentError, msg
-      end
-      @secret = secret
-      self.update(unmarshal(cookie))
-    end
-    
-    # Teardown and/or persist the current session.
-    #
-    # If @_destroy is true, clear out the session completely, including
-    # removal of the session cookie itself.
-    #
-    # ==== Parameters
-    # request<Merb::Request>:: request object created from Rack environment.
-    # 
-    # @api private
-    def finalize(request)
-      if @_destroy
-        request.destroy_session_cookie
-      elsif _original_session_data != (new_session_data = self.to_cookie)
-        request.set_session_cookie_value(new_session_data)
-      end
-    end
-    
-    # Regenerate the session_id.
-    # 
-    # @api private
-    def regenerate
-      self.session_id = Merb::SessionMixin.rand_uuid
-    end
-    
-    # Create the raw cookie string; includes an HMAC keyed message digest.
-    #
-    # ==== Returns
-    # String:: Cookie value.
-    #
-    # ==== Raises
-    # CookieOverflow:: More than 4K of data put into session.
-    #
-    # ==== Notes
-    # Session data is converted to a Hash first, since a container might
-    # choose to marshal it, which would make it persist
-    # attributes like 'needs_new_cookie', which it shouldn't.
-    # 
-    # @api private
-    def to_cookie
-      unless self.empty?
-        data = self.serialize
-        value = Merb::Parse.escape "#{data}--#{generate_digest(data)}"
-        if value.size > MAX
-          msg = "Cookies have limit of 4K. Session contents: #{data.inspect}"
-          Merb.logger.error!(msg)
-          raise CookieOverflow, msg
-        end
-        value
-      end
-    end
-    
-    private
-    
-    # Generate the HMAC keyed message digest. Uses SHA1.
-    # 
-    # ==== Returns
-    # String:: an HMAC digest of the cookie data.
-    # 
-    # @api private
-    def generate_digest(data)
-      OpenSSL::HMAC.hexdigest(DIGEST, @secret, data)
-    end
-    
-    # Unmarshal cookie data to a hash and verify its integrity.
-    # 
-    # ==== Parameters
-    # cookie<~to_s>:: The cookie to unmarshal.
-    # 
-    # ==== Raises
-    # TamperedWithCookie:: The digests don't match.
-    # 
-    # ==== Returns
-    # Hash:: The stored session data.
-    # 
-    # @api private
-    def unmarshal(cookie)
-      if cookie.blank?
-        {}
-      else
-        data, digest = Merb::Parse.unescape(cookie).split('--')
-        return {} if data.blank? || digest.blank?
-        unless digest == generate_digest(data)
-          clear
-          unless Merb::Config[:ignore_tampered_cookies]
-            raise TamperedWithCookie, "Maybe the site's session_secret_key has changed?"
-          end
-        end
-        unserialize(data)
-      end
-    end
-    
-    protected
-    
-    # Serialize current session data as a Hash.
-    # Uses Base64 encoding for integrity.
-    # 
-    # ==== Returns
-    # String:: Base64 encoded dump of the session hash.
-    # 
-    # @api private
-    def serialize
-      Base64.encode64(Marshal.dump(self.to_hash)).chop
-    end
-    
-    # Unserialize the raw cookie data to a Hash
-    # 
-    # ==== Returns
-    # Hash:: the session hash Base64 decoded from the data dump.
-    # 
-    # @api private
-    def unserialize(data)
-      Marshal.load(Base64.decode64(data)) rescue {}
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/memcached.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/memcached.rb
deleted file mode 100644
index b7fa9f8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/memcached.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-module Merb
-
-  # Sessions stored in memcached.
-  #
-  # Requires setup in your +init.rb+.
-  # 
-  # This for the 'memcache-client' gem:
-  #
-  #   Merb::BootLoader.after_app_loads do
-  #     require 'memcache'
-  #     Merb::MemcacheSession.store = 
-  #        MemCache.new('127.0.0.1:11211', :namespace => 'my_app')
-  #   end
-  #
-  # Or this for the 'memcached' gem:
-  #
-  #   Merb::BootLoader.after_app_loads do
-  #     require 'memcache'
-  #     Merb::MemcacheSession.store = 
-  #        Memcached.new('127.0.0.1:11211', :namespace => 'my_app')
-  #   end
-  
-  class MemcacheSession < SessionStoreContainer
-    
-    # The session store type
-    self.session_store_type = :memcache
-    
-  end
-  
-  module MemcacheStore
-    
-    # Make the Memcached gem conform to the SessionStoreContainer interface
-    
-    # ==== Parameters
-    # session_id<String>:: ID of the session to retrieve.
-    #
-    # ==== Returns
-    # ContainerSession:: The session corresponding to the ID.
-    # 
-    # @api private
-    def retrieve_session(session_id)
-      get("session:#{session_id}")
-    end
-    
-    # ==== Parameters
-    # session_id<String>:: ID of the session to set.
-    # data<ContainerSession>:: The session to set.
-    # 
-    # @api private
-    def store_session(session_id, data)
-      set("session:#{session_id}", data)
-    end
-    
-    # ==== Parameters
-    # session_id<String>:: ID of the session to delete.
-    def delete_session(session_id)
-      delete("session:#{session_id}")
-    end
-    
-  end
-  
-end
-
-# For the memcached gem.
-class Memcached
-  include Merb::MemcacheStore
-end
-
-# For the memcache-client gem.
-class MemCache
-  include Merb::MemcacheStore
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/memory.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/memory.rb
deleted file mode 100644
index 6f49d62..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/memory.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-module Merb
-  
-  # Sessions stored in memory.
-  #
-  # Set it up by adding the following to your init file:
-  #
-  #  Merb::Config.use do |c|
-  #    c[:session_store]      = :memory
-  #    c[:memory_session_ttl] = 3600 # in seconds, one hour
-  #  end
-  #
-  # Sessions will remain in memory until the server is stopped or the time
-  # as set in :memory_session_ttl expires. Expired sessions are cleaned up in the
-  # background by a separate thread. Every time reaper
-  # cleans up expired sessions, garbage collection is scheduled start.
-  #
-  # Memory session is accessed in a thread safe manner.
-  class MemorySession < SessionStoreContainer
-    
-    # The session store type
-    self.session_store_type = :memory
-    
-    # Bypass normal implicit class attribute reader - see below.
-    def store
-      self.class.store
-    end
-    
-    # Lazy load/setup of MemorySessionStore.
-    def self.store
-      @_store ||= MemorySessionStore.new(Merb::Config[:memory_session_ttl])
-    end
-    
-  end
-  
-  # Used for handling multiple sessions stored in memory.
-  class MemorySessionStore
-    
-    # ==== Parameters
-    # ttl<Fixnum>:: Session validity time in seconds. Defaults to 1 hour.
-    # 
-    # @api private
-    def initialize(ttl=nil)
-      @sessions = Hash.new
-      @timestamps = Hash.new
-      @mutex = Mutex.new
-      @session_ttl = ttl || Merb::Const::HOUR # defaults 1 hour
-      start_timer
-    end
-    
-    # ==== Parameters
-    # session_id<String>:: ID of the session to retrieve.
-    #
-    # ==== Returns
-    # ContainerSession:: The session corresponding to the ID.
-    # 
-    # @api private
-    def retrieve_session(session_id)
-      @mutex.synchronize {
-        @timestamps[session_id] = Time.now
-        @sessions[session_id]
-      }
-    end
-    
-    # ==== Parameters
-    # session_id<String>:: ID of the session to set.
-    # data<ContainerSession>:: The session to set.
-    # 
-    # @api private
-    def store_session(session_id, data)
-      @mutex.synchronize {
-        @timestamps[session_id] = Time.now
-        @sessions[session_id] = data
-      }
-    end
-    
-    # ==== Parameters
-    # session_id<String>:: ID of the session to delete.
-    # 
-    # @api private
-    def delete_session(session_id)
-      @mutex.synchronize {
-        @timestamps.delete(session_id)
-        @sessions.delete(session_id)
-      }
-    end
-    
-    # Deletes any sessions that have reached their maximum validity.
-    # 
-    # @api private
-    def reap_expired_sessions
-      @timestamps.each do |session_id,stamp|
-        delete_session(session_id) if (stamp + @session_ttl) < Time.now 
-      end
-      GC.start
-    end
-    
-    # Starts the timer that will eventually reap outdated sessions.
-    # 
-    # @api private
-    def start_timer
-      Thread.new do
-        loop {
-          sleep @session_ttl
-          reap_expired_sessions
-        } 
-      end  
-    end
-    
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/store_container.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/store_container.rb
deleted file mode 100644
index 404d2aa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/session/store_container.rb
+++ /dev/null
@@ -1,162 +0,0 @@
-module Merb
-  
-  class SessionStoreContainer < SessionContainer
-    
-    class_inheritable_accessor :store
-    attr_accessor  :_fingerprint
-    
-    # The class attribute :store holds a reference to an object that implements 
-    # the following interface:
-    #
-    # - retrieve_session(session_id) # returns a Hash
-    # - store_session(session_id, data) # expects data to be Hash
-    # - delete_session(session_id)
-    #
-    # You can use session store classes directly by assigning to :store in your
-    # config/init.rb after_app_loads step, for example:
-    #
-    #   Merb::BootLoader.after_app_loads do
-    #     SessionStoreContainer.store = MemorySession.new
-    #   end
-    #
-    # Or you can inherit from SessionStoreContainer to create a SessionContainer
-    # that delegates to aggregated store.
-    #
-    #   class MemorySession < SessionStoreContainer
-    #     self.session_store_type = :memory
-    #   end
-    #
-    #   class MemoryContainer
-    #   
-    #     def self.retrieve_session(session_id)
-    #       ...
-    #     end
-    #   
-    #     def self.store_session(session_id, data)
-    #       ...
-    #     end
-    #   
-    #     def self.delete_session(session_id)
-    #       ...
-    #     end
-    #   
-    #   end    
-    # When used directly, report as :store store
-    self.session_store_type = :store
-    
-    class << self
-      
-      # Generates a new session ID and creates a new session.
-      # 
-      # ==== Returns
-      # SessionStoreContainer:: The new session.
-      # 
-      # @api private
-      def generate
-        session = new(Merb::SessionMixin.rand_uuid)
-        session.needs_new_cookie = true
-        session
-      end
-      
-      # Setup a new session or retreive an existing session.
-      # 
-      # ==== Parameters
-      # request<Merb::Request>:: The Merb::Request that came in from Rack.
-      # 
-      # ==== Notes
-      # If no sessions were found, a new SessionContainer will be generated.
-      # 
-      # ==== Returns
-      # SessionContainer:: a SessionContainer.
-      # 
-      # @api private
-      def setup(request)
-        session = retrieve(request.session_id)
-        request.session = session
-        # TODO Marshal.dump is slow - needs optimization
-        session._fingerprint = Marshal.dump(request.session.to_hash).hash
-        session
-      end
-            
-      private
-      
-      # ==== Parameters
-      # session_id<String:: The ID of the session to retrieve.
-      #
-      # ==== Returns
-      # SessionStoreContainer:: SessionStoreContainer instance with the session data. If no
-      #   sessions matched session_id, a new SessionStoreContainer will be generated.
-      #
-      # ==== Notes
-      # If there are persisted exceptions callbacks to execute, they all get executed
-      # when Memcache library raises an exception.
-      # 
-      # @api private
-      def retrieve(session_id)
-        unless session_id.blank?
-          begin
-            session_data = store.retrieve_session(session_id)
-          rescue => err
-            Merb.logger.warn!("Could not retrieve session from #{self.name}: #{err.message}")
-          end
-          # Not in container, but assume that cookie exists
-          session_data = new(session_id) if session_data.nil?
-        else
-          # No cookie...make a new session_id
-          session_data = generate
-        end
-        if session_data.is_a?(self)
-          session_data
-        else
-          # Recreate using the existing session as the data, when switching 
-          # from another session type for example, eg. cookie to memcached
-          # or when the data is just a hash
-          new(session_id).update(session_data)
-        end
-      end
-
-    end
-    
-    # Teardown and/or persist the current session.
-    #
-    # If @_destroy is true, clear out the session completely, including
-    # removal of the session cookie itself.
-    #
-    # ==== Parameters
-    # request<Merb::Request>:: The Merb::Request that came in from Rack.
-    #
-    # ==== Notes
-    # The data (self) is converted to a Hash first, since a container might 
-    # choose to do a full Marshal on the data, which would make it persist 
-    # attributes like 'needs_new_cookie', which it shouldn't.
-    # 
-    # @api private
-    def finalize(request)
-      if @_destroy
-        store.delete_session(self.session_id)
-        request.destroy_session_cookie
-      else
-        if _fingerprint != Marshal.dump(data = self.to_hash).hash
-          begin
-            store.store_session(request.session(self.class.session_store_type).session_id, data)
-          rescue => err
-            Merb.logger.warn!("Could not persist session to #{self.class.name}: #{err.message}")
-          end
-        end
-        if needs_new_cookie || Merb::SessionMixin.needs_new_cookie?
-          request.set_session_id_cookie(self.session_id)
-        end
-      end
-    end
-    
-    # Regenerate the session ID.
-    # 
-    # @api private
-    def regenerate
-      store.delete_session(self.session_id)
-      self.session_id = Merb::SessionMixin.rand_uuid
-      store.store_session(self.session_id, self)
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/worker.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/worker.rb
deleted file mode 100644
index 1d4a7b8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/dispatch/worker.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-module Merb
-  class Worker
-    
-    attr_accessor :thread
-    
-    # ==== Returns
-    # Merb::Worker:: instance of a worker.
-    # 
-    # @api private
-    def self.start
-      new
-    end
-    
-    # Creates a new worker thread that loops over the work queue.
-    # 
-    # @api private
-    def initialize
-      @thread = Thread.new { loop { process_queue } }
-    end
-    
-    # Processes tasks in the Merb::Dispatcher.work_queue.
-    # 
-    # @api private
-    def process_queue
-      begin
-        while blk = Merb::Dispatcher.work_queue.pop
-           # we've been blocking on the queue waiting for an item sleeping.
-           # when someone pushes an item it wakes up this thread so we 
-           # immediately pass execution to the scheduler so we don't 
-           # accidentally run this block before the action finishes 
-           # it's own processing
-          Thread.pass
-          blk.call
-        end
-      rescue Exception => e
-        Merb.logger.warn! %Q!Worker Thread Crashed with Exception:\n#{Merb.exception(e)}\nRestarting Worker Thread!
-        retry
-      end
-    end
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/gem_ext/erubis.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/gem_ext/erubis.rb
deleted file mode 100644
index 22f712d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/gem_ext/erubis.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require 'erubis'
-module Erubis
-  # This adds support for embedding the return value of a block call:
-  #   <%= foo do %>...<% end =%>
-  #
-  # @api private
-  module Basic::Converter
-    def convert_input(src, input)
-      pat = @pattern
-      regexp = pat.nil? || pat == '<% %>' ? DEFAULT_REGEXP : pattern_regexp(pat)
-      pos = 0
-      is_bol = true     # is beginning of line
-      input.scan(regexp) do |indicator, code, tailch, rspace|
-        match = Regexp.last_match()
-        len  = match.begin(0) - pos
-        text = input[pos, len]
-        pos  = match.end(0)
-        ch   = indicator ? indicator[0] : nil
-        lspace = ch == ?= ? nil : detect_spaces_at_bol(text, is_bol)
-        is_bol = rspace ? true : false
-        add_text(src, text) if text && !text.empty?
-        ## * when '<%= %>', do nothing
-        ## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
-        if ch == ?=              # <%= %>
-          rspace = nil if tailch && !tailch.empty?
-          add_text(src, lspace) if lspace
-          add_expr(src, code, indicator)
-          add_text(src, rspace) if rspace
-        elsif ch == ?\#          # <%# %>
-          n = code.count("\n") + (rspace ? 1 : 0)
-          if @trim && lspace && rspace
-            add_stmt(src, "\n" * n)
-          else
-            add_text(src, lspace) if lspace
-            add_stmt(src, "\n" * n)
-            add_text(src, rspace) if rspace
-          end
-        elsif ch == ?%           # <%% %>
-          s = "#{lspace}#{@prefix||='<%'}#{code}#{tailch}#{@postfix||='%>'}#{rspace}"
-          add_text(src, s)
-        else                     # <% %>
-          if @trim && lspace && rspace
-            if respond_to?(:add_stmt2)
-              add_stmt2(src, "#{lspace}#{code}#{rspace}", tailch)
-            else
-              add_stmt(src, "#{lspace}#{code}#{rspace}")
-            end
-          else
-            add_text(src, lspace) if lspace
-            if respond_to?(:add_stmt2)
-              add_stmt2(src, code, tailch)
-            else
-              add_stmt(src, code)
-            end
-            add_text(src, rspace) if rspace
-          end
-        end
-      end
-      #rest = $' || input                        # ruby1.8
-      rest = pos == 0 ? input : input[pos..-1]   # ruby1.9
-      add_text(src, rest)
-    end
-    
-  end
-  
-  class MEruby < Erubis::Eruby
-    include PercentLineEnhancer
-    include StringBufferEnhancer
-  end
-
-  # Loads a file, runs it through Erubis and parses it as YAML.
-  #
-  # ===== Parameters
-  # file<String>:: The name of the file to load.
-  # binding<Binding>::
-  #   The binding to use when evaluating the ERB tags. Defaults to the current
-  #   binding.
-  def self.load_yaml_file(file, binding = binding)
-    YAML::load(Erubis::MEruby.new(IO.read(File.expand_path(file))).result(binding))
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/logger.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/logger.rb
deleted file mode 100755
index fb6e314..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/logger.rb
+++ /dev/null
@@ -1,193 +0,0 @@
-# Merb::Logger = Extlib::Logger
-
-class Merb::Logger < Extlib::Logger
-  def verbose!(message, level = :warn)
-    send("#{level}!", message) if Merb::Config[:verbose]
-  end
-
-  def verbose(message, level = :warn)
-    send(level, message) if Merb::Config[:verbose]
-  end
-end
-
-# require "time" # httpdate
-# ==== Public Merb Logger API
-#
-# To replace an existing logger with a new one:
-#  Merb::Logger.set_log(log{String, IO},level{Symbol, String})
-#
-# Available logging levels are
-#   Merb::Logger::{ Fatal, Error, Warn, Info, Debug }
-#
-# Logging via:
-#   Merb.logger.fatal(message<String>,&block)
-#   Merb.logger.error(message<String>,&block)
-#   Merb.logger.warn(message<String>,&block)
-#   Merb.logger.info(message<String>,&block)
-#   Merb.logger.debug(message<String>,&block)
-#
-# Logging with autoflush:
-#   Merb.logger.fatal!(message<String>,&block)
-#   Merb.logger.error!(message<String>,&block)
-#   Merb.logger.warn!(message<String>,&block)
-#   Merb.logger.info!(message<String>,&block)
-#   Merb.logger.debug!(message<String>,&block)
-#
-# Flush the buffer to
-#   Merb.logger.flush
-#
-# Remove the current log object
-#   Merb.logger.close
-#
-# ==== Private Merb Logger API
-#
-# To initialize the logger you create a new object, proxies to set_log.
-#   Merb::Logger.new(log{String, IO},level{Symbol, String})
-module Merb
-
-  class Logger
-
-    attr_accessor :level
-    attr_accessor :delimiter
-    attr_accessor :auto_flush
-    attr_reader   :buffer
-    attr_reader   :log
-    attr_reader   :init_args
-
-    # ==== Notes
-    # Ruby (standard) logger levels:
-    # :fatal:: An unhandleable error that results in a program crash
-    # :error:: A handleable error condition
-    # :warn:: A warning
-    # :info:: generic (useful) information about system operation
-    # :debug:: low-level information for developers
-    Levels = Mash.new({
-      :fatal => 7,
-      :error => 6,
-      :warn  => 4,
-      :info  => 3,
-      :debug => 0
-    }) unless const_defined?(:Levels)
-
-    @@mutex = {}
-
-    public
-
-    # To initialize the logger you create a new object, proxies to set_log.
-    #
-    # ==== Parameters
-    # *args:: Arguments to create the log from. See set_logs for specifics.
-    def initialize(*args)
-      set_log(*args)
-    end
-
-    # Replaces an existing logger with a new one.
-    #
-    # ==== Parameters
-    # log<IO, String>:: Either an IO object or a name of a logfile.
-    # log_level<~to_sym>::
-    #   The log level from, e.g. :fatal or :info. Defaults to :error in the
-    #   production environment and :debug otherwise.
-    # delimiter<String>::
-    #   Delimiter to use between message sections. Defaults to " ~ ".
-    # auto_flush<Boolean>::
-    #   Whether the log should automatically flush after new messages are
-    #   added. Defaults to false.
-    def set_log(stream = Merb::Config[:log_stream],
-      log_level = Merb::Config[:log_level],
-      delimiter = Merb::Config[:log_delimiter],
-      auto_flush = Merb::Config[:log_auto_flush])
-
-      @buffer                   = []
-      @delimiter                = delimiter
-      @auto_flush               = auto_flush
-
-      if Levels[log_level]
-        @level                  = Levels[log_level]
-      else
-        @level                  = log_level
-      end
-
-      @log                      = stream
-      @log.sync                 = true
-      @mutex = (@@mutex[@log] ||= Mutex.new)
-    end
-
-    # Flush the entire buffer to the log object.
-    def flush
-      return unless @buffer.size > 0
-      @mutex.synchronize do
-        @log.write(@buffer.slice!(0..-1).to_s)
-      end
-    end
-
-    # Close and remove the current log object.
-    def close
-      flush
-      @log.close if @log.respond_to?(:close) && !@log.tty?
-      @log = nil
-    end
-
-    # Appends a message to the log. The methods yield to an optional block and
-    # the output of this block will be appended to the message.
-    #
-    # ==== Parameters
-    # string<String>:: The message to be logged. Defaults to nil.
-    #
-    # ==== Returns
-    # String:: The resulting message added to the log file.
-    def <<(string = nil)
-      message = ""
-      message << delimiter
-      message << string if string
-      message << "\n" unless message[-1] == ?\n
-      @buffer << message
-      flush if @auto_flush
-
-      message
-    end
-    alias :push :<<
-
-    # Generate the logging methods for Merb.logger for each log level.
-    Levels.each_pair do |name, number|
-      class_eval <<-LEVELMETHODS, __FILE__, __LINE__
-
-      # Appends a message to the log if the log level is at least as high as
-      # the log level of the logger.
-      #
-      # ==== Parameters
-      # string<String>:: The message to be logged. Defaults to nil.
-      #
-      # ==== Returns
-      # self:: The logger object for chaining.
-      def #{name}(message = nil)
-        self << message if #{number} >= level
-        self
-      end
-
-      # Appends a message to the log if the log level is at least as high as
-      # the log level of the logger. The bang! version of the method also auto
-      # flushes the log buffer to disk.
-      #
-      # ==== Parameters
-      # string<String>:: The message to be logged. Defaults to nil.
-      #
-      # ==== Returns
-      # self:: The logger object for chaining.
-      def #{name}!(message = nil)
-        self << message if #{number} >= level
-        flush if #{number} >= level
-        self
-      end
-
-      # ==== Returns
-      # Boolean:: True if this level will be logged by this logger.
-      def #{name}?
-        #{number} >= level
-      end
-      LEVELMETHODS
-    end
-
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/plugins.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/plugins.rb
deleted file mode 100644
index 7fb4021..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/plugins.rb
+++ /dev/null
@@ -1,80 +0,0 @@
-module Merb
-
-  module Plugins
-
-    # Returns the configuration settings hash for plugins. This is prepopulated from
-    # Merb.root / "config/plugins.yml" if it is present.
-    #
-    # ==== Returns
-    # Hash::
-    #   The configuration loaded from Merb.root / "config/plugins.yml" or, if
-    #   the load fails, an empty hash whose default value is another Hash.
-    #
-    # @api plugin
-    def self.config
-      @config ||= begin
-        # this is so you can do Merb.plugins.config[:helpers][:awesome] = "bar"
-        config_hash = Hash.new {|h,k| h[k] = {}}
-        file = Merb.root / "config" / "plugins.yml"
-
-        if File.exists?(file)
-          require 'yaml'
-          to_merge = YAML.load_file(file)
-        else
-          to_merge = {}
-        end
-        
-        config_hash.merge(to_merge)
-      end
-    end
-
-    # ==== Returns
-    # Array(String):: All Rakefile load paths Merb uses for plugins.
-    #
-    # @api plugin
-    def self.rakefiles
-      Merb.rakefiles
-    end
-    
-    # ==== Returns
-    # Array(String):: All Generator load paths Merb uses for plugins.
-    #
-    # @api plugin
-    def self.generators
-      Merb.generators
-    end
-
-    # ==== Parameters
-    # *rakefiles:: Rakefiles to add to the list of plugin Rakefiles.
-    #
-    # ==== Notes
-    #
-    # This is a recommended way to register your plugin's Raketasks
-    # in Merb.
-    #
-    # ==== Examples
-    # From merb_sequel plugin:
-    #
-    # if defined(Merb::Plugins)
-    #   Merb::Plugins.add_rakefiles "merb_sequel" / "merbtasks"
-    # end
-    #
-    # @api plugin
-    def self.add_rakefiles(*rakefiles)
-      Merb.add_rakefiles(*rakefiles)
-    end
-    
-    # ==== Parameters
-    # *generators:: Generator paths to add to the list of plugin generators.
-    #
-    # ==== Notes
-    #
-    # This is the recommended way to register your plugin's generators
-    # in Merb.
-    #
-    # @api plugin
-    def self.add_generators(*generators)
-      Merb.add_generators(*generators)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack.rb
deleted file mode 100644
index 4d62b6c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require 'rack'
-module Merb
-  module Rack
-    autoload :Application,         'merb-core/rack/application'
-    autoload :Adapter,             'merb-core/rack/adapter'
-    autoload :AbstractAdapter,     'merb-core/rack/adapter/abstract'
-    autoload :Ebb,                 'merb-core/rack/adapter/ebb'
-    autoload :EventedMongrel,      'merb-core/rack/adapter/evented_mongrel'    
-    autoload :FastCGI,             'merb-core/rack/adapter/fcgi'
-    autoload :Irb,                 'merb-core/rack/adapter/irb'
-    autoload :Middleware,          'merb-core/rack/middleware'
-    autoload :Mongrel,             'merb-core/rack/adapter/mongrel'
-    autoload :Runner,              'merb-core/rack/adapter/runner'    
-    autoload :SwiftipliedMongrel,  'merb-core/rack/adapter/swiftiplied_mongrel'
-    autoload :Thin,                'merb-core/rack/adapter/thin'
-    autoload :ThinTurbo,           'merb-core/rack/adapter/thin_turbo'
-    autoload :WEBrick,             'merb-core/rack/adapter/webrick'
-    autoload :PathPrefix,          'merb-core/rack/middleware/path_prefix'
-    autoload :Static,              'merb-core/rack/middleware/static'
-    autoload :Profiler,            'merb-core/rack/middleware/profiler'
-    autoload :Tracer,              'merb-core/rack/middleware/tracer'
-    autoload :ContentLength,       'merb-core/rack/middleware/content_length'
-    autoload :ConditionalGet,      'merb-core/rack/middleware/conditional_get'
-    autoload :StreamWrapper,       'merb-core/rack/stream_wrapper'
-    autoload :Helpers,             'merb-core/rack/helpers'
-  end # Rack
-end # Merb
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter.rb
deleted file mode 100644
index bf7aa7d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-module Merb
-  
-  module Rack
-    
-    class Adapter
-
-      class << self
-        # Get a rack adapter by id. 
-        # ==== Parameters
-        # id<String>:: The identifier of the Rack adapter class to retrieve.
-        #
-        # ==== Returns.
-        # Class:: The adapter class.
-        def get(id)
-          if @adapters[id.to_s]
-            Object.full_const_get(@adapters[id.to_s])
-          else
-            Merb.fatal! "The adapter #{id} did not exist"
-          end
-        end
-
-        # Registers a new Rack adapter.
-        #
-        # ==== Parameters
-        # ids<Array>:: Identifiers by which this adapter is recognized by.
-        # adapter_class<Class>:: The Rack adapter class.
-        def register(ids, adapter_class)
-          @adapters ||= Hash.new
-          ids.each { |id| @adapters[id] = "Merb::Rack::#{adapter_class}" }
-        end
-      end # class << self
-      
-    end # Adapter
-    
-    # Register some Rack adapters
-    Adapter.register %w{ebb},            :Ebb
-    Adapter.register %w{emongrel},       :EventedMongrel
-    Adapter.register %w{fastcgi fcgi},   :FastCGI
-    Adapter.register %w{irb},            :Irb
-    Adapter.register %w{mongrel},        :Mongrel  
-    Adapter.register %w{runner},         :Runner
-    Adapter.register %w{smongrel swift}, :SwiftipliedMongrel
-    Adapter.register %w{thin},           :Thin
-    Adapter.register %w{thin-turbo tt},  :ThinTurbo
-    Adapter.register %w{webrick},        :WEBrick
-    
-  end # Rack
-end # Merb
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/abstract.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/abstract.rb
deleted file mode 100644
index cc22400..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/abstract.rb
+++ /dev/null
@@ -1,268 +0,0 @@
-module Merb
-  module Rack
-    class AbstractAdapter
-
-      # This method is designed to be overridden in a rack adapter.  It 
-      # will be called to start a server created with the new_server method.
-      # This is called from the AbstractAdapter start method.
-      #
-      # @api plugin
-      # @overridable
-      def self.start_server
-        raise NotImplemented
-      end
-      
-      # This method is designed to be overridden in a rack adapter.  It will
-      # be called to create a new instance of the server for the adapter to 
-      # start.  The adapter should attempt to bind to a port at this point. 
-      # This is called from the AbstractAdapter start method.
-      #
-      # ==== Parameters
-      # port<Integer>:: The port the server should listen on
-      #
-      # @api plugin
-      # @overridable
-      def self.new_server(port)
-        raise NotImplemented
-      end
-      
-      # This method is designed to be overridden in a rack adapter.  It will
-      # be called to stop the adapter server.  
-      #
-      # ==== Parameters
-      # status<Integer>:: The exit status the adapter should exit with. 
-      #
-      # ==== Returns
-      # Boolean:: True if the server was properly stopped.  
-      #
-      # @api plugin
-      # @overridable
-      def self.stop(status)
-        raise NotImplemented
-      end
-
-      # Spawn a new worker process at a port.
-      #
-      # ==== Parameters
-      # port<Integer>:: The port to start the worker process on. 
-      #
-      # @api private
-      def self.spawn_worker(port)
-        worker_pid = Kernel.fork
-        start_at_port(port, @opts) unless worker_pid
-
-        # If we have a worker_pid, we're in the parent.
-        throw(:new_worker) unless worker_pid
-
-        @pids[port] = worker_pid
-        $WORKERS = @pids.values
-      end
-
-      # The main start method for bootloaders that support forking.
-      # This method launches the adapters which inherit using the 
-      # new_server and start_server methods.  This method should not
-      # be overridden in adapters which want to fork.  
-      #
-      # ==== Parameters
-      # opts<Hash>:: A hash of options
-      #   socket: the socket to bind to
-      #   port: the port to bind to
-      #   cluster: the number 
-      #
-      # @api private
-      def self.start(opts={})
-        @opts = opts
-        $WORKERS ||= []
-        parent = nil
-
-        @pids = {}
-        port = (opts[:socket] || opts[:port]).to_i
-        max_port = Merb::Config[:cluster] ? Merb::Config[:cluster] - 1 : 0
-
-        # If we only have a single merb, just start it up and dispense with
-        # the spawner/worker setup.
-        if max_port == 0
-          start_at_port(port)
-          return
-        end
-
-        $0 = process_title(:spawner, port)
-
-        # For each port, spawn a new worker. The parent will continue in
-        # the loop, while the worker will throw :new_worker and be booted
-        # out of the loop.
-        catch(:new_worker) do
-          0.upto(max_port) do |i|
-            parent = spawn_worker(port + i)
-          end
-        end
-
-        # If we're in a worker, we're done. Otherwise, we've completed
-        # setting up workers and now need to watch them.
-        return unless parent
-
-        # For each worker, set up a thread in the spawner to watch it
-        0.upto(max_port) do |i|
-          Thread.new do
-            catch(:new_worker) do
-              loop do
-                pid = @pids[port + i]
-                begin
-                  # Watch for the pid to exit.
-                  _, status = Process.wait2(pid)
-
-                  # If the pid doesn't exist, we want to silently exit instead of
-                  # raising here.
-                rescue SystemCallError => e
-                ensure
-                  # If there was no worker with that PID, the status was non-0
-                  # (we send back a status of 128 when ABRT is called on a 
-                  # worker, and Merb.fatal! exits with a status of 1), or if
-                  # Merb is in the process of exiting, *then* don't respawn.
-                  # Note that processes killed with kill -9 will return no
-                  # exitstatus, and we respawn them.
-                  if !status || 
-                    (status.exitstatus && status.exitstatus != 0) || 
-                    Merb.exiting then
-                    Thread.exit
-                  end
-                end
-
-                # Otherwise, respawn the worker, and watch it again.
-                spawn_worker(port + i)
-              end
-            end
-          end
-        end
-
-        # The spawner process will make it here, and when it does, it should just 
-        # sleep so it can pick up ctrl-c if it's in console mode.
-        sleep
-
-      end
-
-      # Fork a server on the specified port and start the app.
-      #
-      # ==== Parameters
-      # port<Integer>:: The port to start the server on
-      # opts<Hash>:: The hash of options, defaults to the @opts 
-      #   instance variable.  
-      #
-      # @api private
-      def self.start_at_port(port, opts = @opts)
-        at_exit do
-          Merb::Server.remove_pid(port)
-        end
-
-        Merb::Worker.start unless Merb.testing?
-
-        # If Merb is daemonized, trap INT. If it's not daemonized,
-        # we let the master process' ctrl-c control the cluster
-        # of workers.
-        if Merb::Config[:daemonize]
-          Merb.trap('INT') do
-            stop
-            Merb.logger.warn! "Exiting port #{port}\n"
-            exit_process
-          end
-          # If it was not fork_for_class_load, we already set up
-          # ctrl-c handlers in the master thread.
-        elsif Merb::Config[:fork_for_class_load]
-          if Merb::Config[:console_trap]
-            Merb::Server.add_irb_trap
-          end
-        end
-
-        # In daemonized mode or not, support HUPing the process to
-        # restart it.
-        Merb.trap('HUP') do
-          Merb.exiting = true
-          stop
-          Merb.logger.warn! "Exiting port #{port} on #{Process.pid}\n"
-          exit_process
-        end
-
-        # ABRTing the process will kill it, and it will not be respawned.
-        Merb.trap('ABRT') do
-          Merb.exiting = true
-          stopped = stop(128)
-          Merb.logger.warn! "Exiting port #{port}\n" if stopped
-          exit_process(128)
-        end
-
-        # Each worker gets its own `ps' name.
-        $0 = process_title(:worker, port)
-
-        # Store the PID for this worker
-        Merb::Server.store_pid(port)
-
-        Merb::Config[:log_delimiter] = "#{process_title(:worker, port)} ~ "
-
-        Merb.reset_logger!
-        Merb.logger.warn!("Starting #{self.name.split("::").last} at port #{port}")
-
-        # If we can't connect to the port, keep trying until we can. Print
-        # a warning about this once. Try every 0.25s.
-        printed_warning = false
-        loop do
-          begin
-            # Call the adapter's new_server method, which should attempt
-            # to bind to a port.
-            new_server(port)
-          rescue Errno::EADDRINUSE
-            unless printed_warning
-              Merb.logger.warn! "Port #{port} is in use, " \
-                "Waiting for it to become available."
-              printed_warning = true
-            end
-
-            sleep 0.25
-            next
-          end
-          break
-        end
-
-        Merb.logger.warn! "Successfully bound to port #{port}"
-
-        Merb::Server.change_privilege
-
-        # Call the adapter's start_server method.
-        start_server
-      end
-
-      # Exit the process with the specified status.  
-      #
-      # ==== Parameters
-      # status<Integer>:: The exit code of the process.
-      # 
-      # @api private
-      def self.exit_process(status = 0)
-        exit(status)
-      end
-
-      # Set the process title.
-      #
-      # ==== Parameters
-      # whoami<Symbol>:: Either :spawner for the master process or :worker for any of the worker
-      #   processes. 
-      # port<Integer>:: The base port that the app is running on. 
-      #
-      # @api private
-      def self.process_title(whoami, port)
-        name = Merb::Config[:name]
-        app  = "merb#{" : #{name}" if (name && name != "merb")}"
-        max_port  = Merb::Config[:cluster] ? (Merb::Config[:cluster] - 1) : 0
-        numbers   = ((whoami != :worker) && (max_port > 0)) ? "#{port}..#{port + max_port}" : port
-        file      = Merb::Config[:socket_file] % port if Merb::Config[:socket_file]
-        
-        listening_on = if Merb::Config[:socket]
-          "socket#{'s' if max_port > 0 && whoami != :worker} #{numbers} "\
-          "#{file ? file : "#{Merb.log_path}/#{name}.#{port}.sock"}"
-        else
-          "port#{'s' if max_port > 0 && whoami != :worker} #{port}"
-        end
-        "#{app} : #{whoami} (#{listening_on})"
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/ebb.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/ebb.rb
deleted file mode 100644
index 219b3fd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/ebb.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require 'ebb'
-module Merb
-  
-  module Rack
-
-    class Ebb < Merb::Rack::AbstractAdapter
-      # start an Ebb server on given host and port.
-      
-      def self.new_server(port)
-        Merb::Dispatcher.use_mutex = false
-        opts = @opts.merge(:port => port)
-        @th = Thread.new { Thread.current[:server] = ::Ebb.start_server(opts[:app], opts) }
-      end
-      
-      def self.start_server
-        @th.join
-      end
-      
-      def self.stop(status = 0)
-        ::Ebb.stop_server
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/evented_mongrel.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/evented_mongrel.rb
deleted file mode 100644
index 2712980..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/evented_mongrel.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'swiftcore/evented_mongrel'
-require 'merb-core/rack/handler/mongrel'
-module Merb
-  module Rack
-
-    class EventedMongrel < Mongrel
-      def self.new_server(port)
-        Merb::Dispatcher.use_mutex = false
-        super
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/fcgi.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/fcgi.rb
deleted file mode 100644
index 032b149..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/fcgi.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-module Merb
-  module Rack
-    
-    class FastCGI
-      # ==== Parameters
-      # opts<Hash>:: Options for FastCGI (see below).
-      #
-      # ==== Options (opts)
-      # :app<String>>:: The application name.
-      def self.start(opts={})
-        Merb.logger.warn!("Using FastCGI adapter")
-        Merb::Server.change_privilege
-        ::Rack::Handler::FastCGI.run(opts[:app], opts)
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/irb.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/irb.rb
deleted file mode 100644
index 4d22055..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/irb.rb
+++ /dev/null
@@ -1,164 +0,0 @@
-module Merb
-  module Rack
-    class Console
-      # There are three possible ways to use this method.  First, if you have a named route, 
-      # you can specify the route as the first parameter as a symbol and any paramters in a 
-      # hash.  Second, you can generate the default route by just passing the params hash, 
-      # just passing the params hash.  Finally, you can use the anonymous parameters.  This 
-      # allows you to specify the parameters to a named route in the order they appear in the 
-      # router.  
-      #
-      # ==== Parameters(Named Route)
-      # name<Symbol>:: 
-      #   The name of the route. 
-      # args<Hash>:: 
-      #   Parameters for the route generation.
-      #
-      # ==== Parameters(Default Route)
-      # args<Hash>:: 
-      #   Parameters for the route generation.  This route will use the default route. 
-      #
-      # ==== Parameters(Anonymous Parameters)
-      # name<Symbol>::
-      #   The name of the route.  
-      # args<Array>:: 
-      #   An array of anonymous parameters to generate the route
-      #   with. These parameters are assigned to the route parameters
-      #   in the order that they are passed.
-      #
-      # ==== Returns
-      # String:: The generated URL.
-      #
-      # ==== Examples
-      # Named Route
-      #
-      # Merb::Router.prepare do
-      #   match("/articles/:title").to(:controller => :articles, :action => :show).name("articles")
-      # end
-      #
-      # url(:articles, :title => "new_article")
-      #
-      # Default Route
-      #
-      # Merb::Router.prepare do
-      #   default_routes
-      # end
-      #
-      # url(:controller => "articles", :action => "new")
-      #
-      # Anonymous Paramters
-      #
-      # Merb::Router.prepare do
-      #   match("/articles/:year/:month/:title").to(:controller => :articles, :action => :show).name("articles")
-      # end
-      #
-      # url(:articles, 2008, 10, "test_article")
-      #
-      # @api public
-      def url(name, *args)
-        args << {}
-        Merb::Router.url(name, *args)
-      end
-
-      # Reloads classes using Merb::BootLoader::ReloadClasses.
-      def reload!
-        Merb::BootLoader::ReloadClasses.reload
-      end
-
-      # Prints all routes for the application.
-      def show_routes
-        seen = []
-        unless Merb::Router.named_routes.empty?
-          puts "==== Named routes"
-          Merb::Router.named_routes.each do |name,route|
-            # something weird happens when you combine sprintf and irb
-            puts "Helper     : #{name}"
-            meth = $1.upcase if route.conditions[:method].to_s =~ /(get|post|put|delete)/
-            puts "HTTP method: #{meth || 'GET'}"
-            puts "Route      : #{route}"
-            puts "Params     : #{route.params.inspect}"
-            puts
-            seen << route
-          end
-        end
-        puts "==== Anonymous routes"
-        (Merb::Router.routes - seen).each do |route|
-          meth = $1.upcase if route.conditions[:method].to_s =~ /(get|post|put|delete)/
-          puts "HTTP method: #{meth || 'GET'}"
-          puts "Route      : #{route}"
-          puts "Params     : #{route.params.inspect}"
-          puts
-        end
-        nil
-      end
-
-      # Starts a sandboxed session (delegates to any Merb::Orms::* modules).
-      #
-      # An ORM should implement Merb::Orms::MyOrm#open_sandbox! to support this.
-      # Usually this involves starting a transaction.
-      def open_sandbox!
-        puts "Loading #{Merb.environment} environment in sandbox (Merb #{Merb::VERSION})"
-        puts "Any modifications you make will be rolled back on exit"
-        orm_modules.each { |orm| orm.open_sandbox! if orm.respond_to?(:open_sandbox!) }
-      end
-
-      # Ends a sandboxed session (delegates to any Merb::Orms::* modules).
-      #
-      # An ORM should implement Merb::Orms::MyOrm#close_sandbox! to support this.
-      # Usually this involves rolling back a transaction.
-      def close_sandbox!
-        orm_modules.each { |orm| orm.close_sandbox! if orm.respond_to?(:close_sandbox!) }
-        puts "Modifications have been rolled back"
-      end
-
-      # Explictly show logger output during IRB session
-      def trace_log!
-        Merb.logger.auto_flush = true
-      end
-
-      private
-
-      # ==== Returns
-      # Array:: All Merb::Orms::* modules.
-      def orm_modules
-        if Merb.const_defined?('Orms')
-          Merb::Orms.constants.map { |c| Merb::Orms::const_get(c) }
-        else
-          []
-        end
-      end
-
-    end
-
-    class Irb
-      # ==== Parameters
-      # opts<Hash>:
-      #   Options for IRB. Currently this is not used by the IRB adapter.
-      #
-      # ==== Notes
-      # If the +.irbrc+ file exists, it will be loaded into the IRBRC
-      # environment variable.
-      def self.start(opts={})
-        m = Merb::Rack::Console.new
-        m.extend Merb::Test::RequestHelper
-        Object.send(:define_method, :merb) { m }
-        ARGV.clear # Avoid passing args to IRB
-        m.open_sandbox! if sandboxed?
-        require 'irb'
-        require 'irb/completion'
-        if File.exists? ".irbrc"
-          ENV['IRBRC'] = ".irbrc"
-        end
-        IRB.start
-        at_exit do merb.close_sandbox! if sandboxed? end
-        exit
-      end
-
-      private
-
-      def self.sandboxed?
-        Merb::Config[:sandbox]
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/mongrel.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/mongrel.rb
deleted file mode 100644
index 553f439..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/mongrel.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-begin
-  require 'mongrel'
-rescue LoadError => e
-  Merb.fatal! "Mongrel is not installed, but you are trying to use it. " \
-              "You need to either install mongrel or a different Ruby web " \
-              "server, like thin."
-end
-
-require 'merb-core/rack/handler/mongrel'
-
-module Merb
-
-  module Rack
-
-    class Mongrel < Merb::Rack::AbstractAdapter
-
-      def self.stop(status = 0)
-        if @server
-          begin
-            @server.stop(true)
-          rescue Mongrel::TimeoutError
-            Merb.logger.fatal! "Your process took too long to shut " \
-              "down, so mongrel killed it."
-          end
-          true
-        end
-      end
-      
-      def self.new_server(port)
-        @server = ::Mongrel::HttpServer.new(@opts[:host], port)
-      end
-      
-      def self.start_server
-        @server.register('/', ::Merb::Rack::Handler::Mongrel.new(@opts[:app]))
-        @server.run.join
-      end
-      
-    end
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/runner.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/runner.rb
deleted file mode 100644
index 6f38d7a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/runner.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-module Merb
-  
-  module Rack
-    
-    class Runner
-      # ==== Parameters
-      # opts<Hash>:: Options for the runner (see below).
-      #
-      # ==== Options (opts)
-      # :runner_code<String>:: The code to run.
-      #
-      # ==== Notes
-      # If opts[:runner_code] matches a filename, that file will be read and
-      # the contents executed. Otherwise the code will be executed directly.
-      def self.start(opts={})
-        Merb::Server.change_privilege
-        if opts[:runner_code]
-          if File.exists?(opts[:runner_code])
-            eval(File.read(opts[:runner_code]), TOPLEVEL_BINDING, __FILE__, __LINE__)
-          else
-            eval(opts[:runner_code], TOPLEVEL_BINDING, __FILE__, __LINE__)
-          end
-          exit
-        end  
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb
deleted file mode 100644
index bf18102..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require 'swiftcore/swiftiplied_mongrel'
-require 'merb-core/rack/handler/mongrel'
-module Merb
-  module Rack
-
-    class SwiftipliedMongrel < Mongrel
-      def self.new_server(port)
-        Merb::Dispatcher.use_mutex = false
-        super
-      end      
-    end
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/thin.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/thin.rb
deleted file mode 100644
index 8cffacb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/thin.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require "thin"
-
-module Merb
-
-  module Rack
-
-    class Thin < Merb::Rack::AbstractAdapter
-      # start a Thin server on given host and port.
-
-      def self.new_server(port)
-        Merb::Dispatcher.use_mutex = false
-        
-        if (@opts[:socket] || @opts[:socket_file])
-          socket = port.to_s
-          socket_file = @opts[:socket_file] || "#{Merb.log_path}/#{Merb::Config[:name]}.#{socket}.sock"
-          Merb.logger.warn!("Using Thin adapter with socket file #{socket_file}.")
-          @server = ::Thin::Server.new(socket_file, @opts[:app], @opts)
-        else
-          Merb.logger.warn!("Using Thin adapter on host #{@opts[:host]} and port #{port}.")
-          @opts[:host] = "#{@opts[:host]}-#{port}" if @opts[:host].include?('/')
-          @server = ::Thin::Server.new(@opts[:host], port, @opts[:app], @opts)
-        end
-      end
-
-      def self.start_server
-        ::Thin::Logging.silent = true
-        @server.start
-      end
-      
-      def self.stop(status = 0)
-        if @server
-          @server.stop
-          true
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/thin_turbo.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/thin_turbo.rb
deleted file mode 100644
index c162a63..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/thin_turbo.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require "thin-turbo"
-
-module Merb
-
-  module Rack
-
-    class ThinTurbo < Thin
-      # start a Thin Turbo server on given host and port.
-
-      def self.new_server(port)
-        @opts.merge!(:backend => ::Thin::Backends::Turbo)
-        super
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/webrick.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/webrick.rb
deleted file mode 100644
index 0b36792..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/adapter/webrick.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-require 'webrick'
-require 'webrick/utils'
-require 'rack/handler/webrick'
-module Merb
-  module Rack
-
-    class WEBrick < Merb::Rack::AbstractAdapter
-      
-      class << self
-        attr_accessor :server
-      end
-      
-      def self.new_server(port)
-        options = {
-          :Port        => port,
-          :BindAddress => @opts[:host],
-          :Logger      => Merb.logger,
-          :AccessLog   => [
-            [Merb.logger, ::WEBrick::AccessLog::COMMON_LOG_FORMAT],
-            [Merb.logger, ::WEBrick::AccessLog::REFERER_LOG_FORMAT]
-          ]
-        }
-
-        sockets = ::WEBrick::Utils.create_listeners nil, port
-        @server = ::WEBrick::HTTPServer.new(options.merge(:DoNotListen => true))
-        @server.listeners.replace sockets
-      end
-      
-      def self.start_server
-        @server.mount("/", ::Rack::Handler::WEBrick, @opts[:app])
-        @server.start
-        exit(@status)
-      end
-      
-      def self.stop(status = 0)
-        @status = status
-        @server.shutdown
-      end
-      
-      def self.exit_process(status = 0)
-      end      
-      
-      # start WEBrick server on given host and port.
-      
-      # ==== Parameters
-      # opts<Hash>:: Options for WEBrick (see below).
-      #
-      # ==== Options (opts)
-      # :host<String>:: The hostname that WEBrick should serve.
-      # :port<Fixnum>:: The port WEBrick should bind to.
-      # :app<String>>:: The application name.
-      # def self.start(opts={})
-      #   Merb.logger.warn!("Using Webrick adapter")
-      # 
-      #   options = {
-      #     :Port        => opts[:port],
-      #     :BindAddress => opts[:host],
-      #     :Logger      => Merb.logger,
-      #     :AccessLog   => [
-      #       [Merb.logger, ::WEBrick::AccessLog::COMMON_LOG_FORMAT],
-      #       [Merb.logger, ::WEBrick::AccessLog::REFERER_LOG_FORMAT]
-      #     ]
-      #   }
-      #      
-      #   server = ::WEBrick::HTTPServer.new(options)
-      #   Merb::Server.change_privilege
-      #   server.mount("/", ::Rack::Handler::WEBrick, opts[:app])
-      #   server.start
-      # end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/application.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/application.rb
deleted file mode 100644
index b2c981e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/application.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-module Merb  
-  module Rack
-    class Application
-      
-      # The main rack application call method.  This is the entry point from rack (and the webserver) 
-      # to your application.  
-      #
-      # ==== Parameters
-      # env<Hash>:: A rack request of parameters.  
-      #
-      # ==== Returns
-      # <Array>:: A rack response of [status<Integer>, headers<Hash>, body<String, Stream>]
-      #
-      # @api private
-      def call(env) 
-        begin
-          rack_response = ::Merb::Dispatcher.handle(Merb::Request.new(env))
-        rescue Object => e
-          return [500, {Merb::Const::CONTENT_TYPE => Merb::Const::TEXT_SLASH_HTML}, e.message + Merb::Const::BREAK_TAG + e.backtrace.join(Merb::Const::BREAK_TAG)]
-        end
-        Merb.logger.info Merb::Const::DOUBLE_NEWLINE
-        Merb.logger.flush
-
-        # unless controller.headers[Merb::Const::DATE]
-        #   require "time"
-        #   controller.headers[Merb::Const::DATE] = Time.now.rfc2822.to_s
-        # end
-        rack_response
-      end
-
-      # Determines whether this request is a "deferred_action", usually a long request. 
-      # Rack uses this method to detemine whether to use an evented request or a deferred 
-      # request in evented rack handlers.  
-      #
-      # ==== Parameters
-      # env<Hash>:: The rack request
-      #
-      # ==== Returns
-      # Boolean::
-      #   True if the request should be deferred.  
-      #
-      # @api private
-      def deferred?(env)
-        path = env[Merb::Const::PATH_INFO] ? env[Merb::Const::PATH_INFO].chomp(Merb::Const::SLASH) : Merb::Const::EMPTY_STRING
-        if path =~ Merb.deferred_actions
-          Merb.logger.info! "Deferring Request: #{path}"
-          true
-        else
-          false
-        end        
-      end # deferred?(env)
-    end # Application
-  end # Rack
-end # Merb
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/handler/mongrel.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/handler/mongrel.rb
deleted file mode 100644
index 0a275fc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/handler/mongrel.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-require 'stringio'
-class Mongrel::HttpResponse
-  NO_CLOSE_STATUS_FORMAT = "HTTP/1.1 %d %s\r\n".freeze
-
-  # Sends the status to the client without closing the connection.
-  #
-  # ==== Parameters
-  # content_length<Fixnum>:: The length of the content. Defaults to body length.
-  def send_status_no_connection_close(content_length=@body.length)
-    unless @status_sent
-      write(NO_CLOSE_STATUS_FORMAT % [@status, Mongrel::HTTP_STATUS_CODES[@status]])
-      @status_sent = true
-    end
-  end
-end
-
-module Merb
-  module Rack
-    module Handler
-      class Mongrel < ::Mongrel::HttpHandler
-        # Runs the server and yields it to a block.
-        #
-        # ==== Parameters
-        # app<Merb::Rack::Application>:: The app that Mongrel should handle.
-        # options<Hash>:: Options to pass to Mongrel (see below).
-        #
-        # ==== Block parameters
-        # server<Mongrel::HttpServer>:: The server to run.
-        #
-        # ==== Options (options)
-        # :Host<String>::
-        #   The hostname on which the app should run. Defaults to "0.0.0.0"
-        # :Port<Fixnum>:: The port for the app. Defaults to 8080.
-        def self.run(app, options={})
-          @server = ::Mongrel::HttpServer.new(options[:Host] || '0.0.0.0',
-                                             options[:Port] || 8080)
-          @server.register('/', ::Merb::Rack::Handler::Mongrel.new(app))
-          yield @server  if block_given?
-          @server.run.join
-        end
-  
-        def self.stop(block = true)
-          @server.stop
-        end
-  
-        # ==== Parameters
-        # app<Merb::Rack::Application>:: The app that Mongrel should handle.
-        def initialize(app)
-          @app = app
-        end
-
-        # ==== Parameters
-        # request<Merb::Request>:: The HTTP request to handle.
-        # response<HTTPResponse>:: The response object to write response to.
-        def process(request, response)
-          env = {}.replace(request.params)
-          env.delete Merb::Const::HTTP_CONTENT_TYPE
-          env.delete Merb::Const::HTTP_CONTENT_LENGTH
-  
-          env[Merb::Const::SCRIPT_NAME] = Merb::Const::EMPTY_STRING if env[Merb::Const::SCRIPT_NAME] == Merb::Const::SLASH
-  
-          env.update({"rack.version" => [0,1],
-                       "rack.input" => request.body || StringIO.new(""),
-                       "rack.errors" => STDERR,
-  
-                       "rack.multithread" => true,
-                       "rack.multiprocess" => false, # ???
-                       "rack.run_once" => false,
-  
-                       "rack.url_scheme" => "http"
-                     })
-          env[Merb::Const::QUERY_STRING] ||= ""
-          env.delete Merb::Const::PATH_INFO  if env[Merb::Const::PATH_INFO] == Merb::Const::EMPTY_STRING
-  
-          status, headers, body = @app.call(env)
-  
-          begin
-            response.status = status.to_i
-            headers.each { |k, vs|
-              vs.each { |v|
-                response.header[k] = v
-              }
-            }
-            
-            body.each { |part|
-              response.body << part
-            }
-            response.finished
-          ensure
-            body.close  if body.respond_to? :close
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/helpers.rb
deleted file mode 100644
index 501767d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/helpers.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-module Merb
-  module Rack
-    module Helpers
-      
-      # A helper to build a rack response which implements a redirect.  The status will be set to 
-      # the passed in status if passed.  If you pass in permanent it will be a 301, permanent redirect,
-      # otherwise it defaults to a temporary 302 redirect.  
-      #
-      # ==== Parameters
-      # url<~to_s>:: The url to redirect to.
-      # options<Hash>:: A hash of options for the redirect
-      #   status: The status code to use for the redirect
-      #   permanent:  True if this is a permanent redirect (301)
-      #
-      # ==== Returns
-      # <Array>:: A rack response to redirect to the specified url.  
-      #
-      # @api plugin
-      def self.redirect(url, options = {})
-        # Build the rack array
-        status   = options.delete(:status)
-        status ||= options[:permanent] ? 301 : 302
-        
-        Merb.logger.info("Dispatcher redirecting to: #{url} (#{status})")
-        Merb.logger.flush
-        
-        [status, { Merb::Const::LOCATION => url },
-         Merb::Rack::StreamWrapper.new("<html><body>You are being <a href=\"#{url}\">redirected</a>.</body></html>")]
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware.rb
deleted file mode 100644
index 6de470e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-module Merb
-  module Rack
-    class Middleware
-      
-      def initialize(app)
-        @app = app
-      end
-      
-      def deferred?(env)
-        @app.deferred?(env)
-      end
-  
-      def call(env)
-        @app.call(env)
-      end
-      
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/conditional_get.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/conditional_get.rb
deleted file mode 100644
index 7c2afd3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/conditional_get.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-module Merb
-  module Rack
-
-    class ConditionalGet < Merb::Rack::Middleware
-      def call(env)
-        status, headers, body = @app.call(env)
-
-        if document_not_modified?(env, headers)
-          status = 304
-          body = Merb::Const::EMPTY_STRING
-          # set Date header using RFC1123 date format as specified by HTTP
-          # RFC2616 section 3.3.1.
-        end
-        
-        [status, headers, body]
-      end
-    
-    private
-      def document_not_modified?(env, headers)
-        if etag = headers[Merb::Const::ETAG]
-          etag == env[Merb::Const::HTTP_IF_NONE_MATCH]
-        elsif last_modified = headers[Merb::Const::LAST_MODIFIED]
-          last_modified == env[Merb::Const::HTTP_IF_MODIFIED_SINCE]
-        end
-      end
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/content_length.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/content_length.rb
deleted file mode 100644
index 151b946..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/content_length.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Merb
-  module Rack
-
-    class ContentLength < Merb::Rack::Middleware
-      def call(env)
-        status, headers, body = @app.call(env)
-
-        # to_s is because Rack spec expects header
-        # values to be iterable and yield strings
-        header = 'Content-Length'.freeze
-        headers[header] = body.size.to_s unless headers.has_key?(header)
-
-        [status, headers, body]
-      end
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/path_prefix.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/path_prefix.rb
deleted file mode 100644
index 1a9b49c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/path_prefix.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-module Merb
-  module Rack
-    class PathPrefix < Merb::Rack::Middleware
-
-      def initialize(app, path_prefix = nil)
-        super(app)
-        @path_prefix = /^#{Regexp.escape(path_prefix)}/
-      end
-      
-      def deferred?(env)
-        strip_path_prefix(env) 
-        @app.deferred?(env)
-      end
-      
-      def call(env)
-        strip_path_prefix(env) 
-        @app.call(env)
-      end
-
-      def strip_path_prefix(env)
-        ['PATH_INFO', 'REQUEST_URI'].each do |path_key|
-          if env[path_key] =~ @path_prefix
-            env[path_key].sub!(@path_prefix, Merb::Const::EMPTY_STRING)
-            env[path_key] = Merb::Const::SLASH if env[path_key].empty?
-          end
-        end
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/profiler.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/profiler.rb
deleted file mode 100644
index ba69341..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/profiler.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-module Merb
-  module Rack
-    class Profiler < Merb::Rack::Middleware
-
-      def initialize(app, min=1, iter=1)
-        super(app)
-        @min, @iter = min, iter
-      end
-
-      def call(env)
-        __profile__("profile_output", @min, @iter) do
-          @app.call(env)
-        end
-      end
-
-      
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/static.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/static.rb
deleted file mode 100644
index e54b2dc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/static.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-module Merb
-  module Rack
-    class Static < Merb::Rack::Middleware
-
-      def initialize(app,directory)
-        super(app)
-        @static_server = ::Rack::File.new(directory)
-      end
-      
-      def call(env)        
-        path = if env[Merb::Const::PATH_INFO]
-                 env[Merb::Const::PATH_INFO].chomp(Merb::Const::SLASH)
-               else
-                 Merb::Const::EMPTY_STRING
-               end
-        cached_path = (path.empty? ? 'index' : path) + '.html'
-        
-        if file_exist?(path) && env[Merb::Const::REQUEST_METHOD] =~ /GET|HEAD/ # Serve the file if it's there and the request method is GET or HEAD
-          serve_static(env)
-        elsif file_exist?(cached_path) && env[Merb::Const::REQUEST_METHOD] =~ /GET|HEAD/ # Serve the page cache if it's there and the request method is GET or HEAD
-          env[Merb::Const::PATH_INFO] = cached_path
-          serve_static(env)
-        elsif path =~ /favicon\.ico/
-          return [404, { Merb::Const::CONTENT_TYPE => Merb::Const::TEXT_SLASH_HTML }, "404 Not Found."]
-        else
-          @app.call(env)
-        end
-      end
-      
-       # ==== Parameters
-        # path<String>:: The path to the file relative to the server root.
-        #
-        # ==== Returns
-        # Boolean:: True if file exists under the server root and is readable.
-        def file_exist?(path)
-          full_path = ::File.join(@static_server.root, ::Merb::Parse.unescape(path))
-          ::File.file?(full_path) && ::File.readable?(full_path)
-        end
-
-        # ==== Parameters
-        # env<Hash>:: Environment variables to pass on to the server.
-        def serve_static(env)
-          env[Merb::Const::PATH_INFO] = ::Merb::Parse.unescape(env[Merb::Const::PATH_INFO])
-          @static_server.call(env)
-        end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/tracer.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/tracer.rb
deleted file mode 100644
index 9f2317a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/middleware/tracer.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-module Merb
-  module Rack
-    class Tracer < Merb::Rack::Middleware
-
-      def call(env)
-
-        Merb.logger.debug!("Rack environment:\n" + env.inspect + "\n\n")
-
-        status, headers, body = @app.call(env)
-
-        Merb.logger.debug!("Status: #{status.inspect}")
-        Merb.logger.debug!("Headers: #{headers.inspect}")
-        Merb.logger.debug!("Body: #{body.inspect}")
-
-        [status, headers, body]
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/stream_wrapper.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/stream_wrapper.rb
deleted file mode 100644
index df63936..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/rack/stream_wrapper.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-module Merb
-  module Rack
-
-    class StreamWrapper
-       def initialize(body)
-         @body = body
-       end
-            
-       def each(&callback)
-         if Proc === @body
-           @writer = lambda { |x| callback.call(x) }
-           @body.call(self)
-         elsif @body.is_a?(String)
-           @body.each_line(&callback)
-         else
-           @body.each(&callback)
-         end
-       end
-    
-       def write(str)
-         @writer.call str.to_s
-         str
-       end
-       
-       def to_s
-         @body.to_s
-       end
-       
-       def ==(other)
-         @body == other
-       end
-       
-       def method_missing(sym, *args, &blk)
-         @body.send(sym, *args, &blk)
-       end
-       
-       
-    end   
-  
-  end
-end  
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/server.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/server.rb
deleted file mode 100644
index 3dac980..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/server.rb
+++ /dev/null
@@ -1,386 +0,0 @@
-require 'etc'
-
-module Merb
-
-  # Server encapsulates the management of Merb daemons.
-  class Server
-    class << self
-
-      # Start a Merb server, in either foreground, daemonized or cluster mode.
-      #
-      # ==== Parameters
-      # port<~to_i>::
-      #   The port to which the first server instance should bind to.
-      #   Subsequent server instances bind to the immediately following ports.
-      # cluster<~to_i>::
-      #   Number of servers to run in a cluster.
-      #
-      # ==== Alternatives
-      # If cluster is left out, then one process will be started. This process
-      # will be daemonized if Merb::Config[:daemonize] is true.
-      #
-      # @api private
-      def start(port, cluster=nil)
-
-        @port = port
-        @cluster = cluster
-
-        if Merb::Config[:daemonize]
-          pidfile = pid_file(port)
-          pid = File.read(pidfile).chomp.to_i if File.exist?(pidfile)
-
-          unless alive?(@port)
-            remove_pid_file(@port)
-            Merb.logger.warn! "Daemonizing..." if Merb::Config[:verbose]
-            daemonize(@port)
-          else
-            Merb.fatal! "Merb is already running on port #{port}.\n" \
-              "\e[0m   \e[1;31;47mpid file: \e[34;47m#{pidfile}" \
-              "\e[1;31;47m, process id is \e[34;47m#{pid}."
-          end
-        else
-          bootup
-        end
-      end
-
-      # ==== Parameters
-      # port<~to_s>:: The port to check for Merb instances on.
-      #
-      # ==== Returns
-      # Boolean::
-      #   True if Merb is running on the specified port.
-      #
-      # @api private
-      def alive?(port)
-        pidfile = pid_file(port)
-        pid     = pid_in_file(pidfile)
-        Process.kill(0, pid)
-        true
-      rescue Errno::ESRCH, Errno::ENOENT
-        false
-      rescue Errno::EACCES => e
-        Merb.fatal!("You don't have access to the PID file at #{pidfile}: #{e.message}")
-      end
-
-      def pid_in_file(pidfile)
-        File.read(pidfile).chomp.to_i
-      end
-
-      # ==== Parameters
-      # port<~to_s>:: The port of the Merb process to kill.
-      # sig<~to_s>:: The signal to send to the process, the default is 9 - SIGKILL.
-      #
-      # No    Name         Default Action       Description
-      # 1     SIGHUP       terminate process    terminal line hangup
-      # 2     SIGINT       terminate process    interrupt program
-      # 3     SIGQUIT      create core image    quit program
-      # 4     SIGILL       create core image    illegal instruction
-      # 9     SIGKILL      terminate process    kill program
-      # 15    SIGTERM      terminate process    software termination signal
-      # 30    SIGUSR1      terminate process    User defined signal 1
-      # 31    SIGUSR2      terminate process    User defined signal 2
-      #
-      # ==== Alternatives
-      # If you pass "all" as the port, the signal will be sent to all Merb processes.
-      #
-      # @api private
-      def kill(port, sig = "INT")
-        if sig.is_a?(Integer)
-          sig = Signal.list.invert[sig]
-        end
-        
-        Merb::BootLoader::BuildFramework.run
-
-        # If we kill the master, then the workers should be reaped also.
-        if %w(main master all).include?(port)
-          # If a graceful exit is requested then send INT to the master process.
-          #
-          # Otherwise read pids from pid files and try to kill each process in turn.
-          kill_pid(sig, pid_file("main")) if sig == "INT"
-        else
-          kill_pid(sig, pid_file(port))
-        end
-      end
-
-      # Sends the provided signal to the process pointed at by the provided pid file.
-      # @api private
-      def kill_pid(sig, file)
-        begin
-          pid = pid_in_file(file)
-          Merb.logger.fatal! "Killing pid #{pid} with #{sig}"
-          Process.kill(sig, pid)
-          FileUtils.rm(file) if File.exist?(file)
-        rescue Errno::EINVAL
-          Merb.logger.fatal! "Failed to kill PID #{pid} with #{sig}: '#{sig}' is an invalid " \
-            "or unsupported signal number."
-        rescue Errno::EPERM
-          Merb.logger.fatal! "Failed to kill PID #{pid} with #{sig}: Insufficient permissions."
-        rescue Errno::ESRCH
-          FileUtils.rm file
-          Merb.logger.fatal! "Failed to kill PID #{pid} with #{sig}: Process is " \
-            "deceased or zombie."
-        rescue Errno::EACCES => e
-          Merb.logger.fatal! e.message
-        rescue Errno::ENOENT => e
-          # This should not cause abnormal exit, which is why 
-          # we do not use Merb.fatal but instead just log with max level.
-          Merb.logger.fatal! "Could not find a PID file at #{file}. " \
-            "Most likely the process is no longer running and the pid file was not cleaned up."
-        rescue Exception => e
-          if !e.is_a?(SystemExit)
-            Merb.logger.fatal! "Failed to kill PID #{pid.inspect} with #{sig.inspect}: #{e.message}"
-          end
-        end
-      end
-
-      # ==== Parameters
-      # port<~to_s>:: The port of the Merb process to daemonize.
-      #
-      # @api private
-      def daemonize(port)
-        Merb.logger.warn! "About to fork..." if Merb::Config[:verbose]
-        fork do
-          Process.setsid
-          exit if fork
-          Merb.logger.warn! "In #{Process.pid}" if Merb.logger
-          File.umask 0000
-          STDIN.reopen "/dev/null"
-          STDOUT.reopen "/dev/null", "a"
-          STDERR.reopen STDOUT
-          begin
-            Dir.chdir Merb::Config[:merb_root]
-          rescue Errno::EACCES => e
-            Merb.fatal! "You specified Merb root as #{Merb::Config[:merb_root]}, " \
-              "yet the current user does not have access to it. ", e
-          end
-          at_exit { remove_pid_file(port) }
-          Merb::Config[:port] = port
-          bootup
-        end
-      rescue NotImplementedError => e
-        Merb.fatal! "Daemonized mode is not supported on your platform. ", e
-      end
-
-      # Starts up Merb by running the bootloader and starting the adapter.
-      #
-      # @api private
-      def bootup
-        Merb.trap("TERM") { shutdown }
-
-        Merb.logger.warn! "Running bootloaders..." if Merb::Config[:verbose]
-        BootLoader.run
-        Merb.logger.warn! "Starting Rack adapter..." if Merb::Config[:verbose]
-        Merb.adapter.start(Merb::Config.to_hash)
-      end
-
-      # Shut down Merb, reap any workers if necessary.
-      #
-      # @api private
-      def shutdown(status = 0)
-        # reap_workers does exit but may not be called...
-        Merb::BootLoader::LoadClasses.reap_workers(status) if Merb::Config[:fork_for_class_load]
-        # which is why we exit explicitly here
-        exit(status)
-      end
-
-      # Change process user/group to those specified in Merb::Config.
-      #
-      # @api private
-      def change_privilege
-        if Merb::Config[:user] && Merb::Config[:group]
-          Merb.logger.verbose! "About to change privilege to group " \
-            "#{Merb::Config[:group]} and user #{Merb::Config[:user]}"
-          _change_privilege(Merb::Config[:user], Merb::Config[:group])
-        elsif Merb::Config[:user]
-          Merb.logger.verbose! "About to change privilege to user " \
-            "#{Merb::Config[:user]}"
-          _change_privilege(Merb::Config[:user])
-        else
-          return true
-        end
-      end
-
-      # Removes a PID file used by the server from the filesystem.
-      # This uses :pid_file options from configuration when provided
-      # or merb.<port/socket>.pid in log directory by default.
-      #
-      # ==== Parameters
-      # port<~to_s>::
-      #   The port of the Merb process to whom the the PID file belongs to.
-      #
-      # ==== Alternatives
-      # If Merb::Config[:pid_file] has been specified, that will be used
-      # instead of the port/socket based PID file.
-      #
-      # @api private
-      def remove_pid_file(port)
-        pidfile = pid_file(port)
-        if File.exist?(pidfile)
-          Merb.logger.warn! "Removing pid file #{pidfile} (port/socket: #{port})..."
-          FileUtils.rm(pidfile)
-        end
-      end
-
-      # Stores a PID file on the filesystem.
-      # This uses :pid_file options from configuration when provided
-      # or merb.<port>.pid in log directory by default.
-      #
-      # ==== Parameters
-      # port<~to_s>::
-      #   The port of the Merb process to whom the the PID file belongs to.
-      #
-      # ==== Alternatives
-      # If Merb::Config[:pid_file] has been specified, that will be used
-      # instead of the port/socket based PID file.
-      #
-      # @api private
-      def store_pid(port)
-        store_details(port)
-      end
-
-      # Delete the pidfile for the specified port/socket.
-      #
-      # @api private
-      def remove_pid(port)
-        FileUtils.rm(pid_file(port)) if File.file?(pid_file(port))
-      end
-
-      # Stores a PID file on the filesystem.
-      # This uses :pid_file options from configuration when provided
-      # or merb.<port/socket>.pid in log directory by default.
-      #
-      # ==== Parameters
-      # port<~to_s>::
-      #   The port of the Merb process to whom the the PID file belongs to.
-      #
-      # ==== Alternatives
-      # If Merb::Config[:pid_file] has been specified, that will be used
-      # instead of the port/socket based PID file.
-      #
-      # @api private
-      def store_details(port = nil)
-        file = pid_file(port)
-        begin
-          FileUtils.mkdir_p(File.dirname(file))
-        rescue Errno::EACCES => e
-          Merb.fatal! "Failed to store Merb logs in #{File.dirname(file)}, " \
-            "permission denied. ", e
-        end
-        Merb.logger.warn! "Storing pid #{Process.pid} file to #{file}..." if Merb::Config[:verbose]
-        begin
-          File.open(file, 'w'){ |f| f.write(Process.pid.to_s) }
-        rescue Errno::EACCES => e
-          Merb.fatal! "Failed to access #{file}, permission denied.", e
-        end
-      end
-
-      # Gets the pid file for the specified port/socket.
-      #
-      # ==== Parameters
-      # port<~to_s>::
-      #   The port/socket of the Merb process to whom the the PID file belongs to.
-      #
-      # ==== Returns
-      # String::
-      #   Location of pid file for specified port. If clustered and pid_file option
-      #   is specified, it adds the port/socket value to the path.
-      #
-      # @api private
-      def pid_file(port)
-        pidfile = Merb::Config[:pid_file] || (Merb.log_path / "merb.%s.pid")
-        pidfile % port
-      end
-
-      # Get a list of the pid files.
-      #
-      # ==== Returns
-      # Array::
-      #   List of pid file paths. If not running clustered, the array contains a single path.
-      #
-      # @api private
-      def pid_files
-        if Merb::Config[:pid_file]
-          if Merb::Config[:cluster]
-            Dir[Merb::Config[:pid_file] % "*"]
-          else
-            [ Merb::Config[:pid_file] ]
-          end
-        else
-          Dir[Merb.log_path / "merb.*.pid"]
-        end
-       end
-
-      # Change privileges of the process to the specified user and group.
-      #
-      # ==== Parameters
-      # user<String>:: The user to change the process to.
-      # group<String>:: The group to change the process to.
-      #
-      # ==== Alternatives
-      # If group is left out, the user will be used as the group.
-      # 
-      # @api private
-      def _change_privilege(user, group=user)
-        Merb.logger.warn! "Changing privileges to #{user}:#{group}"
-
-        uid, gid = Process.euid, Process.egid
-
-        begin
-          target_uid = Etc.getpwnam(user).uid
-        rescue ArgumentError => e
-          Merb.fatal!("Failed to change to user #{user}, does the user exist?", e)
-          return false
-        end
-
-        begin
-          target_gid = Etc.getgrnam(group).gid
-        rescue ArgumentError => e
-          Merb.fatal!("Failed to change to group #{group}, does the group exist?", e)
-          return false
-        end
-
-        if (uid != target_uid) || (gid != target_gid)
-          # Change process ownership
-          Process.initgroups(user, target_gid)
-          Process::GID.change_privilege(target_gid)
-          Process::UID.change_privilege(target_uid)
-        end
-        true
-      rescue Errno::EPERM => e
-        Merb.fatal! "Permission denied for changing user:group to #{user}:#{group}.", e
-        false
-      end
-      
-      # Add trap to enter IRB on SIGINT. Process exit if second SIGINT is received.
-      #
-      # @api private
-      def add_irb_trap
-        Merb.trap("INT") do
-          if @interrupted
-            Merb.logger.warn! "Interrupt received a second time, exiting!\n"
-            exit
-          end
-
-          @interrupted = true
-          Merb.logger.warn! "Interrupt a second time to quit."
-          Kernel.sleep 1.5
-          ARGV.clear # Avoid passing args to IRB
-
-          if @irb.nil?
-            require "irb"
-            IRB.setup(nil)
-            @irb = IRB::Irb.new(nil)
-            IRB.conf[:MAIN_CONTEXT] = @irb.context
-          end
-
-          Merb.trap(:INT) { @irb.signal_handle }
-          catch(:IRB_EXIT) { @irb.eval_input }
-
-          Merb.logger.warn! "Exiting from IRB mode back into server mode."
-          @interrupted = false
-          add_irb_trap
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/audit.rake b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/audit.rake
deleted file mode 100644
index 6013f91..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/audit.rake
+++ /dev/null
@@ -1,68 +0,0 @@
-namespace :audit do
-
-  desc "Print out the named and anonymous routes"
-  task :routes => :merb_env do
-    seen = []
-    unless Merb::Router.named_routes.empty?
-      puts "Named Routes"
-      Merb::Router.named_routes.each do |name,route|
-        puts "  #{name}: #{route}"
-        seen << route
-      end
-    end
-    puts "Anonymous Routes"
-    (Merb::Router.routes - seen).each do |route|
-      puts "  #{route}"
-    end
-    nil
-  end
-
-  desc "Print out all controllers"
-  task :controllers => :merb_env do
-    puts "\nControllers:\n\n"
-    abstract_controller_classes.each do |klass|
-      if klass.respond_to?(:subclasses_list)
-        puts "#{klass} < #{klass.superclass}"
-        subklasses = klass.subclasses_list.sort.map { |x| Object.full_const_get(x) }
-        unless subklasses.empty?
-          subklasses.each { |subklass| puts "- #{subklass}" }
-        else
-          puts "~ no subclasses"
-        end
-        puts
-      end
-    end
-  end
-  
-  desc "Print out controllers and their actions (use CONTROLLER=Foo,Bar to be selective)"
-  task :actions => :merb_env do
-    puts "\nControllers and their actions:\n\n"
-    filter_controllers = ENV['CONTROLLER'] ? ENV['CONTROLLER'].split(',') : nil
-    abstract_controllers = abstract_controller_classes
-    classes = Merb::AbstractController.subclasses_list.sort.map { |x| Object.full_const_get(x) }
-    classes = classes.select { |k| k.name.in?(filter_controllers) } if filter_controllers
-    classes.each do |subklass|
-      next if subklass.in?(abstract_controllers) || !subklass.respond_to?(:callable_actions)
-      puts "#{subklass} < #{subklass.superclass}"
-      unless subklass.callable_actions.empty?
-        subklass.callable_actions.sort.each do |action, null|
-          if subklass.respond_to?(:action_argument_list)
-            arguments, defaults = subklass.action_argument_list[action]
-            args = arguments.map { |name, value| value ? "#{name} = #{value.inspect}" : name.to_s }.join(', ')
-            puts args.empty? ? "- #{action}" : "- #{action}(#{args})"
-          else
-            puts "- #{action}"
-          end
-        end
-      else
-        puts "~ no callable actions"
-      end
-      puts
-    end    
-  end
-  
-  def abstract_controller_classes
-    ObjectSpace.classes.select { |x| x.superclass == Merb::AbstractController }.sort_by { |x| x.name }
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/gem_management.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/gem_management.rb
deleted file mode 100644
index dee76e1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/gem_management.rb
+++ /dev/null
@@ -1,364 +0,0 @@
-require 'rubygems'
-
-module ColorfulMessages
-  
-  # red
-  def error(*messages)
-    puts messages.map { |msg| "\033[1;31m#{msg}\033[0m" }
-  end
-  
-  # yellow
-  def warning(*messages)
-    puts messages.map { |msg| "\033[1;33m#{msg}\033[0m" }
-  end
-  
-  # green
-  def success(*messages)
-    puts messages.map { |msg| "\033[1;32m#{msg}\033[0m" }
-  end
-  
-  alias_method :message, :success
-  
-  # magenta
-  def note(*messages)
-    puts messages.map { |msg| "\033[1;35m#{msg}\033[0m" }
-  end
-  
-  # blue
-  def info(*messages)
-    puts messages.map { |msg| "\033[1;34m#{msg}\033[0m" }
-  end
-  
-end
-
-##############################################################################
-
-require 'rubygems/dependency_installer'
-require 'rubygems/uninstaller'
-require 'rubygems/dependency'
-
-module GemManagement
-  
-  include ColorfulMessages
-    
-  # Install a gem - looks remotely and local gem cache;
-  # won't process rdoc or ri options.
-  def install_gem(gem, options = {})
-    refresh = options.delete(:refresh) || []
-    from_cache = (options.key?(:cache) && options.delete(:cache))
-    if from_cache
-      install_gem_from_cache(gem, options)
-    else
-      version = options.delete(:version)
-      Gem.configuration.update_sources = false
-
-      # Limit source index to install dir
-      update_source_index(options[:install_dir]) if options[:install_dir]
-
-      installer = Gem::DependencyInstaller.new(options.merge(:user_install => false))
-      
-      # Force-refresh certain gems by excluding them from the current index
-      if !options[:ignore_dependencies] && refresh.respond_to?(:include?) && !refresh.empty?
-        source_index = installer.instance_variable_get(:@source_index)
-        source_index.gems.each do |name, spec| 
-          source_index.gems.delete(name) if refresh.include?(spec.name)
-        end
-      end
-      
-      exception = nil
-      begin
-        installer.install gem, version
-      rescue Gem::InstallError => e
-        exception = e
-      rescue Gem::GemNotFoundException => e
-        if from_cache && gem_file = find_gem_in_cache(gem, version)
-          puts "Located #{gem} in gem cache..."
-          installer.install gem_file
-        else
-          exception = e
-        end
-      rescue => e
-        exception = e
-      end
-      if installer.installed_gems.empty? && exception
-        error "Failed to install gem '#{gem} (#{version || 'any version'})' (#{exception.message})"
-      end
-      ensure_bin_wrapper_for_installed_gems(installer.installed_gems, options)
-      installer.installed_gems.each do |spec|
-        success "Successfully installed #{spec.full_name}"
-      end
-      return !installer.installed_gems.empty?
-    end
-  end
-
-  # Install a gem - looks in the system's gem cache instead of remotely;
-  # won't process rdoc or ri options.
-  def install_gem_from_cache(gem, options = {})
-    version = options.delete(:version)
-    Gem.configuration.update_sources = false
-    installer = Gem::DependencyInstaller.new(options.merge(:user_install => false))
-    exception = nil
-    begin
-      if gem_file = find_gem_in_cache(gem, version)
-        puts "Located #{gem} in gem cache..."
-        installer.install gem_file
-      else
-        raise Gem::InstallError, "Unknown gem #{gem}"
-      end
-    rescue Gem::InstallError => e
-      exception = e
-    end
-    if installer.installed_gems.empty? && exception
-      error "Failed to install gem '#{gem}' (#{e.message})"
-    end
-    ensure_bin_wrapper_for_installed_gems(installer.installed_gems, options)
-    installer.installed_gems.each do |spec|
-      success "Successfully installed #{spec.full_name}"
-    end
-  end
-
-  # Install a gem from source - builds and packages it first then installs.
-  # 
-  # Examples:
-  # install_gem_from_source(source_dir, :install_dir => ...)
-  # install_gem_from_source(source_dir, gem_name)
-  # install_gem_from_source(source_dir, :skip => [...])
-  def install_gem_from_source(source_dir, *args)
-    installed_gems = []
-    opts = args.last.is_a?(Hash) ? args.pop : {}
-    Dir.chdir(source_dir) do      
-      gem_name     = args[0] || File.basename(source_dir)
-      gem_pkg_dir  = File.join(source_dir, 'pkg')
-      gem_pkg_glob = File.join(gem_pkg_dir, "#{gem_name}-*.gem")
-      skip_gems    = opts.delete(:skip) || []
-
-      # Cleanup what's already there
-      clobber(source_dir)
-      FileUtils.mkdir_p(gem_pkg_dir) unless File.directory?(gem_pkg_dir)
-
-      # Recursively process all gem packages within the source dir
-      skip_gems << gem_name
-      packages = package_all(source_dir, skip_gems)
-      
-      if packages.length == 1
-        # The are no subpackages for the main package
-        refresh = [gem_name]
-      else
-        # Gather all packages into the top-level pkg directory
-        packages.each do |pkg|
-          FileUtils.copy_entry(pkg, File.join(gem_pkg_dir, File.basename(pkg)))
-        end
-        
-        # Finally package the main gem - without clobbering the already copied pkgs
-        package(source_dir, false)
-        
-        # Gather subgems to refresh during installation of the main gem
-        refresh = packages.map do |pkg|
-          File.basename(pkg, '.gem')[/^(.*?)-([\d\.]+)$/, 1] rescue nil
-        end.compact
-        
-        # Install subgems explicitly even if ignore_dependencies is set
-        if opts[:ignore_dependencies]
-          refresh.each do |name| 
-            gem_pkg = Dir[File.join(gem_pkg_dir, "#{name}-*.gem")][0]
-            install_pkg(gem_pkg, opts)
-          end
-        end
-      end
-      
-      ensure_bin_wrapper_for(opts[:install_dir], opts[:bin_dir], *installed_gems)
-      
-      # Finally install the main gem
-      if install_pkg(Dir[gem_pkg_glob][0], opts.merge(:refresh => refresh))
-        installed_gems = refresh
-      else
-        installed_gems = []
-      end
-    end
-    installed_gems
-  end
-  
-  def install_pkg(gem_pkg, opts = {})
-    if (gem_pkg && File.exists?(gem_pkg))
-      # Needs to be executed from the directory that contains all packages
-      Dir.chdir(File.dirname(gem_pkg)) { install_gem(gem_pkg, opts) }
-    else
-      false
-    end
-  end
-  
-  # Uninstall a gem.
-  def uninstall_gem(gem, options = {})
-    if options[:version] && !options[:version].is_a?(Gem::Requirement)
-      options[:version] = Gem::Requirement.new ["= #{options[:version]}"]
-    end
-    update_source_index(options[:install_dir]) if options[:install_dir]
-    Gem::Uninstaller.new(gem, options).uninstall rescue nil
-  end
-
-  def clobber(source_dir)
-    Dir.chdir(source_dir) do 
-      system "#{Gem.ruby} -S rake -s clobber" unless File.exists?('Thorfile')
-    end
-  end
-
-  def package(source_dir, clobber = true)
-    Dir.chdir(source_dir) do 
-      if File.exists?('Thorfile')
-        thor ":package"
-      elsif File.exists?('Rakefile')
-        rake "clobber" if clobber
-        rake "package"
-      end
-    end
-    Dir[File.join(source_dir, 'pkg/*.gem')]
-  end
-
-  def package_all(source_dir, skip = [], packages = [])
-    if Dir[File.join(source_dir, '{Rakefile,Thorfile}')][0]
-      name = File.basename(source_dir)
-      Dir[File.join(source_dir, '*', '{Rakefile,Thorfile}')].each do |taskfile|
-        package_all(File.dirname(taskfile), skip, packages)
-      end
-      packages.push(*package(source_dir)) unless skip.include?(name)
-    end
-    packages.uniq
-  end
-  
-  def rake(cmd)
-    cmd << " >/dev/null" if $SILENT && !Gem.win_platform?
-    system "#{Gem.ruby} -S #{which('rake')} -s #{cmd} >/dev/null"
-  end
-  
-  def thor(cmd)
-    cmd << " >/dev/null" if $SILENT && !Gem.win_platform?
-    system "#{Gem.ruby} -S #{which('thor')} #{cmd}"
-  end
-
-  # Use the local bin/* executables if available.
-  def which(executable)
-    if File.executable?(exec = File.join(Dir.pwd, 'bin', executable))
-      exec
-    else
-      executable
-    end
-  end
-  
-  # Partition gems into system, local and missing gems
-  def partition_dependencies(dependencies, gem_dir)
-    system_specs, local_specs, missing_deps = [], [], []
-    if gem_dir && File.directory?(gem_dir)
-      gem_dir = File.expand_path(gem_dir)
-      ::Gem.clear_paths; ::Gem.path.unshift(gem_dir)
-      ::Gem.source_index.refresh!
-      dependencies.each do |dep|
-        gemspecs = ::Gem.source_index.search(dep)
-        local = gemspecs.reverse.find { |s| s.loaded_from.index(gem_dir) == 0 }
-        if local
-          local_specs << local
-        elsif gemspecs.last
-          system_specs << gemspecs.last
-        else
-          missing_deps << dep
-        end
-      end
-      ::Gem.clear_paths
-    else
-      dependencies.each do |dep|
-        gemspecs = ::Gem.source_index.search(dep)
-        if gemspecs.last
-          system_specs << gemspecs.last
-        else
-          missing_deps << dep
-        end
-      end
-    end
-    [system_specs, local_specs, missing_deps]
-  end
-  
-  # Create a modified executable wrapper in the specified bin directory.
-  def ensure_bin_wrapper_for(gem_dir, bin_dir, *gems)
-    options = gems.last.is_a?(Hash) ? gems.last : {}
-    options[:no_minigems] ||= []
-    if bin_dir && File.directory?(bin_dir)
-      gems.each do |gem|
-        if gemspec_path = Dir[File.join(gem_dir, 'specifications', "#{gem}-*.gemspec")].last
-          spec = Gem::Specification.load(gemspec_path)
-          enable_minigems = !options[:no_minigems].include?(spec.name)
-          spec.executables.each do |exec|
-            executable = File.join(bin_dir, exec)
-            message "Writing executable wrapper #{executable}"
-            File.open(executable, 'w', 0755) do |f|
-              f.write(executable_wrapper(spec, exec, enable_minigems))
-            end
-          end
-        end
-      end
-    end
-  end
-  
-  def ensure_bin_wrapper_for_installed_gems(gemspecs, options)
-    if options[:install_dir] && options[:bin_dir]
-      gems = gemspecs.map { |spec| spec.name }
-      ensure_bin_wrapper_for(options[:install_dir], options[:bin_dir], *gems)
-    end
-  end
-  
-  private
-
-  def executable_wrapper(spec, bin_file_name, minigems = true)
-    requirements = ['minigems', 'rubygems']
-    requirements.reverse! unless minigems
-    try_req, then_req = requirements
-    <<-TEXT
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application '#{spec.name}' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require '#{try_req}'
-rescue LoadError 
-  require '#{then_req}'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/#{bin_file_name}
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([gems_dir])
-  ENV["PATH"] = "\#{File.dirname(__FILE__)}:\#{gems_dir}/bin:\#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "#{spec.name}-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\\.\\d]+)\\.gemspec$/, 1]
-  end
-end
-
-version ||= "#{Gem::Requirement.default}"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem '#{spec.name}', version
-load '#{bin_file_name}'
-TEXT
-  end
-
-  def find_gem_in_cache(gem, version)
-    spec = if version
-      version = Gem::Requirement.new ["= #{version}"] unless version.is_a?(Gem::Requirement)
-      Gem.source_index.find_name(gem, version).first
-    else
-      Gem.source_index.find_name(gem).sort_by { |g| g.version }.last
-    end
-    if spec && File.exists?(gem_file = "#{spec.installation_path}/cache/#{spec.full_name}.gem")
-      gem_file
-    end
-  end
-
-  def update_source_index(dir)
-    Gem.source_index.load_gems_in(File.join(dir, 'specifications'))
-  end
-    
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/merb.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/merb.rb
deleted file mode 100644
index 50ddce7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/merb.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-local_gem_path = Gem.path if $BUNDLE
-require 'merb-core/tasks/merb_rake_helper'
-Gem.path.replace(local_gem_path) if local_gem_path
-Dir[File.dirname(__FILE__) / '*.rake'].each { |ext| load ext }
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/merb_rake_helper.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/merb_rake_helper.rb
deleted file mode 100644
index 689412a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/merb_rake_helper.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-require File.join(File.dirname(__FILE__), 'gem_management')
-
-module Merb
-  module RakeHelper
-    
-    extend GemManagement
-    
-    def self.install(name, options = {})
-      defaults = { :cache => false }
-      defaults[:install_dir] = ENV['GEM_DIR'] if ENV['GEM_DIR']
-      opts = defaults.merge(options)
-      dir = if File.directory?(subdir = File.join(Dir.pwd, name))
-        subdir
-      else
-        Dir.pwd
-      end
-      install_gem_from_source(dir, name, opts)
-      ensure_wrapper(opts[:install_dir] || Gem.default_dir, name)
-    end
-    
-    def self.install_package(pkg, options = {})
-      defaults = { :cache => false }
-      defaults[:install_dir] = ENV['GEM_DIR'] if ENV['GEM_DIR']
-      opts = defaults.merge(options)
-      # Needs to be executed from the directory that contains all packages
-      Dir.chdir(File.dirname(pkg_file = File.expand_path(pkg))) do 
-        install_gem(pkg_file, opts)
-      end
-      name = File.basename(pkg, '.gem')[/^(.*?)-([\d\.]+)$/, 1]
-      ensure_wrapper(opts[:install_dir] || Gem.default_dir, name)
-    end
-    
-    def self.uninstall(name, options = {})
-      defaults = { :ignore => true, :executables => true }
-      defaults[:install_dir] = ENV['GEM_DIR'] if ENV['GEM_DIR']
-      uninstall_gem(name, defaults.merge(options))
-    end  
-    
-    def self.sudo
-      ENV['MERB_SUDO'] ||= "sudo"
-      sudo = windows? ? "" : ENV['MERB_SUDO']
-    end
-
-    def self.windows?
-      (PLATFORM =~ /win32|cygwin/) rescue nil
-    end
-    
-    protected
-    
-    def self.ensure_wrapper(gemdir, name)
-      # See if there's a local bin dir - one directory up from ./gems
-      bindir = File.expand_path(File.join(gemdir, '..', 'bin'))
-      # Fall back to system wide bindir - usually needs sudo permissions
-      bindir = Gem.bindir unless File.directory?(bindir)
-      ensure_bin_wrapper_for(gemdir, bindir, name, :no_minigems => ['merb-gen'])
-    end
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/stats.rake b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/stats.rake
deleted file mode 100644
index 3e47a0c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/tasks/stats.rake
+++ /dev/null
@@ -1,71 +0,0 @@
-def show_line(name, stats, color = nil)
-  ce = color ? "\033[0m" : ""
-  puts  "| #{color}#{name.to_s.capitalize.ljust(20)}#{ce} " + 
-        "| #{color}#{stats[:lines].to_s.rjust(7)}#{ce} " +
-        "| #{color}#{stats[:loc].to_s.rjust(7)}#{ce} " +
-        "| #{color}#{stats[:classes].to_s.rjust(7)}#{ce} " +
-        "| #{color}#{stats[:modules].to_s.rjust(7)}#{ce} " +
-        "| #{color}#{stats[:methods].to_s.rjust(7)}#{ce} |"
-  puts separator
-end
-
-def separator
-  '+----------------------+---------+---------+---------+---------+---------+'
-end
-
-def check_dir(dir)
-  Dir.foreach(dir) do |file_name|
-    if File.stat(dir / file_name).directory? and (/^\./ !~ file_name)
-      check_dir(dir / file_name)
-    end
-
-    if file_name =~ /.*\.rb$/
-      File.open(dir / file_name).each_line do |line|
-        @stats[:lines]    += 1
-        @stats[:loc]      += 1 unless line =~ /^\s*$/ || line =~ /^\s*#/
-        @stats[:classes]  += 1 if line =~ /class [A-Z]/
-        @stats[:modules]  += 1 if line =~ /module [A-Z]/
-        @stats[:methods]  += 1 if line =~ /def [a-z]/
-      end
-    end
-  end
-end
-
-desc "Lines of code statistics"
-task :stats do
-  STATISTICS_DIRS = {
-    :controllers  => 'app/controllers',
-    :helpers      => 'app/helpers',
-    :models       => 'app/models',
-    :lib          => 'lib',
-    :spec         => 'spec'
-  }.reject {|name, dir| !File.exist?(dir) }
-  EMPTY_STATS = { :lines => 0, :loc => 0, :classes => 0, :modules => 0, :methods => 0 }
- 
-  @all = {}
-  total = EMPTY_STATS.clone
-  ce = "\033[0m"
-  cb = "\033[35m"
-  cg = "\033[4;32m"
-  cr = "\033[31m"
- 
-  puts separator
-  puts "| #{cg}Name#{ce}                 | #{cg}Lines#{ce}   | #{cg}LOC#{ce}     | #{cg}Classes#{ce} | #{cg}Modules#{ce} | #{cg}Methods#{ce} |"
-  puts separator
- 
-  STATISTICS_DIRS.each_pair do |name, dir| 
-    @stats = EMPTY_STATS.clone
-    check_dir(dir)
-    @all[name] = @stats
-    show_line(name, @stats)
-    @stats.each_pair { |type, count| total[type] += count }
-  end
- 
-  show_line('Total', total, cr)
- 
-  code_loc = [:controllers, :helpers, :models].inject(0) { |sum, e| sum += @all[e][:loc] }
-  test_loc = @all[:spec][:loc]
- 
-  puts "   Code LOC: #{cb}#{code_loc}#{ce}     Test LOC: #{cb}#{test_loc}#{ce}     Code to test radio:  #{cb}1:%0.2f#{ce}" % (test_loc.to_f / code_loc.to_f)
-  puts
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test.rb
deleted file mode 100644
index cea9f49..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require 'merb-core/test/test_ext/object'
-require 'merb-core/test/test_ext/string'
-
-module Merb; module Test; end; end
-
-require 'merb-core/test/helpers'
-require 'merb-core/test/webrat'
-
-if Merb.test_framework.to_s == "rspec"
-  require 'merb-core/test/test_ext/rspec'
-  require 'merb-core/test/matchers'
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers.rb
deleted file mode 100644
index de87300..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# This is a place holder to allow plugins etc a place to include 
-# testing helpers
-module Merb::Test::Helpers; end
-
-require "merb-core/test/helpers/cookie_jar"
-require "merb-core/test/helpers/mock_request_helper"
-require "merb-core/test/helpers/route_helper"
-require "merb-core/test/helpers/request_helper"
-require "merb-core/test/helpers/multipart_request_helper"
-require "merb-core/test/helpers/controller_helper"
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/controller_helper.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/controller_helper.rb
deleted file mode 100644
index 3b4181c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/controller_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Merb
-  module Test
-    module ControllerHelper
-      include RequestHelper
-      include MultipartRequestHelper
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/cookie_jar.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/cookie_jar.rb
deleted file mode 100644
index 3140bb0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/cookie_jar.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-require 'uri'
-
-module Merb
-  module Test
-    class Cookie
-      
-      attr_reader :name, :value
-      
-      def initialize(raw, default_host)
-        # separate the name / value pair from the cookie options
-        @name_value_raw, options = raw.split(/[;,] */n, 2)
-        
-        @name, @value = Merb::Parse.query(@name_value_raw, ';').to_a.first
-        @options = Merb::Parse.query(options, ';')
-        
-        @options.delete_if { |k, v| !v || v.empty? }
-        
-        @options["domain"] ||= default_host
-      end
-      
-      def raw
-        @name_value_raw
-      end
-      
-      def empty?
-        @value.nil? || @value.empty?
-      end
-      
-      def domain
-        @options["domain"]
-      end
-      
-      def path
-        @options["path"] || "/"
-      end
-      
-      def expires
-        Time.parse(@options["expires"]) if @options["expires"]
-      end
-      
-      def expired?
-        expires && expires < Time.now
-      end
-      
-      def valid?(uri)
-        uri.host =~ Regexp.new("#{Regexp.escape(domain)}$") &&
-        uri.path =~ Regexp.new("^#{Regexp.escape(path)}")
-      end
-      
-      def matches?(uri)
-        ! expired? && valid?(uri)
-      end
-      
-      def <=>(other)
-        # Orders the cookies from least specific to most
-        [name, path, domain.reverse] <=> [other.name, other.path, other.domain.reverse]
-      end
-      
-    end
-
-    class CookieJar
-      
-      def initialize
-        @jars = {}
-      end
-      
-      def update(jar, uri, raw_cookies)
-        return unless raw_cookies
-        # Initialize all the the received cookies
-        cookies = []
-        raw_cookies.each do |raw|
-          c = Cookie.new(raw, uri.host)
-          cookies << c if c.valid?(uri)
-        end
-        
-        @jars[jar] ||= []
-        
-        # Remove all the cookies that will be updated
-        @jars[jar].delete_if do |existing|
-          cookies.find { |c| [c.name, c.domain, c.path] == [existing.name, existing.domain, existing.path] }
-        end
-        
-        @jars[jar].concat cookies
-        
-        @jars[jar].sort!
-      end
-      
-      def for(jar, uri)
-        cookies = {}
-        
-        @jars[jar] ||= []
-        # The cookies are sorted by most specific first. So, we loop through
-        # all the cookies in order and add it to a hash by cookie name if
-        # the cookie can be sent to the current URI. It's added to the hash
-        # so that when we are done, the cookies will be unique by name and
-        # we'll have grabbed the most specific to the URI.
-        @jars[jar].each do |cookie|
-          cookies[cookie.name] = cookie.raw if cookie.matches?(uri)
-        end
-        
-        cookies.values.join
-      end
-      
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/mock_request_helper.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/mock_request_helper.rb
deleted file mode 100644
index 27d7d37..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/mock_request_helper.rb
+++ /dev/null
@@ -1,400 +0,0 @@
-require 'tempfile'
-
-module Merb
-  module Test
-    module RequestHelper
-      # FakeRequest sets up a default enviroment which can be overridden either
-      # by passing and env into initialize or using request['HTTP_VAR'] = 'foo'
-      class FakeRequest < Request
-
-        # ==== Parameters
-        # env<Hash>:: Environment options that override the defaults.
-        # req<StringIO>:: The request to set as input for Rack.
-        def initialize(env = {}, req = StringIO.new)
-          env.environmentize_keys!
-          env['rack.input'] = req
-          super(DEFAULT_ENV.merge(env))
-        end
-
-        private
-        DEFAULT_ENV = Mash.new({
-          'SERVER_NAME' => 'localhost',
-          'PATH_INFO' => '/',
-          'HTTP_ACCEPT_ENCODING' => 'gzip,deflate',
-          'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.1) Gecko/20060214 Camino/1.0',
-          'SCRIPT_NAME' => '/',
-          'SERVER_PROTOCOL' => 'HTTP/1.1',
-          'HTTP_CACHE_CONTROL' => 'max-age=0',
-          'HTTP_ACCEPT_LANGUAGE' => 'en,ja;q=0.9,fr;q=0.9,de;q=0.8,es;q=0.7,it;q=0.7,nl;q=0.6,sv;q=0.5,nb;q=0.5,da;q=0.4,fi;q=0.3,pt;q=0.3,zh-Hans;q=0.2,zh-Hant;q=0.1,ko;q=0.1',
-          'HTTP_HOST' => 'localhost',
-          'REMOTE_ADDR' => '127.0.0.1',
-          'SERVER_SOFTWARE' => 'Mongrel 1.1',
-          'HTTP_KEEP_ALIVE' => '300',
-          'HTTP_REFERER' => 'http://localhost/',
-          'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
-          'HTTP_VERSION' => 'HTTP/1.1',
-          'REQUEST_URI' => '/',
-          'SERVER_PORT' => '80',
-          'GATEWAY_INTERFACE' => 'CGI/1.2',
-          'HTTP_ACCEPT' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
-          'HTTP_CONNECTION' => 'keep-alive',
-          'REQUEST_METHOD' => 'GET'
-        }) unless defined?(DEFAULT_ENV)
-      end
-
-      # CookieJar keeps track of cookies in a simple Mash.
-      class CookieJar < Mash
-        
-        # ==== Parameters
-        # request<Merb::Request, Merb::FakeRequest>:: The controller request.
-        def update_from_request(request)
-          request.cookies.each do |key, value|
-            if value.blank?
-              self.delete(key)
-            else
-              self[key] = Merb::Parse.unescape(value)
-            end
-          end
-        end
-        
-      end
-
-      # ==== Parameters
-      # env<Hash>:: A hash of environment keys to be merged into the default list.
-      # opt<Hash>:: A hash of options (see below).
-      #
-      # ==== Options (opt)
-      # :post_body<String>:: The post body for the request.
-      # :req<String>::
-      #   The request string. This will only be used if :post_body is left out.
-      #
-      # ==== Returns
-      # FakeRequest:: A Request object that is built based on the parameters.
-      #
-      # ==== Notes
-      # If you pass a post body, the content-type will be set to URL-encoded.
-      #
-      # @api public
-      # @deprecated
-      def fake_request(env = {}, opt = {})
-        if opt[:post_body]
-          req = opt[:post_body]
-          env[:content_type] ||= "application/x-www-form-urlencoded"
-        else
-          req = opt[:req]
-        end
-        FakeRequest.new(env, StringIO.new(req || ''))
-      end
-
-      # Dispatches an action to the given class. This bypasses the router and is
-      # suitable for unit testing of controllers.
-      #
-      # ==== Parameters
-      # controller_klass<Controller>::
-      #   The controller class object that the action should be dispatched to.
-      # action<Symbol>:: The action name, as a symbol.
-      # params<Hash>::
-      #   An optional hash that will end up as params in the controller instance.
-      # env<Hash>::
-      #   An optional hash that is passed to the fake request. Any request options
-      #   should go here (see +fake_request+), including :req or :post_body
-      #   for setting the request body itself.
-      # &blk::
-      #   The controller is yielded to the block provided for actions *prior* to
-      #   the action being dispatched.
-      #
-      # ==== Example
-      #   dispatch_to(MyController, :create, :name => 'Homer' ) do |controller|
-      #     controller.stub!(:current_user).and_return(@user)
-      #   end
-      #
-      # ==== Notes
-      # Does not use routes.
-      #
-      # @api public
-      # @deprecated
-      def dispatch_to(controller_klass, action, params = {}, env = {}, &blk)
-        params = merge_controller_and_action(controller_klass, action, params)
-        dispatch_request(build_request(params, env), controller_klass, action.to_s, &blk)
-      end
-      
-      # Keep track of cookie values in CookieJar within the context of the
-      # block; you need to set this up for secific controllers.
-      #
-      # ==== Parameters
-      # *controller_classes:: Controller classes to operate on in the context of the block.
-      # &blk:: The context to operate on; optionally accepts the cookie jar as an argument.
-      #
-      # @api public
-      # @deprecated
-      def with_cookies(*controller_classes, &blk)
-        cookie_jar = CookieJar.new
-        before_cb = lambda { |c| c.cookies.update(cookie_jar) }
-        after_cb  = lambda { |c| cookie_jar.update_from_request(c.request) }
-        controller_classes.each do |klass|
-          klass._before_dispatch_callbacks << before_cb
-          klass._after_dispatch_callbacks  << after_cb
-        end
-        blk.arity == 1 ? blk.call(cookie_jar) : blk.call
-        controller_classes.each do |klass|
-          klass._before_dispatch_callbacks.delete before_cb
-          klass._after_dispatch_callbacks.delete after_cb
-        end
-      end
-
-      # Dispatches an action to the given class and using HTTP Basic Authentication
-      # This bypasses the router and is suitable for unit testing of controllers.
-      #
-      # ==== Parameters
-      # controller_klass<Controller>::
-      #   The controller class object that the action should be dispatched to.
-      # action<Symbol>:: The action name, as a symbol.
-      # username<String>:: The username.
-      # password<String>:: The password.
-      # params<Hash>::
-      #   An optional hash that will end up as params in the controller instance.
-      # env<Hash>::
-      #   An optional hash that is passed to the fake request. Any request options
-      #   should go here (see +fake_request+), including :req or :post_body
-      #   for setting the request body itself.
-      # &blk::
-      #   The controller is yielded to the block provided for actions *prior* to
-      #   the action being dispatched.
-      #
-      # ==== Example
-      #   dispatch_with_basic_authentication_to(MyController, :create, 'Fred', 'secret', :name => 'Homer' ) do |controller|
-      #     controller.stub!(:current_user).and_return(@user)
-      #   end
-      #
-      # ==== Notes
-      # Does not use routes.
-      #
-      # @api public
-      # @deprecated
-      def dispatch_with_basic_authentication_to(controller_klass, action, username, password, params = {}, env = {}, &blk)
-        env["X_HTTP_AUTHORIZATION"] = "Basic #{Base64.encode64("#{username}:#{password}")}"
-        
-        params = merge_controller_and_action(controller_klass, action, params)        
-        dispatch_request(build_request(params, env), controller_klass, action.to_s, &blk)
-      end
-      
-      # @api private
-      def merge_controller_and_action(controller_klass, action, params)
-        params[:controller] = controller_klass.name.to_const_path
-        params[:action]     = action.to_s
-        
-        params
-      end
-
-      # Prepares and returns a request suitable for dispatching with
-      # dispatch_request. If you don't need to modify the request
-      # object before dispatching (e.g. to add cookies), you probably
-      # want to use dispatch_to instead.
-      #
-      # ==== Parameters
-      # params<Hash>::
-      #   An optional hash that will end up as params in the controller instance.
-      # env<Hash>::
-      #   An optional hash that is passed to the fake request. Any request options
-      #   should go here (see +fake_request+), including :req or :post_body
-      #   for setting the request body itself.
-      #
-      # ==== Example
-      #   req = build_request(:id => 1)
-      #   req.cookies['app_cookie'] = "testing"
-      #   dispatch_request(req, MyController, :edit)
-      #
-      # ==== Notes
-      # Does not use routes.
-      #
-      # @api public    
-      # @deprecated  
-      def build_request(params = {}, env = {})
-        params             = Merb::Parse.params_to_query_string(params)
-
-        query_string = env[:query_string] || env['QUERY_STRING']
-        env[:query_string] = query_string ? "#{query_string}&#{params}" : params
-        
-        post_body = env[:post_body] || env['POST_BODY']
-        fake_request(env, { :post_body => post_body, :req => env[:req] })
-      end
-
-      # An HTTP GET request that operates through the router.
-      #
-      # ==== Parameters
-      # path<String>:: The path that should go to the router as the request uri.
-      # params<Hash>::
-      #   An optional hash that will end up as params in the controller instance.
-      # env<Hash>::
-      #   An optional hash that is passed to the fake request. Any request options
-      #   should go here (see +fake_request+).
-      # &blk::
-      #   The controller is yielded to the block provided for actions *prior* to
-      #   the action being dispatched.
-      #
-      # @api public  
-      # @deprecated    
-      def get(path, params = {}, env = {}, &block)
-        env[:request_method] = "GET"
-        mock_request(path, params, env, &block)
-      end
-
-      # An HTTP POST request that operates through the router.
-      #
-      # ==== Parameters
-      # path<String>:: The path that should go to the router as the request uri.
-      # params<Hash>::
-      #   An optional hash that will end up as params in the controller instance.
-      # env<Hash>::
-      #   An optional hash that is passed to the fake request. Any request options
-      #   should go here (see fake_request).
-      # &blk::
-      #   The controller is yielded to the block provided for actions *prior* to
-      #   the action being dispatched.
-      #
-      # @api public  
-      # @deprecated    
-      def post(path, params = {}, env = {}, &block)
-        env[:request_method] = "POST"
-        mock_request(path, params, env, &block)
-      end
-
-      # An HTTP PUT request that operates through the router.
-      #
-      # ==== Parameters
-      # path<String>:: The path that should go to the router as the request uri.
-      # params<Hash>::
-      #   An optional hash that will end up as params in the controller instance.
-      # env<Hash>::
-      #   An optional hash that is passed to the fake request. Any request options
-      #   should go here (see fake_request).
-      # &blk::
-      #   The controller is yielded to the block provided for actions *prior* to
-      #   the action being dispatched.
-      #
-      # @api public      
-      def put(path, params = {}, env = {}, &block)
-        env[:request_method] = "PUT"
-        mock_request(path, params, env, &block)
-      end
-
-      # An HTTP DELETE request that operates through the router
-      #
-      # ==== Parameters
-      # path<String>:: The path that should go to the router as the request uri.
-      # params<Hash>::
-      #   An optional hash that will end up as params in the controller instance.
-      # env<Hash>::
-      #   An optional hash that is passed to the fake request. Any request options
-      #   should go here (see fake_request).
-      # &blk::
-      #   The controller is yielded to the block provided for actions *prior* to
-      #   the action being dispatched.
-      #
-      # @api public
-      # @deprecated
-      def delete(path, params = {}, env = {}, &block)
-        env[:request_method] = "DELETE"
-        mock_request(path, params, env, &block)
-      end
-
-      # A generic request that checks the router for the controller and action.
-      # This request goes through the Merb::Router and finishes at the controller.
-      #
-      # ==== Parameters
-      # path<String>:: The path that should go to the router as the request uri.
-      # params<Hash>::
-      #   An optional hash that will end up as params in the controller instance.
-      # env<Hash>::
-      #   An optional hash that is passed to the fake request. Any request options
-      #   should go here (see +fake_request+).
-      # &blk::
-      #   The controller is yielded to the block provided for actions *prior* to
-      #   the action being dispatched.
-      #
-      # ==== Example
-      #   request(path, { :name => 'Homer' }, { :request_method => "PUT" }) do |controller|
-      #     controller.stub!(:current_user).and_return(@user)
-      #   end
-      #
-      # ==== Notes
-      # Uses Routes.
-      #
-      # @api plugin
-      # @deprecated
-      def mock_request(path, params = {}, env= {}, &block)
-        env[:request_method] ||= "GET"
-        env[:request_uri], env[:query_string] = path.split('?')
-        
-        multipart = env.delete(:test_with_multipart)
-
-        request = build_request(params, env)
-
-        opts = check_request_for_route(request) # Check that the request will be routed correctly
-        controller_name = (opts[:namespace] ? opts.delete(:namespace) + '/' : '') + opts.delete(:controller)
-        klass = Object.full_const_get(controller_name.snake_case.to_const_string)
-        
-        action = opts.delete(:action).to_s
-        params.merge!(opts)
-
-        multipart.nil? ? dispatch_to(klass, action, params, env, &block) : dispatch_multipart_to(klass, action, params, env, &block)
-      end
-
-
-      # The workhorse for the dispatch*to helpers.
-      #
-      # ==== Parameters
-      # request<Merb::Test::RequestHelper::FakeRequest, Merb::Request>::
-      #   A request object that has been setup for testing.
-      # controller_klass<Merb::Controller>::
-      #   The class object off the controller to dispatch the action to.
-      # action<Symbol>:: The action to dispatch the request to.
-      # &blk::
-      #   The controller is yielded to the block provided for actions *prior* to
-      #   the action being dispatched.
-      #
-      # ==== Returns
-      # An instance of +controller_klass+ based on the parameters.
-      #
-      # ==== Notes
-      # Does not use routes.
-      #
-      # @api public
-      # @deprecated
-      def dispatch_request(request, controller_klass, action, &blk)
-        controller = controller_klass.new(request)
-        yield controller if block_given?
-        controller._dispatch(action)
-
-        Merb.logger.info controller._benchmarks.inspect
-        Merb.logger.flush
-
-        controller
-      end
-
-      # Checks to see that a request is routable.
-      #
-      # ==== Parameters
-      # request<Merb::Test::RequestHelper::FakeRequest, Merb::Request>::
-      #   The request object to inspect.
-      #
-      # ==== Raises
-      # Merb::ControllerExceptions::BadRequest::
-      #   No matching route was found.
-      #
-      # ==== Returns
-      # Hash:: The parameters built based on the matching route.
-      #
-      # @api plugin
-      # @deprecated
-      def check_request_for_route(request)
-        match =  ::Merb::Router.match(request)
-        if match[0].nil? && match[1].empty?
-          raise ::Merb::ControllerExceptions::BadRequest, "No routes match the request. Request uri: #{request.uri}"
-        else
-          match[1]
-        end
-      end # check_request_for_route
-    end # RequestHelper
-  end # Test
-end # Merb
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/multipart_request_helper.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/multipart_request_helper.rb
deleted file mode 100644
index c4644df..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/multipart_request_helper.rb
+++ /dev/null
@@ -1,176 +0,0 @@
-module Merb::Test::MultipartRequestHelper
-  require 'rubygems'
-  gem "mime-types"
-  require 'mime/types'
-
-  class Param
-    attr_accessor :key, :value
-
-    # ==== Parameters
-    # key<~to_s>:: The parameter key.
-    # value<~to_s>:: The parameter value.
-    def initialize(key, value)
-      @key   = key
-      @value = value
-    end
-
-    # ==== Returns
-    # String:: The parameter in a form suitable for a multipart request.
-    def to_multipart
-      return %(Content-Disposition: form-data; name="#{key}"\r\n\r\n#{value}\r\n)
-    end
-  end
-
-  class FileParam
-    attr_accessor :key, :filename, :content
-
-    # ==== Parameters
-    # key<~to_s>:: The parameter key.
-    # filename<~to_s>:: Name of the file for this parameter.
-    # content<~to_s>:: Content of the file for this parameter.
-    def initialize(key, filename, content)
-      @key      = key
-      @filename = filename
-      @content  = content
-    end
-
-    # ==== Returns
-    # String::
-    #   The file parameter in a form suitable for a multipart request.
-    def to_multipart
-      return %(Content-Disposition: form-data; name="#{key}"; filename="#{filename}"\r\n) + "Content-Type: #{MIME::Types.type_for(@filename)}\r\n\r\n" + content + "\r\n"
-    end
-  end
-
-  class Post
-    BOUNDARY = '----------0xKhTmLbOuNdArY'
-    CONTENT_TYPE = "multipart/form-data, boundary=" + BOUNDARY
-
-    # ==== Parameters
-    # params<Hash>:: Optional params for the controller.
-    def initialize(params = {})
-      @multipart_params = []
-      push_params(params)
-    end
-
-    # Saves the params in an array of multipart params as Param and
-    # FileParam objects.
-    #
-    # ==== Parameters
-    # params<Hash>:: The params to add to the multipart params.
-    # prefix<~to_s>:: An optional prefix for the request string keys.
-    def push_params(params, prefix = nil)
-      params.sort_by {|k| k.to_s}.each do |key, value|
-        param_key = prefix.nil? ? key : "#{prefix}[#{key}]"
-        if value.respond_to?(:read)
-          @multipart_params << FileParam.new(param_key, value.path, value.read)
-        else
-          if value.is_a?(Hash) || value.is_a?(Mash)
-            value.keys.each do |k|
-              push_params(value, param_key)
-            end
-          else
-            @multipart_params << Param.new(param_key, value)
-          end
-        end
-      end
-    end
-
-    # ==== Returns
-    # Array[String, String]:: The query and the content type.
-    def to_multipart
-      query = @multipart_params.collect { |param| "--" + BOUNDARY + "\r\n" + param.to_multipart }.join("") + "--" + BOUNDARY + "--"
-      return query, CONTENT_TYPE
-    end
-  end 
-
-  # Similar to dispatch_to but allows for sending files inside params.  
-  #
-  # ==== Paramters 
-  # controller_klass<Controller>::
-  #   The controller class object that the action should be dispatched to.
-  # action<Symbol>:: The action name, as a symbol.
-  # params<Hash>::
-  #   An optional hash that will end up as params in the controller instance.
-  # env<Hash>::
-  #   An optional hash that is passed to the fake request. Any request options
-  #   should go here (see +fake_request+).
-  # &blk:: The block is executed in the context of the controller.
-  #  
-  # ==== Example
-  #   dispatch_multipart_to(MyController, :create, :my_file => @a_file ) do |controller|
-  #     controller.stub!(:current_user).and_return(@user)
-  #   end
-  #
-  # ==== Notes
-  # Set your option to contain a file object to simulate file uploads.
-  #   
-  # Does not use routes.
-  #---
-  # @public
-  def dispatch_multipart_to(controller_klass, action, params = {}, env = {}, &blk)
-    request = multipart_fake_request(env, params)
-    dispatch_request(request, controller_klass, action, &blk)
-  end
-
-  # An HTTP POST request that operates through the router and uses multipart
-  # parameters.
-  #
-  # ==== Parameters
-  # path<String>:: The path that should go to the router as the request uri.
-  # params<Hash>::
-  #   An optional hash that will end up as params in the controller instance.
-  # env<Hash>::
-  #   An optional hash that is passed to the fake request. Any request options
-  #   should go here (see +fake_request+).
-  # block<Proc>:: The block is executed in the context of the controller.
-  #
-  # ==== Notes
-  # To include an uploaded file, put a file object as a value in params.
-  def multipart_post(path, params = {}, env = {}, &block)
-    env[:request_method] = "POST"
-    env[:test_with_multipart] = true
-    mock_request(path, params, env, &block)
-  end
-
-  # An HTTP PUT request that operates through the router and uses multipart
-  # parameters.
-  #
-  # ==== Parameters
-  # path<String>:: The path that should go to the router as the request uri.
-  # params<Hash>::
-  #   An optional hash that will end up as params in the controller instance.
-  # env<Hash>::
-  #   An optional hash that is passed to the fake request. Any request options
-  #   should go here (see +fake_request+).
-  # block<Proc>:: The block is executed in the context of the controller.
-  #
-  # ==== Notes
-  # To include an uplaoded file, put a file object as a value in params.
-  def multipart_put(path, params = {}, env = {}, &block)
-    env[:request_method] = "PUT"
-    env[:test_with_multipart] = true
-    mock_request(path, params, env, &block)
-  end
-  
-  # ==== Parameters
-  # env<Hash>::
-  #   An optional hash that is passed to the fake request. Any request options
-  #   should go here (see +fake_request+).
-  # params<Hash>::
-  #   An optional hash that will end up as params in the controller instance.
-  # 
-  # ==== Returns
-  # FakeRequest::
-  #   A multipart Request object that is built based on the parameters.
-  def multipart_fake_request(env = {}, params = {})
-    if params.empty?
-      fake_request(env)
-    else
-      m = Post.new(params)
-      body, head = m.to_multipart
-      fake_request(env.merge( :content_type => head, 
-                              :content_length => body.length), :post_body => body)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/request_helper.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/request_helper.rb
deleted file mode 100644
index dbaad5e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/request_helper.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require "rack"
-
-module Merb
-  module Test
-    module MakeRequest
-
-      def request(uri, env = {})
-        uri = url(uri) if uri.is_a?(Symbol)
-        uri = URI(uri)
-        uri.scheme ||= "http"
-        uri.host   ||= "example.org"
-
-        if (env[:method] == "POST" || env["REQUEST_METHOD"] == "POST")
-          params = env.delete(:body_params) if env.key?(:body_params)
-          params = env.delete(:params) if env.key?(:params) && !env.key?(:input)
-
-          unless env.key?(:input)
-            env[:input] = Merb::Parse.params_to_query_string(params)
-            env["CONTENT_TYPE"] = "application/x-www-form-urlencoded"
-          end
-        end
-
-        if env[:params]
-          uri.query = [
-            uri.query, Merb::Parse.params_to_query_string(env.delete(:params))
-          ].compact.join("&")
-        end
-        
-        ignore_cookies = env.has_key?(:jar) && env[:jar].nil?
-
-        unless ignore_cookies
-          # Setup a default cookie jar container
-          @__cookie_jar__ ||= Merb::Test::CookieJar.new
-          # Grab the cookie group name
-          jar = env.delete(:jar) || :default
-          # Set the cookie header with the cookies
-          env["HTTP_COOKIE"] = @__cookie_jar__.for(jar, uri)
-        end
-        
-        app = Merb::Rack::Application.new
-        rack = app.call(::Rack::MockRequest.env_for(uri.to_s, env))
-
-        rack = Struct.new(:status, :headers, :body, :url, :original_env).
-          new(rack[0], rack[1], rack[2], uri.to_s, env)
-          
-        @__cookie_jar__.update(jar, uri, rack.headers["Set-Cookie"]) unless ignore_cookies
-
-        Merb::Dispatcher.work_queue.size.times do
-          Merb::Dispatcher.work_queue.pop.call
-        end
-
-        rack
-      end
-    end
-    
-    module RequestHelper
-      include MakeRequest
-
-      def describe_request(rack)
-        "a #{rack.original_env[:method] || rack.original_env["REQUEST_METHOD"] || "GET"} to '#{rack.url}'"
-      end
-
-      def describe_input(input)
-        if input.respond_to?(:controller_name)
-          "#{input.controller_name}##{input.action_name}"
-        elsif input.respond_to?(:original_env)
-          describe_request(input)
-        else
-          input
-        end
-      end
-      
-      def status_code(input)
-        input.respond_to?(:status) ? input.status : input
-      end
-      
-      def requesting(*args)   request(*args) end
-      def response_for(*args) request(*args) end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/route_helper.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/route_helper.rb
deleted file mode 100644
index 9fca796..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/helpers/route_helper.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-module Merb
-  module Test
-    module RouteHelper
-      include RequestHelper
-      
-      # There are three possible ways to use this method.  First, if you have a named route, 
-      # you can specify the route as the first parameter as a symbol and any paramters in a 
-      # hash.  Second, you can generate the default route by just passing the params hash, 
-      # just passing the params hash.  Finally, you can use the anonymous parameters.  This 
-      # allows you to specify the parameters to a named route in the order they appear in the 
-      # router.  
-      #
-      # ==== Parameters(Named Route)
-      # name<Symbol>:: 
-      #   The name of the route. 
-      # args<Hash>:: 
-      #   Parameters for the route generation.
-      #
-      # ==== Parameters(Default Route)
-      # args<Hash>:: 
-      #   Parameters for the route generation.  This route will use the default route. 
-      #
-      # ==== Parameters(Anonymous Parameters)
-      # name<Symbol>::
-      #   The name of the route.  
-      # args<Array>:: 
-      #   An array of anonymous parameters to generate the route
-      #   with. These parameters are assigned to the route parameters
-      #   in the order that they are passed.
-      #
-      # ==== Returns
-      # String:: The generated URL.
-      #
-      # ==== Examples
-      # Named Route
-      #
-      # Merb::Router.prepare do
-      #   match("/articles/:title").to(:controller => :articles, :action => :show).name("articles")
-      # end
-      #
-      # url(:articles, :title => "new_article")
-      #
-      # Default Route
-      #
-      # Merb::Router.prepare do
-      #   default_routes
-      # end
-      #
-      # url(:controller => "articles", :action => "new")
-      #
-      # Anonymous Paramters
-      #
-      # Merb::Router.prepare do
-      #   match("/articles/:year/:month/:title").to(:controller => :articles, :action => :show).name("articles")
-      # end
-      #
-      # url(:articles, 2008, 10, "test_article")
-      #
-      # @api public
-      def url(*args)
-        args << (@request_params || {})
-        Merb::Router.url(*args)
-      end
-      
-      # Mimics the resource method available to controllers
-      #
-      # ==== Paramaters
-      # resources<Object>:: The resources to generate URLs from
-      # params<Hash>:: Any extra parameters that are required.
-      #
-      # ==== Returns
-      # String:: The generated URL.
-      def resource(*args)
-        args << @request_params || {}
-        Merb::Router.resource(*args)
-      end
-      
-      # ==== Parameters
-      # path<~to_string>:: The URL of the request.
-      # method<~to_sym>:: HTTP request method.
-      # env<Hash>:: Additional parameters for the request.
-      #
-      # ==== Returns
-      # Hash:: A hash containing the controller and action along with any parameters
-      def request_to(path, method = :get, env = {})
-        env[:request_method] ||= method.to_s.upcase
-        env[:request_uri] = path
-        
-        check_request_for_route(build_request({}, env))
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers.rb
deleted file mode 100644
index de8fe47..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module Merb::Test::Rspec; end
-
-require "merb-core/test/matchers/controller_matchers"
-require "merb-core/test/matchers/route_matchers"
-require "merb-core/test/matchers/view_matchers"
-require "merb-core/test/matchers/request_matchers"
-
-Merb::Test::ControllerHelper.send(:include, Merb::Test::Rspec::ControllerMatchers)
-Merb::Test::RouteHelper.send(:include, Merb::Test::Rspec::RouteMatchers)
-
-module Merb::Test::ViewHelper
-  include Merb::Test::Rspec::ViewMatchers
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/controller_matchers.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/controller_matchers.rb
deleted file mode 100644
index f8ff6ac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/controller_matchers.rb
+++ /dev/null
@@ -1,108 +0,0 @@
-module Merb::Test::Rspec::ControllerMatchers
-
-  class BeRedirect
-    # ==== Parameters
-    # target<Fixnum, ~status>::
-    #   Either the status code or a controller with a status code.
-    #
-    # ==== Returns
-    # Boolean:: True if the status code is in the range 300..305 or 307.
-    def matches?(target)
-      @target = target
-      [307, *(300..305)].include?(target.respond_to?(:status) ? target.status : target)
-    end
-
-    # ==== Returns
-    # String:: The failure message.
-    def failure_message
-      "expected#{inspect_target} to redirect"
-    end
-
-    # ==== Returns
-    # String:: The failure message to be displayed in negative matches.
-    def negative_failure_message
-      "expected#{inspect_target} not to redirect"
-    end
-
-    # ==== Returns
-    # String:: The controller and action name.
-    def inspect_target
-      " #{@target.controller_name}##{@target.action_name}" if @target.respond_to?(:controller_name) && @target.respond_to?(:action_name)
-    end
-  end
-
-  class BeError
-    def initialize(expected)
-      @expected = expected
-    end
-    
-    def matches?(target)
-      @target = target
-      @target.request.exceptions &&
-        @target.request.exceptions.first.is_a?(@expected)
-    end
-    
-    def failure_message
-      "expected #{@target} to be a #{@expected} error, but it was " << 
-        @target.request.exceptions.first.inspect
-    end
-    
-    def negative_failure_message
-      "expected #{@target} not to be a #{@expected} error, but it was"
-    end
-  end
-  
-  def be_error(expected)
-    BeError.new(expected)
-  end
-
-  class Provide
-
-    # === Parameters
-    # expected<Symbol>:: A format to check
-    def initialize(expected)
-      @expected = expected
-    end
-
-    # ==== Parameters
-    # target<Symbol>::
-    #   A ControllerClass or controller_instance
-    #
-    # ==== Returns
-    # Boolean:: True if the formats provided by the target controller/class include the expected
-    def matches?(target)
-      @target = target
-      provided_formats.include?( @expected )
-    end
-
-    # ==== Returns
-    # String:: The failure message.
-    def failure_message
-      "expected #{@target.name} to provide #{@expected}, but it doesn't"
-    end
-
-    # ==== Returns
-    # String:: The failure message to be displayed in negative matches.
-    def negative_failure_message
-      "expected #{@target.name} not to provide #{@expected}, but it does"
-    end
-
-    # ==== Returns
-    # Array[Symbol]:: The formats the expected provides
-    def provided_formats
-      @target.class_provided_formats
-    end
-  end
-  
-  # Passes if the controller actually provides the target format
-  #
-  # === Parameters
-  # expected<Symbol>:: A format to check
-  #
-  # ==== Examples
-  #   ControllerClass.should provide( :html )
-  #   controller_instance.should provide( :xml )
-  def provide( expected )
-    Provide.new( expected )
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/request_matchers.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/request_matchers.rb
deleted file mode 100644
index 5df1295..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/request_matchers.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-Spec::Matchers.create(:be_successful, :respond_successfully) do
-  matches do |rack|
-    @status = rack.respond_to?(:status) ? rack.status : rack
-    @inspect = describe_input(rack)
-
-    (200..207).include?(@status)
-  end
-  
-  message do |not_string, rack|
-    if @inspect.is_a?(Numeric)
-      "Expected status code#{not_string} to be successful, " \
-      "but it was #{@inspect}"
-    else
-      "Expected #{@inspect}#{not_string} " \
-      "to be successful, but it returned a #{@status}"
-    end
-  end
-end
-
-Spec::Matchers.create(:be_missing, :be_client_error) do
-  matches do |rack|
-    @status = rack.respond_to?(:status) ? rack.status : rack
-    @inspect = describe_input(rack)
-
-    (400..417).include?(@status)
-  end
-  
-  message do |not_string, rack|
-    unless @inspect.is_a?(Numeric)
-      "Expected #{@inspect}#{not_string} " \
-      "to be missing, but it returned a #{@status}"
-    else
-      "Expected #{not_string ? "not to get " : ""}a missing error code, " \
-      "but got #{@inspect}"
-    end
-  end
-end
-
-Spec::Matchers.create(:have_body) do
-  matches do |rack, body|
-    @actual = if rack.respond_to?(:body)
-      rack.body.to_s
-    else
-      rack.to_s
-    end
-    
-    @actual == body
-  end
-  
-  negative_failure_message do |rack, body|
-    "Expected the response not to match:\n    #{body}\nActual response was:\n    #{@actual}" 
-  end
-  
-  failure_message do |rack, body|
-    "Expected the response to match:\n    #{body}\nActual response was:\n    #{@actual}" 
-  end
-end
-
-Spec::Matchers.create(:have_content_type) do
-  matches do |rack, mime_symbol|
-    content_type = rack.headers["Content-Type"].split("; ").first
-    if registered_mime = Merb.available_mime_types[mime_symbol]
-      registered_mime[:accepts].include?(content_type)
-    else
-      @error = "Mime #{mime_symbol.inspect} was not registered"
-      false
-    end
-  end
-  
-  failure_message do |rack, mime_symbol|
-    if @error
-      @error
-    else
-      ret = "Expected your response to be of the #{mime_symbol} type, "
-      if mime = Merb.available_accepts[rack.headers["Content-Type"]]
-        ret << "but it was #{mime}"
-      else
-        ret << "but it was #{rack.headers["Content-Type"]}, which was " \
-               "not a registered Merb content type."
-      end
-    end
-  end
-end
-
-Spec::Matchers.create(:redirect) do
-  matches do |rack|
-    @inspect = describe_input(rack)
-    @status_code = status_code(rack)
-    (300..399).include?(@status_code)
-  end
-  
-  message do |not_string, rack|
-    "Expected #{@inspect}#{not_string} to be a redirect, but the " \
-    "status code was #{@status_code}"
-  end
-end
-
-Spec::Matchers.create(:redirect_to) do
-  expected_value do |location|
-    url(location) if location.is_a?(Symbol)
-  end
-  
-  matches do |rack, location|
-    @inspect = describe_input(rack)
-    
-    return false unless rack.headers["Location"]
-    @location, @query = rack.headers["Location"].split("?")
-    @status_code = status_code(rack)
-    @status_code.in?(300..399) && @location == location
-  end
-  
-  negative_failure_message do |rack, location|
-    "Expected #{@inspect} not to redirect to " \
-    "<#{location}> but it did."
-  end
-  
-  failure_message do |rack, location|
-    if !rack.status.in?(300..399)
-      "Expected #{@inspect} to be a redirect, but " \
-      "it returned status code #{rack.status}."
-    elsif rack.headers["Location"] != location
-      "Expected #{@inspect} to redirect to " \
-      "<#{location}>, but it redirected to <#{rack.headers["Location"]}>"
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/route_matchers.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/route_matchers.rb
deleted file mode 100644
index cbe61c6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/route_matchers.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-module Merb::Test::Rspec::RouteMatchers
-
-  class RouteToMatcher
-
-    # ==== Parameters
-    # klass_or_name<Class, String>::
-    #   The controller class or class name to match routes for.
-    # action<~to_s>:: The name of the action to match routes for.
-    def initialize(klass_or_name, action)
-      @expected_controller = Class === klass_or_name ? klass_or_name.name : klass_or_name
-      @expected_action = action.to_s
-    end
-
-    # ==== Parameters
-    # target<Hash>:: The route parameters to match.
-    #
-    # ==== Returns
-    # Boolean:: True if the controller action and parameters match.
-    def matches?(target)
-      @target_env = target.dup
-      @target_controller, @target_action = @target_env.delete(:controller).to_s, @target_env.delete(:action).to_s
-
-      @target_controller = "#{target.delete(:namespace)}::#{@target_controller}" if target.has_key?(:namespace)
-
-      @expected_controller.snake_case == @target_controller.snake_case && @expected_action == @target_action && match_parameters(@target_env)
-    end
-
-    # ==== Parameters
-    # target<Hash>:: The route parameters to match.
-    #
-    # ==== Returns
-    # Boolean::
-    #   True if the parameter matcher created with #with matches or if no
-    #   parameter matcher exists.
-    def match_parameters(target)
-      @parameter_matcher.nil? ? true : @parameter_matcher.matches?(target)
-    end
-
-    # Creates a new paramter matcher.
-    #
-    # ==== Parameters
-    # parameters<Hash, ~to_param>:: The parameters to match.
-    #
-    # ==== Returns
-    # RouteToMatcher:: This matcher.
-    #
-    # ==== Alternatives
-    # If parameters is an object, then a new expected hash will be constructed
-    # with the key :id set to parameters.to_param.
-    def with(parameters)
-      @parameter_matcher = ParameterMatcher.new(parameters)
-
-      self
-    end
-
-    # ==== Returns
-    # String:: The failure message.
-    def failure_message
-      "expected the request to route to #{@expected_controller.to_const_string}##{@expected_action}#{expected_parameters_message}, but was #{@target_controller.to_const_string}##{@target_action}#{actual_parameters_message}"
-    end
-
-    # ==== Returns
-    # String:: The failure message to be displayed in negative matches.
-    def negative_failure_message
-      "expected the request not to route to #{@expected_controller.camel_case}##{@expected_action}#{expected_parameters_message}, but it did"
-    end
-
-    def expected_parameters_message
-      " with #{@parameter_matcher.expected.inspect}" if @parameter_matcher
-    end
-
-    def actual_parameters_message
-      " with #{(@parameter_matcher.actual || {}).inspect}" if @parameter_matcher
-    end
-  end
-
-  class ParameterMatcher
-    attr_accessor :expected, :actual
-
-    # ==== Parameters
-    # hash_or_object<Hash, ~to_param>:: The parameters to match.
-    #
-    # ==== Alternatives
-    # If hash_or_object is an object, then a new expected hash will be
-    # constructed with the key :id set to hash_or_object.to_param.
-    def initialize(hash_or_object)
-      @expected = {}
-      case hash_or_object
-      when Hash then @expected = hash_or_object
-      else @expected[:id] = hash_or_object.to_param
-      end
-    end
-
-    # ==== Parameters
-    # parameter_hash<Hash>:: The route parameters to match.
-    #
-    # ==== Returns
-    # Boolean:: True if the route parameters match the expected ones.
-    def matches?(parameter_hash)
-      @actual = parameter_hash.dup.except(:controller, :action)
-
-      return @actual.empty? if @expected.empty?
-      @expected.all? {|(k, v)| @actual.has_key?(k) && @actual[k] == v}
-    end
-
-    # ==== Returns
-    # String:: The failure message.
-    def failure_message
-      "expected the route to contain parameters #{@expected.inspect}, but instead contained #{@actual.inspect}"
-    end
-
-    # ==== Returns
-    # String:: The failure message to be displayed in negative matches.
-    def negative_failure_message
-      "expected the route not to contain parameters #{@expected.inspect}, but it did"
-    end
-  end
-
-  # Passes when the actual route parameters match the expected controller class
-  # and controller action. Exposes a +with+ method for specifying parameters.
-  #
-  # ==== Parameters
-  # klass_or_name<Class, String>::
-  #   The controller class or class name to match routes for.
-  # action<~to_s>:: The name of the action to match routes for.
-  #
-  # ==== Example
-  #   # Passes if a GET request to "/" is routed to the Widgets controller's
-  #   # index action.
-  #   request_to("/", :get).should route_to(Widgets, :index)
-  #
-  #   # Use the 'with' method for parameter checks
-  #   request_to("/123").should route_to(widgets, :show).with(:id => "123")
-  def route_to(klass_or_name, action)
-    RouteToMatcher.new(klass_or_name, action)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/view_matchers.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/view_matchers.rb
deleted file mode 100644
index f136de2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/matchers/view_matchers.rb
+++ /dev/null
@@ -1,248 +0,0 @@
-module Merb::Test::Rspec::ViewMatchers
-  
-  class HaveXpath
-    def initialize(expected, &block)
-      # Require nokogiri and fall back on rexml
-      begin
-        require "nokogiri"
-        require "merb-core/test/test_ext/nokogiri"
-      rescue LoadError => e
-        if require "rexml/document"
-          require "merb-core/vendor/nokogiri/css"
-          warn("Standard REXML library is slow. Please consider installing nokogiri.\nUse \"sudo gem install nokogiri\"")
-        end
-      end
-      
-      @expected = expected
-      @block    = block
-    end
-    
-    def matches?(stringlike)
-      if defined?(Nokogiri::XML)
-        matches_nokogiri?(stringlike)
-      else
-        matches_rexml?(stringlike)
-      end
-    end
-    
-    def matches_rexml?(stringlike)
-      stringlike = stringlike.body.to_s if stringlike.respond_to?(:body)
-      
-      @query = query
-      
-      @document = case stringlike
-      when REXML::Document
-        stringlike.root
-      when REXML::Node, Array
-        @query = query.map { |q| q.gsub(%r'//', './') }
-        stringlike
-      else
-        begin
-          REXML::Document.new(stringlike.to_s).root
-        rescue REXML::ParseException => e
-          if e.message.include?("second root element")
-            REXML::Document.new("<fake-root-element>#{stringlike}</fake-root-element>").root
-          else
-            raise e
-          end
-        end
-      end
-      
-      matched = @query.map do |q|
-        if @document.is_a?(Array)
-          @document.map { |d| REXML::XPath.match(d, q) }
-        else
-          REXML::XPath.match(@document, q)
-        end
-      end.flatten.compact
-      
-      matched.any? && (!@block || @block.call(matched))
-    end
-    
-    def matches_nokogiri?(stringlike)
-      stringlike = stringlike.body.to_s if stringlike.respond_to?(:body)
-      
-      @query = query
-      
-      @document = case stringlike
-      when Nokogiri::HTML::Document
-        stringlike
-      when Nokogiri::XML::NodeSet
-        @query = query.map { |q| q.gsub(%r'//', './') }
-        stringlike
-      when StringIO
-        Nokogiri::HTML(stringlike.string)
-      else
-        Nokogiri::HTML(stringlike.to_s)
-      end
-
-      matched = @document.xpath(*@query)
-      matched.any? && (!@block || @block.call(matched))
-    end
-    
-    def query
-      [@expected].flatten.compact
-    end
-    
-    # ==== Returns
-    # String:: The failure message.
-    def failure_message
-      "expected following text to match xpath #{@expected}:\n#{@document}"
-    end
-
-    # ==== Returns
-    # String:: The failure message to be displayed in negative matches.
-    def negative_failure_message
-      "expected following text to not match xpath #{@expected}:\n#{@document}"
-    end    
-  end
-  
-  class HaveSelector < HaveXpath
-
-    # ==== Returns
-    # String:: The failure message.
-    def failure_message
-      "expected following text to match selector #{@expected}:\n#{@document}"
-    end
-    
-    # ==== Returns
-    # String:: The failure message to be displayed in negative matches.
-    def negative_failure_message
-      "expected following text to not match selector #{@expected} (#{@query}):\n#{@document}"
-    end
-    
-    def query
-      Nokogiri::CSS::Parser.parse(*super).map { |ast| ast.to_xpath }
-    end
-  
-  end
-  
-  class HaveTag < HaveSelector
-    
-    # ==== Returns
-    # String:: The failure message.
-    def failure_message
-      "expected following output to contain a #{tag_inspect} tag:\n#{@document}"
-    end
-    
-    # ==== Returns
-    # String:: The failure message to be displayed in negative matches.
-    def negative_failure_message
-      "expected following output to omit a #{tag_inspect}:\n#{@document}"
-    end
-    
-    def tag_inspect
-      options = @expected.last.dup
-      content = options.delete(:content)
-      
-      html = "<#{@expected.first}"
-      options.each do |k,v|
-        html << " #{k}='#{v}'"
-      end
-      
-      if content
-        html << ">#{content}</#{@expected.first}>"
-      else
-        html << "/>"
-      end
-      
-      html
-    end
-    
-    def query
-      options  = @expected.last.dup
-      selector = @expected.first.to_s
-      
-      selector << ":contains('#{options.delete(:content)}')" if options[:content]
-      
-      options.each do |key, value|
-        selector << "[#{key}='#{value}']"
-      end
-      
-      Nokogiri::CSS::Parser.parse(selector).map { |ast| ast.to_xpath }
-    end
-    
-  end
-
-  class HasContent
-    def initialize(content)
-      @content = content
-    end
-
-    def matches?(element)
-      element = element.body.to_s if element.respond_to?(:body)
-      @element = element
-      
-      case @content
-      when String
-        @element.contains?(@content)
-      when Regexp
-        @element.matches?(@content)
-      end
-    end
-    
-    # ==== Returns
-    # String:: The failure message.
-    def failure_message
-      "expected the following element's content to #{content_message}:\n#{@element.inner_text}"
-    end
-
-    # ==== Returns
-    # String:: The failure message to be displayed in negative matches.
-    def negative_failure_message
-      "expected the following element's content to not #{content_message}:\n#{@element.inner_text}"
-    end
-    
-    def content_message
-      case @content
-      when String
-        "include \"#{@content}\""
-      when Regexp
-        "match #{@content.inspect}"
-      end
-    end
-  end
-
-  # Matches HTML content against a CSS 3 selector.
-  #
-  # ==== Parameters
-  # expected<String>:: The CSS selector to look for.
-  #
-  # ==== Returns
-  # HaveSelector:: A new have selector matcher.
-  # ---
-  # @api public
-  def have_selector(expected, &block)
-    HaveSelector.new(expected, &block)
-  end
-  alias_method :match_selector, :have_selector
-
-  # Matches HTML content against an XPath query
-  #
-  # ==== Parameters
-  # expected<String>:: The XPath query to look for.
-  #
-  # ==== Returns
-  # HaveXpath:: A new have xpath matcher.
-  # ---
-  # @api public
-  def have_xpath(expected, &block)
-    HaveXpath.new(expected, &block)
-  end
-  alias_method :match_xpath, :have_xpath
-  
-  
-  def have_tag(name, attributes = {}, &block)
-    HaveTag.new([name, attributes], &block)
-  end
-  alias_method :match_tag, :have_tag
-  
-  # Matches the contents of an HTML document with
-  # whatever string is supplied
-  #
-  # ---
-  # @api public
-  def contain(content)
-    HasContent.new(content)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/run_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/run_spec.rb
deleted file mode 100644
index f9f1176..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/run_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require "stringio"
-require 'rubygems'
-require 'spec'
-require 'spec/runner/formatter/specdoc_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      class BaseTextFormatter
-        def dump_failure(counter, failure)
-          output = @options.error_stream
-          output.puts
-          output.puts "#{counter.to_s})"
-          output.puts colourise("#{failure.header}\n#{failure.exception.message}", failure)
-          output.puts format_backtrace(failure.exception.backtrace)
-          output.flush
-        end
-      end
-    end
-  end
-end
-
-def run_spec(spec, base_dir)
-
-  $VERBOSE = nil
-  err, out = StringIO.new, StringIO.new
-  def out.tty?() true end
-  options = Spec::Runner::OptionParser.parse(%W(#{spec} -fs --color), err, out)
-  options.filename_pattern = File.expand_path(spec)
-  failure = ! Spec::Runner::CommandLine.run(options)
-  File.open(base_dir / "results" / "#{File.basename(spec)}_out", "w") do |file|
-    file.puts out.string
-  end
-  File.open(base_dir / "results" / "#{File.basename(spec)}_err", "w") do |file|
-    file.puts err.string
-  end
-  exit!(failure ? -1 : 0)
-end
-
-run_spec(ARGV[0], File.expand_path(File.join(File.dirname(__FILE__), "..", "..", ".."))) if ENV["NOW"]
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/run_specs.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/run_specs.rb
deleted file mode 100644
index 18906b7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/run_specs.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-require 'rubygems'
-require 'benchmark'
-require 'spec'
-require 'spec/runner/formatter/base_text_formatter'
-require 'spec/spec_helper.rb'
-
-# Load this stuff so it only has to be loaded once for the entire suite
-require 'spec/mocks'
-require 'spec/mocks/extensions'
-require 'spec/runner/formatter/specdoc_formatter'
-require 'base64'
-require 'nkf'
-require 'kconv'
-require 'rack'
-require 'fileutils'
-
-begin
-  require 'json'
-rescue
-  require 'json/pure'
-end
-
-Merb::Dispatcher
-
-module Merb
-  class Counter
-
-    attr_accessor :time
-    def initialize
-      @examples, @failures, @errors, @pending, @total_time = 0, 0, 0, 0, 0
-      @err = ""
-      @mutex = Mutex.new
-    end
-  
-    def failed?
-      @failures > 0
-    end
-  
-    def add(spec, out, err)
-      @mutex.synchronize do
-        puts
-        puts "Running #{spec}."
-        STDOUT.puts out
-        STDOUT.flush
-        match = out.match(/(\d+) examples?, (\d+) failures?(?:, (\d+) errors?)?(?:, (\d+) pending?)?/m)
-        time = out.match(/Finished in (\d+\.\d+) seconds/)
-        @total_time += time[1].to_f if time
-        if match
-          e, f, errors, pending = match[1..-1]
-          @examples += e.to_i
-          @failures += f.to_i
-          @errors += errors.to_i
-          @pending += pending.to_i
-        end
-        unless err.chomp.empty?
-          @err << err.chomp << "\n"
-        end
-      end
-    end
-
-    def report
-      i = 0
-      @err.gsub!(/^\d*\)\s*/) do
-        "#{i += 1})\n"
-      end
-      
-      puts @err
-      puts
-      if @failures != 0 || @errors != 0
-        print "\e[31m" # Red
-      elsif @pending != 0
-        print "\e[33m" # Yellow
-      else
-        print "\e[32m" # Green
-      end
-      puts "#{@examples} examples, #{@failures} failures, #{@errors} errors, #{@pending} pending, #{sprintf("suite run in %3.3f seconds", @time.real)}"
-      # TODO: we need to report pending examples all together
-       puts "\e[0m"    
-    end  
-  end
-end
-
-require File.dirname(__FILE__) / "run_spec"
-
-# Runs specs in all files matching the file pattern.
-#
-# ==== Parameters
-# globs<String, Array[String]>:: File patterns to look for.
-# spec_cmd<~to_s>:: The spec command. Defaults to "spec".
-# run_opts<String>:: Options to pass to spec commands, for instance,
-#                    if you want to use profiling formatter.
-# except<Array[String]>:: File paths to skip.
-def run_specs(globs, spec_cmd='spec', run_opts = "-c", except = [])
-  require "optparse"
-  require "spec"
-  globs = globs.is_a?(Array) ? globs : [globs]
-  
-  forking = (ENV["FORK"] ? ENV["FORK"] == "1" : Merb.forking_environment?)
-  base_dir = File.expand_path(File.dirname(__FILE__) / ".." / ".." / "..")
-  
-  counter = Merb::Counter.new
-  forks   = 0
-  failure = false
-
-  FileUtils.rm_rf(base_dir / "results")
-  FileUtils.mkdir_p(base_dir / "results")
-
-  time = Benchmark.measure do
-    files = {}
-    globs.each do |glob|
-      Dir[glob].each do |spec|
-        if forking
-          Kernel.fork do
-            run_spec(spec, base_dir)
-          end
-          Process.wait
-        else
-          `NOW=1 #{Gem.ruby} #{File.dirname(__FILE__) / "run_spec.rb"} \"#{spec}\"`
-        end
-        out = File.read(base_dir / "results" / "#{File.basename(spec)}_out")
-        err = File.read(base_dir / "results" / "#{File.basename(spec)}_err")
-        counter.add(spec, out, err)        
-      end
-    end
-  end
-  
-  Process.waitall
-  
-  counter.time = time
-  counter.report
-  FileUtils.rm_rf(base_dir / "results")  
-  exit!(counter.failed? ? -1 : 0)
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/tasks/spectasks.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/tasks/spectasks.rb
deleted file mode 100644
index c42494c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/tasks/spectasks.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-desc "Run specs, run a specific spec with TASK=spec/path_to_spec.rb"
-task :spec => [ "spec:default" ]
-
-namespace :spec do
-  OPTS_FILENAME = "./spec/spec.opts"
-  if File.exist?(OPTS_FILENAME)
-    SPEC_OPTS = ["--options", OPTS_FILENAME]
-  else
-    SPEC_OPTS = ["--color", "--format", "specdoc"]
-  end
-  
-  Spec::Rake::SpecTask.new('default') do |t|
-      t.spec_opts = SPEC_OPTS
-    if(ENV['TASK'])
-      t.spec_files = [ENV['TASK']]
-    else
-      t.spec_files = Dir['spec/**/*_spec.rb'].sort
-    end
-  end
-
-  desc "Run all model specs, run a spec for a specific Model with MODEL=MyModel"
-  Spec::Rake::SpecTask.new('model') do |t|
-    t.spec_opts = SPEC_OPTS
-    if(ENV['MODEL'])
-      t.spec_files = Dir["spec/models/**/#{ENV['MODEL']}_spec.rb"].sort
-    else
-      t.spec_files = Dir['spec/models/**/*_spec.rb'].sort
-    end
-  end
-
-  desc "Run all request specs, run a spec for a specific Request with REQUEST=MyRequest"
-  Spec::Rake::SpecTask.new('request') do |t|
-    t.spec_opts = SPEC_OPTS
-    if(ENV['REQUEST'])
-      t.spec_files = Dir["spec/requests/**/#{ENV['REQUEST']}_spec.rb"].sort
-    else    
-      t.spec_files = Dir['spec/requests/**/*_spec.rb'].sort
-    end
-  end
-  
-  desc "Run all controller specs, run a spec for a specific Controller with CONTROLLER=MyController"
-  Spec::Rake::SpecTask.new('controller') do |t|
-    t.spec_opts = SPEC_OPTS
-    if(ENV['CONTROLLER'])
-      t.spec_files = Dir["spec/controllers/**/#{ENV['CONTROLLER']}_spec.rb"].sort
-    else    
-      t.spec_files = Dir['spec/controllers/**/*_spec.rb'].sort
-    end
-  end
-  
-  desc "Run all view specs, run specs for a specific controller (and view) with CONTROLLER=MyController (VIEW=MyView)"
-  Spec::Rake::SpecTask.new('view') do |t|
-    t.spec_opts = SPEC_OPTS
-    if(ENV['CONTROLLER'] and ENV['VIEW'])
-      t.spec_files = Dir["spec/views/**/#{ENV['CONTROLLER']}/#{ENV['VIEW']}*_spec.rb"].sort
-    elsif(ENV['CONTROLLER'])
-      t.spec_files = Dir["spec/views/**/#{ENV['CONTROLLER']}/*_spec.rb"].sort
-    else
-      t.spec_files = Dir['spec/views/**/*_spec.rb'].sort
-    end
-  end
-
-  desc "Run all specs and output the result in html"
-  Spec::Rake::SpecTask.new('html') do |t|
-    t.spec_opts = ["--format", "html"]
-    t.libs = ['lib', 'server/lib' ]
-    t.spec_files = Dir['spec/**/*_spec.rb'].sort
-  end
-
-  desc "Run specs and check coverage with rcov"
-  Spec::Rake::SpecTask.new('coverage') do |t|
-    t.spec_opts = SPEC_OPTS
-    t.spec_files = Dir['spec/**/*_spec.rb'].sort
-    t.libs = ['lib', 'server/lib' ]
-    t.rcov = true
-    t.rcov_opts = ["--exclude 'config,spec,#{Gem::path.join(',')}'"]    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/hpricot.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/hpricot.rb
deleted file mode 100644
index 31d2cb4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/hpricot.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# http://yehudakatz.com/2007/01/27/a-better-assert_select-assert_elements/
-# based on assert_elements
-# Author: Yehuda Katz
-# Email:  wycats @nospam@ gmail.com
-# Web:    http://www.yehudakatz.com
-#
-# which was based on HpricotTestHelper
-# Author: Luke Redpath
-# Email: contact @nospam@ lukeredpath.co.uk
-# Web: www.lukeredpath.co.uk / opensource.agileevolved.com
-
-class Hpricot::Elem
-  def contain?(value)
-    self.inner_text.include?(value)
-  end
-  
-  alias_method :contains?, :contain?
-
-  def match?(regex)
-    self.inner_text.match(regex)
-  end
-  
-  alias_method :matches?, :match?
-  
-  # courtesy of 'thomas' from the comments
-  # of _whys blog - get in touch if you want a better credit!
-  def inner_text
-    self.children.collect do |child|
-      child.is_a?(Hpricot::Text) ? child.content : ((child.respond_to?("inner_text") && child.inner_text) || "")
-    end.join.strip
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/nokogiri.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/nokogiri.rb
deleted file mode 100644
index b0aa7c5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/nokogiri.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-module Nokogiri
-  module CSS
-    class XPathVisitor
-      
-      def visit_pseudo_class_text(node)
-        "@type='text'"
-      end
-
-      def visit_pseudo_class_password(node)
-        "@type='password'"
-      end
-      
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/object.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/object.rb
deleted file mode 100644
index 7c9957b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/object.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class Object
-  # ==== Parameters
-  # attr<~to_s>:: The name of the instance variable to get.
-  #
-  # ==== Returns
-  # Object:: The instance variable @attr for this object.
-  # 
-  # ==== Examples
-  #   # In a spec
-  #   @my_obj.assigns(:my_value).should == @my_value
-  def assigns(attr)
-    self.instance_variable_get("@#{attr}")
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/rspec.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/rspec.rb
deleted file mode 100644
index b6762da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/rspec.rb
+++ /dev/null
@@ -1,165 +0,0 @@
-require 'spec'
-module Kernel
-  def given(*args, &example_group_block)
-    args << {} unless Hash === args.last
-    params = args.last
-    
-    params[:shared] = true
-    
-    describe(*args) do
-      prepend_before(:each) do
-        self.instance_eval(&example_group_block)
-      end
-    end
-  end  
-end
-
-module Spec
-  module Matchers
-    def fail
-      raise_error(Spec::Expectations::ExpectationNotMetError)
-    end
-
-    def fail_with(message)
-      raise_error(Spec::Expectations::ExpectationNotMetError, message)
-    end
-  end
-end
-
-module Merb
-  module Test
-    def self.add_helpers(&block)
-      if Merb.test_framework == :rspec
-        ExampleGroup.class_eval(&block)
-      else
-        raise NotImplementedError
-      end
-    end
-
-    module Matchers
-    end
-    
-    class ExampleGroup < Spec::Example::ExampleGroup
-
-      include ::Merb::Test::Matchers
-      include ::Merb::Test::RouteHelper
-      include ::Merb::Test::ControllerHelper
-
-      class << self
-        # This is a copy of the method in rspec, so we can have
-        # describe "...", :when => "logged in", and the like
-        def describe(*args, &example_group_block)
-          ret = super
-          
-          params = args.last.is_a?(Hash) ? args.last : {}
-          if example_group_block
-            params[:when] = params[:when] || params[:given]
-            ret.module_eval %{it_should_behave_like "#{params[:when]}"} if params[:when]
-          end
-        end
-        alias context describe
-
-        def given(*args, &example_group_block)
-          args << {} unless Hash === args.last
-          params = args.last
-          
-          params[:shared] = true
-          
-          describe(*args, &example_group_block)
-        end
-      end
-
-      ::Spec::Example::ExampleGroupFactory.default(self)
-    end
-  end
-end
-
-module Spec
-  module Matchers
-  
-    def self.create(*names, &block)
-      @guid ||= 0
-      Merb::Test::Matchers.module_eval do
-        klass = Class.new(MatcherDSL) do
-          def initialize(expected_value)
-            @expected_value = expected_value
-          end          
-        end
-        klass.class_eval(&block)
-        
-        names.each do |name|
-          define_method(name) do |*expected_value|
-            # Avoid a warning for the form should foo.
-            klass.new(expected_value && expected_value[0])
-          end
-        end
-      end
-    end
-  
-    class MatcherDSL
-      include Merb::Test::RouteHelper
-      
-      def self.matches(&block)
-        define_method(:matches_proxy, &block)
-        
-        define_method(:matches?) do |object|
-          @object = object
-          if block.arity == 2
-            matches_proxy(@object, @expected_value)
-          else
-            matches_proxy(@object)
-          end
-        end
-      end
-      
-      def self.expected_value(&block)
-        define_method(:transform_expected, &block)
-        
-        define_method(:initialize) do |expected_value|
-          @expected_value = transform_expected(expected_value) || expected_value
-        end
-      end
-      
-      def self.negative_failure_message(&block)
-        define_method(:proxy_negative_failure_message, &block)
-        
-        define_method(:negative_failure_message) do
-          proxy_negative_failure_message(@object, @expected_value)
-        end
-      end
-
-      def self.failure_message(&block)
-        define_method(:proxy_failure_message, &block)
-        
-        define_method(:failure_message) do
-          proxy_failure_message(@object, @expected_value)
-        end
-      end
-      
-      def self.message(&block)
-        class_eval do
-          def failure_message
-            generic_message(@object, @expected_value, nil)
-          end
-          
-          def negative_failure_message
-            generic_message(@object, @expected_value, " not")
-          end
-        end
-        
-        define_method(:proxy_generic_message, &block)
-
-        ar = block.arity
-        
-        define_method(:generic_message) do |object, expected, not_string|
-          if ar == 3
-            proxy_generic_message(not_string, object, expected)
-          else
-            proxy_generic_message(not_string, object)
-          end
-        end
-      end
-    end
-  
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/string.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/string.rb
deleted file mode 100644
index 641d47e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/test_ext/string.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class String
-  def contain?(value)
-    self.include?(value)
-  end
-  
-  alias_method :contains?, :contain?
-
-  def match?(regex)
-    self.match(regex)
-  end
-  
-  alias_method :matches?, :match?
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/webrat.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/webrat.rb
deleted file mode 100644
index 724a77e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/test/webrat.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Merb
-  module WebratHelper
-
-    def self.delegate_to_session(*meths)
-      meths.each do |meth|
-        self.class_eval <<-RUBY
-          def #{meth}(*args, &blk)
-            with_session do |sess|
-              sess.#{meth}(*args, &blk)
-            end
-          end
-        RUBY
-      end
-    end
-    
-    def with_session
-      @session ||= ::Webrat::Session.new
-      yield @session
-      @session.response
-    end
-    
-    # all of these methods delegate to the @session, which should
-    # be created transparently.
-    #
-    # Note that when using Webrat, #request also uses @session, so
-    # that #request and webrat native functions behave interchangably
-    delegate_to_session :visits, :within, :clicks_link_within,
-                        :reload, :header, :http_accept, :basic_auth,
-                        :save_and_open_page, :fill_in, :check, 
-                        :uncheck, :choose, :select, :attach_file,
-                        :click_area, :click_link, :click_button,
-                        :field_labeled                        
-    
-    alias reloads reload
-    alias visit visits
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css.rb
deleted file mode 100644
index 065e501..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require 'merb-core/vendor/nokogiri/css/node'
-require 'merb-core/vendor/nokogiri/css/xpath_visitor'
-require 'merb-core/vendor/nokogiri/css/generated_tokenizer'
-require 'merb-core/vendor/nokogiri/css/generated_parser'
-require 'merb-core/vendor/nokogiri/css/tokenizer'
-require 'merb-core/vendor/nokogiri/css/parser'
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/generated_parser.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/generated_parser.rb
deleted file mode 100644
index d9cda5d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/generated_parser.rb
+++ /dev/null
@@ -1,653 +0,0 @@
-#
-# DO NOT MODIFY!!!!
-# This file is automatically generated by racc 1.4.5
-# from racc grammer file "lib/nokogiri/css/parser.y".
-#
-
-require 'racc/parser'
-
-
-module Nokogiri
-
-  module CSS
-
-    class GeneratedParser < Racc::Parser
-
-##### racc 1.4.5 generates ###
-
-racc_reduce_table = [
- 0, 0, :racc_error,
- 4, 46, :_reduce_1,
- 1, 46, :_reduce_2,
- 2, 49, :_reduce_3,
- 2, 49, :_reduce_4,
- 2, 49, :_reduce_5,
- 1, 49, :_reduce_6,
- 2, 49, :_reduce_7,
- 2, 49, :_reduce_8,
- 2, 50, :_reduce_9,
- 2, 50, :_reduce_10,
- 1, 50, :_reduce_none,
- 2, 50, :_reduce_12,
- 1, 50, :_reduce_13,
- 3, 48, :_reduce_14,
- 1, 48, :_reduce_none,
- 2, 57, :_reduce_16,
- 1, 51, :_reduce_17,
- 1, 51, :_reduce_18,
- 6, 55, :_reduce_19,
- 6, 55, :_reduce_20,
- 5, 55, :_reduce_21,
- 2, 54, :_reduce_22,
- 3, 54, :_reduce_23,
- 3, 54, :_reduce_24,
- 3, 54, :_reduce_25,
- 1, 59, :_reduce_none,
- 1, 59, :_reduce_none,
- 4, 60, :_reduce_28,
- 3, 60, :_reduce_29,
- 2, 60, :_reduce_30,
- 1, 60, :_reduce_31,
- 2, 61, :_reduce_32,
- 2, 61, :_reduce_33,
- 1, 52, :_reduce_none,
- 0, 52, :_reduce_none,
- 2, 56, :_reduce_36,
- 2, 56, :_reduce_37,
- 2, 56, :_reduce_38,
- 2, 56, :_reduce_39,
- 1, 56, :_reduce_none,
- 1, 56, :_reduce_none,
- 1, 56, :_reduce_none,
- 1, 56, :_reduce_none,
- 1, 62, :_reduce_44,
- 4, 58, :_reduce_45,
- 4, 58, :_reduce_46,
- 0, 58, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 1, 63, :_reduce_none,
- 5, 53, :_reduce_55,
- 1, 64, :_reduce_none,
- 2, 47, :_reduce_none,
- 0, 47, :_reduce_none ]
-
-racc_reduce_n = 59
-
-racc_shift_n = 97
-
-racc_action_table = [
-     5,    79,    81,    27,    10,    26,    94,    93,    42,     2,
-    42,    30,    56,     5,     5,    28,    79,    81,    10,    42,
-    42,    42,    47,     2,    51,    42,    42,    10,    82,    84,
-    85,    52,    78,    10,    10,     7,     9,    12,    15,    42,
-    10,    17,    77,    82,    84,    85,    10,    78,     7,     7,
-     9,    12,    15,    42,     5,    17,    68,    77,    10,     9,
-    69,    15,    10,     2,    17,     9,     9,    15,    15,    50,
-    17,    17,     9,     5,    15,    26,    21,    17,     9,    54,
-    15,    23,    63,    17,    37,    38,    39,    64,    42,     7,
-     9,    12,    15,    44,     9,    17,    15,    42,    15,    17,
-    76,    42,    86,    31,    42,    89,    42,    25,     7,    91,
-    33,    92,    34,    35,    53,    42,    42 ]
-
-racc_action_check = [
-     0,    73,    73,     6,     0,     7,    90,    90,    63,     0,
-    28,     7,    29,    17,    55,     6,    71,    71,    55,    33,
-    34,    35,    17,    55,    22,    37,    38,     4,    73,    73,
-    73,    23,    73,     1,    11,     0,     0,     0,     0,    42,
-    67,     0,    73,    71,    71,    71,    14,    71,    17,    55,
-    55,    55,    55,    44,    36,    55,    50,    71,    36,     4,
-    52,     4,    16,    36,     4,     1,    11,     1,    11,    21,
-     1,    11,    67,    41,    67,     5,     5,    67,    14,    27,
-    14,     5,    41,    14,    13,    13,    13,    41,    64,    36,
-    36,    36,    36,    16,    16,    36,    16,    65,    18,    16,
-    69,    15,    72,     9,    75,    80,    83,     5,    41,    87,
-    13,    88,    13,    13,    24,    93,    94 ]
-
-racc_action_pointer = [
-    -2,    27,   nil,   nil,    21,    65,     3,    -5,   nil,    92,
-   nil,    28,   nil,    77,    40,    92,    56,    11,    58,   nil,
-   nil,    62,   -18,    20,    72,   nil,   nil,    79,     1,   -30,
-   nil,   nil,   nil,    10,    11,    12,    52,    16,    17,   nil,
-   nil,    71,    30,   nil,    44,   nil,   nil,   nil,   nil,   nil,
-    40,   nil,    53,   nil,   nil,    12,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,    -1,    79,    88,   nil,    34,   nil,    84,
-   nil,    13,    61,    -2,   nil,    95,   nil,   nil,   nil,   nil,
-    64,   nil,   nil,    97,   nil,   nil,   nil,    68,    69,   nil,
-    -4,   nil,   nil,   106,   107,   nil,   nil ]
-
-racc_action_default = [
-   -59,   -42,   -17,   -13,   -41,   -59,   -59,   -59,    -2,   -59,
-   -44,   -43,   -18,   -15,   -40,   -58,   -35,   -59,   -11,   -38,
-   -37,   -31,   -59,   -26,   -59,   -22,   -27,   -59,   -58,   -59,
-   -26,   -16,   -39,   -58,   -58,   -58,   -59,   -58,   -58,    -6,
-   -36,   -59,   -58,   -34,   -58,    -9,   -10,   -33,   -32,   -12,
-   -59,   -23,   -30,   -24,    97,   -59,   -25,    -5,    -8,    -7,
-   -14,    -3,    -4,   -58,   -58,   -58,   -57,   -59,   -29,   -59,
-    -1,   -47,   -59,   -47,   -56,   -58,   -28,   -48,   -52,   -53,
-   -59,   -54,   -49,   -58,   -50,   -51,   -21,   -59,   -59,   -19,
-   -59,   -20,   -55,   -58,   -58,   -45,   -46 ]
-
-racc_goto_table = [
-    41,    19,     8,    80,    20,    87,    48,    22,     6,    29,
-    49,    32,    46,    55,    40,    45,    43,    36,    57,    58,
-    59,    24,    61,    62,    75,   nil,   nil,    66,   nil,    67,
-    65,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    60,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    71,    72,
-    73,   nil,   nil,   nil,   nil,   nil,   nil,    70,   nil,   nil,
-    88,   nil,   nil,   nil,   nil,   nil,   nil,    74,    90,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    95,    96 ]
-
-racc_goto_check = [
-     2,    11,     3,    13,    11,    13,     9,    14,     1,    14,
-    10,    11,     8,     2,    11,     7,    11,     4,     2,     2,
-     2,    15,     2,     2,    19,   nil,   nil,     2,   nil,     2,
-     9,   nil,   nil,   nil,   nil,   nil,   nil,   nil,     3,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,     2,     2,
-     2,   nil,   nil,   nil,   nil,   nil,   nil,     3,   nil,   nil,
-     2,   nil,   nil,   nil,   nil,   nil,   nil,    11,     2,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,     2,     2 ]
-
-racc_goto_pointer = [
-   nil,     8,   -15,     2,     4,   nil,   nil,    -1,    -4,   -11,
-    -8,     0,   nil,   -68,     2,    16,   nil,   nil,   nil,   -43 ]
-
-racc_goto_default = [
-   nil,   nil,   nil,   nil,   nil,    13,    16,   nil,   nil,    18,
-     1,     3,     4,   nil,   nil,   nil,    11,    14,    83,   nil ]
-
-racc_token_table = {
- false => 0,
- Object.new => 1,
- :FUNCTION => 2,
- :INCLUDES => 3,
- :DASHMATCH => 4,
- :LBRACE => 5,
- :HASH => 6,
- :PLUS => 7,
- :GREATER => 8,
- :S => 9,
- :STRING => 10,
- :IDENT => 11,
- :COMMA => 12,
- :URI => 13,
- :CDO => 14,
- :CDC => 15,
- :NUMBER => 16,
- :PERCENTAGE => 17,
- :LENGTH => 18,
- :EMS => 19,
- :EXS => 20,
- :ANGLE => 21,
- :TIME => 22,
- :FREQ => 23,
- :IMPORTANT_SYM => 24,
- :IMPORT_SYM => 25,
- :MEDIA_SYM => 26,
- :PAGE_SYM => 27,
- :CHARSET_SYM => 28,
- :DIMENSION => 29,
- :PREFIXMATCH => 30,
- :SUFFIXMATCH => 31,
- :SUBSTRINGMATCH => 32,
- :TILDE => 33,
- :NOT_EQUAL => 34,
- :SLASH => 35,
- :DOUBLESLASH => 36,
- :NOT => 37,
- "." => 38,
- "*" => 39,
- "[" => 40,
- "]" => 41,
- ")" => 42,
- ":" => 43,
- "=" => 44 }
-
-racc_use_result_var = true
-
-racc_nt_base = 45
-
-Racc_arg = [
- racc_action_table,
- racc_action_check,
- racc_action_default,
- racc_action_pointer,
- racc_goto_table,
- racc_goto_check,
- racc_goto_default,
- racc_goto_pointer,
- racc_nt_base,
- racc_reduce_table,
- racc_token_table,
- racc_shift_n,
- racc_reduce_n,
- racc_use_result_var ]
-
-Racc_token_to_s_table = [
-'$end',
-'error',
-'FUNCTION',
-'INCLUDES',
-'DASHMATCH',
-'LBRACE',
-'HASH',
-'PLUS',
-'GREATER',
-'S',
-'STRING',
-'IDENT',
-'COMMA',
-'URI',
-'CDO',
-'CDC',
-'NUMBER',
-'PERCENTAGE',
-'LENGTH',
-'EMS',
-'EXS',
-'ANGLE',
-'TIME',
-'FREQ',
-'IMPORTANT_SYM',
-'IMPORT_SYM',
-'MEDIA_SYM',
-'PAGE_SYM',
-'CHARSET_SYM',
-'DIMENSION',
-'PREFIXMATCH',
-'SUFFIXMATCH',
-'SUBSTRINGMATCH',
-'TILDE',
-'NOT_EQUAL',
-'SLASH',
-'DOUBLESLASH',
-'NOT',
-'"."',
-'"*"',
-'"["',
-'"]"',
-'")"',
-'":"',
-'"="',
-'$start',
-'selector',
-'s_0toN',
-'simple_selector_1toN',
-'combinator',
-'simple_selector',
-'element_name',
-'hcap_0toN',
-'negation',
-'function',
-'attrib',
-'hcap_1toN',
-'class',
-'attrib_val_0or1',
-'expr',
-'an_plus_b',
-'pseudo',
-'attribute_id',
-'eql_incl_dash',
-'negation_arg']
-
-Racc_debug_parser = false
-
-##### racc system variables end #####
-
- # reduce 0 omitted
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 13
-  def _reduce_1( val, _values, result )
-        result = [val.first, val.last].flatten
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 13
-  def _reduce_2( val, _values, result )
- result = val.flatten
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 16
-  def _reduce_3( val, _values, result )
- result = :DIRECT_ADJACENT_SELECTOR
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 17
-  def _reduce_4( val, _values, result )
- result = :CHILD_SELECTOR
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 18
-  def _reduce_5( val, _values, result )
- result = :PRECEDING_SELECTOR
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 19
-  def _reduce_6( val, _values, result )
- result = :DESCENDANT_SELECTOR
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 20
-  def _reduce_7( val, _values, result )
- result = :DESCENDANT_SELECTOR
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 21
-  def _reduce_8( val, _values, result )
- result = :CHILD_SELECTOR
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 31
-  def _reduce_9( val, _values, result )
-        result =  if val[1].nil?
-                    val.first
-                  else
-                    Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
-                  end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 34
-  def _reduce_10( val, _values, result )
-        result = Node.new(:CONDITIONAL_SELECTOR, val)
-   result
-  end
-.,.,
-
- # reduce 11 omitted
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 38
-  def _reduce_12( val, _values, result )
-        result = Node.new(:CONDITIONAL_SELECTOR, val)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 43
-  def _reduce_13( val, _values, result )
-        result = Node.new(:CONDITIONAL_SELECTOR,
-          [Node.new(:ELEMENT_NAME, ['*']), val.first]
-        )
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 48
-  def _reduce_14( val, _values, result )
-        result = Node.new(val[1], [val.first, val.last])
-   result
-  end
-.,.,
-
- # reduce 15 omitted
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 51
-  def _reduce_16( val, _values, result )
- result = Node.new(:CLASS_CONDITION, [val[1]])
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 54
-  def _reduce_17( val, _values, result )
- result = Node.new(:ELEMENT_NAME, val)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 55
-  def _reduce_18( val, _values, result )
- result = Node.new(:ELEMENT_NAME, val)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 63
-  def _reduce_19( val, _values, result )
-        result = Node.new(:ATTRIBUTE_CONDITION,
-          [Node.new(:ELEMENT_NAME, [val[2]])] + (val[4] || [])
-        )
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 68
-  def _reduce_20( val, _values, result )
-        result = Node.new(:ATTRIBUTE_CONDITION,
-          [val[2]] + (val[4] || [])
-        )
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 74
-  def _reduce_21( val, _values, result )
-        # Non standard, but hpricot supports it.
-        result = Node.new(:PSEUDO_CLASS,
-          [Node.new(:FUNCTION, ['nth-child(', val[2]])]
-        )
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 79
-  def _reduce_22( val, _values, result )
-        result = Node.new(:FUNCTION, [val.first.strip])
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 82
-  def _reduce_23( val, _values, result )
-        result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 85
-  def _reduce_24( val, _values, result )
-        result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 88
-  def _reduce_25( val, _values, result )
-        result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
-   result
-  end
-.,.,
-
- # reduce 26 omitted
-
- # reduce 27 omitted
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 102
-  def _reduce_28( val, _values, result )
-        if val[1] == 'n'
-          result = Node.new(:AN_PLUS_B, val)
-        else
-          raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
-        end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 113
-  def _reduce_29( val, _values, result )
-               # n+3, -n+3
-        if val[0] == 'n'
-          val.unshift("1")
-          result = Node.new(:AN_PLUS_B, val)
-        elsif val[0] == '-n'
-          val[0] = 'n'
-          val.unshift("-1")
-          result = Node.new(:AN_PLUS_B, val)
-        else
-          raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
-        end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 124
-  def _reduce_30( val, _values, result )
-        if val[1] == 'n'
-          val << "+"
-          val << "0"
-          result = Node.new(:AN_PLUS_B, val)
-        else
-          raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
-        end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 136
-  def _reduce_31( val, _values, result )
-        if val[0] == 'even'
-          val = ["2","n","+","0"]
-          result = Node.new(:AN_PLUS_B, val)
-        elsif val[0] == 'odd'
-          val = ["2","n","+","1"]
-          result = Node.new(:AN_PLUS_B, val)
-        else
-          raise Racc::ParseError, "parse error on IDENT '#{val[0]}'"
-        end
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 141
-  def _reduce_32( val, _values, result )
-        result = Node.new(:PSEUDO_CLASS, [val[1]])
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 141
-  def _reduce_33( val, _values, result )
- result = Node.new(:PSEUDO_CLASS, [val[1]])
-   result
-  end
-.,.,
-
- # reduce 34 omitted
-
- # reduce 35 omitted
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 151
-  def _reduce_36( val, _values, result )
-        result = Node.new(:COMBINATOR, val)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 154
-  def _reduce_37( val, _values, result )
-        result = Node.new(:COMBINATOR, val)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 157
-  def _reduce_38( val, _values, result )
-        result = Node.new(:COMBINATOR, val)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 160
-  def _reduce_39( val, _values, result )
-        result = Node.new(:COMBINATOR, val)
-   result
-  end
-.,.,
-
- # reduce 40 omitted
-
- # reduce 41 omitted
-
- # reduce 42 omitted
-
- # reduce 43 omitted
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 166
-  def _reduce_44( val, _values, result )
- result = Node.new(:ID, val)
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 169
-  def _reduce_45( val, _values, result )
- result = [val.first, val[2]]
-   result
-  end
-.,.,
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 170
-  def _reduce_46( val, _values, result )
- result = [val.first, val[2]]
-   result
-  end
-.,.,
-
- # reduce 47 omitted
-
- # reduce 48 omitted
-
- # reduce 49 omitted
-
- # reduce 50 omitted
-
- # reduce 51 omitted
-
- # reduce 52 omitted
-
- # reduce 53 omitted
-
- # reduce 54 omitted
-
-module_eval <<'.,.,', 'lib/nokogiri/css/parser.y', 186
-  def _reduce_55( val, _values, result )
-        result = Node.new(:NOT, [val[2]])
-   result
-  end
-.,.,
-
- # reduce 56 omitted
-
- # reduce 57 omitted
-
- # reduce 58 omitted
-
- def _reduce_none( val, _values, result )
-  result
- end
-
-    end   # class GeneratedParser
-
-  end   # module CSS
-
-end   # module Nokogiri
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/generated_tokenizer.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/generated_tokenizer.rb
deleted file mode 100644
index 334f2e2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/generated_tokenizer.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-#
-# DO NOT MODIFY!!!!
-# This file is automatically generated by rex 1.0.1
-# from lexical definition file "lib/nokogiri/css/tokenizer.rex".
-#
-
-module Nokogiri
-module CSS
-class GeneratedTokenizer
-  require 'strscan'
-
-  class ScanError < StandardError ; end
-
-  attr_reader :lineno
-  attr_reader :filename
-
-  def scan_setup ; end
-
-  def action &block
-    yield
-  end
-
-  def scan_str( str )
-    scan_evaluate  str
-    do_parse
-  end
-
-  def load_file( filename )
-    @filename = filename
-    open(filename, "r") do |f|
-      scan_evaluate  f.read
-    end
-  end
-
-  def scan_file( filename )
-    load_file  filename
-    do_parse
-  end
-
-  def next_token
-    @rex_tokens.shift
-  end
-
-  def scan_evaluate( str )
-    scan_setup
-    @rex_tokens = []
-    @lineno  =  1
-    ss = StringScanner.new(str)
-    state = nil
-    until ss.eos?
-      text = ss.peek(1)
-      @lineno  +=  1  if text == "\n"
-      case state
-      when nil
-        case
-        when (text = ss.scan(/~=/i))
-           @rex_tokens.push action { [:INCLUDES, text] }
-
-        when (text = ss.scan(/\|=/i))
-           @rex_tokens.push action { [:DASHMATCH, text] }
-
-        when (text = ss.scan(/\^=/i))
-           @rex_tokens.push action { [:PREFIXMATCH, text] }
-
-        when (text = ss.scan(/\$=/i))
-           @rex_tokens.push action { [:SUFFIXMATCH, text] }
-
-        when (text = ss.scan(/\*=/i))
-           @rex_tokens.push action { [:SUBSTRINGMATCH, text] }
-
-        when (text = ss.scan(/!=/i))
-           @rex_tokens.push action { [:NOT_EQUAL, text] }
-
-        when (text = ss.scan(/[-]?([_a-z]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])([_a-z0-9-]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*\(\s*/i))
-           @rex_tokens.push action { [:FUNCTION, text] }
-
-        when (text = ss.scan(/@[-]?([_a-z]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])([_a-z0-9-]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*/i))
-           @rex_tokens.push action { [:IDENT, text] }
-
-        when (text = ss.scan(/[-]?([_a-z]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])([_a-z0-9-]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*/i))
-           @rex_tokens.push action { [:IDENT, text] }
-
-        when (text = ss.scan(/-?([0-9]+|[0-9]*\.[0-9]+)/i))
-           @rex_tokens.push action { [:NUMBER, text] }
-
-        when (text = ss.scan(/\#([_a-z0-9-]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])+/i))
-           @rex_tokens.push action { [:HASH, text] }
-
-        when (text = ss.scan(/[\s\r\n\f]*\+/i))
-           @rex_tokens.push action { [:PLUS, text] }
-
-        when (text = ss.scan(/[\s\r\n\f]*>/i))
-           @rex_tokens.push action { [:GREATER, text] }
-
-        when (text = ss.scan(/[\s\r\n\f]*,/i))
-           @rex_tokens.push action { [:COMMA, text] }
-
-        when (text = ss.scan(/[\s\r\n\f]*~/i))
-           @rex_tokens.push action { [:TILDE, text] }
-
-        when (text = ss.scan(/\:not\(/i))
-           @rex_tokens.push action { [:NOT, text] }
-
-        when (text = ss.scan(/@[-]?([_a-z]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])([_a-z0-9-]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*/i))
-           @rex_tokens.push action { [:ATKEYWORD, text] }
-
-        when (text = ss.scan(/-?([0-9]+|[0-9]*\.[0-9]+)%/i))
-           @rex_tokens.push action { [:PERCENTAGE, text] }
-
-        when (text = ss.scan(/-?([0-9]+|[0-9]*\.[0-9]+)[-]?([_a-z]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])([_a-z0-9-]|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*/i))
-           @rex_tokens.push action { [:DIMENSION, text] }
-
-        when (text = ss.scan(/<!--/i))
-           @rex_tokens.push action { [:CDO, text] }
-
-        when (text = ss.scan(/-->/i))
-           @rex_tokens.push action { [:CDC, text] }
-
-        when (text = ss.scan(/[\s\r\n\f]*\/\//i))
-           @rex_tokens.push action { [:DOUBLESLASH, text] }
-
-        when (text = ss.scan(/[\s\r\n\f]*\//i))
-           @rex_tokens.push action { [:SLASH, text] }
-
-        when (text = ss.scan(/U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})?/i))
-           @rex_tokens.push action {[:UNICODE_RANGE, text] }
-
-        when (text = ss.scan(/\/\*(.|[\r\n])*?\*\//i))
-          ;
-
-        when (text = ss.scan(/[\s\t\r\n\f]+/i))
-           @rex_tokens.push action { [:S, text] }
-
-        when (text = ss.scan(/[\.*:\[\]=\)]/i))
-           @rex_tokens.push action { [text, text] }
-
-        when (text = ss.scan(/"([^\n\r\f"]|\\n|\r\n|\r|\f|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*"|'([^\n\r\f']|\\n|\r\n|\r|\f|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*'/i))
-           @rex_tokens.push action { [:STRING, text] }
-
-        when (text = ss.scan(/\"([^\n\r\f\"]|\\n|\r\n|\r|\f|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*|([^\n\r\f\']|\\n|\r\n|\r|\f|[^\0-\177]|\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9a-f])*/i))
-           @rex_tokens.push action { [:INVALID, text] }
-
-        when (text = ss.scan(/./i))
-           @rex_tokens.push action { [text, text] }
-
-        else
-          text = ss.string[ss.pos .. -1]
-          raise  ScanError, "can not match: '" + text + "'"
-        end  # if
-
-      else
-        raise  ScanError, "undefined state: '" + state.to_s + "'"
-      end  # case state
-    end  # until ss
-  end  # def scan_evaluate
-
-end # class
-end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/node.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/node.rb
deleted file mode 100644
index 17e5c18..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/node.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-module Nokogiri
-  module CSS
-    class Node
-      attr_accessor :type, :value
-      def initialize type, value
-        @type = type
-        @value = value
-      end
-
-      def accept visitor
-        visitor.send(:"visit_#{type.to_s.downcase}", self)
-      end
-
-      def to_xpath prefix = '//', preprocess = true
-        self.preprocess! if preprocess
-        prefix + XPathVisitor.new.accept(self)
-      end
-
-      def preprocess!
-        ### Deal with nth-child
-        matches = find_by_type(
-          [:CONDITIONAL_SELECTOR,
-            [:ELEMENT_NAME],
-            [:PSEUDO_CLASS,
-              [:FUNCTION]
-            ]
-          ]
-        )
-        matches.each do |match|
-          if match.value[1].value[0].value[0] =~ /^nth-child/
-            tag_name = match.value[0].value.first
-            match.value[0].value = ['*']
-            match.value[1] = Node.new(:COMBINATOR, [
-              match.value[1].value[0],
-              Node.new(:FUNCTION, ['self(', tag_name])
-            ])
-          end
-          if match.value[1].value[0].value[0] =~ /^nth-last-child/
-            tag_name = match.value[0].value.first
-            match.value[0].value = ['*']
-            match.value[1] = Node.new(:COMBINATOR, [
-              match.value[1].value[0],
-              Node.new(:FUNCTION, ['self(', tag_name])
-            ])
-          end
-        end
-
-        ### Deal with first-child, last-child
-        matches = find_by_type(
-          [:CONDITIONAL_SELECTOR,
-            [:ELEMENT_NAME], [:PSEUDO_CLASS]
-        ])
-        matches.each do |match|
-          if ['first-child', 'last-child'].include?(match.value[1].value.first)
-            which = match.value[1].value.first.gsub(/-\w*$/, '')
-            tag_name = match.value[0].value.first
-            match.value[0].value = ['*']
-            match.value[1] = Node.new(:COMBINATOR, [
-              Node.new(:FUNCTION, ["#{which}("]),
-              Node.new(:FUNCTION, ['self(', tag_name])
-            ])
-          elsif 'only-child' == match.value[1].value.first
-            tag_name = match.value[0].value.first
-            match.value[0].value = ['*']
-            match.value[1] = Node.new(:COMBINATOR, [
-              Node.new(:FUNCTION, ["#{match.value[1].value.first}("]),
-              Node.new(:FUNCTION, ['self(', tag_name])
-            ])                                        
-          end
-        end
-
-        self
-      end
-
-      def find_by_type(types)
-        matches = []
-        matches << self if to_type == types
-        @value.each do |v|
-          matches += v.find_by_type(types) if v.respond_to?(:find_by_type)
-        end
-        matches
-      end
-
-      def to_type
-        [@type] + @value.map { |n|
-          n.to_type if n.respond_to?(:to_type)
-        }.compact
-      end
-
-      def to_a
-        [@type] + @value.map { |n| n.respond_to?(:to_a) ? n.to_a : [n] }
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/parser.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/parser.rb
deleted file mode 100644
index efc0dbb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/parser.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-module Nokogiri
-  module CSS
-    class Parser < GeneratedParser
-      class << self
-        def parse string
-          new.parse(string)
-        end
-      end
-
-      def initialize
-        @tokenizer = Tokenizer.new
-      end
-
-      def parse string
-        @tokenizer.scan string
-        do_parse
-      end
-
-      def next_token
-        @tokenizer.next_token
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/parser.y b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/parser.y
deleted file mode 100644
index b8edb52..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/parser.y
+++ /dev/null
@@ -1,198 +0,0 @@
-class Nokogiri::CSS::GeneratedParser
-
-token FUNCTION INCLUDES DASHMATCH LBRACE HASH PLUS GREATER S STRING IDENT
-token COMMA URI CDO CDC NUMBER PERCENTAGE LENGTH EMS EXS ANGLE TIME FREQ
-token IMPORTANT_SYM IMPORT_SYM MEDIA_SYM PAGE_SYM CHARSET_SYM DIMENSION
-token PREFIXMATCH SUFFIXMATCH SUBSTRINGMATCH TILDE NOT_EQUAL SLASH DOUBLESLASH
-token NOT
-
-rule
-  selector
-    : selector COMMA s_0toN simple_selector_1toN {
-        result = [val.first, val.last].flatten
-      }
-    | simple_selector_1toN { result = val.flatten }
-    ;
-  combinator
-    : PLUS s_0toN { result = :DIRECT_ADJACENT_SELECTOR }
-    | GREATER s_0toN { result = :CHILD_SELECTOR }
-    | TILDE s_0toN { result = :PRECEDING_SELECTOR }
-    | S { result = :DESCENDANT_SELECTOR }
-    | DOUBLESLASH s_0toN { result = :DESCENDANT_SELECTOR }
-    | SLASH s_0toN { result = :CHILD_SELECTOR }
-    ;
-  simple_selector
-    : element_name hcap_0toN {
-        result =  if val[1].nil?
-                    val.first
-                  else
-                    Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
-                  end
-      }
-    | element_name negation {
-        result = Node.new(:CONDITIONAL_SELECTOR, val)
-      }
-    | function
-    | function attrib {
-        result = Node.new(:CONDITIONAL_SELECTOR, val)
-      }
-    | hcap_1toN {
-        result = Node.new(:CONDITIONAL_SELECTOR,
-          [Node.new(:ELEMENT_NAME, ['*']), val.first]
-        )
-      }
-    ;
-  simple_selector_1toN
-    : simple_selector combinator simple_selector_1toN {
-        result = Node.new(val[1], [val.first, val.last])
-      }
-    | simple_selector
-    ;
-  class
-    : '.' IDENT { result = Node.new(:CLASS_CONDITION, [val[1]]) }
-    ;
-  element_name
-    : IDENT { result = Node.new(:ELEMENT_NAME, val) }
-    | '*' { result = Node.new(:ELEMENT_NAME, val) }
-    ;
-  attrib
-    : '[' s_0toN IDENT s_0toN attrib_val_0or1 ']' {
-        result = Node.new(:ATTRIBUTE_CONDITION,
-          [Node.new(:ELEMENT_NAME, [val[2]])] + (val[4] || [])
-        )
-      }
-    | '[' s_0toN function s_0toN attrib_val_0or1 ']' {
-        result = Node.new(:ATTRIBUTE_CONDITION,
-          [val[2]] + (val[4] || [])
-        )
-      }
-    | '[' s_0toN NUMBER s_0toN ']' {
-        # Non standard, but hpricot supports it.
-        result = Node.new(:PSEUDO_CLASS,
-          [Node.new(:FUNCTION, ['nth-child(', val[2]])]
-        )
-      }
-    ;
-  function
-    : FUNCTION ')' {
-        result = Node.new(:FUNCTION, [val.first.strip])
-      }
-    | FUNCTION expr ')' {
-        result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
-      }
-    | FUNCTION an_plus_b ')' {
-        result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
-      }
-    | NOT expr ')' {
-        result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
-      }
-    ;
-  expr
-    : NUMBER
-    | STRING
-    ;
-  an_plus_b
-    : NUMBER IDENT PLUS NUMBER          # 5n+3 -5n+3
-      {
-        if val[1] == 'n'
-          result = Node.new(:AN_PLUS_B, val)
-        else
-          raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
-        end
-      }
-    | IDENT PLUS NUMBER {               # n+3, -n+3
-        if val[0] == 'n'
-          val.unshift("1")
-          result = Node.new(:AN_PLUS_B, val)
-        elsif val[0] == '-n'
-          val[0] = 'n'
-          val.unshift("-1")
-          result = Node.new(:AN_PLUS_B, val)
-        else
-          raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
-        end
-      }
-    | NUMBER IDENT                      # 5n, -5n
-      {
-        if val[1] == 'n'
-          val << "+"
-          val << "0"
-          result = Node.new(:AN_PLUS_B, val)
-        else
-          raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
-        end
-      }
-    | IDENT                             # even, odd
-      {
-        if val[0] == 'even'
-          val = ["2","n","+","0"]
-          result = Node.new(:AN_PLUS_B, val)
-        elsif val[0] == 'odd'
-          val = ["2","n","+","1"]
-          result = Node.new(:AN_PLUS_B, val)
-        else
-          raise Racc::ParseError, "parse error on IDENT '#{val[0]}'"
-        end
-      }
-    ;
-  pseudo
-    : ':' function {
-        result = Node.new(:PSEUDO_CLASS, [val[1]])
-      }
-    | ':' IDENT { result = Node.new(:PSEUDO_CLASS, [val[1]]) }
-    ;
-  hcap_0toN
-    : hcap_1toN
-    |
-    ;
-  hcap_1toN
-    : attribute_id hcap_1toN {
-        result = Node.new(:COMBINATOR, val)
-      }
-    | class hcap_1toN {
-        result = Node.new(:COMBINATOR, val)
-      }
-    | attrib hcap_1toN {
-        result = Node.new(:COMBINATOR, val)
-      }
-    | pseudo hcap_1toN {
-        result = Node.new(:COMBINATOR, val)
-      }
-    | attribute_id
-    | class
-    | attrib
-    | pseudo
-    ;
-  attribute_id
-    : HASH { result = Node.new(:ID, val) }
-    ;
-  attrib_val_0or1
-    : eql_incl_dash s_0toN IDENT s_0toN { result = [val.first, val[2]] }
-    | eql_incl_dash s_0toN STRING s_0toN { result = [val.first, val[2]] }
-    |
-    ;
-  eql_incl_dash
-    : '='
-    | PREFIXMATCH
-    | SUFFIXMATCH
-    | SUBSTRINGMATCH
-    | NOT_EQUAL
-    | INCLUDES
-    | DASHMATCH
-    ;
-  negation
-    : NOT s_0toN negation_arg s_0toN ')' {
-        result = Node.new(:NOT, [val[2]])
-      }
-    ;
-  negation_arg
-    : hcap_1toN
-    ;
-  s_0toN
-    : S s_0toN
-    |
-    ;
-end
-
----- header
-
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/tokenizer.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/tokenizer.rb
deleted file mode 100644
index 61edc3d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/tokenizer.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module Nokogiri
-  module CSS
-    class Tokenizer < GeneratedTokenizer
-      def scan(str)
-        scan_evaluate(str)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/tokenizer.rex b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/tokenizer.rex
deleted file mode 100644
index aa92b2d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/tokenizer.rex
+++ /dev/null
@@ -1,63 +0,0 @@
-module Nokogiri
-module CSS
-class GeneratedTokenizer
-
-macro
-  nl        \n|\r\n|\r|\f
-  w         [\s\r\n\f]*
-  nonascii  [^\\\\0-\\\\177]
-  num       -?([0-9]+|[0-9]*\.[0-9]+)
-  unicode   \\\\\\\\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?
-
-  escape    {unicode}|\\\\\\\[^\n\r\f0-9a-f]
-  nmchar    [_a-z0-9-]|{nonascii}|{escape}
-  nmstart   [_a-z]|{nonascii}|{escape}
-  ident     [-]?({nmstart})({nmchar})*
-  name      ({nmchar})+
-  string1   "([^\n\r\f"]|\\{nl}|{nonascii}|{escape})*"
-  string2   '([^\n\r\f']|\\{nl}|{nonascii}|{escape})*'
-  string    {string1}|{string2}
-  invalid1  \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
-  invalid2  \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
-  invalid   {invalid1}|{invalid2}
-  Comment   \/\*(.|[\r\n])*?\*\/
-
-rule
-
-# [:state]  pattern  [actions]
-
-            ~=               { [:INCLUDES, text] }
-            \|=              { [:DASHMATCH, text] }
-            \^=              { [:PREFIXMATCH, text] }
-            \$=              { [:SUFFIXMATCH, text] }
-            \*=              { [:SUBSTRINGMATCH, text] }
-            !=               { [:NOT_EQUAL, text] }
-            {ident}\(\s*     { [:FUNCTION, text] }
-            @{ident}         { [:IDENT, text] }
-            {ident}          { [:IDENT, text] }
-            {num}            { [:NUMBER, text] }
-            \#{name}         { [:HASH, text] }
-            {w}\+            { [:PLUS, text] }
-            {w}>             { [:GREATER, text] }
-            {w},             { [:COMMA, text] }
-            {w}~             { [:TILDE, text] }
-            \:not\(          { [:NOT, text] }
-            @{ident}         { [:ATKEYWORD, text] }
-            {num}%           { [:PERCENTAGE, text] }
-            {num}{ident}     { [:DIMENSION, text] }
-            <!--             { [:CDO, text] }
-            -->              { [:CDC, text] }
-            {w}\/\/          { [:DOUBLESLASH, text] }
-            {w}\/            { [:SLASH, text] }
-            
-            U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})?  {[:UNICODE_RANGE, text] }
-            
-            {Comment}                    /* ignore comments */
-            [\s\t\r\n\f]+    { [:S, text] }
-            [\.*:\[\]=\)]    { [text, text] }
-            {string}         { [:STRING, text] }
-            {invalid}        { [:INVALID, text] }
-            .                { [text, text] }
-end
-end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/xpath_visitor.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/xpath_visitor.rb
deleted file mode 100644
index 3309887..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/vendor/nokogiri/css/xpath_visitor.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-module Nokogiri
-  module CSS
-    class XPathVisitor
-      def visit_function node
-        #  note that nth-child and nth-last-child are preprocessed in css/node.rb.
-        case node.value.first
-        when /^text\(/
-          'child::text()'
-        when /^self\(/
-          "self::#{node.value[1]}"
-        when /^(eq|nth|nth-of-type|nth-child)\(/
-          if node.value[1].is_a?(Nokogiri::CSS::Node) and node.value[1].type == :AN_PLUS_B
-            an_plus_b(node.value[1])
-          else
-            "position() = " + node.value[1]
-          end
-        when /^(first|first-of-type)\(/
-          "position() = 1"
-        when /^(last|last-of-type)\(/
-          "position() = last()"
-        when /^(nth-last-child|nth-last-of-type)\(/
-          "position() = last() - #{node.value[1]}"
-        when /^contains\(/
-          "contains(., #{node.value[1]})"
-        when /^gt\(/
-          "position() > #{node.value[1]}"
-        when /^only-child\(/
-          "last() = 1"
-        else
-          node.value.first + ')'
-        end
-      end
-
-      def visit_not node
-        'not(' + node.value.first.accept(self) + ')'
-      end
-
-      def visit_preceding_selector node
-        node.value.last.accept(self) +
-          '[preceding-sibling::' +
-          node.value.first.accept(self) +
-          ']'
-      end
-
-      def visit_direct_adjacent_selector node
-         node.value.last.accept(self) +
-           '[preceding-sibling::' +
-           node.value.first.accept(self) +
-           '][position()=1]'
-      end
-
-      def visit_id node
-        node.value.first =~ /^#(.*)$/
-        "@id = '#{$1}'"
-      end
-
-      def visit_attribute_condition node
-        attribute = if (node.value.first.type == :FUNCTION) or (node.value.first.value.first =~ /::/)
-                      ''
-                    else
-                      '@'
-                    end
-        attribute += node.value.first.accept(self)
-
-        # Support non-standard css
-        attribute.gsub!(/^@@/, '@')
-
-        return attribute unless node.value.length == 3
-
-        value = node.value.last
-        value = "'#{value}'" if value !~ /^['"]/
-
-        case node.value[1]
-        when '*='
-          "contains(#{attribute}, #{value})"
-        when '^='
-          "starts-with(#{attribute}, #{value})"
-        when '|='
-          "#{attribute} = #{value} or starts-with(#{attribute}, concat(#{value}, '-'))"
-        when '~='
-          "contains(concat(\" \", #{attribute}, \" \"),concat(\" \", #{value}, \" \"))"
-        when '$='
-          "substring(#{attribute}, string-length(#{attribute}) - " +
-            "string-length(#{value}) + 1, string-length(#{value})) = #{value}"
-        else
-          attribute + " #{node.value[1]} " + "#{value}"
-        end
-      end
-
-      def visit_pseudo_class node
-        if node.value.first.is_a?(Nokogiri::CSS::Node) and node.value.first.type == :FUNCTION
-          node.value.first.accept(self)
-        else
-          case node.value.first
-          when "first" then "position() = 1"
-          when "last" then "position() = last()"
-          when "first-of-type" then "position() = 1"
-          when "last-of-type" then "position() = last()"
-          when "only-of-type" then "last() = 1"
-          when "empty" then "not(node())"
-          when "parent" then "node()"
-          else
-            '1 = 1'
-          end
-        end
-      end
-
-      def visit_class_condition node
-        "contains(concat(' ', @class, ' '),concat(' ', '#{node.value.first}', ' '))"
-      end
-
-      def visit_combinator node
-        node.value.first.accept(self) + ' and ' +
-        node.value.last.accept(self)
-      end
-
-      def visit_conditional_selector node
-        node.value.first.accept(self) + '[' +
-        node.value.last.accept(self) + ']'
-      end
-
-      def visit_descendant_selector node
-        node.value.first.accept(self) +
-        '//' +
-        node.value.last.accept(self)
-      end
-
-      def visit_child_selector node
-        node.value.first.accept(self) +
-        '/' +
-        node.value.last.accept(self)
-      end
-
-      def visit_element_name node
-        node.value.first
-      end
-
-      def accept node
-        node.accept(self)
-      end
-
-    private
-      def an_plus_b node
-        raise ArgumentError, "expected an+b node to contain 4 tokens, but is #{node.value.inspect}" unless node.value.size == 4
-
-        a = node.value[0].to_i
-        b = node.value[3].to_i
-
-        if (b == 0)
-          return "(position() mod #{a}) = 0"
-        else
-          compare = (a < 0) ? "<=" : ">="
-          return "(position() #{compare} #{b}) and (((position()-#{b}) mod #{a.abs}) = 0)"
-        end
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/version.rb b/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/version.rb
deleted file mode 100644
index da1b2a6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-core-0.9.14/lib/merb-core/version.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-module Merb
-  VERSION = '0.9.14' unless defined?(Merb::VERSION)
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/LICENSE b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/LICENSE
deleted file mode 100644
index 5816c24..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2008 Engine Yard
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/README b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/README
deleted file mode 100644
index 4d6a139..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/README
+++ /dev/null
@@ -1,180 +0,0 @@
-merb-helpers
-=================
-
-A plugin for the Merb Web framework that provides different view helpers.
-
-To use this plugin in merb in your app
-
-config/dependencies.rb
-
-#...
-
-dependency "merb-helpers"
-
-#...
-
-# TODO: describe date_time_helpers, form_helpers, tag_helpers
-
-
-form_helpers
-------------
-
-* +delete_button+. If you want to delete an object, you should call the delete method on the object's controller.
-You should not use a simple link to your action, instead you should make a DELETE request.
-To help you doing that, you can use the delete_button method as follows:
-
-    <%= delete_button(@comment) %>
-
-The delete_button helper has many options, first thing, you can pass an object or an url:
-
-    <%= delete_button(url(:comment, @comment)) %>
-
-This helper creates a form with a submit button. 
-You can pass many arguments to the delete_button helper. The first thing you might want to do is to change the
-default button text. 
-
-    <%= delete_button(@comment), "Remove this comment by #{@comment.author.name}" %>
-
-You can also pass the usual helper params to specify a class to use for instance:
-
-    <%= delete_button(@comment, nil, :class => 'custom-class') %>
-    
-See usage in specs: spec/fixture/app/views/delete_button_specs
-
-numeric helpers
----------------
-
-Numeric helpers extend numeric instances, in lay terms: numbers.
-
-* +minutes_to_hours+ converts a +numeric+ value representing minutes into a string representing an hour value
-
-    315.minutes_to_hours # => "05:15"
-
-* +two_digits+ formats a +number+ into a two digit string. Basically it prepends an integer to a 2 digits string.
-
-    3.two_digits # => "03"
-
-* +with_delimiter+, this method formats a number with grouped thousands 
-
-    12345678.with_delimiter # => "12,345,678"
-  
-
-* +with_precison+, this method formats a number with a level of precision
-
-    111.2345.with_precision # => "111.235"
-    
-* +to_currency, this method formats a number into a currency value using a delimited and a set precision
-
-    1234567890.506.to_currency # => "$1,234,567,890.51"
-    
-(For usage example look at spec/numeric_exlib.rb)
-
-
-Overwriting the default formating options:
-
-One can overwrite the default settings by passing the name or of the format used and a hash representing the settings to overwrite.
-
-Each method mentioned above has some format settings you can overwrite:
-
-* +with_delimiter+ 
-  * :delimiter - Overwrites the thousands delimiter.
-  * :separator - Overwrites the separator between the units.
-  
-* +with_precision+
-  * :precision - Overwrites the level of precision
-  * :separator - Overwrites the separator between the units
-  * :delimiter - Overwrites the thousands delimiter
-  
-* +with_currency+
-  * :precision - Sets the level of precision 
-  * :unit - Sets the denomination of the currency 
-  * :format - Sets the format of the output string (defaults to "%u%n"). The field types are: 
-    * %u The currency unit
-    * %n The number
-    
-Usage example:
-
-    1234567890.506.to_currency(:default, :unit => '£') # => "£1,234,567,890.51"
-    
-merb_helpers comes with a very limited set of formats you can use, here is an example:
-
-    1234567890.50.to_currency(:uk) # => "£1,234,567,890.50"
-    
-Formats are just a hash of settings used by the plugin, here is the default format:
-
-    :us => {
-      :number => {      
-        :precision => 3, 
-        :delimiter => ',', 
-        :separator => '.'
-      },
-      :currency => { 
-        :unit => '$',
-        :format => '%u%n',
-        :precision => 2 
-      }
-    }
-    
-If you wish to add a new format you can easily do that as follows:
-    
-    custom_format_to_add = {  :custom_name => {
-                                :number => {      
-                                  :precision => 3, 
-                                  :delimiter => ',', 
-                                  :separator => '.'
-                                },
-                                :currency => { 
-                                  :unit => 'Merbollars',
-                                  :format => '%n %u',
-                                  :precision => 2 
-                                }
-                              }
-                          }
-    
-    Numeric::Transformer.add_format(custom_format_to_add)
-    
-You can then call the format like that:
-
-    1234567890.to_currency(:custom_name) # => "1,234,567,890.00 Merbollars"
-    
-After adding a custom format, you can set it as the default format:
-
-    Numeric::Transformer.change_default_format(:custom_name)
-    
-You can set this things up in your before/after app load block in the config/init.rb file.
-
-
-Formating a Date or Time instance
----------------
-
-Usage examples: spec/merb_helpers_date_time_spec.rb
-
-    Time.now.formatted(:db)   # => "2008-09-21 02:07:31"
-    Time.now.formatted(:long) # => "September 21, 2008 02:08"
-    
-You can also add your own format:
-
-    Date.add_format(:matt, "%H:%M:%S %Y-%m-%d")
-
-And use is as a default format:
-
-  Time.now.formatted(:matt)    # => "02:09:18 2008-09-21"
-
-
-
-Representation of time difference
--------------------
-
-Usage examples: spec/merb_helpers_date_time_spec.rb
-
-* Relative time:
-
-Let's imagine that we are the June 1st 2007 at 11am UTC
-
-
-    relative_date(Time.now.utc)       # => "today"
-    relative_date(1.day.ago.utc)      # => 'yesterday'
-    relative_date(1.day.from_now.utc) # => 'tomorrow'
-    relative_date(Time.utc(2005, 11, 15)) # => 'Nov 15th, 2005' (date with the year since it's not this year)
-    relative_date(Time.utc(2007, 11, 15)) # => 'Nov 15th' (date without the year this the passed date is this year)
-    
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/Rakefile b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/Rakefile
deleted file mode 100644
index da62429..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/Rakefile
+++ /dev/null
@@ -1,73 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "rake_helpers"))
-
-##############################################################################
-# Package && release
-##############################################################################
-RUBY_FORGE_PROJECT  = "merb"
-PROJECT_URL         = "http://merbivore.com"
-PROJECT_SUMMARY     = "Helper support for Merb"
-PROJECT_DESCRIPTION = PROJECT_SUMMARY
-
-GEM_AUTHOR = "Michael D. Ivey"
-GEM_EMAIL  = "ivey at gweezlebur.com"
-
-GEM_NAME    = "merb-helpers"
-PKG_BUILD   = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
-GEM_VERSION = Merb::VERSION + PKG_BUILD
-
-RELEASE_NAME    = "REL #{GEM_VERSION}"
-
-require "extlib/tasks/release"
-
-spec = Gem::Specification.new do |s|
-  s.rubyforge_project = RUBY_FORGE_PROJECT
-  s.name = GEM_NAME
-  s.version = GEM_VERSION
-  s.platform = Gem::Platform::RUBY
-  s.has_rdoc = true
-  s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
-  s.summary = PROJECT_SUMMARY
-  s.description = PROJECT_DESCRIPTION
-  s.author = GEM_AUTHOR
-  s.email = GEM_EMAIL
-  s.homepage = PROJECT_URL
-  s.add_dependency('merb-core', ">= #{Merb::VERSION}")
-  s.require_path = 'lib'
-  s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec}/**/*")
-end
-
-Rake::GemPackageTask.new(spec) do |pkg|
-  pkg.gem_spec = spec
-end
-
-desc "Install the gem"
-task :install do
-  Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION)
-end
-
-desc "Uninstall the gem"
-task :uninstall do
-  Merb::RakeHelper.uninstall(GEM_NAME, :version => GEM_VERSION)
-end
-
-desc "Create a gemspec file"
-task :gemspec do
-  File.open("#{GEM_NAME}.gemspec", "w") do |file|
-    file.puts spec.to_ruby
-  end
-end
-
-desc "Run all examples (or a specific spec with TASK=xxxx)"
-Spec::Rake::SpecTask.new('spec') do |t|
-  t.spec_opts  = ["-cfs"]
-  t.spec_files = begin
-    if ENV["TASK"] 
-      ENV["TASK"].split(',').map { |task| "spec/**/#{task}_spec.rb" }
-    else
-      FileList['spec/**/*_spec.rb']
-    end
-  end
-end
-
-desc 'Default: run spec examples'
-task :default => 'spec'
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/TODO b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/TODO
deleted file mode 100644
index 9049d55..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
-TODO:
-Fix LICENSE with your name
-Fix Rakefile with your name and contact info
-Add your code to lib/merb-haml.rb
-Add your Merb rake tasks to lib/merb-haml/merbtasks.rb
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers.rb
deleted file mode 100644
index d4dac57..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-module Merb
-  
-  module Helpers
-    
-    @@helpers_dir   = File.dirname(__FILE__) / 'merb-helpers'
-    @@helpers_files = Dir["#{@@helpers_dir}/*_helpers.rb"].collect {|h| h.match(/\/(\w+)\.rb/)[1]}
-    
-    def self.load
-      require @@helpers_dir + '/time_dsl'
-      require @@helpers_dir + '/core_ext'
-      require @@helpers_dir + '/core_ext/numeric'
-
-      if Merb::Plugins.config[:merb_helpers]
-        config = Merb::Plugins.config[:merb_helpers]
-        
-        if config[:include] && !config[:include].empty?
-          load_helpers(config[:include])
-        else
-          # This is in case someone defines an entry in the config,
-          # but doesn't put in a with or without option
-          load_helpers
-        end
-        
-      else
-        load_helpers
-      end
-    end
-    
-    # Load only specific helpers instead of loading all the helpers
-    def self.load_helpers(helpers = @@helpers_files)
-      helpers.each {|helper| Kernel.load(File.join(@@helpers_dir, "#{helper}.rb") )} # using load here allows specs to work
-    end
-    
-  end
-  
-end
-
-Merb::Helpers.load
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/core_ext.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/core_ext.rb
deleted file mode 100644
index b71f3bd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/core_ext.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require "date"
-require File.dirname(__FILE__) + '/date_time_formatting'
-class Date
-  include DateAndTimeFormatting
-  
-  # Converts a Date instance to a Time, where the time is set to the beginning of the day.
-  # The timezone can be either :local or :utc (default :utc).
-  #
-  # ==== Examples:
-  #   date = Date.new(2007, 11, 10)
-  #   date.to_s                      # => 2007-11-10
-  #
-  #   date.to_time                   # => Sat Nov 10 00:00:00 UTC 2007
-  #   date.to_time(:utc)             # => Sat Nov 10 00:00:00 UTC 2007
-  #   date.to_time(:local)           # => Sat Nov 10 00:00:00 -0800 2007
-  #
-  def to_time(form = :utc)
-    ::Time.send("#{form}", year, month, day)
-  end
-  
-  def to_date; self; end
-  
-  def formatted(format=:default)
-    format = Date.formats[format] 
-    if format.nil?
-      self.to_s 
-    else
-      self.strftime(format)
-    end
-  end
-  
-end
-
-class Time
-  include DateAndTimeFormatting
-  
-  # Ruby 1.8-cvs and 1.9 define private Time#to_date
-  %w(to_date to_datetime).each do |method|
-    public method if private_instance_methods.include?(method)
-  end
-  
-  def to_time; self; end
-  public :to_date
-end
-
-# Truncates a string to the given length and appends the given suffix if the string is, in fact, truncated.
-#
-# ==== Examples:
-#  "This is a long string right here".truncate(10, "...")  #=> "This is..."
-
-class String
-  def truncate(length = 30, truncate_string = "...")
-    return self unless self.length > length
-    length = length - truncate_string.split(//).length
-    self[0...length] + truncate_string
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/core_ext/numeric.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/core_ext/numeric.rb
deleted file mode 100644
index 1c44a93..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/core_ext/numeric.rb
+++ /dev/null
@@ -1,388 +0,0 @@
-class Numeric
-  module Transformer
-    
-    # known formats to use with the app
-    # users can add their own formats by using Numeric::Transformer.add_format(:format_name => {})
-    
-    @formats ={
-      :us => {
-        :number => {      
-          :precision => 3, 
-          :delimiter => ',', 
-          :separator => '.'
-        },
-        :currency => { 
-          :unit => '$',
-          :format => '%u%n',
-          :precision => 2 
-        }
-      },
-      :uk => {
-        :number => {      
-        :precision => 3, 
-        :delimiter => ',', 
-        :separator => '.'
-        },
-        :currency => { 
-          :unit => '£',
-          :format => '%u%n',
-          :precision => 2 
-        }
-      },
-      :au => {
-        :number => {      
-        :precision => 3, 
-        :delimiter => ',', 
-        :separator => '.'
-        },
-        :currency => { 
-          :unit => '$;',
-          :format => '%u%n',
-          :precision => 2 
-        }
-      },
-      :fr => {
-        :number => {      
-        :precision => 3, 
-        :delimiter => ' ', 
-        :separator => ','
-        },
-        :currency => { 
-          :unit => '€',
-          :format => '%n%u',
-          :precision => 2 
-        }
-      },
-      :ru => { 
-          :number => {
-             :precision => 2,
-             :delimiter => ' ',
-             :separator => ','
-             },
-             :currency => {
-               :unit => 'Ñ€.',
-               :format => '%n %u',
-               :precision => 2
-             }
-           }
-    }
-    
-    # accessor for @formats
-    #---
-    # @private
-    def self.formats
-      @formats
-    end
-    
-    @default_format = @formats[:us]
-    
-    
-    # Accessor for the default format in use
-    #
-    #---
-    # @public
-    def self.default_format
-      @default_format
-    end
-    
-    
-    # Changes the default format to use when transforming a +Numeric+ instance
-    #
-    # ==== Parameters
-    # format_code <Symbol>:: format name to use as the new default format
-    #
-    # ==== Returns
-    # Hash:: a hash representing the default format
-    #
-    #---
-    # @public
-    def self.change_default_format(format_code)
-      @default_format = (formats[format_code] || default_format)
-    end
-    
-    
-    # Adds a new format to the existing transforming formats
-    #
-    # ==== Parameters
-    # format <Hash>:: format defining how to transform numeric values
-    #
-    # ==== Examples
-    #
-    #
-    #---
-    # @public
-    def self.add_format(format)
-      formats.merge!(format)
-      formats[format]
-    end
-
-    
-    # Formats a +number+ with grouped thousands using +delimiter+ (e.g., 12,324). You can
-    # pass another format to format the number differently.
-    #
-    #
-    # ==== Parameters
-    # format_name<Symbol>:: name of the format to use
-    # options<Hash>:: options which will overwrite the used format
-    #
-    # ==== Returns
-    # String:: a string representing the delimited number
-    #
-    # ==== Options
-    # :delimiter - Overwrites the thousands delimiter.
-    # :separator - Overwrites the separator between the units.
-    #
-    # ==== Examples
-    # with_delimiter(12345678) # => 12,345,678
-    # with_delimiter(12345678.05) # => 12,345,678.05
-    # with_delimiter(12345678, :FR) # => 12.345.678
-    # with_delimiter(12345678, :US) # => 12,345,678
-    #
-    #---
-    # @private
-    def self.with_delimiter(number, format_name = nil, options = {})
-      
-      format = (formats[format_name] || default_format)[:number].merge(options)
-
-      begin
-        parts = number.to_s.split('.')
-        parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{format[:delimiter]}")
-        parts.join(format[:separator])
-      rescue
-        number
-      end
-    end
-    
-    # Formats a +number+ with a level of <tt>:precision</tt> (e.g., 112.32 has a precision of 2).
-    # You can pass another format to use and even overwrite the format's options.
-    #
-    #
-    # ==== Parameters
-    # format_name<Symbol>:: name of the format to use
-    # options<Hash>:: options which will overwrite the used format
-    #
-    # ==== Returns
-    # String:: a string representing the delimited number
-    #
-    # ==== Options
-    # :precision - Overwrites the level of precision
-    # :separator - Overwrites the separator between the units
-    # :delimiter - Overwrites the thousands delimiter
-    #
-    # ==== Examples
-    # with_precision(111.2345)                       # => 111.235
-    # with_precision(111.2345, :UK, :precision => 1) # => "111.2"
-    # with_precision(1234.567, :US, :precision => 1, :separator => ',', :delimiter => '-') # => "1-234,6"
-    #
-    #---
-    # @private
-    def self.with_precision(number, format_name = nil, options={})
-
-      format = (formats[format_name] || default_format)[:number].merge(options)
-
-      begin
-        rounded_number = (Float(number) * (10 ** format[:precision])).round.to_f / 10 ** format[:precision]
-        with_delimiter("%01.#{format[:precision]}f" % rounded_number, format_name, :delimiter => format[:delimiter], :separator => format[:separator])
-      rescue
-        number
-      end
-    end
-    
-    
-    # Formats a +number+ into a currency string (e.g., $13.65). You can specify a format to use 
-    # and even overwrite some of the format options.
-    #
-    # ==== Parameters
-    # number<Numeric>:: Numeric value to convert
-    # format_name<Symbol>:: name of the format to use
-    # options<Hash>:: options which will overwrite the used format
-    #
-    # ==== Returns
-    # String:: a string representing the number converted in currency
-    #
-    # ==== Options
-    # :precision - Sets the level of precision 
-    # :unit - Sets the denomination of the currency 
-    # :format - Sets the format of the output string (defaults to "%u%n"). The field types are:
-    #
-    # %u The currency unit
-    # %n The number
-    #
-    # ==== Examples
-    # to_currency(1234567890.506, :US, :precision => 1)  # => "$1,234,567,890.5"
-    # to_currency(1234567890.516, :FR)                   # =>"1 234 567 890,52€"
-    # to_currency(1234567890.516, :US, :unit => "€")     # =>"€1,234,567,890.52"
-    # to_currency(1234567890.506, :US, :precision => 3, :unit => "€") # => "€1,234,567,890.506"
-    # to_currency(1234567890.506, :AU, :unit => "$AUD", :format => '%n %u') # => "1,234,567,890.51 $AUD"
-    #
-    #---
-    # @private
-    def self.to_currency(number, format_name = nil, options = {})
-      
-      format = (formats[format_name] || default_format)[:currency].merge(options)
-
-      begin
-        format[:format].gsub(/%n/, with_precision(number, 
-                                      format_name, :precision  => format[:precision]) ).gsub(/%u/, format[:unit])
-      rescue
-        number
-      end
-    end
-    
-    
-    # Formats a +number+ into a two digit string. Basically it prepends an integer to a 2 digits string.
-    #
-    # ==== Parameters
-    # number<Numeric>:: Numeric value to convert
-    #
-    # ==== Returns
-    # String:: a string representing the number converted into a 2 digits string.
-    #
-    # ==== Examples
-    # two_digits(5-3) # => "02"
-    #
-    #---
-    # @private
-    def self.two_digits(number)
-      (0..9).include?(number) ? "0#{number}" : number.to_s
-    end
-
-    # Converts a +numeric+ value representing minutes into a string representing an hour value
-    #
-    # ==== Parameters
-    # number<Numeric>:: Numeric value representing minutes to convert in hours
-    #
-    # ==== Returns
-    # String:: a string representing the numeric value converted in hours
-    #
-    # ==== Examples
-    # minutes_to_hours(315) => "05:15"
-    #
-    #---
-    # @private
-    def self.minutes_to_hours(minutes)
-      hours = (minutes/60).ceil
-      minutes = (minutes - (hours * 60)).to_i
-      "#{two_digits(hours)}:#{two_digits(minutes)}"
-    end
-
-  end #of Numeric::Transformer
- 
-  # Formats with with grouped thousands using +delimiter+ (e.g., 12,324). You can
-  # pass another format to format the number differently.
-  #
-  #
-  # ==== Parameters
-  # format_name<Symbol>:: name of the format to use
-  # options<Hash>:: options which will overwrite the used format
-  #
-  # ==== Returns
-  # String:: a string representing the delimited number
-  #
-  # ==== Options
-  # :delimiter - Overwrites the thousands delimiter.
-  # :separator - Overwrites the separator between the units.
-  #
-  # ==== Examples
-  # 12345678.with_delimiter      # => 12,345,678
-  # 12345678.05.with_delimiter   # => 12,345,678.05
-  # 12345678.with_delimiter(:FR) # => 12.345.678
-  # 12345678.with_delimiter(:US) # => 12,345,678
-  #
-  #---
-  # @public
-  def with_delimiter(format_name = nil, options = {})
-    Transformer.with_delimiter(self, format_name, options)
-  end
-  
-  # Formats with a level of <tt>:precision</tt> (e.g., 112.32 has a precision of 2).
-  # You can pass another format to use and even overwrite the format's options.
-  #
-  #
-  # ==== Parameters
-  # format_name<Symbol>:: name of the format to use
-  # options<Hash>:: options which will overwrite the used format
-  #
-  # ==== Returns
-  # String:: a string representing the delimited number
-  #
-  # ==== Options
-  # :precision - Overwrites the level of precision
-  # :separator - Overwrites the separator between the units
-  # :delimiter - Overwrites the thousands delimiter
-  #
-  # ==== Examples
-  # 111.2345.with_precision                       # => 111.235
-  # 111.2345.with_precision(:UK, :precision => 1) # => "111.2"
-  # 1234.567.with_precision(:US, :precision => 1, :separator => ',', :delimiter => '-') # => "1-234,6"
-  #
-  #---
-  # @public
-  def with_precision(format_name = nil, options = {})
-    Transformer.with_precision(self, format_name, options)
-  end
-  
-  # Formats into a currency string (e.g., $13.65). You can specify a format to use 
-  # and even overwrite some of the format options.
-  #
-  # ==== Parameters
-  # format_name<Symbol>:: name of the format to use
-  # options<Hash>:: options which will overwrite the used format
-  #
-  # ==== Returns
-  # String:: a string representing the number converted in currency
-  #
-  # ==== Options
-  # :precision - Sets the level of precision 
-  # :unit - Sets the denomination of the currency 
-  # :format - Sets the format of the output string (defaults to "%u%n"). The field types are:
-  #
-  # %u The currency unit
-  # %n The number
-  #
-  # ==== Examples
-  # 1234567890.506.to_currency(:US)                   # => "$1,234,567,890.51"
-  # 1234567890.506.to_currency(:US, :precision => 1)  # => "$1,234,567,890.5"
-  # 1234567890.516.to_currency(:FR)                   # =>"1 234 567 890,52€"
-  # 1234567890.516.to_currency(:US, :unit => "€")     # =>"€1,234,567,890.52"
-  # 1234567890.506.to_currency(:US, :precision => 3, :unit => "€") # => "€1,234,567,890.506"
-  # 1234567890.506.to_currency(:AU, :unit => "$AUD", :format => '%n %u') # => "1,234,567,890.51 $AUD"
-  #---
-  # @public
-  def to_currency(format_name = nil, options = {})
-    Transformer.to_currency(self, format_name, options)
-  end
-
-  # Formats a +number+ into a two digit string. Basically it prepends an integer to a 2 digits string.
-  #
-  # ==== Returns
-  # String:: a string representing the number converted into a 2 digits string.
-  #
-  # ==== Examples
-  # (5-3).two_digits # => "02"
-  #
-  #---
-  # @public
-  def two_digits
-    Transformer.two_digits(self)
-  end
-
-  # Converts a +numeric+ value representing minutes into a string representing an hour value
-  #
-  # ==== Parameters
-  # number<Numeric>:: Numeric value representing minutes to convert in hours
-  #
-  # ==== Returns
-  # String:: a string representing the numeric value converted in hours
-  #
-  # ==== Examples
-  # 315.minutes_to_hours => "05:15"
-  #
-  #---
-  # @public
-  def minutes_to_hours
-    Transformer.minutes_to_hours(self)
-  end
-  
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/date_time_formatting.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/date_time_formatting.rb
deleted file mode 100644
index 7d16a37..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/date_time_formatting.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-module DateAndTimeFormatting
-  
-  def self.included(base)
-    base.class_eval do
-      include DateAndTimeFormatting::InstanceMethods
-      include OrdinalizedFormatting
-      extend DateAndTimeFormatting::ClassMethods
-    end
-  end
-  
-  module InstanceMethods
-    
-    
-    # Format a date/time instance using a defined format
-    #
-    # ==== Parameters
-    # format<Symbol>:: of the format key from Date.date_formats
-    #
-    # ==== Returns
-    # String:: formattred string
-    # 
-    #--
-    # @public
-    def formatted(format = :default)
-      self.strftime(Date.formats[format])
-    end
-  
-  end
-  
-  module ClassMethods
-    
-    @@formats = {
-      :db             => "%Y-%m-%d %H:%M:%S", 
-      :time           => "%H:%M", # 21:12
-      :date           => "%Y-%m-%d", # 2008-12-04
-      :short          => "%d %b %H:%M", # 01 Sep 21:12
-      :long           => "%B %d, %Y %H:%M",
-      :rfc822         => "%a, %d %b %Y %H:%M:%S %z"
-    }
-    
-    # Lists the date and time formats
-    #
-    # ==== Returns
-    # Hash:: a hash with all formats available
-    # --
-    # @public
-    def formats
-      @@formats
-    end
-    
-    # Adds a date and time format
-    #
-    # ==== Parameters
-    # key<Symbol>:: name of the format
-    # format<Hash>:: time format to use
-    #
-    # ==== Returns
-    # Hash:: a hash with all formats available
-    # --
-    # @public
-    def add_format(key, format)
-      formats.merge!({key => format})
-    end
-    
-    
-    # Resets the date and time formats
-    # --
-    # @private
-    def reset_formats
-      original_formats = [:db, :time, :short, :date, :long, :long_ordinal, :rfc822]
-      formats = @@formats.delete_if{|format, v| !original_formats.include?(format)}
-    end
-
-  end
-  
-end
-
-module Ordinalize
-  # Ordinalize turns a number into an ordinal string used to denote the
-  # position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
-  #
-  # Examples
-  #   1.ordinalize     # => "1st"
-  #   2.ordinalize     # => "2nd"
-  #   1002.ordinalize  # => "1002nd"
-  #   1003.ordinalize  # => "1003rd"
-  def ordinalize
-    if (11..13).include?(self % 100)
-      "#{self}th"
-    else
-      case self % 10
-        when 1; "#{self}st"
-        when 2; "#{self}nd"
-        when 3; "#{self}rd"
-        else    "#{self}th"
-      end
-    end
-  end
-end
-
-Integer.send :include, Ordinalize
-
-# Time.now.to_ordinalized_s :long
-# => "February 28th, 2006 21:10"
-module OrdinalizedFormatting
-  
-  def to_ordinalized_s(format = :default)
-    format = Date.formats[format] 
-    return self.to_s if format.nil?
-    strftime_ordinalized(format)
-  end
-
-  # Gives you a relative date in an attractive format
-  #
-  # ==== Parameters
-  # format<String>:: strftime string used to formatt a time/date object
-  # locale<String, Symbol>:: An optional value which can be used by localization plugins
-  #
-  # ==== Returns
-  # String:: Ordinalized time/date object
-  #
-  # ==== Examples
-  #    5.days.ago.strftime_ordinalized('%b %d, %Y')     # => 
-  def strftime_ordinalized(fmt, format=nil)
-    strftime(fmt.gsub(/(^|[^-])%d/, '\1_%d_')).gsub(/_(\d+)_/) { |s| s.to_i.ordinalize }
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/date_time_helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/date_time_helpers.rb
deleted file mode 100644
index c815ac5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/date_time_helpers.rb
+++ /dev/null
@@ -1,190 +0,0 @@
-module Merb
-  module Helpers
-    # Provides a number of methods for displaying and dealing with dates and times
-    #
-    # Parts were strongly based on http://ar-code.svn.engineyard.com/plugins/relative_time_helpers/, and
-    # active_support
-    #
-    # The key methods are `relative_date`, `relative_date_span`, and `relative_time_span`.  This also gives
-    # you the Rails style Time DSL for working with numbers eg. 3.months.ago or 5.days.until(1.year.from_now)
-    module DateAndTime
-      @@time_class = Time
-      @@time_output = {
-        :today          => 'today',
-        :yesterday      => 'yesterday',
-        :tomorrow       => 'tomorrow',
-        :initial_format => '%b %d',
-        :year_format    => ', %Y'
-      }
-      
-      def self.time_class
-        @@time_class
-      end
-      
-      # ==== Parameters
-      # format<Symbol>:: time format to use
-      # locale<String, Symbol>:: An optional value which can be used by localization plugins
-      #
-      # ==== Returns
-      # String:: a string used to format time using #strftime
-      def self.time_output(format, locale=nil)
-        @@time_output[format]
-      end
-      
-      # Gives you a relative date in an attractive format
-      #
-      # ==== Parameters
-      # time<~to_date>:: The Date or Time to test
-      # locale<String, Symbol>:: An optional value which can be used by localization plugins
-      #
-      # ==== Returns
-      # String:: Relative date
-      #
-      # ==== Examples
-      #   relative_date(Time.now.utc) => "today"
-      #   relative_date(5.days.ago) => "March 5th"
-      #   relative_date(1.year.ago) => "March 10th, 2007"
-      def relative_date(time, locale=nil)
-        date  = time.to_date
-        today = DateAndTime.time_class.now.to_date
-        if date == today
-          DateAndTime.time_output(:today, locale)
-        elsif date == (today - 1)
-          DateAndTime.time_output(:yesterday, locale)
-        elsif date == (today + 1)
-          DateAndTime.time_output(:tomorrow, locale)
-        else
-          fmt  = DateAndTime.time_output(:initial_format, locale).dup
-          fmt << DateAndTime.time_output(:year_format, locale) unless date.year == today.year
-          time.strftime_ordinalized(fmt, locale)
-        end
-      end
-      
-      # Gives you a relative date span in an attractive format
-      #
-      # ==== Parameters
-      # times<~first,~last>:: The Dates or Times to test
-      #
-      # ==== Returns
-      # String:: The sexy relative date span
-      #
-      # ==== Examples
-      #   relative_date([1.second.ago, 10.seconds.ago]) => "March 10th"
-      #   relative_date([1.year.ago, 1.year.ago) => "March 10th, 2007"
-      #   relative_date([Time.now, 1.day.from_now]) => "March 10th - 11th"
-      #   relative_date([Time.now, 1.year.ago]) => "March 10th, 2007 - March 10th, 2008"
-      def relative_date_span(times)
-        times = [times.first, times.last].collect! { |t| t.to_date }
-        times.sort!
-        if times.first == times.last
-          relative_date(times.first)
-        else
-          first = times.first; last = times.last; now = DateAndTime.time_class.now
-          arr = [first.strftime_ordinalized('%b %d')]
-          arr << ", #{first.year}" unless first.year == last.year
-          arr << ' - '
-          arr << last.strftime('%b') << ' ' unless first.year == last.year && first.month == last.month
-          arr << last.day.ordinalize
-          arr << ", #{last.year}" unless first.year == last.year && last.year == now.year
-          arr.to_s
-        end
-      end
-      
-      # Gives you a relative date span in an attractive format
-      #
-      # ==== Parameters
-      # times<~first,~last>:: The Dates or Times to test
-      #
-      # ==== Returns
-      # String:: The sexy relative time span
-      #
-      # ==== Examples
-      #   relative_time_span([1.second.ago, 10.seconds.ago]) => "12:00 - 12:09 AM March 10th"
-      #   relative_time_span([1.year.ago, 1.year.ago) => "12:09 AM March 10th, 2007"
-      #   relative_time_span([Time.now, 13.hours.from_now]) => "12:09 AM - 1:09 PM March 10th"
-      #   relative_time_span([Time.now, 1.year.ago]) => "12:09 AM March 10th, 2007 - 12:09 AM March 10th, 2008"
-      def relative_time_span(times)
-        times = [times.first, times.last].collect! { |t| t.to_time }
-        times.sort!
-        if times.first == times.last
-          "#{prettier_time(times.first)} #{relative_date(times.first)}"
-        elsif times.first.to_date == times.last.to_date
-            same_half = (times.first.hour/12 == times.last.hour/12)
-            "#{prettier_time(times.first, !same_half)} - #{prettier_time(times.last)} #{relative_date(times.first)}"
-      
-        else
-          first = times.first; last = times.last; now = DateAndTime.time_class.now        
-          arr = [prettier_time(first)]
-          arr << ' '
-          arr << first.strftime_ordinalized('%b %d')
-          arr << ", #{first.year}" unless first.year == last.year
-          arr << ' - '
-          arr << prettier_time(last)
-          arr << ' '
-          arr << last.strftime('%b') << ' ' unless first.year == last.year && first.month == last.month
-          arr << last.day.ordinalize
-          arr << ", #{last.year}" unless first.year == last.year && last.year == now.year
-          arr.to_s
-        end
-      end
-      
-      # Condenses time... very similar to time_ago_in_words in ActionPack
-      #
-      # ==== Parameters
-      # from_time<~to_time>:: The Date or Time to start from
-      # to_time<~to_time>:: The Date or Time to go to, Defaults to Time.now.utc
-      # include_seconds<Boolean>:: Count the seconds initially, Defaults to false
-      # locale<String, Symbol>:: An optional value which can be used by localization plugins
-      #
-      # ==== Returns
-      # String:: The time distance
-      #
-      # ==== Examples
-      # time_lost_in_words(3.minutes.from_now)           # => 3 minutes
-      # time_lost_in_words(Time.now - 15.hours)          # => 15 hours
-      # time_lost_in_words(Time.now, 3.minutes.from_now) # => 3 minutes
-      # time_lost_in_words(Time.now)                     # => less than a minute
-      # time_lost_in_words(Time.now, Time.now, true)     # => less than 5 seconds
-      #
-      def time_lost_in_words(from_time, to_time = Time.now.utc, include_seconds = false, locale=nil)
-        from_time = from_time.to_time if from_time.respond_to?(:to_time)
-        to_time = to_time.to_time if to_time.respond_to?(:to_time)
-        distance_in_minutes = (((to_time - from_time).abs)/60).round
-        distance_in_seconds = ((to_time - from_time).abs).round
-      
-        case distance_in_minutes
-          when 0..1
-            return (distance_in_minutes == 0) ? 'less than a minute' : '1 minute' unless include_seconds
-            case distance_in_seconds
-              when 0..4   then 'less than 5 seconds'
-              when 5..9   then 'less than 10 seconds'
-              when 10..19 then 'less than 20 seconds'
-              when 20..39 then 'half a minute'
-              when 40..59 then 'less than a minute'
-              else             '1 minute'
-            end
-      
-          when 2..44           then "#{distance_in_minutes} minutes"
-          when 45..89          then 'about 1 hour'
-          when 90..1439        then "about #{(distance_in_minutes.to_f / 60.0).round} hours"
-          when 1440..2879      then '1 day'
-          when 2880..43199     then "#{(distance_in_minutes / 1440).round} days"
-          when 43200..86399    then 'about 1 month'
-          when 86400..525599   then "#{(distance_in_minutes / 43200).round} months"
-          when 525600..1051199 then 'about 1 year'
-          else                      "over #{(distance_in_minutes / 525600).round} years"
-        end
-      end
-      alias :time_ago_in_words :time_lost_in_words
-      
-      def prettier_time(time, ampm=true, locale=nil)
-        time.strftime("%I:%M#{" %p" if ampm}").sub(/^0/, '')
-      end
-    end
-  end
-end
-
-module Merb::GlobalHelpers 
-  include Merb::Helpers::DateAndTime
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form/builder.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form/builder.rb
deleted file mode 100644
index 96a463e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form/builder.rb
+++ /dev/null
@@ -1,413 +0,0 @@
-load File.dirname(__FILE__) / ".." / "tag_helpers.rb"
-
-module Merb::Helpers::Form::Builder
-
-  class Base
-    include Merb::Helpers::Tag
-
-    def initialize(obj, name, origin)
-      @obj, @origin = obj, origin
-      @name = name || @obj.class.name.snake_case.split("/").last
-    end
-
-    def form(attrs = {}, &blk)
-      captured = @origin.capture(&blk)
-      fake_method_tag = process_form_attrs(attrs)
-      tag(:form, fake_method_tag + captured, attrs)
-    end
-
-    def fieldset(attrs, &blk)
-      legend = (l_attr = attrs.delete(:legend)) ? tag(:legend, l_attr) : ""
-      tag(:fieldset, legend + @origin.capture(&blk), attrs)
-      # @origin.concat(contents, blk.binding)
-    end
-
-    %w(text password hidden file).each do |kind|
-      self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
-        def bound_#{kind}_field(method, attrs = {})
-          name = control_name(method)
-          update_bound_controls(method, attrs, "#{kind}")
-          unbound_#{kind}_field({
-            :name => name, 
-            :value => control_value(method)
-          }.merge(attrs))
-        end
-
-        def unbound_#{kind}_field(attrs)
-          update_unbound_controls(attrs, "#{kind}")
-          self_closing_tag(:input, {:type => "#{kind}"}.merge(attrs))
-        end
-      RUBY
-    end
-
-    def bound_check_box(method, attrs = {})
-      name = control_name(method)
-      update_bound_controls(method, attrs, "checkbox")
-      unbound_check_box({:name => name}.merge(attrs))
-    end
-
-    def unbound_check_box(attrs)
-      update_unbound_controls(attrs, "checkbox")
-      if attrs.delete(:boolean)
-        on, off = attrs.delete(:on), attrs.delete(:off)
-        unbound_hidden_field(:name => attrs[:name], :value => off) <<
-          self_closing_tag(:input, {:type => "checkbox", :value => on}.merge(attrs))
-      else
-        self_closing_tag(:input, {:type => "checkbox"}.merge(attrs))
-      end
-    end
-
-    def bound_radio_button(method, attrs = {})
-      name = control_name(method)
-      update_bound_controls(method, attrs, "radio")
-      unbound_radio_button({:name => name, :value => control_value(method)}.merge(attrs))
-    end
-
-    def unbound_radio_button(attrs)
-      update_unbound_controls(attrs, "radio")
-      self_closing_tag(:input, {:type => "radio"}.merge(attrs))
-    end
-
-    def bound_radio_group(method, arr)
-      val = control_value(method)
-      arr.map do |attrs|
-        attrs = {:value => attrs} unless attrs.is_a?(Hash)
-        attrs[:checked] = true if (val == attrs[:value])
-        radio_group_item(method, attrs)
-      end.join
-    end
-
-    def unbound_radio_group(arr, attrs = {})
-      arr.map do |ind_attrs|
-        ind_attrs = {:value => ind_attrs} unless ind_attrs.is_a?(Hash)
-        joined = attrs.merge(ind_attrs)
-        joined.merge!(:label => joined[:label] || joined[:value])
-        unbound_radio_button(joined)
-      end.join
-    end
-
-    def bound_select(method, attrs = {})
-      name = control_name(method)
-      update_bound_controls(method, attrs, "select")
-      unbound_select({:name => name}.merge(attrs))
-    end
-
-    def unbound_select(attrs = {})
-      update_unbound_controls(attrs, "select")
-      attrs[:name] << "[]" if attrs[:multiple] && !(attrs[:name] =~ /\[\]$/)
-      tag(:select, options_for(attrs), attrs)
-    end
-
-    def bound_text_area(method, attrs = {})
-      name = "#{@name}[#{method}]"
-      update_bound_controls(method, attrs, "text_area")
-      unbound_text_area(control_value(method), {:name => name}.merge(attrs))
-    end
-
-    def unbound_text_area(contents, attrs)
-      update_unbound_controls(attrs, "text_area")
-      tag(:textarea, contents, attrs)
-    end
-
-    def button(contents, attrs)
-      update_unbound_controls(attrs, "button")
-      tag(:button, contents, attrs)
-    end
-
-    def submit(value, attrs)
-      attrs[:type]  ||= "submit"
-      attrs[:name]  ||= "submit"
-      attrs[:value] ||= value
-      update_unbound_controls(attrs, "submit")
-      self_closing_tag(:input, attrs)
-    end
-
-    private
-
-    def process_form_attrs(attrs)
-      method = attrs[:method]
-
-      # Unless the method is :get, fake out the method using :post
-      attrs[:method] = :post unless attrs[:method] == :get
-      # Use a fake PUT if the object is not new, otherwise use the method
-      # passed in. Defaults to :post if no method is set.
-      method ||= (@obj.respond_to?(:new_record?) && !@obj.new_record?) || (@obj.respond_to?(:new?) && !@obj.new?) ? :put : :post
-
-      attrs[:enctype] = "multipart/form-data" if attrs.delete(:multipart) || @multipart
-
-      method == :post || method == :get ? "" : fake_out_method(attrs, method)
-    end
-
-    # This can be overridden to use another method to fake out methods
-    def fake_out_method(attrs, method)
-      self_closing_tag(:input, :type => "hidden", :name => "_method", :value => method)
-    end
-
-    def update_bound_controls(method, attrs, type)
-      case type
-      when "checkbox"
-        update_bound_check_box(method, attrs)
-      when "select"
-        update_bound_select(method, attrs)
-      end
-    end
-
-    def update_bound_check_box(method, attrs)
-      raise ArgumentError, ":value can't be used with a bound_check_box" if attrs.has_key?(:value)
-
-      attrs[:boolean] = attrs.fetch(:boolean, true)
-
-      val = control_value(method)
-      attrs[:checked] = attrs.key?(:on) ? val == attrs[:on] : considered_true?(val)
-    end
-
-    def update_bound_select(method, attrs)
-      attrs[:value_method] ||= method
-      attrs[:text_method] ||= attrs[:value_method] || :to_s
-      attrs[:selected] ||= control_value(attrs[:value_method])
-    end
-
-    def update_unbound_controls(attrs, type)
-      case type
-      when "checkbox"
-        update_unbound_check_box(attrs)
-      when "file"
-        @multipart = true
-      end
-
-      attrs[:disabled] ? attrs[:disabled] = "disabled" : attrs.delete(:disabled)
-    end
-
-    def update_unbound_check_box(attrs)
-      boolean = attrs[:boolean] || (attrs[:on] && attrs[:off]) ? true : false
-
-      case
-      when attrs.key?(:on) ^ attrs.key?(:off)
-        raise ArgumentError, ":on and :off must be specified together"
-      when (attrs[:boolean] == false) && (attrs.key?(:on))
-        raise ArgumentError, ":boolean => false cannot be used with :on and :off"
-      when boolean && attrs.key?(:value)
-        raise ArgumentError, ":value can't be used with a boolean checkbox"
-      end
-
-      if attrs[:boolean] = boolean
-        attrs[:on] ||= "1"; attrs[:off] ||= "0"
-      end
-
-      attrs[:checked] = "checked" if attrs.delete(:checked)
-    end
-
-    # Accepts a collection (hash, array, enumerable, your type) and returns a string of option tags. 
-    # Given a collection where the elements respond to first and last (such as a two-element array), 
-    # the "lasts" serve as option values and the "firsts" as option text. Hashes are turned into
-    # this form automatically, so the keys become "firsts" and values become lasts. If selected is
-    # specified, the matching "last" or element will get the selected option-tag. Selected may also
-    # be an array of values to be selected when using a multiple select.
-    #
-    # ==== Parameters
-    # attrs<Hash>:: HTML attributes and options
-    #
-    # ==== Options
-    # +selected+:: The value of a selected object, which may be either a string or an array.
-    # +prompt+:: Adds an addtional option tag with the provided string with no value.
-    # +include_blank+:: Adds an additional blank option tag with no value.
-    #
-    # ==== Returns
-    # String:: HTML
-    #
-    # ==== Examples
-    #   <%= options_for [["apple", "Apple Pie"], ["orange", "Orange Juice"]], :selected => "orange"
-    #   => <option value="apple">Apple Pie</option><option value="orange" selected="selected">Orange Juice</option>
-    #
-    #   <%= options_for [["apple", "Apple Pie"], ["orange", "Orange Juice"]], :selected => ["orange", "apple"], :prompt => "Select One"
-    #   => <option value="">Select One</option><option value="apple" selected="selected">Apple Pie</option><option value="orange" selected="selected">Orange Juice</option>
-    def options_for(attrs)
-      blank, prompt = attrs.delete(:include_blank), attrs.delete(:prompt)
-      b = blank || prompt ? tag(:option, prompt || "", :value => "") : ""
-
-      # yank out the options attrs
-      collection, selected, text_method, value_method = 
-        attrs.extract!(:collection, :selected, :text_method, :value_method)
-
-      # if the collection is a Hash, optgroups are a-coming
-      if collection.is_a?(Hash)
-        ([b] + collection.map do |g,col|
-          tag(:optgroup, options(col, text_method, value_method, selected), :label => g)
-        end).join
-      else
-        options(collection || [], text_method, value_method, selected, b)
-      end
-    end
-
-    def options(col, text_meth, value_meth, sel, b = nil)
-      ([b] + col.map do |item|
-        text_meth = text_meth && item.respond_to?(text_meth) ? text_meth : :last
-        value_meth = value_meth && item.respond_to?(value_meth) ? value_meth : :first
-        
-        text = item.is_a?(String) ? item : item.send(text_meth)
-        value = item.is_a?(String) ? item : item.send(value_meth)
-
-        option_attrs = {:value => value}
-        if sel.is_a?(Array)
-          option_attrs.merge!(:selected => "selected") if value.in? sel
-        else
-          option_attrs.merge!(:selected => "selected") if value == sel
-        end
-        tag(:option, text, option_attrs)
-      end).join
-    end
-
-    def radio_group_item(method, attrs)
-      attrs.merge!(:checked => "checked") if attrs[:checked]
-      bound_radio_button(method, attrs)
-    end
-
-    def considered_true?(value)
-      value && value != "0" && value != 0
-    end
-
-    def control_name(method)
-      @obj ? "#{@name}[#{method}]" : method
-    end
-    
-    def control_value(method)
-      @obj ? @obj.send(method) : @origin.params[method]
-    end
-
-    def add_css_class(attrs, new_class)
-      attrs[:class] = attrs[:class] ? "#{attrs[:class]} #{new_class}" : new_class
-    end
-  end
-
-  class Form < Base
-    def label(contents, attrs = {})
-      if contents.is_a?(Hash)
-        attrs    = contents
-        contents = attrs.delete(:label)
-      end
-      if contents
-        for_attr = attrs[:id] ? {:for => attrs[:id]} : {}
-        if contents.is_a?(Hash)
-          attrs = contents
-          contents = attrs.delete(:title)
-          for_attr = for_attr.merge(attrs)
-        end
-        tag(:label, contents, for_attr)
-      else
-        ""
-      end
-    end
-
-    %w(text password file).each do |kind|
-      self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
-        def unbound_#{kind}_field(attrs = {})
-          label(attrs) + super
-        end
-      RUBY
-    end
-
-    def unbound_check_box(attrs = {})
-      label_text = label(attrs)
-      super + label_text
-    end
-
-    def unbound_hidden_field(attrs = {})
-      attrs.delete(:label)
-      super
-    end
-
-    def unbound_radio_button(attrs = {})
-      label_text = label(attrs)
-      super + label_text
-    end
-
-    def unbound_select(attrs = {})
-      label(attrs) + super
-    end
-
-    def unbound_text_area(contents, attrs = {})
-      label(attrs) + super
-    end
-
-    def button(contents, attrs = {})
-      label(attrs) + super
-    end
-
-    def submit(value, attrs = {})
-      label(attrs) + super
-    end
-
-    private
-
-    def update_bound_controls(method, attrs, type)
-      attrs.merge!(:id => "#{@name}_#{method}") unless attrs[:id]
-      super
-    end
-
-    def update_unbound_controls(attrs, type)
-      case type
-      when "text", "radio", "password", "hidden", "checkbox", "file"
-        add_css_class(attrs, type)
-      end
-      super
-    end
-
-    def radio_group_item(method, attrs)
-      unless attrs[:id]
-        attrs.merge!(:id => "#{@name}_#{method}_#{attrs[:value]}")
-      end
-
-      attrs.merge!(:label => attrs[:label] || attrs[:value])
-      super
-    end
-  end
-
-  module Errorifier
-    def error_messages_for(obj, error_class, build_li, header, before)
-      obj ||= @obj
-      return "" unless obj.respond_to?(:errors)
-
-      sequel = !obj.errors.respond_to?(:each)
-      errors = sequel ? obj.errors.full_messages : obj.errors
-
-      return "" if errors.empty?
-
-      header_message = header % [errors.size, errors.size == 1 ? "" : "s"]
-      markup = %Q{<div class='#{error_class}'>#{header_message}<ul>}
-      errors.each {|err| markup << (build_li % (sequel ? err : err.join(" ")))}
-      markup << %Q{</ul></div>}
-    end
-
-    private
-
-    def update_bound_controls(method, attrs, type)
-      if @obj && !@obj.errors.on(method.to_sym).blank?
-        add_css_class(attrs, "error")
-      end
-      super
-    end
-  end
-
-  class FormWithErrors < Form
-    include Errorifier
-  end
-
-  module Resourceful
-    private
-
-    def process_form_attrs(attrs)
-      attrs[:action] ||= @origin.url(@name, @obj) if @origin
-      super
-    end
-  end
-
-  class ResourcefulForm < Form
-    include Resourceful
-  end
-
-  class ResourcefulFormWithErrors < FormWithErrors
-    include Errorifier
-    include Resourceful
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form/helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form/helpers.rb
deleted file mode 100644
index 70f299c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form/helpers.rb
+++ /dev/null
@@ -1,449 +0,0 @@
-# Form helpers provide a number of methods to simplify the creation of HTML forms.
-# They can work directly with models (bound) or standalone (unbound).
-module Merb::Helpers::Form
-
-  def _singleton_form_context
-    self._default_builder = Merb::Helpers::Form::Builder::ResourcefulFormWithErrors unless self._default_builder
-    @_singleton_form_context ||=
-      self._default_builder.new(nil, nil, self)
-  end
-
-  def form_contexts
-    @_form_contexts ||= []
-  end
-
-  def current_form_context
-    form_contexts.last || _singleton_form_context
-  end
-
-  def _new_form_context(name, builder)
-    if name.is_a?(String) || name.is_a?(Symbol)
-      ivar = instance_variable_get("@#{name}")
-    else
-      ivar, name = name, name.class.to_s.snake_case
-    end
-    builder ||= current_form_context.class if current_form_context
-    (builder || self._default_builder).new(ivar, name, self)
-  end
-
-  def with_form_context(name, builder)
-    form_contexts.push(_new_form_context(name, builder))
-    ret = yield
-    form_contexts.pop
-    ret
-  end
-
-  # Generates a form tag, which accepts a block that is not directly based on resource attributes
-  #
-  # ==== Parameters
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Notes
-  #  * Block helpers use the <%= =%> syntax
-  #  * a multipart enctype is automatically set if the form contains a file upload field
-  #
-  # ==== Example
-  #   <%= form :action => url(:controller => "foo", :action => "bar", :id => 1) do %>
-  #     <%= text_field :name => "first_name", :label => "First Name" %>
-  #     <%= submit "Create" %>
-  #   <% end =%>
-  #
-  #   Generates the HTML:
-  #
-  #   <form action="/foo/bar/1" method="post">
-  #     <label for="first_name">First Name</label>
-  #     <input type="text" id="first_name" name="first_name" />
-  #     <input type="submit" value="Create" />
-  #   </form>
-  def form(*args, &blk)
-    _singleton_form_context.form(*args, &blk)
-  end
-
-  # Generates a resource specific form tag which accepts a block, this also provides automatic resource routing.
-  #
-  # ==== Parameters
-  # name<Symbol>:: Model or Resource
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Notes
-  #  * Block helpers use the <%= =%> syntax
-  #
-  # ==== Example
-  #   <%= form_for @person do %>
-  #     <%= text_field :first_name, :label => "First Name" %>
-  #     <%= text_field :last_name,  :label => "Last Name" %>
-  #     <%= submit "Create" %>
-  #   <% end =%>
-  #
-  # The HTML generated for this would be:
-  #
-  #   <form action="/people" method="post">
-  #     <label for="person_first_name">First Name</label>
-  #     <input type="text" id="person_first_name" name="person[first_name]" />
-  #     <label for="person_last_name">Last Name</label>
-  #     <input type="text" id="person_last_name" name="person[last_name]" />
-  #     <input type="submit" value="Create" />
-  #   </form>
-  def form_for(name, attrs = {}, &blk)
-    with_form_context(name, attrs.delete(:builder)) do
-      current_form_context.form(attrs, &blk)
-    end
-  end
-  
-  # Creates a scope around a specific resource object like form_for, but doesnt create the form tags themselves.
-  # This makes fields_for suitable for specifying additional resource objects in the same form. 
-  #
-  # ==== Examples
-  #   <%= form_for @person do %>
-  #     <%= text_field :first_name, :label => "First Name" %>
-  #     <%= text_field :last_name,  :label => "Last Name" %>
-  #     <%= fields_for :permission do %>
-  #       <%= check_box :is_admin, :label => "Administrator" %>
-  #     <% end =%>
-  #     <%= submit "Create" %>
-  #   <% end =%>
-  def fields_for(name, attrs = {}, &blk)
-    attrs ||= {}
-    with_form_context(name, attrs.delete(:builder)) do
-      yield
-    end
-  end
-
-  # Provides the ability to create quick fieldsets as blocks for your forms.
-  #
-  # ==== Parameters
-  # attrs<Hash>:: HTML attributes and options
-  #
-  # ==== Options
-  # +legend+:: Adds a legend tag within the fieldset
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Notes
-  # Block helpers use the <%= =%> syntax
-  #
-  # ==== Example
-  #   <%= fieldset :legend => "Customer Options" do %>
-  #     ...your form elements
-  #   <% end =%>
-  #
-  # Generates the HTML:
-  #
-  #   <fieldset>
-  #     <legend>Customer Options</legend>
-  #     ...your form elements
-  #   </fieldset>
-  def fieldset(attrs = {}, &blk)
-    _singleton_form_context.fieldset(attrs, &blk)
-  end
-
-  def fieldset_for(name, attrs = {}, &blk)
-    with_form_context(name, attrs.delete(:builder)) do
-      current_form_context.fieldset(attrs, &blk)
-    end
-  end
-
-  # Provides a generic HTML checkbox input tag.
-  # There are two ways this tag can be generated, based on the
-  # option :boolean. If not set to true, a "magic" input is generated.
-  # Otherwise, an input is created that can be easily used for passing
-  # an array of values to the application.
-  #
-  # ==== Parameters
-  # method<Symbol>:: Resource attribute
-  # attrs<Hash>:: HTML attributes and options
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= check_box :name => "is_activated", :value => "1" %>
-  #   <%= check_box :name => "choices[]", :boolean => false, :value => "dog" %>
-  #   <%= check_box :name => "choices[]", :boolean => false, :value => "cat" %>
-  #   <%= check_box :name => "choices[]", :boolean => false, :value => "weasle" %>
-  #
-  # Used with a model:
-  #
-  #   <%= check_box :is_activated, :label => "Activated?" %>
-  def check_box; end
-
-  # Provides a HTML file input
-  #
-  # ==== Parameters
-  # name<Symbol>:: Model or Resource
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= file_field :name => "file", :label => "File" %>
-  #
-  # Used with a model:
-  #
-  #   <%= file_field :file, :label => "Choose a file" %>
-  def file_field; end
-
-  # Provides a HTML hidden input field
-  #
-  # ==== Parameters
-  # name<Symbol>:: Model or Resource
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= hidden_field :name => "secret", :value => "some secret value" %>
-  #
-  # Used with a model:
-  #
-  #   <%= hidden_field :identifier %>
-  #   # => <input type="hidden" id="person_identifier" name="person[identifier]" value="#{@person.identifier}" />
-  def hidden_field; end
-
-  # Provides a generic HTML label.
-  #
-  # ==== Parameters
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= label "Full Name", :for => "name" %> 
-  #   => <label for="name">Full Name</label>
-  def label(*args)
-    current_form_context.label(*args)
-  end
-
-  # Provides a HTML password input.
-  #
-  # ==== Parameters
-  # name<Symbol>:: Model or Resource
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= password_field :name => :password, :label => "Password" %>
-  #   # => <label for="password">Password</label><input type="password" id="password" name="password" />
-  #
-  # Used with a model:
-  #
-  #   <%= password_field :password, :label => 'New Password' %>
-  def password_field; end
-
-  # Provides a HTML radio input tag
-  #
-  # ==== Parameters
-  # method<Symbol>:: Resource attribute
-  # attrs<Hash>:: HTML attributes and options
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= radio_button :name => "radio_options", :value => "1", :label => "One" %>
-  #   <%= radio_button :name => "radio_options", :value => "2", :label => "Two" %>
-  #   <%= radio_button :name => "radio_options", :value => "3", :label => "Three", :checked => true %>
-  #
-  # Used with a model:
-  #
-  #   <%= form_for @person do %>
-  #     <%= radio_button :first_name %>
-  #   <% end =%>
-  def radio_button; end
-
-  # Provides a radio group based on a resource attribute.
-  # This is generally used within a resource block such as +form_for+.
-  #
-  # ==== Parameters
-  # method<Symbol>:: Resource attribute
-  # arr<Array>:: Choices
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Examples
-  #   <%# the labels are the options %>
-  #   <%= radio_group :my_choice, [5,6,7] %>
-  #
-  #   <%# custom labels %>
-  #   <%= radio_group :my_choice, [{:value => 5, :label => "five"}] %>
-  def radio_group; end
-
-  # Provides a HTML select
-  #
-  # ==== Parameters
-  # method<Symbol>:: Resource attribute
-  # attrs<Hash>:: HTML attributes and options
-  #
-  # ==== Options
-  # +prompt+:: Adds an additional option tag with the provided string with no value.
-  # +selected+:: The value of a selected object, which may be either a string or an array.
-  # +include_blank+:: Adds an additional blank option tag with no value.
-  # +collection+:: The collection for the select options
-  # +text_method+:: Method to determine text of an option (as a symbol). Ex: :text_method => :name  will call .name on your record object for what text to display.
-  # +value_method+:: Method to determine value of an option (as a symbol).
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= select :name, :collection => %w(one two three) %>
-  def select; end
-
-  # Provides a HTML textarea tag
-  #
-  # ==== Parameters
-  # contents<String>:: Contents of the text area
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= text_area "my comments", :name => "comments" %>
-  #
-  # Used with a model:
-  #
-  #   <%= text_area :comments %>
-  def text_area; end
-
-  # Provides a HTML text input tag
-  #
-  # ==== Parameters
-  # name<Symbol>:: Model or Resource
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= text_field :name => :fav_color, :label => "Your Favorite Color" %>
-  #   # => <label for="fav_color">Your Favorite Color</label><input type="text" id="fav_color" name="fav_color" />
-  #
-  # Used with a model:
-  #
-  #   <%= form_for @person do %>
-  #     <%= text_field :first_name, :label => "First Name" %>
-  #   <% end =%>
-  def text_field; end
-
-  # @todo radio_group helper still needs to be implemented
-  %w(text_field password_field hidden_field file_field
-  text_area select check_box radio_button radio_group).each do |kind|
-    self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
-      def #{kind}(*args)
-        if bound?(*args)
-          current_form_context.bound_#{kind}(*args)
-        else
-          current_form_context.unbound_#{kind}(*args)
-        end
-      end
-    RUBY
-  end
-
-  # Generates a HTML button.
-  #
-  # ==== Parameters
-  # contents<String>:: HTML contained within the button tag
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Notes
-  #  * Buttons do not always work as planned in IE
-  #    http://www.peterbe.com/plog/button-tag-in-IE
-  #  * Not all mobile browsers support buttons
-  #    http://nickcowie.com/2007/time-to-stop-using-the-button-element/
-  #
-  # ==== Example
-  #   <%= button "Initiate Launch Sequence" %>
-  def button(contents, attrs = {})
-    current_form_context.button(contents, attrs)
-  end
-  
-  # Generates a HTML delete button.
-  #
-  # If an object is passed as first parameter, Merb will try to use the resource url for the object
-  # If the object doesn't have a resource view, pass a url
-  #
-  # ==== Parameters
-  # object_or_url<Object> or <String>:: Object to delete or URL to send the request to
-  # contents<String>:: HTML contained within the button tag
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= delete_button @article, "Delete article now", :class => 'delete-btn' %>
-  #   <%= delete_button url(:article, @article)%>
-  #
-  def delete_button(object_or_url, contents="Delete", attrs = {})
-    url = object_or_url.is_a?(String) ? object_or_url : resource(object_or_url)
-    button_text = (contents || 'Delete')
-    tag :form, :class => 'delete-btn', :action => url, :method => :post do
-      tag(:input, :type => :hidden, :name => "_method", :value => "DELETE") <<
-      tag(:input, attrs.merge(:value => button_text, :type => :submit))
-    end
-  end
-
-  # Generates a HTML submit button.
-  #
-  # ==== Parameters
-  # value<String>:: Sets the value="" attribute
-  # attrs<Hash>:: HTML attributes
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Example
-  #   <%= submit "Process" %>
-  def submit(contents, attrs = {})
-    current_form_context.submit(contents, attrs)
-  end
-
-  # Provides a HTML formatted display of resource errors in an unordered list with a h2 form submission error
-  #
-  # ==== Parameters
-  # obj<Symbol>:: Model or Resource
-  # error_class<String>:: CSS class to use for error container
-  # build_li<String>:: Custom li tag to wrap each error in
-  # header<String>:: Custom header text for the error container
-  # before<Boolean>:: Display the errors before or inside of the form
-  #
-  # ==== Returns
-  # String:: HTML
-  #
-  # ==== Examples
-  #   <%= error_messages_for :person %>
-  #   <%= error_messages_for :person {|errors| "You can has probs nao: #{errors.size} of em!"}
-  #   <%= error_messages_for :person, lambda{|error| "<li class='aieeee'>#{error.join(' ')}"} %>
-  #   <%= error_messages_for :person, nil, 'bad_mojo' %>
-  def error_messages_for(obj = nil, opts = {})
-    current_form_context.error_messages_for(obj, opts[:error_class] || "error", 
-      opts[:build_li] || "<li>%s</li>", 
-      opts[:header] || "<h2>Form submission failed because of %s problem%s</h2>",
-      opts.key?(:before) ? opts[:before] : true)
-  end
-  alias error_messages error_messages_for
-
-  private
-
-  def bound?(*args)
-    args.first.is_a?(Symbol)
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form_helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form_helpers.rb
deleted file mode 100644
index 7236b20..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/form_helpers.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-load File.dirname(__FILE__) / "form" / "helpers.rb"
-load File.dirname(__FILE__) / "form" / "builder.rb"
-
-module Merb::GlobalHelpers
-  include Merb::Helpers::Form
-end
-
-class Merb::AbstractController
-  class_inheritable_accessor :_default_builder
-end
-
-Merb::BootLoader.after_app_loads do
-  class Merb::AbstractController
-    self._default_builder =
-      Object.full_const_get(Merb::Plugins.config[:helpers][:default_builder]) rescue Merb::Helpers::Form::Builder::ResourcefulFormWithErrors
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/tag_helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/tag_helpers.rb
deleted file mode 100644
index 9c2a880..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/tag_helpers.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-module Merb
-  module Helpers
-    module Tag    
-      # Creates a generic HTML tag. You can invoke it a variety of ways.
-      #   
-      #   tag :div
-      #   # <div></div>
-      #   
-      #   tag :div, 'content'
-      #   # <div>content</div>
-      #   
-      #   tag :div, :class => 'class'
-      #   # <div class="class"></div>
-      #   
-      #   tag :div, 'content', :class => 'class'
-      #   # <div class="class">content</div>
-      #   
-      #   tag :div do
-      #     'content'
-      #   end
-      #   # <div>content</div>
-      #   
-      #   tag :div, :class => 'class' do
-      #     'content'
-      #   end
-      #   # <div class="class">content</div>
-      # 
-      def tag(name, contents = nil, attrs = {}, &block)
-        attrs, contents = contents, nil if contents.is_a?(Hash)
-        contents = capture(&block) if block_given?
-        open_tag(name, attrs) + contents.to_s + close_tag(name)
-      end
-    
-      # Creates the opening tag with attributes for the provided +name+
-      # attrs is a hash where all members will be mapped to key="value"
-      #
-      # Note: This tag will need to be closed
-      def open_tag(name, attrs = nil)
-        "<#{name}#{' ' + attrs.to_html_attributes unless attrs.blank?}>"
-      end
-    
-      # Creates a closing tag
-      def close_tag(name)
-        "</#{name}>"
-      end
-    
-      # Creates a self closing tag.  Like <br/> or <img src="..."/>
-      #
-      # +name+ : the name of the tag to create
-      # +attrs+ : a hash where all members will be mapped to key="value"
-      def self_closing_tag(name, attrs = nil)
-        "<#{name}#{' ' + attrs.to_html_attributes if attrs && !attrs.empty?}/>"
-      end
-        
-    end
-  end
-end
-
-module Merb::GlobalHelpers
-  include Merb::Helpers::Tag
-end    
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/text_helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/text_helpers.rb
deleted file mode 100644
index deb82a0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/text_helpers.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-module Merb::Helpers::Text
-  # Allows you to cycle through elements in an array
-  #
-  # ==== Parameters
-  # values<Array>:: Array of objects to cycle through
-  # values<Hash>:: Last element of array can be a hash with the key of
-  #                :name to specify the name of the cycle
-  #
-  # ==== Returns
-  # String
-  #
-  # ==== Notes
-  # * Default name is :default
-  #
-  # ==== Example
-  # <%= 5.times { cycle("odd! ","even! "} %>
-  #
-  # Generates:
-  #
-  # odd! even! odd! even! odd!
-  def cycle(*values)
-    options = extract_options_from_args!(values) || {}
-    key = (options[:name] || :default).to_sym
-    (@cycle_positions ||= {})[key] ||= {:position => -1, :values => values}
-    unless values == @cycle_positions[key][:values]
-      @cycle_positions[key] = {:position => -1, :values => values}
-    end
-    current = @cycle_positions[key][:position]
-    @cycle_positions[key][:position] = current + 1
-    values.at( (current + 1) % values.length).to_s
-  end
-
-  # Allows you to reset a cycle
-  #
-  # ==== Parameters
-  # name<Symbol|String>:: Name of the cycle
-  #
-  # ==== Returns
-  # True if successful, otherwise nil
-  #
-  # ==== Notes
-  # * Default name is :default
-  #
-  # ==== Example
-  # <%= cycle("odd! ","even! ","what comes after even?") %>
-  # <%= cycle("odd! ","even! ","what comes after even?") %>
-  # <% reset_cycle %>
-  # <%= cycle("odd! ","even! ","what comes after even?") %>
-  #
-  # Generates:
-  #
-  # odd! even! odd!
-  def reset_cycle(name = :default)
-    (@cycle_positions[name.to_sym] = nil) &&
-      true if @cycle_positions && @cycle_positions[name.to_sym]
-  end
-end
-
-module Merb::GlobalHelpers
-  include Merb::Helpers::Text
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/time_dsl.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/time_dsl.rb
deleted file mode 100644
index 19514eb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/lib/merb-helpers/time_dsl.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# Provides a a simple way of calling time units and to see the elapsed time between 2 moments
-# ==== Examples
-#   142.minutes => returns a value in seconds
-#   7.days => returns a value in seconds
-#   1.week => returns a value in seconds
-#   2.weeks.ago => returns a date
-#   1.year.since(time) => returns a date
-#   5.months.since(2.weeks.from_now) => returns a date
-module TimeDSL
-  
-  def second
-    self * 1
-  end
-  alias_method :seconds, :second
-  
-  def minute
-    self * 60
-  end
-  alias_method :minutes, :minute
-  
-  def hour
-    self * 3600
-  end
-  alias_method :hours, :hour
-  
-  def day
-    self * 86400
-  end
-  alias_method :days, :day
-  
-  def week
-    self * 604800
-  end
-  alias_method :weeks, :week
-  
-  def month
-    self * 2592000
-  end
-  alias_method :months, :month
-  
-  def year
-    self * 31471200
-  end
-  alias_method :years, :year
-  
-  # Reads best without arguments:  10.minutes.ago
-  def ago(time = ::Time.now)
-    time - self
-  end
-  alias :until :ago
-  
-  # Reads best with argument:  10.minutes.since(time)
-  def since(time = ::Time.now)
-    time + self
-  end
-  alias :from_now :since
-end
-
-Numeric.send :include, TimeDSL
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/core_ext_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/core_ext_spec.rb
deleted file mode 100644
index 9f678b0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/core_ext_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "String" do
-  before :each do
-    @str = "This is a fairly long string to test with!"
-  end
-
-  it "should default to appending ..." do
-    @str.truncate(5).should == "Th..."
-  end
-
-  it "should default to a length of 30" do
-    @str.truncate().should == "This is a fairly long strin..."
-  end
-
-  it "should truncate to a given length with a given suffix" do
-    @str.truncate(15, "--more").should == "This is a--more"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/application.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/application.rb
deleted file mode 100644
index 99141ac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/application.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-class Application < Merb::Controller
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_check_box.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_check_box.rb
deleted file mode 100644
index 2912e7e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_check_box.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundCheckBoxSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_file_field.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_file_field.rb
deleted file mode 100644
index 7e89de4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_file_field.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundFileFieldSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_hidden_field.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_hidden_field.rb
deleted file mode 100644
index 7d86ada..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_hidden_field.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundHiddenFieldSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_option_tag.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_option_tag.rb
deleted file mode 100644
index 997516e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_option_tag.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundOptionTagSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_password_field.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_password_field.rb
deleted file mode 100644
index 6a72dff..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_password_field.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundPasswordFieldSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_radio_button.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_radio_button.rb
deleted file mode 100644
index f017546..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_radio_button.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundRadioButtonSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_radio_group.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_radio_group.rb
deleted file mode 100644
index ecb33f6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_radio_group.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundRadioGroupSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_select.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_select.rb
deleted file mode 100644
index f5f298f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_select.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundSelectSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_text_area.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_text_area.rb
deleted file mode 100644
index d4a1ffc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_text_area.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundTextAreaSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_text_field.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_text_field.rb
deleted file mode 100644
index 117e66a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/bound_text_field.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class BoundTextFieldSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/button.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/button.rb
deleted file mode 100644
index 59676e1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/button.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class ButtonSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/check_box.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/check_box.rb
deleted file mode 100644
index ce820c2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/check_box.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class CheckBoxSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/custom_builder.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/custom_builder.rb
deleted file mode 100644
index fb0877e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/custom_builder.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class CustomBuilderSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/delete_button.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/delete_button.rb
deleted file mode 100644
index aae2c26..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/delete_button.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class DeleteButtonSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/exceptions.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/exceptions.rb
deleted file mode 100644
index f5c5a9b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/exceptions.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-class Exceptions < Merb::Controller
-
-  attr_reader :handler 
-  
-  # handle NotFound exceptions (404)
-  
-   def not_found
-     @handler = :not_found
-     render :format => :html
-   end
- 
-   # handle NotAcceptable exceptions (406)
-   
-   def not_acceptable
-     @handler = :not_acceptable
-     render "Handled by: not_acceptable"
-   end
- 
-  # # Any client error (400 series)
-  def client_error
-    @handler = :client_error
-    render "Handled by: client_error"
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/field_set.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/field_set.rb
deleted file mode 100644
index c696599..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/field_set.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class FieldsetSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/fields_for.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/fields_for.rb
deleted file mode 100644
index ef708e9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/fields_for.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class FieldsForSpecs < SpecController
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/file_field.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/file_field.rb
deleted file mode 100644
index 3da7dc6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/file_field.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class FileFieldSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/foo.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/foo.rb
deleted file mode 100644
index 9f3a55c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/foo.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-class Foo < Application
-
-  def index
-    "index"
-  end
-
-  def bar
-    render
-  end
-
-  def renders_tag
-    render
-  end
-
-  def raise_conflict
-    raise Conflict
-  end
-  
-  def raise_not_acceptable
-    raise NotAcceptable
-  end
-  
-end  
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/form.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/form.rb
deleted file mode 100644
index e445d3d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/form.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class FormSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/form_for.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/form_for.rb
deleted file mode 100644
index d9d3a9b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/form_for.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class FormForSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/hidden_field.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/hidden_field.rb
deleted file mode 100644
index 869f281..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/hidden_field.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class HiddenFieldSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/label.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/label.rb
deleted file mode 100644
index 507f99b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/label.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class LabelSpecs < SpecController
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/numeric_ext.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/numeric_ext.rb
deleted file mode 100644
index cad75c1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/numeric_ext.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class NumericExtSpecs < SpecController
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/option_tag.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/option_tag.rb
deleted file mode 100644
index 0c0e337..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/option_tag.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class OptionTagSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/password_field.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/password_field.rb
deleted file mode 100644
index a621e08..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/password_field.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class PasswordFieldSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/radio_button.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/radio_button.rb
deleted file mode 100644
index 0ad049a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/radio_button.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class RadioButtonSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/radio_group.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/radio_group.rb
deleted file mode 100644
index 9c96659..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/radio_group.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class RadioGroupSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/relative_date.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/relative_date.rb
deleted file mode 100644
index 29ac0be..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/relative_date.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class RelativeDateSpecs < SpecController
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/relative_date_span.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/relative_date_span.rb
deleted file mode 100644
index 558b511..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/relative_date_span.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class RelativeDateSpanSpecs < SpecController
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/select.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/select.rb
deleted file mode 100644
index 3743d0b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/select.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class SelectSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/specs_controller.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/specs_controller.rb
deleted file mode 100644
index 24a4d86..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/specs_controller.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# Helpers are tested going through the full stack.
-# to keep things isolated each helper has its own controller subclass
-# if you are working on a new helper, please consider creating 
-# a new spec controller subclass
-#
-# Remember that your helper spec views
-# will be located in a folder named after the controller you use
-
-class SpecController < Merb::Controller
-  layout nil
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/submit.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/submit.rb
deleted file mode 100644
index a391cc9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/submit.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class SubmitSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/tag_helper.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/tag_helper.rb
deleted file mode 100644
index eb84b7a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/tag_helper.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class TagHelper < Merb::Controller
-  def tag_with_content
-    @content = "Astral Projection ~ Dancing Galaxy"
-    
-    render
-  end
-
-  def tag_with_content_in_the_block
-    render
-  end
-
-  def nested_tags
-    @content = "Astral Projection ~ In the Mix"
-    
-    render
-  end
-
-  def tag_with_attributes
-    render
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/text_area.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/text_area.rb
deleted file mode 100644
index bad7baf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/text_area.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class TextAreaSpecs < SpecController
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/text_field.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/text_field.rb
deleted file mode 100644
index 2d513ac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/controllers/text_field.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class TextFieldSpecs < SpecController
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/helpers/global_helpers.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/helpers/global_helpers.rb
deleted file mode 100644
index 6cbdf14..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/helpers/global_helpers.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-module Merb
-
-  module GlobalHelper
-    # helpers defined here available to all views.  
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/fake_dm_model.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/fake_dm_model.rb
deleted file mode 100644
index 1440319..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/fake_dm_model.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-class FakeDMModel
-  def self.properties
-    [FakeColumn.new(:baz, TrueClass),
-     FakeColumn.new(:bat, TrueClass)
-    ]
-  end
-  
-  def new_record?
-    false
-  end
-  
-  def errors
-    FakeErrors.new(self)
-  end
-  
-  def baz?
-    true
-  end
-  alias baz baz?
-  
-  def bat?
-    false
-  end
-  alias bat bat?
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/first_generic_fake_model.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/first_generic_fake_model.rb
deleted file mode 100644
index afbb2e0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/first_generic_fake_model.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-class FakeModel
-  
-  attr_accessor :vin, :make, :model
-  
-  def self.columns
-    [FakeColumn.new(:foo, :string), 
-     FakeColumn.new(:foobad, :string),
-     FakeColumn.new(:desc, :string),
-     FakeColumn.new(:bar, :integer), 
-     FakeColumn.new(:barbad, :integer),      
-     FakeColumn.new(:baz, :boolean),
-     FakeColumn.new(:bazbad, :boolean),
-     FakeColumn.new(:bat, :boolean),
-     FakeColumn.new(:batbad, :boolean)
-     ]     
-  end
-  
-  def valid?
-    false
-  end
-  
-  def new_record?
-    false
-  end
-  
-  def errors
-    FakeErrors.new(self)
-  end
-  
-  def foo
-    "foowee"
-  end
-  alias_method :foobad, :foo
-  
-  def bar
-    7
-  end
-  alias_method :barbad, :bar
-  
-  def baz
-    true
-  end
-  alias_method :bazbad, :baz
-  
-  def bat
-    false
-  end
-  alias_method :batbad, :bat
-  
-  def nothing
-    nil
-  end
-  
-  def to_s
-    'fake_model'
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/second_generic_fake_model.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/second_generic_fake_model.rb
deleted file mode 100644
index 29125e3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/second_generic_fake_model.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-class FakeModel2 < FakeModel
-  def id
-    1
-  end
-  
-  def foo
-    "foowee2"
-  end
-  alias_method :foobad, :foo
-  
-  def bar
-    "barbar"
-  end
-  
-  def new_record?
-    true
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/third_generic_fake_model.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/third_generic_fake_model.rb
deleted file mode 100644
index cc74a6e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/models/third_generic_fake_model.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class FakeModel3
-  attr_accessor :foo, :bar
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/basic.html.erb
deleted file mode 100644
index ce25deb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/basic.html.erb
+++ /dev/null
@@ -1,4 +0,0 @@
-<%= form_for @obj, :action => "/" do %>
-  <%= check_box(:baz) %>
-  <%= check_box(:bat) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/checked.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/checked.html.erb
deleted file mode 100644
index 1d02cc6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/checked.html.erb
+++ /dev/null
@@ -1,4 +0,0 @@
-<%= form_for @obj do %>
-  <%= check_box(:foo, :on => "foowee", :off => "NO") %>
-  <%= check_box(:foo, :on => "YES",    :off => "NO", :true_if => "zoo") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/errors.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/errors.html.erb
deleted file mode 100644
index e0d6e4b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/errors.html.erb
+++ /dev/null
@@ -1,4 +0,0 @@
-<%= form_for @obj do %>
-  <%= check_box(:bazbad) %>
-  <%= check_box(:batbad) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/label.html.erb
deleted file mode 100644
index ff6c95c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/label.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-<%= check_box(:foo, :label => "LABEL") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/on_and_off.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/on_and_off.html.erb
deleted file mode 100644
index ea559ba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/on_and_off.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= check_box(:bat, :off => "off", :on => "on") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/raise_value_error.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/raise_value_error.html.erb
deleted file mode 100644
index c78c423..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_check_box_specs/raise_value_error.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= check_box(:baz, :value => "Awesome") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/additional_attributes.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/additional_attributes.html.erb
deleted file mode 100644
index bedf3e4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/additional_attributes.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= file_field(:foo, :bar => "7") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/takes_string.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/takes_string.html.erb
deleted file mode 100644
index 3274e96..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/takes_string.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= file_field :foo %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/with_label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/with_label.html.erb
deleted file mode 100644
index 5499092..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_file_field_specs/with_label.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= file_field :foo, :label => "LABEL" %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/basic.html.erb
deleted file mode 100644
index 5002117..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= hidden_field(:foo) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/errors.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/errors.html.erb
deleted file mode 100644
index b1c7606..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/errors.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= hidden_field(:foobad) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/hidden_error.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/hidden_error.html.erb
deleted file mode 100644
index cade077..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/hidden_error.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @model, :action => "/" do %>
-  <%= hidden_field(:foo, :bar =>"7") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/label.html.erb
deleted file mode 100644
index cfe2bf9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_hidden_field_specs/label.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= hidden_field(:foo, :label => "LABEL") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/grouped.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/grouped.html.erb
deleted file mode 100644
index fb21515..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/grouped.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @model1 do %>
-  <%= select(:vin, :text_method => "model", :collection => @collection) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/nested.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/nested.html.erb
deleted file mode 100644
index ce35c8b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/nested.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= select(:foo, :collection => [["small", "Small"], ["medium", "Medium"], ["large", "Large"]]) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/text_and_value.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/text_and_value.html.erb
deleted file mode 100644
index a3c7238..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_option_tag_specs/text_and_value.html.erb
+++ /dev/null
@@ -1,4 +0,0 @@
-<%= form_for @obj do %>
-  <%= select( :foo, :collection => [FakeModel.new, FakeModel2.new], :text_method => "foo", :value_method => "bar" ) %>
-<% end =%>
-
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/attributes.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/attributes.html.erb
deleted file mode 100644
index 7fc57ec..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/attributes.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/basic.html.erb
deleted file mode 100644
index 8f59c88..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj, :action => "/" do %>
-  <%= password_field(:foo, :bar => "7", :label => "LABEL") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/label.html.erb
deleted file mode 100644
index 7fc57ec..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_password_field_specs/label.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_button_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_button_specs/basic.html.erb
deleted file mode 100644
index 716cc10..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_button_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj, :action => "/" do %>
-<%= radio_button(:foo, :bar => "7", :label => "LABEL") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/basic.html.erb
deleted file mode 100644
index 6b99a71..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= radio_group (:foo, ["foowee", "baree"]) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/hashes.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/hashes.html.erb
deleted file mode 100644
index abc6acf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/hashes.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-<%= radio_group(:foo, [{:value => 5, :label => "Five"}, {:value => 'bar', :label => 'Bar', :id => 'bar_id'}]) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/mixed.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/mixed.html.erb
deleted file mode 100644
index 6934eee..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/mixed.html.erb
+++ /dev/null
@@ -1,4 +0,0 @@
-<%= form_for @obj do %>
-  <%= radio_group (:foo, [:bar]) %>
-  <%= radio_group (:foo, [{:value => 'bar', :label => 'Bar'}])%>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/override_id.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/override_id.html.erb
deleted file mode 100644
index 429faf8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_radio_group_specs/override_id.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= radio_group(:foo, [{:value => 'bar', :label => 'Bar', :id => 'bar_id'}]) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/basic.html.erb
deleted file mode 100644
index b8bae3b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= select :foo %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/blank.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/blank.html.erb
deleted file mode 100644
index 88126ef..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/blank.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
- <%= select( :foo, :include_blank => true ) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/multiple.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/multiple.html.erb
deleted file mode 100644
index 5db4936..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/multiple.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-<%= select( :foo, :multiple => true ) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/prompt.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/prompt.html.erb
deleted file mode 100644
index b1f21e6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/prompt.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-<%= select( :foo, :prompt => "Choose" ) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/with_options.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/with_options.html.erb
deleted file mode 100644
index 3912d1e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/with_options.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%=  select( :foo, :class => 'class1 class2', :title => 'This is the title' ) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/with_options_with_blank.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/with_options_with_blank.html.erb
deleted file mode 100644
index 036a807..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_select_specs/with_options_with_blank.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-  <%= select( :foo, :title => "TITLE", :include_blank => true ) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_text_area_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_text_area_specs/basic.html.erb
deleted file mode 100644
index 77db490..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_text_area_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj do %>
-<%=  text_area( :foo ) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_text_field_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_text_field_specs/basic.html.erb
deleted file mode 100644
index e11c7a9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/bound_text_field_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj, :action => "/" do %>
-  <%= text_field :foo, :bar => "7", :label => "LABEL" %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/button_with_label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/button_with_label.html.erb
deleted file mode 100644
index 52843ad..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/button_with_label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= button "Click Me", :type => 'button', :value => 'foo', :label => "LABEL" %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/button_with_values.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/button_with_values.html.erb
deleted file mode 100644
index 74fa0d1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/button_with_values.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= button "Click Me", :type => 'button', :name => 'foo', :value => 'bar' %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/disabled_button.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/disabled_button.html.erb
deleted file mode 100644
index 254fcd3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/button_specs/disabled_button.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= button :disabled => true %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/basic.html.erb
deleted file mode 100644
index 700d576..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/basic.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= check_box(:name => "foo", :checked => "checked") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/boolean.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/boolean.html.erb
deleted file mode 100644
index 279f77e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/boolean.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%=  check_box(:boolean => true) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/disabled.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/disabled.html.erb
deleted file mode 100644
index db248cd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/disabled.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= check_box(:disabled => true) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/label.html.erb
deleted file mode 100644
index 3ba5b73..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= check_box(:label => "LABEL" ) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/on_off_is_boolean.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/on_off_is_boolean.html.erb
deleted file mode 100644
index 12fa133..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/on_off_is_boolean.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= check_box(:name => "foo", :on => "YES", :off => "NO") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raise_unless_both_on_and_off.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raise_unless_both_on_and_off.html.erb
deleted file mode 100644
index abc7911..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raise_unless_both_on_and_off.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<%= check_box(:name => "foo", :on  => "YES") %>
-<%= check_box(:name => "foo", :off  => "NO") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raises_error_if_not_boolean.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raises_error_if_not_boolean.html.erb
deleted file mode 100644
index 02e0a47..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raises_error_if_not_boolean.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= check_box(:boolean => true, :value => "woot") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raises_error_if_on_off_and_boolean_false.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raises_error_if_on_off_and_boolean_false.html.erb
deleted file mode 100644
index 2508780..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/raises_error_if_on_off_and_boolean_false.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= check_box :boolean => false, :on => "YES", :off => "NO" %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/simple.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/simple.html.erb
deleted file mode 100644
index 87f18e3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/simple.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= check_box %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/to_string.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/to_string.html.erb
deleted file mode 100644
index 521a79e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/to_string.html.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-<%= check_box(:name => "nil", :value => nil) %>
-<%= check_box(:name => "false", :value => false) %>
-<%= check_box(:name => "0", :value => 0) %>
-<%= check_box(:name => "0s", :value => "0") %>
-<%= check_box(:name => "1", :value => 1) %>
-<%= check_box(:name => "1s", :value => "1") %>
-<%= check_box(:name => "true", :value => true) %>
-
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/unchecked.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/unchecked.html.erb
deleted file mode 100644
index 0f39de2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/check_box_specs/unchecked.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<%= check_box(:name => "foo", :checked => false) %>
-<%= check_box(:name => "foo", :checked => nil) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/custom_builder_specs/everything.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/custom_builder_specs/everything.html.erb
deleted file mode 100644
index 7919bd4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/custom_builder_specs/everything.html.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<%= form_for @obj, :builder => MyBuilder do %>
-  <%= file_field(:foo) %>
-  <%= text_field(:foo) %>
-  <%= hidden_field(:foo) %>
-  <%= password_field(:foo) %>
-  <%= radio_button(:foo) %>
-  <%= text_area(:foo) %>
-  <%= button("Click") %>
-  <%= submit("Awesome") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_explicit_url.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_explicit_url.html.erb
deleted file mode 100644
index fe08ffa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_explicit_url.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= delete_button('/test/custom_url') %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_extra_params.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_extra_params.html.erb
deleted file mode 100644
index 0ffe839..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_extra_params.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= delete_button(@obj, nil, :class => 'custom-class') %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_label.html.erb
deleted file mode 100644
index d8f7646..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/delete_with_label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= delete_button(@obj, "Delete moi!") %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/simple_delete.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/simple_delete.html.erb
deleted file mode 100644
index 3ae19cc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/delete_button_specs/simple_delete.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= delete_button(@obj) %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/client_error.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/client_error.html.erb
deleted file mode 100644
index a3c3372..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/client_error.html.erb
+++ /dev/null
@@ -1,37 +0,0 @@
-<div id="container">
-  <div id="header-container">
-    <img src="/images/merb.jpg">
-    <!-- <h1>Mongrel + Erb</h1> -->
-    <h2>pocket rocket web framework</h2>
-    <hr />
-  </div>
-
-  <div id="left-container">
-    <h3>Exception:</h3>
-    <p><%= request.exceptions.first.message %></p>
-  </div>
-
-  <div id="main-container">
-    <h3>Why am I seeing this page?</h3>
-    <p>
-      An unexpected "client error" has occurred.  That means something in your request 
-      was not allowed, but the server does not have any more specific information.
-    </p> 
-    
-    <h3>Where can I find help?</h3>
-    <p>If you have any questions or if you can't figure something out, please take a
-      look at our <a href="http://merb.devjavu.com/"> project development page</a> or,
-      feel free to come chat at irc.freenode.net, channel #merb.</p>
-
-    <h3>How do I edit this page?</h3>
-    <p>You can change what people see when this happens byy editing <tt>app/views/exceptions/not_found.html.erb</tt>.</p> 
-  
-  </div>
-
-  <div id="footer-container">
-    <hr />
-    <div class="left"></div>
-    <div class="right">© 2008 the merb dev team</div>
-    <p> </p>
-  </div>
-</div>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/internal_server_error.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/internal_server_error.html.erb
deleted file mode 100644
index 829a8af..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/internal_server_error.html.erb
+++ /dev/null
@@ -1,216 +0,0 @@
-<html>
-<head>
-	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
-	<title><%= @exception_name %></title>
-	<style type="text/css" media="screen">
-		body {
-			font-family:arial;
-			font-size:11px;
-		}
-		h1 {
-			font-size:48px;
-			letter-spacing:-4px;
-			margin:0;
-			line-height:36px;
-			color:#333;
-		}
-			h1 sup {
-				font-size: 0.5em;
-			}
-			h1 sup.error_500, h1 sup.error_400 {
-				color:#990E05;
-			}
-			h1 sup.error_100, h1 sup.error_200 {
-				color:#00BF10;
-			}
-			h1 sup.error_300 {
-				/* pretty sure you cant 'see' status 300 
-				errors but if you could I think they 
-				would be blue */
-				color:#1B2099;
-			}
-		h2 {
-			font-size:36px;
-			letter-spacing:-3px;
-			margin:0;
-			line-height:28px;
-			color:#444;
-		}
-		a, a:visited {
-			color:#00BF10;
-		}
-		.internalError {
-			width:800px;
-			margin:50px auto;
-		}
-		.header {
-			border-bottom:10px solid #333;
-			margin-bottom:1px;
-			background-image: url("data:image/gif;base64,R0lGODlhAwADAIAAAP///8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7");
-			padding:20px;
-		}
-		table.trace {
-			width:100%;
-			font-family:courier, monospace;
-			letter-spacing:-1px;
-			border-collapse: collapse;
-			border-spacing:0;
-		}
-		table.trace tr td{
-			padding:0;
-			height:26px;
-			font-size:13px;
-			vertical-align:middle;
-		}
-		table.trace tr.file{
-			border-top:2px solid #fff;
-			background-color:#F3F3F3;
-		}
-		table.trace tr.source {
-			background-color:#F8F8F8;
-			display:none;
-		}
-		table.trace .open tr.source {
-			display:table-row;
-		}
-			table.trace tr.file td.expand {
-				width:23px;
-				background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAIAAABvSEP3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqMVL+TwUAYxaRIOlEhlZHGDAUzzOQ61+AqXMV1lJSU7q/QRqm8KFUcJTNn5qJkaPyoKKVz7y4mF8na5Kt29tt9+/Z97/u81+vVQ4r9frdarS6Xi7ETDIZisRjxMGPfmk4niNPpZE+xLAugbPaZ53nzvtfMBe/3+/3dbuehBrAKhZdUKkVAWa9Xsiybv0CPZDJZLr/qa5/BwgwRjYqOKIvFYjQa/aNommZh0Ww2K5UqzwfoQOPxaLPZ3FAmk0+7lplMpt1u53J5OpBOR0eZEE9wHJfP5zud93g88QhluwWbjW+5VOmKBgKBer3eaDTDYeGBQF8+x7rqIYoiPgixWJazpA6HA+MSxRArkUgMh0M409g8Ho8+9wYxxCqVSq1W26EDHGM2m4HOHQrEc38f/Yn7cLmlIRhBENzcx8cVRZnPZ/YUep2BWkjTIfA+PKVpZAXR5QxsjiqCKvGEqqp443w+0dvy17swqD0HB3S73V5PpkNg1qBqt8kwGCjmPkinM0QJbIoEa7U6UG6ToVgs4V9G2g0ESoP5Aoi7KYX5oCgf8IKbkvn9/mr1LRQKESamzgJy0g0tSZIuB3nuGqRU9Vv9C4sKkUhEkp4soxvxI8AAhWrrtXa3X8EAAAAASUVORK5CYII=);
-				background-position:top left;
-				background-repeat:no-repeat;
-			}
-			table.trace .open tr.file td.expand {
-				width:19px;
-				background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXZJREFUeNrslK1ywkAUhcMOBomEOiSdqLxEBJX0NaijOsjyHGGmCGyQQYaiiiw4gktkcOmZbpsuuzQ/M5XnqJ2d3S/n3nM3rTzPLUP7/Tt0+pLcGQwG3W53OLyHzPMtjYL7q9UqSRLrD4E1Gj1orCvKYuFHUWTVkOM44/HjDcp8/lL4r6NerzeZPMm1KFw0QkDn83m5fP2lHA4fNQvRtNvtjsfDd0WzmSfb2e/fdTqdOvdh/HLJZLOn0+d2HJ+KRGzbdl23EpFlmed5cp2maRzHQq1lvQ5KMi6EUZBGfup6E1pTfd+vrGW7jbQ2C9hTt9BpqNyIWaAwAy6xg2eBz5iRC/NomiZhGN5sqmnkauo0BUGgVQoBjQ80oCACgNQdZHfTYBkF2mxCtWWAqunWpahxIDUt3QYUxIFQpJHyIWpXjinabKbbwItMHT+NyjchrP8QKaSQQgoppJBCCimkkEIKKaSQQgoppJBCCimkkEIKKaSo+hRgAEFD17X08O2NAAAAAElFTkSuQmCC);
-				background-position:top left;
-				background-repeat:no-repeat;				
-			}
-			table.trace tr.source td.collapse {
-				width:19px;
-				background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVxJREFUeNrs0zFygkAUBmBlUkgJHdABlQwVkVJKKUxBYWbkALTxMJwhltyDFkss03IF8pudIcwaDaDl/6pd2P327b7d+eHwMXs4lNkzggoVKlSoUKFChQoVKlSoUKFChQoVKlSoUKFChQqVEYqm6ft9+qiSJEkYho7jTlcw2fd9NOI4nq4gEdFwXXe1Cqco63VkWVbXRTqLhTpOwQRpF7quR1E0TgGhqvLKUFCyoQqG/rks3O6kZKW/eRFpevOCoGTXVTcMQ5EyxyDEkML1c5RzuZOICIyXqn7JBVez6282MWrx731HOv2qB8Hri2lamNk0DfpVVdV1Peodappmmua8bdvzuc7zfNprzrLMth1FnGh/X8MjCAIQv/cFz/+65PcDh7rbvYv2ZUfdj+PxsyzLgVl0hKwgTqeqKApx2LeOc7t98zyv/1FWOgvx9RPii23bmL9cetJ8Ed8CDAC6aFW8bCzFhwAAAABJRU5ErkJggg==);
-				background-position:bottom left;
-				background-repeat:no-repeat;	
-				background-color:#6F706F;			
-			}
-			table.trace tr td.path {
-				padding-left:10px;
-			}
-			table.trace tr td.code {
-				padding-left:35px;
-				white-space: pre;
-				line-height:9px;
-				padding-bottom:10px;				
-			}
-				table.trace tr td.code em {
-					font-weight:bold;
-					color:#00BF10;
-				}
-				table.trace tr td.code a {
-				  width: 20px;
-				  float: left;
-				}
-				table.trace tr td.code .more {
-					color:#666;
-				}
-			table.trace tr td.line {
-				width:30px;
-				text-align:right;
-				padding-right:4px;
-			}
-		.footer {
-			margin-top:5px;
-			font-size:11px;
-			color:#444;
-			text-align:right;
-		}
-	</style>
-</head>
-<body>
-	<div class="internalError">
-		
-		<div class="header">
-			<h1><%= @exception_name %> <sup class="error_<%= @exception.class.status %>"><%= @exception.class.status %></sup></h1>
-			<% if show_details = ::Merb::Config[:exception_details] -%>
-				<h2><%= @exception.message %></h2>
-			<% else -%>
-				<h2>Sorry about that...</h2>
-			<% end -%>
-			<h3>Parameters</h3>
-			<ul>
-			<% params[:original_params].each do |param, value| %>
-				<li><strong><%= param %>:</strong> <%= value.inspect %></li>
-			<% end %>
-			<%= "<li>None</li>" if params[:original_params].empty? %>
-			</ul>
-			
-			<h3>Session</h3>
-			<ul>
-			<% params[:original_session].each do |param, value| %>
-				<li><strong><%= param %>:</strong> <%= value.inspect %></li>
-			<% end %>
-			<%= "<li>None</li>" if params[:original_session].empty? %>			
-			</ul>
-			
-			<h3>Cookies</h3>
-			<ul>
-			<% params[:original_cookies].each do |param, value| %>
-				<li><strong><%= param %>:</strong> <%= value.inspect %></li>
-			<% end %>
-			<%= "<li>None</li>" if params[:original_cookies].empty? %>			
-			</ul>			
-		</div>
-		
-	<% if show_details %>
-		<table class="trace">
-			<% @exception.backtrace.each_with_index do |line, index| %>
-				<tbody class="close">
-					<tr class="file">
-						<td class="expand">
-						</td>
-						<td class="path">
-							<%= (line.match(/^([^:]+)/)[1] rescue 'unknown').sub(/\/((opt|usr)\/local\/lib\/(ruby\/)?(gems\/)?(1.8\/)?(gems\/)?|.+\/app\/)/, '') %>
-							<% unless line.match(/\.erb:/) %>
-                in "<strong><%= line.match(/:in `(.+)'$/)[1] rescue '?' %></strong>"
-              <% else %>
-                (<strong>ERB Template</strong>)
-              <% end %>
-						</td>
-						<td class="line">
-							<a href="txmt://open?url=file://<%=file = (line.match(/^([^:]+)/)[1] rescue 'unknown')%>&line=<%= lineno = line.match(/:([0-9]+):/)[1] rescue '?' %>"><%=lineno%></a> 
-						</td> 
-					</tr>
-					<tr class="source">
-						<td class="collapse">
-						</td>
-						<td class="code" colspan="2"><% (__caller_lines__(file, lineno, 5) rescue []).each do |llineno, lcode, lcurrent| %>
-<a href="txmt://open?url=file://<%=file%>&line=<%=llineno%>"><%= llineno %></a><%='<em>' if llineno==lineno.to_i %><%= lcode.size > 90 ? Erubis::XmlHelper.html_escape(lcode[0..90])+'<span class="more">......</span>' : Erubis::XmlHelper.html_escape(lcode) %><%='</em>' if llineno==lineno.to_i %>
-<% end %>
-
-</td>
-					</tr>
-				</tbody>
-			<% end %>
-		</table>
-		<script type="text/javascript" charset="utf-8">
-			// swop the open & closed classes
-			els = document.getElementsByTagName('td');
-			for(i=0; i<els.length; i++){
-				if(els[i].className=='expand' || els[i].className=='collapse'){
-					els[i].onclick = function(e){
-						tbody = this.parentNode.parentNode;
-						if(tbody.className=='open'){
-							tbody.className='closed';
-						}else{
-							tbody.className='open';
-						}
-					}
-				}
-			}
-		</script>
-	<% end %>
-	<div class="footer">
-		lots of love, from <a href="#">merb</a>
-	</div>
-	</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/not_acceptable.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/not_acceptable.html.erb
deleted file mode 100644
index ef65750..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/not_acceptable.html.erb
+++ /dev/null
@@ -1,38 +0,0 @@
-<div id="container">
-  <div id="header-container">
-    <img src="/images/merb.jpg">
-    <!-- <h1>Mongrel + Erb</h1> -->
-    <h2>pocket rocket web framework</h2>
-    <hr />
-  </div>
-
-  <div id="left-container">
-    <h3>Exception:</h3>
-    <p><%= request.exceptions.first.message %></p>
-  </div>
-
-  <div id="main-container">
-    <h3>Why am I seeing this page?</h3>
-    <p>Merb couldn't find an appropriate content_type to return,
-      based on what you said was available via provides() and
-      what the client requested.  For more information, visit
-      http://merbivore.com/fixing_406_issues
-    </p> 
-    
-    <h3>Where can I find help?</h3>
-    <p>If you have any questions or if you can't figure something out, please take a
-      look at our <a href="http://merb.devjavu.com/"> project development page</a> or,
-      feel free to come chat at irc.freenode.net, channel #merb.</p>
-
-    <h3>How do I edit this page?</h3>
-    <p>You can change what people see when this happens by editing <tt>app/views/exceptions/not_found.html.erb</tt>.</p> 
-  
-  </div>
-
-  <div id="footer-container">
-    <hr />
-    <div class="left"></div>
-    <div class="right">© 2008 the merb dev team</div>
-    <p> </p>
-  </div>
-</div>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/not_found.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/not_found.html.erb
deleted file mode 100644
index c73ffe8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/exeptions/not_found.html.erb
+++ /dev/null
@@ -1,40 +0,0 @@
-<div id="container">
-  <div id="header-container">
-    <img src="/images/merb.jpg">
-    <!-- <h1>Mongrel + Erb</h1> -->
-    <h2>pocket rocket web framework</h2>
-    <hr />
-  </div>
-
-  <div id="left-container">
-    <h3>Exception:</h3>
-    <p><%= request.exceptions.first.message %></p>
-  </div>
-
-  <div id="main-container">
-    <h3>Welcome to Merb!</h3>
-    <p>Merb is a light-weight MVC framework written in Ruby.  We hope you enjoy it.</p>
-    
-    <h3>Where can I find help?</h3>
-    <p>If you have any questions or if you can't figure something out, please take a
-      look at our <a href="http://merb.devjavu.com/"> project development page</a> or,
-      feel free to come chat at irc.freenode.net, channel #merb.</p>
-
-    <h3>How do I edit this page?</h3>
-    <p>You're seeing this page because you need to edit the following files:
-      <ul>
-        <li>config/merb.yml <strong><em>(optional)</em></strong></li>
-        <li>config/router.rb <strong><em>(recommended)</em></strong></li>
-        <li>app/views/exceptions/not_found.html.erb <strong><em>(recommended)</em></strong></li>
-        <li>app/views/layout/application.html.erb <strong><em>(change this layout)</em></strong></li>
-      </ul>
-    </p>
-  </div>
-
-  <div id="footer-container">
-    <hr />
-    <div class="left"></div>
-    <div class="right">© 2008 the merb dev team</div>
-    <p> </p>
-  </div>
-</div>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/basic.html.erb
deleted file mode 100644
index a616ec4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= fields_for(:obj) do %>
-  <%= text_field(:foo) %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/midstream.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/midstream.html.erb
deleted file mode 100644
index ce021b5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/midstream.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
-<%= form_for @obj do %>
-  <%= text_field(:foo) %>
-  <%= fields_for @obj2 do %>
-    <%= text_field(:foo) %>
-  <% end =%>
-  <%= text_field(:foo, :extra => "true") %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/nil.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/nil.html.erb
deleted file mode 100644
index 0a5263a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fields_for_specs/nil.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= fields_for @obj, nil do %>
-  <%= text_field :foo %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fieldset_specs/legend.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fieldset_specs/legend.html.erb
deleted file mode 100644
index 4183675..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/fieldset_specs/legend.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= fieldset :legend => 'TEST' do %>
-CONTENT
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/disabled.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/disabled.html.erb
deleted file mode 100644
index 0810beb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/disabled.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= file_field :disabled => true %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/makes_multipart.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/makes_multipart.html.erb
deleted file mode 100644
index 4f07478..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/makes_multipart.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form :action => '/foo' do %>
-  <%= file_field :name => 'bar' %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/with_label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/with_label.html.erb
deleted file mode 100644
index eff60cf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/with_label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= file_field :label => 'LABEL' %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/with_values.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/with_values.html.erb
deleted file mode 100644
index f052eb9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/file_field_specs/with_values.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= file_field :name => 'foo', :value => 'bar' %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/foo/bar.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/foo/bar.html.erb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_for_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_for_specs/basic.html.erb
deleted file mode 100644
index 4ee5601..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_for_specs/basic.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for(:obj) do %>
-Hello
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/create_a_form.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/create_a_form.html.erb
deleted file mode 100644
index da1efb1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/create_a_form.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form :action => 'foo', :method => 'post' do %>
-Hello
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/create_a_multipart_form.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/create_a_multipart_form.html.erb
deleted file mode 100644
index bfc87db..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/create_a_multipart_form.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form :action => 'foo', :multipart => true do %>
-CONTENT
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/fake_delete_if_set.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/fake_delete_if_set.html.erb
deleted file mode 100644
index cfd9961..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/fake_delete_if_set.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form :action => '/', :method => :delete do %>
-CONTENT
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/fake_put_if_set.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/fake_put_if_set.html.erb
deleted file mode 100644
index 41e9981..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/fake_put_if_set.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form :action => '/', :method => :put do %>
-CONTENT
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/get_if_set.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/get_if_set.html.erb
deleted file mode 100644
index e99a5fa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/get_if_set.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form :action => '/', :method => :get do %>
-CONTENT
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/post_by_default.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/post_by_default.html.erb
deleted file mode 100644
index 8f4b7ae..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/post_by_default.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form :action => '/' do %>
-CONTENT
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/resourceful_form.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/resourceful_form.html.erb
deleted file mode 100644
index fac9183..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/form_specs/resourceful_form.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= form_for @obj, :builder => Merb::Helpers::Form::Builder::ResourcefulFormWithErrors do %>
-<%= text_field :foo %>
-<% end =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/basic.html.erb
deleted file mode 100644
index 8146f9e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/basic.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= hidden_field(:name => "foo", :value => "bar") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/disabled.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/disabled.html.erb
deleted file mode 100644
index 0d0f75c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/disabled.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= hidden_field(:disabled => true) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/label.html.erb
deleted file mode 100644
index a39cfa8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/hidden_field_specs/label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= hidden_field(:label => "LABEL") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/label_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/label_specs/basic.html.erb
deleted file mode 100644
index 64d1267..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/label_specs/basic.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= label "First Name", :id => "user_first_name" %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/layout/application.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/layout/application.html.erb
deleted file mode 100644
index d424057..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/layout/application.html.erb
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
-  <head>
-    <title>Fresh Merb App</title>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <link rel="stylesheet" href="/stylesheets/master.css" type="text/css" media="screen" charset="utf-8"/>
-  </head>
-  <body>
-    <%= catch_content :for_layout %>
-  </body>
-</html>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/minutes_to_hours.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/minutes_to_hours.html.erb
deleted file mode 100644
index bb56c53..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/minutes_to_hours.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= 315.minutes_to_hours %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/to_concurrency_default.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/to_concurrency_default.html.erb
deleted file mode 100644
index e7c6bdd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/to_concurrency_default.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= 1234567890.50.to_currency %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/two_digits.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/two_digits.html.erb
deleted file mode 100644
index ba9e06d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/numeric_ext_specs/two_digits.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= 7.two_digits %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/array.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/array.html.erb
deleted file mode 100644
index b392dcd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/array.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%=  select(:collection => %w(one two three))  %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/clean.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/clean.html.erb
deleted file mode 100644
index 754c73a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/clean.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select(:collection => [['orange','Orange'], ['banana','Banana']], :selected => 'banana') %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/collection.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/collection.html.erb
deleted file mode 100644
index 714baaf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/collection.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select :collection => @collection %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/multiple_selects.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/multiple_selects.html.erb
deleted file mode 100644
index bb4980c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/multiple_selects.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select( :collection => [['minutes','Time'],['dollars','Money'],['grapes','Fruit']], :selected => ['minutes', 'dollars'] ) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/no_extra_attributes.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/no_extra_attributes.html.erb
deleted file mode 100644
index 8a6d400..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/no_extra_attributes.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select(:collection => [["rabbit", "Rabbit"]], :id => "my_id", :name => "my_name", :class => "classy") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/optgroups.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/optgroups.html.erb
deleted file mode 100644
index 3b0e5f9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/optgroups.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select :collection => { "Fruit" => [['orange','Orange'],['banana','Banana']], "Vegetables" => [['corn','Corn']]}, :selected => 'banana' %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/selected.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/selected.html.erb
deleted file mode 100644
index 2fd82f6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/selected.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select :collection => [['rabbit','Rabbit'],['chicken','Chicken']], :selected => 'rabbit' %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/with_blank.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/with_blank.html.erb
deleted file mode 100644
index bd91c7b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/with_blank.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select :collection => @collection, :include_blank => true %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/with_prompt.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/with_prompt.html.erb
deleted file mode 100644
index 69e5f33..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/option_tag_specs/with_prompt.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select :collection => [["foo", "Foo"]], :prompt => 'Choose' %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/password_field_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/password_field_specs/basic.html.erb
deleted file mode 100644
index 54877bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/password_field_specs/basic.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= password_field(:name => "foo", :value => "bar", :label => "LABEL") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/password_field_specs/disabled.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/password_field_specs/disabled.html.erb
deleted file mode 100644
index 6a6524f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/password_field_specs/disabled.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= password_field(:disabled => true) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/basic.html.erb
deleted file mode 100644
index 0e8cfc7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/basic.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= radio_button(:name => "foo", :value => "bar", :id => "baz") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/disabled.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/disabled.html.erb
deleted file mode 100644
index eb1da4d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/disabled.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= radio_button(:disabled => true) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/label.html.erb
deleted file mode 100644
index 0dd81ce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_button_specs/label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= radio_button(:name => "foo", :value => "bar", :label => "LABEL") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/attributes.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/attributes.html.erb
deleted file mode 100644
index fbd3657..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/attributes.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= radio_group(["foowee", "baree"], :class => "CLASS") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/basic.html.erb
deleted file mode 100644
index d1417e7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/basic.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= radio_group(["foowee", "baree"]) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/hash.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/hash.html.erb
deleted file mode 100644
index a3054f1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/hash.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= radio_group([{:value => 5, :label => "Five"}, {:value => 'bar', :label => 'Bar', :id => 'bar_id'}]) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/specific_attributes.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/specific_attributes.html.erb
deleted file mode 100644
index 6333c12..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/radio_group_specs/specific_attributes.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= radio_group(["foowee", {:value => "baree", :class => 'BAREE'}], :class => "CLASS") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_span_specs/date_span_on_same_day.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_span_specs/date_span_on_same_day.html.erb
deleted file mode 100644
index 6dfaeac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_span_specs/date_span_on_same_day.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= relative_date_span([Time.utc(2007, 11, 15), Time.utc(2007, 11, 15)]) %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_span_specs/date_span_on_same_day_on_different_year.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_span_specs/date_span_on_same_day_on_different_year.html.erb
deleted file mode 100644
index c9ba040..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_span_specs/date_span_on_same_day_on_different_year.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= relative_date_span([Time.utc(2006, 11, 15), Time.utc(2006, 11, 15)]) %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_date_with_year.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_date_with_year.html.erb
deleted file mode 100644
index 4490392..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_date_with_year.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= relative_date(Time.utc(2005, 11, 15)) %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_date_without_year.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_date_without_year.html.erb
deleted file mode 100644
index 055f631..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_date_without_year.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= relative_date(Time.utc(2007, 11, 15)) %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_today.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_today.html.erb
deleted file mode 100644
index 1e3d2e4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_today.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= relative_date(Time.now.utc) %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_tomorrow.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_tomorrow.html.erb
deleted file mode 100644
index cd8ce36..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_tomorrow.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= relative_date(1.day.from_now.utc) %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_yesterday.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_yesterday.html.erb
deleted file mode 100644
index af22c91..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/relative_date_specs/relative_yesterday.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= relative_date(1.day.ago.utc) %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/select_specs/blank.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/select_specs/blank.html.erb
deleted file mode 100644
index 0ee3e07..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/select_specs/blank.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select(:include_blank => true) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/select_specs/multiple.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/select_specs/multiple.html.erb
deleted file mode 100644
index aedaeb3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/select_specs/multiple.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= select( :name => 'foo', :multiple => true ) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/disabled_submit.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/disabled_submit.html.erb
deleted file mode 100644
index 51e9b42..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/disabled_submit.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= submit "Done", :disabled => true %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/submit_with_label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/submit_with_label.html.erb
deleted file mode 100644
index f79bfd6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/submit_with_label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= submit "Done", :label => "LABEL" %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/submit_with_values.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/submit_with_values.html.erb
deleted file mode 100644
index 3988f45..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/submit_specs/submit_with_values.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= submit "Done", :name => 'foo' %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/nested_tags.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/nested_tags.html.erb
deleted file mode 100644
index 9c2b1d4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/nested_tags.html.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-<%= tag :div, :class => "discography" do %>
-  <%= tag :ul, :class => "albums" do %>
-	  <%= tag :li, "Trust in Trance 2", :class => "first", :id => "tit" %>
-	<% end =%>
-<% end =%>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_attributes.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_attributes.html.erb
deleted file mode 100644
index fdf4edb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_attributes.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= tag :div, :class => "psy", :id => "bands", :invalid_attr => "at least in html" %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_content.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_content.html.erb
deleted file mode 100644
index a02edab..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_content.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= tag :div, @content %>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_content_in_the_block.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_content_in_the_block.html.erb
deleted file mode 100644
index 2b3f8ce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/tag_helper/tag_with_content_in_the_block.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= tag :div do %>
-"Astral Projection ~ Trust in Trance 1"
-<% end =%>
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/basic.html.erb
deleted file mode 100644
index be19db2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/basic.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= text_area("foo", :name => "foo") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/disabled.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/disabled.html.erb
deleted file mode 100644
index 0fea918..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/disabled.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= text_area("Woop Woop Woop!", :disabled => true) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/label.html.erb
deleted file mode 100644
index 1f8bacd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= text_area( "CONTENT", :name => "foo", :value => "bar", :label => "LABEL") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/nil.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/nil.html.erb
deleted file mode 100644
index 3b040a1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_area_specs/nil.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= text_area(nil, :name => "foo") =%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/basic.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/basic.html.erb
deleted file mode 100644
index 9fc3428..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/basic.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= text_field(:name => "foo", :value => "bar", :label => "LABEL") %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/class.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/class.html.erb
deleted file mode 100644
index c3c6030..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/class.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= text_field(:class => "awesome foobar") -%>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/disabled.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/disabled.html.erb
deleted file mode 100644
index 7f07817..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/disabled.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= text_field(:disabled => true) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/label.html.erb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/label.html.erb
deleted file mode 100644
index 3902cc4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/app/views/text_field_specs/label.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= text_field(:name => "foo", :value => "bar", :style => "width: 100px", :label => {:class => "cool", :title => "LABEL"}) %>
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/development.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/development.rb
deleted file mode 100644
index 01db9a0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/development.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Merb.logger.info("Loaded DEVELOPMENT Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_classes] = true
-  c[:reload_time] = 0.5
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/production.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/production.rb
deleted file mode 100644
index e6d99e6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/production.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-Merb.logger.info("Loaded PRODUCTION Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = false
-  c[:reload_classes] = false
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/test.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/test.rb
deleted file mode 100644
index 0ea51d1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/environments/test.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-Merb.logger.info("Loaded TEST Environment...")
-Merb::Config.use { |c|
-  c[:exception_details] = true
-  c[:reload_classes] = true
-  c[:reload_time] = 0.5
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/init.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/init.rb
deleted file mode 100644
index 458751b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/init.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-# Make the app's "gems" directory a place where gems are loaded from
-Gem.clear_paths
-Gem.path.unshift(Merb.root / "gems")
-
-# Make the app's "lib" directory a place where ruby files get "require"d from
-$LOAD_PATH.unshift(Merb.root / "lib")
-
-Merb::Config.use { |c|
-  c[:session_store]      = 'cookie'
-  c[:session_secret_key] = "2c24532b38b8c46d8acf1b5ed71bdd5426dadd9b"
-}
-
-### Merb doesn't come with database support by default.  You need
-### an ORM plugin.  Install one, and uncomment one of the following lines,
-### if you need a database.
-
-### Uncomment for DataMapper ORM
-# use_orm :datamapper
-
-### Uncomment for ActiveRecord ORM
-# use_orm :activerecord
-
-### Uncomment for Sequel ORM
-# use_orm :sequel
-
-### This defines which test framework the generators will use
-### rspec is turned on by default
-# use_test :test_unit
-# use_test :rspec
-
-### Add your other dependencies here
-
-# These are some examples of how you might specify dependencies.
-# 
-# dependencies "RedCloth", "merb_helpers"
-# OR
-# dependency "RedCloth", "> 3.0"
-# OR
-# dependencies "RedCloth" => "> 3.0", "ruby-aes-cext" => "= 1.0"
-dependency File.join(File.dirname(__FILE__),'..','..','..','lib','merb-helpers')
-
-Merb::BootLoader.after_app_loads do
-  ### Add dependencies here that must load after the application loads:
-
-  # dependency "magic_admin" # this gem uses the app's model classes
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/rack.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/rack.rb
deleted file mode 100644
index 494c687..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/rack.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# use PathPrefix Middleware if :path_prefix is set in Merb::Config
-if prefix = ::Merb::Config[:path_prefix]
-  use Merb::Rack::PathPrefix, prefix
-end
-
-# comment this out if you are running merb behind a load balancer
-# that serves static files
-use Merb::Rack::Static, Merb.dir_for(:public)
-
-# this is our main merb application
-run Merb::Rack::Application.new
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/router.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/router.rb
deleted file mode 100644
index dadd872..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/config/router.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# Merb::Router is the request routing mapper for the merb framework.
-#
-# You can route a specific URL to a controller / action pair:
-#
-#   r.match("/contact").
-#     to(:controller => "info", :action => "contact")
-#
-# You can define placeholder parts of the url with the :symbol notation. These
-# placeholders will be available in the params hash of your controllers. For example:
-#
-#   r.match("/books/:book_id/:action").
-#     to(:controller => "books")
-#   
-# Or, use placeholders in the "to" results for more complicated routing, e.g.:
-#
-#   r.match("/admin/:module/:controller/:action/:id").
-#     to(:controller => ":module/:controller")
-#
-# You can also use regular expressions, deferred routes, and many other options.
-# See merb/specs/merb/router.rb for a fairly complete usage sample.
-
-Merb.logger.info("Compiling routes...")
-Merb::Router.prepare do |r|
-  # RESTful routes
-  # r.resources :posts
-  resources :fake_models
-  resources :obj
-  resources :models
-
-  # This is the default route for /:controller/:action/:id
-  # This is fine for most cases.  If you're heavily using resource-based
-  # routes, you may want to comment/remove this line to prevent
-  # clients from calling your create or destroy actions with a GET
-  r.default_routes
-  
-  # Change this for your home page to be available at /
-  # r.match('/').to(:controller => 'whatever', :action =>'index')
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/images/merb.jpg b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/images/merb.jpg
deleted file mode 100644
index 4fe7ce7..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/images/merb.jpg and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/merb.fcgi b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/merb.fcgi
deleted file mode 100644
index f8218e6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/merb.fcgi
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env ruby
-
-argv = ARGV + %w[-a fcgi]
-Merb.start(argv)
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/stylesheets/master.css b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/stylesheets/master.css
deleted file mode 100644
index c4fa676..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/fixture/public/stylesheets/master.css
+++ /dev/null
@@ -1,119 +0,0 @@
-body {
-  font-family: Arial, Verdana, sans-serif;
-  font-size: 12px;
-  background-color: #fff;
-}
-* {
-  margin: 0px;
-  padding: 0px;
-  text-decoration: none;
-}
-html {
-  height: 100%;
-  margin-bottom: 1px;
-}
-#container {
-  width: 80%;
-  text-align: left;
-  background-color: #fff;
-  margin-right: auto;
-  margin-left: auto;
-}
-#header-container {
-  width: 100%;
-  padding-top: 15px;
-}
-#header-container h1, #header-container h2 {
-  margin-left: 6px;
-  margin-bottom: 6px;
-}
-.spacer {
-  width: 100%;
-  height: 15px;
-}
-hr {
-  border: 0px;
-  color: #ccc;
-  background-color: #cdcdcd;
-  height: 1px;
-  width: 100%;
-  text-align: left;
-}
-h1 {
-  font-size: 28px;
-  color: #c55;
-  background-color: #fff;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-}
-h2 {
-  font-size: 15px;
-  color: #999;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-  background-color: #fff;
-}
-h3 {
-  color: #4d9b12;
-  font-size: 15px;
-  text-align: left;
-  font-weight: 300;
-  padding: 5px;
-  margin-top: 5px;
-}
-
-#left-container {
-  float: left;
-  width: 250px;
-  background-color: #FFFFFF;
-  color: black;
-}
-
-#left-container h3 {
-  color: #c55;
-}
-
-#main-container {
-  margin: 5px 5px 5px 260px;
-  padding: 15px;
-  border-left: 1px solid silver;
-  min-height: 400px;
-}
-p {
-  color: #000;
-  background-color: #fff;
-  line-height: 20px;
-  padding: 5px;
-}
-a {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: none;
-}
-a:hover {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: underline;
-}
-#footer-container {
-  clear: both;
-  font-size: 12px;
-  font-family: Verdana, Arial, sans-serif;
-}
-.right {
-  float: right;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-.left {
-  float: left;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-#main-container ul {
-  margin-left: 3.0em;
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_config_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_config_spec.rb
deleted file mode 100644
index da0f6a5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_config_spec.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-FIXTURES_DIR = File.dirname(__FILE__) + '/fixtures'
-MERB_HELPERS_ROOT = File.dirname(__FILE__) + "/.."
-
-describe "loading configuration" do
-  
-  before :each do
-    unload_merb_helpers
-  end
-  
-  after :all do
-    reload_merb_helpers
-  end
-  
-  it "should not have any helper available now" do
-    unload_merb_helpers
-    defined?(Merb::Helpers).should be_nil    
-  end
-  
-  it "should load reload_merb_helpers" do
-    unload_merb_helpers
-    reload_merb_helpers
-    defined?(Merb::Helpers).should_not be_nil    
-  end
-  
-  it "should load all helpers by default" do
-    reload_merb_helpers
-    defined?(Merb::Helpers).should_not be_nil
-    defined?(Merb::Helpers::Form).should_not be_nil
-  end
-  
-  it "should load all helpers by default" do
-    Merb::Plugins.should_receive(:config).any_number_of_times.and_return({})
-    reload_merb_helpers
-    defined?(Merb::Helpers).should_not be_nil
-    defined?(Merb::Helpers::DateAndTime).should_not  be_nil
-    defined?(Merb::Helpers::Form)
-  end
-  
-  it "should only load the helpers specified in the config hash (if defined)" do
-    unload_merb_helpers
-    defined?(Merb::Helpers).should be_nil
-    defined?(Merb::Helpers::DateAndTime).should be_nil
-    Merb::Plugins.stub!(:config).and_return(:merb_helpers => {:include => "form_helpers"})
-    reload_merb_helpers
-    defined?(Merb::Helpers).should_not be_nil
-    defined?(Merb::Helpers::Form).should_not be_nil
-    defined?(Merb::Helpers::DateAndTime).should be_nil
-    
-    unload_merb_helpers
-    defined?(Merb::Helpers).should be_nil
-    defined?(Merb::Helpers::DateAndTime).should be_nil
-    Merb::Plugins.stub!(:config).and_return(:merb_helpers => {:include => ["form_helpers", "date_time_helpers"]})
-    reload_merb_helpers
-    defined?(Merb::Helpers).should_not be_nil
-    defined?(Merb::Helpers::Form).should_not be_nil
-    defined?(Merb::Helpers::DateAndTime).should_not be_nil
-  end
-  
-  it "should load all helpers if the include hash is empty" do
-    unload_merb_helpers
-    defined?(Merb::Helpers).should be_nil
-    defined?(Merb::Helpers::DateAndTime).should be_nil
-    Merb::Plugins.stub!(:config).and_return(:merb_helpers => {:include => ""})
-    reload_merb_helpers
-    defined?(Merb::Helpers).should_not be_nil
-    defined?(Merb::Helpers::Form).should_not be_nil
-    defined?(Merb::Helpers::DateAndTime).should_not be_nil
-  end
-  
-  it "should load helpers if the plugin conf is defined but the include pair is missing" do
-    unload_merb_helpers
-    defined?(Merb::Helpers).should be_nil
-    defined?(Merb::Helpers::DateAndTime).should be_nil
-    Merb::Plugins.stub!(:config).and_return(:merb_helpers => {})
-    reload_merb_helpers
-    defined?(Merb::Helpers).should_not be_nil
-    defined?(Merb::Helpers::Form).should_not be_nil
-    defined?(Merb::Helpers::DateAndTime).should_not be_nil
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_date_time_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_date_time_spec.rb
deleted file mode 100644
index 7514a52..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_date_time_spec.rb
+++ /dev/null
@@ -1,268 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "relative_date" do
-  include Merb::Helpers::DateAndTime
-
-  before :each do
-    Time.stub!(:now).and_return(Time.utc(2007, 6, 1, 11))
-    @controller = RelativeDateSpecs.new(Merb::Request.new({}))
-  end
-
-  it "Should show today" do
-    relative_date(Time.now.utc).should == "today"
-    result = @controller.render :relative_today
-    result.should == "today"
-  end
-
-  it "Should show yesterday" do
-    relative_date(1.day.ago.utc).should == 'yesterday'
-    result = @controller.render :relative_yesterday
-    result.should == "yesterday"
-  end
-
-  it "Should show tomorrow" do
-    relative_date(1.day.from_now.utc).should == 'tomorrow'
-    @controller.render(:relative_tomorrow).should == 'tomorrow'
-  end
-
-  it "Should show date with year" do
-    relative_date(Time.utc(2005, 11, 15)).should == 'Nov 15th, 2005'
-    @controller.render(:relative_date_with_year).should == 'Nov 15th, 2005'
-  end
-
-  it "Should show date" do
-    relative_date(Time.utc(2007, 11, 15)).should == 'Nov 15th'
-    @controller.render(:relative_date_without_year).should == 'Nov 15th'
-  end
-end
-
-describe "relative_date_span" do
-  include Merb::Helpers::DateAndTime
-
-  before :each do
-    Time.stub!(:now).and_return(Time.utc(2007, 6, 1, 11))
-    @controller = RelativeDateSpanSpecs.new(Merb::Request.new({}))
-  end
-
-  it "Should show date span on the same day" do
-    relative_date_span([Time.utc(2007, 11, 15), Time.utc(2007, 11, 15)]).should == 'Nov 15th'
-    @controller.render(:date_span_on_same_day).should == 'Nov 15th'
-  end
-
-  it "Should show date span on the same day on different year" do
-    relative_date_span([Time.utc(2006, 11, 15), Time.utc(2006, 11, 15)]).should == 'Nov 15th, 2006'
-    @controller.render(:date_span_on_same_day_on_different_year).should == 'Nov 15th, 2006'
-  end
-
-  it "Should show date span on the same month" do
-    relative_date_span([Time.utc(2007, 11, 15), Time.utc(2007, 11, 16)]).should == 'Nov 15th - 16th'
-    relative_date_span([Time.utc(2007, 11, 16), Time.utc(2007, 11, 15)]).should == 'Nov 15th - 16th'
-  end
-
-  it "Should show date span on the same month on different year" do
-    relative_date_span([Time.utc(2006, 11, 15), Time.utc(2006, 11, 16)]).should == 'Nov 15th - 16th, 2006'
-    relative_date_span([Time.utc(2006, 11, 16), Time.utc(2006, 11, 15)]).should == 'Nov 15th - 16th, 2006'
-  end
-
-  it "Should show date span on the different month" do
-    relative_date_span([Time.utc(2007, 11, 15), Time.utc(2007, 12, 16)]).should == 'Nov 15th - Dec 16th'
-    relative_date_span([Time.utc(2007, 12, 16), Time.utc(2007, 11, 15)]).should == 'Nov 15th - Dec 16th'
-  end
-
-  it "Should show date span on the different month on different year" do
-    relative_date_span([Time.utc(2006, 11, 15), Time.utc(2006, 12, 16)]).should == 'Nov 15th - Dec 16th, 2006'
-    relative_date_span([Time.utc(2006, 12, 16), Time.utc(2006, 11, 15)]).should == 'Nov 15th - Dec 16th, 2006'
-  end
-
-  it "Should show date span on the different year" do
-    relative_date_span([Time.utc(2006, 11, 15), Time.utc(2007, 12, 16)]).should == 'Nov 15th, 2006 - Dec 16th, 2007'
-    relative_date_span([Time.utc(2007, 12, 16), Time.utc(2006, 11, 15)]).should == 'Nov 15th, 2006 - Dec 16th, 2007'
-  end
-end
-
-describe "relative_time_span" do
-  include Merb::Helpers::DateAndTime
-
-  before :each do
-    Time.stub!(:now).and_return(Time.utc(2007, 6, 1, 11))
-  end
-
-  # Time, Single Date
-  it "Should show time span on the same day with same time" do
-    relative_time_span([Time.utc(2007, 11, 15, 17, 00, 00)]).should == '5:00 PM Nov 15th'
-  end
-
-  it "Should show time span on the same day with same time on different year" do
-    relative_time_span([Time.utc(2006, 11, 15, 17, 0), Time.utc(2006, 11, 15, 17, 0)]).should == '5:00 PM Nov 15th, 2006'
-  end
-
-  it "Should show time span on the same day with different times in same half of day" do
-    relative_time_span([Time.utc(2007, 11, 15, 10), Time.utc(2007, 11, 15, 11, 0)]).should == '10:00 - 11:00 AM Nov 15th'
-  end
-
-  it "Should show time span on the same day with different times in different half of day" do
-    relative_time_span([Time.utc(2007, 11, 15, 10, 0), Time.utc(2007, 11, 15, 14, 0)]).should == '10:00 AM - 2:00 PM Nov 15th'
-  end
-
-  it "Should show time span on the same day with different times in different half of day in different year" do
-    relative_time_span([Time.utc(2006, 11, 15, 10, 0), Time.utc(2006, 11, 15, 14, 0)]).should == '10:00 AM - 2:00 PM Nov 15th, 2006'
-  end
-
-  it "Should show time span on different days in same year" do
-    relative_time_span([Time.utc(2006, 11, 15, 10, 0), Time.utc(2006, 12, 16, 14, 0)]).should == '10:00 AM Nov 15th - 2:00 PM Dec 16th, 2006'
-  end
-
-  it "Should show time span on different days in different years" do
-    relative_time_span([Time.utc(2006, 11, 15, 10, 0), Time.utc(2007, 12, 16, 14, 0)]).should == '10:00 AM Nov 15th, 2006 - 2:00 PM Dec 16th, 2007'
-  end
-
-  it "Should show time span on different days in current year" do
-    relative_time_span([Time.utc(2007, 11, 15, 10, 0), Time.utc(2007, 12, 16, 14, 0)]).should == '10:00 AM Nov 15th - 2:00 PM Dec 16th'
-  end
-end
-
-describe "time_lost_in_words" do
-  include Merb::Helpers::DateAndTime
-
-  it "Should show seconds" do
-    time_lost_in_words(Time.now, Time.now, true).should == "less than 5 seconds"
-  end
-
-  it "Should not show seconds" do
-    time_lost_in_words(Time.now).should == "less than a minute"
-  end
-
-  it "Should do minutes" do
-    time_lost_in_words(2.minutes.ago).should == "2 minutes"
-  end
-
-  it "Should do hour" do
-    time_lost_in_words(50.minutes.ago).should == "about 1 hour"
-  end
-
-  it "Should do hours" do
-    time_lost_in_words(2.hours.ago).should == "about 2 hours"
-  end
-
-  it "Should do day" do
-    time_lost_in_words(1.day.ago).should == "1 day"
-  end
-
-  it "Should do days" do
-    time_lost_in_words(5.days.ago).should == "5 days"
-  end
-
-  it "Should do month" do
-    time_lost_in_words(1.month.ago).should == "about 1 month"
-  end
-
-  it "Should do months" do
-    time_lost_in_words(5.months.ago).should == "5 months"
-  end
-
-  it "Should do year" do
-    time_lost_in_words(1.2.years.ago).should == "about 1 year"
-  end
-
-  it "Should do years" do
-    time_lost_in_words(5.5.years.ago).should == "over 5 years"
-  end
-end
-
-describe "prettier_time" do
-  include Merb::Helpers::DateAndTime
-
-  # prettier time"
-  it "Should not show leading zero in hour" do
-    prettier_time(Time.utc(2007, 11, 15, 14, 0)).should == '2:00 PM'
-  end
-
-  it "Should convert to 12 hour time" do
-    prettier_time(Time.utc(2007, 11, 15, 2, 0)).should == '2:00 AM'
-  end
-
-  it "Should handle midnight correctly" do
-    prettier_time(Time.utc(2007, 11, 15, 0, 0)).should == '12:00 AM'
-  end
-end
-
-shared_examples_for "Date, DateTime, Time formatting" do
-
-  before(:each) do
-    Date.reset_formats
-  end
-
-  it "should list the available formats" do
-    Date.formats.should be_an_instance_of(Hash)
-    Date.formats.keys.length.should > 1
-  end
-
-  it "should support to be db formatted" do
-    @date.formatted(:db).should =~ /^2007-11-02 \d{2}:\d{2}:\d{2}$/
-  end
-
-  it "should support to be time formatted" do
-    @date.formatted(:time).should == "00:00"
-  end
-
-  it "should support to be short formatted" do
-    @date.formatted(:short).should == "02 Nov 00:00"
-  end
-
-  it "should support to be date formatted" do
-    @date.formatted(:date).should == "2007-11-02"
-  end
-
-  it "should support to be long formatted" do
-    @date.formatted(:long).should == "November 02, 2007 00:00"
-  end
-
-  it "should support a new date format" do
-    @date.formatted(:matt).should == @date.to_s
-    Date.add_format(:matt, "%H:%M:%S %Y-%m-%d")
-    @date.formatted(:matt).should == "00:00:00 2007-11-02"
-  end
-
-end
-
-
-describe "Date" do
-  before :each do
-    @date = Date.new(2007, 11, 02)
-  end
-
-  it "Should do to_time conversion and return a Time class" do
-    @date.is_a?(Date)
-    @date.to_time.is_a?(Time)
-  end
-
-  it "Should do to_time conversion to utc by default" do
-    @date.to_time.to_s.should == 'Fri Nov 02 00:00:00 UTC 2007'
-  end
-
-  it "Should do to_time conversion to utc when param :utc is given" do
-    @date.to_time(:utc).to_s.should == 'Fri Nov 02 00:00:00 UTC 2007'
-  end
-
-  it "Should do to_time conversion to local time when param :local is given" do
-    pending("Needs to have the call to figure out the local time stubbed so this test will work no matter what your local TZ is.")
-    @date.to_time(:local).to_s.should == 'Fri Nov 02 00:00:00 -0500 2007'
-  end
-
-  it "Should return itself when to_date is called" do
-    @date.to_date.should == @date
-  end
-
-  it_should_behave_like "Date, DateTime, Time formatting"
-
-end
-
-describe "DateTime" do
-
-  before(:each) do
-    @date = DateTime.new(2007, 11, 02)
-  end
-
-  it_should_behave_like "Date, DateTime, Time formatting"
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_form_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_form_spec.rb
deleted file mode 100644
index 6a06367..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_form_spec.rb
+++ /dev/null
@@ -1,1237 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-# Quick rundown of how these specs work
-# please read before hacking on this plugin
-# 
-# helpers must be tested through then entire stack
-# what that means is that each spec must 
-# send a request to a controller and render a template
-#
-# Start by creating a spec controller subclassing SpecController
-# which itself is a subclass of Merb::Controller
-# specs_controller.rb (available at spec/fixture/app/controllers/specs_controller.rb)
-# defines SpecController.
-# Create a new controller in the spec/fixture/app/controllers/ if you are adding a new helper
-#
-# To test your helper, start by initializing a controller
-# 
-#    @controller = CustomHelperSpecs.new(Merb::Request.new({}))
-#
-# Note that we are sending a real request to the controller, feel free to use the request as needed
-#
-# You might need to access real objects in your views
-# you can do that by setting them up in the controller
-#
-#    @obj = FakeModel.new # FaKeModel is defined in spec/fixture/models/first_generic_fake_model.rb check it out!
-#    @controller.instance_variable_set(:@obj, @obj)
-# 
-# To test a helper, you need to render a view:
-#
-#    result = @controller.render :view_name
-#
-# Of course, you need to create a view:
-#    spec/fixture/app/views/custom_helper_specs/view_name.html.erb
-# in the view, call the helper you want to test
-#
-# You can now test the helper in the view:
-#    result.should match_tag(:form, :method => "post")
-#
-
-
-Merb::Plugins.config[:helpers] = {
-  :default_builder => Merb::Helpers::Form::Builder::FormWithErrors
-}
-
-describe "error_messages_for" do
-
-  before :each do
-    @c = Application.new({})
-    @dm_obj = Object.new
-    @sq_obj = Object.new
-    @dm_errors = [["foo", "bar"],["baz","bat"]]
-    @sq_errors = Object.new
-    @sq_errors.stub!(:full_messages).and_return(["foo", "baz"])
-    @dm_obj.stub!(:errors).and_return(@dm_errors)
-    @dm_obj.stub!(:new_record?).and_return(false)
-    @sq_obj.stub!(:errors).and_return(@sq_errors)
-    @sq_obj.stub!(:new_record?).and_return(false)
-  end
-
-  it "should build default error messages for AR-like models" do
-    errs = @c.error_messages_for(@dm_obj)
-    errs.should include("<h2>Form submission failed because of 2 problems</h2>")
-    errs.should include("<li>foo bar</li>")
-    errs.should include("<li>baz bat</li>")
-  end
-
-  it "should build default error messages for Sequel-like models" do
-    errs = @c.error_messages_for(@sq_obj)
-    errs.should include("<h2>Form submission failed because of 2 problems</h2>")
-    errs.should include("<li>foo</li>")
-    errs.should include("<li>baz</li>")
-  end
-
-  # it "should build default error messages for symbol" do
-  #   errs = error_messages_for(:obj)
-  #   errs.should include("<h2>Form submittal failed because of 2 problems</h2>")
-  #   errs.should include("<li>foo bar</li>")
-  #   errs.should include("<li>baz bat</li>")
-  # end
-
-  it "should accept a custom HTML class" do
-    errs = @c.error_messages_for(@dm_obj, :error_class => "foo")
-    errs.should include("<div class='foo'>")
-  end
-  
-  it "should accept a custom header block" do
-    errs = @c.error_messages_for(@dm_obj, :header => "<h3>Failure: %s issue%s</h3>")
-    errs.should include("<h3>Failure: 2 issues</h3>")
-  end
-  
-#  it "should put the error messages inside a form if :before is false" do
-#    ret = @c.form_for @dm_obj do
-#      _buffer << error_messages
-#    end
-#    ret.should =~ /\A\s*<form.*<div class='error'>/    
-#  end
-
-end
-
-describe "form" do
-
-  before :each do
-    @c = FormSpecs.new(Merb::Request.new({}))
-  end
-
-  describe "when _default_builder is Merb::Helpers::Form::Builder::ResourcefulFormWithErrors" do
-
-    before(:each) do
-      @obj = FakeModel2.new
-      @c.instance_variable_set(:@obj, @obj)
-    end
-
-    it "should not explode when #form is called" do
-      r = @c.render :resourceful_form
-      pending
-      #r.should =~ /action="fake_model2\/#{@obj.id}"/
-    end
-  end
-
-
-  it "should use the post method by default" do
-    ret = @c.render(:post_by_default)
-    ret.should have_selector("form[method=post]")
-    ret.should include("CONTENT")
-  end
-
-  it "should use the get method if set" do
-    ret = @c.render(:get_if_set)
-    ret.should have_selector("form[method=get]")
-  end
-  
-  it "should fake out the put method if set" do
-    ret = @c.render(:fake_put_if_set)
-    ret.should have_selector("form[method=post]")
-    ret.should have_selector("input[type=hidden][name=_method][value=put]")
-  end
-  
-  it "should fake out the delete method if set" do
-    ret = @c.render(:fake_delete_if_set)
-    ret.should have_selector("form[method=post]")
-    ret.should have_selector("input[type=hidden][name=_method][value=delete]")
-  end
-  
-  # TODO: Why is this required?
-  # ---------------------------
-  # 
-  # it "should silently set method to post if an unsupported method is used" do
-  #     form_tag :method => :dodgy do
-  #       _buffer << "CONTENT"
-  #     end
-  #     _buffer.should match_tag(:form, :method => "post")
-  #     _buffer.should_not match_tag(:input, :type => "hidden", :name => "_method", :value => "dodgy")
-  # end
-  
-  it "should take create a form" do
-    ret = @c.render(:create_a_form)
-    ret.should have_selector("form[action=foo][method=post]")
-    ret.should include("Hello")
-  end
-  
-  it "should set a form to be multipart" do
-    ret = @c.render(:create_a_multipart_form)
-    ret.should have_selector("form[action=foo][method=post][enctype='multipart/form-data']")
-    ret.should include("CONTENT")
-  end
-end
-
-
-describe "form_for" do
-
-  before :each do
-    @c = FormForSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-  it "should wrap the contents in a form tag" do
-    form = @c.render :basic
-    form.should have_selector("form[method=post]")
-    form.should have_selector("input[type=hidden][value=put][name=_method]")
-  end
-
-  it "should set the method to post be default" do
-    new_fake_model = FakeModel2.new
-    @c.instance_variable_set(:@obj, new_fake_model)
-    form = @c.render :basic
-    form.should have_selector("form[method=post]")
-    form.should_not have_selector("input[type=hidden][name=_method]")
-  end
-
-  it "should support PUT if the object passed in is not a new_record? via a hidden field" do
-    form = @c.render :basic
-    form.should have_selector("form[method=post]")
-    form.should have_selector("input[type=hidden][value=put][name=_method]")
-  end
-
-end
-
-
-describe "fields_for" do  
-
-  before :each do
-    @c = FieldsForSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-
-  it "should dump the contents in the context of the object" do
-    r = @c.render :basic
-    r.should have_selector("input[type=text][value=foowee]")
-  end
-
-  it "should be able to modify the context midstream" do
-    @c.instance_variable_set(:@obj2, FakeModel2.new)
-    r = @c.render :midstream
-    r.should have_selector("input[type=text][value=foowee]")
-    r.should have_selector("input[name='fake_model2[foo]'][type=text][value=foowee2]")
-  end
-
-  it "should handle an explicit nil attribute" do
-    r = @c.render :nil
-    r.should have_selector("input[name='fake_model[foo]'][value=foowee][type=text]")
-  end
-
-  it "should pass context back to the old object after exiting block" do
-    @c.instance_variable_set(:@obj2, FakeModel2.new)
-    r = @c.render :midstream
-    r.should have_selector("input[id=fake_model_foo][name='fake_model[foo]'][type=text][extra=true]")
-  end
-end
-
-describe "text_field" do
-
-  before :each do
-    @c = TextFieldSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should return a basic text field based on the values passed in" do
-    r = @c.render :basic
-    r.should have_selector("input[type=text][name=foo][value=bar]")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    r = @c.render :basic
-    r.should match(/<label>LABEL<\/label>/)
-  end
-
-  it "should update an existing :class with a new class" do
-    r = @c.render :class
-    r.should == "<input type=\"text\" class=\"awesome foobar text\"/>"
-  end
-  
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled
-    r.should have_selector("input[type=text][disabled=disabled]")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in as a hash" do
-    r = @c.render :label
-    r.should match(/<label class="cool">LABEL<\/label>/)
-  end
-  
-end
-
-describe "bound_text_field" do
-
-  before :each do
-    @c = BoundTextFieldSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-  it "should take a string object and return a useful text control" do
-    r = @c.render :basic
-    r.should have_selector("input[type=text][name='fake_model[foo]'][value=foowee]")
-  end
-
-  it "should take additional attributes and use them" do
-    r = @c.render :basic
-    r.should have_selector("input[type=text][name='fake_model[foo]'][value=foowee][bar='7']")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    form = @c.render :basic
-    form.should match(/<label.*>LABEL<\/label><input/)
-    form.should_not have_selector("input[label=LABEL]")
-  end
-
-  it "should not errorify the field for a new object" do
-    r = @c.render :basic
-    r.should_not have_selector("input[type=text][name='fake_model[foo]'][class=error]")
-  end
-
-  it "should errorify a field for a model with errors" do
-    model = mock("model")
-    model.stub!(:new_record?).and_return(true)
-    model.stub!(:class).and_return("MyClass")
-    model.stub!(:foo).and_return("FOO")
-    errors = mock("errors")
-    errors.should_receive(:on).with(:foo).and_return(true)
-
-    model.stub!(:errors).and_return(errors)
-    @c.instance_variable_set(:@obj, model)
-    r = @c.render :basic
-    r.should have_selector("input[class='error text']")
-  end
-end
-
-describe "bound_radio_button" do
-  
-  before :each do
-    @c = BoundRadioButtonSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-  it "should take a string object and return a useful text control" do
-    r = @c.render :basic
-    r.should have_selector("input[type=radio][name='fake_model[foo]'][value=foowee]")
-  end
-
-  it "should take additional attributes and use them" do
-    r = @c.render :basic
-    r.should have_selector("input[type=radio][name='fake_model[foo]'][value=foowee][bar='7']")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    form = @c.render :basic
-    form.should have_selector("input + label:contains('LABEL')")
-    form.should_not have_selector("input[label]")
-  end
-
-  it "should not errorify the field for a new object" do
-    r = @c.render :basic
-    r.should_not have_selector("input[type=radio][name='fake_model[foo]'][class=error]")
-  end
-
-  it "should errorify a field for a model with errors" do
-    model = mock("model")
-    model.stub!(:new_record?).and_return(true)
-    model.stub!(:class).and_return("MyClass")
-    model.stub!(:foo).and_return("FOO")
-    errors = mock("errors")
-    errors.should_receive(:on).with(:foo).and_return(true)
-
-    model.stub!(:errors).and_return(errors)
-    @c.instance_variable_set(:@obj, model)
-    r = @c.render :basic
-    r.should have_selector("input[class='error radio']")
-  end
-end
-
-describe "password_field" do
-  
-  before :each do
-    @c = PasswordFieldSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should return a basic password field, but omit the value" do
-    r = @c.render :basic
-    r.should have_selector("input[type=password][name=foo]")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    r = @c.render :basic
-    r.should have_selector("label:contains('LABEL')")
-  end
-  
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled
-    r.should match_tag(:input, :type => "password", :disabled => "disabled")
-  end
-end
-
-describe "bound_password_field" do
-
-  before :each do
-    @c = BoundPasswordFieldSpecs.new(Merb::Request.new({}))
-    @obj = FakeModel.new
-    @c.instance_variable_set(:@obj, @obj)
-  end
-
-  it "should take a string object and return a useful password control, but omit the value" do
-    r = @c.render :basic
-    r.should match_tag(:input, :type => "password", :name => "fake_model[foo]")
-  end
-
-  it "should take additional attributes and use them" do
-    r = @c.render :basic
-    r.should match_tag(:input, :type => "password", :name => "fake_model[foo]", :bar => "7", :value => @obj.foo)
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    r = @c.render :basic
-    r.should match(/<label.*>LABEL<\/label><input/)
-    r.should_not match_tag(:input, :label => "LABEL")
-  end
-
-  it "should not errorify the field for a new object" do
-    r = @c.render :basic
-    r.should_not match_tag(:input, :class => "error")
-  end
-
-  it "should errorify a field for a model with errors" do
-    model = mock("model")
-    model.stub!(:new_record?).and_return(true)
-    model.stub!(:class).and_return("MyClass")
-    model.stub!(:foo).and_return("FOO")
-    errors = mock("errors")
-    errors.should_receive(:on).with(:foo).and_return(true)
-
-    model.stub!(:errors).and_return(errors)
-
-    @c.instance_variable_set(:@obj, model)
-    r = @c.render :basic
-    r.should match_tag(:input, :class => "error password")
-  end
-
-end
-
-describe "check_box" do
-
-  before :each do
-    @c = CheckBoxSpecs.new(Merb::Request.new({}))
-  end
-  
-  it "should return a basic checkbox based on the values passed in" do
-    r = @c.render :basic
-    r.should match_tag(:input, :class => "checkbox", :name => "foo", :checked => "checked")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    result = @c.render :label
-    result.should match(/<input.*><label>LABEL<\/label>/)
-    res = result.scan(/<[^>]*>/)
-    res[0].should_not match_tag(:input, :label => "LABEL")
-  end
-  
-  it 'should remove the checked="checked" attribute if :checked is false or nil' do
-    r = @c.render :unchecked
-    r.should_not   include('checked="')
-  end
-  
-  it 'should have the checked="checked" attribute if :checked => true is passed in' do
-    r = @c.render :basic
-    r.should include('checked="checked"')
-  end
-
-  it "should not be boolean by default" do
-    r = @c.render :basic
-    r.should match_tag(:input, :type => "checkbox", :name => "foo")
-  end
-
-  it "should add a hidden input if boolean" do
-    r = @c.render :boolean
-    r.should have_tag(:input, :type => "checkbox", :value => "1")
-    r.should have_tag(:input, :type => "hidden",   :value => "0")
-    r.should match(/<input.*?type="hidden"[^>]*>[^<]*<input.*?type="checkbox"[^>]*>/)
-    
-  end
-
-  it "should not allow a :value param if boolean" do
-    lambda { @c.render :raises_error_if_not_boolean }.
-      should raise_error(ArgumentError, /can't be used with a boolean checkbox/)
-  end
-
-  it "should not allow :boolean => false if :on and :off are specified" do
-    lambda { @c.render :raises_error_if_on_off_and_boolean_false }.
-      should raise_error(ArgumentError, /cannot be used/)
-  end
-
-  it "should be boolean if :on and :off are specified" do
-    html = @c.render :on_off_is_boolean
-    html.should have_tag(:input, :type => "checkbox", :value => "YES", :name => "foo")
-    html.should have_tag(:input, :type => "hidden",   :value => "NO",  :name => "foo")
-  end
-
-  it "should have both :on and :off specified or neither" do
-    lambda { @c.render :raise_unless_both_on_and_off }.should raise_error(ArgumentError, /must be specified/)
-    lambda { @c.render :raise_unless_both_on_and_off }.should raise_error(ArgumentError, /must be specified/)
-  end
-  
-  it "should convert :value to a string on a non-boolean checkbox" do
-    r = @c.render :to_string
-    r.should match_tag(:input, :value => "")
-    r.should match_tag(:input, :value => "false")
-    r.should match_tag(:input, :value => "0")
-    r.should match_tag(:input, :value => "0")
-    r.should match_tag(:input, :value => "1")
-    r.should match_tag(:input, :value => "1")
-    r.should match_tag(:input, :value => "true")
-  end
-  
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled
-    r.should match_tag(:input, :type => "checkbox", :disabled => "disabled")
-  end
-  
-  it "should be possible to call with just check_box" do
-    r = @c.render :simple
-    r.should match_tag(:input, :type => "checkbox", :class => "checkbox")
-  end
-end
-
-describe "bound_check_box" do
-
-  before :each do
-    @c = BoundCheckBoxSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-  it "should take a string and return a useful checkbox control" do
-    r = @c.render :basic  
-    r.should match_tag(:input, :type =>"checkbox", :name => "fake_model[baz]", :class => "checkbox", :value => "1", :checked => "checked", :id => "fake_model_baz")
-    r.should match_tag(:input, :type =>"hidden",   :name => "fake_model[baz]", :value => "0")
-  end
-
-  it "should raise an error if you try to use :value" do
-    lambda { @c.render(:raise_value_error) }.should raise_error(ArgumentError, /:value can't be used with a bound_check_box/)
-  end
-
-  it "should support models from datamapper" do
-    @c.instance_variable_set(:@obj, FakeDMModel.new)
-    r = @c.render :basic
-    r.should match_tag(:input,
-                                              :type    =>"checkbox",
-                                              :name    => "fake_dm_model[baz]",
-                                              :class   => "checkbox",
-                                              :value   => "1",
-                                              :checked => "checked",
-                                              :id      => "fake_dm_model_baz")
-    
-    r.should match_tag(:input, :type =>"hidden",   :name => "fake_dm_model[bat]", :value => "0")                                          
-    r.should match_tag(:input, :type =>"checkbox", :name => "fake_dm_model[bat]", :class => "checkbox", :value => "1")
-  end
-
-  it "should allow a user to set the :off value" do
-    r = @c.render :on_and_off
-    r.should match_tag(:input, :type =>"hidden",   :name => "fake_model[bat]", :value => "off")
-    r.should match_tag(:input, :type =>"checkbox", :name => "fake_model[bat]", :class => "checkbox", :value => "on")
-  end
-
-  it "should render controls with errors if their attribute contains an error" do
-    r = @c.render :errors  
-    r.should match_tag(:input, :type =>"checkbox", :name => "fake_model[bazbad]", :class => "error checkbox", :value => "1", :checked => "checked")
-    r.should match_tag(:input, :type =>"hidden",   :name => "fake_model[batbad]", :value => "0")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    form = @c.render :label
-    form.should match( /<input.*><label.*>LABEL<\/label>/ )
-    form.should_not match_tag(:input, :label => "LABEL")
-  end
-
-  it "should not errorify the field for a new object" do
-    r = @c.render :basic
-    r.should_not match_tag(:input, :type => "checkbox", :class => "error checkbox")
-  end
-
-  it "should errorify a field for a model with errors" do
-    model = mock("model")
-    model.stub!(:new_record?).and_return(true)
-    model.stub!(:class).and_return("MyClass")
-    model.stub!(:baz).and_return("BAZ")
-    model.stub!(:bat).and_return("BAT")
-    errors = mock("errors")
-    errors.should_receive(:on).with(:baz).and_return(true)
-    errors.should_receive(:on).with(:bat).and_return(true)
-
-    model.stub!(:errors).and_return(errors)
-
-    @c.instance_variable_set(:@obj, model)
-    r = @c.render :basic
-    r.should match_tag(:input, :type => "checkbox", :class => "error checkbox")
-  end
-  
-  it "should be boolean" do
-    r = @c.render :basic
-    r.should have_tag(:input, :type => "checkbox", :value => "1")
-    r.should have_tag(:input, :type => "hidden",   :value => "0")
-  end
-  
-  it "should be checked if the value of the model's attribute is equal to the value of :on" do
-    r = @c.render :checked
-    r.should match_tag(:input, :type =>"checkbox", :value => "foowee", :checked => "checked")
-    r.should match_tag(:input, :type =>"checkbox", :value => "YES")
-
-  end
-end
-
-describe "hidden_field" do
-  
-  before :each do
-    @c = HiddenFieldSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should return a basic checkbox based on the values passed in" do
-    r = @c.render :basic
-    r.should match_tag(:input, :type => "hidden", :name => "foo", :value => "bar")
-  end
-
-  it "should not render a label if the :label option is passed in" do
-    res = @c.render :label
-    res.should_not match(/<label>LABEL/)
-    res.should_not match_tag(:input, :label=> "LABEL")
-  end
-  
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled
-    r.should match_tag(:input, :type => "hidden", :disabled => "disabled")
-  end
-end
-
-describe "bound_hidden_field" do
-
-  before :each do
-    @c = BoundHiddenFieldSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-  it "should take a string and return a hidden field control" do
-    r = @c.render :basic
-    r.should match_tag(:input, :type =>"hidden", :name => "fake_model[foo]", :value => "foowee")
-  end
-
-  it "should render controls with errors if their attribute contains an error" do
-    r = @c.render :errors
-    r.should match_tag(:input, :type =>"hidden", :name => "fake_model[foobad]", :value => "foowee", :class => "error hidden")
-  end
-
-  it "should not render a label if the :label option is passed in" do
-    r = @c.render :label
-    r.should_not match(/<label>LABEL/)
-    r.should_not match_tag(:input, :label=> "LABEL")
-  end
-
-  it "should not errorify the field for a new object" do
-    r = @c.render :basic
-    r.should_not match_tag(:input, :type => "hidden", :class => "error")
-  end
-
-  it "should not errorify a field for a model with errors" do
-    model = mock("model")
-    model.stub!(:new_record?).and_return(true)
-    model.stub!(:class).and_return("MyClass")
-    model.stub!(:foo).and_return("FOO")
-    errors = mock("errors")
-    errors.should_receive(:on).with(:foo).and_return(true)
-
-    model.stub!(:errors).and_return(errors)
-
-    @c.instance_variable_set(:@model, model)
-    r = @c.render :hidden_error
-    r.should match_tag(:input, :type => "hidden", :name => "my_class[foo]", :class => "error hidden")
-  end
-
-end
-
-describe "radio_button" do
-  
-  before :each do
-    @c = RadioButtonSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should should return a basic radio button based on the values passed in" do
-    r = @c.render :basic
-    r.should match_tag(:input, :type => "radio", :name => "foo", :value => "bar", :id => "baz")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    result = @c.render :label
-    # result.should match(/<label.*>LABEL<\/label><input/)
-    # res = result.scan(/<[^>]*>/)
-    # res[2].should_not match_tag(:input, :label => "LABEL")
-    result.should match(/<input.*><label.*>LABEL<\/label>/)
-    res = result.scan(/<[^>]*>/)
-    res[0].should_not match_tag(:input, :label => "LABEL")
-  end
-
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled
-    r.should match_tag(:input, :type => "radio", :disabled => "disabled")
-  end
-end
-
-describe "radio_group" do
-  
-  before :each do
-    @c = RadioGroupSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should return a group of radio buttons" do
-    radio = @c.render :basic
-    radio = radio.scan(/<[^>]*>/)
-    radio[0].should match_tag(:input, :type => "radio", :value => "foowee")
-    radio[3].should match_tag(:input, :type => "radio", :value => "baree")
-  end
-
-  it "should provide an additional label tag for each option in array-based options" do
-    radio = @c.render :basic
-    radio.scan( /<input.*?><label.*?>(foowee|baree)<\/label>/ ).size.should == 2
-    radio = radio.scan(/<[^>]*>/)
-    radio[0].should_not match_tag(:input, :label => "LABEL")
-    radio[3].should_not match_tag(:input, :label => "LABEL")
-  end
-
-  it "should accept array of hashes as options" do
-    radio = @c.render :hash
-    radio.scan( /<input.*?><label.*?>(Five|Bar)<\/label>/ ).size.should == 2
-    radio.scan(/<[^>]*>/).size.should == 6
-    radio.should match_tag(:input, :value => 5)
-    radio.should match_tag(:label)
-    radio.should match_tag(:input, :value => 'bar', :id => 'bar_id')
-    radio.should match_tag(:label, :for => 'bar_id')
-  end
-
-  it "should apply attributes to each element" do
-    radio = @c.render :attributes
-    radio = radio.scan(/<[^>]*>/)
-    radio[0].should match_tag(:input, :type => "radio", :value => "foowee", :class => "CLASS radio")
-    radio[3].should match_tag(:input, :type => "radio", :value => "baree", :class => "CLASS radio")
-  end
-
-  it "should override universal attributes with specific ones" do
-    radio = @c.render :specific_attributes
-    radio = radio.scan(/<[^>]*>/)
-    radio[0].should match_tag(:input, :type => "radio", :value => "foowee", :class => "CLASS radio")
-    radio[3].should match_tag(:input, :type => "radio", :value => "baree", :class => "BAREE radio")
-  end
-end
-
-
-describe "bound_radio_group" do
-  
-  before do
-    @c = BoundRadioGroupSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-  it "should return a group of radio buttons" do
-    r = @c.render :basic
-    r.should match_tag(:input, :type => "radio", :name => "fake_model[foo]", :value => "foowee", :checked => "checked")
-    r.should match_tag(:input, :type => "radio", :name => "fake_model[foo]", :value => "baree")
-    r.should_not match_tag(:checked => "checked")
-  end
-
-  it "should provide an additional label tag for each option in array-based options" do
-    r = @c.render :basic
-    r.scan( /<input.*?><label.*?>(foowee|baree)<\/label>/ ).size.should == 2
-    radio = r.scan(/<[^>]*>/)[2..-2]
-    radio[0].should_not match_tag(:input, :label => "LABEL")
-    radio[3].should_not match_tag(:input, :label => "LABEL")  
-  end
-
-  it "should accept array of hashes as options" do
-    r = @c.render :hashes
-    r.scan( /<input.*?><label.*?>(Five|Bar)<\/label>/ ).size.should == 2
-    r.scan(/<[^>]*>/)[2..-2].size.should == 6
-    r.should match_tag(:input, :value => 5)
-    r.should match_tag(:label)
-    r.should match_tag(:input, :value => 'bar', :id => 'bar_id')
-    r.should match_tag(:label, :for => 'bar_id')
-  end
-
-  it "should provide autogenerated id for inputs" do
-    r = @c.render :mixed
-    r.should match_tag(:input, :id => 'fake_model_foo_bar')
-    r.should match_tag(:label, :for => 'fake_model_foo_bar')
-    r.should match_tag(:input, :id => 'fake_model_foo_bar')
-    r.should match_tag(:label, :for => 'fake_model_foo_bar')
-  end
-
-  it "should override autogenerated id for inputs with hash-given id" do
-    r = @c.render :override_id
-    r.should match_tag(:input, :id => 'bar_id')
-    r.should match_tag(:label, :for => 'bar_id')
-  end
-
-  it "should only have one element with the checked property" do
-    r = @c.render :basic
-    r.should match_tag(:input, :checked => "checked")
-    r.should_not match_tag(:input, :checked => "false")
-  end
-end
-
-
-describe "text_area" do
-  
-  before do
-    @c = TextAreaSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should should return a basic text area based on the values passed in" do
-    r = @c.render :basic
-    r.should match_tag(:textarea, :name => "foo")
-  end
-
-  it "should handle a nil content" do
-    r = @c.render :nil
-    r.should == "<textarea name=\"foo\"></textarea>"
-  end
-
-
-  # TODO: Why is this required?
-  # ---------------------------
-  # 
-  # it "should handle a nil attributes hash" do
-  #   text_area("CONTENT", nil).should == "<textarea>CONTENT</textarea>"
-  # end
-
-  it "should render a label when the label is passed in" do
-    result = @c.render :label
-    result.should match(/<label.*>LABEL<\/label><textarea/)
-    result.should_not match_tag(:textarea, :label => "LABEL")
-  end
-  
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled
-    r.should match_tag(:textarea, :disabled => "disabled")
-  end
-end
-
-describe "bound_text_area" do 
-
-  before do
-    @c = BoundTextAreaSpecs.new(Merb::Request.new({}))
-    @obj = FakeModel.new
-    @c.instance_variable_set(:@obj, @obj)
-  end
-
-  it "should provide :id attribute" do
-    r = @c.render :basic
-    r.should match_tag(:textarea, :id => 'fake_model_foo', :name => "fake_model[foo]")
-    r.should =~ />\s*#{@obj.foo}\s*</
-  end
-end
-
-describe "select" do
- 
-  before do
-    @c = SelectSpecs.new(Merb::Request.new({}))
-  end
-  
-  it "should provide a blank option if you :include_blank" do
-    r = @c.render :blank
-    r.should =~ /<option.*>\s*<\/option>/
-  end
-
-  it "should render the select tag with suffix '[]' to name when :multiple => true" do
-    r = @c.render :multiple
-    r.should match_tag( :select, :name => "foo[]" )
-  end
-end
-
-describe "bound_select" do
-
-  before do
-    @c = BoundSelectSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end 
-
-  it "should render the select tag with the correct id and name" do
-    r = @c.render :basic
-    r.should match_tag( :select, :id => "fake_model_foo", :name => "fake_model[foo]" )
-  end
-
-  it "should render the select tag with suffix '[]' to name when :multiple => true" do
-    r = @c.render :multiple
-    r.should match_tag( :select, :id => "fake_model_foo", :name => "fake_model[foo][]" )
-  end
-
-  it "should include a blank option" do
-    r = @c.render :blank
-    r.should match_tag(:option, :value => '')
-    r.should =~ /<option.*>\s*<\/option>/
-  end
-
-  it "should render a prompt option without a value" do
-    r = @c.render :prompt
-    r.should match_tag(:option, :value => '')
-    r.should =~ /<option.*>Choose<\/option>/
-  end
-
-  it "should render a select tag with options" do
-    r = @c.render :with_options
-    r.should match_tag( :select, :class => "class1 class2", :title=> "This is the title" )
-    r.should =~ /<select.*>\s*<\/select>/
-  end
-
-  it "should render a select tag with options and a blank option" do
-    r = @c.render :with_options_with_blank
-    r.should match_tag( :select, :title => "TITLE" )
-    r.should match_tag( :option, :value => '' )
-    r.should =~ /<option.*>\s*<\/option>/
-  end
-
-  # Not sure how this makes any sense
-  # ---------------------------------
-  #
-  # it "should render the text as the value if no text_method is specified" do
-  #   form_for @obj do
-  #     content = select( :foo, :collection => [FakeModel] )
-  #     content.should match_tag( :option, :value => "FakeModel" )
-  #   end
-  # end
-
-end
-
-describe "bound option tags" do
-  
-  before do
-    @c = BoundOptionTagSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-
-  it "should use text_method and value_method for tag generation" do
-    r = @c.render :text_and_value  
-    r.should match_tag( :option, :content => "foowee", :value => "7" )
-    r.should match_tag( :option, :content => "foowee2", :value => "barbar" ) 
-
-    # content = options_from_collection_for_select( [FakeModel.new, FakeModel2.new], :text_method => 'foo', :value_method => 'bar' )
-    # content.should match_tag( :option, :content => "foowee", :value => "7" )
-    # content.should match_tag( :option, :content => "foowee2", :value => "barbar" )
-  end
-
-  it "should render a hash of arrays as a grouped select box" do
-    model1 = FakeModel.new ; model1.make = "Ford"   ; model1.model = "Mustang"   ; model1.vin = '1'
-    model2 = FakeModel.new ; model2.make = "Ford"   ; model2.model = "Falcon"    ; model2.vin = '2'
-    model3 = FakeModel.new ; model3.make = "Holden" ; model3.model = "Commodore" ; model3.vin = '3'
-    @c.instance_variable_set(:@model1, model1)
-    @c.instance_variable_set(:@model2, model2)
-    @c.instance_variable_set(:@model3, model3)
-    @c.instance_variable_set(:@collection, [model1, model2, model3].inject({}) {|s,e| (s[e.make] ||= []) << e; s })
-    r = @c.render :grouped
-    # Blank actually defaults to ""
-    r.should =~ /<optgroup label=\"Ford\"><option/
-    r.should match_tag( :optgroup, :label => "Ford" )
-    r.should match_tag( :option, :selected => "selected", :value => "1", :content => "Mustang" )
-    r.should match_tag( :option, :value => "2", :content => "Falcon" )
-    r.should match_tag( :optgroup, :label => "Holden" )
-    r.should match_tag( :option, :value => "3", :content => "Commodore" )
-
-    # collection = [@model1, @model2, @model3].inject({}) {|s,e| (s[e.make] ||= []) << e; s }
-    # content = options_from_collection_for_select(collection, :text_method => 'model', :value_method => 'vin', :selected => '1')
-  end
-
-  it "should render a collection of nested value/content arrays" do
-    r = @c.render :nested
-    r.should match_tag(:select, :id => "fake_model_foo", :name => "fake_model[foo]")
-    r.should match_tag(:option, :value => "small",  :content => "Small")
-    r.should match_tag(:option, :value => "medium", :content => "Medium")
-    r.should match_tag(:option, :value => "large",  :content => "Large")
-  end
-
-  # Is this really worth the extra speed hit? I'm thinking not
-  # ----------------------------------------------------------
-  #
-  # it "should humanize and titlize keys in the label for the option group" do
-  #   collection = { :some_snake_case_key => [FakeModel.new] }
-  #   form_for @obj do
-  #     content = select( :foo, :collection => collection )
-  #     content.should match_tag( :optgroup, :label => "Some Snake Case Key" )
-  #   end
-  # end
-
-end
-
-require "hpricot"
-
-describe "option tags" do
-  
-  before do
-    @c = OptionTagSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@collection, [['rabbit','Rabbit'],['horse','Horse'],['bird','Bird']])
-  end
-
-  it "should provide an option tag for each item in the collection" do
-    r = @c.render :collection
-    doc = Hpricot( r )
-    (doc/"option").size.should == 3
-  end
-
-  it "should provide a blank option" do
-    r = @c.render :with_blank
-    r.should match_tag( :option, :value => '' )
-  end
-
-  it "should render the prompt option at the top" do
-    r = @c.render :with_prompt
-    #ontent = select( :collection => [["foo", "Foo"]], :prompt => 'Choose' )
-    r.should match(/<option[^>]*>Choose<\/option>[^<]*<option[^>]*>Foo<\/option>/)
-  end
-
-  it "should provide selected options by value" do
-    r = @c.render :selected
-    r.should match_tag( :option, :value => 'rabbit', :selected => 'selected', :content => 'Rabbit' )
-    r.should_not match_tag( :option, :value => 'chicken', :selected => nil, :content => 'Chicken' )
-  end
-
-  it "should handle arrays for selected when :multiple is true" do
-    r = @c.render :multiple_selects
-    r.should match_tag( :option, :value => 'minutes', :selected => 'selected', :content => 'Time' )
-    r.should match_tag( :option, :value => 'dollars', :selected => 'selected', :content => 'Money' )
-  end
-
-  it "should render a hash of options as optgroup" do
-    r = @c.render :optgroups
-    r.should match_tag( :optgroup, :label => 'Fruit' )
-    r.should match_tag( :optgroup, :label => 'Vegetables' )
-    r.should match_tag( :option, :value => 'banana', :selected => 'selected', :content => 'Banana' )
-  end
-
-  it "should accept an array of strings in :collection as the content/value of each option" do
-    r = @c.render :array
-    r.should match_tag(:option, :content => "one", :value => "one")
-    r.should match_tag(:option, :content => "two", :value => "two")
-  end
-
-  it "should only pass :selected and :value attrs to <option> tags" do
-    r = @c.render :no_extra_attributes
-    r = r.slice(/<option[^>]*>[^<]*<\/option>/)
-    r.should match_tag(:option, :value => "rabbit", :content => "Rabbit")
-    r.should_not match_tag(:option, :id => "my_id", :name => "my_name", :class => "classy")
-  end
-
-  it "should not pollute the <select> attributes with <option> attributes" do
-    r = @c.render :clean
-    r.should_not match_tag(:select, :value => "banana", :selected => "selected")
-  end
-end
-
-describe "fieldset" do
-
-  before :each do
-    @c = FieldsetSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should provide legend option" do
-    r = @c.render :legend
-    r.should have_selector("fieldset legend:contains('TEST')")
-  end
-
-end
-
-describe "label" do
-
-  before :each do
-    @c = LabelSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should render a label tag" do
-    r = @c.render :basic
-    r.should have_selector("label[for=user_first_name]:contains('First Name')")
-  end
-end
-
-describe "file_field" do
-
-  before :each do
-    @c = FileFieldSpecs.new(Merb::Request.new({}))
-  end
-
-  it "should return a basic file field based on the values passed in" do
-    r = @c.render :with_values
-    r.should have_selector("input[type=file][name=foo][value=bar]")
-  end
-
-  it "should wrap the field in a label if the :label option is passed to the file" do
-    r = @c.render :with_label
-    r.should have_selector("label:contains('LABEL') + input.file[type=file]")
-  end
-  
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled
-    r.should have_selector("input[type=file][disabled=disabled]")
-  end
-  
-  it "should make the surrounding form multipart" do
-    r = @c.render :makes_multipart
-    r.should have_selector("form[enctype='multipart/form-data']")
-  end
-end
-
-describe "bound_file_field" do
-
-  before :each do
-    @c = BoundFileFieldSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end
-
-  it "should take a string object and return a useful file control" do
-    r  = @c.render :takes_string
-    r.should have_selector("input[type=file][name='fake_model[foo]'][value=foowee]")
-  end
-
-  it "should take additional attributes and use them" do
-    r = @c.render :additional_attributes
-    r.should have_selector("input[type=file][name='fake_model[foo]'][value=foowee][bar='7']")
-  end
-
-  it "should wrap the file_field in a label if the :label option is passed in" do
-    r = @c.render :with_label
-    r.should have_selector("label:contains('LABEL')")
-    r.should_not have_selector("input[label=LABEL]")
-  end
-end
-
-describe "submit" do
-
-  before :each do
-    @c = SubmitSpecs.new(Merb::Request.new({}))
-  end  
-  
-  it "should return a basic submit input based on the values passed in" do
-    r = @c.render :submit_with_values
-    r.should have_selector("input[type=submit][name=foo][value=Done]")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    r = @c.render :submit_with_label
-    r.should have_selector("input[type=submit][name=submit][value=Done]")
-    r.should have_selector("label:contains('LABEL')")
-  end
-  
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled_submit
-    r.should have_selector("input[type=submit][value=Done][disabled=disabled]")
-  end  
-end
-
-describe "button" do
-
-  before :each do
-    @c = ButtonSpecs.new(Merb::Request.new({}))
-  end
-  
-  it "should return a button based on the values passed in" do
-    r = @c.render :button_with_values
-    r.should have_selector("button[type=button][name=foo][value=bar]:contains('Click Me')")
-  end
-
-  it "should provide an additional label tag if the :label option is passed in" do
-    r = @c.render :button_with_label
-    r.should have_selector("button[value=foo]")
-    r.should have_selector("label:contains('LABEL')")
-  end
-
-  it "should be disabled if :disabled => true is passed in" do
-    r = @c.render :disabled_button
-    r.should have_selector("button[disabled=true]")
-  end
-end
-
-
-class MyBuilder < Merb::Helpers::Form::Builder::Base
-  
-  def update_bound_controls(method, attrs, type)
-    super
-    attrs[:bound] = type
-  end
-
-  def update_unbound_controls(attrs, type)
-    super
-    attrs[:unbound] = type
-  end
-  
-end
-
-describe "custom builder" do
- 
-  before :each do
-    @c = CustomBuilderSpecs.new(Merb::Request.new({}))
-    @c.instance_variable_set(:@obj, FakeModel.new)
-  end 
-  
-  it "should let you override update_bound_controls" do
-    r = @c.render :everything
-    r.should =~ / bound="file"/
-    r.should =~ / bound="text"/
-    r.should =~ / bound="hidden"/
-    r.should =~ / bound="password"/
-    r.should =~ / bound="radio"/
-    r.should =~ / bound="text_area"/
-  end
-  
-  it "should let you override update_unbound_controls" do
-    r = @c.render :everything
-    r.should have_selector("button[unbound=button]")
-    r.should have_selector("input[unbound=submit]")
-    r.should have_selector("textarea[unbound=text_area]")
-  end
-end
-
-
-describe 'delete_button' do
-
-  before :each do
-    @controller = DeleteButtonSpecs.new(Merb::Request.new({}))
-    @controller.instance_variable_set(:@obj, FakeModel.new)
-  end
-  
-  it "should have a default submit button text" do
-    result = @controller.render :simple_delete # <%= delete_button @obj %>
-    result.should have_selector("input[type=submit][value=Delete]")
-  end
-
-  it 'should return a button inside of a form for the object' do
-    result = @controller.render :simple_delete # <%= delete_button @obj %>
-    result.should have_selector("form[action='/fake_models/fake_model'][method=post]")
-    result.should have_selector("input[type=hidden][value=DELETE][name=_method]")
-  end
-
-  it 'should allow you to modify the label' do
-    result = @controller.render :delete_with_label # <%= delete_button(@obj, "Delete moi!") %>
-    result.should have_selector("input[type=submit][value='Delete moi!']")
-  end
-  
-  it "should allow you to pass some extra params like a class" do
-    result = @controller.render :delete_with_extra_params
-    result.should have_selector("input.custom-class[type=submit][value=Delete]")
-  end
-  
-  it "should allow to pass an explicit url as a string" do
-    result = @controller.render :delete_with_explicit_url # <%= delete_button('/test/custom_url') %>
-    result.should have_selector("form[action='/test/custom_url'][method=post]")
-  end
-  
-end
-
-# describe "control_value" do
-#   
-# 
-#   it 'should escape [&"<>]' do
-#     @obj.vin = '&"<>'
-#     f = form_for :obj do
-#       control_value(:vin).should == '&"<>'
-#     end
-#   end
-# end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_tag_helper_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_tag_helper_spec.rb
deleted file mode 100644
index 3e8bb4c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_tag_helper_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-# Merb::Router.prepare do
-#   default_routes
-# end
-
-describe Merb::Helpers::Tag do
-  include Merb::Helpers::Tag
-  
-  describe "#tag" do
-    it 'generates <div>content</div> from tag :div, "content"' do
-      response = request "/tag_helper/tag_with_content"
-
-      response.should have_selector("div")
-      response.body.to_s.should include("Astral Projection ~ Dancing Galaxy")
-    end
-
-    it 'outputs content returned by the block when block is given'  do
-      response = request "/tag_helper/tag_with_content_in_the_block"
-
-      response.should have_selector("div")
-      response.body.should include("Astral Projection ~ Trust in Trance 1")
-    end
-
-    it 'generates tag attributes for all of keys of last Hash' do
-      response = request "/tag_helper/tag_with_attributes"
-
-      response.should have_selector("div.psy")
-      response.should have_selector("div#bands")
-      response.should have_selector("div[invalid_attr='at least in html']")
-    end    
-
-    it 'handles nesting of tags/blocks' do
-      response = request "/tag_helper/nested_tags"
-
-      response.should have_selector("div.discography ul.albums li.first")
-      response.should have_selector("#tit:contains('Trust in Trance 2')")
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_text_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_text_spec.rb
deleted file mode 100644
index ffb420d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/merb_helpers_text_spec.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "cycle" do
-  include Merb::Helpers::Text
-
-  it "do basic cycling" do
-    cycle("one", 2, "3").should == 'one'
-    cycle("one", 2, "3").should == '2'
-    cycle("one", 2, "3").should == '3'
-    cycle("one", 2, "3").should == 'one'
-    cycle("one", 2, "3").should == '2'
-    cycle("one", 2, "3").should == '3'
-  end
-
-  it "should reset with new values" do
-    cycle("even", "odd").should == 'even'
-    cycle("even", "odd").should == 'odd'
-    cycle("even", "odd").should == 'even'
-    cycle("even", "odd").should == 'odd'
-    cycle(1, 2, 3).should == '1'
-    cycle(1, 2, 3).should == '2'
-    cycle(1, 2, 3).should == '3'
-    cycle(1, 2, 3).should == '1'
-  end
-
-  it "should support named cycles" do
-    cycle(1, 2, 3, :name => "numbers").should == "1"
-    cycle("red", "blue", :name => "colors").should == "red"
-    cycle(1, 2, 3, :name => "numbers").should == "2"
-    cycle("red", "blue", :name => "colors").should == "blue"
-    cycle(1, 2, 3, :name => "numbers").should == "3"
-    cycle("red", "blue", :name => "colors").should == "red"
-  end
-
-  it "should use a named cycle called 'default' by default" do
-    cycle(1, 2, 3).should == "1"
-    cycle(1, 2, 3, :name => "default").should == "2"
-    cycle(1, 2, 3).should == "3"
-  end
-
-  it "should be able to be reset" do
-    cycle(1, 2, 3).should == "1"
-    cycle(1, 2, 3).should == "2"
-    reset_cycle
-    cycle(1, 2, 3).should == "1"
-  end
-
-  it "should be able to reset a named cycle" do
-    cycle(1, 2, 3, :name => "numbers").should == "1"
-    cycle("red", "blue", :name => "colors").should == "red"
-    reset_cycle("numbers")
-    cycle(1, 2, 3, :name => "numbers").should == "1"
-    cycle("red", "blue", :name => "colors").should == "blue"
-    cycle(1, 2, 3, :name => "numbers").should == "2"
-    cycle("red", "blue", :name => "colors").should == "red"
-  end
-
-  it "should work with things other than strings" do
-    class Red; def to_s; 'red'; end; end;
-    class Blue; def to_s; 'blue'; end; end;
-    red = Red.new
-    blue = Blue.new
-    cycle(red, blue).should == "red"
-    cycle(red, blue).should == "blue"
-    cycle(red, blue).should == "red"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/numeric_extlib_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/numeric_extlib_spec.rb
deleted file mode 100644
index dee10a1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/numeric_extlib_spec.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "Numeric helpers" do
-
-  before :each do
-    @controller = NumericExtSpecs.new(Merb::Request.new({}))
-  end
-  
-  describe "with_delimiter" do
-    
-    before(:each) do
-      @number = 12345678
-    end
-    
-    it "should use the default formatting for numbers" do
-      @number.with_delimiter.should == "12,345,678"
-      @number.with_delimiter.should == @number.with_delimiter(:us)
-    end
-    
-    it "should support passing another format" do
-      @number.with_delimiter(:fr).should == "12 345 678"
-    end
-    
-    it "should support passing overwriting options" do
-      @number.with_delimiter(:fr, :delimiter => ',').should == "12,345,678"
-      12345678.9.with_delimiter(:fr, :separator => ' et ').should == "12 345 678 et 9"
-    end
-  end
-
-
-  describe "with_precision" do
-     it "should use a default precision" do
-       111.2345.with_precision.should == "111.235"
-     end
-     
-     it "should support other precision formats" do
-        111.2345.with_precision(:uk).should == "111.235"
-      end
-      
-     it "should support overwriting precision options" do
-        111.2345.with_precision(:uk, :precision => 1).should == "111.2"
-        1234.567.with_precision(:us, :precision => 1, :separator => ',', :delimiter => '-').should == "1-234,6"
-     end
-   end
-   
-   
-   describe "to_concurrency" do
-     
-     before(:each) do
-       @number = 1234567890.50
-     end
-     
-     it "should use the US$ by default" do
-       @number.to_currency.should == "$1,234,567,890.50"
-       @number.to_currency.should == @number.to_currency(:us)
-       @number.to_currency.should == @number.to_currency(:default)
-       result = @controller.render :to_concurrency_default
-       result.should == "$1,234,567,890.50"
-     end
-     
-     it "should use the precision settings of the format" do
-       1234567890.506.to_currency(:us).should == "$1,234,567,890.51"
-     end
-     
-     it "should support other formats" do
-       @number.to_currency(:uk).should == "£1,234,567,890.50"
-       @number.to_currency(:fr).should == "1 234 567 890,50€"
-     end
-     
-     it "should support overwriting options" do
-       1234567890.506.to_currency(:us, :precision => 1).should == "$1,234,567,890.5"
-       1234567890.516.to_currency(:us, :unit => "€").should == "€1,234,567,890.52"
-       1234567890.506.to_currency(:us, :precision => 3, :unit => "€").should == "€1,234,567,890.506"
-       1234567890.506.to_currency(:aus, :unit => "$AUD", :format => '%n %u').should == "1,234,567,890.51 $AUD"
-     end
-     
-   end
-   
-   describe "Numeric::Transformer formats" do
-     
-     it "should be able to add a new format" do
-       Numeric::Transformer.default_format.should be_instance_of(Hash)
-     end
-     
-     it "should be able to change the default format" do
-       original_default_format = Numeric::Transformer.default_format
-       original_default_format[:currency][:unit].should == "$"
-       Numeric::Transformer.change_default_format(:fr)
-       Numeric::Transformer.default_format.should_not == original_default_format
-       Numeric::Transformer.default_format[:currency][:unit].should == "€"
-     end
-     
-     it "should be able to add a format" do
-       merb_format = {:merb => 
-                        {  :number => {      
-                           :precision => 3, 
-                           :delimiter => ' ', 
-                           :separator => ','
-                           },
-                           :currency => { 
-                             :unit => 'Merbollars',
-                             :format => '%n %u',
-                             :precision => 2 
-                           }
-                         }
-                      }
-       Numeric::Transformer.add_format(merb_format)
-       Numeric::Transformer.change_default_format(:merb)
-       12345.to_currency.should == "12 345,00 Merbollars"
-     end
-     
-   end
-   
-   describe "other misc numeric helpers" do
-     
-     describe "two_digits" do
-       it "should convert a numeric value in a 2 digit string (prepend with a zero if needed)" do
-         7.two_digits.should == "07"
-         result = @controller.render :two_digits
-         result.should == "07"
-       end
-    end
-    
-    describe "minutes_to_hours" do
-      it "should convert a number of minutes into an hour representation" do
-        result = @controller.render :minutes_to_hours
-        result.should == "05:15"
-      end
-      
-    end
-     
-   end
-  
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/ordinalize_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/ordinalize_spec.rb
deleted file mode 100644
index cb9485f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/ordinalize_spec.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "#strftime_ordinalized" do
-  
-  before(:all) do
-    @date = Date.parse('2008-5-3')
-    @time = Time.parse('2008-5-3 14:00')
-  end
-  
-  it "should ordinalize a date even without a locale passed" do
-    @date.strftime_ordinalized('%b %d, %Y').should == "May 3rd, 2008"
-  end
-  
-end
-
-describe "to_ordinalized_s" do
-
-  before(:each) do
-    @date = Date.parse('2008-5-3')
-    @time = Time.parse('2008-5-3 14:00')
-  end
-
-  it "should render a date using #to_s if no format is passed" do
-    @date.to_ordinalized_s.should == @date.to_s
-  end
-
-  it "should render a time using #to_s if no format is passed" do
-    @time.to_ordinalized_s.should == @time.to_s
-  end
-
-  it "should render a date or time using the db format" do
-    @date.to_ordinalized_s(:db).should == "2008-05-03 00:00:00"
-    @time.to_ordinalized_s(:db).should == "2008-05-03 14:00:00"
-  end
-
-  it "should render a date or time using the long format" do
-    @date.to_ordinalized_s(:long).should == "May 3rd, 2008 00:00"
-    @time.to_ordinalized_s(:long).should == "May 3rd, 2008 14:00"
-  end
-
-  it "should render a date or time using the time format" do
-    @date.to_ordinalized_s(:time).should == "00:00"
-    @time.to_ordinalized_s(:time).should == "14:00"
-  end
-
-  it "should render a date or a time using the short format" do
-    @date.to_ordinalized_s(:short).should == "3rd May 00:00"
-    @time.to_ordinalized_s(:short).should == "3rd May 14:00"
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/spec_helper.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/spec_helper.rb
deleted file mode 100644
index 36e3153..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/spec_helper.rb
+++ /dev/null
@@ -1,156 +0,0 @@
-require "rubygems"
-require "spec"
-require "merb-core"
-require File.join(File.dirname(__FILE__),"..",'lib',"merb-helpers")
-require "date"
-
-# Please read merb_helpers_form_spec.rb
-# for more info on how to test helpers
-# full stack specs are required
-# use the app in spec/fixture to test helpers
-
-
-default_options = {
-  :environment => 'test',
-  :adapter     => 'runner',
-  :merb_root   => File.dirname(__FILE__) / 'fixture',
-  :log_file    => File.dirname(__FILE__) / "merb_test.log"
-}
-options = default_options.merge($START_OPTIONS || {})
-
-Merb.disable(:initfile)
-Merb.start_environment(options)
-
-def unload_merb_helpers
-  Merb.class_eval do
-    remove_const("Helpers") if defined?(Merb::Helpers)
-  end
-end
-
-def reload_merb_helpers
-  unload_merb_helpers
-  load(MERB_HELPERS_ROOT + "/lib/merb-helpers.rb") 
-  Merb::Helpers.load
-end
-
-class FakeErrors
-  
-  def initialize(model)
-    @model = model
-  end
-  
-  def on(name)
-    name.to_s.include?("bad")
-  end
-  
-end
-
-class FakeColumn
-  attr_accessor :name, :type
-  
-  def initialize(name, type)
-    @name, @type = name, type
-  end
-  
-end
-
-
-
-
-# -- Global custom matchers --
-
-# A better +be_kind_of+ with more informative error messages.
-#
-# The default +be_kind_of+ just says
-#
-#   "expected to return true but got false"
-#
-# This one says
-#
-#   "expected File but got Tempfile"
-
-module Merb
-  module Test
-    module RspecMatchers
-      class IncludeLog
-        def initialize(expected)
-          @expected = expected
-        end
-        
-        def matches?(target)
-          target.log.rewind
-          @text = target.log.read
-          @text =~ (String === @expected ? /#{Regexp.escape @expected}/ : @expected)
-        end
-        
-        def failure_message
-          "expected to find `#{@expected}' in the log but got:\n" <<
-          @text.map {|s| "  #{s}" }.join
-        end
-        
-        def negative_failure_message
-          "exected not to find `#{@expected}' in the log but got:\n" <<
-          @text.map {|s| "  #{s}" }.join
-        end
-        
-        def description
-          "include #{@text} in the log"
-        end
-      end
-      
-      class BeKindOf
-        def initialize(expected) # + args
-          @expected = expected
-        end
-
-        def matches?(target)
-          @target = target
-          @target.kind_of?(@expected)
-        end
-
-        def failure_message
-          "expected #{@expected} but got #{@target.class}"
-        end
-
-        def negative_failure_message
-          "expected #{@expected} to not be #{@target.class}"
-        end
-
-        def description
-          "be_kind_of #{@target}"
-        end
-      end
-
-      def be_kind_of(expected) # + args
-        BeKindOf.new(expected)
-      end
-      
-      def include_log(expected)
-        IncludeLog.new(expected)
-      end
-    end
-
-    module Helper
-      def running(&blk) blk; end
-
-      def executing(&blk) blk; end
-
-      def doing(&blk) blk; end
-
-      def calling(&blk) blk; end
-    end
-  end
-end
-
-Spec::Runner.configure do |config|
-  config.include Merb::Test::Helper
-  config.include Merb::Test::RspecMatchers
-  config.include Merb::Test::Rspec::ViewMatchers
-  config.include Merb::Test::RequestHelper
-
-  def with_level(level)
-    Merb.logger = Merb::Logger.new(StringIO.new, level)
-    yield
-    Merb.logger
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/time_dsl_spec.rb b/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/time_dsl_spec.rb
deleted file mode 100644
index b38260c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/merb-helpers-0.9.14/spec/time_dsl_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "TimeDSL" do
-  it "Should do second/seconds" do
-    10.seconds.should == 10
-    1.second.should == 1
-  end
-
-  it "Should do minute/minutes" do
-    22.minutes.should == 22 * 60
-    1.minute.should == 60
-  end
-
-  it "Should do hour/hours" do
-    24.hours.should == 24 * 3600
-    1.hour.should == 3600
-  end
-
-  it "Should do day/days" do
-    7.days.should == 7 * 24 * 3600
-    1.day.should == 24 * 3600
-  end
-
-  it "Should do month/months" do
-    9.months.should == 9 * 30 * 24 * 3600
-    1.month.should == 30 * 24 * 3600
-  end
-
-  it "Should do year/years" do
-    3.years.should == 3 * 364.25 * 24 * 3600
-    1.year.should == 364.25 * 24 * 3600
-  end
-
-  it "Should do ago/until" do
-    5.seconds.ago.should be_close(Time.now - 5, 0.5)
-    8.minutes.until(3.minute.from_now).should be_close(3.minutes.from_now - 8 * 60, 0.5)
-  end
-
-  it "Should do from_now/since" do
-    3.seconds.from_now.should be_close(Time.now + 3, 0.5)
-    2.minutes.since(2.minutes.ago).should be_close(2.minutes.ago + 2 * 60, 0.5)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/ChangeLog b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/ChangeLog
deleted file mode 100644
index 9544a47..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/ChangeLog
+++ /dev/null
@@ -1,101 +0,0 @@
-= MIME::Types Change Log
-
-Unless explicitly stated differently are all changes produced by Austin
-Ziegler <mime-types at halostatue.ca>.
-
-== MIME::Types 1.15
-* Removed lib/mime/type.rb to form a single MIME::Types database source. It
-  is unlikely that one will ever need MIME::Type without MIME::Types.
-* Re-synchronized the MIME type list with the sources, focusing primarily on
-  the IANA list.
-* Added more detailed source information for MIME::Type objects.
-* Changed MIME::Types from a module to a class with a default instance. There
-  should be no difference in usage.
-* Removed MIME::Types::DATA_VERSION; it is now an attribute on the
-  MIME::Types instance.
-* NOTE: Synchronization with the Perl version of MIME::Types is no longer a
-  priority as of this release. The data format and information has changed.
-* Removed MIME::Types.by_suffix and MIME::Types.by_mediatype.
-
-== MIME::Types 1.13.1
-* Fixed a problem with the installer running tests. This now works.
-* Improved the implementation of MIME::Type.signature?
-* Moved code around to use the class << self idiom instead of always
-  prepending the module/class name.
-* Added two new best-guess implementations of functions found in Perl's
-  MIME::Types implementation (1.13). Do not rely on these until the purpose
-  and implementation is stabilised.
-* Updated the MIME list to reflect changes noted by 
-  Ville Skyttä <ville.skytta at iki.fi>.
-* Added a new constant to MIME::Types, DATA_VERSION. This will allow the Ruby
-  version number to be updated separately from the Perl version while keeping
-  the MIME Type list version in sync.
-
-== MIME::Types 1.13
-  ! WARNING: This version changes the API of MIME::Types !
-  ! WARNING: This version is compatible with Ruby 1.8 and higher ONLY !
-* Removed dependency on InstallPackage; offering 1.13 as either .tar.gz or
-  .gem.
-* Split into two files, mime/type.rb and mime/types.rb. This will make
-  maintaining the list of changes easier.
-* Changed the MIME::Type construction API. Accepts only a single String
-  argument (but does no named type-checking) and yields self.
-* Removed private methods #init_extensions, #init_encoding, and #init_system
-  and replaced with #extensions=, #encoding=, and #system=.
-* Added #default_encoding to return 'quoted-printable' or 'base64' depending
-  on the media type of the MIME type.
-* Added #raw_media_type and #raw_sub_type to provide the non-simplified
-  versions of the media type and subtype.
-* Alternative constructors MIME::Type.from_array, MIME::Type.from_hash, and
-  MIME::Type.from_mime_type added to compensate for the removal of named type
-  checking in the original constructor.
-* Added #to_str, #to_a, and #to_hash methods. The latter two will provide
-  output suitable for use in #from_array and #from_hash.
-* Removed "binary" encoding and enforced the use of a valid encoding string.
-* Added #system? returning true if the MIME::Type is an OS-specific
-  MIME::Type.
-* Added #platform? returning true if the MIME::Type is an OS-specific
-  MIME::Type for the current RUBY_PLATFORM.
-* Added #like? returning true if the simplified type matches the other value
-  provided. #<'application/x-excel'>.like?('application/excel') is true.
-* Added #complete? returning true if the MIME::Type specifies an extension
-  list.
-* Updated the MIME type list to reflect additions by Mark Overmeer for Perl's
-  MIME::Types 1.12 and the official IANA list as of 2004.04.06. A number of
-  formerly "registered" MIME types are now no longer registered (e.g.,
-  application/excel is now application/x-excel). This ensures that the
-  simplified type still works with applications, but does not report an
-  unregistered type as registered.
-* Restored MIME type list to Mark Overmeer's format to facilitate easy
-  exchange between the two projects.
-* Added additional unit tests from Mark Overmeer's 1.12 version.
-
-== MIME::Types 1.07
-* Changed version numbering to match Perl MIME::Types 1.07.
-* Re-synchronized with Mark Overmeer's list in Perl PMIME::Types 1.07.
-	- [NN Poster] updated the attributes for the PGP types.
-
-== MIME::Types 1.005
-* Changed to Phil Thomson's InstallPackage.
-* Added several types from Perl MIME::Types 1.005.
-* Cleaned up data format; some data formats will show up with proper data now.
-
-== MIME::Types 1.004
-* Updated to match Perl MIME::Types 1.004, links credited to Dan Puro. Adds
-  new reference list to http://www.indiana.edu/cgi-bin-local/mimetypes
-* Removed InvalidType and replaced with TypeError.
-* Changed instances of #type to #class.
-* Cleaned up how simplified versions are created.
-
-== MIME::Types 1.003
-* Initial release based on Perl MIME::Types 1.003.
-
-#--
-# MIME::Types for Ruby
-#   http://rubyforge.org/projects/mime-types/
-#   Copyright 2003 - 2006 Austin Ziegler.
-#   Licensed under a MIT-style licence.
-#
-# $Id: ChangeLog,v 1.3 2006/02/12 21:27:21 austin Exp $
-#++
-# vim: sts=2 sw=2 ts=4 et ai tw=77
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/Install b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/Install
deleted file mode 100644
index 690edb8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/Install
+++ /dev/null
@@ -1,16 +0,0 @@
-Installing this package is as simple as:
-
-  % ruby setup.rb
-
-Alternatively, you can use the RubyGem version of MIME::Types available as
-mime-types-1.15.gem from the usual sources.
-
-#--
-# MIME::Types for Ruby
-#   http://rubyforge.org/projects/mime-types/
-#   Copyright 2003 - 2006 Austin Ziegler.
-#   Licensed under a MIT-style licence.
-#
-# $Id: Install,v 1.3 2006/02/12 21:27:21 austin Exp $
-#++
-# vim: sts=2 sw=2 ts=4 et ai tw=77
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/LICENCE b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/LICENCE
deleted file mode 100644
index fcda4a6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/LICENCE
+++ /dev/null
@@ -1,18 +0,0 @@
-= MIME::Types for Ruby
-Homepage::  http://rubyforge.org/projects/mime-types/
-Copyright:: Copyright (c) 2003 - 2006 Austin Ziegler.
-Summary::   Ruby's licence, Perl Aristic Licence,
-            GNU GPL version 2 (or later)
-
-The text of the Ruby licence can be found at:
-http://www.ruby-lang.org/en/LICENSE.txt
-
-The text of the Perl Artistic Licence can be found at:
-http://www.perl.com/pub/a/language/misc/Artistic.html
-
-The text of the GNU GPL can be found at: http://www.gnu.org/copyleft/gpl.html
-
-If you do not accept one of these licences, you may not use this software.
-
-$Id: LICENCE,v 1.1 2006/02/12 21:27:21 austin Exp $
-# vim: sts=2 sw=2 ts=4 et ai tw=77
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/README b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/README
deleted file mode 100644
index f940817..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/README
+++ /dev/null
@@ -1,30 +0,0 @@
-= README: Mime::Types for Ruby
-This library allows for the identification of a file's likely MIME content
-type. This is release 1.15. The identification of MIME content type is based
-on a file's filename extensions.
-
-MIME::Types for Ruby originally based on and synchronized with MIME::Types
-for Perl by Mark Overmeer, copyright 2001 - 2005. As of version 1.15, the
-data format for the MIME::Type list has changed and the synchronization will
-no longer happen.
-
-Homepage::  http://mime-types.rubyforge.org/
-Copyright:: 2002 - 2006, Austin Ziegler
-            Based on prior work copyright Mark Overmeer
-
-== Licensing
-MIME::Types is available under three disjunctive licences, as detailed in the
-LICENCE file.
-
-== Requirements
-MIME::Types requires Ruby 1.8.2 or better.
-
-#--
-# MIME::Types for Ruby
-#   http://rubyforge.org/projects/mime-types/
-#   Copyright 2003 - 2005 Austin Ziegler.
-#   Licensed under a MIT-style licence.
-#
-# $Id: Readme,v 1.3 2006/02/12 21:27:21 austin Exp $
-#++
-# vim: sts=2 sw=2 ts=4 et ai tw=77
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/Rakefile b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/Rakefile
deleted file mode 100644
index da024c2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/Rakefile
+++ /dev/null
@@ -1,208 +0,0 @@
-#! /usr/bin/env rake
-#--
-# MIME::Types for Ruby
-#   http://rubyforge.org/projects/mime-types/
-#   Copyright 2003 - 2005 Austin Ziegler.
-#   Licensed under a MIT-style licence.
-#
-# $Id: Rakefile,v 1.8 2006/02/12 22:05:20 austin Exp $
-#++
-require 'meta_project'
-require 'rake/gempackagetask'
-require 'rake/contrib/xforge'
-require 'rake/clean'
-
-require 'gmailer'
-
-require 'archive/tar/minitar'
-require 'zlib'
-
-$LOAD_PATH.unshift('lib')
-
-require 'mime/types'
-
-$version  = MIME::Types::VERSION
-$name     = MIME::Types.to_s
-$project  = MetaProject::Project::XForge::RubyForge.new('mime-types')
-$distdir  = "mime-types-#$version"
-$tardist  = "../#$distdir.tar.gz"
-
-$release_date = nil
-$release_date = Time.parse(ENV['RELEASE_DATE']) if ENV['RELEASE_DATE']
-
-desc "Run the tests for #$name."
-task :test do |t|
-  require 'test/unit/testsuite'
-  require 'test/unit/ui/console/testrunner'
-
-  runner = Test::Unit::UI::Console::TestRunner
-
-  $LOAD_PATH.unshift('tests')
-  $stderr.puts "Checking for test cases:" if t.verbose
-  Dir['tests/tc_*.rb'].each do |testcase|
-    $stderr.puts "\t#{testcase}" if t.verbose
-    load testcase
-  end
-
-  suite = Test::Unit::TestSuite.new($name)
-
-  ObjectSpace.each_object(Class) do |testcase|
-    suite << testcase.suite if testcase < Test::Unit::TestCase
-  end
-
-  runner.run(suite)
-end
-
-desc "Look for TODO and FIXME tags in the code"
-task :todo do
-  rx = %r{#.*(FIXME|TODO|TBD|DEPRECATED)}
-  Pathname.new(File.dirname(__FILE__)).egrep(rx) do |match|
-    puts match
-  end
-end
-
-spec = eval(File.read("mime-types.gemspec"))
-spec.version = $version
-desc "Build the RubyGem for #$name."
-task :gem => [ :test ]
-Rake::GemPackageTask.new(spec) do |g|
-  g.need_tar    = false
-  g.need_zip    = false
-  g.package_dir = ".."
-end
-
-desc "Build a #$name .tar.gz distribution."
-task :tar => [ $tardist ]
-file $tardist => [ :test ] do |t|
-  current = File.basename(Dir.pwd)
-  Dir.chdir("..") do
-    begin
-      files = %W(bin/**/* lib/**/* tests/**/* ChangeLog README LICENCE
-                 Rakefile mime-types.gemspec setup.rb pre-setup.rb)
-      files = FileList[files.map { |file| File.join(current, file) }].to_a
-      files.map! do |dd|
-        ddnew = dd.gsub(/^#{current}/, $distdir)
-        mtime = $release_date || File.stat(dd).mtime
-        if File.directory?(dd)
-          { :name => ddnew, :mode => 0755, :dir => true, :mtime => mtime }
-        else
-          if dd =~ %r{bin/}
-            mode = 0755
-          else
-            mode = 0644
-          end
-          data = File.open(dd, "rb") { |ff| ff.read }
-          { :name => ddnew, :mode => mode, :data => data, :size =>
-            data.size, :mtime => mtime }
-        end
-      end
-
-      ff = File.open(t.name.gsub(%r{^\.\./}o, ''), "wb")
-      gz = Zlib::GzipWriter.new(ff)
-      tw = Archive::Tar::Minitar::Writer.new(gz)
-
-      files.each do |entry|
-        if entry[:dir]
-          tw.mkdir(entry[:name], entry)
-        else
-          tw.add_file_simple(entry[:name], entry) { |os| os.write(entry[:data]) }
-        end
-      end
-    ensure
-      tw.close if tw
-      gz.finish if gz
-      ff.close
-    end
-  end
-end
-task $tardist => [ :test ]
-
-desc "Build the RDoc documentation for #$name."
-task :docs do
-  require 'rdoc/rdoc'
-  rdoc_options = %W(--title #$name --main README --line-numbers)
-  files = FileList[*%w(README LICENCE ChangeLog bin/**/*.rb lib/**/*.rb)]
-  rdoc_options += files.to_a
-  RDoc::RDoc.new.document(rdoc_options)
-end
-
-task :verify_rubyforge do
-  raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
-  raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
-end
-
-task :verify_gmail do
-  raise "GMAIL_USER environment variable not set!" unless ENV['GMAIL_USER']
-  raise "GMAIL_PASSWORD environment variable not set!" unless ENV['GMAIL_PASSWORD']
-end
-
-desc "Release files on RubyForge."
-task :release_files => [ :verify_rubyforge, :tar, :gem ] do
-  release_files = FileList[$tardist, "../#$distdir.gem"]
-  Rake::XForge::Release.new($project) do |release|
-    release.user_name     = ENV['RUBYFORGE_USER']
-    release.password      = ENV['RUBYFORGE_PASSWORD']
-    release.files         = release_files.to_a
-    release.release_name  = "#$name #$version"
-    release.package_name  = "mime-types"
-
-    notes = []
-    File.open("README") do |file|
-      file.each do |line|
-        line.chomp!
-        line.gsub!(/^#.*$/, '') and next
-        notes << line
-      end
-    end
-    release.release_notes   = notes.join("\n")
-
-    changes = []
-    File.open("ChangeLog") do |file|
-      current = true
-
-      file.each do |line|
-        line.chomp!
-        current = false if current and line =~ /^==/
-        break if line.empty? and not current
-        changes << line
-      end
-    end
-    release.release_changes = changes.join("\n")
-  end
-end
-
-desc "Publish news on RubyForge"
-task :publish_news => [ :verify_rubyforge, :tar, :gem ] do
-  Rake::XForge::NewsPublisher.new($project) do |news|
-    news.user_name    = ENV['RUBYFORGE_USER']
-    news.password     = ENV['RUBYFORGE_PASSWORD']
-    news.subject      = "#$name #$version Released"
-    news.changes_file = nil
-
-    details = []
-    File.open("Release-Announcement") do |file|
-      file.each do |line|
-        line.chomp!
-        break if line =~ /^=/
-        details << line
-      end
-    end
-    news.details      = details.join("\n")
-  end
-end
-
-desc "Post a release announcement via GMail."
-task :email_announcement => [ :verify_gmail ] do
-  GMailer.connect(ENV["GMAIL_USER"], ENV["GMAIL_PASSWORD"]) do |gmail|
-    gmail.send  :to       => "ruby-talk at ruby-lang.org",
-                :subject  => "[ANN] #$name #$version",
-                :body     => File.read("Release-Announcement")
-  end
-end
-
-desc "Release the latest version."
-task :release => [ :verify_rubyforge, :verify_gmail, :release_files,
-  :publish_news, :email_announcement, :docs ]
-
-desc "Build everything."
-task :default => [ :tar, :gem ]
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/lib/mime/types.rb b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/lib/mime/types.rb
deleted file mode 100644
index 28a8599..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/lib/mime/types.rb
+++ /dev/null
@@ -1,1558 +0,0 @@
-#--
-# MIME::Types for Ruby
-# Version 1.15
-#
-# Copyright (c) 2002 - 2004 Austin Ziegler
-#
-# $Id: types.rb,v 1.4 2006/02/12 21:27:22 austin Exp $
-#
-# The ChangeLog contains all details on revisions.
-#++
-
-# The namespace for MIME applications, tools, and libraries.
-module MIME
-  # Reflects a MIME Content-Type which is in invalid format (e.g., it isn't
-  # in the form of type/subtype).
-  class InvalidContentType < RuntimeError; end
-
-  # The definition of one MIME content-type.
-  #
-  # == Usage
-  #  require 'mime/types'
-  #
-  #  plaintext = MIME::Types['text/plain']
-  #  print plaintext.media_type           # => 'text'
-  #  print plaintext.sub_type             # => 'plain'
-  #
-  #  puts plaintext.extensions.join(" ")  # => 'asc txt c cc h hh cpp'
-  #
-  #  puts plaintext.encoding              # => 8bit
-  #  puts plaintext.binary?               # => false
-  #  puts plaintext.ascii?                # => true
-  #  puts plaintext == 'text/plain'       # => true
-  #  puts MIME::Type.simplified('x-appl/x-zip') # => 'appl/zip'
-  #
-  class Type
-    VERSION = '1.15'
-
-    include Comparable
-
-    MEDIA_TYPE_RE = %r{([-\w.+]+)/([-\w.+]*)}o #:nodoc:
-    UNREG_RE      = %r{[Xx]-}o #:nodoc:
-    ENCODING_RE   = %r{(?:base64|7bit|8bit|quoted\-printable)}o #:nodoc:
-    PLATFORM_RE   = %r|#{RUBY_PLATFORM}|o #:nodoc:
-
-    SIGNATURES    = %w(application/pgp-keys application/pgp
-                       application/pgp-signature application/pkcs10
-                       application/pkcs7-mime application/pkcs7-signature
-                       text/vcard) #:nodoc:
-
-    IANA_URL      = "http://www.iana.org/assignments/media-types/%s/%s"
-    RFC_URL       = "http://rfc-editor.org/rfc/rfc%s.txt"
-    DRAFT_URL     = "http://datatracker.ietf.org/public/idindex.cgi?command=id_details&filename=%s"
-    LTSW_URL      = "http://www.ltsw.se/knbase/internet/%s.htp"
-    CONTACT_URL   = "http://www.iana.org/assignments/contact-people.htm#%s"
-
-    # Returns +true+ if the simplified type matches the current 
-    def like?(other)
-      if other.respond_to?(:simplified)
-        @simplified == other.simplified
-      else
-        @simplified == Type.simplified(other)
-      end
-    end
-
-    # Compares the MIME::Type against the exact content type or the
-    # simplified type (the simplified type will be used if comparing against
-    # something that can be treated as a String with #to_s).
-    def <=>(other) #:nodoc:
-      if other.respond_to?(:content_type)
-        @content_type.downcase <=> other.content_type.downcase
-      elsif other.respond_to?(:to_s)
-        @simplified <=> Type.simplified(other.to_s)
-      else
-        @content_type.downcase <=> other.downcase
-      end
-    end
-
-    # Returns +true+ if the other object is a MIME::Type and the content
-    # types match.
-    def eql?(other) #:nodoc:
-      other.kind_of?(MIME::Type) and self == other
-    end
-
-    # Returns the whole MIME content-type string.
-    #
-    #   text/plain        => text/plain
-    #   x-chemical/x-pdb  => x-chemical/x-pdb
-    attr_reader :content_type
-    # Returns the media type of the simplified MIME type.
-    #
-    #   text/plain        => text
-    #   x-chemical/x-pdb  => chemical
-    attr_reader :media_type
-    # Returns the media type of the unmodified MIME type.
-    #
-    #   text/plain        => text
-    #   x-chemical/x-pdb  => x-chemical
-    attr_reader :raw_media_type
-    # Returns the sub-type of the simplified MIME type.
-    #
-    #   text/plain        => plain
-    #   x-chemical/x-pdb  => pdb
-    attr_reader :sub_type
-    # Returns the media type of the unmodified MIME type.
-    # 
-    #   text/plain        => plain
-    #   x-chemical/x-pdb  => x-pdb
-    attr_reader :raw_sub_type
-    # The MIME types main- and sub-label can both start with <tt>x-</tt>,
-    # which indicates that it is a non-registered name. Of course, after
-    # registration this flag can disappear, adds to the confusing
-    # proliferation of MIME types. The simplified string has the <tt>x-</tt>
-    # removed and are translated to lowercase.
-    #
-    #   text/plain        => text/plain
-    #   x-chemical/x-pdb  => chemical/pdb
-    attr_reader :simplified
-    # The list of extensions which are known to be used for this MIME::Type.
-    # Non-array values will be coerced into an array with #to_a. Array
-    # values will be flattened and +nil+ values removed.
-    attr_accessor :extensions
-    remove_method :extensions= ;
-    def extensions=(ext) #:nodoc:
-      @extensions = ext.to_a.flatten.compact
-    end
-
-    # The encoding (7bit, 8bit, quoted-printable, or base64) required to
-    # transport the data of this content type safely across a network, which
-    # roughly corresponds to Content-Transfer-Encoding. A value of +nil+ or
-    # <tt>:default</tt> will reset the #encoding to the #default_encoding
-    # for the MIME::Type. Raises ArgumentError if the encoding provided is
-    # invalid.
-    #
-    # If the encoding is not provided on construction, this will be either
-    # 'quoted-printable' (for text/* media types) and 'base64' for eveything
-    # else.
-    attr_accessor :encoding
-    remove_method :encoding= ;
-    def encoding=(enc) #:nodoc:
-      if enc.nil? or enc == :default
-        @encoding = self.default_encoding
-      elsif enc =~ ENCODING_RE
-        @encoding = enc
-      else
-        raise ArgumentError, "The encoding must be nil, :default, base64, 7bit, 8bit, or quoted-printable."
-      end
-    end
-
-    # The regexp for the operating system that this MIME::Type is specific
-    # to.
-    attr_accessor :system
-    remove_method :system= ; 
-    def system=(os) #:nodoc:
-      if os.nil? or os.kind_of?(Regexp)
-        @system = os
-      else
-        @system = %r|#{os}|
-      end
-    end
-    # Returns the default encoding for the MIME::Type based on the media
-    # type.
-    attr_reader :default_encoding
-    remove_method :default_encoding
-    def default_encoding
-      (@media_type == 'text') ? 'quoted-printable' : 'base64'
-    end
-
-    # Returns the media type or types that should be used instead of this
-    # media type, if it is obsolete. If there is no replacement media type,
-    # or it is not obsolete, +nil+ will be returned.
-    attr_reader :use_instead
-    remove_method :use_instead
-    def use_instead
-      return nil unless @obsolete
-      @use_instead
-    end
-
-    # Returns +true+ if the media type is obsolete.
-    def obsolete?
-      @obsolete ? true : false
-    end
-    # Sets the obsolescence indicator for this media type.
-    attr_writer :obsolete
-
-    # The documentation for this MIME::Type. Documentation about media
-    # types will be found on a media type definition as a comment.
-    # Documentation will be found through #docs.
-    attr_accessor :docs
-    remove_method :docs= ;
-    def docs=(d)
-      if d
-        a = d.scan(%r{use-instead:#{MEDIA_TYPE_RE}})
-
-        if a.empty?
-          @use_instead = nil
-        else
-          @use_instead = a.map { |el| "#{el[0]}/#{el[1]}" }
-        end
-      end
-    end
-
-    # The encoded URL list for this MIME::Type. See #urls for 
-    attr_accessor :url
-    # The decoded URL list for this MIME::Type.
-    # The special URL value IANA will be translated into:
-    #   http://www.iana.org/assignments/media-types/<mediatype>/<subtype>
-    #
-    # The special URL value RFC### will be translated into:
-    #   http://www.rfc-editor.org/rfc/rfc###.txt
-    #
-    # The special URL value DRAFT:name will be translated into:
-    #   https://datatracker.ietf.org/public/idindex.cgi?
-    #       command=id_detail&filename=<name>
-    #
-    # The special URL value LTSW will be translated into:
-    #   http://www.ltsw.se/knbase/internet/<mediatype>.htp
-    #
-    # The special URL value [token] will be translated into:
-    #   http://www.iana.org/assignments/contact-people.htm#<token>
-    #
-    # These values will be accessible through #url, which always returns an
-    # array.
-    def urls
-      @url.map { |el|
-        case el
-        when %r{^IANA$}
-          IANA_URL % [ @media_type, @sub_type ]
-        when %r{^RFC(\d+)$}
-          RFC_URL % $1
-        when %r{^DRAFT:(.+)$}
-          DRAFT_URL % $1
-        when %r{^LTSW$}
-          LTSW_URL % @media_type
-        when %r{^\[([^\]]+)\]}
-          CONTACT_URL % $1
-        else
-          el
-        end
-      }
-    end
-
-    class << self
-      # The MIME types main- and sub-label can both start with <tt>x-</tt>,
-      # which indicates that it is a non-registered name. Of course, after
-      # registration this flag can disappear, adds to the confusing
-      # proliferation of MIME types. The simplified string has the
-      # <tt>x-</tt> removed and are translated to lowercase.
-      def simplified(content_type)
-        matchdata = MEDIA_TYPE_RE.match(content_type)
-
-        if matchdata.nil?
-          simplified = nil
-        else
-          media_type = matchdata.captures[0].downcase.gsub(UNREG_RE, '')
-          subtype = matchdata.captures[1].downcase.gsub(UNREG_RE, '')
-          simplified = "#{media_type}/#{subtype}"
-        end
-        simplified
-      end
-
-      # Creates a MIME::Type from an array in the form of:
-      #   [type-name, [extensions], encoding, system]
-      #
-      # +extensions+, +encoding+, and +system+ are optional.
-      #
-      #   MIME::Type.from_array("application/x-ruby", ['rb'], '8bit')
-      #   MIME::Type.from_array(["application/x-ruby", ['rb'], '8bit'])
-      #
-      # These are equivalent to:
-      #
-      #   MIME::Type.new('application/x-ruby') do |t|
-      #     t.extensions  = %w(rb)
-      #     t.encoding    = '8bit'
-      #   end
-      def from_array(*args) #:yields MIME::Type.new:
-        # Dereferences the array one level, if necessary.
-        args = args[0] if args[0].kind_of?(Array)
-
-        if args.size.between?(1, 8)
-          m = MIME::Type.new(args[0]) do |t|
-            t.extensions  = args[1] if args.size > 1
-            t.encoding    = args[2] if args.size > 2
-            t.system      = args[3] if args.size > 3
-            t.obsolete    = args[4] if args.size > 4
-            t.docs        = args[5] if args.size > 5
-            t.url         = args[6] if args.size > 6
-            t.registered  = args[7] if args.size > 7
-          end
-          yield m if block_given?
-        else
-          raise ArgumentError, "Array provided must contain between one and eight elements."
-        end
-        m
-      end
-
-      # Creates a MIME::Type from a hash. Keys are case-insensitive,
-      # dashes may be replaced with underscores, and the internal Symbol
-      # of the lowercase-underscore version can be used as well. That is,
-      # Content-Type can be provided as content-type, Content_Type,
-      # content_type, or :content_type.
-      #
-      # Known keys are <tt>Content-Type</tt>,
-      # <tt>Content-Transfer-Encoding</tt>, <tt>Extensions</tt>, and
-      # <tt>System</tt>.
-      #
-      #   MIME::Type.from_hash('Content-Type' => 'text/x-yaml',
-      #                        'Content-Transfer-Encoding' => '8bit',
-      #                        'System' => 'linux',
-      #                        'Extensions' => ['yaml', 'yml'])
-      #
-      # This is equivalent to:
-      #
-      #   MIME::Type.new('text/x-yaml') do |t|
-      #     t.encoding    = '8bit'
-      #     t.system      = 'linux'
-      #     t.extensions  = ['yaml', 'yml']
-      #   end
-      def from_hash(hash) #:yields MIME::Type.new:
-        type = {}
-        hash.each_pair do |k, v| 
-          type[k.to_s.tr('-A-Z', '_a-z').to_sym] = v
-        end
-
-        m = MIME::Type.new(type[:content_type]) do |t|
-          t.extensions  = type[:extensions]
-          t.encoding    = type[:content_transfer_encoding]
-          t.system      = type[:system]
-          t.obsolete    = type[:obsolete]
-          t.docs        = type[:docs]
-          t.url         = type[:url]
-          t.registered  = type[:registered]
-        end
-
-        yield m if block_given?
-        m
-      end
-
-      # Essentially a copy constructor.
-      #
-      #   MIME::Type.from_mime_type(plaintext)
-      #
-      # is equivalent to:
-      #
-      #   MIME::Type.new(plaintext.content_type.dup) do |t|
-      #     t.extensions  = plaintext.extensions.dup
-      #     t.system      = plaintext.system.dup
-      #     t.encoding    = plaintext.encoding.dup
-      #   end
-      def from_mime_type(mime_type) #:yields the new MIME::Type:
-        m = MIME::Type.new(mime_type.content_type.dup) do |t|
-          t.extensions = mime_type.extensions.dup
-          t.system = mime_type.system.dup
-          t.encoding = mime_type.encoding.dup
-        end
-
-        yield m if block_given?
-      end
-    end
-
-    # Builds a MIME::Type object from the provided MIME Content Type value
-    # (e.g., 'text/plain' or 'applicaton/x-eruby'). The constructed object
-    # is yielded to an optional block for additional configuration, such as
-    # associating extensions and encoding information.
-    def initialize(content_type) #:yields self:
-      matchdata = MEDIA_TYPE_RE.match(content_type)
-
-      if matchdata.nil?
-        raise InvalidContentType, "Invalid Content-Type provided ('#{content_type}')"
-      end
-
-      @content_type = content_type
-      @raw_media_type = matchdata.captures[0]
-      @raw_sub_type = matchdata.captures[1]
-
-      @simplified = MIME::Type.simplified(@content_type)
-      matchdata = MEDIA_TYPE_RE.match(@simplified)
-      @media_type = matchdata.captures[0]
-      @sub_type = matchdata.captures[1]
-
-      self.extensions   = nil
-      self.encoding     = :default
-      self.system       = nil
-      self.registered   = true
-
-      yield self if block_given?
-    end
-
-    # MIME content-types which are not regestered by IANA nor defined in
-    # RFCs are required to start with <tt>x-</tt>. This counts as well for
-    # a new media type as well as a new sub-type of an existing media
-    # type. If either the media-type or the content-type begins with
-    # <tt>x-</tt>, this method will return +false+.
-    def registered?
-      if (@raw_media_type =~ UNREG_RE) || (@raw_sub_type =~ UNREG_RE)
-        false
-      else
-        @registered
-      end
-    end
-    attr_writer :registered #:nodoc:
-
-    # MIME types can be specified to be sent across a network in particular
-    # formats. This method returns +true+ when the MIME type encoding is set
-    # to <tt>base64</tt>.
-    def binary?
-      @encoding == 'base64'
-    end
-
-    # MIME types can be specified to be sent across a network in particular
-    # formats. This method returns +false+ when the MIME type encoding is
-    # set to <tt>base64</tt>.
-    def ascii?
-      not binary?
-    end
-
-    # Returns +true+ when the simplified MIME type is in the list of known
-    # digital signatures.
-    def signature?
-      SIGNATURES.include?(@simplified.downcase)
-    end
-
-    # Returns +true+ if the MIME::Type is specific to an operating system.
-    def system?
-      not @system.nil?
-    end
-
-    # Returns +true+ if the MIME::Type is specific to the current operating
-    # system as represented by RUBY_PLATFORM.
-    def platform?
-      system? and (RUBY_PLATFORM =~ @system)
-    end
-
-    # Returns +true+ if the MIME::Type specifies an extension list,
-    # indicating that it is a complete MIME::Type.
-    def complete?
-      not @extensions.empty?
-    end
-
-    # Returns the MIME type as a string.
-    def to_s
-      @content_type
-    end
-
-    # Returns the MIME type as a string for implicit conversions.
-    def to_str
-      @content_type
-    end
-
-    # Returns the MIME type as an array suitable for use with
-    # MIME::Type.from_array.
-    def to_a
-      [ @content_type, @extensions, @encoding, @system, @obsolete, @docs,
-        @url, registered? ]
-    end
-
-    # Returns the MIME type as an array suitable for use with
-    # MIME::Type.from_hash.
-    def to_hash
-      { 'Content-Type'              => @content_type,
-        'Content-Transfer-Encoding' => @encoding,
-        'Extensions'                => @extensions,
-        'System'                    => @system,
-        'Obsolete'                  => @obsolete,
-        'Docs'                      => @docs,
-        'URL'                       => @url,
-        'Registered'                => registered?,
-      }
-    end
-  end
-
-  # = MIME::Types
-  # MIME types are used in MIME-compliant communications, as in e-mail or
-  # HTTP traffic, to indicate the type of content which is transmitted.
-  # MIME::Types provides the ability for detailed information about MIME
-  # entities (provided as a set of MIME::Type objects) to be determined and
-  # used programmatically. There are many types defined by RFCs and vendors,
-  # so the list is long but not complete; don't hesitate to ask to add
-  # additional information. This library follows the IANA collection of MIME
-  # types (see below for reference).
-  #
-  # == Description
-  # MIME types are used in MIME entities, as in email or HTTP traffic. It is
-  # useful at times to have information available about MIME types (or,
-  # inversely, about files). A MIME::Type stores the known information about
-  # one MIME type.
-  #
-  # == Usage
-  #  require 'mime/types'
-  #
-  #  plaintext = MIME::Types['text/plain']
-  #  print plaintext.media_type           # => 'text'
-  #  print plaintext.sub_type             # => 'plain'
-  #
-  #  puts plaintext.extensions.join(" ")  # => 'asc txt c cc h hh cpp'
-  #
-  #  puts plaintext.encoding              # => 8bit
-  #  puts plaintext.binary?               # => false
-  #  puts plaintext.ascii?                # => true
-  #  puts plaintext.obsolete?             # => false
-  #  puts plaintext.registered?           # => true
-  #  puts plaintext == 'text/plain'       # => true
-  #  puts MIME::Type.simplified('x-appl/x-zip') # => 'appl/zip'
-  #
-  # This module is built to conform to the MIME types of RFCs 2045 and 2231.
-  # It follows the official IANA registry at
-  # http://www.iana.org/assignments/media-types/ and
-  # ftp://ftp.iana.org/assignments/media-types with some unofficial types
-  # added from the the collection at
-  # http://www.ltsw.se/knbase/internet/mime.htp
-  #
-  # This is originally based on Perl MIME::Types by Mark Overmeer.
-  #
-  # = Author
-  # Copyright:: Copyright (c) 2002 - 2006 by Austin Ziegler
-  #             <austin at rubyforge.org>
-  # Version::   1.15
-  # Based On::  Perl
-  #             MIME::Types[http://search.cpan.org/author/MARKOV/MIME-Types-1.15/MIME/Types.pm],
-  #             Copyright (c) 2001 - 2005 by Mark Overmeer
-  #             <mimetypes at overmeer.net>.
-  # Licence::   Ruby's, Perl Artistic, or GPL version 2 (or later)
-  # See Also::  http://www.iana.org/assignments/media-types/
-  #             http://www.ltsw.se/knbase/internet/mime.htp
-  #
-  class Types
-    # The released version of Ruby MIME::Types
-    VERSION  = '1.15'
-
-      # The data version.
-    attr_reader :data_version
-
-    def initialize(data_version = nil)
-      @type_variants    = Hash.new { |h, k| h[k] = [] }
-      @extension_index  = Hash.new { |h, k| h[k] = [] }
-    end
-
-    def add_type_variant(mime_type) #:nodoc:
-      @type_variants[mime_type.simplified] << mime_type
-    end
-
-    def index_extensions(mime_type) #:nodoc:
-      mime_type.extensions.each { |ext| @extension_index[ext] << mime_type }
-    end
-
-    @__types__ = self.new(VERSION)
-
-    # Returns a list of MIME::Type objects, which may be empty. The optional
-    # flag parameters are :complete (finds only complete MIME::Type objects)
-    # and :platform (finds only MIME::Types for the current platform). It is
-    # possible for multiple matches to be returned for either type (in the
-    # example below, 'text/plain' returns two values -- one for the general
-    # case, and one for VMS systems.
-    #
-    #   puts "\nMIME::Types['text/plain']"
-    #   MIME::Types['text/plain'].each { |t| puts t.to_a.join(", ") }
-    #
-    #   puts "\nMIME::Types[/^image/, :complete => true]"
-    #   MIME::Types[/^image/, :complete => true].each do |t|
-    #     puts t.to_a.join(", ")
-    #   end
-    def [](type_id, flags = {})
-      if type_id.kind_of?(Regexp)
-        matches = []
-        @type_variants.each_key do |k|
-          matches << @type_variants[k] if k =~ type_id
-        end
-        matches.flatten!
-      elsif type_id.kind_of?(MIME::Type)
-        matches = [type_id]
-      else
-        matches = @type_variants[MIME::Type.simplified(type_id)]
-      end
-
-      matches.delete_if { |e| not e.complete? } if flags[:complete]
-      matches.delete_if { |e| not e.platform? } if flags[:platform]
-      matches
-    end
-
-    # Return the list of MIME::Types which belongs to the file based on its
-    # filename extension. If +platform+ is +true+, then only file types that
-    # are specific to the current platform will be returned.
-    #
-    #   puts "MIME::Types.type_for('citydesk.xml')
-    #     => "#{MIME::Types.type_for('citydesk.xml')}"
-    #   puts "MIME::Types.type_for('citydesk.gif')
-    #     => "#{MIME::Types.type_for('citydesk.gif')}"
-    def type_for(filename, platform = false)
-      ext = filename.chomp.downcase.gsub(/.*\./o, '')
-      list = @extension_index[ext]
-      list.delete_if { |e| not e.platform? } if platform
-      list
-    end
-
-    # A synonym for MIME::Types.type_for
-    def of(filename, platform = false)
-      type_for(filename, platform)
-    end
-
-    # Add one or more MIME::Type objects to the set of known types. Each
-    # type should be experimental (e.g., 'application/x-ruby'). If the type
-    # is already known, a warning will be displayed.
-    #
-    # <b>Please inform the maintainer of this module when registered types
-    # are missing.</b>
-    def add(*types)
-      types.each do |mime_type|
-        if @type_variants.include?(mime_type.simplified)
-          if @type_variants[mime_type.simplified].include?(mime_type)
-            warn "Type #{mime_type} already registered as a variant of #{mime_type.simplified}."
-          end
-        end
-        add_type_variant(mime_type)
-        index_extensions(mime_type)
-      end
-    end
-
-    class <<self
-      def add_type_variant(mime_type) #:nodoc:
-        @__types__.add_type_variant(mime_type)
-      end
-
-      def index_extensions(mime_type) #:nodoc:
-        @__types__.index_extensions(mime_type)
-      end
-
-      # Returns a list of MIME::Type objects, which may be empty. The
-      # optional flag parameters are :complete (finds only complete
-      # MIME::Type objects) and :platform (finds only MIME::Types for the
-      # current platform). It is possible for multiple matches to be
-      # returned for either type (in the example below, 'text/plain' returns
-      # two values -- one for the general case, and one for VMS systems.
-      #
-      #   puts "\nMIME::Types['text/plain']"
-      #   MIME::Types['text/plain'].each { |t| puts t.to_a.join(", ") }
-      #
-      #   puts "\nMIME::Types[/^image/, :complete => true]"
-      #   MIME::Types[/^image/, :complete => true].each do |t|
-      #     puts t.to_a.join(", ")
-      #   end
-      def [](type_id, flags = {})
-        @__types__[type_id, flags]
-      end
-
-      # Return the list of MIME::Types which belongs to the file based on
-      # its filename extension. If +platform+ is +true+, then only file
-      # types that are specific to the current platform will be returned.
-      #
-      #   puts "MIME::Types.type_for('citydesk.xml')
-      #     => "#{MIME::Types.type_for('citydesk.xml')}"
-      #   puts "MIME::Types.type_for('citydesk.gif')
-      #     => "#{MIME::Types.type_for('citydesk.gif')}"
-      def type_for(filename, platform = false)
-        @__types__.type_for(filename, platform)
-      end
-
-      # A synonym for MIME::Types.type_for
-      def of(filename, platform = false)
-        @__types__.type_for(filename, platform)
-      end
-
-      # Add one or more MIME::Type objects to the set of known types. Each
-      # type should be experimental (e.g., 'application/x-ruby'). If the
-      # type is already known, a warning will be displayed.
-      #
-      # <b>Please inform the maintainer of this module when registered types
-      # are missing.</b>
-      def add(*types)
-        @__types__.add(*types)
-      end
-    end
-  end
-end
-
-# Build the type list
-data_mime_type = <<MIME_TYPES
-# What follows is the compiled list of known media types, IANA-registered
-# ones first, one per line.
-#
-#   [*][!][os:]mt/st[<ws>@ext][<ws>:enc][<ws>'url-list][<ws>=docs]
-#
-# == *
-# An unofficial MIME type. This should be used if an only if the MIME type
-# is not properly specified.
-#
-# == !
-# An obsolete MIME type.
-#
-# == os:
-# Platform-specific MIME type definition.
-#
-# == mt
-# The media type.
-#
-# == st
-# The media subtype.
-#
-# == <ws>@ext
-# The list of comma-separated extensions.
-#
-# == <ws>:enc
-# The encoding.
-#
-# == <ws>'url-list
-# The list of comma-separated URLs.
-#
-# == <ws>=docs
-# The documentation string.
-#
-# That is, everything except the media type and the subtype is optional.
-#
-# -- Austin Ziegler, 2006.02.12
-
-  # Registered: application/*
-!application/xhtml-voice+xml 'DRAFT:draft-mccobb-xplusv-media-type
-application/CSTAdata+xml 'IANA,[Ecma International Helpdesk]
-application/EDI-Consent 'RFC1767
-application/EDI-X12 'RFC1767
-application/EDIFACT 'RFC1767
-application/activemessage 'IANA,[Shapiro]
-application/andrew-inset 'IANA,[Borenstein]
-application/applefile :base64 'IANA,[Faltstrom]
-application/atom+xml 'RFC4287
-application/atomicmail 'IANA,[Borenstein]
-application/batch-SMTP 'RFC2442
-application/beep+xml 'RFC3080
-application/cals-1840 'RFC1895
-application/ccxml+xml 'DRAFT:draft-froumentin-voice-mediatypes
-application/cnrp+xml 'RFCCNRP
-application/commonground 'IANA,[Glazer]
-application/conference-info+xml 'DRAFT:draft-ietf-sipping-conference-package
-application/cpl+xml 'RFC3880
-application/csta+xml 'IANA,[Ecma International Helpdesk]
-application/cybercash 'IANA,[Eastlake]
-application/dca-rft 'IANA,[Campbell]
-application/dec-dx 'IANA,[Campbell]
-application/dialog-info+xml 'DRAFT:draft-ietf-sipping-dialog-package
-application/dicom 'RFC3240
-application/dns 'RFC4027
-application/dvcs 'RFC3029
-application/ecmascript 'DRAFT:draft-hoehrmann-script-types
-application/epp+xml 'RFC3730
-application/eshop 'IANA,[Katz]
-application/fastinfoset 'IANA,[ITU-T ASN.1 Rapporteur]
-application/fastsoap 'IANA,[ITU-T ASN.1 Rapporteur]
-application/fits 'RFC4047
-application/font-tdpfr @pfr 'RFC3073
-application/http 'RFC2616
-application/hyperstudio @stk 'IANA,[Domino]
-application/iges 'IANA,[Parks]
-application/im-iscomposing+xml 'RFC3994
-application/index 'RFC2652
-application/index.cmd 'RFC2652
-application/index.obj 'RFC2652
-application/index.response 'RFC2652
-application/index.vnd 'RFC2652
-application/iotp 'RFC2935
-application/ipp 'RFC2910
-application/isup 'RFC3204
-application/javascript 'DRAFT:draft-hoehrmann-script-types
-application/kpml-request+xml 'DRAFT:draft-ietf-sipping-kpml
-application/kpml-response+xml 'DRAFT:draft-ietf-sipping-kpml
-application/mac-binhex40 @hqx :8bit 'IANA,[Faltstrom]
-application/macwriteii 'IANA,[Lindner]
-application/marc 'RFC2220
-application/mathematica 'IANA,[Van Nostern]
-application/mbox 'DRAFT:draft-hall-mime-app-mbox
-application/mikey 'RFC3830
-application/mp4 'DRAFT:draft-lim-mpeg4-mime
-application/mpeg4-generic 'RFC3640
-application/mpeg4-iod 'DRAFT:draft-lim-mpeg4-mime
-application/mpeg4-iod-xmt 'DRAFT:draft-lim-mpeg4-mime
-application/msword @doc,dot :base64 'IANA,[Lindner]
-application/news-message-id 'RFC1036,[Spencer]
-application/news-transmission 'RFC1036,[Spencer]
-application/nss 'IANA,[Hammer]
-application/ocsp-request 'RFC2560
-application/ocsp-response 'RFC2560
-application/octet-stream @bin,dms,lha,lzh,exe,class,ani,pgp :base64 'RFC2045,RFC2046
-application/oda @oda 'RFC2045,RFC2046
-application/ogg @ogg 'RFC3534
-application/parityfec 'RFC3009
-application/pdf @pdf :base64 'RFC3778
-application/pgp-encrypted :7bit 'RFC3156
-application/pgp-keys :7bit 'RFC3156
-application/pgp-signature @sig :base64 'RFC3156
-application/pidf+xml 'IANA,RFC3863
-application/pkcs10 @p10 'RFC2311
-application/pkcs7-mime @p7m,p7c 'RFC2311
-application/pkcs7-signature @p7s 'RFC2311
-application/pkix-cert @cer 'RFC2585
-application/pkix-crl @crl 'RFC2585
-application/pkix-pkipath @pkipath 'DRAFT:draft-ietf-tls-rfc3546bis
-application/pkixcmp @pki 'RFC2510
-application/pls+xml 'DRAFT:draft-froumentin-voice-mediatypes
-application/poc-settings+xml 'DRAFT:draft-garcia-sipping-poc-isb-am
-application/postscript @ai,eps,ps :8bit 'RFC2045,RFC2046
-application/prs.alvestrand.titrax-sheet 'IANA,[Alvestrand]
-application/prs.cww @cw,cww 'IANA,[Rungchavalnont]
-application/prs.nprend @rnd,rct 'IANA,[Doggett]
-application/prs.plucker 'IANA,[Janssen]
-application/qsig 'RFC3204
-application/rdf+xml @rdf 'RFC3870
-application/reginfo+xml 'RFC3680
-application/remote-printing 'IANA,RFC1486,[Rose]
-application/resource-lists+xml 'DRAFT:draft-ietf-simple-xcap-list-usage
-application/riscos 'IANA,[Smith]
-application/rlmi+xml 'DRAFT:draft-ietf-simple-event-list
-application/rls-services+xml 'DRAFT:draft-ietf-simple-xcap-list-usage
-application/rtf @rtf 'IANA,[Lindner]
-application/rtx 'DRAFT:draft-ietf-avt-rtp-retransmission
-application/samlassertion+xml 'IANA,[OASIS Security Services Technical Committee (SSTC)]
-application/samlmetadata+xml 'IANA,[OASIS Security Services Technical Committee (SSTC)]
-application/sbml+xml 'RFC3823
-application/sdp 'RFC2327
-application/set-payment 'IANA,[Korver]
-application/set-payment-initiation 'IANA,[Korver]
-application/set-registration 'IANA,[Korver]
-application/set-registration-initiation 'IANA,[Korver]
-application/sgml @sgml 'RFC1874
-application/sgml-open-catalog @soc 'IANA,[Grosso]
-application/shf+xml 'RFC4194
-application/sieve @siv 'RFC3028
-application/simple-filter+xml 'DRAFT:draft-ietf-simple-filter-format
-application/simple-message-summary 'RFC3842
-application/slate 'IANA,[Crowley]
-application/soap+fastinfoset 'IANA,[ITU-T ASN.1 Rapporteur]
-application/soap+xml 'RFC3902
-application/spirits-event+xml 'RFC3910
-application/srgs 'DRAFT:draft-froumentin-voice-mediatypes
-application/srgs+xml 'DRAFT:draft-froumentin-voice-mediatypes
-application/ssml+xml 'DRAFT:draft-froumentin-voice-mediatypes
-application/timestamp-query 'RFC3161
-application/timestamp-reply 'RFC3161
-application/tve-trigger 'IANA,[Welsh]
-application/vemmi 'RFC2122
-application/vnd.3M.Post-it-Notes 'IANA,[O'Brien]
-application/vnd.3gpp.pic-bw-large @plb 'IANA,[Meredith]
-application/vnd.3gpp.pic-bw-small @psb 'IANA,[Meredith]
-application/vnd.3gpp.pic-bw-var @pvb 'IANA,[Meredith]
-application/vnd.3gpp.sms @sms 'IANA,[Meredith]
-application/vnd.FloGraphIt 'IANA,[Floersch]
-application/vnd.Kinar @kne,knp,sdf 'IANA,[Thakkar]
-application/vnd.Mobius.DAF 'IANA,[Kabayama]
-application/vnd.Mobius.DIS 'IANA,[Kabayama]
-application/vnd.Mobius.MBK 'IANA,[Devasia]
-application/vnd.Mobius.MQY 'IANA,[Devasia]
-application/vnd.Mobius.MSL 'IANA,[Kabayama]
-application/vnd.Mobius.PLC 'IANA,[Kabayama]
-application/vnd.Mobius.TXF 'IANA,[Kabayama]
-application/vnd.Quark.QuarkXPress @qxd,qxt,qwd,qwt,qxl,qxb :8bit 'IANA,[Scheidler]
-application/vnd.RenLearn.rlprint 'IANA,[Wick]
-application/vnd.accpac.simply.aso 'IANA,[Leow]
-application/vnd.accpac.simply.imp 'IANA,[Leow]
-application/vnd.acucobol 'IANA,[Lubin]
-application/vnd.acucorp @atc,acutc :7bit 'IANA,[Lubin]
-application/vnd.adobe.xfdf @xfdf 'IANA,[Perelman]
-application/vnd.aether.imp 'IANA,[Moskowitz]
-application/vnd.amiga.ami @ami 'IANA,[Blumberg]
-application/vnd.apple.installer+xml 'IANA,[Bierman]
-application/vnd.audiograph 'IANA,[Slusanschi]
-application/vnd.autopackage 'IANA,[Hearn]
-application/vnd.blueice.multipass @mpm 'IANA,[Holmstrom]
-application/vnd.bmi 'IANA,[Gotoh]
-application/vnd.businessobjects 'IANA,[Imoucha]
-application/vnd.cinderella @cdy 'IANA,[Kortenkamp]
-application/vnd.claymore 'IANA,[Simpson]
-application/vnd.commerce-battelle 'IANA,[Applebaum]
-application/vnd.commonspace 'IANA,[Chandhok]
-application/vnd.contact.cmsg 'IANA,[Patz]
-application/vnd.cosmocaller @cmc 'IANA,[Dellutri]
-application/vnd.criticaltools.wbs+xml @wbs 'IANA,[Spiller]
-application/vnd.ctc-posml 'IANA,[Kohlhepp]
-application/vnd.cups-postscript 'IANA,[Sweet]
-application/vnd.cups-raster 'IANA,[Sweet]
-application/vnd.cups-raw 'IANA,[Sweet]
-application/vnd.curl @curl 'IANA,[Byrnes]
-application/vnd.cybank 'IANA,[Helmee]
-application/vnd.data-vision.rdz @rdz 'IANA,[Fields]
-application/vnd.dna 'IANA,[Searcy]
-application/vnd.dpgraph 'IANA,[Parker]
-application/vnd.dreamfactory @dfac 'IANA,[Appleton]
-application/vnd.dxr 'IANA,[Duffy]
-application/vnd.ecdis-update 'IANA,[Buettgenbach]
-application/vnd.ecowin.chart 'IANA,[Olsson]
-application/vnd.ecowin.filerequest 'IANA,[Olsson]
-application/vnd.ecowin.fileupdate 'IANA,[Olsson]
-application/vnd.ecowin.series 'IANA,[Olsson]
-application/vnd.ecowin.seriesrequest 'IANA,[Olsson]
-application/vnd.ecowin.seriesupdate 'IANA,[Olsson]
-application/vnd.enliven 'IANA,[Santinelli]
-application/vnd.epson.esf 'IANA,[Hoshina]
-application/vnd.epson.msf 'IANA,[Hoshina]
-application/vnd.epson.quickanime 'IANA,[Gu]
-application/vnd.epson.salt 'IANA,[Nagatomo]
-application/vnd.epson.ssf 'IANA,[Hoshina]
-application/vnd.ericsson.quickcall 'IANA,[Tidwell]
-application/vnd.eudora.data 'IANA,[Resnick]
-application/vnd.fdf 'IANA,[Zilles]
-application/vnd.ffsns 'IANA,[Holstage]
-application/vnd.fints 'IANA,[Hammann]
-application/vnd.fluxtime.clip 'IANA,[Winter]
-application/vnd.framemaker 'IANA,[Wexler]
-application/vnd.fsc.weblaunch @fsc :7bit 'IANA,[D.Smith]
-application/vnd.fujitsu.oasys 'IANA,[Togashi]
-application/vnd.fujitsu.oasys2 'IANA,[Togashi]
-application/vnd.fujitsu.oasys3 'IANA,[Okudaira]
-application/vnd.fujitsu.oasysgp 'IANA,[Sugimoto]
-application/vnd.fujitsu.oasysprs 'IANA,[Ogita]
-application/vnd.fujixerox.ddd 'IANA,[Onda]
-application/vnd.fujixerox.docuworks 'IANA,[Taguchi]
-application/vnd.fujixerox.docuworks.binder 'IANA,[Matsumoto]
-application/vnd.fut-misnet 'IANA,[Pruulmann]
-application/vnd.genomatix.tuxedo @txd 'IANA,[Frey]
-application/vnd.grafeq 'IANA,[Tupper]
-application/vnd.groove-account 'IANA,[Joseph]
-application/vnd.groove-help 'IANA,[Joseph]
-application/vnd.groove-identity-message 'IANA,[Joseph]
-application/vnd.groove-injector 'IANA,[Joseph]
-application/vnd.groove-tool-message 'IANA,[Joseph]
-application/vnd.groove-tool-template 'IANA,[Joseph]
-application/vnd.groove-vcard 'IANA,[Joseph]
-application/vnd.hbci @hbci,hbc,kom,upa,pkd,bpd 'IANA,[Hammann]
-application/vnd.hcl-bireports 'IANA,[Serres]
-application/vnd.hhe.lesson-player @les 'IANA,[Jones]
-application/vnd.hp-HPGL @plt,hpgl 'IANA,[Pentecost]
-application/vnd.hp-PCL 'IANA,[Pentecost]
-application/vnd.hp-PCLXL 'IANA,[Pentecost]
-application/vnd.hp-hpid 'IANA,[Gupta]
-application/vnd.hp-hps 'IANA,[Aubrey]
-application/vnd.httphone 'IANA,[Lefevre]
-application/vnd.hzn-3d-crossword 'IANA,[Minnis]
-application/vnd.ibm.MiniPay 'IANA,[Herzberg]
-application/vnd.ibm.afplinedata 'IANA,[Buis]
-application/vnd.ibm.electronic-media @emm 'IANA,[Tantlinger]
-application/vnd.ibm.modcap 'IANA,[Hohensee]
-application/vnd.ibm.rights-management @irm 'IANA,[Tantlinger]
-application/vnd.ibm.secure-container @sc 'IANA,[Tantlinger]
-application/vnd.informix-visionary 'IANA,[Gales]
-application/vnd.intercon.formnet 'IANA,[Gurak]
-application/vnd.intertrust.digibox 'IANA,[Tomasello]
-application/vnd.intertrust.nncp 'IANA,[Tomasello]
-application/vnd.intu.qbo 'IANA,[Scratchley]
-application/vnd.intu.qfx 'IANA,[Scratchley]
-application/vnd.ipunplugged.rcprofile @rcprofile 'IANA,[Ersson]
-application/vnd.irepository.package+xml @irp 'IANA,[Knowles]
-application/vnd.is-xpr 'IANA,[Natarajan]
-application/vnd.japannet-directory-service 'IANA,[Fujii]
-application/vnd.japannet-jpnstore-wakeup 'IANA,[Yoshitake]
-application/vnd.japannet-payment-wakeup 'IANA,[Fujii]
-application/vnd.japannet-registration 'IANA,[Yoshitake]
-application/vnd.japannet-registration-wakeup 'IANA,[Fujii]
-application/vnd.japannet-setstore-wakeup 'IANA,[Yoshitake]
-application/vnd.japannet-verification 'IANA,[Yoshitake]
-application/vnd.japannet-verification-wakeup 'IANA,[Fujii]
-application/vnd.jisp @jisp 'IANA,[Deckers]
-application/vnd.kahootz 'IANA,[Macdonald]
-application/vnd.kde.karbon @karbon 'IANA,[Faure]
-application/vnd.kde.kchart @chrt 'IANA,[Faure]
-application/vnd.kde.kformula @kfo 'IANA,[Faure]
-application/vnd.kde.kivio @flw 'IANA,[Faure]
-application/vnd.kde.kontour @kon 'IANA,[Faure]
-application/vnd.kde.kpresenter @kpr,kpt 'IANA,[Faure]
-application/vnd.kde.kspread @ksp 'IANA,[Faure]
-application/vnd.kde.kword @kwd,kwt 'IANA,[Faure]
-application/vnd.kenameaapp @htke 'IANA,[DiGiorgio-Haag]
-application/vnd.kidspiration @kia 'IANA,[Bennett]
-application/vnd.koan 'IANA,[Cole]
-application/vnd.liberty-request+xml 'IANA,[McDowell]
-application/vnd.llamagraphics.life-balance.desktop @lbd 'IANA,[White]
-application/vnd.llamagraphics.life-balance.exchange+xml @lbe 'IANA,[White]
-application/vnd.lotus-1-2-3 @wks,123 'IANA,[Wattenberger]
-application/vnd.lotus-approach 'IANA,[Wattenberger]
-application/vnd.lotus-freelance 'IANA,[Wattenberger]
-application/vnd.lotus-notes 'IANA,[Laramie]
-application/vnd.lotus-organizer 'IANA,[Wattenberger]
-application/vnd.lotus-screencam 'IANA,[Wattenberger]
-application/vnd.lotus-wordpro 'IANA,[Wattenberger]
-application/vnd.marlin.drm.mdcf 'IANA,[Ellison]
-application/vnd.mcd @mcd 'IANA,[Gotoh]
-application/vnd.mediastation.cdkey 'IANA,[Flurry]
-application/vnd.meridian-slingshot 'IANA,[Wedel]
-application/vnd.mfmp @mfm 'IANA,[Ikeda]
-application/vnd.micrografx.flo @flo 'IANA,[Prevo]
-application/vnd.micrografx.igx @igx 'IANA,[Prevo]
-application/vnd.mif @mif 'IANA,[Wexler]
-application/vnd.minisoft-hp3000-save 'IANA,[Bartram]
-application/vnd.mitsubishi.misty-guard.trustweb 'IANA,[Tanaka]
-application/vnd.mophun.application @mpn 'IANA,[Wennerstrom]
-application/vnd.mophun.certificate @mpc 'IANA,[Wennerstrom]
-application/vnd.motorola.flexsuite 'IANA,[Patton]
-application/vnd.motorola.flexsuite.adsi 'IANA,[Patton]
-application/vnd.motorola.flexsuite.fis 'IANA,[Patton]
-application/vnd.motorola.flexsuite.gotap 'IANA,[Patton]
-application/vnd.motorola.flexsuite.kmr 'IANA,[Patton]
-application/vnd.motorola.flexsuite.ttc 'IANA,[Patton]
-application/vnd.motorola.flexsuite.wem 'IANA,[Patton]
-application/vnd.mozilla.xul+xml @xul 'IANA,[McDaniel]
-application/vnd.ms-artgalry @cil 'IANA,[Slawson]
-application/vnd.ms-asf @asf 'IANA,[Fleischman]
-application/vnd.ms-cab-compressed @cab 'IANA,[Scarborough]
-application/vnd.ms-excel @xls,xlt :base64 'IANA,[Gill]
-application/vnd.ms-fontobject 'IANA,[Scarborough]
-application/vnd.ms-ims 'IANA,[Ledoux]
-application/vnd.ms-lrm @lrm 'IANA,[Ledoux]
-application/vnd.ms-powerpoint @ppt,pps,pot :base64 'IANA,[Gill]
-application/vnd.ms-project @mpp :base64 'IANA,[Gill]
-application/vnd.ms-tnef :base64 'IANA,[Gill]
-application/vnd.ms-works :base64 'IANA,[Gill]
-application/vnd.ms-wpl @wpl :base64 'IANA,[Plastina]
-application/vnd.mseq @mseq 'IANA,[Le Bodic]
-application/vnd.msign 'IANA,[Borcherding]
-application/vnd.music-niff 'IANA,[Butler]
-application/vnd.musician 'IANA,[Adams]
-application/vnd.nervana @ent,entity,req,request,bkm,kcm 'IANA,[Judkins]
-application/vnd.netfpx 'IANA,[Mutz]
-application/vnd.noblenet-directory 'IANA,[Solomon]
-application/vnd.noblenet-sealer 'IANA,[Solomon]
-application/vnd.noblenet-web 'IANA,[Solomon]
-application/vnd.nokia.landmark+wbxml 'IANA,[Nokia]
-application/vnd.nokia.landmark+xml 'IANA,[Nokia]
-application/vnd.nokia.landmarkcollection+xml 'IANA,[Nokia]
-application/vnd.nokia.radio-preset @rpst 'IANA,[Nokia]
-application/vnd.nokia.radio-presets @rpss 'IANA,[Nokia]
-application/vnd.novadigm.EDM 'IANA,[Swenson]
-application/vnd.novadigm.EDX 'IANA,[Swenson]
-application/vnd.novadigm.EXT 'IANA,[Swenson]
-application/vnd.obn 'IANA,[Hessling]
-application/vnd.omads-email+xml 'IANA,[OMA Data Synchronization Working Group]
-application/vnd.omads-file+xml 'IANA,[OMA Data Synchronization Working Group]
-application/vnd.omads-folder+xml 'IANA,[OMA Data Synchronization Working Group]
-application/vnd.osa.netdeploy 'IANA,[Klos]
-application/vnd.osgi.dp 'IANA,[Kriens]
-application/vnd.palm @prc,pdb,pqa,oprc :base64 'IANA,[Peacock]
-application/vnd.paos.xml 'IANA,[Kemp]
-application/vnd.pg.format 'IANA,[Gandert]
-application/vnd.pg.osasli 'IANA,[Gandert]
-application/vnd.piaccess.application-licence 'IANA,[Maneos]
-application/vnd.picsel @efif 'IANA,[Naccarato]
-application/vnd.powerbuilder6 'IANA,[Guy]
-application/vnd.powerbuilder6-s 'IANA,[Guy]
-application/vnd.powerbuilder7 'IANA,[Shilts]
-application/vnd.powerbuilder7-s 'IANA,[Shilts]
-application/vnd.powerbuilder75 'IANA,[Shilts]
-application/vnd.powerbuilder75-s 'IANA,[Shilts]
-application/vnd.preminet 'IANA,[Tenhunen]
-application/vnd.previewsystems.box 'IANA,[Smolgovsky]
-application/vnd.proteus.magazine 'IANA,[Hoch]
-application/vnd.publishare-delta-tree 'IANA,[Ben-Kiki]
-application/vnd.pvi.ptid1 @pti,ptid 'IANA,[Lamb]
-application/vnd.pwg-multiplexed 'RFC3391
-application/vnd.pwg-xhtml-print+xml 'IANA,[Wright]
-application/vnd.rapid 'IANA,[Szekely]
-application/vnd.ruckus.download 'IANA,[Harris]
-application/vnd.s3sms 'IANA,[Tarkkala]
-application/vnd.sealed.doc @sdoc,sdo,s1w 'IANA,[Petersen]
-application/vnd.sealed.eml @seml,sem 'IANA,[Petersen]
-application/vnd.sealed.mht @smht,smh 'IANA,[Petersen]
-application/vnd.sealed.net 'IANA,[Lambert]
-application/vnd.sealed.ppt @sppt,spp,s1p 'IANA,[Petersen]
-application/vnd.sealed.xls @sxls,sxl,s1e 'IANA,[Petersen]
-application/vnd.sealedmedia.softseal.html @stml,stm,s1h 'IANA,[Petersen]
-application/vnd.sealedmedia.softseal.pdf @spdf,spd,s1a 'IANA,[Petersen]
-application/vnd.seemail @see 'IANA,[Webb]
-application/vnd.sema 'IANA,[Hansson]
-application/vnd.shana.informed.formdata 'IANA,[Selzler]
-application/vnd.shana.informed.formtemplate 'IANA,[Selzler]
-application/vnd.shana.informed.interchange 'IANA,[Selzler]
-application/vnd.shana.informed.package 'IANA,[Selzler]
-application/vnd.smaf @mmf 'IANA,[Takahashi]
-application/vnd.sss-cod 'IANA,[Dani]
-application/vnd.sss-dtf 'IANA,[Bruno]
-application/vnd.sss-ntf 'IANA,[Bruno]
-application/vnd.street-stream 'IANA,[Levitt]
-application/vnd.sus-calendar @sus,susp 'IANA,[Niedfeldt]
-application/vnd.svd 'IANA,[Becker]
-application/vnd.swiftview-ics 'IANA,[Widener]
-application/vnd.syncml.+xml 'IANA,[OMA Data Synchronization Working Group]
-application/vnd.syncml.ds.notification 'IANA,[OMA Data Synchronization Working Group]
-application/vnd.triscape.mxs 'IANA,[Simonoff]
-application/vnd.trueapp 'IANA,[Hepler]
-application/vnd.truedoc 'IANA,[Chase]
-application/vnd.ufdl 'IANA,[Manning]
-application/vnd.uiq.theme 'IANA,[Ocock]
-application/vnd.uplanet.alert 'IANA,[Martin]
-application/vnd.uplanet.alert-wbxml 'IANA,[Martin]
-application/vnd.uplanet.bearer-choice 'IANA,[Martin]
-application/vnd.uplanet.bearer-choice-wbxml 'IANA,[Martin]
-application/vnd.uplanet.cacheop 'IANA,[Martin]
-application/vnd.uplanet.cacheop-wbxml 'IANA,[Martin]
-application/vnd.uplanet.channel 'IANA,[Martin]
-application/vnd.uplanet.channel-wbxml 'IANA,[Martin]
-application/vnd.uplanet.list 'IANA,[Martin]
-application/vnd.uplanet.list-wbxml 'IANA,[Martin]
-application/vnd.uplanet.listcmd 'IANA,[Martin]
-application/vnd.uplanet.listcmd-wbxml 'IANA,[Martin]
-application/vnd.uplanet.signal 'IANA,[Martin]
-application/vnd.vcx 'IANA,[T.Sugimoto]
-application/vnd.vectorworks 'IANA,[Pharr]
-application/vnd.vidsoft.vidconference @vsc :8bit 'IANA,[Hess]
-application/vnd.visio @vsd,vst,vsw,vss 'IANA,[Sandal]
-application/vnd.visionary @vis 'IANA,[Aravindakumar]
-application/vnd.vividence.scriptfile 'IANA,[Risher]
-application/vnd.vsf 'IANA,[Rowe]
-application/vnd.wap.sic @sic 'IANA,[WAP-Forum]
-application/vnd.wap.slc @slc 'IANA,[WAP-Forum]
-application/vnd.wap.wbxml @wbxml 'IANA,[Stark]
-application/vnd.wap.wmlc @wmlc 'IANA,[Stark]
-application/vnd.wap.wmlscriptc @wmlsc 'IANA,[Stark]
-application/vnd.webturbo @wtb 'IANA,[Rehem]
-application/vnd.wordperfect @wpd 'IANA,[Scarborough]
-application/vnd.wqd @wqd 'IANA,[Bostrom]
-application/vnd.wrq-hp3000-labelled 'IANA,[Bartram]
-application/vnd.wt.stf 'IANA,[Wohler]
-application/vnd.wv.csp+wbxml @wv 'IANA,[Salmi]
-application/vnd.wv.csp+xml :8bit 'IANA,[Ingimundarson]
-application/vnd.wv.ssp+xml :8bit 'IANA,[Ingimundarson]
-application/vnd.xara 'IANA,[Matthewman]
-application/vnd.xfdl 'IANA,[Manning]
-application/vnd.yamaha.hv-dic @hvd 'IANA,[Yamamoto]
-application/vnd.yamaha.hv-script @hvs 'IANA,[Yamamoto]
-application/vnd.yamaha.hv-voice @hvp 'IANA,[Yamamoto]
-application/vnd.yamaha.smaf-audio @saf 'IANA,[Shinoda]
-application/vnd.yamaha.smaf-phrase @spf 'IANA,[Shinoda]
-application/vnd.yellowriver-custom-menu 'IANA,[Yellow]
-application/vnd.zzazz.deck+xml 'IANA,[Hewett]
-application/voicexml+xml 'DRAFT:draft-froumentin-voice-mediatypes
-application/watcherinfo+xml @wif 'RFC3858
-application/whoispp-query 'RFC2957
-application/whoispp-response 'RFC2958
-application/wita 'IANA,[Campbell]
-application/wordperfect5.1 @wp5,wp 'IANA,[Lindner]
-application/x400-bp 'RFC1494
-application/xcap-att+xml 'DRAFT:draft-ietf-simple-xcap
-application/xcap-caps+xml 'DRAFT:draft-ietf-simple-xcap
-application/xcap-el+xml 'DRAFT:draft-ietf-simple-xcap
-application/xcap-error+xml 'DRAFT:draft-ietf-simple-xcap
-application/xhtml+xml @xhtml :8bit 'RFC3236
-application/xml @xml :8bit 'RFC3023
-application/xml-dtd :8bit 'RFC3023
-application/xml-external-parsed-entity 'RFC3023
-application/xmpp+xml 'RFC3923
-application/xop+xml 'IANA,[Nottingham]
-application/xv+xml 'DRAFT:draft-mccobb-xv-media-type
-application/zip @zip :base64 'IANA,[Lindner]
-
-  # Registered: audio/*
-!audio/vnd.qcelp 'IANA,RFC3625 =use-instead:audio/QCELP
-audio/32kadpcm 'RFC2421,RFC2422
-audio/3gpp @3gpp 'RFC3839,DRAFT:draft-gellens-bucket
-audio/3gpp2 'DRAFT:draft-garudadri-avt-3gpp2-mime
-audio/AMR @amr :base64 'RFC3267
-audio/AMR-WB @awb :base64 'RFC3267
-audio/BV16 'RFC4298
-audio/BV32 'RFC4298
-audio/CN 'RFC3389
-audio/DAT12 'RFC3190
-audio/DVI4 'RFC3555
-audio/EVRC @evc 'RFC3558
-audio/EVRC-QCP 'RFC3625
-audio/EVRC0 'RFC3558
-audio/G722 'RFC3555
-audio/G7221 'RFC3047
-audio/G723 'RFC3555
-audio/G726-16 'RFC3555
-audio/G726-24 'RFC3555
-audio/G726-32 'RFC3555
-audio/G726-40 'RFC3555
-audio/G728 'RFC3555
-audio/G729 'RFC3555
-audio/G729D 'RFC3555
-audio/G729E 'RFC3555
-audio/GSM 'RFC3555
-audio/GSM-EFR 'RFC3555
-audio/L16 @l16 'RFC3555
-audio/L20 'RFC3190
-audio/L24 'RFC3190
-audio/L8 'RFC3555
-audio/LPC 'RFC3555
-audio/MP4A-LATM 'RFC3016
-audio/MPA 'RFC3555
-audio/PCMA 'RFC3555
-audio/PCMU 'RFC3555
-audio/QCELP @qcp 'RFC3555'RFC3625
-audio/RED 'RFC3555
-audio/SMV @smv 'RFC3558
-audio/SMV-QCP 'RFC3625
-audio/SMV0 'RFC3558
-audio/VDVI 'RFC3555
-audio/VMR-WB 'DRAFT:draft-ietf-avt-rtp-vmr-wb,DRAFT:draft-ietf-avt-rtp-vmr-wb-extension
-audio/ac3 'RFC4184
-audio/amr-wb+ 'DRAFT:draft-ietf-avt-rtp-amrwbplus
-audio/basic @au,snd :base64 'RFC2045,RFC2046
-audio/clearmode 'RFC4040
-audio/dsr-es201108 'RFC3557
-audio/dsr-es202050 'RFC4060
-audio/dsr-es202211 'RFC4060
-audio/dsr-es202212 'RFC4060
-audio/iLBC 'RFC3952
-audio/mp4 'DRAFT:draft-lim-mpeg4-mime
-audio/mpa-robust 'RFC3119
-audio/mpeg @mpga,mp2,mp3 :base64 'RFC3003
-audio/mpeg4-generic 'RFC3640
-audio/parityfec 'RFC3009
-audio/prs.sid @sid,psid 'IANA,[Walleij]
-audio/rtx 'DRAFT:draft-ietf-avt-rtp-retransmission
-audio/t140c 'DRAFT:draft-ietf-avt-audio-t140c
-audio/telephone-event 'RFC2833
-audio/tone 'RFC2833
-audio/vnd.3gpp.iufp 'IANA,[Belling]
-audio/vnd.audiokoz 'IANA,[DeBarros]
-audio/vnd.cisco.nse 'IANA,[Kumar]
-audio/vnd.cmles.radio-events 'IANA,[Goulet]
-audio/vnd.cns.anp1 'IANA,[McLaughlin]
-audio/vnd.cns.inf1 'IANA,[McLaughlin]
-audio/vnd.digital-winds @eol :7bit 'IANA,[Strazds]
-audio/vnd.dlna.adts 'IANA,[Heredia]
-audio/vnd.everad.plj @plj 'IANA,[Cicelsky]
-audio/vnd.lucent.voice @lvp 'IANA,[Vaudreuil]
-audio/vnd.nokia.mobile-xmf @mxmf 'IANA,[Nokia Corporation]
-audio/vnd.nortel.vbk @vbk 'IANA,[Parsons]
-audio/vnd.nuera.ecelp4800 @ecelp4800 'IANA,[Fox]
-audio/vnd.nuera.ecelp7470 @ecelp7470 'IANA,[Fox]
-audio/vnd.nuera.ecelp9600 @ecelp9600 'IANA,[Fox]
-audio/vnd.octel.sbc 'IANA,[Vaudreuil]
-audio/vnd.rhetorex.32kadpcm 'IANA,[Vaudreuil]
-audio/vnd.sealedmedia.softseal.mpeg @smp3,smp,s1m 'IANA,[Petersen]
-audio/vnd.vmx.cvsd 'IANA,[Vaudreuil]
-
-  # Registered: image/*
-image/cgm 'IANA =Computer Graphics Metafile [Francis]
-image/fits 'RFC4047
-image/g3fax 'RFC1494
-image/gif @gif :base64 'RFC2045,RFC2046
-image/ief @ief :base64 'RFC1314 =Image Exchange Format
-image/jp2 @jp2 :base64 'IANA,RFC3745
-image/jpeg @jpeg,jpg,jpe :base64 'RFC2045,RFC2046
-image/jpm @jpm :base64 'IANA,RFC3745
-image/jpx @jpx :base64 'IANA,RFC3745
-image/naplps 'IANA,[Ferber]
-image/png @png :base64 'IANA,[Randers-Pehrson]
-image/prs.btif 'IANA,[Simon]
-image/prs.pti 'IANA,[Laun]
-image/t38 'RFC3362
-image/tiff @tiff,tif :base64 'RFC3302 =Tag Image File Format
-image/tiff-fx 'RFC3950 =Tag Image File Format Fax eXtended
-image/vnd.adobe.photoshop 'IANA,[Scarborough]
-image/vnd.cns.inf2 'IANA,[McLaughlin]
-image/vnd.djvu @djvu,djv 'IANA,[Bottou]
-image/vnd.dwg @dwg 'IANA,[Moline]
-image/vnd.dxf 'IANA,[Moline]
-image/vnd.fastbidsheet 'IANA,[Becker]
-image/vnd.fpx 'IANA,[Spencer]
-image/vnd.fst 'IANA,[Fuldseth]
-image/vnd.fujixerox.edmics-mmr 'IANA,[Onda]
-image/vnd.fujixerox.edmics-rlc 'IANA,[Onda]
-image/vnd.globalgraphics.pgb @pgb 'IANA,[Bailey]
-image/vnd.microsoft.icon @ico 'IANA,[Butcher]
-image/vnd.mix 'IANA,[Reddy]
-image/vnd.ms-modi @mdi 'IANA,[Vaughan]
-image/vnd.net-fpx 'IANA,[Spencer]
-image/vnd.sealed.png @spng,spn,s1n 'IANA,[Petersen]
-image/vnd.sealedmedia.softseal.gif @sgif,sgi,s1g 'IANA,[Petersen]
-image/vnd.sealedmedia.softseal.jpg @sjpg,sjp,s1j 'IANA,[Petersen]
-image/vnd.svf 'IANA,[Moline]
-image/vnd.wap.wbmp @wbmp 'IANA,[Stark]
-image/vnd.xiff 'IANA,[S.Martin]
-
-  # Registered: message/*
-message/CPIM 'RFC3862
-message/delivery-status 'RFC1894
-message/disposition-notification 'RFC2298
-message/external-body :8bit 'RFC2046
-message/http 'RFC2616
-message/news :8bit 'RFC1036,[H.Spencer]
-message/partial :8bit 'RFC2046
-message/rfc822 :8bit 'RFC2046
-message/s-http 'RFC2660
-message/sip 'RFC3261
-message/sipfrag 'RFC3420
-message/tracking-status 'RFC3886
-
-  # Registered: model/*
-model/iges @igs,iges 'IANA,[Parks]
-model/mesh @msh,mesh,silo 'RFC2077
-model/vnd.dwf 'IANA,[Pratt]
-model/vnd.flatland.3dml 'IANA,[Powers]
-model/vnd.gdl 'IANA,[Babits]
-model/vnd.gs-gdl 'IANA,[Babits]
-model/vnd.gtw 'IANA,[Ozaki]
-model/vnd.mts 'IANA,[Rabinovitch]
-model/vnd.parasolid.transmit.binary @x_b,xmt_bin 'IANA,[Parasolid]
-model/vnd.parasolid.transmit.text @x_t,xmt_txt :quoted-printable 'IANA,[Parasolid]
-model/vnd.vtu 'IANA,[Rabinovitch]
-model/vrml @wrl,vrml 'RFC2077
-
-  # Registered: multipart/*
-multipart/alternative :8bit 'RFC2045,RFC2046
-multipart/appledouble :8bit 'IANA,[Faltstrom]
-multipart/byteranges 'RFC2068
-multipart/digest :8bit 'RFC2045,RFC2046
-multipart/encrypted 'RFC1847
-multipart/form-data 'RFC2388
-multipart/header-set 'IANA,[Crocker]
-multipart/mixed :8bit 'RFC2045,RFC2046
-multipart/parallel :8bit 'RFC2045,RFC2046
-multipart/related 'RFC2387
-multipart/report 'RFC1892
-multipart/signed 'RFC1847
-multipart/voice-message 'RFC2421,RFC2423
-
-  # Registered: text/*
-!text/ecmascript 'DRAFT:draft-hoehrmann-script-types
-!text/javascript 'DRAFT:draft-hoehrmann-script-types
-text/calendar 'RFC2445
-text/css @css :8bit 'RFC2318
-text/csv @csv :8bit 'RFC4180
-text/directory 'RFC2425
-text/dns 'RFC4027
-text/enriched 'RFC1896
-text/html @html,htm,htmlx,shtml,htx :8bit 'RFC2854
-text/parityfec 'RFC3009
-text/plain @txt,asc,c,cc,h,hh,cpp,hpp,dat,hlp 'RFC2046,RFC3676
-text/prs.fallenstein.rst @rst 'IANA,[Fallenstein]
-text/prs.lines.tag 'IANA,[Lines]
-text/RED 'RFC4102
-text/rfc822-headers 'RFC1892
-text/richtext @rtx :8bit 'RFC2045,RFC2046
-text/rtf @rtf :8bit 'IANA,[Lindner]
-text/rtx 'DRAFT:draft-ietf-avt-rtp-retransmission
-text/sgml @sgml,sgm 'RFC1874
-text/t140 'RFC4103
-text/tab-separated-values @tsv 'IANA,[Lindner]
-text/troff @t,tr,roff,troff :8bit 'DRAFT:draft-lilly-text-troff
-text/uri-list 'RFC2483
-text/vnd.abc 'IANA,[Allen]
-text/vnd.curl 'IANA,[Byrnes]
-text/vnd.DMClientScript 'IANA,[Bradley]
-text/vnd.esmertec.theme-descriptor 'IANA,[Eilemann]
-text/vnd.fly 'IANA,[Gurney]
-text/vnd.fmi.flexstor 'IANA,[Hurtta]
-text/vnd.in3d.3dml 'IANA,[Powers]
-text/vnd.in3d.spot 'IANA,[Powers]
-text/vnd.IPTC.NewsML '[IPTC]
-text/vnd.IPTC.NITF '[IPTC]
-text/vnd.latex-z 'IANA,[Lubos]
-text/vnd.motorola.reflex 'IANA,[Patton]
-text/vnd.ms-mediapackage 'IANA,[Nelson]
-text/vnd.net2phone.commcenter.command @ccc 'IANA,[Xie]
-text/vnd.sun.j2me.app-descriptor @jad :8bit 'IANA,[G.Adams]
-text/vnd.wap.si @si 'IANA,[WAP-Forum]
-text/vnd.wap.sl @sl 'IANA,[WAP-Forum]
-text/vnd.wap.wml @wml 'IANA,[Stark]
-text/vnd.wap.wmlscript @wmls 'IANA,[Stark]
-text/xml @xml,dtd :8bit 'RFC3023
-text/xml-external-parsed-entity 'RFC3023
-vms:text/plain @doc :8bit
-
-  # Registered: video/*
-video/3gpp @3gp,3gpp 'RFC3839,DRAFT:draft-gellens-mime-bucket 
-video/3gpp-tt 'DRAFT:draft-ietf-avt-rtp-3gpp-timed-text 
-video/3gpp2 'DRAFT:draft-garudadri-avt-3gpp2-mime 
-video/BMPEG 'RFC3555 
-video/BT656 'RFC3555 
-video/CelB 'RFC3555 
-video/DV 'RFC3189 
-video/H261 'RFC3555 
-video/H263 'RFC3555 
-video/H263-1998 'RFC3555 
-video/H263-2000 'RFC3555 
-video/H264 'RFC3984 
-video/JPEG 'RFC3555 
-video/MJ2 @mj2,mjp2 'RFC3745 
-video/MP1S 'RFC3555 
-video/MP2P 'RFC3555 
-video/MP2T 'RFC3555 
-video/mp4 'DRAFT:draft-lim-mpeg4-mime 
-video/MP4V-ES 'RFC3016 
-video/mpeg @mp2,mpe,mp3g,mpg :base64 'RFC2045,RFC2046 
-video/mpeg4-generic 'RFC3640 
-video/MPV 'RFC3555 
-video/nv 'RFC3555 
-video/parityfec 'RFC3009 
-video/pointer 'RFC2862 
-video/quicktime @qt,mov :base64 'IANA,[Lindner] 
-video/raw 'RFC4175 
-video/rtx 'DRAFT:draft-ietf-avt-rtp-retransmission 
-video/SMPTE292M 'RFC3497 
-video/vnd.dlna.mpeg-tts 'IANA,[Heredia] 
-video/vnd.fvt 'IANA,[Fuldseth] 
-video/vnd.motorola.video 'IANA,[McGinty] 
-video/vnd.motorola.videop 'IANA,[McGinty] 
-video/vnd.mpegurl @mxu,m4u :8bit 'IANA,[Recktenwald] 
-video/vnd.nokia.interleaved-multimedia @nim 'IANA,[Kangaslampi] 
-video/vnd.objectvideo @mp4 'IANA,[Clark] 
-video/vnd.sealed.mpeg1 @s11 'IANA,[Petersen] 
-video/vnd.sealed.mpeg4 @smpg,s14 'IANA,[Petersen] 
-video/vnd.sealed.swf @sswf,ssw 'IANA,[Petersen] 
-video/vnd.sealedmedia.softseal.mov @smov,smo,s1q 'IANA,[Petersen] 
-video/vnd.vivo @viv,vivo 'IANA,[Wolfe] 
-
-  # Unregistered: application/*
-!application/x-troff 'LTSW =use-instead:text/troff
-application/x-bcpio @bcpio 'LTSW
-application/x-compressed @z,Z :base64 'LTSW
-application/x-cpio @cpio :base64 'LTSW
-application/x-csh @csh :8bit 'LTSW
-application/x-dvi @dvi :base64 'LTSW
-application/x-gtar @gtar,tgz,tbz2,tbz :base64 'LTSW
-application/x-gzip @gz :base64 'LTSW
-application/x-hdf @hdf 'LTSW
-application/x-java-archive @jar 'LTSW
-application/x-java-jnlp-file @jnlp 'LTSW
-application/x-java-serialized-object @ser 'LTSW
-application/x-java-vm @class 'LTSW
-application/x-latex @ltx,latex :8bit 'LTSW
-application/x-mif @mif 'LTSW
-application/x-rtf 'LTSW =use-instead:application/rtf
-application/x-sh @sh 'LTSW
-application/x-shar @shar 'LTSW
-application/x-stuffit @sit :base64 'LTSW
-application/x-sv4cpio @sv4cpio :base64 'LTSW
-application/x-sv4crc @sv4crc :base64 'LTSW
-application/x-tar @tar :base64 'LTSW
-application/x-tcl @tcl :8bit 'LTSW
-application/x-tex @tex :8bit
-application/x-texinfo @texinfo,texi :8bit
-application/x-troff-man @man :8bit 'LTSW
-application/x-troff-me @me 'LTSW
-application/x-troff-ms @ms 'LTSW
-application/x-ustar @ustar :base64 'LTSW
-application/x-wais-source @src 'LTSW
-mac:application/x-mac @bin :base64
-*!application/cals1840 'LTSW =use-instead:application/cals-1840
-*!application/remote_printing 'LTSW =use-instead:application/remote-printing
-*!application/x-u-star 'LTSW =use-instead:application/x-ustar
-*!application/x400.bp 'LTSW =use-instead:application/x400-bp
-*application/acad 'LTSW
-*application/clariscad 'LTSW
-*application/drafting 'LTSW
-*application/dxf 'LTSW
-*application/excel @xls,xlt 'LTSW
-*application/fractals 'LTSW
-*application/i-deas 'LTSW
-*application/macbinary 'LTSW
-*application/netcdf @nc,cdf 'LTSW
-*application/powerpoint @ppt,pps,pot :base64 'LTSW
-*application/pro_eng 'LTSW
-*application/set 'LTSW
-*application/SLA 'LTSW
-*application/solids 'LTSW
-*application/STEP 'LTSW
-*application/vda 'LTSW
-*application/word @doc,dot 'LTSW
-
-  # Unregistered: audio/*
-audio/x-aiff @aif,aifc,aiff :base64
-audio/x-midi @mid,midi,kar :base64
-audio/x-pn-realaudio @rm,ram :base64
-audio/x-pn-realaudio-plugin @rpm
-audio/x-realaudio @ra :base64
-audio/x-wav @wav :base64
-
-  # Unregistered: image/*
-*image/vnd.dgn @dgn =use-instead:image/x-vnd.dgn
-image/x-bmp @bmp
-image/x-cmu-raster @ras
-image/x-paintshoppro @psp,pspimage :base64
-image/x-pict
-image/x-portable-anymap @pnm :base64
-image/x-portable-bitmap @pbm :base64
-image/x-portable-graymap @pgm :base64
-image/x-portable-pixmap @ppm :base64
-image/x-rgb @rgb :base64
-image/x-targa @tga
-image/x-vnd.dgn @dgn
-image/x-win-bmp
-image/x-xbitmap @xbm :7bit
-image/x-xbm @xbm :7bit
-image/x-xpixmap @xpm :8bit
-image/x-xwindowdump @xwd :base64
-*!image/cmu-raster =use-instead:image/x-cmu-raster
-*!image/vnd.net.fpx =use-instead:image/vnd.net-fpx
-*image/bmp @bmp
-*image/targa @tga
-
-  # Unregistered: multipart/*
-multipart/x-gzip
-multipart/x-mixed-replace
-multipart/x-tar
-multipart/x-ustar
-multipart/x-www-form-urlencoded
-multipart/x-zip
-*!multipart/parallel =use-instead:multipart/parallel
-
-  # Unregistered: text/*
-*text/comma-separated-values @csv :8bit
-*text/vnd.flatland.3dml =use-instead:model/vnd.flatland.3dml
-text/x-vnd.flatland.3dml =use-instead:model/vnd.flatland.3dml
-text/x-setext @etx
-text/x-vcalendar @vcs :8bit
-text/x-vcard @vcf :8bit
-text/x-yaml @yaml,yml :8bit
-
-  # Unregistered: video/*
-*video/dl @dl :base64
-*video/gl @gl :base64
-video/x-msvideo @avi :base64
-video/x-sgi-movie @movie :base64
-
-  # Unregistered: other/*
-x-chemical/x-pdb @pdb
-x-chemical/x-xyz @xyz
-x-conference/x-cooltalk @ice
-x-drawing/dwf @dwf
-x-world/x-vrml @wrl,vrml
-MIME_TYPES
-
-_re = %r{
-  ^
-  ([*])?                                # 0: Unregistered?
-  (!)?                                  # 1: Obsolete?
-  (?:(\w+):)?                           # 2: Platform marker
-  #{MIME::Type::MEDIA_TYPE_RE}          # 3,4: Media type
-  (?:\s@([^\s]+))?                      # 5: Extensions
-  (?:\s:(#{MIME::Type::ENCODING_RE}))?  # 6: Encoding
-  (?:\s'(.+))?                          # 7: URL list
-  (?:\s=(.+))?                          # 8: Documentation
-  $
-}x
-
-data_mime_type.each do |i|
-  item = i.chomp.strip.gsub(%r{#.*}o, '')
-  next if item.empty?
-
-  m = _re.match(item).captures
-
-  unregistered, obsolete, platform, mediatype, subtype, extensions,
-    encoding, urls, docs = *m
-
-  extensions &&= extensions.split(/,/)
-  urls &&= urls.split(/,/)
-
-  mime_type = MIME::Type.new("#{mediatype}/#{subtype}") do |t|
-    t.extensions  = extensions
-    t.encoding    = encoding
-    t.system      = platform
-    t.obsolete    = obsolete
-    t.registered  = false if unregistered
-    t.docs        = docs
-    t.url         = urls
-  end
-
-  MIME::Types.add_type_variant(mime_type)
-  MIME::Types.index_extensions(mime_type)
-end
-
-_re             = nil
-data_mime_type  = nil
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/pre-setup.rb b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/pre-setup.rb
deleted file mode 100644
index 88f6938..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/pre-setup.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-require 'rdoc/rdoc'
-##
-# Build the rdoc documentation. Also, try to build the RI documentation.
-#
-def build_rdoc(options)
-  RDoc::RDoc.new.document(options)
-rescue RDoc::RDocError => e
-  $stderr.puts e.message
-rescue Exception => e
-  $stderr.puts "Couldn't build RDoc documentation\n#{e.message}"
-end
-
-def build_ri(files)
-  RDoc::RDoc.new(["--ri-site", "--merge"] + files)
-rescue RDoc::RDocError => e
-  $stderr.puts e.message
-rescue Exception => e
-  $stderr.puts "Couldn't build Ri documentation\n#{e.message}"
-end
-
-def run_tests(test_list)
-  return if test_list.empty?
-
-  require 'test/unit/ui/console/testrunner'
-  $:.unshift "lib"
-  test_list.each do |test|
-    next if File.directory?(test)
-    require test
-  end
-
-  tests = []
-  ObjectSpace.each_object { |o| tests << o if o.kind_of?(Class) }
-  tests.delete_if { |o| !o.ancestors.include?(Test::Unit::TestCase) }
-  tests.delete_if { |o| o == Test::Unit::TestCase }
-
-  tests.each { |test| Test::Unit::UI::Console::TestRunner.run(test) }
-  $:.shift
-end
-
-rdoc  = %w(--main README --line-numbers
-           --title MIME::Types)
-ri    = %w(--ri-site --merge)
-dox   = %w(README ChangeLog lib)
-build_rdoc rdoc + dox
-build_ri ri + dox
-run_tests Dir["tests/**/*"]
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/setup.rb b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/setup.rb
deleted file mode 100644
index 0673386..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/setup.rb
+++ /dev/null
@@ -1,1366 +0,0 @@
-#
-# setup.rb
-#
-# Copyright (c) 2000-2004 Minero Aoki
-#
-# This program is free software.
-# You can distribute/modify this program under the terms of
-# the GNU LGPL, Lesser General Public License version 2.1.
-#
-
-unless Enumerable.method_defined?(:map)   # Ruby 1.4.6
-  module Enumerable
-    alias map collect
-  end
-end
-
-unless File.respond_to?(:read)   # Ruby 1.6
-  def File.read(fname)
-    open(fname) {|f|
-      return f.read
-    }
-  end
-end
-
-def File.binread(fname)
-  open(fname, 'rb') {|f|
-    return f.read
-  }
-end
-
-# for corrupted windows stat(2)
-def File.dir?(path)
-  File.directory?((path[-1,1] == '/') ? path : path + '/')
-end
-
-
-class SetupError < StandardError; end
-
-def setup_rb_error(msg)
-  raise SetupError, msg
-end
-
-#
-# Config
-#
-
-if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg }
-  ARGV.delete(arg)
-  require arg.split(/=/, 2)[1]
-  $".push 'rbconfig.rb'
-else
-  require 'rbconfig'
-end
-
-def multipackage_install?
-  FileTest.directory?(File.dirname($0) + '/packages')
-end
-
-
-class ConfigItem
-  def initialize(name, template, default, desc)
-    @name = name.freeze
-    @template = template
-    @value = default
-    @default = default.dup.freeze
-    @description = desc
-  end
-
-  attr_reader :name
-  attr_reader :description
-
-  attr_accessor :default
-  alias help_default default
-
-  def help_opt
-    "--#{@name}=#{@template}"
-  end
-
-  def value
-    @value
-  end
-
-  def eval(table)
-    @value.gsub(%r<\$([^/]+)>) { table[$1] }
-  end
-
-  def set(val)
-    @value = check(val)
-  end
-
-  private
-
-  def check(val)
-    setup_rb_error "config: --#{name} requires argument" unless val
-    val
-  end
-end
-
-class BoolItem < ConfigItem
-  def config_type
-    'bool'
-  end
-
-  def help_opt
-    "--#{@name}"
-  end
-
-  private
-
-  def check(val)
-    return 'yes' unless val
-    unless /\A(y(es)?|n(o)?|t(rue)?|f(alse))\z/i =~ val
-      setup_rb_error "config: --#{@name} accepts only yes/no for argument"
-    end
-    (/\Ay(es)?|\At(rue)/i =~ value) ? 'yes' : 'no'
-  end
-end
-
-class PathItem < ConfigItem
-  def config_type
-    'path'
-  end
-
-  private
-
-  def check(path)
-    setup_rb_error "config: --#{@name} requires argument"  unless path
-    path[0,1] == '$' ? path : File.expand_path(path)
-  end
-end
-
-class ProgramItem < ConfigItem
-  def config_type
-    'program'
-  end
-end
-
-class SelectItem < ConfigItem
-  def initialize(name, template, default, desc)
-    super
-    @ok = template.split('/')
-  end
-
-  def config_type
-    'select'
-  end
-
-  private
-
-  def check(val)
-    unless @ok.include?(val.strip)
-      setup_rb_error "config: use --#{@name}=#{@template} (#{val})"
-    end
-    val.strip
-  end
-end
-
-class PackageSelectionItem < ConfigItem
-  def initialize(name, template, default, help_default, desc)
-    super name, template, default, desc
-    @help_default = help_default
-  end
-
-  attr_reader :help_default
-
-  def config_type
-    'package'
-  end
-
-  private
-
-  def check(val)
-    unless File.dir?("packages/#{val}")
-      setup_rb_error "config: no such package: #{val}"
-    end
-    val
-  end
-end
-
-class ConfigTable_class
-
-  def initialize(items)
-    @items = items
-    @table = {}
-    items.each do |i|
-      @table[i.name] = i
-    end
-    ALIASES.each do |ali, name|
-      @table[ali] = @table[name]
-    end
-		@script_extensions = ['rb']
-  end
-
-	attr_accessor :script_extensions
-
-  include Enumerable
-
-  def each(&block)
-    @items.each(&block)
-  end
-
-  def key?(name)
-    @table.key?(name)
-  end
-
-  def lookup(name)
-    @table[name] or raise ArgumentError, "no such config item: #{name}"
-  end
-
-  def add(item)
-    @items.push item
-    @table[item.name] = item
-  end
-
-  def remove(name)
-    item = lookup(name)
-    @items.delete_if {|i| i.name == name }
-    @table.delete_if {|name, i| i.name == name }
-    item
-  end
-
-  def new
-    dup()
-  end
-
-  def savefile
-    '.config'
-  end
-
-  def load
-    begin
-      t = dup()
-      File.foreach(savefile()) do |line|
-        k, v = *line.split(/=/, 2)
-        t[k] = v.strip
-      end
-      t
-    rescue Errno::ENOENT
-      setup_rb_error $!.message + "#{File.basename($0)} config first"
-    end
-  end
-
-  def save
-    @items.each {|i| i.value }
-    File.open(savefile(), 'w') {|f|
-      @items.each do |i|
-        f.printf "%s=%s\n", i.name, i.value if i.value
-      end
-    }
-  end
-
-  def [](key)
-    lookup(key).eval(self)
-  end
-
-  def []=(key, val)
-    lookup(key).set val
-  end
-
-end
-
-c = ::Config::CONFIG
-
-rubypath = c['bindir'] + '/' + c['ruby_install_name']
-
-major = c['MAJOR'].to_i
-minor = c['MINOR'].to_i
-teeny = c['TEENY'].to_i
-version = "#{major}.#{minor}"
-
-# ruby ver. >= 1.4.4?
-newpath_p = ((major >= 2) or
-             ((major == 1) and
-              ((minor >= 5) or
-               ((minor == 4) and (teeny >= 4)))))
-
-if c['rubylibdir']
-  # V < 1.6.3
-  _stdruby         = c['rubylibdir']
-  _siteruby        = c['sitedir']
-  _siterubyver     = c['sitelibdir']
-  _siterubyverarch = c['sitearchdir']
-elsif newpath_p
-  # 1.4.4 <= V <= 1.6.3
-  _stdruby         = "$prefix/lib/ruby/#{version}"
-  _siteruby        = c['sitedir']
-  _siterubyver     = "$siteruby/#{version}"
-  _siterubyverarch = "$siterubyver/#{c['arch']}"
-else
-  # V < 1.4.4
-  _stdruby         = "$prefix/lib/ruby/#{version}"
-  _siteruby        = "$prefix/lib/ruby/#{version}/site_ruby"
-  _siterubyver     = _siteruby
-  _siterubyverarch = "$siterubyver/#{c['arch']}"
-end
-libdir = '-* dummy libdir *-'
-stdruby = '-* dummy rubylibdir *-'
-siteruby = '-* dummy site_ruby *-'
-siterubyver = '-* dummy site_ruby version *-'
-parameterize = lambda {|path|
-  path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')\
-      .sub(/\A#{Regexp.quote(libdir)}/,      '$libdir')\
-      .sub(/\A#{Regexp.quote(stdruby)}/,     '$stdruby')\
-      .sub(/\A#{Regexp.quote(siteruby)}/,    '$siteruby')\
-      .sub(/\A#{Regexp.quote(siterubyver)}/, '$siterubyver')
-}
-libdir          = parameterize.call(c['libdir'])
-stdruby         = parameterize.call(_stdruby)
-siteruby        = parameterize.call(_siteruby)
-siterubyver     = parameterize.call(_siterubyver)
-siterubyverarch = parameterize.call(_siterubyverarch)
-
-if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
-  makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
-else
-  makeprog = 'make'
-end
-
-common_conf = [
-  PathItem.new('prefix', 'path', c['prefix'],
-               'path prefix of target environment'),
-  PathItem.new('bindir', 'path', parameterize.call(c['bindir']),
-               'the directory for commands'),
-  PathItem.new('libdir', 'path', libdir,
-               'the directory for libraries'),
-  PathItem.new('datadir', 'path', parameterize.call(c['datadir']),
-               'the directory for shared data'),
-  PathItem.new('mandir', 'path', parameterize.call(c['mandir']),
-               'the directory for man pages'),
-  PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']),
-               'the directory for man pages'),
-  PathItem.new('stdruby', 'path', stdruby,
-               'the directory for standard ruby libraries'),
-  PathItem.new('siteruby', 'path', siteruby,
-      'the directory for version-independent aux ruby libraries'),
-  PathItem.new('siterubyver', 'path', siterubyver,
-               'the directory for aux ruby libraries'),
-  PathItem.new('siterubyverarch', 'path', siterubyverarch,
-               'the directory for aux ruby binaries'),
-  PathItem.new('rbdir', 'path', '$siterubyver',
-               'the directory for ruby scripts'),
-  PathItem.new('sodir', 'path', '$siterubyverarch',
-               'the directory for ruby extentions'),
-  PathItem.new('rubypath', 'path', rubypath,
-               'the path to set to #! line'),
-  ProgramItem.new('rubyprog', 'name', rubypath,
-                  'the ruby program using for installation'),
-  ProgramItem.new('makeprog', 'name', makeprog,
-                  'the make program to compile ruby extentions'),
-  SelectItem.new('shebang', 'all/ruby/never', 'ruby',
-                 'shebang line (#!) editing mode'),
-  BoolItem.new('without-ext', 'yes/no', 'no',
-               'does not compile/install ruby extentions')
-]
-class ConfigTable_class   # open again
-  ALIASES = {
-    'std-ruby'         => 'stdruby',
-    'site-ruby-common' => 'siteruby',     # For backward compatibility
-    'site-ruby'        => 'siterubyver',  # For backward compatibility
-    'bin-dir'          => 'bindir',
-    'bin-dir'          => 'bindir',
-    'rb-dir'           => 'rbdir',
-    'so-dir'           => 'sodir',
-    'data-dir'         => 'datadir',
-    'ruby-path'        => 'rubypath',
-    'ruby-prog'        => 'rubyprog',
-    'ruby'             => 'rubyprog',
-    'make-prog'        => 'makeprog',
-    'make'             => 'makeprog'
-  }
-end
-multipackage_conf = [
-  PackageSelectionItem.new('with', 'name,name...', '', 'ALL',
-                           'package names that you want to install'),
-  PackageSelectionItem.new('without', 'name,name...', '', 'NONE',
-                           'package names that you do not want to install')
-]
-if multipackage_install?
-  ConfigTable = ConfigTable_class.new(common_conf + multipackage_conf)
-else
-  ConfigTable = ConfigTable_class.new(common_conf)
-end
-
-
-module MetaConfigAPI
-
-  def eval_file_ifexist(fname)
-    instance_eval File.read(fname), fname, 1 if File.file?(fname)
-  end
-
-  def config_names
-    ConfigTable.map {|i| i.name }
-  end
-
-  def config?(name)
-    ConfigTable.key?(name)
-  end
-
-  def bool_config?(name)
-    ConfigTable.lookup(name).config_type == 'bool'
-  end
-
-  def path_config?(name)
-    ConfigTable.lookup(name).config_type == 'path'
-  end
-
-  def value_config?(name)
-    case ConfigTable.lookup(name).config_type
-    when 'bool', 'path'
-      true
-    else
-      false
-    end
-  end
-
-  def add_config(item)
-    ConfigTable.add item
-  end
-
-  def add_bool_config(name, default, desc)
-    ConfigTable.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc)
-  end
-
-  def add_path_config(name, default, desc)
-    ConfigTable.add PathItem.new(name, 'path', default, desc)
-  end
-
-  def set_config_default(name, default)
-    ConfigTable.lookup(name).default = default
-  end
-
-  def remove_config(name)
-    ConfigTable.remove(name)
-  end
-
-	def add_script_extension(ext)
-		ConfigTable.script_extensions << ext
-	end
-end
-
-
-#
-# File Operations
-#
-
-module FileOperations
-
-  def mkdir_p(dirname, prefix = nil)
-    dirname = prefix + File.expand_path(dirname) if prefix
-    $stderr.puts "mkdir -p #{dirname}" if verbose?
-    return if no_harm?
-
-    # does not check '/'... it's too abnormal case
-    dirs = File.expand_path(dirname).split(%r<(?=/)>)
-    if /\A[a-z]:\z/i =~ dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless File.dir?(path)
-    end
-  end
-
-  def rm_f(fname)
-    $stderr.puts "rm -f #{fname}" if verbose?
-    return if no_harm?
-
-    if File.exist?(fname) or File.symlink?(fname)
-      File.chmod 0777, fname
-      File.unlink fname
-    end
-  end
-
-  def rm_rf(dn)
-    $stderr.puts "rm -rf #{dn}" if verbose?
-    return if no_harm?
-
-    Dir.chdir dn
-    Dir.foreach('.') do |fn|
-      next if fn == '.'
-      next if fn == '..'
-      if File.dir?(fn)
-        verbose_off {
-          rm_rf fn
-        }
-      else
-        verbose_off {
-          rm_f fn
-        }
-      end
-    end
-    Dir.chdir '..'
-    Dir.rmdir dn
-  end
-
-  def move_file(src, dest)
-    File.unlink dest if File.exist?(dest)
-    begin
-      File.rename src, dest
-    rescue
-      File.open(dest, 'wb') {|f| f.write File.binread(src) }
-      File.chmod File.stat(src).mode, dest
-      File.unlink src
-    end
-  end
-
-  def install(from, dest, mode, prefix = nil)
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix ? prefix + File.expand_path(dest) : dest
-    realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
-    str = File.binread(from)
-    if diff?(str, realdest)
-      verbose_off {
-        rm_f realdest if File.exist?(realdest)
-      }
-      File.open(realdest, 'wb') {|f|
-        f.write str
-      }
-      File.chmod mode, realdest
-
-      File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
-        if prefix
-          f.puts realdest.sub(prefix, '')
-        else
-          f.puts realdest
-        end
-      }
-    end
-  end
-
-  def diff?(new_content, path)
-    return true unless File.exist?(path)
-    new_content != File.binread(path)
-  end
-
-  def command(str)
-    $stderr.puts str if verbose?
-    system str or raise RuntimeError, "'system #{str}' failed"
-  end
-
-  def ruby(str)
-    command config('rubyprog') + ' ' + str
-  end
-  
-  def make(task = '')
-    command config('makeprog') + ' ' + task
-  end
-
-  def extdir?(dir)
-    File.exist?(dir + '/MANIFEST')
-  end
-
-  def all_files_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|ent| File.file?("#{dirname}/#{ent}") }
-    }
-  end
-
-  REJECT_DIRS = %w(
-    CVS SCCS RCS CVS.adm .svn
-  )
-
-  def all_dirs_in(dirname)
-    Dir.open(dirname) {|d|
-      return d.select {|n| File.dir?("#{dirname}/#{n}") } - %w(. ..) - REJECT_DIRS
-    }
-  end
-
-end
-
-
-#
-# Main Installer
-#
-
-module HookUtils
-
-  def run_hook(name)
-    try_run_hook "#{curr_srcdir()}/#{name}" or
-    try_run_hook "#{curr_srcdir()}/#{name}.rb"
-  end
-
-  def try_run_hook(fname)
-    return false unless File.file?(fname)
-    begin
-      instance_eval File.read(fname), fname, 1
-    rescue
-      setup_rb_error "hook #{fname} failed:\n" + $!.message
-    end
-    true
-  end
-
-end
-
-
-module HookScriptAPI
-
-  def get_config(key)
-    @config[key]
-  end
-
-  alias config get_config
-
-  def set_config(key, val)
-    @config[key] = val
-  end
-
-  #
-  # srcdir/objdir (works only in the package directory)
-  #
-
-  #abstract srcdir_root
-  #abstract objdir_root
-  #abstract relpath
-
-  def curr_srcdir
-    "#{srcdir_root()}/#{relpath()}"
-  end
-
-  def curr_objdir
-    "#{objdir_root()}/#{relpath()}"
-  end
-
-  def srcfile(path)
-    "#{curr_srcdir()}/#{path}"
-  end
-
-  def srcexist?(path)
-    File.exist?(srcfile(path))
-  end
-
-  def srcdirectory?(path)
-    File.dir?(srcfile(path))
-  end
-  
-  def srcfile?(path)
-    File.file? srcfile(path)
-  end
-
-  def srcentries(path = '.')
-    Dir.open("#{curr_srcdir()}/#{path}") {|d|
-      return d.to_a - %w(. ..)
-    }
-  end
-
-  def srcfiles(path = '.')
-    srcentries(path).select {|fname|
-      File.file?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-  def srcdirectories(path = '.')
-    srcentries(path).select {|fname|
-      File.dir?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-end
-
-
-class ToplevelInstaller
-
-  Version   = '3.3.1'
-  Copyright = 'Copyright (c) 2000-2004 Minero Aoki'
-
-  TASKS = [
-    [ 'all',      'do config, setup, then install' ],
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles ruby extentions and others' ],
-    [ 'install',  'installs files' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-  def ToplevelInstaller.invoke
-    instance().invoke
-  end
-
-  @singleton = nil
-
-  def ToplevelInstaller.instance
-    @singleton ||= new(File.dirname($0))
-    @singleton
-  end
-
-  include MetaConfigAPI
-
-  def initialize(ardir_root)
-    @config = nil
-    @options = { 'verbose' => true }
-    @ardir = File.expand_path(ardir_root)
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__()}>"
-  end
-
-  def invoke
-    run_metaconfigs
-    case task = parsearg_global()
-    when nil, 'all'
-      @config = load_config('config')
-      parsearg_config
-      init_installers
-      exec_config
-      exec_setup
-      exec_install
-    else
-      @config = load_config(task)
-      __send__ "parsearg_#{task}"
-      init_installers
-      __send__ "exec_#{task}"
-    end
-  end
-  
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-  end
-
-  def load_config(task)
-    case task
-    when 'config'
-      ConfigTable.new
-    when 'clean', 'distclean'
-      if File.exist?(ConfigTable.savefile)
-      then ConfigTable.load
-      else ConfigTable.new
-      end
-    else
-      ConfigTable.load
-    end
-  end
-
-  def init_installers
-    @installer = Installer.new(@config, @options, @ardir, File.expand_path('.'))
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @ardir
-  end
-
-  def objdir_root
-    '.'
-  end
-
-  def relpath
-    '.'
-  end
-
-  #
-  # Option Parsing
-  #
-
-  def parsearg_global
-    valid_task = /\A(?:#{TASKS.map {|task,desc| task }.join '|'})\z/
-
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        setup_rb_error "invalid task: #{arg}" unless valid_task =~ arg
-        return arg
-
-      when '-q', '--quiet'
-        @options['verbose'] = false
-
-      when       '--verbose'
-        @options['verbose'] = true
-
-      when '-h', '--help'
-        print_usage $stdout
-        exit 0
-
-      when '-v', '--version'
-        puts "#{File.basename($0)} version #{Version}"
-        exit 0
-      
-      when '--copyright'
-        puts Copyright
-        exit 0
-
-      else
-        setup_rb_error "unknown global option '#{arg}'"
-      end
-    end
-
-    nil
-  end
-
-
-  def parsearg_no_options
-    unless ARGV.empty?
-      setup_rb_error "#{task}:  unknown options: #{ARGV.join ' '}"
-    end
-  end
-
-  alias parsearg_show       parsearg_no_options
-  alias parsearg_setup      parsearg_no_options
-  alias parsearg_clean      parsearg_no_options
-  alias parsearg_distclean  parsearg_no_options
-
-  def parsearg_config
-    re = /\A--(#{ConfigTable.map {|i| i.name }.join('|')})(?:=(.*))?\z/
-    @options['config-opt'] = []
-
-    while i = ARGV.shift
-      if /\A--?\z/ =~ i
-        @options['config-opt'] = ARGV.dup
-        break
-      end
-      m = re.match(i)  or setup_rb_error "config: unknown option #{i}"
-      name, value = *m.to_a[1,2]
-      @config[name] = value
-    end
-  end
-
-  def parsearg_install
-    @options['no-harm'] = false
-    @options['install-prefix'] = ''
-    while a = ARGV.shift
-      case a
-      when /\A--no-harm\z/
-        @options['no-harm'] = true
-      when /\A--prefix=(.*)\z/
-        path = $1
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @options['install-prefix'] = path
-      else
-        setup_rb_error "install: unknown option #{a}"
-      end
-    end
-  end
-
-  def print_usage(out)
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-24s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '-h,--help',    'print this message'
-    out.printf fmt, '-v,--version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf fmt, name, desc
-    end
-
-    fmt = "  %-24s %s [%s]\n"
-    out.puts
-    out.puts 'Options for CONFIG or ALL:'
-    ConfigTable.each do |item|
-      out.printf fmt, item.help_opt, item.description, item.help_default
-    end
-    out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's"
-    out.puts
-    out.puts 'Options for INSTALL:'
-    out.printf fmt, '--no-harm', 'only display what to do if given', 'off'
-    out.printf fmt, '--prefix=path',  'install path prefix', '$prefix'
-    out.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    @installer.exec_config
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    @installer.exec_setup
-  end
-
-  def exec_install
-    @installer.exec_install
-  end
-
-  def exec_show
-    ConfigTable.each do |i|
-      printf "%-20s %s\n", i.name, i.value
-    end
-  end
-
-  def exec_clean
-    @installer.exec_clean
-  end
-
-  def exec_distclean
-    @installer.exec_distclean
-  end
-
-end
-
-
-class ToplevelInstallerMulti < ToplevelInstaller
-
-  include HookUtils
-  include HookScriptAPI
-  include FileOperations
-
-  def initialize(ardir)
-    super
-    @packages = all_dirs_in("#{@ardir}/packages")
-    raise 'no package exists' if @packages.empty?
-  end
-
-  def run_metaconfigs
-    eval_file_ifexist "#{@ardir}/metaconfig"
-    @packages.each do |name|
-      eval_file_ifexist "#{@ardir}/packages/#{name}/metaconfig"
-    end
-  end
-
-  def init_installers
-    @installers = {}
-    @packages.each do |pack|
-      @installers[pack] = Installer.new(@config, @options,
-                                       "#{@ardir}/packages/#{pack}",
-                                       "packages/#{pack}")
-    end
-
-    with    = extract_selection(config('with'))
-    without = extract_selection(config('without'))
-    @selected = @installers.keys.select {|name|
-                  (with.empty? or with.include?(name)) \
-                      and not without.include?(name)
-                }
-  end
-
-  def extract_selection(list)
-    a = list.split(/,/)
-    a.each do |name|
-      setup_rb_error "no such package: #{name}"  unless @installers.key?(name)
-    end
-    a
-  end
-
-  def print_usage(f)
-    super
-    f.puts 'Inluded packages:'
-    f.puts '  ' + @packages.sort.join(' ')
-    f.puts
-  end
-
-  #
-  # multi-package metaconfig API
-  #
-
-  attr_reader :packages
-
-  def declare_packages(list)
-    raise 'package list is empty' if list.empty?
-    list.each do |name|
-      raise "directory packages/#{name} does not exist"\
-              unless File.dir?("#{@ardir}/packages/#{name}")
-    end
-    @packages = list
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    run_hook 'pre-config'
-    each_selected_installers {|inst| inst.exec_config }
-    run_hook 'post-config'
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    run_hook 'pre-setup'
-    each_selected_installers {|inst| inst.exec_setup }
-    run_hook 'post-setup'
-  end
-
-  def exec_install
-    run_hook 'pre-install'
-    each_selected_installers {|inst| inst.exec_install }
-    run_hook 'post-install'
-  end
-
-  def exec_clean
-    rm_f ConfigTable.savefile
-    run_hook 'pre-clean'
-    each_selected_installers {|inst| inst.exec_clean }
-    run_hook 'post-clean'
-  end
-
-  def exec_distclean
-    rm_f ConfigTable.savefile
-    run_hook 'pre-distclean'
-    each_selected_installers {|inst| inst.exec_distclean }
-    run_hook 'post-distclean'
-  end
-
-  #
-  # lib
-  #
-
-  def each_selected_installers
-    Dir.mkdir 'packages' unless File.dir?('packages')
-    @selected.each do |pack|
-      $stderr.puts "Processing the package `#{pack}' ..." if @options['verbose']
-      Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
-      Dir.chdir "packages/#{pack}"
-      yield @installers[pack]
-      Dir.chdir '../..'
-    end
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-end
-
-
-class Installer
-
-  FILETYPES = %w( bin lib ext data )
-
-  include HookScriptAPI
-  include HookUtils
-  include FileOperations
-
-  def initialize(config, opt, srcroot, objroot)
-    @config = config
-    @options = opt
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{File.basename(@srcdir)}>"
-  end
-
-  #
-  # Hook Script API base methods
-  #
-
-  def srcdir_root
-    @srcdir
-  end
-
-  def objdir_root
-    @objdir
-  end
-
-  def relpath
-    @currdir
-  end
-
-  #
-  # configs/options
-  #
-
-  def no_harm?
-    @options['no-harm']
-  end
-
-  def verbose?
-    @options['verbose']
-  end
-
-  def verbose_off
-    begin
-      save, @options['verbose'] = @options['verbose'], false
-      yield
-    ensure
-      @options['verbose'] = save
-    end
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  def config_dir_bin(rel)
-  end
-
-  def config_dir_lib(rel)
-  end
-
-  def config_dir_ext(rel)
-    extconf if extdir?(curr_srcdir())
-  end
-
-  def extconf
-    opt = @options['config-opt'].join(' ')
-    command "#{config('rubyprog')} #{curr_srcdir()}/extconf.rb #{opt}"
-  end
-
-  def config_dir_data(rel)
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin(rel)
-    all_files_in(curr_srcdir()).each do |fname|
-      adjust_shebang "#{curr_srcdir()}/#{fname}"
-    end
-  end
-
-  def adjust_shebang(path)
-    return if no_harm?
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(path, 'rb') {|r|
-        first = r.gets
-        return unless File.basename(config('rubypath')) == 'ruby'
-        return unless File.basename(first.sub(/\A\#!/, '').split[0]) == 'ruby'
-        $stderr.puts "adjusting shebang: #{File.basename(path)}" if verbose?
-        File.open(tmpfile, 'wb') {|w|
-          w.print first.sub(/\A\#!\s*\S+/, '#! ' + config('rubypath'))
-          w.write r.read
-        }
-        move_file tmpfile, File.basename(path)
-      }
-    ensure
-      File.unlink tmpfile if File.exist?(tmpfile)
-    end
-  end
-
-  def setup_dir_lib(rel)
-  end
-
-  def setup_dir_ext(rel)
-    make if extdir?(curr_srcdir())
-  end
-
-  def setup_dir_data(rel)
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    rm_f 'InstalledFiles'
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin(rel)
-    install_files collect_filenames_auto(), "#{config('bindir')}/#{rel}", 0755
-  end
-
-  def install_dir_lib(rel)
-    install_files ruby_scripts(), "#{config('rbdir')}/#{rel}", 0644
-  end
-
-  def install_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    install_files ruby_extentions('.'),
-                  "#{config('sodir')}/#{File.dirname(rel)}",
-                  0555
-  end
-
-  def install_dir_data(rel)
-    install_files collect_filenames_auto(), "#{config('datadir')}/#{rel}", 0644
-  end
-
-  def install_files(list, dest, mode)
-    mkdir_p dest, @options['install-prefix']
-    list.each do |fname|
-      install fname, dest, mode, @options['install-prefix']
-    end
-  end
-
-  def ruby_scripts
-    collect_filenames_auto().select {|n| /\.(#{ConfigTable.script_extensions.join('|')})\z/ =~ n }
-  end
-  
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  reject_patterns = %w( 
-    core RCSLOG tags TAGS .make.state
-    .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
-    *~ *.old *.bak *.BAK *.orig *.rej _$* *$
-
-    *.org *.in .*
-  )
-  mapping = {
-    '.' => '\.',
-    '$' => '\$',
-    '#' => '\#',
-    '*' => '.*'
-  }
-  REJECT_PATTERNS = Regexp.new('\A(?:' +
-                               reject_patterns.map {|pat|
-                                 pat.gsub(/[\.\$\#\*]/) {|ch| mapping[ch] }
-                               }.join('|') +
-                               ')\z')
-
-  def collect_filenames_auto
-    mapdir((existfiles() - hookfiles()).reject {|fname|
-             REJECT_PATTERNS =~ fname
-           })
-  end
-
-  def existfiles
-    all_files_in(curr_srcdir()) | all_files_in('.')
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-      %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def mapdir(filelist)
-    filelist.map {|fname|
-      if File.exist?(fname)   # objdir
-        fname
-      else                    # srcdir
-        File.join(curr_srcdir(), fname)
-      end
-    }
-  end
-
-  def ruby_extentions(dir)
-    Dir.open(dir) {|d|
-      ents = d.select {|fname| /\.#{::Config::CONFIG['DLEXT']}\z/ =~ fname }
-      if ents.empty?
-        setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first"
-      end
-      return ents
-    }
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f ConfigTable.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  def clean_dir_bin(rel)
-  end
-
-  def clean_dir_lib(rel)
-  end
-
-  def clean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'clean' if File.file?('Makefile')
-  end
-
-  def clean_dir_data(rel)
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f ConfigTable.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  def distclean_dir_bin(rel)
-  end
-
-  def distclean_dir_lib(rel)
-  end
-
-  def distclean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'distclean' if File.file?('Makefile')
-  end
-
-  #
-  # lib
-  #
-
-  def exec_task_traverse(task)
-    run_hook "pre-#{task}"
-    FILETYPES.each do |type|
-      if config('without-ext') == 'yes' and type == 'ext'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, "#{task}_dir_#{type}"
-    end
-    run_hook "post-#{task}"
-  end
-
-  def traverse(task, rel, mid)
-    dive_into(rel) {
-      run_hook "pre-#{task}"
-      __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-      all_dirs_in(curr_srcdir()).each do |d|
-        traverse task, "#{rel}/#{d}", mid
-      end
-      run_hook "post-#{task}"
-    }
-  end
-
-  def dive_into(rel)
-    return unless File.dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless File.dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-end
-
-
-if $0 == __FILE__
-  begin
-    if multipackage_install?
-      ToplevelInstallerMulti.invoke
-    else
-      ToplevelInstaller.invoke
-    end
-  rescue SetupError
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/tc_mime_type.rb b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/tc_mime_type.rb
deleted file mode 100644
index 4121edd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/tc_mime_type.rb
+++ /dev/null
@@ -1,275 +0,0 @@
-#! /usr/bin/env ruby
-#--
-# MIME::Types for Ruby
-#   http://rubyforge.org/projects/mime-types/
-#   Copyright 2003 - 2005 Austin Ziegler.
-#   Licensed under a MIT-style licence.
-#
-# $Id: tc_mime_type.rb,v 1.2 2006/02/12 21:27:22 austin Exp $
-#++
-$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
-
-require 'mime/types'
-require 'test/unit'
-
-class Test_MIME__Type < Test::Unit::TestCase #:nodoc:
-  def setup
-    @zip = MIME::Type.new('x-appl/x-zip') { |t| t.extensions = ['zip', 'zp'] }
-  end
-
-  def test_CMP # '<=>'
-    assert(MIME::Type.new('text/plain') == MIME::Type.new('text/plain'))
-    assert(MIME::Type.new('text/plain') != MIME::Type.new('image/jpeg'))
-    assert(MIME::Type.new('text/plain') == 'text/plain')
-    assert(MIME::Type.new('text/plain') != 'image/jpeg')
-    assert(MIME::Type.new('text/plain') > MIME::Type.new('text/html'))
-    assert(MIME::Type.new('text/plain') > 'text/html')
-    assert(MIME::Type.new('text/html') < MIME::Type.new('text/plain'))
-    assert(MIME::Type.new('text/html') < 'text/plain')
-    assert('text/html' == MIME::Type.new('text/html'))
-    assert('text/html' < MIME::Type.new('text/plain'))
-    assert('text/plain' > MIME::Type.new('text/html'))
-  end
-
-  def test_ascii?
-    assert(MIME::Type.new('text/plain').ascii?)
-    assert(!MIME::Type.new('image/jpeg').ascii?)
-    assert(!MIME::Type.new('application/x-msword').ascii?)
-    assert(MIME::Type.new('text/vCard').ascii?)
-    assert(!MIME::Type.new('application/pkcs7-mime').ascii?)
-    assert(!@zip.ascii?)
-  end
-
-  def test_binary?
-    assert(!MIME::Type.new('text/plain').binary?)
-    assert(MIME::Type.new('image/jpeg').binary?)
-    assert(MIME::Type.new('application/x-msword').binary?)
-    assert(!MIME::Type.new('text/vCard').binary?)
-    assert(MIME::Type.new('application/pkcs7-mime').binary?)
-    assert(@zip.binary?)
-  end
-
-  def test_complete?
-    assert_nothing_raised do
-      @yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                    'linux')
-    end
-    assert(@yaml.complete?)
-    assert_nothing_raised { @yaml.extensions = nil }
-    assert(!@yaml.complete?)
-  end
-
-  def test_content_type
-    assert_equal(MIME::Type.new('text/plain').content_type, 'text/plain')
-    assert_equal(MIME::Type.new('image/jpeg').content_type, 'image/jpeg')
-    assert_equal(MIME::Type.new('application/x-msword').content_type, 'application/x-msword')
-    assert_equal(MIME::Type.new('text/vCard').content_type, 'text/vCard')
-    assert_equal(MIME::Type.new('application/pkcs7-mime').content_type, 'application/pkcs7-mime')
-    assert_equal(@zip.content_type, 'x-appl/x-zip');
-  end
-
-  def test_encoding
-    assert_equal(MIME::Type.new('text/plain').encoding, 'quoted-printable')
-    assert_equal(MIME::Type.new('image/jpeg').encoding, 'base64')
-    assert_equal(MIME::Type.new('application/x-msword').encoding, 'base64')
-    assert_equal(MIME::Type.new('text/vCard').encoding, 'quoted-printable')
-    assert_equal(MIME::Type.new('application/pkcs7-mime').encoding, 'base64')
-    assert_nothing_raised do
-      @yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                    'linux')
-    end
-    assert_equal(@yaml.encoding, '8bit')
-    assert_nothing_raised { @yaml.encoding = 'base64' }
-    assert_equal(@yaml.encoding, 'base64')
-    assert_nothing_raised { @yaml.encoding = :default }
-    assert_equal(@yaml.encoding, 'quoted-printable')
-    assert_raises(ArgumentError) { @yaml.encoding = 'binary' }
-    assert_equal(@zip.encoding, 'base64')
-  end
-
-  def test_eql?
-    assert(MIME::Type.new('text/plain').eql?(MIME::Type.new('text/plain')))
-    assert(!MIME::Type.new('text/plain').eql?(MIME::Type.new('image/jpeg')))
-    assert(!MIME::Type.new('text/plain').eql?('text/plain'))
-    assert(!MIME::Type.new('text/plain').eql?('image/jpeg'))
-  end
-
-  def test_extensions
-    assert_nothing_raised do
-      @yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                    'linux')
-    end
-    assert_equal(@yaml.extensions, ['yaml', 'yml'])
-    assert_nothing_raised { @yaml.extensions = 'yaml' }
-    assert_equal(@yaml.extensions, ['yaml'])
-    assert_equal(@zip.extensions.size, 2)
-    assert_equal(@zip.extensions, ['zip', 'zp'])
-  end
-
-  def test_like?
-    assert(MIME::Type.new('text/plain').like?(MIME::Type.new('text/plain')))
-    assert(MIME::Type.new('text/plain').like?(MIME::Type.new('text/x-plain')))
-    assert(!MIME::Type.new('text/plain').like?(MIME::Type.new('image/jpeg')))
-    assert(MIME::Type.new('text/plain').like?('text/plain'))
-    assert(MIME::Type.new('text/plain').like?('text/x-plain'))
-    assert(!MIME::Type.new('text/plain').like?('image/jpeg'))
-  end
-
-  def test_media_type
-    assert_equal(MIME::Type.new('text/plain').media_type, 'text')
-    assert_equal(MIME::Type.new('image/jpeg').media_type, 'image')
-    assert_equal(MIME::Type.new('application/x-msword').media_type, 'application')
-    assert_equal(MIME::Type.new('text/vCard').media_type, 'text')
-    assert_equal(MIME::Type.new('application/pkcs7-mime').media_type, 'application')
-    assert_equal(MIME::Type.new('x-chemical/x-pdb').media_type, 'chemical')
-    assert_equal(@zip.media_type, 'appl')
-  end
-
-  def test_platform?
-    assert_nothing_raised do
-      @yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                    'oddbox')
-    end
-    assert(!@yaml.platform?)
-    assert_nothing_raised { @yaml.system = nil }
-    assert(!@yaml.platform?)
-    assert_nothing_raised { @yaml.system = /#{RUBY_PLATFORM}/ }
-    assert(@yaml.platform?)
-  end
-
-  def test_raw_media_type
-    assert_equal(MIME::Type.new('text/plain').raw_media_type, 'text')
-    assert_equal(MIME::Type.new('image/jpeg').raw_media_type, 'image')
-    assert_equal(MIME::Type.new('application/x-msword').raw_media_type, 'application')
-    assert_equal(MIME::Type.new('text/vCard').raw_media_type, 'text')
-    assert_equal(MIME::Type.new('application/pkcs7-mime').raw_media_type, 'application')
-
-    assert_equal(MIME::Type.new('x-chemical/x-pdb').raw_media_type, 'x-chemical')
-    assert_equal(@zip.raw_media_type, 'x-appl')
-  end
-
-  def test_raw_sub_type
-    assert_equal(MIME::Type.new('text/plain').raw_sub_type, 'plain')
-    assert_equal(MIME::Type.new('image/jpeg').raw_sub_type, 'jpeg')
-    assert_equal(MIME::Type.new('application/x-msword').raw_sub_type, 'x-msword')
-    assert_equal(MIME::Type.new('text/vCard').raw_sub_type, 'vCard')
-    assert_equal(MIME::Type.new('application/pkcs7-mime').raw_sub_type, 'pkcs7-mime')
-    assert_equal(@zip.raw_sub_type, 'x-zip')
-  end
-
-  def test_registered?
-    assert(MIME::Type.new('text/plain').registered?)
-    assert(MIME::Type.new('image/jpeg').registered?)
-    assert(!MIME::Type.new('application/x-msword').registered?)
-    assert(MIME::Type.new('text/vCard').registered?)
-    assert(MIME::Type.new('application/pkcs7-mime').registered?)
-    assert(!@zip.registered?)
-  end
-
-  def test_signature?
-    assert(!MIME::Type.new('text/plain').signature?)
-    assert(!MIME::Type.new('image/jpeg').signature?)
-    assert(!MIME::Type.new('application/x-msword').signature?)
-    assert(MIME::Type.new('text/vCard').signature?)
-    assert(MIME::Type.new('application/pkcs7-mime').signature?)
-  end
-
-  def test_simplified
-    assert_equal(MIME::Type.new('text/plain').simplified, 'text/plain')
-    assert_equal(MIME::Type.new('image/jpeg').simplified, 'image/jpeg')
-    assert_equal(MIME::Type.new('application/x-msword').simplified, 'application/msword')
-    assert_equal(MIME::Type.new('text/vCard').simplified, 'text/vcard')
-    assert_equal(MIME::Type.new('application/pkcs7-mime').simplified, 'application/pkcs7-mime')
-    assert_equal(MIME::Type.new('x-chemical/x-pdb').simplified, 'chemical/pdb')
-  end
-
-  def test_sub_type
-    assert_equal(MIME::Type.new('text/plain').sub_type, 'plain')
-    assert_equal(MIME::Type.new('image/jpeg').sub_type, 'jpeg')
-    assert_equal(MIME::Type.new('application/x-msword').sub_type, 'msword')
-    assert_equal(MIME::Type.new('text/vCard').sub_type, 'vcard')
-    assert_equal(MIME::Type.new('application/pkcs7-mime').sub_type, 'pkcs7-mime')
-    assert_equal(@zip.sub_type, 'zip')
-  end
-
-  def test_system
-    assert_nothing_raised do
-      @yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                    'linux')
-    end
-    assert_equal(@yaml.system, %r{linux})
-    assert_nothing_raised { @yaml.system = /win32/ }
-    assert_equal(@yaml.system, %r{win32})
-    assert_nothing_raised { @yaml.system = nil }
-    assert_nil(@yaml.system)
-  end
-
-  def test_system?
-    assert_nothing_raised do
-      @yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                    'linux')
-    end
-    assert(@yaml.system?)
-    assert_nothing_raised { @yaml.system = nil }
-    assert(!@yaml.system?)
-  end
-
-  def test_to_a
-    assert_nothing_raised do
-      @yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                    'linux')
-    end
-    assert_equal(@yaml.to_a, ['text/x-yaml', ['yaml', 'yml'], '8bit',
-                 /linux/, nil, nil, nil, false])
-  end
-
-  def test_to_hash
-    assert_nothing_raised do
-      @yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                    'linux')
-    end
-    assert_equal(@yaml.to_hash,
-                  { 'Content-Type' => 'text/x-yaml',
-                    'Content-Transfer-Encoding' => '8bit',
-                    'Extensions' => ['yaml', 'yml'],
-                    'System' => /linux/,
-                    'Registered' => false,
-                    'URL' => nil,
-                    'Obsolete' => nil,
-                    'Docs' => nil })
-  end
-
-  def test_to_s
-    assert_equal("#{MIME::Type.new('text/plain')}", 'text/plain')
-  end
-
-  def test_s_constructors
-    assert_not_nil(@zip)
-    yaml = MIME::Type.from_array('text/x-yaml', ['yaml', 'yml'], '8bit',
-                                  'linux')
-    assert_instance_of(MIME::Type, yaml)
-    yaml = MIME::Type.from_hash('Content-Type' => 'text/x-yaml',
-                                'Content-Transfer-Encoding' => '8bit',
-                                'System' => 'linux',
-                                'Extensions' => ['yaml', 'yml'])
-    assert_instance_of(MIME::Type, yaml)
-    yaml = MIME::Type.new('text/x-yaml') do |y|
-      y.extensions = ['yaml', 'yml']
-      y.encoding = '8bit'
-      y.system = 'linux'
-    end
-    assert_instance_of(MIME::Type, yaml)
-    assert_raises(MIME::InvalidContentType) { MIME::Type.new('apps') }
-    assert_raises(MIME::InvalidContentType) { MIME::Type.new(nil) }
-  end
-
-  def test_s_simplified
-    assert_equal(MIME::Type.simplified('text/plain'), 'text/plain')
-    assert_equal(MIME::Type.simplified('image/jpeg'), 'image/jpeg')
-    assert_equal(MIME::Type.simplified('application/x-msword'), 'application/msword')
-    assert_equal(MIME::Type.simplified('text/vCard'), 'text/vcard')
-    assert_equal(MIME::Type.simplified('application/pkcs7-mime'), 'application/pkcs7-mime')
-    assert_equal(@zip.simplified, 'appl/zip')
-    assert_equal(MIME::Type.simplified('x-xyz/abc'), 'xyz/abc')
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/tc_mime_types.rb b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/tc_mime_types.rb
deleted file mode 100644
index e48f9e2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/tc_mime_types.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-#! /usr/bin/env ruby
-#--
-# MIME::Types for Ruby
-#   http://rubyforge.org/projects/mime-types/
-#   Copyright 2003 - 2005 Austin Ziegler.
-#   Licensed under a MIT-style licence.
-#
-# $Id: tc_mime_types.rb,v 1.2 2006/02/12 21:27:22 austin Exp $
-#++
-$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
-
-require 'mime/types'
-require 'test/unit'
-
-class TestMIME__Types < Test::Unit::TestCase #:nodoc:
-  def test_s_AREF # singleton method '[]'
-    text_plain = MIME::Type.new('text/plain') do |t|
-      t.encoding = '8bit'
-      t.extensions = ['asc', 'txt', 'c', 'cc', 'h', 'hh', 'cpp', 'hpp',
-        'dat', 'hlp']
-    end
-    text_plain_vms = MIME::Type.new('text/plain') do |t|
-      t.encoding = '8bit'
-      t.extensions = ['doc']
-      t.system = 'vms'
-    end
-    text_vnd_fly = MIME::Type.new('text/vnd.fly')
-    assert_equal(MIME::Types['text/plain'].sort,
-                 [text_plain, text_plain_vms].sort)
-
-    tst_bmp = MIME::Types["image/x-bmp"] +
-      MIME::Types["image/vnd.wap.wbmp"] + MIME::Types["image/x-win-bmp"]
-
-    assert_equal(tst_bmp.sort, MIME::Types[/bmp$/].sort)
-    assert_nothing_raised {
-      MIME::Types['image/bmp'][0].system = RUBY_PLATFORM
-    }
-    assert_equal([MIME::Type.from_array('image/x-bmp', ['bmp'])],
-                 MIME::Types[/bmp$/, { :platform => true }])
-
-    assert(MIME::Types['text/vnd.fly', { :complete => true }].empty?)
-    assert(!MIME::Types['text/plain', { :complete => true} ].empty?)
-  end
-
-  def test_s_add
-    assert_nothing_raised do
-      @eruby = MIME::Type.new("application/x-eruby") do |t|
-        t.extensions = "rhtml"
-        t.encoding = "8bit"
-      end
-
-      MIME::Types.add(@eruby)
-    end
-
-    assert_equal(MIME::Types['application/x-eruby'], [@eruby])
-  end
-
-  def test_s_type_for
-    assert_equal(MIME::Types.type_for('xml').sort, [ MIME::Types['text/xml'], MIME::Types['application/xml'] ].sort)
-    assert_equal(MIME::Types.type_for('gif'), MIME::Types['image/gif'])
-    assert_nothing_raised do
-      MIME::Types['image/gif'][0].system = RUBY_PLATFORM
-    end
-    assert_equal(MIME::Types.type_for('gif', true), MIME::Types['image/gif'])
-    assert(MIME::Types.type_for('zzz').empty?)
-  end
-
-  def test_s_of
-    assert_equal(MIME::Types.of('xml').sort, [ MIME::Types['text/xml'], MIME::Types['application/xml'] ].sort)
-    assert_equal(MIME::Types.of('gif'), MIME::Types['image/gif'])
-    assert_nothing_raised do
-      MIME::Types['image/gif'][0].system = RUBY_PLATFORM
-    end
-    assert_equal(MIME::Types.of('gif', true), MIME::Types['image/gif'])
-    assert(MIME::Types.of('zzz').empty?)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/testall.rb b/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/testall.rb
deleted file mode 100644
index bdf311f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mime-types-1.15/tests/testall.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /usr/bin/env ruby
-#--
-# MIME::Types for Ruby
-#   http://rubyforge.org/projects/mime-types/
-#   Copyright 2003 - 2005 Austin Ziegler.
-#   Licensed under a MIT-style licence.
-#
-# $Id: testall.rb,v 1.1 2005/07/08 11:58:06 austin Exp $
-#++
-
-$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
-
-puts "Checking for test cases:"
-Dir['tc_*.rb'].each do |testcase|
-  puts "\t#{testcase}"
-  require testcase
-end
-puts
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/CHANGELOG b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/CHANGELOG
deleted file mode 100644
index 637fe89..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/CHANGELOG
+++ /dev/null
@@ -1,18 +0,0 @@
-
-v1.1.5. Fix bug where num_processors is not actually set from mongrel_rails.
-
-v1.1.4. Fix camping handler. Correct treatment of @throttle parameter.
-
-v1.1.3. Fix security flaw of DirHandler; reported on mailing list.
-
-v1.1.2. Fix worker termination bug; fix JRuby 1.0.3 load order issue; fix require issue on systems without Rubygems.
-
-v1.1.1. Fix mongrel_rails restart bug; fix bug with Rack status codes.
-
-v1.1. Pure Ruby URIClassifier. More modular architecture. JRuby support. Move C URIClassifier into mongrel_experimental project.
-
-v1.0.4. Backport fixes for versioning inconsistency, mongrel_rails bug, and DirHandler bug.
-
-v1.0.3. Fix user-switching bug; make people upgrade to the latest from the RC.
-
-v1.0.2. Signed gem; many minor bugfixes and patches.
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/COPYING b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/COPYING
deleted file mode 100644
index e7ada7d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/COPYING
+++ /dev/null
@@ -1,55 +0,0 @@
-Mongrel Web Server (Mongrel) is copyrighted free software by Zed A. Shaw
-<zedshaw at zedshaw dot com> You can redistribute it and/or modify it under
-either the terms of the GPL or the conditions below:
-
-1. You may make and give away verbatim copies of the source form of the
-   software without restriction, provided that you duplicate all of the
-   original copyright notices and associated disclaimers.
-
-2. You may modify your copy of the software in any way, provided that
-   you do at least ONE of the following:
-
-     a) place your modifications in the Public Domain or otherwise make them
-     Freely Available, such as by posting said modifications to Usenet or an
-     equivalent medium, or by allowing the author to include your
-     modifications in the software.
-
-     b) use the modified software only within your corporation or
-        organization.
-
-     c) rename any non-standard executables so the names do not conflict with
-     standard executables, which must also be provided.
-
-     d) make other distribution arrangements with the author.
-
-3. You may distribute the software in object code or executable
-   form, provided that you do at least ONE of the following:
-
-     a) distribute the executables and library files of the software,
-     together with instructions (in the manual page or equivalent) on where
-     to get the original distribution.
-
-     b) accompany the distribution with the machine-readable source of the
-     software.
-
-     c) give non-standard executables non-standard names, with
-        instructions on where to get the original software distribution.
-
-     d) make other distribution arrangements with the author.
-
-4. You may modify and include the part of the software into any other
-   software (possibly commercial).  But some files in the distribution
-   are not written by the author, so that they are not under this terms.
-
-5. The scripts and library files supplied as input to or produced as 
-   output from the software do not automatically fall under the
-   copyright of the software, but belong to whomever generated them, 
-   and may be sold commercially, and may be aggregated with this
-   software.
-
-6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-   PURPOSE.
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/LICENSE b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/LICENSE
deleted file mode 100644
index e5a926e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/LICENSE
+++ /dev/null
@@ -1,55 +0,0 @@
-Mongrel Web Server (Mongrel) is copyrighted free software by Zed A. Shaw
-<zedshaw at zedshaw dot com> and contributors. You can redistribute it 
-and/or modify it under either the terms of the GPL2 or the conditions below:
-
-1. You may make and give away verbatim copies of the source form of the
-   software without restriction, provided that you duplicate all of the
-   original copyright notices and associated disclaimers.
-
-2. You may modify your copy of the software in any way, provided that
-   you do at least ONE of the following:
-
-     a) place your modifications in the Public Domain or otherwise make them
-     Freely Available, such as by posting said modifications to Usenet or an
-     equivalent medium, or by allowing the author to include your
-     modifications in the software.
-
-     b) use the modified software only within your corporation or
-        organization.
-
-     c) rename any non-standard executables so the names do not conflict with
-     standard executables, which must also be provided.
-
-     d) make other distribution arrangements with the author.
-
-3. You may distribute the software in object code or executable
-   form, provided that you do at least ONE of the following:
-
-     a) distribute the executables and library files of the software,
-     together with instructions (in the manual page or equivalent) on where
-     to get the original distribution.
-
-     b) accompany the distribution with the machine-readable source of the
-     software.
-
-     c) give non-standard executables non-standard names, with
-        instructions on where to get the original software distribution.
-
-     d) make other distribution arrangements with the author.
-
-4. You may modify and include the part of the software into any other
-   software (possibly commercial).  But some files in the distribution
-   are not written by the author, so that they are not under this terms.
-
-5. The scripts and library files supplied as input to or produced as 
-   output from the software do not automatically fall under the
-   copyright of the software, but belong to whomever generated them, 
-   and may be sold commercially, and may be aggregated with this
-   software.
-
-6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-   PURPOSE.
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/Manifest b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/Manifest
deleted file mode 100644
index 6a77dad..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/Manifest
+++ /dev/null
@@ -1,69 +0,0 @@
-bin/mongrel_rails
-CHANGELOG
-COPYING
-examples/builder.rb
-examples/camping/blog.rb
-examples/camping/README
-examples/camping/tepee.rb
-examples/httpd.conf
-examples/mime.yaml
-examples/mongrel.conf
-examples/mongrel_simple_ctrl.rb
-examples/mongrel_simple_service.rb
-examples/monitrc
-examples/random_thrash.rb
-examples/simpletest.rb
-examples/webrick_compare.rb
-ext/http11/ext_help.h
-ext/http11/extconf.rb
-ext/http11/http11.c
-ext/http11/http11_parser.c
-ext/http11/http11_parser.h
-ext/http11/http11_parser.java.rl
-ext/http11/http11_parser.rl
-ext/http11/http11_parser_common.rl
-ext/http11_java/Http11Service.java
-ext/http11_java/org/jruby/mongrel/Http11.java
-ext/http11_java/org/jruby/mongrel/Http11Parser.java
-lib/mongrel/camping.rb
-lib/mongrel/cgi.rb
-lib/mongrel/command.rb
-lib/mongrel/configurator.rb
-lib/mongrel/const.rb
-lib/mongrel/debug.rb
-lib/mongrel/gems.rb
-lib/mongrel/handlers.rb
-lib/mongrel/header_out.rb
-lib/mongrel/http_request.rb
-lib/mongrel/http_response.rb
-lib/mongrel/init.rb
-lib/mongrel/mime_types.yml
-lib/mongrel/rails.rb
-lib/mongrel/stats.rb
-lib/mongrel/tcphack.rb
-lib/mongrel/uri_classifier.rb
-lib/mongrel.rb
-LICENSE
-Manifest
-mongrel-public_cert.pem
-mongrel.gemspec
-README
-setup.rb
-test/mime.yaml
-test/mongrel.conf
-test/test_cgi_wrapper.rb
-test/test_command.rb
-test/test_conditional.rb
-test/test_configurator.rb
-test/test_debug.rb
-test/test_handlers.rb
-test/test_http11.rb
-test/test_redirect_handler.rb
-test/test_request_progress.rb
-test/test_response.rb
-test/test_stats.rb
-test/test_uriclassifier.rb
-test/test_ws.rb
-test/testhelp.rb
-TODO
-tools/trickletest.rb
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/README b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/README
deleted file mode 100644
index 816fa32..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/README
+++ /dev/null
@@ -1,74 +0,0 @@
-= Mongrel:  Simple Fast Mostly Ruby Web Server
-
-Mongrel is a small library that provides a very fast HTTP 1.1 server for Ruby web applications.  It is not particular to any framework, and is intended to be just enough to get a web application running behind a more complete and robust web server.
-
-What makes Mongrel so fast is the careful use of an Ragel extension to provide fast, accurate HTTP 1.1 protocol parsing. This makes the server scream without too many portability issues.
-
-See http://mongrel.rubyforge.org for more information.
-
-== License
-
-Mongrel is copyright 2007 Zed A. Shaw and contributors. It is licensed under the Ruby license and the GPL2. See the include LICENSE file for details.
-
-== Quick Start
-
-The easiest way to get started with Mongrel is to install it via RubyGems and then run a Ruby on Rails application. You can do this easily:
-
- $ gem install mongrel
-
-Now you should have the mongrel_rails command available in your PATH, so just do the following:
-
- $ cd myrailsapp
- $ mongrel_rails start
-
-This will start it in the foreground so you can play with it.  It runs your application in production mode.  To get help do:
-
- $ mongrel_rails start -h 
-
-Finally, you can then start in background mode:
-
- $ mongrel_rails start -d
-
-And you can stop it whenever you like with:
-
- $ mongrel_rails stop
-
-All of which should be done from your application's directory.  It writes the PID of the process you ran into log/mongrel.pid.
-
-There are also many more new options for configuring the rails runner including changing to a different directory, adding more MIME types, and setting processor threads and timeouts.
-
-== Install
-
-It doesn't explicitly require Camping, but if you want to run the examples/camping/ examples then you'll need to install Camping 1.2 at least (and redcloth I think). These are all available from RubyGems.
-
-The library consists of a C extension so you'll need a C compiler or at least a friend who can build it for you.
-
-Finally, the source includes a setup.rb for those who hate RubyGems.
-
-== Usage
-
-The examples/simpletest.rb file has the following code as the simplest example:
-
- require 'mongrel'
-
- class SimpleHandler < Mongrel::HttpHandler
-    def process(request, response)
-      response.start(200) do |head,out|
-        head["Content-Type"] = "text/plain"
-        out.write("hello!\n")
-      end
-    end
- end
-
- h = Mongrel::HttpServer.new("0.0.0.0", "3000")
- h.register("/test", SimpleHandler.new)
- h.register("/files", Mongrel::DirHandler.new("."))
- h.run.join
-
-If you run this and access port 3000 with a browser it will say "hello!".  If you access it with any url other than "/test" it will give a simple 404.  Check out the Mongrel::Error404Handler for a basic way to give a more complex 404 message.
-
-This also shows the DirHandler with directory listings.  This is still rough but it should work for basic hosting.  *File extension to mime type mapping is missing though.*
-
-== Contact
-
-E-mail the Mongrel list at http://rubyforge.org/mailman/listinfo/mongrel-users and someone will help you. Comments about the API are welcome.
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/TODO b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/TODO
deleted file mode 100644
index 3e32555..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/TODO
+++ /dev/null
@@ -1,5 +0,0 @@
-
-v1.2. Rewrite and merge mongrel cluster and mongrel_rails into something small and maintainable. Remove gem_plugin entirely.
-
-v1.1.1. See if Java is setting the server version string in the request properly.
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/bin/mongrel_rails b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/bin/mongrel_rails
deleted file mode 100755
index 7b5f4fa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/bin/mongrel_rails
+++ /dev/null
@@ -1,283 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html
-# for more information.
-
-require 'yaml'
-require 'etc'
-
-$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
-require 'mongrel'
-require 'mongrel/rails'
-
-Mongrel::Gems.require 'gem_plugin'
-
-# require 'ruby-debug'
-# Debugger.start
-
-module Mongrel
-  class Start < GemPlugin::Plugin "/commands"
-    include Mongrel::Command::Base
-
-    def configure
-      options [
-        ["-e", "--environment ENV", "Rails environment to run as", :@environment, ENV['RAILS_ENV'] || "development"],
-        ["-d", "--daemonize", "Run daemonized in the background", :@daemon, false],
-        ['-p', '--port PORT', "Which port to bind to", :@port, 3000],
-        ['-a', '--address ADDR', "Address to bind to", :@address, "0.0.0.0"],
-        ['-l', '--log FILE', "Where to write log messages", :@log_file, "log/mongrel.log"],
-        ['-P', '--pid FILE', "Where to write the PID", :@pid_file, "log/mongrel.pid"],
-        ['-n', '--num-processors INT', "Number of processors active before clients denied", :@num_processors, 1024],
-        ['-o', '--timeout TIME', "Time to wait (in seconds) before killing a stalled thread", :@timeout, 60],
-        ['-t', '--throttle TIME', "Time to pause (in hundredths of a second) between accepting clients", :@throttle, 0],
-        ['-m', '--mime PATH', "A YAML file that lists additional MIME types", :@mime_map, nil],
-        ['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, Dir.pwd],
-        ['-r', '--root PATH', "Set the document root (default 'public')", :@docroot, "public"],
-        ['-B', '--debug', "Enable debugging mode", :@debug, false],
-        ['-C', '--config PATH', "Use a config file", :@config_file, nil],
-        ['-S', '--script PATH', "Load the given file as an extra config script", :@config_script, nil],
-        ['-G', '--generate PATH', "Generate a config file for use with -C", :@generate, nil],
-        ['', '--user USER', "User to run as", :@user, nil],
-        ['', '--group GROUP', "Group to run as", :@group, nil],
-        ['', '--prefix PATH', "URL prefix for Rails app", :@prefix, nil]
-      ]
-    end
-
-    def validate
-      if @config_file
-        valid_exists?(@config_file, "Config file not there: #@config_file")
-        return false unless @valid
-        @config_file = File.expand_path(@config_file)
-        load_config
-        return false unless @valid
-      end
-
-      @cwd = File.expand_path(@cwd)
-      valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
-
-      # Change there to start, then we'll have to come back after daemonize
-      Dir.chdir(@cwd)
-
-      valid?(@prefix[0] == ?/ && @prefix[-1] != ?/, "Prefix must begin with / and not end in /") if @prefix
-      valid_dir? File.dirname(@log_file), "Path to log file not valid: #@log_file"
-      valid_dir? File.dirname(@pid_file), "Path to pid file not valid: #@pid_file"
-      valid_dir? @docroot, "Path to docroot not valid: #@docroot"
-      valid_exists? @mime_map, "MIME mapping file does not exist: #@mime_map" if @mime_map
-      valid_exists? @config_file, "Config file not there: #@config_file" if @config_file
-      valid_dir? File.dirname(@generate), "Problem accessing directory to #@generate" if @generate
-      valid_user? @user if @user
-      valid_group? @group if @group
-
-      return @valid
-    end
-
-    def run
-      if @generate
-	@generate = File.expand_path(@generate)
-        STDERR.puts "** Writing config to \"#@generate\"."
-        open(@generate, "w") {|f| f.write(settings.to_yaml) }
-        STDERR.puts "** Finished.  Run \"mongrel_rails start -C #@generate\" to use the config file."
-        exit 0
-      end
-
-      config = Mongrel::Rails::RailsConfigurator.new(settings) do
-        if defaults[:daemon]
-          if File.exist? defaults[:pid_file]
-            log "!!! PID file #{defaults[:pid_file]} already exists.  Mongrel could be running already.  Check your #{defaults[:log_file]} for errors."
-            log "!!! Exiting with error.  You must stop mongrel and clear the .pid before I'll attempt a start."
-            exit 1
-          end
-
-          daemonize
-          log "Daemonized, any open files are closed.  Look at #{defaults[:pid_file]} and #{defaults[:log_file]} for info."
-          log "Settings loaded from #{@config_file} (they override command line)." if @config_file
-        end
-
-        log "Starting Mongrel listening at #{defaults[:host]}:#{defaults[:port]}"
-
-        listener do
-          mime = {}
-          if defaults[:mime_map]
-            log "Loading additional MIME types from #{defaults[:mime_map]}"
-            mime = load_mime_map(defaults[:mime_map], mime)
-          end
-
-          if defaults[:debug]
-            log "Installing debugging prefixed filters. Look in log/mongrel_debug for the files."
-            debug "/"
-          end
-
-          log "Starting Rails with #{defaults[:environment]} environment..."
-          log "Mounting Rails at #{defaults[:prefix]}..." if defaults[:prefix]
-          uri defaults[:prefix] || "/", :handler => rails(:mime => mime, :prefix => defaults[:prefix])
-          log "Rails loaded."
-
-          log "Loading any Rails specific GemPlugins"
-          load_plugins
-
-          if defaults[:config_script]
-            log "Loading #{defaults[:config_script]} external config script"
-            run_config(defaults[:config_script])
-          end
-
-          setup_rails_signals
-        end
-      end
-
-      config.run
-      config.log "Mongrel #{Mongrel::Const::MONGREL_VERSION} available at #{@address}:#{@port}"
-
-      if config.defaults[:daemon]
-        config.write_pid_file
-      else
-        config.log "Use CTRL-C to stop." 
-      end
-
-      config.join
-
-      if config.needs_restart
-        if RUBY_PLATFORM !~ /mswin/
-          cmd = "ruby #{__FILE__} start #{original_args.join(' ')}"
-          config.log "Restarting with arguments:  #{cmd}"
-          config.stop(false, true)
-          config.remove_pid_file
-
-          if config.defaults[:daemon]
-            system cmd
-          else
-            STDERR.puts "Can't restart unless in daemon mode."
-            exit 1
-          end
-        else
-          config.log "Win32 does not support restarts. Exiting."
-        end
-      end
-    end
-
-    def load_config
-      settings = {}
-      begin
-        settings = YAML.load_file(@config_file)
-      ensure
-        STDERR.puts "** Loading settings from #{@config_file} (they override command line)." unless @daemon || settings[:daemon] 
-      end
-
-      settings[:includes] ||= ["mongrel"]
-
-      # Config file settings will override command line settings
-      settings.each do |key, value|
-        key = key.to_s
-        if config_keys.include?(key)
-          key = 'address' if key == 'host'
-          self.instance_variable_set("@#{key}", value)
-        else
-          failure "Unknown configuration setting: #{key}"  
-          @valid = false
-        end
-      end
-    end
-
-    def config_keys
-      @config_keys ||=
-        %w(address host port cwd log_file pid_file environment docroot mime_map daemon debug includes config_script num_processors timeout throttle user group prefix)
-    end
-
-    def settings
-      config_keys.inject({}) do |hash, key|
-        value = self.instance_variable_get("@#{key}")
-        key = 'host' if key == 'address'
-        hash[key.to_sym] ||= value
-        hash
-      end
-    end
-  end
-
-  def Mongrel::send_signal(signal, pid_file)
-    pid = open(pid_file).read.to_i
-    print "Sending #{signal} to Mongrel at PID #{pid}..."
-    begin
-      Process.kill(signal, pid)
-    rescue Errno::ESRCH
-      puts "Process does not exist.  Not running."
-    end
-
-    puts "Done."
-  end
-
-
-  class Stop < GemPlugin::Plugin "/commands"
-    include Mongrel::Command::Base
-
-    def configure 
-      options [ 
-        ['-c', '--chdir PATH', "Change to dir before starting (will be expanded).", :@cwd, "."],
-        ['-f', '--force', "Force the shutdown (kill -9).", :@force, false],
-        ['-w', '--wait SECONDS', "Wait SECONDS before forcing shutdown", :@wait, "0"], 
-        ['-P', '--pid FILE', "Where the PID file is located.", :@pid_file, "log/mongrel.pid"]
-      ]
-    end
-
-    def validate
-      @cwd = File.expand_path(@cwd)
-      valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
-
-      Dir.chdir @cwd
-
-      valid_exists? @pid_file, "PID file #@pid_file does not exist.  Not running?"
-      return @valid
-    end
-
-    def run
-      if @force
-        @wait.to_i.times do |waiting|
-          exit(0) if not File.exist? @pid_file
-          sleep 1
-        end
-
-        Mongrel::send_signal("KILL", @pid_file) if File.exist? @pid_file
-      else
-        Mongrel::send_signal("TERM", @pid_file)
-      end
-    end
-  end
-
-
-  class Restart < GemPlugin::Plugin "/commands"
-    include Mongrel::Command::Base
-
-    def configure 
-      options [ 
-        ['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, '.'],
-        ['-s', '--soft', "Do a soft restart rather than a process exit restart", :@soft, false],
-        ['-P', '--pid FILE', "Where the PID file is located", :@pid_file, "log/mongrel.pid"]
-      ]
-    end
-
-    def validate
-      @cwd = File.expand_path(@cwd)
-      valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
-
-      Dir.chdir @cwd
-
-      valid_exists? @pid_file, "PID file #@pid_file does not exist.  Not running?"
-      return @valid
-    end
-
-    def run
-      if @soft
-        Mongrel::send_signal("HUP", @pid_file)
-      else
-        Mongrel::send_signal("USR2", @pid_file)
-      end
-    end
-  end
-end
-
-
-GemPlugin::Manager.instance.load "mongrel" => GemPlugin::INCLUDE, "rails" => GemPlugin::EXCLUDE
-
-
-if not Mongrel::Command::Registry.instance.run ARGV
-  exit 1
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/builder.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/builder.rb
deleted file mode 100644
index 5f0803a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/builder.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require 'mongrel'
-
-class TestPlugin < GemPlugin::Plugin "/handlers"
-  include Mongrel::HttpHandlerPlugin
-
-  def process(request, response)
-    STDERR.puts "My options are: #{options.inspect}"
-    STDERR.puts "Request Was:"
-    STDERR.puts request.params.to_yaml
-  end
-end
-
-config = Mongrel::Configurator.new :host => "127.0.0.1" do
-  load_plugins :includes => ["mongrel"], :excludes => ["rails"]
-  daemonize :cwd => Dir.pwd, :log_file => "mongrel.log", :pid_file => "mongrel.pid"
-  
-  listener :port => 3000 do
-    uri "/app", :handler => plugin("/handlers/testplugin", :test => "that")
-    uri "/app", :handler => Mongrel::DirHandler.new(".")
-    load_plugins :includes => ["mongrel", "rails"]
-  end
-
-  trap("INT") { stop }
-  run
-end
-
-config.join
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/README b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/README
deleted file mode 100644
index 73ae9a0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/README
+++ /dev/null
@@ -1,3 +0,0 @@
-To get these examples running, install Camping.
-
-Instructions here: http://code.whytheluckystiff.net/camping/
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/blog.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/blog.rb
deleted file mode 100644
index 81a87da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/blog.rb
+++ /dev/null
@@ -1,294 +0,0 @@
-#!/usr/bin/env ruby
-
-$:.unshift File.dirname(__FILE__) + "/../../lib"
-require 'rubygems'
-require_gem 'camping', '>=1.4'
-require 'camping/session'
-  
-Camping.goes :Blog
-
-module Blog
-    include Camping::Session
-end
-
-module Blog::Models
-    def self.schema(&block)
-        @@schema = block if block_given?
-        @@schema
-    end
-  
-    class Post < Base; belongs_to :user; end
-    class Comment < Base; belongs_to :user; end
-    class User < Base; end
-end
-
-Blog::Models.schema do
-    create_table :blog_posts, :force => true do |t|
-      t.column :id,       :integer, :null => false
-      t.column :user_id,  :integer, :null => false
-      t.column :title,    :string,  :limit => 255
-      t.column :body,     :text
-    end
-    create_table :blog_users, :force => true do |t|
-      t.column :id,       :integer, :null => false
-      t.column :username, :string
-      t.column :password, :string
-    end
-    create_table :blog_comments, :force => true do |t|
-      t.column :id,       :integer, :null => false
-      t.column :post_id,  :integer, :null => false
-      t.column :username, :string
-      t.column :body,     :text
-    end
-    execute "INSERT INTO blog_users (username, password) VALUES ('admin', 'camping')"
-end
-
-module Blog::Controllers
-    class Index < R '/'
-        def get
-            @posts = Post.find :all
-            render :index
-        end
-    end
-     
-    class Add
-        def get
-            unless @state.user_id.blank?
-                @user = User.find @state.user_id
-                @post = Post.new
-            end
-            render :add
-        end
-        def post
-            post = Post.create :title => input.post_title, :body => input.post_body,
-                               :user_id => @state.user_id
-            redirect View, post
-        end
-    end
-
-    class Info < R '/info/(\d+)', '/info/(\w+)/(\d+)', '/info', '/info/(\d+)/(\d+)/(\d+)/([\w-]+)'
-        def get(*args)
-            div do
-                code args.inspect; br; br
-                code ENV.inspect; br
-                code "Link: #{R(Info, 1, 2)}"
-            end
-        end
-    end
-
-    class View < R '/view/(\d+)'
-        def get post_id 
-            @post = Post.find post_id
-            @comments = Models::Comment.find :all, :conditions => ['post_id = ?', post_id]
-            render :view
-        end
-    end
-     
-    class Edit < R '/edit/(\d+)', '/edit'
-        def get post_id 
-            unless @state.user_id.blank?
-                @user = User.find @state.user_id
-            end
-            @post = Post.find post_id
-            render :edit
-        end
-     
-        def post
-            @post = Post.find input.post_id
-            @post.update_attributes :title => input.post_title, :body => input.post_body
-            redirect View, @post
-        end
-    end
-     
-    class Comment
-        def post
-            Models::Comment.create(:username => input.post_username,
-                       :body => input.post_body, :post_id => input.post_id)
-            redirect View, input.post_id
-        end
-    end
-     
-    class Login
-        def post
-            @user = User.find :first, :conditions => ['username = ? AND password = ?', input.username, input.password]
-     
-            if @user
-                @login = 'login success !'
-                @state.user_id = @user.id
-            else
-                @login = 'wrong user name or password'
-            end
-            render :login
-        end
-    end
-     
-    class Logout
-        def get
-            @state.user_id = nil
-            render :logout
-        end
-    end
-     
-    class Style < R '/styles.css'
-        def get
-            @headers["Content-Type"] = "text/css; charset=utf-8"
-            @body = %{
-                body {
-                    font-family: Utopia, Georga, serif;
-                }
-                h1.header {
-                    background-color: #fef;
-                    margin: 0; padding: 10px;
-                }
-                div.content {
-                    padding: 10px;
-                }
-            }
-        end
-    end
-end
-
-module Blog::Views
-
-    def layout
-      html do
-        head do
-          title 'blog'
-          link :rel => 'stylesheet', :type => 'text/css', 
-               :href => '/styles.css', :media => 'screen'
-        end
-        body do
-          h1.header { a 'blog', :href => R(Index) }
-          div.content do
-            self << yield
-          end
-        end
-      end
-    end
-
-    def index
-      if @posts.empty?
-        p 'No posts found.'
-        p { a 'Add', :href => R(Add) }
-      else
-        for post in @posts
-          _post(post)
-        end
-      end
-    end
-
-    def login
-      p { b @login }
-      p { a 'Continue', :href => R(Add) }
-    end
-
-    def logout
-      p "You have been logged out."
-      p { a 'Continue', :href => R(Index) }
-    end
-
-    def add
-      if @user
-        _form(post, :action => R(Add))
-      else
-        _login
-      end
-    end
-
-    def edit
-      if @user
-        _form(post, :action => R(Edit))
-      else
-        _login
-      end
-    end
-
-    def view
-        _post(post)
-
-        p "Comment for this post:"
-        for c in @comments
-          h1 c.username
-          p c.body
-        end
-
-        form :action => R(Comment), :method => 'post' do
-          label 'Name', :for => 'post_username'; br
-          input :name => 'post_username', :type => 'text'; br
-          label 'Comment', :for => 'post_body'; br
-          textarea :name => 'post_body' do; end; br
-          input :type => 'hidden', :name => 'post_id', :value => post.id
-          input :type => 'submit'
-        end
-    end
-
-    # partials
-    def _login
-      form :action => R(Login), :method => 'post' do
-        label 'Username', :for => 'username'; br
-        input :name => 'username', :type => 'text'; br
-
-        label 'Password', :for => 'password'; br
-        input :name => 'password', :type => 'text'; br
-
-        input :type => 'submit', :name => 'login', :value => 'Login'
-      end
-    end
-
-    def _post(post)
-      h1 post.title
-      p post.body
-      p do
-        a "Edit", :href => R(Edit, post)
-        a "View", :href => R(View, post)
-      end
-    end
-
-    def _form(post, opts)
-      p do
-        text "You are logged in as #{@user.username} | "
-        a 'Logout', :href => R(Logout)
-      end
-      form({:method => 'post'}.merge(opts)) do
-        label 'Title', :for => 'post_title'; br
-        input :name => 'post_title', :type => 'text', 
-              :value => post.title; br
-
-        label 'Body', :for => 'post_body'; br
-        textarea post.body, :name => 'post_body'; br
-
-        input :type => 'hidden', :name => 'post_id', :value => post.id
-        input :type => 'submit'
-      end
-    end
-end
- 
-def Blog.create
-    Camping::Models::Session.create_schema
-    unless Blog::Models::Post.table_exists?
-        ActiveRecord::Schema.define(&Blog::Models.schema)
-    end
-end
-
-if __FILE__ == $0
-  require 'mongrel/camping'
-
-  Blog::Models::Base.establish_connection :adapter => 'sqlite3', :database => 'blog.db'
-  Blog::Models::Base.logger = Logger.new('camping.log')
-  Blog::Models::Base.threaded_connections=false
-  Blog.create
-  
-  # Use the Configurator as an example rather than Mongrel::Camping.start
-  config = Mongrel::Configurator.new :host => "0.0.0.0" do
-    listener :port => 3002 do
-      uri "/blog", :handler => Mongrel::Camping::CampingHandler.new(Blog)
-      uri "/favicon", :handler => Mongrel::Error404Handler.new("")
-      trap("INT") { stop }
-      run
-    end
-  end
-
-  puts "** Blog example is running at http://localhost:3002/blog"
-  puts "** Default username is `admin', password is `camping'"
-  config.join
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/tepee.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/tepee.rb
deleted file mode 100644
index 199be37..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/camping/tepee.rb
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/usr/bin/ruby
-$:.unshift File.dirname(__FILE__) + "/../../lib"
-%w(rubygems redcloth camping acts_as_versioned).each { |lib| require lib }
-
-Camping.goes :Tepee
-
-module Tepee::Models
-  def self.schema(&block)
-    @@schema = block if block_given?
-    @@schema
-  end
-  
-  class Page < Base
-    PAGE_LINK = /\[\[([^\]|]*)[|]?([^\]]*)\]\]/
-    validates_uniqueness_of :title
-    before_save { |r| r.title = r.title.underscore }
-    acts_as_versioned
-  end
-end
-
-Tepee::Models.schema do 
-  create_table :tepee_pages, :force => true do |t|
-    t.column :title, :string, :limit => 255
-    t.column :body, :text
-  end
-  Tepee::Models::Page.create_versioned_table
-end
-
-module Tepee::Controllers
-  class Index < R '/'
-    def get
-      redirect Show, 'home_page'
-    end
-  end
-
-  class List < R '/list'
-    def get
-      @pages = Page.find :all, :order => 'title'
-      render :list
-    end
-  end
-
-  class Show < R '/s/(\w+)', '/s/(\w+)/(\d+)'
-    def get page_name, version = nil
-      redirect(Edit, page_name, 1) and return unless @page = Page.find_by_title(page_name)
-      @version = (version.nil? or version == @page.version.to_s) ? @page : @page.versions.find_by_version(version)
-      render :show
-    end
-  end
-
-  class Edit < R '/e/(\w+)/(\d+)', '/e/(\w+)'
-    def get page_name, version = nil
-      @page = Page.find_or_create_by_title(page_name)
-      @page = @page.versions.find_by_version(version) unless version.nil? or version == @page.version.to_s
-      render :edit
-    end
-    
-    def post page_name
-      Page.find_or_create_by_title(page_name).update_attributes :body => input.post_body and redirect Show, page_name
-    end
-  end
-end
-
-module Tepee::Views
-  def layout
-    html do
-      head do
-        title 'test'
-      end
-      body do
-        p do
-          small do
-            span "welcome to " ; a 'tepee', :href => "http://code.whytheluckystiff.net/svn/camping/trunk/examples/tepee/"
-            span '. go ' ;       a 'home',  :href => R(Show, 'home_page')
-            span '. list all ' ; a 'pages', :href => R(List)
-          end
-        end
-        div.content do
-          self << yield
-        end
-      end
-    end
-  end
-
-  def show
-    h1 @page.title
-    div { _markup @version.body }
-    p do 
-      a 'edit',    :href => R(Edit, @version.title, @version.version)
-      a 'back',    :href => R(Show, @version.title, @version.version-1) unless @version.version == 1
-      a 'next',    :href => R(Show, @version.title, @version.version+1) unless @version.version == @page.version
-      a 'current', :href => R(Show, @version.title)                     unless @version.version == @page.version
-    end
-  end
-
-  def edit
-    form :method => 'post', :action => R(Edit, @page.title) do
-      p do
-        label 'Body' ; br
-        textarea @page.body, :name => 'post_body', :rows => 50, :cols => 100
-      end
-      
-      p do
-        input :type => 'submit'
-        a 'cancel', :href => R(Show, @page.title, @page.version)
-      end
-    end
-  end
-
-  def list
-    h1 'all pages'
-    ul { @pages.each { |p| li { a p.title, :href => R(Show, p.title) } } }
-  end
-
-  def _markup body
-    return '' if body.blank?
-    body.gsub!(Tepee::Models::Page::PAGE_LINK) do
-      page = title = $1
-      title = $2 unless $2.empty?
-      page = page.gsub /\W/, '_'
-      if Tepee::Models::Page.find(:all, :select => 'title').collect { |p| p.title }.include?(page)
-        %Q{<a href="#{self/R(Show, page)}">#{title}</a>}
-      else
-        %Q{<span>#{title}<a href="#{self/R(Edit, page, 1)}">?</a></span>}
-      end
-    end
-    RedCloth.new(body, [ :hard_breaks ]).to_html
-  end
-end
-
-def Tepee.create
-  unless Tepee::Models::Page.table_exists?
-    ActiveRecord::Schema.define(&Tepee::Models.schema)
-    Tepee::Models::Page.reset_column_information
-  end
-end
-
-if __FILE__ == $0
-  require 'mongrel/camping'
-
-  Tepee::Models::Base.establish_connection :adapter => 'sqlite3', :database => 'tepee.db'
-  Tepee::Models::Base.logger = Logger.new('camping.log')
-  Tepee::Models::Base.threaded_connections=false
-  Tepee.create
-  
-  server = Mongrel::Camping::start("0.0.0.0",3000,"/tepee",Tepee)
-  puts "** Tepee example is running at http://localhost:3000/tepee"
-  server.acceptor.join
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/httpd.conf b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/httpd.conf
deleted file mode 100644
index 778124a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/httpd.conf
+++ /dev/null
@@ -1,474 +0,0 @@
-#
-# This is the main Apache HTTP server configuration file.  It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs/2.2> for detailed information.
-# In particular, see 
-# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
-# for a discussion of each configuration directive.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do.  They're here only as hints or reminders.  If you are unsure
-# consult the online docs. You have been warned.  
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path.  If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
-# with ServerRoot set to "/usr/local/apache2" will be interpreted by the
-# server as "/usr/local/apache2/logs/foo.log".
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# Do not add a slash at the end of the directory path.  If you point
-# ServerRoot at a non-local disk, be sure to point the LockFile directive
-# at a local disk.  If you wish to share the same ServerRoot for multiple
-# httpd daemons, you will need to change at least LockFile and PidFile.
-#
-ServerRoot "/usr/local/apache2"
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the <VirtualHost>
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to 
-# prevent Apache from glomming onto all bound IP addresses.
-#
-#Listen 12.34.56.78:80
-Listen 8088
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-# Example:
-# LoadModule foo_module modules/mod_foo.so
-#
-
-LoadModule deflate_module modules/mod_deflate.so
-LoadModule expires_module modules/mod_expires.so
-LoadModule headers_module modules/mod_headers.so
-LoadModule mime_magic_module modules/mod_mime_magic.so
-LoadModule proxy_module modules/mod_proxy.so
-LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
-LoadModule proxy_http_module modules/mod_proxy_http.so
-LoadModule rewrite_module modules/mod_rewrite.so
-LoadModule version_module modules/mod_version.so
-LoadModule vhost_alias_module modules/mod_vhost_alias.so
-
-<IfModule !mpm_netware_module>
-#
-# If you wish httpd to run as a different user or group, you must run
-# httpd as root initially and it will switch.  
-#
-# User/Group: The name (or #number) of the user/group to run httpd as.
-# It is usually good practice to create a dedicated user and group for
-# running httpd, as with most system services.
-#
-User www-data
-Group www-data
-</IfModule>
-
-# 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition.  These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed.  This address appears on some server-generated pages, such
-# as error documents.  e.g. admin at your-domain.com
-#
-ServerAdmin admin at SERVER
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-#
-ServerName SERVER:8088
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "/usr/local/apache2/htdocs"
-
-#
-# Each directory to which Apache has access can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories). 
-#
-# First, we configure the "default" to be a very restrictive set of 
-# features.  
-#
-<Directory />
-    Options FollowSymLinks
-    AllowOverride None
-    Order deny,allow
-    Deny from all
-</Directory>
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# This should be changed to whatever you set DocumentRoot to.
-#
-<Directory "/usr/local/apache2/htdocs">
-    #
-    # Possible values for the Options directive are "None", "All",
-    # or any combination of:
-    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
-    #
-    # Note that "MultiViews" must be named *explicitly* --- "Options All"
-    # doesn't give it to you.
-    #
-    # The Options directive is both complicated and important.  Please see
-    # http://httpd.apache.org/docs/2.2/mod/core.html#options
-    # for more information.
-    #
-    Options Indexes FollowSymLinks
-
-    #
-    # AllowOverride controls what directives may be placed in .htaccess files.
-    # It can be "All", "None", or any combination of the keywords:
-    #   Options FileInfo AuthConfig Limit
-    #
-    AllowOverride None
-
-    #
-    # Controls who can get stuff from this server.
-    #
-    Order allow,deny
-    Allow from all
-
-</Directory>
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-<IfModule dir_module>
-    DirectoryIndex index.html
-</IfModule>
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being 
-# viewed by Web clients. 
-#
-<FilesMatch "^\.ht">
-    Order allow,deny
-    Deny from all
-    Satisfy All
-</FilesMatch>
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here.  If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog logs/error_log
-
-#
-# LogLevel: Control the number of messages logged to the error_log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-<IfModule log_config_module>
-    #
-    # The following directives define some format nicknames for use with
-    # a CustomLog directive (see below).
-    #
-    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-    LogFormat "%h %l %u %t \"%r\" %>s %b" common
-
-    <IfModule logio_module>
-      # You need to enable mod_logio.c to use %I and %O
-      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
-    </IfModule>
-
-    #
-    # The location and format of the access logfile (Common Logfile Format).
-    # If you do not define any access logfiles within a <VirtualHost>
-    # container, they will be logged here.  Contrariwise, if you *do*
-    # define per-<VirtualHost> access logfiles, transactions will be
-    # logged therein and *not* in this file.
-    #
-    CustomLog logs/access_log common
-
-    #
-    # If you prefer a logfile with access, agent, and referer information
-    # (Combined Logfile Format) you can use the following directive.
-    #
-    #CustomLog logs/access_log combined
-</IfModule>
-
-<IfModule alias_module>
-    #
-    # Redirect: Allows you to tell clients about documents that used to 
-    # exist in your server's namespace, but do not anymore. The client 
-    # will make a new request for the document at its new location.
-    # Example:
-    # Redirect permanent /foo http://www.example.com/bar
-
-    #
-    # Alias: Maps web paths into filesystem paths and is used to
-    # access content that does not live under the DocumentRoot.
-    # Example:
-    # Alias /webpath /full/filesystem/path
-    #
-    # If you include a trailing / on /webpath then the server will
-    # require it to be present in the URL.  You will also likely
-    # need to provide a <Directory> section to allow access to
-    # the filesystem path.
-
-    #
-    # ScriptAlias: This controls which directories contain server scripts. 
-    # ScriptAliases are essentially the same as Aliases, except that
-    # documents in the target directory are treated as applications and
-    # run by the server when requested rather than as documents sent to the
-    # client.  The same rules about trailing "/" apply to ScriptAlias
-    # directives as to Alias.
-    #
-    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
-
-</IfModule>
-
-<IfModule cgid_module>
-    #
-    # ScriptSock: On threaded servers, designate the path to the UNIX
-    # socket used to communicate with the CGI daemon of mod_cgid.
-    #
-    #Scriptsock logs/cgisock
-</IfModule>
-
-#
-# "/usr/local/apache2/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "/usr/local/apache2/cgi-bin">
-    AllowOverride None
-    Options None
-    Order allow,deny
-    Allow from all
-</Directory>
-
-#
-# DefaultType: the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value.  If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-<IfModule mime_module>
-    #
-    # TypesConfig points to the file containing the list of mappings from
-    # filename extension to MIME-type.
-    #
-    TypesConfig conf/mime.types
-
-    #
-    # AddType allows you to add to or override the MIME configuration
-    # file specified in TypesConfig for specific file types.
-    #
-    #AddType application/x-gzip .tgz
-    #
-    # AddEncoding allows you to have certain browsers uncompress
-    # information on the fly. Note: Not all browsers support this.
-    #
-    #AddEncoding x-compress .Z
-    #AddEncoding x-gzip .gz .tgz
-    #
-    # If the AddEncoding directives above are commented-out, then you
-    # probably should define those extensions to indicate media types:
-    #
-    AddType application/x-compress .Z
-    AddType application/x-gzip .gz .tgz
-
-    #
-    # AddHandler allows you to map certain file extensions to "handlers":
-    # actions unrelated to filetype. These can be either built into the server
-    # or added with the Action directive (see below)
-    #
-    # To use CGI scripts outside of ScriptAliased directories:
-    # (You will also need to add "ExecCGI" to the "Options" directive.)
-    #
-    #AddHandler cgi-script .cgi
-
-    # For type maps (negotiated resources):
-    #AddHandler type-map var
-
-    #
-    # Filters allow you to process content before it is sent to the client.
-    #
-    # To parse .shtml files for server-side includes (SSI):
-    # (You will also need to add "Includes" to the "Options" directive.)
-    #
-    #AddType text/html .shtml
-    #AddOutputFilter INCLUDES .shtml
-</IfModule>
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type.  The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-#MIMEMagicFile conf/magic
-
-#
-# Customizable error responses come in three flavors:
-# 1) plain text 2) local redirects 3) external redirects
-#
-# Some examples:
-#ErrorDocument 500 "The server made a boo boo."
-#ErrorDocument 404 /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#
-
-#
-# EnableMMAP and EnableSendfile: On systems that support it, 
-# memory-mapping or the sendfile syscall is used to deliver
-# files.  This usually improves server performance, but must
-# be turned off when serving from networked-mounted 
-# filesystems or if support for these functions is otherwise
-# broken on your system.
-#
-#EnableMMAP off
-EnableSendfile on
-
-# Supplemental configuration
-#
-# The configuration files in the conf/extra/ directory can be 
-# included to add extra features or to modify the default configuration of 
-# the server, or you may simply copy their contents here and change as 
-# necessary.
-
-# Server-pool management (MPM specific)
-#Include conf/extra/httpd-mpm.conf
-
-# Multi-language error messages
-#Include conf/extra/httpd-multilang-errordoc.conf
-
-# Fancy directory listings
-#Include conf/extra/httpd-autoindex.conf
-
-# Language settings
-#Include conf/extra/httpd-languages.conf
-
-# User home directories
-#Include conf/extra/httpd-userdir.conf
-
-# Real-time info on requests and configuration
-#Include conf/extra/httpd-info.conf
-
-# Virtual hosts
-#Include conf/extra/httpd-vhosts.conf
-
-# Local access to the Apache HTTP Server Manual
-#Include conf/extra/httpd-manual.conf
-
-# Distributed authoring and versioning (WebDAV)
-#Include conf/extra/httpd-dav.conf
-
-# Various default settings
-#Include conf/extra/httpd-default.conf
-
-# Secure (SSL/TLS) connections
-#Include conf/extra/httpd-ssl.conf
-#
-# Note: The following must must be present to support
-#       starting without SSL on platforms with no /dev/random equivalent
-#       but a statically compiled-in mod_ssl.
-#
-<IfModule ssl_module>
-SSLRandomSeed startup builtin
-SSLRandomSeed connect builtin
-</IfModule>
-
-<VirtualHost *:8088>
-  ServerName SERVER
-  DocumentRoot /var/rails/MYAPP/public
-
-  <Directory "/var/rails/MYAPP/public">
-    Options FollowSymLinks
-    AllowOverride None
-    Order allow,deny
-    Allow from all
-  </Directory>
-
-  # Configure mongrel_cluster 
-  <Proxy balancer://mongrel_cluster>
-    BalancerMember http://127.0.0.1:8000
-    BalancerMember http://127.0.0.1:8001
-  </Proxy>
-
-  RewriteEngine On
-
-  # Uncomment for rewrite debugging 
-  #RewriteLog logs/your_app_rewrite_log
-  #RewriteLogLevel 9 
-
-  # Check for maintenance file and redirect all requests
-  RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
-  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
-  RewriteRule ^.*$ /system/maintenance.html [L]
-
-  # Rewrite index to check for static
-  RewriteRule ^/$ /index.html [QSA] 
-
-  # Rewrite to check for Rails cached page
-  RewriteRule ^([^.]+)$ $1.html [QSA]
-
-  # Redirect all non-static requests to cluster
-  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
-  RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]
-
-  # Deflate
-  AddOutputFilterByType DEFLATE text/html text/plain text/xml
-  BrowserMatch ^Mozilla/4 gzip-only-text/html
-  BrowserMatch ^Mozilla/4\.0[678] no-gzip
-  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
-
-  # Uncomment for deflate debugging
-  #DeflateFilterNote Input input_info
-  #DeflateFilterNote Output output_info
-  #DeflateFilterNote Ratio ratio_info
-  #LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
-  #CustomLog logs/your_app_deflate_log deflate
-
-  ErrorLog logs/your_app_error_log
-  CustomLog logs/your_access_log combined
-</VirtualHost>
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mime.yaml b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mime.yaml
deleted file mode 100644
index 6e7bb04..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mime.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
---- 
-.jpeg: image/jpeg
-.png: image/test
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel.conf b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel.conf
deleted file mode 100644
index 5c77707..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel.conf
+++ /dev/null
@@ -1,9 +0,0 @@
---- 
-:environment: production
-:daemon: "true"
-:host: 0.0.0.0
-:log_file: log/mongrel.log
-:docroot: public
-:debug: "false"
-:port: 3000
-:pid_file: log/mongrel.pid
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel_simple_ctrl.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel_simple_ctrl.rb
deleted file mode 100644
index 4663d1c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel_simple_ctrl.rb
+++ /dev/null
@@ -1,92 +0,0 @@
-###############################################
-# mongrel_simple_ctrl.rb
-#
-# Control script for the Mongrel server
-###############################################
-require "optparse"
-require "win32/service"
-include Win32
-
-# I start the service name with an 'A' so that it appears at the top
-SERVICE_NAME = "MongrelSvc"
-SERVICE_DISPLAYNAME = "Mongrel HTTP Server"
-SCRIPT_ROOT = File.join(File.dirname(__FILE__), '.') 
-SCRIPT_NAME = "mongrel_simple_service.rb"
-SERVICE_SCRIPT = File.expand_path(SCRIPT_ROOT + '/' + SCRIPT_NAME)
-
-OPTIONS = {}
-
-ARGV.options do |opts|
-   opts.on("-d", "--delete", "Delete the service"){ OPTIONS[:delete] = true }
-   opts.on("-u", "--uninstall","Delete the service"){ OPTIONS[:uninstall] = true }
-   opts.on("-s", "--start",  "Start the service"){ OPTIONS[:start] = true }
-   opts.on("-x", "--stop",   "Stop the service"){ OPTIONS[:stop] = true }
-   opts.on("-i", "--install","Install the service"){ OPTIONS[:install] = true }
-
-   opts.on("-h", "--help",   "Show this help message."){ puts opts; exit }
-
-   opts.parse!
-end
-
-# Install the service
-if OPTIONS[:install]  
-   require 'rbconfig'
-   
-   svc = Service.new
-   svc.create_service{ |s|
-      s.service_name     = SERVICE_NAME
-      s.display_name     = SERVICE_DISPLAYNAME
-      s.binary_path_name = Config::CONFIG['bindir'] + '/ruby ' + SERVICE_SCRIPT
-      s.dependencies     = []
-   }
-   svc.close
-   puts "#{SERVICE_DISPLAYNAME} service installed"
-end
-
-# Start the service
-if OPTIONS[:start]
-   Service.start(SERVICE_NAME)
-   started = false
-   while started == false
-      s = Service.status(SERVICE_NAME)
-      started = true if s.current_state == "running"
-      break if started == true
-      puts "One moment, " + s.current_state
-      sleep 1
-   end
-   puts "#{SERVICE_DISPLAYNAME} service started"
-end
-
-# Stop the service
-if OPTIONS[:stop]
-   Service.stop(SERVICE_NAME)
-   stopped = false
-   while stopped == false
-      s = Service.status(SERVICE_NAME)
-      stopped = true if s.current_state == "stopped"
-      break if stopped == true
-      puts "One moment, " + s.current_state
-      sleep 1
-   end
-   puts "#{SERVICE_DISPLAYNAME} service stopped"
-end
-
-# Delete the service.  Stop it first.
-if OPTIONS[:delete] || OPTIONS[:uninstall]
-   begin
-      Service.stop(SERVICE_NAME)
-   rescue
-   end
-   begin
-    Service.delete(SERVICE_NAME)
-   rescue
-   end
-   puts "#{SERVICE_DISPLAYNAME} service deleted"
-end
-# END mongrel_rails_ctrl.rb
-
-
-
-
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel_simple_service.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel_simple_service.rb
deleted file mode 100644
index 3f9bc2c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/mongrel_simple_service.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-# This script emualtes script/server behavior but running webrick http server 
-require 'rubygems'
-
-require 'mongrel'
-require 'yaml'
-require 'zlib'
-
-require 'win32/service'
-
-DEBUG_LOG_FILE = File.expand_path(File.dirname(__FILE__) + '/debug.log') 
-
-class SimpleHandler < Mongrel::HttpHandler
-    def process(request, response)
-      response.start do |head,out|
-        head["Content-Type"] = "text/html"
-        results = "<html><body>Your request:<br /><pre>#{request.params.to_yaml}</pre><a href=\"/files\">View the files.</a></body></html>"
-        if request.params["HTTP_ACCEPT_ENCODING"] == "gzip,deflate"
-          head["Content-Encoding"] = "deflate"
-          # send it back deflated
-          out << Zlib::Deflate.deflate(results)
-        else
-          # no gzip supported, send it back normal
-          out << results
-        end
-      end
-    end
-end
-
-class MongrelDaemon < Win32::Daemon
-  def initialize(options)
-    @options = options
-  end
-  
-  def service_init
-    File.open(DEBUG_LOG_FILE,"a+") { |f| f.puts("#{Time.now} - service_init entered") }
-
-    File.open(DEBUG_LOG_FILE,"a+") { |f| f.puts("Mongrel running on #{@options[:ip]}:#{@options[:port]} with docroot #{@options[:server_root]}") } 
-
-    @simple = SimpleHandler.new
-    @files = Mongrel::DirHandler.new(@options[:server_root])
-
-    @http_server = Mongrel::HttpServer.new(@options[:ip], @options[:port])
-    @http_server.register("/", @simple)
-    @http_server.register("/files", @files)
-
-    File.open(DEBUG_LOG_FILE,"a+") { |f| f.puts("#{Time.now} - service_init left") }
-  end
-  
-  def service_stop
-    File.open(DEBUG_LOG_FILE,"a+"){ |f|
-      f.puts "stop signal received: " + Time.now.to_s
-      f.puts "sending stop to mongrel threads: " + Time.now.to_s
-    }
-    #@http_server.stop
-  end
-
-  def service_pause
-    File.open(DEBUG_LOG_FILE,"a+"){ |f|
-      f.puts "pause signal received: " + Time.now.to_s
-    }
-  end
-  
-  def service_resume
-    File.open(DEBUG_LOG_FILE,"a+"){ |f|
-      f.puts "continue/resume signal received: " + Time.now.to_s
-    }
-  end
-
-  def service_main
-    File.open(DEBUG_LOG_FILE,"a+") { |f| f.puts("#{Time.now} - service_main entered") }
-    
-    begin
-      File.open(DEBUG_LOG_FILE,"a+") { |f| f.puts("#{Time.now} - http_server.run") }
-      @http_server.run
-    
-      # No runner thread was needed after all!
-      #@runner = Thread.new do
-      #  @http_server.acceptor.join
-      #end
-      #File.open("d:\\test.log","a+") { |f| f.puts("#{Time.now} - runner.run") }
-      #@runner.run
-      
-      # here is where magic happens!
-      # if put blocking code here, the thread never left service_main, and the rb_func_call in service.c
-      # never exit, even if the stop signal is received.
-      #
-      # to probe my theory, just comment the while loop and remove the '1' from sleep function
-      # service start ok, but fail to stop.
-      #
-      # Even if no functional code is in service_main (because we have other working threads),
-      # we must monitor the state of the service to exit when the STOP event is received.
-      #
-      # Note: maybe not loop in 1 second intervals?
-      while state == RUNNING
-        sleep 1
-      end
-      
-    rescue StandardError, Exception, interrupt  => err
-      File.open(DEBUG_LOG_FILE,"a+"){ |f| f.puts("#{Time.now} - Error: #{err}") }
-      File.open(DEBUG_LOG_FILE,"a+"){ |f| f.puts("BACKTRACE: " + err.backtrace.join("\n")) }
-      
-    end
-    
-    File.open(DEBUG_LOG_FILE,"a+") { |f| f.puts("#{Time.now} - service_main left") }
-  end
-  
-end
-
-OPTIONS = {
-  :port            => 3000,
-  :ip              => "0.0.0.0",
-  :server_root     => File.expand_path(File.dirname(__FILE__)),
-}
-
-web_server = MongrelDaemon.new(OPTIONS)
-web_server.mainloop
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/monitrc b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/monitrc
deleted file mode 100644
index 9964ae9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/monitrc
+++ /dev/null
@@ -1,57 +0,0 @@
-set daemon  60
-set logfile syslog facility log_daemon
-set mailserver localhost
-set mail-format { from: monit at localhost }
-set alert root at localhost
-
-check process sshd with pidfile /var/run/sshd.pid
-   start program  "/etc/init.d/ssh start"
-   stop program  "/etc/init.d/ssh stop"
-   if failed port 22 protocol ssh then restart
-   if 5 restarts within 5 cycles then timeout
-
-check process mysql with pidfile /var/run/mysqld/mysqld.pid
-   group database
-   start program = "/etc/init.d/mysql start"
-   stop program = "/etc/init.d/mysql stop"
-   if failed host 127.0.0.1 port 3306 then restart
-   if 5 restarts within 5 cycles then timeout
-
-check process httpd with pidfile /usr/local/apache2/logs/httpd.pid
-   group www-data
-   start program  "/usr/local/apache2/bin/apachectl start"
-   stop program  "/usr/local/apache2/bin/apachectl stop"
-   if failed host localhost port 80 protocol http
-      and request "/" then alert
-   if cpu is greater than 60% for 2 cycles then alert
-   if cpu > 80% for 5 cycles then restart
-   if children > 250 then restart
-   if loadavg(5min) greater than 10 for 8 cycles then alert
-   if 3 restarts within 5 cycles then timeout
-
-check process mongrel_8000 with pidfile /var/rails/MYAPP/log/mongrel.8000.pid
-   group root
-   if failed host 127.0.0.1 port 8000 protocol http
-      and request "/" then alert
-   if cpu is greater than 60% for 2 cycles then alert
-   if cpu > 80% for 5 cycles then restart
-   if loadavg(5min) greater than 10 for 8 cycles then restart
-   if 3 restarts within 5 cycles then timeout
-
-check process mongrel_8001 with pidfile /var/rails/MYAPP/log/mongrel.8001.pid
-   group root
-   if failed host 127.0.0.1 port 8001 protocol http
-      and request "/" then alert
-   if cpu is greater than 60% for 2 cycles then alert
-   if cpu > 80% for 5 cycles then alert
-   if loadavg(5min) greater than 10 for 8 cycles then alert
-   if 3 restarts within 5 cycles then timeout
-
-check process postfix with pidfile /var/spool/postfix/pid/master.pid
-   group mail
-   start program = "/etc/init.d/postfix start"
-   stop  program = "/etc/init.d/postfix stop"
-   if failed port 25 protocol smtp then restart
-   if 5 restarts within 5 cycles then timeout
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/random_thrash.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/random_thrash.rb
deleted file mode 100644
index fe9311c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/random_thrash.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'socket'
-devrand = open("/dev/random","r")
-
-loop do
-  s = TCPSocket.new(ARGV[0],ARGV[1])
-  s.write("GET / HTTP/1.1\r\n")
-  total = 0
-  begin
-    loop do
-       r = devrand.read(10)
-       n = s.write(r)
-       total += n
-    end  
-  rescue Object
-	STDERR.puts "#$!: #{total}"
-  end
-   s.close
-   sleep 1
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/simpletest.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/simpletest.rb
deleted file mode 100644
index b82e2c6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/simpletest.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-$LOAD_PATH << File.join(File.dirname(__FILE__), "..", "lib")
-require 'mongrel'
-require 'yaml'
-
-class SimpleHandler < Mongrel::HttpHandler
-  def process(request, response)
-    response.start do |head,out|
-      head["Content-Type"] = "text/html"
-      results = "<html><body>Your request:<br /><pre>#{request.params.to_yaml}</pre><a href=\"/files\">View the files.</a></body></html>"
-      out << results
-    end
-  end
-end
-
-class DumbHandler < Mongrel::HttpHandler
-  def process(request, response)
-    response.start do |head,out|
-      head["Content-Type"] = "text/html"
-      out.write("test")
-    end
-  end
-end
-
-
-if ARGV.length != 3
-  STDERR.puts "usage:  simpletest.rb <host> <port> <docroot>"
-  exit(1)
-end
-
-stats = Mongrel::StatisticsFilter.new(:sample_rate => 1)
-
-config = Mongrel::Configurator.new :host => ARGV[0], :port => ARGV[1] do
-  listener do
-    uri "/", :handler => SimpleHandler.new
-    uri "/", :handler => Mongrel::DeflateFilter.new
-    uri "/", :handler => stats
-    uri "/dumb", :handler => DumbHandler.new
-    uri "/dumb", :handler => Mongrel::DeflateFilter.new
-    uri "/dumb", :handler => stats
-    uri "/files", :handler => Mongrel::DirHandler.new(ARGV[2])
-    uri "/files", :handler => stats
-    uri "/status", :handler => Mongrel::StatusHandler.new(:stats_filter => stats)
-    redirect "/redir1", "/"
-    redirect "/to", /to/, 'w'
-  end
-
-  trap("INT") { stop }
-  run
-end
-
-puts "Mongrel running on #{ARGV[0]}:#{ARGV[1]} with docroot #{ARGV[2]}"
-config.join
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/webrick_compare.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/webrick_compare.rb
deleted file mode 100644
index 15199b0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/examples/webrick_compare.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/local/bin/ruby
-require 'webrick'
-include WEBrick
-
-s = HTTPServer.new( :Port => 4000 )
-
-# HTTPServer#mount(path, servletclass)
-#   When a request referring "/hello" is received,
-#   the HTTPServer get an instance of servletclass
-#   and then call a method named do_"a HTTP method".
-
-class HelloServlet < HTTPServlet::AbstractServlet
-  def do_GET(req, res)
-    res.body = "hello!"
-    res['Content-Type'] = "text/html"
-  end
-end
-s.mount("/test", HelloServlet)
-
-s.start
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/Makefile b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/Makefile
deleted file mode 100644
index 54b5500..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/Makefile
+++ /dev/null
@@ -1,153 +0,0 @@
-
-SHELL = /bin/sh
-
-#### Start of system configuration section. ####
-
-srcdir = .
-topdir = /opt/local/lib/ruby/1.8/i686-darwin9.5.1
-hdrdir = $(topdir)
-VPATH = $(srcdir):$(topdir):$(hdrdir)
-prefix = $(DESTDIR)/opt/local
-exec_prefix = $(prefix)
-sitedir = $(prefix)/lib/ruby/site_ruby
-rubylibdir = $(libdir)/ruby/$(ruby_version)
-docdir = $(datarootdir)/doc/$(PACKAGE)
-dvidir = $(docdir)
-datarootdir = $(prefix)/share
-archdir = $(rubylibdir)/$(arch)
-sbindir = $(exec_prefix)/sbin
-psdir = $(docdir)
-vendordir = $(prefix)/lib/ruby/vendor_ruby
-localedir = $(datarootdir)/locale
-htmldir = $(docdir)
-datadir = $(datarootdir)
-includedir = $(prefix)/include
-infodir = $(datarootdir)/info
-sysconfdir = $(prefix)/etc
-mandir = $(DESTDIR)/opt/local/share/man
-libdir = $(exec_prefix)/lib
-sharedstatedir = $(prefix)/com
-oldincludedir = $(DESTDIR)/usr/include
-pdfdir = $(docdir)
-sitearchdir = $(sitelibdir)/$(sitearch)
-vendorarchdir = $(vendorlibdir)/$(vendorarch)
-bindir = $(exec_prefix)/bin
-localstatedir = $(prefix)/var
-vendorlibdir = $(vendordir)/$(ruby_version)
-sitelibdir = $(sitedir)/$(ruby_version)
-libexecdir = $(exec_prefix)/libexec
-
-CC = /usr/bin/gcc-4.0
-LIBRUBY = $(LIBRUBY_SO)
-LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
-LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
-LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
-
-RUBY_EXTCONF_H = 
-CFLAGS   =  -fno-common -O2  -fno-common -pipe -fno-common 
-INCFLAGS = -I. -I. -I/opt/local/lib/ruby/1.8/i686-darwin9.5.1 -I.
-CPPFLAGS =  -I/opt/local/include
-CXXFLAGS = $(CFLAGS) 
-DLDFLAGS = -L. -L/opt/local/lib  
-LDSHARED = cc -dynamic -bundle -undefined suppress -flat_namespace
-AR = ar
-EXEEXT = 
-
-RUBY_INSTALL_NAME = ruby
-RUBY_SO_NAME = ruby
-arch = i686-darwin9.5.1
-sitearch = i686-darwin9.5.1
-vendorarch = i686-darwin9.5.1
-ruby_version = 1.8
-ruby = /opt/local/bin/ruby
-RUBY = $(ruby)
-RM = rm -f
-MAKEDIRS = mkdir -p
-INSTALL = /usr/bin/install
-INSTALL_PROG = $(INSTALL) -m 0755
-INSTALL_DATA = $(INSTALL) -m 644
-COPY = cp
-
-#### End of system configuration section. ####
-
-preload = 
-
-libpath = . $(libdir)
-LIBPATH =  -L"." -L"$(libdir)"
-DEFFILE = 
-
-CLEANFILES = mkmf.log
-DISTCLEANFILES = 
-
-extout = 
-extout_prefix = 
-target_prefix = 
-LOCAL_LIBS = 
-LIBS = $(LIBRUBYARG_SHARED) -lc  -lpthread -ldl -lobjc  
-SRCS = http11.c http11_parser.c
-OBJS = http11.o http11_parser.o
-TARGET = http11
-DLLIB = $(TARGET).bundle
-EXTSTATIC = 
-STATIC_LIB = 
-
-RUBYCOMMONDIR = $(sitedir)$(target_prefix)
-RUBYLIBDIR = /Users/mattetti/github/merb/merb-core/spec/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib$(target_prefix)
-RUBYARCHDIR = /Users/mattetti/github/merb/merb-core/spec/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib$(target_prefix)
-
-TARGET_SO     = $(DLLIB)
-CLEANLIBS     = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map
-CLEANOBJS     = *.o *.a *.s[ol] *.pdb *.exp *.bak
-
-all:		$(DLLIB)
-static:		$(STATIC_LIB)
-
-clean:
-		@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
-
-distclean:	clean
-		@-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
-		@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
-
-realclean:	distclean
-install: install-so install-rb
-
-install-so: $(RUBYARCHDIR)
-install-so: $(RUBYARCHDIR)/$(DLLIB)
-$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
-	$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
-install-rb: pre-install-rb install-rb-default
-install-rb-default: pre-install-rb-default
-pre-install-rb: Makefile
-pre-install-rb-default: Makefile
-$(RUBYARCHDIR):
-	$(MAKEDIRS) $@
-
-site-install: site-install-so site-install-rb
-site-install-so: install-so
-site-install-rb: install-rb
-
-.SUFFIXES: .c .m .cc .cxx .cpp .C .o
-
-.cc.o:
-	$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
-
-.cxx.o:
-	$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
-
-.cpp.o:
-	$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
-
-.C.o:
-	$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
-
-.c.o:
-	$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
-
-$(DLLIB): $(OBJS)
-	@-$(RM) $@
-	$(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
-
-
-
-$(OBJS): ruby.h defines.h
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/ext_help.h b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/ext_help.h
deleted file mode 100644
index 8b4d754..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/ext_help.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef ext_help_h
-#define ext_help_h
-
-#define RAISE_NOT_NULL(T) if(T == NULL) rb_raise(rb_eArgError, "NULL found for " # T " when shouldn't be.");
-#define DATA_GET(from,type,name) Data_Get_Struct(from,type,name); RAISE_NOT_NULL(name);
-#define REQUIRE_TYPE(V, T) if(TYPE(V) != T) rb_raise(rb_eTypeError, "Wrong argument type for " # V " required " # T);
-
-#ifdef DEBUG
-#define TRACE()  fprintf(stderr, "> %s:%d:%s\n", __FILE__, __LINE__, __FUNCTION__)
-#else
-#define TRACE() 
-#endif
-
-#endif
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/extconf.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/extconf.rb
deleted file mode 100644
index e4f6918..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/extconf.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require 'mkmf'
-
-dir_config("http11")
-have_library("c", "main")
-
-create_makefile("http11")
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.bundle b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.bundle
deleted file mode 100755
index 223892f..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.bundle and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.c b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.c
deleted file mode 100644
index 756c8fc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/**
- * Copyright (c) 2005 Zed A. Shaw
- * You can redistribute it and/or modify it under the same terms as Ruby.
- */
-#include "ruby.h"
-#include "ext_help.h"
-#include <assert.h>
-#include <string.h>
-#include "http11_parser.h"
-#include <ctype.h>
-
-static VALUE mMongrel;
-static VALUE cHttpParser;
-static VALUE eHttpParserError;
-
-#define id_handler_map rb_intern("@handler_map")
-#define id_http_body rb_intern("@http_body")
-
-static VALUE global_http_prefix;
-static VALUE global_request_method;
-static VALUE global_request_uri;
-static VALUE global_fragment;
-static VALUE global_query_string;
-static VALUE global_http_version;
-static VALUE global_content_length;
-static VALUE global_http_content_length;
-static VALUE global_request_path;
-static VALUE global_content_type;
-static VALUE global_http_content_type;
-static VALUE global_gateway_interface;
-static VALUE global_gateway_interface_value;
-static VALUE global_server_name;
-static VALUE global_server_port;
-static VALUE global_server_protocol;
-static VALUE global_server_protocol_value;
-static VALUE global_http_host;
-static VALUE global_mongrel_version;
-static VALUE global_server_software;
-static VALUE global_port_80;
-
-#define TRIE_INCREASE 30
-
-/** Defines common length and error messages for input length validation. */
-#define DEF_MAX_LENGTH(N,length) const size_t MAX_##N##_LENGTH = length; const char *MAX_##N##_LENGTH_ERR = "HTTP element " # N  " is longer than the " # length " allowed length."
-
-/** Validates the max length of given input and throws an HttpParserError exception if over. */
-#define VALIDATE_MAX_LENGTH(len, N) if(len > MAX_##N##_LENGTH) { rb_raise(eHttpParserError, MAX_##N##_LENGTH_ERR); }
-
-/** Defines global strings in the init method. */
-#define DEF_GLOBAL(N, val)   global_##N = rb_obj_freeze(rb_str_new2(val)); rb_global_variable(&global_##N)
-
-
-/* Defines the maximum allowed lengths for various input elements.*/
-DEF_MAX_LENGTH(FIELD_NAME, 256);
-DEF_MAX_LENGTH(FIELD_VALUE, 80 * 1024);
-DEF_MAX_LENGTH(REQUEST_URI, 1024 * 12);
-DEF_MAX_LENGTH(FRAGMENT, 1024); /* Don't know if this length is specified somewhere or not */
-DEF_MAX_LENGTH(REQUEST_PATH, 1024);
-DEF_MAX_LENGTH(QUERY_STRING, (1024 * 10));
-DEF_MAX_LENGTH(HEADER, (1024 * (80 + 32)));
-
-
-void http_field(void *data, const char *field, size_t flen, const char *value, size_t vlen)
-{
-  char *ch, *end;
-  VALUE req = (VALUE)data;
-  VALUE v = Qnil;
-  VALUE f = Qnil;
-
-  VALIDATE_MAX_LENGTH(flen, FIELD_NAME);
-  VALIDATE_MAX_LENGTH(vlen, FIELD_VALUE);
-
-  v = rb_str_new(value, vlen);
-  f = rb_str_dup(global_http_prefix);
-  f = rb_str_buf_cat(f, field, flen); 
-
-  for(ch = RSTRING(f)->ptr, end = ch + RSTRING(f)->len; ch < end; ch++) {
-    if(*ch == '-') {
-      *ch = '_';
-    } else {
-      *ch = toupper(*ch);
-    }
-  }
-
-  rb_hash_aset(req, f, v);
-}
-
-void request_method(void *data, const char *at, size_t length)
-{
-  VALUE req = (VALUE)data;
-  VALUE val = Qnil;
-
-  val = rb_str_new(at, length);
-  rb_hash_aset(req, global_request_method, val);
-}
-
-void request_uri(void *data, const char *at, size_t length)
-{
-  VALUE req = (VALUE)data;
-  VALUE val = Qnil;
-
-  VALIDATE_MAX_LENGTH(length, REQUEST_URI);
-
-  val = rb_str_new(at, length);
-  rb_hash_aset(req, global_request_uri, val);
-}
-
-void fragment(void *data, const char *at, size_t length)
-{
-  VALUE req = (VALUE)data;
-  VALUE val = Qnil;
-
-  VALIDATE_MAX_LENGTH(length, FRAGMENT);
-
-  val = rb_str_new(at, length);
-  rb_hash_aset(req, global_fragment, val);
-}
-
-void request_path(void *data, const char *at, size_t length)
-{
-  VALUE req = (VALUE)data;
-  VALUE val = Qnil;
-
-  VALIDATE_MAX_LENGTH(length, REQUEST_PATH);
-
-  val = rb_str_new(at, length);
-  rb_hash_aset(req, global_request_path, val);
-}
-
-void query_string(void *data, const char *at, size_t length)
-{
-  VALUE req = (VALUE)data;
-  VALUE val = Qnil;
-
-  VALIDATE_MAX_LENGTH(length, QUERY_STRING);
-
-  val = rb_str_new(at, length);
-  rb_hash_aset(req, global_query_string, val);
-}
-
-void http_version(void *data, const char *at, size_t length)
-{
-  VALUE req = (VALUE)data;
-  VALUE val = rb_str_new(at, length);
-  rb_hash_aset(req, global_http_version, val);
-}
-
-/** Finalizes the request header to have a bunch of stuff that's
-  needed. */
-
-void header_done(void *data, const char *at, size_t length)
-{
-  VALUE req = (VALUE)data;
-  VALUE temp = Qnil;
-  VALUE ctype = Qnil;
-  VALUE clen = Qnil;
-  char *colon = NULL;
-
-  clen = rb_hash_aref(req, global_http_content_length);
-  if(clen != Qnil) {
-    rb_hash_aset(req, global_content_length, clen);
-  }
-
-  ctype = rb_hash_aref(req, global_http_content_type);
-  if(ctype != Qnil) {
-    rb_hash_aset(req, global_content_type, ctype);
-  }
-
-  rb_hash_aset(req, global_gateway_interface, global_gateway_interface_value);
-  if((temp = rb_hash_aref(req, global_http_host)) != Qnil) {
-    /* ruby better close strings off with a '\0' dammit */
-    colon = strchr(RSTRING(temp)->ptr, ':');
-    if(colon != NULL) {
-      rb_hash_aset(req, global_server_name, rb_str_substr(temp, 0, colon - RSTRING(temp)->ptr));
-      rb_hash_aset(req, global_server_port, 
-          rb_str_substr(temp, colon - RSTRING(temp)->ptr+1, 
-            RSTRING(temp)->len));
-    } else {
-      rb_hash_aset(req, global_server_name, temp);
-      rb_hash_aset(req, global_server_port, global_port_80);
-    }
-  }
-
-  /* grab the initial body and stuff it into an ivar */
-  rb_ivar_set(req, id_http_body, rb_str_new(at, length));
-  rb_hash_aset(req, global_server_protocol, global_server_protocol_value);
-  rb_hash_aset(req, global_server_software, global_mongrel_version);
-}
-
-
-void HttpParser_free(void *data) {
-  TRACE();
-
-  if(data) {
-    free(data);
-  }
-}
-
-
-VALUE HttpParser_alloc(VALUE klass)
-{
-  VALUE obj;
-  http_parser *hp = ALLOC_N(http_parser, 1);
-  TRACE();
-  hp->http_field = http_field;
-  hp->request_method = request_method;
-  hp->request_uri = request_uri;
-  hp->fragment = fragment;
-  hp->request_path = request_path;
-  hp->query_string = query_string;
-  hp->http_version = http_version;
-  hp->header_done = header_done;
-  http_parser_init(hp);
-
-  obj = Data_Wrap_Struct(klass, NULL, HttpParser_free, hp);
-
-  return obj;
-}
-
-
-/**
- * call-seq:
- *    parser.new -> parser
- *
- * Creates a new parser.
- */
-VALUE HttpParser_init(VALUE self)
-{
-  http_parser *http = NULL;
-  DATA_GET(self, http_parser, http);
-  http_parser_init(http);
-
-  return self;
-}
-
-
-/**
- * call-seq:
- *    parser.reset -> nil
- *
- * Resets the parser to it's initial state so that you can reuse it
- * rather than making new ones.
- */
-VALUE HttpParser_reset(VALUE self)
-{
-  http_parser *http = NULL;
-  DATA_GET(self, http_parser, http);
-  http_parser_init(http);
-
-  return Qnil;
-}
-
-
-/**
- * call-seq:
- *    parser.finish -> true/false
- *
- * Finishes a parser early which could put in a "good" or bad state.
- * You should call reset after finish it or bad things will happen.
- */
-VALUE HttpParser_finish(VALUE self)
-{
-  http_parser *http = NULL;
-  DATA_GET(self, http_parser, http);
-  http_parser_finish(http);
-
-  return http_parser_is_finished(http) ? Qtrue : Qfalse;
-}
-
-
-/**
- * call-seq:
- *    parser.execute(req_hash, data, start) -> Integer
- *
- * Takes a Hash and a String of data, parses the String of data filling in the Hash
- * returning an Integer to indicate how much of the data has been read.  No matter
- * what the return value, you should call HttpParser#finished? and HttpParser#error?
- * to figure out if it's done parsing or there was an error.
- * 
- * This function now throws an exception when there is a parsing error.  This makes 
- * the logic for working with the parser much easier.  You can still test for an 
- * error, but now you need to wrap the parser with an exception handling block.
- *
- * The third argument allows for parsing a partial request and then continuing
- * the parsing from that position.  It needs all of the original data as well 
- * so you have to append to the data buffer as you read.
- */
-VALUE HttpParser_execute(VALUE self, VALUE req_hash, VALUE data, VALUE start)
-{
-  http_parser *http = NULL;
-  int from = 0;
-  char *dptr = NULL;
-  long dlen = 0;
-
-  DATA_GET(self, http_parser, http);
-
-  from = FIX2INT(start);
-  dptr = RSTRING(data)->ptr;
-  dlen = RSTRING(data)->len;
-
-  if(from >= dlen) {
-    rb_raise(eHttpParserError, "Requested start is after data buffer end.");
-  } else {
-    http->data = (void *)req_hash;
-    http_parser_execute(http, dptr, dlen, from);
-
-    VALIDATE_MAX_LENGTH(http_parser_nread(http), HEADER);
-
-    if(http_parser_has_error(http)) {
-      rb_raise(eHttpParserError, "Invalid HTTP format, parsing fails.");
-    } else {
-      return INT2FIX(http_parser_nread(http));
-    }
-  }
-}
-
-
-
-/**
- * call-seq:
- *    parser.error? -> true/false
- *
- * Tells you whether the parser is in an error state.
- */
-VALUE HttpParser_has_error(VALUE self)
-{
-  http_parser *http = NULL;
-  DATA_GET(self, http_parser, http);
-
-  return http_parser_has_error(http) ? Qtrue : Qfalse;
-}
-
-
-/**
- * call-seq:
- *    parser.finished? -> true/false
- *
- * Tells you whether the parser is finished or not and in a good state.
- */
-VALUE HttpParser_is_finished(VALUE self)
-{
-  http_parser *http = NULL;
-  DATA_GET(self, http_parser, http);
-
-  return http_parser_is_finished(http) ? Qtrue : Qfalse;
-}
-
-
-/**
- * call-seq:
- *    parser.nread -> Integer
- *
- * Returns the amount of data processed so far during this processing cycle.  It is
- * set to 0 on initialize or reset calls and is incremented each time execute is called.
- */
-VALUE HttpParser_nread(VALUE self)
-{
-  http_parser *http = NULL;
-  DATA_GET(self, http_parser, http);
-
-  return INT2FIX(http->nread);
-}
-
-void Init_http11()
-{
-
-  mMongrel = rb_define_module("Mongrel");
-
-  DEF_GLOBAL(http_prefix, "HTTP_");
-  DEF_GLOBAL(request_method, "REQUEST_METHOD");
-  DEF_GLOBAL(request_uri, "REQUEST_URI");
-  DEF_GLOBAL(fragment, "FRAGMENT");
-  DEF_GLOBAL(query_string, "QUERY_STRING");
-  DEF_GLOBAL(http_version, "HTTP_VERSION");
-  DEF_GLOBAL(request_path, "REQUEST_PATH");
-  DEF_GLOBAL(content_length, "CONTENT_LENGTH");
-  DEF_GLOBAL(http_content_length, "HTTP_CONTENT_LENGTH");
-  DEF_GLOBAL(content_type, "CONTENT_TYPE");
-  DEF_GLOBAL(http_content_type, "HTTP_CONTENT_TYPE");
-  DEF_GLOBAL(gateway_interface, "GATEWAY_INTERFACE");
-  DEF_GLOBAL(gateway_interface_value, "CGI/1.2");
-  DEF_GLOBAL(server_name, "SERVER_NAME");
-  DEF_GLOBAL(server_port, "SERVER_PORT");
-  DEF_GLOBAL(server_protocol, "SERVER_PROTOCOL");
-  DEF_GLOBAL(server_protocol_value, "HTTP/1.1");
-  DEF_GLOBAL(http_host, "HTTP_HOST");
-  DEF_GLOBAL(mongrel_version, "Mongrel 1.1.5"); /* XXX Why is this defined here? */
-  DEF_GLOBAL(server_software, "SERVER_SOFTWARE");
-  DEF_GLOBAL(port_80, "80");
-
-  eHttpParserError = rb_define_class_under(mMongrel, "HttpParserError", rb_eIOError);
-
-  cHttpParser = rb_define_class_under(mMongrel, "HttpParser", rb_cObject);
-  rb_define_alloc_func(cHttpParser, HttpParser_alloc);
-  rb_define_method(cHttpParser, "initialize", HttpParser_init,0);
-  rb_define_method(cHttpParser, "reset", HttpParser_reset,0);
-  rb_define_method(cHttpParser, "finish", HttpParser_finish,0);
-  rb_define_method(cHttpParser, "execute", HttpParser_execute,3);
-  rb_define_method(cHttpParser, "error?", HttpParser_has_error,0);
-  rb_define_method(cHttpParser, "finished?", HttpParser_is_finished,0);
-  rb_define_method(cHttpParser, "nread", HttpParser_nread,0);
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.o b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.o
deleted file mode 100644
index dcdc6d7..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11.o and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.c b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.c
deleted file mode 100644
index 1712d29..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.c
+++ /dev/null
@@ -1,1221 +0,0 @@
-#line 1 "http11_parser.rl"
-/**
- * Copyright (c) 2005 Zed A. Shaw
- * You can redistribute it and/or modify it under the same terms as Ruby.
- */
-#include "http11_parser.h"
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-
-#define LEN(AT, FPC) (FPC - buffer - parser->AT)
-#define MARK(M,FPC) (parser->M = (FPC) - buffer)
-#define PTR_TO(F) (buffer + parser->F)
-
-/** Machine **/
-
-#line 74 "http11_parser.rl"
-
-
-/** Data **/
-
-#line 25 "http11_parser.c"
-static const int http_parser_start = 1;
-static const int http_parser_first_final = 57;
-static const int http_parser_error = 0;
-
-static const int http_parser_en_main = 1;
-
-#line 78 "http11_parser.rl"
-
-int http_parser_init(http_parser *parser)  {
-  int cs = 0;
-  
-#line 37 "http11_parser.c"
-	{
-	cs = http_parser_start;
-	}
-#line 82 "http11_parser.rl"
-  parser->cs = cs;
-  parser->body_start = 0;
-  parser->content_len = 0;
-  parser->mark = 0;
-  parser->nread = 0;
-  parser->field_len = 0;
-  parser->field_start = 0;    
-
-  return(1);
-}
-
-
-/** exec **/
-size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len, size_t off)  {
-  const char *p, *pe;
-  int cs = parser->cs;
-
-  assert(off <= len && "offset past end of buffer");
-
-  p = buffer+off;
-  pe = buffer+len;
-
-  assert(*pe == '\0' && "pointer does not end on NUL");
-  assert(pe - p == len - off && "pointers aren't same distance");
-
-
-  
-#line 69 "http11_parser.c"
-	{
-	if ( p == pe )
-		goto _out;
-	switch ( cs )
-	{
-case 1:
-	switch( (*p) ) {
-		case 36: goto tr0;
-		case 95: goto tr0;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto tr0;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto tr0;
-	} else
-		goto tr0;
-	goto st0;
-st0:
-	goto _out0;
-tr0:
-#line 22 "http11_parser.rl"
-	{MARK(mark, p); }
-	goto st2;
-st2:
-	if ( ++p == pe )
-		goto _out2;
-case 2:
-#line 99 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st38;
-		case 95: goto st38;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st38;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st38;
-	} else
-		goto st38;
-	goto st0;
-tr2:
-#line 36 "http11_parser.rl"
-	{ 
-    if(parser->request_method != NULL) 
-      parser->request_method(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st3;
-st3:
-	if ( ++p == pe )
-		goto _out3;
-case 3:
-#line 125 "http11_parser.c"
-	switch( (*p) ) {
-		case 42: goto tr4;
-		case 43: goto tr5;
-		case 47: goto tr6;
-		case 58: goto tr7;
-	}
-	if ( (*p) < 65 ) {
-		if ( 45 <= (*p) && (*p) <= 57 )
-			goto tr5;
-	} else if ( (*p) > 90 ) {
-		if ( 97 <= (*p) && (*p) <= 122 )
-			goto tr5;
-	} else
-		goto tr5;
-	goto st0;
-tr4:
-#line 22 "http11_parser.rl"
-	{MARK(mark, p); }
-	goto st4;
-st4:
-	if ( ++p == pe )
-		goto _out4;
-case 4:
-#line 149 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr8;
-		case 35: goto tr9;
-	}
-	goto st0;
-tr8:
-#line 40 "http11_parser.rl"
-	{ 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st5;
-tr30:
-#line 44 "http11_parser.rl"
-	{ 
-    if(parser->fragment != NULL)
-      parser->fragment(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st5;
-tr40:
-#line 60 "http11_parser.rl"
-	{
-    if(parser->request_path != NULL)
-      parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
-  }
-#line 40 "http11_parser.rl"
-	{ 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st5;
-tr51:
-#line 49 "http11_parser.rl"
-	{MARK(query_start, p); }
-#line 50 "http11_parser.rl"
-	{ 
-    if(parser->query_string != NULL)
-      parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
-  }
-#line 40 "http11_parser.rl"
-	{ 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st5;
-tr55:
-#line 50 "http11_parser.rl"
-	{ 
-    if(parser->query_string != NULL)
-      parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
-  }
-#line 40 "http11_parser.rl"
-	{ 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st5;
-st5:
-	if ( ++p == pe )
-		goto _out5;
-case 5:
-#line 211 "http11_parser.c"
-	if ( (*p) == 72 )
-		goto tr10;
-	goto st0;
-tr10:
-#line 22 "http11_parser.rl"
-	{MARK(mark, p); }
-	goto st6;
-st6:
-	if ( ++p == pe )
-		goto _out6;
-case 6:
-#line 223 "http11_parser.c"
-	if ( (*p) == 84 )
-		goto st7;
-	goto st0;
-st7:
-	if ( ++p == pe )
-		goto _out7;
-case 7:
-	if ( (*p) == 84 )
-		goto st8;
-	goto st0;
-st8:
-	if ( ++p == pe )
-		goto _out8;
-case 8:
-	if ( (*p) == 80 )
-		goto st9;
-	goto st0;
-st9:
-	if ( ++p == pe )
-		goto _out9;
-case 9:
-	if ( (*p) == 47 )
-		goto st10;
-	goto st0;
-st10:
-	if ( ++p == pe )
-		goto _out10;
-case 10:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st11;
-	goto st0;
-st11:
-	if ( ++p == pe )
-		goto _out11;
-case 11:
-	if ( (*p) == 46 )
-		goto st12;
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st11;
-	goto st0;
-st12:
-	if ( ++p == pe )
-		goto _out12;
-case 12:
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st13;
-	goto st0;
-st13:
-	if ( ++p == pe )
-		goto _out13;
-case 13:
-	if ( (*p) == 13 )
-		goto tr18;
-	if ( 48 <= (*p) && (*p) <= 57 )
-		goto st13;
-	goto st0;
-tr18:
-#line 55 "http11_parser.rl"
-	{	
-    if(parser->http_version != NULL)
-      parser->http_version(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st14;
-tr26:
-#line 31 "http11_parser.rl"
-	{ 
-    if(parser->http_field != NULL) {
-      parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p));
-    }
-  }
-	goto st14;
-st14:
-	if ( ++p == pe )
-		goto _out14;
-case 14:
-#line 299 "http11_parser.c"
-	if ( (*p) == 10 )
-		goto st15;
-	goto st0;
-st15:
-	if ( ++p == pe )
-		goto _out15;
-case 15:
-	switch( (*p) ) {
-		case 13: goto st16;
-		case 33: goto tr21;
-		case 124: goto tr21;
-		case 126: goto tr21;
-	}
-	if ( (*p) < 45 ) {
-		if ( (*p) > 39 ) {
-			if ( 42 <= (*p) && (*p) <= 43 )
-				goto tr21;
-		} else if ( (*p) >= 35 )
-			goto tr21;
-	} else if ( (*p) > 46 ) {
-		if ( (*p) < 65 ) {
-			if ( 48 <= (*p) && (*p) <= 57 )
-				goto tr21;
-		} else if ( (*p) > 90 ) {
-			if ( 94 <= (*p) && (*p) <= 122 )
-				goto tr21;
-		} else
-			goto tr21;
-	} else
-		goto tr21;
-	goto st0;
-st16:
-	if ( ++p == pe )
-		goto _out16;
-case 16:
-	if ( (*p) == 10 )
-		goto tr22;
-	goto st0;
-tr22:
-#line 65 "http11_parser.rl"
-	{ 
-    parser->body_start = p - buffer + 1; 
-    if(parser->header_done != NULL)
-      parser->header_done(parser->data, p + 1, pe - p - 1);
-    goto _out57;
-  }
-	goto st57;
-st57:
-	if ( ++p == pe )
-		goto _out57;
-case 57:
-#line 351 "http11_parser.c"
-	goto st0;
-tr21:
-#line 25 "http11_parser.rl"
-	{ MARK(field_start, p); }
-	goto st17;
-st17:
-	if ( ++p == pe )
-		goto _out17;
-case 17:
-#line 361 "http11_parser.c"
-	switch( (*p) ) {
-		case 33: goto st17;
-		case 58: goto tr24;
-		case 124: goto st17;
-		case 126: goto st17;
-	}
-	if ( (*p) < 45 ) {
-		if ( (*p) > 39 ) {
-			if ( 42 <= (*p) && (*p) <= 43 )
-				goto st17;
-		} else if ( (*p) >= 35 )
-			goto st17;
-	} else if ( (*p) > 46 ) {
-		if ( (*p) < 65 ) {
-			if ( 48 <= (*p) && (*p) <= 57 )
-				goto st17;
-		} else if ( (*p) > 90 ) {
-			if ( 94 <= (*p) && (*p) <= 122 )
-				goto st17;
-		} else
-			goto st17;
-	} else
-		goto st17;
-	goto st0;
-tr24:
-#line 26 "http11_parser.rl"
-	{ 
-    parser->field_len = LEN(field_start, p);
-  }
-	goto st18;
-tr27:
-#line 30 "http11_parser.rl"
-	{ MARK(mark, p); }
-	goto st18;
-st18:
-	if ( ++p == pe )
-		goto _out18;
-case 18:
-#line 400 "http11_parser.c"
-	switch( (*p) ) {
-		case 13: goto tr26;
-		case 32: goto tr27;
-	}
-	goto tr25;
-tr25:
-#line 30 "http11_parser.rl"
-	{ MARK(mark, p); }
-	goto st19;
-st19:
-	if ( ++p == pe )
-		goto _out19;
-case 19:
-#line 414 "http11_parser.c"
-	if ( (*p) == 13 )
-		goto tr26;
-	goto st19;
-tr9:
-#line 40 "http11_parser.rl"
-	{ 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st20;
-tr41:
-#line 60 "http11_parser.rl"
-	{
-    if(parser->request_path != NULL)
-      parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
-  }
-#line 40 "http11_parser.rl"
-	{ 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st20;
-tr52:
-#line 49 "http11_parser.rl"
-	{MARK(query_start, p); }
-#line 50 "http11_parser.rl"
-	{ 
-    if(parser->query_string != NULL)
-      parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
-  }
-#line 40 "http11_parser.rl"
-	{ 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st20;
-tr56:
-#line 50 "http11_parser.rl"
-	{ 
-    if(parser->query_string != NULL)
-      parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
-  }
-#line 40 "http11_parser.rl"
-	{ 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
-  }
-	goto st20;
-st20:
-	if ( ++p == pe )
-		goto _out20;
-case 20:
-#line 467 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr30;
-		case 37: goto tr31;
-		case 60: goto st0;
-		case 62: goto st0;
-		case 127: goto st0;
-	}
-	if ( (*p) > 31 ) {
-		if ( 34 <= (*p) && (*p) <= 35 )
-			goto st0;
-	} else if ( (*p) >= 0 )
-		goto st0;
-	goto tr29;
-tr29:
-#line 22 "http11_parser.rl"
-	{MARK(mark, p); }
-	goto st21;
-st21:
-	if ( ++p == pe )
-		goto _out21;
-case 21:
-#line 489 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr30;
-		case 37: goto st22;
-		case 60: goto st0;
-		case 62: goto st0;
-		case 127: goto st0;
-	}
-	if ( (*p) > 31 ) {
-		if ( 34 <= (*p) && (*p) <= 35 )
-			goto st0;
-	} else if ( (*p) >= 0 )
-		goto st0;
-	goto st21;
-tr31:
-#line 22 "http11_parser.rl"
-	{MARK(mark, p); }
-	goto st22;
-st22:
-	if ( ++p == pe )
-		goto _out22;
-case 22:
-#line 511 "http11_parser.c"
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st23;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st23;
-	} else
-		goto st23;
-	goto st0;
-st23:
-	if ( ++p == pe )
-		goto _out23;
-case 23:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st21;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st21;
-	} else
-		goto st21;
-	goto st0;
-tr5:
-#line 22 "http11_parser.rl"
-	{MARK(mark, p); }
-	goto st24;
-st24:
-	if ( ++p == pe )
-		goto _out24;
-case 24:
-#line 542 "http11_parser.c"
-	switch( (*p) ) {
-		case 43: goto st24;
-		case 58: goto st25;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st24;
-	} else if ( (*p) > 57 ) {
-		if ( (*p) > 90 ) {
-			if ( 97 <= (*p) && (*p) <= 122 )
-				goto st24;
-		} else if ( (*p) >= 65 )
-			goto st24;
-	} else
-		goto st24;
-	goto st0;
-tr7:
-#line 22 "http11_parser.rl"
-	{MARK(mark, p); }
-	goto st25;
-st25:
-	if ( ++p == pe )
-		goto _out25;
-case 25:
-#line 567 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr8;
-		case 34: goto st0;
-		case 35: goto tr9;
-		case 37: goto st26;
-		case 60: goto st0;
-		case 62: goto st0;
-		case 127: goto st0;
-	}
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto st25;
-st26:
-	if ( ++p == pe )
-		goto _out26;
-case 26:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st27;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st27;
-	} else
-		goto st27;
-	goto st0;
-st27:
-	if ( ++p == pe )
-		goto _out27;
-case 27:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st25;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st25;
-	} else
-		goto st25;
-	goto st0;
-tr6:
-#line 22 "http11_parser.rl"
-	{MARK(mark, p); }
-	goto st28;
-st28:
-	if ( ++p == pe )
-		goto _out28;
-case 28:
-#line 614 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr40;
-		case 34: goto st0;
-		case 35: goto tr41;
-		case 37: goto st29;
-		case 59: goto tr43;
-		case 60: goto st0;
-		case 62: goto st0;
-		case 63: goto tr44;
-		case 127: goto st0;
-	}
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto st28;
-st29:
-	if ( ++p == pe )
-		goto _out29;
-case 29:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st30;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st30;
-	} else
-		goto st30;
-	goto st0;
-st30:
-	if ( ++p == pe )
-		goto _out30;
-case 30:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st28;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st28;
-	} else
-		goto st28;
-	goto st0;
-tr43:
-#line 60 "http11_parser.rl"
-	{
-    if(parser->request_path != NULL)
-      parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
-  }
-	goto st31;
-st31:
-	if ( ++p == pe )
-		goto _out31;
-case 31:
-#line 666 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr8;
-		case 34: goto st0;
-		case 35: goto tr9;
-		case 37: goto st32;
-		case 60: goto st0;
-		case 62: goto st0;
-		case 63: goto st34;
-		case 127: goto st0;
-	}
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto st31;
-st32:
-	if ( ++p == pe )
-		goto _out32;
-case 32:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st33;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st33;
-	} else
-		goto st33;
-	goto st0;
-st33:
-	if ( ++p == pe )
-		goto _out33;
-case 33:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st31;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st31;
-	} else
-		goto st31;
-	goto st0;
-tr44:
-#line 60 "http11_parser.rl"
-	{
-    if(parser->request_path != NULL)
-      parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
-  }
-	goto st34;
-st34:
-	if ( ++p == pe )
-		goto _out34;
-case 34:
-#line 717 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr51;
-		case 34: goto st0;
-		case 35: goto tr52;
-		case 37: goto tr53;
-		case 60: goto st0;
-		case 62: goto st0;
-		case 127: goto st0;
-	}
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto tr50;
-tr50:
-#line 49 "http11_parser.rl"
-	{MARK(query_start, p); }
-	goto st35;
-st35:
-	if ( ++p == pe )
-		goto _out35;
-case 35:
-#line 738 "http11_parser.c"
-	switch( (*p) ) {
-		case 32: goto tr55;
-		case 34: goto st0;
-		case 35: goto tr56;
-		case 37: goto st36;
-		case 60: goto st0;
-		case 62: goto st0;
-		case 127: goto st0;
-	}
-	if ( 0 <= (*p) && (*p) <= 31 )
-		goto st0;
-	goto st35;
-tr53:
-#line 49 "http11_parser.rl"
-	{MARK(query_start, p); }
-	goto st36;
-st36:
-	if ( ++p == pe )
-		goto _out36;
-case 36:
-#line 759 "http11_parser.c"
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st37;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st37;
-	} else
-		goto st37;
-	goto st0;
-st37:
-	if ( ++p == pe )
-		goto _out37;
-case 37:
-	if ( (*p) < 65 ) {
-		if ( 48 <= (*p) && (*p) <= 57 )
-			goto st35;
-	} else if ( (*p) > 70 ) {
-		if ( 97 <= (*p) && (*p) <= 102 )
-			goto st35;
-	} else
-		goto st35;
-	goto st0;
-st38:
-	if ( ++p == pe )
-		goto _out38;
-case 38:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st39;
-		case 95: goto st39;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st39;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st39;
-	} else
-		goto st39;
-	goto st0;
-st39:
-	if ( ++p == pe )
-		goto _out39;
-case 39:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st40;
-		case 95: goto st40;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st40;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st40;
-	} else
-		goto st40;
-	goto st0;
-st40:
-	if ( ++p == pe )
-		goto _out40;
-case 40:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st41;
-		case 95: goto st41;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st41;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st41;
-	} else
-		goto st41;
-	goto st0;
-st41:
-	if ( ++p == pe )
-		goto _out41;
-case 41:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st42;
-		case 95: goto st42;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st42;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st42;
-	} else
-		goto st42;
-	goto st0;
-st42:
-	if ( ++p == pe )
-		goto _out42;
-case 42:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st43;
-		case 95: goto st43;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st43;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st43;
-	} else
-		goto st43;
-	goto st0;
-st43:
-	if ( ++p == pe )
-		goto _out43;
-case 43:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st44;
-		case 95: goto st44;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st44;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st44;
-	} else
-		goto st44;
-	goto st0;
-st44:
-	if ( ++p == pe )
-		goto _out44;
-case 44:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st45;
-		case 95: goto st45;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st45;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st45;
-	} else
-		goto st45;
-	goto st0;
-st45:
-	if ( ++p == pe )
-		goto _out45;
-case 45:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st46;
-		case 95: goto st46;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st46;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st46;
-	} else
-		goto st46;
-	goto st0;
-st46:
-	if ( ++p == pe )
-		goto _out46;
-case 46:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st47;
-		case 95: goto st47;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st47;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st47;
-	} else
-		goto st47;
-	goto st0;
-st47:
-	if ( ++p == pe )
-		goto _out47;
-case 47:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st48;
-		case 95: goto st48;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st48;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st48;
-	} else
-		goto st48;
-	goto st0;
-st48:
-	if ( ++p == pe )
-		goto _out48;
-case 48:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st49;
-		case 95: goto st49;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st49;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st49;
-	} else
-		goto st49;
-	goto st0;
-st49:
-	if ( ++p == pe )
-		goto _out49;
-case 49:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st50;
-		case 95: goto st50;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st50;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st50;
-	} else
-		goto st50;
-	goto st0;
-st50:
-	if ( ++p == pe )
-		goto _out50;
-case 50:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st51;
-		case 95: goto st51;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st51;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st51;
-	} else
-		goto st51;
-	goto st0;
-st51:
-	if ( ++p == pe )
-		goto _out51;
-case 51:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st52;
-		case 95: goto st52;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st52;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st52;
-	} else
-		goto st52;
-	goto st0;
-st52:
-	if ( ++p == pe )
-		goto _out52;
-case 52:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st53;
-		case 95: goto st53;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st53;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st53;
-	} else
-		goto st53;
-	goto st0;
-st53:
-	if ( ++p == pe )
-		goto _out53;
-case 53:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st54;
-		case 95: goto st54;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st54;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st54;
-	} else
-		goto st54;
-	goto st0;
-st54:
-	if ( ++p == pe )
-		goto _out54;
-case 54:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st55;
-		case 95: goto st55;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st55;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st55;
-	} else
-		goto st55;
-	goto st0;
-st55:
-	if ( ++p == pe )
-		goto _out55;
-case 55:
-	switch( (*p) ) {
-		case 32: goto tr2;
-		case 36: goto st56;
-		case 95: goto st56;
-	}
-	if ( (*p) < 48 ) {
-		if ( 45 <= (*p) && (*p) <= 46 )
-			goto st56;
-	} else if ( (*p) > 57 ) {
-		if ( 65 <= (*p) && (*p) <= 90 )
-			goto st56;
-	} else
-		goto st56;
-	goto st0;
-st56:
-	if ( ++p == pe )
-		goto _out56;
-case 56:
-	if ( (*p) == 32 )
-		goto tr2;
-	goto st0;
-	}
-	_out0: cs = 0; goto _out; 
-	_out2: cs = 2; goto _out; 
-	_out3: cs = 3; goto _out; 
-	_out4: cs = 4; goto _out; 
-	_out5: cs = 5; goto _out; 
-	_out6: cs = 6; goto _out; 
-	_out7: cs = 7; goto _out; 
-	_out8: cs = 8; goto _out; 
-	_out9: cs = 9; goto _out; 
-	_out10: cs = 10; goto _out; 
-	_out11: cs = 11; goto _out; 
-	_out12: cs = 12; goto _out; 
-	_out13: cs = 13; goto _out; 
-	_out14: cs = 14; goto _out; 
-	_out15: cs = 15; goto _out; 
-	_out16: cs = 16; goto _out; 
-	_out57: cs = 57; goto _out; 
-	_out17: cs = 17; goto _out; 
-	_out18: cs = 18; goto _out; 
-	_out19: cs = 19; goto _out; 
-	_out20: cs = 20; goto _out; 
-	_out21: cs = 21; goto _out; 
-	_out22: cs = 22; goto _out; 
-	_out23: cs = 23; goto _out; 
-	_out24: cs = 24; goto _out; 
-	_out25: cs = 25; goto _out; 
-	_out26: cs = 26; goto _out; 
-	_out27: cs = 27; goto _out; 
-	_out28: cs = 28; goto _out; 
-	_out29: cs = 29; goto _out; 
-	_out30: cs = 30; goto _out; 
-	_out31: cs = 31; goto _out; 
-	_out32: cs = 32; goto _out; 
-	_out33: cs = 33; goto _out; 
-	_out34: cs = 34; goto _out; 
-	_out35: cs = 35; goto _out; 
-	_out36: cs = 36; goto _out; 
-	_out37: cs = 37; goto _out; 
-	_out38: cs = 38; goto _out; 
-	_out39: cs = 39; goto _out; 
-	_out40: cs = 40; goto _out; 
-	_out41: cs = 41; goto _out; 
-	_out42: cs = 42; goto _out; 
-	_out43: cs = 43; goto _out; 
-	_out44: cs = 44; goto _out; 
-	_out45: cs = 45; goto _out; 
-	_out46: cs = 46; goto _out; 
-	_out47: cs = 47; goto _out; 
-	_out48: cs = 48; goto _out; 
-	_out49: cs = 49; goto _out; 
-	_out50: cs = 50; goto _out; 
-	_out51: cs = 51; goto _out; 
-	_out52: cs = 52; goto _out; 
-	_out53: cs = 53; goto _out; 
-	_out54: cs = 54; goto _out; 
-	_out55: cs = 55; goto _out; 
-	_out56: cs = 56; goto _out; 
-
-	_out: {}
-	}
-#line 109 "http11_parser.rl"
-
-  parser->cs = cs;
-  parser->nread += p - (buffer + off);
-
-  assert(p <= pe && "buffer overflow after parsing execute");
-  assert(parser->nread <= len && "nread longer than length");
-  assert(parser->body_start <= len && "body starts after buffer end");
-  assert(parser->mark < len && "mark is after buffer end");
-  assert(parser->field_len <= len && "field has length longer than whole buffer");
-  assert(parser->field_start < len && "field starts after buffer end");
-
-  if(parser->body_start) {
-    /* final \r\n combo encountered so stop right here */
-    
-#line 1189 "http11_parser.c"
-#line 123 "http11_parser.rl"
-    parser->nread++;
-  }
-
-  return(parser->nread);
-}
-
-int http_parser_finish(http_parser *parser)
-{
-  int cs = parser->cs;
-
-  
-#line 1202 "http11_parser.c"
-#line 134 "http11_parser.rl"
-
-  parser->cs = cs;
-
-  if (http_parser_has_error(parser) ) {
-    return -1;
-  } else if (http_parser_is_finished(parser) ) {
-    return 1;
-  } else {
-    return 0;
-  }
-}
-
-int http_parser_has_error(http_parser *parser) {
-  return parser->cs == http_parser_error;
-}
-
-int http_parser_is_finished(http_parser *parser) {
-  return parser->cs == http_parser_first_final;
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.h b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.h
deleted file mode 100644
index 8d074ba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Copyright (c) 2005 Zed A. Shaw
- * You can redistribute it and/or modify it under the same terms as Ruby.
- */
-
-#ifndef http11_parser_h
-#define http11_parser_h
-
-#include <sys/types.h>
-
-#if defined(_WIN32)
-#include <stddef.h>
-#endif
-
-typedef void (*element_cb)(void *data, const char *at, size_t length);
-typedef void (*field_cb)(void *data, const char *field, size_t flen, const char *value, size_t vlen);
-
-typedef struct http_parser { 
-  int cs;
-  size_t body_start;
-  int content_len;
-  size_t nread;
-  size_t mark;
-  size_t field_start;
-  size_t field_len;
-  size_t query_start;
-
-  void *data;
-
-  field_cb http_field;
-  element_cb request_method;
-  element_cb request_uri;
-  element_cb fragment;
-  element_cb request_path;
-  element_cb query_string;
-  element_cb http_version;
-  element_cb header_done;
-  
-} http_parser;
-
-int http_parser_init(http_parser *parser);
-int http_parser_finish(http_parser *parser);
-size_t http_parser_execute(http_parser *parser, const char *data, size_t len, size_t off);
-int http_parser_has_error(http_parser *parser);
-int http_parser_is_finished(http_parser *parser);
-
-#define http_parser_nread(parser) (parser)->nread 
-
-#endif
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.java.rl b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.java.rl
deleted file mode 100644
index 71f8d3c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.java.rl
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.jruby.mongrel;
-
-import org.jruby.util.ByteList;
-
-public class Http11Parser {
-
-/** Machine **/
-
-%%{
-  
-  machine http_parser;
-
-  action mark {parser.mark = fpc; }
-
-  action start_field { parser.field_start = fpc; }
-  action write_field { 
-    parser.field_len = fpc-parser.field_start;
-  }
-
-  action start_value { parser.mark = fpc; }
-  action write_value { 
-    if(parser.http_field != null) {
-      parser.http_field.call(parser.data, parser.field_start, parser.field_len, parser.mark, fpc-parser.mark);
-    }
-  }
-  action request_method { 
-    if(parser.request_method != null) 
-      parser.request_method.call(parser.data, parser.mark, fpc-parser.mark);
-  }
-  action request_uri { 
-    if(parser.request_uri != null)
-      parser.request_uri.call(parser.data, parser.mark, fpc-parser.mark);
-  }
-  action fragment { 
-    if(parser.fragment != null)
-      parser.fragment.call(parser.data, parser.mark, fpc-parser.mark);
-  }
-  
-  action start_query {parser.query_start = fpc; }
-  action query_string { 
-    if(parser.query_string != null)
-      parser.query_string.call(parser.data, parser.query_start, fpc-parser.query_start);
-  }
-
-  action http_version {	
-    if(parser.http_version != null)
-      parser.http_version.call(parser.data, parser.mark, fpc-parser.mark);
-  }
-
-  action request_path {
-    if(parser.request_path != null)
-      parser.request_path.call(parser.data, parser.mark, fpc-parser.mark);
-  }
-
-  action done { 
-    parser.body_start = fpc + 1; 
-    if(parser.header_done != null)
-      parser.header_done.call(parser.data, fpc + 1, pe - fpc - 1);
-    fbreak;
-  }
-
-  include http_parser_common "http11_parser_common.rl";
-
-}%%
-
-/** Data **/
-%% write data;
-
-   public static interface ElementCB {
-     public void call(Object data, int at, int length);
-   }
-
-   public static interface FieldCB {
-     public void call(Object data, int field, int flen, int value, int vlen);
-   }
-
-   public static class HttpParser {
-      int cs;
-      int body_start;
-      int content_len;
-      int nread;
-      int mark;
-      int field_start;
-      int field_len;
-      int query_start;
-
-      Object data;
-      ByteList buffer;
-
-      public FieldCB http_field;
-      public ElementCB request_method;
-      public ElementCB request_uri;
-      public ElementCB fragment;
-      public ElementCB request_path;
-      public ElementCB query_string;
-      public ElementCB http_version;
-      public ElementCB header_done;
-
-      public void init() {
-          cs = 0;
-
-          %% write init;
-
-          body_start = 0;
-          content_len = 0;
-          mark = 0;
-          nread = 0;
-          field_len = 0;
-          field_start = 0;
-      }
-   }
-
-   public final HttpParser parser = new HttpParser();
-
-   public int execute(ByteList buffer, int off) {
-     int p, pe;
-     int cs = parser.cs;
-     int len = buffer.realSize;
-     assert off<=len : "offset past end of buffer";
-
-     p = off;
-     pe = len;
-     byte[] data = buffer.bytes;
-     parser.buffer = buffer;
-
-     %% write exec;
-
-     parser.cs = cs;
-     parser.nread += (p - off);
-     
-     assert p <= pe                  : "buffer overflow after parsing execute";
-     assert parser.nread <= len      : "nread longer than length";
-     assert parser.body_start <= len : "body starts after buffer end";
-     assert parser.mark < len        : "mark is after buffer end";
-     assert parser.field_len <= len  : "field has length longer than whole buffer";
-     assert parser.field_start < len : "field starts after buffer end";
-
-     if(parser.body_start>0) {
-        /* final \r\n combo encountered so stop right here */
-        %%write eof;
-        parser.nread++;
-     }
-
-     return parser.nread;
-   }
-
-   public int finish() {
-     int cs = parser.cs;
-
-     %%write eof;
-
-     parser.cs = cs;
- 
-    if(has_error()) {
-      return -1;
-    } else if(is_finished()) {
-      return 1;
-    } else {
-      return 0;
-    }
-  }
-
-  public boolean has_error() {
-    return parser.cs == http_parser_error;
-  }
-
-  public boolean is_finished() {
-    return parser.cs == http_parser_first_final;
-  }
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.o b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.o
deleted file mode 100644
index 1564672..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.o and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.rl b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.rl
deleted file mode 100644
index fffe57a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser.rl
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * Copyright (c) 2005 Zed A. Shaw
- * You can redistribute it and/or modify it under the same terms as Ruby.
- */
-#include "http11_parser.h"
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-
-#define LEN(AT, FPC) (FPC - buffer - parser->AT)
-#define MARK(M,FPC) (parser->M = (FPC) - buffer)
-#define PTR_TO(F) (buffer + parser->F)
-
-/** Machine **/
-
-%%{
-  
-  machine http_parser;
-
-  action mark {MARK(mark, fpc); }
-
-
-  action start_field { MARK(field_start, fpc); }
-  action write_field { 
-    parser->field_len = LEN(field_start, fpc);
-  }
-
-  action start_value { MARK(mark, fpc); }
-  action write_value { 
-    if(parser->http_field != NULL) {
-      parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, fpc));
-    }
-  }
-  action request_method { 
-    if(parser->request_method != NULL) 
-      parser->request_method(parser->data, PTR_TO(mark), LEN(mark, fpc));
-  }
-  action request_uri { 
-    if(parser->request_uri != NULL)
-      parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, fpc));
-  }
-  action fragment { 
-    if(parser->fragment != NULL)
-      parser->fragment(parser->data, PTR_TO(mark), LEN(mark, fpc));
-  }
-
-  action start_query {MARK(query_start, fpc); }
-  action query_string { 
-    if(parser->query_string != NULL)
-      parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, fpc));
-  }
-
-  action http_version {	
-    if(parser->http_version != NULL)
-      parser->http_version(parser->data, PTR_TO(mark), LEN(mark, fpc));
-  }
-
-  action request_path {
-    if(parser->request_path != NULL)
-      parser->request_path(parser->data, PTR_TO(mark), LEN(mark,fpc));
-  }
-
-  action done { 
-    parser->body_start = fpc - buffer + 1; 
-    if(parser->header_done != NULL)
-      parser->header_done(parser->data, fpc + 1, pe - fpc - 1);
-    fbreak;
-  }
-
-  include http_parser_common "http11_parser_common.rl";
-
-}%%
-
-/** Data **/
-%% write data;
-
-int http_parser_init(http_parser *parser)  {
-  int cs = 0;
-  %% write init;
-  parser->cs = cs;
-  parser->body_start = 0;
-  parser->content_len = 0;
-  parser->mark = 0;
-  parser->nread = 0;
-  parser->field_len = 0;
-  parser->field_start = 0;    
-
-  return(1);
-}
-
-
-/** exec **/
-size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len, size_t off)  {
-  const char *p, *pe;
-  int cs = parser->cs;
-
-  assert(off <= len && "offset past end of buffer");
-
-  p = buffer+off;
-  pe = buffer+len;
-
-  assert(*pe == '\0' && "pointer does not end on NUL");
-  assert(pe - p == len - off && "pointers aren't same distance");
-
-
-  %% write exec;
-
-  parser->cs = cs;
-  parser->nread += p - (buffer + off);
-
-  assert(p <= pe && "buffer overflow after parsing execute");
-  assert(parser->nread <= len && "nread longer than length");
-  assert(parser->body_start <= len && "body starts after buffer end");
-  assert(parser->mark < len && "mark is after buffer end");
-  assert(parser->field_len <= len && "field has length longer than whole buffer");
-  assert(parser->field_start < len && "field starts after buffer end");
-
-  if(parser->body_start) {
-    /* final \r\n combo encountered so stop right here */
-    %%write eof;
-    parser->nread++;
-  }
-
-  return(parser->nread);
-}
-
-int http_parser_finish(http_parser *parser)
-{
-  int cs = parser->cs;
-
-  %%write eof;
-
-  parser->cs = cs;
-
-  if (http_parser_has_error(parser) ) {
-    return -1;
-  } else if (http_parser_is_finished(parser) ) {
-    return 1;
-  } else {
-    return 0;
-  }
-}
-
-int http_parser_has_error(http_parser *parser) {
-  return parser->cs == http_parser_error;
-}
-
-int http_parser_is_finished(http_parser *parser) {
-  return parser->cs == http_parser_first_final;
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser_common.rl b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser_common.rl
deleted file mode 100644
index a70d4da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11/http11_parser_common.rl
+++ /dev/null
@@ -1,54 +0,0 @@
-%%{
-  
-  machine http_parser_common;
-
-#### HTTP PROTOCOL GRAMMAR
-# line endings
-  CRLF = "\r\n";
-
-# character types
-  CTL = (cntrl | 127);
-  safe = ("$" | "-" | "_" | ".");
-  extra = ("!" | "*" | "'" | "(" | ")" | ",");
-  reserved = (";" | "/" | "?" | ":" | "@" | "&" | "=" | "+");
-  unsafe = (CTL | " " | "\"" | "#" | "%" | "<" | ">");
-  national = any -- (alpha | digit | reserved | extra | safe | unsafe);
-  unreserved = (alpha | digit | safe | extra | national);
-  escape = ("%" xdigit xdigit);
-  uchar = (unreserved | escape);
-  pchar = (uchar | ":" | "@" | "&" | "=" | "+");
-  tspecials = ("(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\\" | "\"" | "/" | "[" | "]" | "?" | "=" | "{" | "}" | " " | "\t");
-
-# elements
-  token = (ascii -- (CTL | tspecials));
-
-# URI schemes and absolute paths
-  scheme = ( alpha | digit | "+" | "-" | "." )* ;
-  absolute_uri = (scheme ":" (uchar | reserved )*);
-
-  path = ( pchar+ ( "/" pchar* )* ) ;
-  query = ( uchar | reserved )* %query_string ;
-  param = ( pchar | "/" )* ;
-  params = ( param ( ";" param )* ) ;
-  rel_path = ( path? %request_path (";" params)? ) ("?" %start_query query)?;
-  absolute_path = ( "/"+ rel_path );
-
-  Request_URI = ( "*" | absolute_uri | absolute_path ) >mark %request_uri;
-  Fragment = ( uchar | reserved )* >mark %fragment;
-  Method = ( upper | digit | safe ){1,20} >mark %request_method;
-
-  http_number = ( digit+ "." digit+ ) ;
-  HTTP_Version = ( "HTTP/" http_number ) >mark %http_version ;
-  Request_Line = ( Method " " Request_URI ("#" Fragment){0,1} " " HTTP_Version CRLF ) ;
-
-  field_name = ( token -- ":" )+ >start_field %write_field;
-
-  field_value = any* >start_value %write_value;
-
-  message_header = field_name ":" " "* field_value :> CRLF;
-
-  Request = Request_Line ( message_header )* ( CRLF @done );
-
-main := Request;
-
-}%%
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/Http11Service.java b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/Http11Service.java
deleted file mode 100644
index 5d78c49..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/Http11Service.java
+++ /dev/null
@@ -1,13 +0,0 @@
-import java.io.IOException;
-        
-import org.jruby.Ruby;
-import org.jruby.runtime.load.BasicLibraryService;
-
-import org.jruby.mongrel.Http11;
-
-public class Http11Service implements BasicLibraryService { 
-    public boolean basicLoad(final Ruby runtime) throws IOException {
-        Http11.createHttp11(runtime);
-        return true;
-    }
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/org/jruby/mongrel/Http11.java b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/org/jruby/mongrel/Http11.java
deleted file mode 100644
index 79a950b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/org/jruby/mongrel/Http11.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/***** BEGIN LICENSE BLOCK *****
- * Version: CPL 1.0/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Common Public
- * License Version 1.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.eclipse.org/legal/cpl-v10.html
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * Copyright (C) 2007 Ola Bini <ola at ologix.com>
- * 
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the CPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the CPL, the GPL or the LGPL.
- ***** END LICENSE BLOCK *****/
-package org.jruby.mongrel;
-
-import org.jruby.Ruby;
-import org.jruby.RubyClass;
-import org.jruby.RubyHash;
-import org.jruby.RubyModule;
-import org.jruby.RubyNumeric;
-import org.jruby.RubyObject;
-import org.jruby.RubyString;
-
-import org.jruby.runtime.CallbackFactory;
-import org.jruby.runtime.ObjectAllocator;
-import org.jruby.runtime.builtin.IRubyObject;
-
-import org.jruby.exceptions.RaiseException;
-
-import org.jruby.util.ByteList;
-
-/**
- * @author <a href="mailto:ola.bini at ki.se">Ola Bini</a>
- */
-public class Http11 extends RubyObject {
-    public final static int MAX_FIELD_NAME_LENGTH = 256;
-    public final static String MAX_FIELD_NAME_LENGTH_ERR = "HTTP element FIELD_NAME is longer than the 256 allowed length.";
-    public final static int MAX_FIELD_VALUE_LENGTH = 80 * 1024;
-    public final static String MAX_FIELD_VALUE_LENGTH_ERR = "HTTP element FIELD_VALUE is longer than the 81920 allowed length.";
-    public final static int MAX_REQUEST_URI_LENGTH = 1024 * 12;
-    public final static String MAX_REQUEST_URI_LENGTH_ERR = "HTTP element REQUEST_URI is longer than the 12288 allowed length.";
-    public final static int MAX_FRAGMENT_LENGTH = 1024;
-    public final static String MAX_FRAGMENT_LENGTH_ERR = "HTTP element REQUEST_PATH is longer than the 1024 allowed length.";
-    public final static int MAX_REQUEST_PATH_LENGTH = 1024;
-    public final static String MAX_REQUEST_PATH_LENGTH_ERR = "HTTP element REQUEST_PATH is longer than the 1024 allowed length.";
-    public final static int MAX_QUERY_STRING_LENGTH = 1024 * 10;
-    public final static String MAX_QUERY_STRING_LENGTH_ERR = "HTTP element QUERY_STRING is longer than the 10240 allowed length.";
-    public final static int MAX_HEADER_LENGTH = 1024 * (80 + 32);
-    public final static String MAX_HEADER_LENGTH_ERR = "HTTP element HEADER is longer than the 114688 allowed length.";
-
-
-    private static ObjectAllocator ALLOCATOR = new ObjectAllocator() {
-        public IRubyObject allocate(Ruby runtime, RubyClass klass) {
-            return new Http11(runtime, klass);
-        }
-    };
-
-    public static void createHttp11(Ruby runtime) {
-        RubyModule mMongrel = runtime.defineModule("Mongrel");
-        mMongrel.defineClassUnder("HttpParserError",runtime.getClass("IOError"),runtime.getClass("IOError").getAllocator());
-
-        CallbackFactory cf = runtime.callbackFactory(Http11.class);
-
-        RubyClass cHttpParser = mMongrel.defineClassUnder("HttpParser",runtime.getObject(),ALLOCATOR);
-        cHttpParser.defineFastMethod("initialize",cf.getFastMethod("initialize"));
-        cHttpParser.defineFastMethod("reset",cf.getFastMethod("reset"));
-        cHttpParser.defineFastMethod("finish",cf.getFastMethod("finish"));
-        cHttpParser.defineFastMethod("execute",cf.getFastMethod("execute", IRubyObject.class, IRubyObject.class, IRubyObject.class));
-        cHttpParser.defineFastMethod("error?",cf.getFastMethod("has_error"));
-        cHttpParser.defineFastMethod("finished?",cf.getFastMethod("is_finished"));
-        cHttpParser.defineFastMethod("nread",cf.getFastMethod("nread"));
-    }
-
-    private Ruby runtime;
-    private RubyClass eHttpParserError;
-    private Http11Parser hp;
-
-    public Http11(Ruby runtime, RubyClass clazz) {
-        super(runtime,clazz);
-        this.runtime = runtime;
-        this.eHttpParserError = (RubyClass)runtime.getModule("Mongrel").getConstant("HttpParserError");
-        this.hp = new Http11Parser();
-        this.hp.parser.http_field = http_field;
-        this.hp.parser.request_method = request_method;
-        this.hp.parser.request_uri = request_uri;
-        this.hp.parser.fragment = fragment;
-        this.hp.parser.request_path = request_path;
-        this.hp.parser.query_string = query_string;
-        this.hp.parser.http_version = http_version;
-        this.hp.parser.header_done = header_done;
-        this.hp.parser.init();
-    }
-
-    public void validateMaxLength(int len, int max, String msg) {
-        if(len>max) {
-            throw new RaiseException(runtime, eHttpParserError, msg, true);
-        }
-    }
-
-    private Http11Parser.FieldCB http_field = new Http11Parser.FieldCB() {
-            public void call(Object data, int field, int flen, int value, int vlen) {
-                RubyHash req = (RubyHash)data;
-                RubyString v,f;
-                validateMaxLength(flen, MAX_FIELD_NAME_LENGTH, MAX_FIELD_NAME_LENGTH_ERR);
-                validateMaxLength(vlen, MAX_FIELD_VALUE_LENGTH, MAX_FIELD_VALUE_LENGTH_ERR);
-
-                v = RubyString.newString(runtime, new ByteList(Http11.this.hp.parser.buffer,value,vlen));
-                f = RubyString.newString(runtime, "HTTP_");
-                ByteList b = new ByteList(Http11.this.hp.parser.buffer,field,flen);
-                for(int i=0,j=b.realSize;i<j;i++) {
-                    if((b.bytes[i]&0xFF) == '-') {
-                        b.bytes[i] = (byte)'_';
-                    } else {
-                        b.bytes[i] = (byte)Character.toUpperCase((char)b.bytes[i]);
-                    }
-                }
-                f.cat(b);
-                req.aset(f,v);
-            }
-        };
-
-    private Http11Parser.ElementCB request_method = new Http11Parser.ElementCB() {
-            public void call(Object data, int at, int length) {
-                RubyHash req = (RubyHash)data;
-                RubyString val = RubyString.newString(runtime,new ByteList(hp.parser.buffer,at,length));
-                req.aset(runtime.newString("REQUEST_METHOD"),val);
-            }
-        };
-
-    private Http11Parser.ElementCB request_uri = new Http11Parser.ElementCB() {
-            public void call(Object data, int at, int length) {
-                RubyHash req = (RubyHash)data;
-                validateMaxLength(length, MAX_REQUEST_URI_LENGTH, MAX_REQUEST_URI_LENGTH_ERR);
-                RubyString val = RubyString.newString(runtime,new ByteList(hp.parser.buffer,at,length));
-                req.aset(runtime.newString("REQUEST_URI"),val);
-            }
-        };
-
-    private Http11Parser.ElementCB fragment = new Http11Parser.ElementCB() {
-            public void call(Object data, int at, int length) {
-                RubyHash req = (RubyHash)data;
-                validateMaxLength(length, MAX_FRAGMENT_LENGTH, MAX_FRAGMENT_LENGTH_ERR);
-                RubyString val = RubyString.newString(runtime,new ByteList(hp.parser.buffer,at,length));
-                req.aset(runtime.newString("FRAGMENT"),val);
-            }
-        };
-
-    private Http11Parser.ElementCB request_path = new Http11Parser.ElementCB() {
-            public void call(Object data, int at, int length) {
-                RubyHash req = (RubyHash)data;
-                validateMaxLength(length, MAX_REQUEST_PATH_LENGTH, MAX_REQUEST_PATH_LENGTH_ERR);
-                RubyString val = RubyString.newString(runtime,new ByteList(hp.parser.buffer,at,length));
-                req.aset(runtime.newString("REQUEST_PATH"),val);
-            }
-        };
-
-    private Http11Parser.ElementCB query_string = new Http11Parser.ElementCB() {
-            public void call(Object data, int at, int length) {
-                RubyHash req = (RubyHash)data;
-                validateMaxLength(length, MAX_QUERY_STRING_LENGTH, MAX_QUERY_STRING_LENGTH_ERR);
-                RubyString val = RubyString.newString(runtime,new ByteList(hp.parser.buffer,at,length));
-                req.aset(runtime.newString("QUERY_STRING"),val);
-            }
-        };
-
-    private Http11Parser.ElementCB http_version = new Http11Parser.ElementCB() {
-            public void call(Object data, int at, int length) {
-                RubyHash req = (RubyHash)data;
-                RubyString val = RubyString.newString(runtime,new ByteList(hp.parser.buffer,at,length));
-                req.aset(runtime.newString("HTTP_VERSION"),val);
-            }
-        };
-
-    private Http11Parser.ElementCB header_done = new Http11Parser.ElementCB() {
-            public void call(Object data, int at, int length) {
-                RubyHash req = (RubyHash)data;
-                IRubyObject temp,ctype,clen;
-                
-                clen = req.aref(runtime.newString("HTTP_CONTENT_LENGTH"));
-                if(!clen.isNil()) {
-                    req.aset(runtime.newString("CONTENT_LENGTH"),clen);
-                }
-
-                ctype = req.aref(runtime.newString("HTTP_CONTENT_TYPE"));
-                if(!ctype.isNil()) {
-                    req.aset(runtime.newString("CONTENT_TYPE"),ctype);
-                }
-
-                req.aset(runtime.newString("GATEWAY_INTERFACE"),runtime.newString("CGI/1.2"));
-                if(!(temp = req.aref(runtime.newString("HTTP_HOST"))).isNil()) {
-                    String s = temp.toString();
-                    int colon = s.indexOf(':');
-                    if(colon != -1) {
-                        req.aset(runtime.newString("SERVER_NAME"),runtime.newString(s.substring(0,colon)));
-                        req.aset(runtime.newString("SERVER_PORT"),runtime.newString(s.substring(colon+1)));
-                    } else {
-                        req.aset(runtime.newString("SERVER_NAME"),temp);
-                        req.aset(runtime.newString("SERVER_PORT"),runtime.newString("80"));
-                    }
-                }
-
-                req.setInstanceVariable("@http_body", RubyString.newString(runtime, new ByteList(hp.parser.buffer, at, length)));
-                req.aset(runtime.newString("SERVER_PROTOCOL"),runtime.newString("HTTP/1.1"));
-                req.aset(runtime.newString("SERVER_SOFTWARE"),runtime.newString("Mongrel 1.1.5"));
-            }
-        };
-
-    public IRubyObject initialize() {
-        this.hp.parser.init();
-        return this;
-    }
-
-    public IRubyObject reset() {
-        this.hp.parser.init();
-        return runtime.getNil();
-    }
-
-    public IRubyObject finish() {
-        this.hp.finish();
-        return this.hp.is_finished() ? runtime.getTrue() : runtime.getFalse();
-    }
-
-    public IRubyObject execute(IRubyObject req_hash, IRubyObject data, IRubyObject start) {
-        int from = 0;
-        from = RubyNumeric.fix2int(start);
-        ByteList d = ((RubyString)data).getByteList();
-        if(from >= d.realSize) {
-            throw new RaiseException(runtime, eHttpParserError, "Requested start is after data buffer end.", true);
-        } else {
-            this.hp.parser.data = req_hash;
-            this.hp.execute(d,from);
-            validateMaxLength(this.hp.parser.nread,MAX_HEADER_LENGTH, MAX_HEADER_LENGTH_ERR);
-            if(this.hp.has_error()) {
-                throw new RaiseException(runtime, eHttpParserError, "Invalid HTTP format, parsing fails.", true);
-            } else {
-                return runtime.newFixnum(this.hp.parser.nread);
-            }
-        }
-    }
-
-    public IRubyObject has_error() {
-        return this.hp.has_error() ? runtime.getTrue() : runtime.getFalse();
-    }
-
-    public IRubyObject is_finished() {
-        return this.hp.is_finished() ? runtime.getTrue() : runtime.getFalse();
-    }
-
-    public IRubyObject nread() {
-        return runtime.newFixnum(this.hp.parser.nread);
-    }
-}// Http11
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/org/jruby/mongrel/Http11Parser.java b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/org/jruby/mongrel/Http11Parser.java
deleted file mode 100644
index 30f188d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/ext/http11_java/org/jruby/mongrel/Http11Parser.java
+++ /dev/null
@@ -1,572 +0,0 @@
-// line 1 "http11_parser.java.rl"
-package org.jruby.mongrel;
-
-import org.jruby.util.ByteList;
-
-public class Http11Parser {
-
-/** Machine **/
-
-// line 64 "http11_parser.java.rl"
-
-
-/** Data **/
-
-// line 16 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
-private static void init__http_parser_actions_0( byte[] r )
-{
-	r[0]=0; r[1]=1; r[2]=0; r[3]=1; r[4]=1; r[5]=1; r[6]=2; r[7]=1; 
-	r[8]=3; r[9]=1; r[10]=4; r[11]=1; r[12]=5; r[13]=1; r[14]=6; r[15]=1; 
-	r[16]=7; r[17]=1; r[18]=8; r[19]=1; r[20]=10; r[21]=1; r[22]=11; r[23]=1; 
-	r[24]=12; r[25]=2; r[26]=9; r[27]=6; r[28]=2; r[29]=11; r[30]=6; r[31]=3; 
-	r[32]=8; r[33]=9; r[34]=6; 
-}
-
-private static byte[] create__http_parser_actions( )
-{
-	byte[] r = new byte[35];
-	init__http_parser_actions_0( r );
-	return r;
-}
-
-private static final byte _http_parser_actions[] = create__http_parser_actions();
-
-
-private static void init__http_parser_key_offsets_0( short[] r )
-{
-	r[0]=0; r[1]=0; r[2]=8; r[3]=17; r[4]=27; r[5]=29; r[6]=30; r[7]=31; 
-	r[8]=32; r[9]=33; r[10]=34; r[11]=36; r[12]=39; r[13]=41; r[14]=44; r[15]=45; 
-	r[16]=61; r[17]=62; r[18]=78; r[19]=80; r[20]=81; r[21]=90; r[22]=99; r[23]=105; 
-	r[24]=111; r[25]=121; r[26]=130; r[27]=136; r[28]=142; r[29]=153; r[30]=159; r[31]=165; 
-	r[32]=175; r[33]=181; r[34]=187; r[35]=196; r[36]=205; r[37]=211; r[38]=217; r[39]=226; 
-	r[40]=235; r[41]=244; r[42]=253; r[43]=262; r[44]=271; r[45]=280; r[46]=289; r[47]=298; 
-	r[48]=307; r[49]=316; r[50]=325; r[51]=334; r[52]=343; r[53]=352; r[54]=361; r[55]=370; 
-	r[56]=379; r[57]=380; 
-}
-
-private static short[] create__http_parser_key_offsets( )
-{
-	short[] r = new short[58];
-	init__http_parser_key_offsets_0( r );
-	return r;
-}
-
-private static final short _http_parser_key_offsets[] = create__http_parser_key_offsets();
-
-
-private static void init__http_parser_trans_keys_0( char[] r )
-{
-	r[0]=36; r[1]=95; r[2]=45; r[3]=46; r[4]=48; r[5]=57; r[6]=65; r[7]=90; 
-	r[8]=32; r[9]=36; r[10]=95; r[11]=45; r[12]=46; r[13]=48; r[14]=57; r[15]=65; 
-	r[16]=90; r[17]=42; r[18]=43; r[19]=47; r[20]=58; r[21]=45; r[22]=57; r[23]=65; 
-	r[24]=90; r[25]=97; r[26]=122; r[27]=32; r[28]=35; r[29]=72; r[30]=84; r[31]=84; 
-	r[32]=80; r[33]=47; r[34]=48; r[35]=57; r[36]=46; r[37]=48; r[38]=57; r[39]=48; 
-	r[40]=57; r[41]=13; r[42]=48; r[43]=57; r[44]=10; r[45]=13; r[46]=33; r[47]=124; 
-	r[48]=126; r[49]=35; r[50]=39; r[51]=42; r[52]=43; r[53]=45; r[54]=46; r[55]=48; 
-	r[56]=57; r[57]=65; r[58]=90; r[59]=94; r[60]=122; r[61]=10; r[62]=33; r[63]=58; 
-	r[64]=124; r[65]=126; r[66]=35; r[67]=39; r[68]=42; r[69]=43; r[70]=45; r[71]=46; 
-	r[72]=48; r[73]=57; r[74]=65; r[75]=90; r[76]=94; r[77]=122; r[78]=13; r[79]=32; 
-	r[80]=13; r[81]=32; r[82]=37; r[83]=60; r[84]=62; r[85]=127; r[86]=0; r[87]=31; 
-	r[88]=34; r[89]=35; r[90]=32; r[91]=37; r[92]=60; r[93]=62; r[94]=127; r[95]=0; 
-	r[96]=31; r[97]=34; r[98]=35; r[99]=48; r[100]=57; r[101]=65; r[102]=70; r[103]=97; 
-	r[104]=102; r[105]=48; r[106]=57; r[107]=65; r[108]=70; r[109]=97; r[110]=102; r[111]=43; 
-	r[112]=58; r[113]=45; r[114]=46; r[115]=48; r[116]=57; r[117]=65; r[118]=90; r[119]=97; 
-	r[120]=122; r[121]=32; r[122]=34; r[123]=35; r[124]=37; r[125]=60; r[126]=62; r[127]=127; 
-	r[128]=0; r[129]=31; r[130]=48; r[131]=57; r[132]=65; r[133]=70; r[134]=97; r[135]=102; 
-	r[136]=48; r[137]=57; r[138]=65; r[139]=70; r[140]=97; r[141]=102; r[142]=32; r[143]=34; 
-	r[144]=35; r[145]=37; r[146]=59; r[147]=60; r[148]=62; r[149]=63; r[150]=127; r[151]=0; 
-	r[152]=31; r[153]=48; r[154]=57; r[155]=65; r[156]=70; r[157]=97; r[158]=102; r[159]=48; 
-	r[160]=57; r[161]=65; r[162]=70; r[163]=97; r[164]=102; r[165]=32; r[166]=34; r[167]=35; 
-	r[168]=37; r[169]=60; r[170]=62; r[171]=63; r[172]=127; r[173]=0; r[174]=31; r[175]=48; 
-	r[176]=57; r[177]=65; r[178]=70; r[179]=97; r[180]=102; r[181]=48; r[182]=57; r[183]=65; 
-	r[184]=70; r[185]=97; r[186]=102; r[187]=32; r[188]=34; r[189]=35; r[190]=37; r[191]=60; 
-	r[192]=62; r[193]=127; r[194]=0; r[195]=31; r[196]=32; r[197]=34; r[198]=35; r[199]=37; 
-	r[200]=60; r[201]=62; r[202]=127; r[203]=0; r[204]=31; r[205]=48; r[206]=57; r[207]=65; 
-	r[208]=70; r[209]=97; r[210]=102; r[211]=48; r[212]=57; r[213]=65; r[214]=70; r[215]=97; 
-	r[216]=102; r[217]=32; r[218]=36; r[219]=95; r[220]=45; r[221]=46; r[222]=48; r[223]=57; 
-	r[224]=65; r[225]=90; r[226]=32; r[227]=36; r[228]=95; r[229]=45; r[230]=46; r[231]=48; 
-	r[232]=57; r[233]=65; r[234]=90; r[235]=32; r[236]=36; r[237]=95; r[238]=45; r[239]=46; 
-	r[240]=48; r[241]=57; r[242]=65; r[243]=90; r[244]=32; r[245]=36; r[246]=95; r[247]=45; 
-	r[248]=46; r[249]=48; r[250]=57; r[251]=65; r[252]=90; r[253]=32; r[254]=36; r[255]=95; 
-	r[256]=45; r[257]=46; r[258]=48; r[259]=57; r[260]=65; r[261]=90; r[262]=32; r[263]=36; 
-	r[264]=95; r[265]=45; r[266]=46; r[267]=48; r[268]=57; r[269]=65; r[270]=90; r[271]=32; 
-	r[272]=36; r[273]=95; r[274]=45; r[275]=46; r[276]=48; r[277]=57; r[278]=65; r[279]=90; 
-	r[280]=32; r[281]=36; r[282]=95; r[283]=45; r[284]=46; r[285]=48; r[286]=57; r[287]=65; 
-	r[288]=90; r[289]=32; r[290]=36; r[291]=95; r[292]=45; r[293]=46; r[294]=48; r[295]=57; 
-	r[296]=65; r[297]=90; r[298]=32; r[299]=36; r[300]=95; r[301]=45; r[302]=46; r[303]=48; 
-	r[304]=57; r[305]=65; r[306]=90; r[307]=32; r[308]=36; r[309]=95; r[310]=45; r[311]=46; 
-	r[312]=48; r[313]=57; r[314]=65; r[315]=90; r[316]=32; r[317]=36; r[318]=95; r[319]=45; 
-	r[320]=46; r[321]=48; r[322]=57; r[323]=65; r[324]=90; r[325]=32; r[326]=36; r[327]=95; 
-	r[328]=45; r[329]=46; r[330]=48; r[331]=57; r[332]=65; r[333]=90; r[334]=32; r[335]=36; 
-	r[336]=95; r[337]=45; r[338]=46; r[339]=48; r[340]=57; r[341]=65; r[342]=90; r[343]=32; 
-	r[344]=36; r[345]=95; r[346]=45; r[347]=46; r[348]=48; r[349]=57; r[350]=65; r[351]=90; 
-	r[352]=32; r[353]=36; r[354]=95; r[355]=45; r[356]=46; r[357]=48; r[358]=57; r[359]=65; 
-	r[360]=90; r[361]=32; r[362]=36; r[363]=95; r[364]=45; r[365]=46; r[366]=48; r[367]=57; 
-	r[368]=65; r[369]=90; r[370]=32; r[371]=36; r[372]=95; r[373]=45; r[374]=46; r[375]=48; 
-	r[376]=57; r[377]=65; r[378]=90; r[379]=32; r[380]=0; 
-}
-
-private static char[] create__http_parser_trans_keys( )
-{
-	char[] r = new char[381];
-	init__http_parser_trans_keys_0( r );
-	return r;
-}
-
-private static final char _http_parser_trans_keys[] = create__http_parser_trans_keys();
-
-
-private static void init__http_parser_single_lengths_0( byte[] r )
-{
-	r[0]=0; r[1]=2; r[2]=3; r[3]=4; r[4]=2; r[5]=1; r[6]=1; r[7]=1; 
-	r[8]=1; r[9]=1; r[10]=0; r[11]=1; r[12]=0; r[13]=1; r[14]=1; r[15]=4; 
-	r[16]=1; r[17]=4; r[18]=2; r[19]=1; r[20]=5; r[21]=5; r[22]=0; r[23]=0; 
-	r[24]=2; r[25]=7; r[26]=0; r[27]=0; r[28]=9; r[29]=0; r[30]=0; r[31]=8; 
-	r[32]=0; r[33]=0; r[34]=7; r[35]=7; r[36]=0; r[37]=0; r[38]=3; r[39]=3; 
-	r[40]=3; r[41]=3; r[42]=3; r[43]=3; r[44]=3; r[45]=3; r[46]=3; r[47]=3; 
-	r[48]=3; r[49]=3; r[50]=3; r[51]=3; r[52]=3; r[53]=3; r[54]=3; r[55]=3; 
-	r[56]=1; r[57]=0; 
-}
-
-private static byte[] create__http_parser_single_lengths( )
-{
-	byte[] r = new byte[58];
-	init__http_parser_single_lengths_0( r );
-	return r;
-}
-
-private static final byte _http_parser_single_lengths[] = create__http_parser_single_lengths();
-
-
-private static void init__http_parser_range_lengths_0( byte[] r )
-{
-	r[0]=0; r[1]=3; r[2]=3; r[3]=3; r[4]=0; r[5]=0; r[6]=0; r[7]=0; 
-	r[8]=0; r[9]=0; r[10]=1; r[11]=1; r[12]=1; r[13]=1; r[14]=0; r[15]=6; 
-	r[16]=0; r[17]=6; r[18]=0; r[19]=0; r[20]=2; r[21]=2; r[22]=3; r[23]=3; 
-	r[24]=4; r[25]=1; r[26]=3; r[27]=3; r[28]=1; r[29]=3; r[30]=3; r[31]=1; 
-	r[32]=3; r[33]=3; r[34]=1; r[35]=1; r[36]=3; r[37]=3; r[38]=3; r[39]=3; 
-	r[40]=3; r[41]=3; r[42]=3; r[43]=3; r[44]=3; r[45]=3; r[46]=3; r[47]=3; 
-	r[48]=3; r[49]=3; r[50]=3; r[51]=3; r[52]=3; r[53]=3; r[54]=3; r[55]=3; 
-	r[56]=0; r[57]=0; 
-}
-
-private static byte[] create__http_parser_range_lengths( )
-{
-	byte[] r = new byte[58];
-	init__http_parser_range_lengths_0( r );
-	return r;
-}
-
-private static final byte _http_parser_range_lengths[] = create__http_parser_range_lengths();
-
-
-private static void init__http_parser_index_offsets_0( short[] r )
-{
-	r[0]=0; r[1]=0; r[2]=6; r[3]=13; r[4]=21; r[5]=24; r[6]=26; r[7]=28; 
-	r[8]=30; r[9]=32; r[10]=34; r[11]=36; r[12]=39; r[13]=41; r[14]=44; r[15]=46; 
-	r[16]=57; r[17]=59; r[18]=70; r[19]=73; r[20]=75; r[21]=83; r[22]=91; r[23]=95; 
-	r[24]=99; r[25]=106; r[26]=115; r[27]=119; r[28]=123; r[29]=134; r[30]=138; r[31]=142; 
-	r[32]=152; r[33]=156; r[34]=160; r[35]=169; r[36]=178; r[37]=182; r[38]=186; r[39]=193; 
-	r[40]=200; r[41]=207; r[42]=214; r[43]=221; r[44]=228; r[45]=235; r[46]=242; r[47]=249; 
-	r[48]=256; r[49]=263; r[50]=270; r[51]=277; r[52]=284; r[53]=291; r[54]=298; r[55]=305; 
-	r[56]=312; r[57]=314; 
-}
-
-private static short[] create__http_parser_index_offsets( )
-{
-	short[] r = new short[58];
-	init__http_parser_index_offsets_0( r );
-	return r;
-}
-
-private static final short _http_parser_index_offsets[] = create__http_parser_index_offsets();
-
-
-private static void init__http_parser_indicies_0( byte[] r )
-{
-	r[0]=0; r[1]=0; r[2]=0; r[3]=0; r[4]=0; r[5]=1; r[6]=2; r[7]=3; 
-	r[8]=3; r[9]=3; r[10]=3; r[11]=3; r[12]=1; r[13]=4; r[14]=5; r[15]=6; 
-	r[16]=7; r[17]=5; r[18]=5; r[19]=5; r[20]=1; r[21]=8; r[22]=9; r[23]=1; 
-	r[24]=10; r[25]=1; r[26]=11; r[27]=1; r[28]=12; r[29]=1; r[30]=13; r[31]=1; 
-	r[32]=14; r[33]=1; r[34]=15; r[35]=1; r[36]=16; r[37]=15; r[38]=1; r[39]=17; 
-	r[40]=1; r[41]=18; r[42]=17; r[43]=1; r[44]=19; r[45]=1; r[46]=20; r[47]=21; 
-	r[48]=21; r[49]=21; r[50]=21; r[51]=21; r[52]=21; r[53]=21; r[54]=21; r[55]=21; 
-	r[56]=1; r[57]=22; r[58]=1; r[59]=23; r[60]=24; r[61]=23; r[62]=23; r[63]=23; 
-	r[64]=23; r[65]=23; r[66]=23; r[67]=23; r[68]=23; r[69]=1; r[70]=26; r[71]=27; 
-	r[72]=25; r[73]=26; r[74]=28; r[75]=29; r[76]=31; r[77]=1; r[78]=1; r[79]=1; 
-	r[80]=1; r[81]=1; r[82]=30; r[83]=29; r[84]=33; r[85]=1; r[86]=1; r[87]=1; 
-	r[88]=1; r[89]=1; r[90]=32; r[91]=34; r[92]=34; r[93]=34; r[94]=1; r[95]=32; 
-	r[96]=32; r[97]=32; r[98]=1; r[99]=35; r[100]=36; r[101]=35; r[102]=35; r[103]=35; 
-	r[104]=35; r[105]=1; r[106]=8; r[107]=1; r[108]=9; r[109]=37; r[110]=1; r[111]=1; 
-	r[112]=1; r[113]=1; r[114]=36; r[115]=38; r[116]=38; r[117]=38; r[118]=1; r[119]=36; 
-	r[120]=36; r[121]=36; r[122]=1; r[123]=39; r[124]=1; r[125]=41; r[126]=42; r[127]=43; 
-	r[128]=1; r[129]=1; r[130]=44; r[131]=1; r[132]=1; r[133]=40; r[134]=45; r[135]=45; 
-	r[136]=45; r[137]=1; r[138]=40; r[139]=40; r[140]=40; r[141]=1; r[142]=8; r[143]=1; 
-	r[144]=9; r[145]=47; r[146]=1; r[147]=1; r[148]=48; r[149]=1; r[150]=1; r[151]=46; 
-	r[152]=49; r[153]=49; r[154]=49; r[155]=1; r[156]=46; r[157]=46; r[158]=46; r[159]=1; 
-	r[160]=50; r[161]=1; r[162]=52; r[163]=53; r[164]=1; r[165]=1; r[166]=1; r[167]=1; 
-	r[168]=51; r[169]=54; r[170]=1; r[171]=56; r[172]=57; r[173]=1; r[174]=1; r[175]=1; 
-	r[176]=1; r[177]=55; r[178]=58; r[179]=58; r[180]=58; r[181]=1; r[182]=55; r[183]=55; 
-	r[184]=55; r[185]=1; r[186]=2; r[187]=59; r[188]=59; r[189]=59; r[190]=59; r[191]=59; 
-	r[192]=1; r[193]=2; r[194]=60; r[195]=60; r[196]=60; r[197]=60; r[198]=60; r[199]=1; 
-	r[200]=2; r[201]=61; r[202]=61; r[203]=61; r[204]=61; r[205]=61; r[206]=1; r[207]=2; 
-	r[208]=62; r[209]=62; r[210]=62; r[211]=62; r[212]=62; r[213]=1; r[214]=2; r[215]=63; 
-	r[216]=63; r[217]=63; r[218]=63; r[219]=63; r[220]=1; r[221]=2; r[222]=64; r[223]=64; 
-	r[224]=64; r[225]=64; r[226]=64; r[227]=1; r[228]=2; r[229]=65; r[230]=65; r[231]=65; 
-	r[232]=65; r[233]=65; r[234]=1; r[235]=2; r[236]=66; r[237]=66; r[238]=66; r[239]=66; 
-	r[240]=66; r[241]=1; r[242]=2; r[243]=67; r[244]=67; r[245]=67; r[246]=67; r[247]=67; 
-	r[248]=1; r[249]=2; r[250]=68; r[251]=68; r[252]=68; r[253]=68; r[254]=68; r[255]=1; 
-	r[256]=2; r[257]=69; r[258]=69; r[259]=69; r[260]=69; r[261]=69; r[262]=1; r[263]=2; 
-	r[264]=70; r[265]=70; r[266]=70; r[267]=70; r[268]=70; r[269]=1; r[270]=2; r[271]=71; 
-	r[272]=71; r[273]=71; r[274]=71; r[275]=71; r[276]=1; r[277]=2; r[278]=72; r[279]=72; 
-	r[280]=72; r[281]=72; r[282]=72; r[283]=1; r[284]=2; r[285]=73; r[286]=73; r[287]=73; 
-	r[288]=73; r[289]=73; r[290]=1; r[291]=2; r[292]=74; r[293]=74; r[294]=74; r[295]=74; 
-	r[296]=74; r[297]=1; r[298]=2; r[299]=75; r[300]=75; r[301]=75; r[302]=75; r[303]=75; 
-	r[304]=1; r[305]=2; r[306]=76; r[307]=76; r[308]=76; r[309]=76; r[310]=76; r[311]=1; 
-	r[312]=2; r[313]=1; r[314]=1; r[315]=0; 
-}
-
-private static byte[] create__http_parser_indicies( )
-{
-	byte[] r = new byte[316];
-	init__http_parser_indicies_0( r );
-	return r;
-}
-
-private static final byte _http_parser_indicies[] = create__http_parser_indicies();
-
-
-private static void init__http_parser_trans_targs_wi_0( byte[] r )
-{
-	r[0]=2; r[1]=0; r[2]=3; r[3]=38; r[4]=4; r[5]=24; r[6]=28; r[7]=25; 
-	r[8]=5; r[9]=20; r[10]=6; r[11]=7; r[12]=8; r[13]=9; r[14]=10; r[15]=11; 
-	r[16]=12; r[17]=13; r[18]=14; r[19]=15; r[20]=16; r[21]=17; r[22]=57; r[23]=17; 
-	r[24]=18; r[25]=19; r[26]=14; r[27]=18; r[28]=19; r[29]=5; r[30]=21; r[31]=22; 
-	r[32]=21; r[33]=22; r[34]=23; r[35]=24; r[36]=25; r[37]=26; r[38]=27; r[39]=5; 
-	r[40]=28; r[41]=20; r[42]=29; r[43]=31; r[44]=34; r[45]=30; r[46]=31; r[47]=32; 
-	r[48]=34; r[49]=33; r[50]=5; r[51]=35; r[52]=20; r[53]=36; r[54]=5; r[55]=35; 
-	r[56]=20; r[57]=36; r[58]=37; r[59]=39; r[60]=40; r[61]=41; r[62]=42; r[63]=43; 
-	r[64]=44; r[65]=45; r[66]=46; r[67]=47; r[68]=48; r[69]=49; r[70]=50; r[71]=51; 
-	r[72]=52; r[73]=53; r[74]=54; r[75]=55; r[76]=56; 
-}
-
-private static byte[] create__http_parser_trans_targs_wi( )
-{
-	byte[] r = new byte[77];
-	init__http_parser_trans_targs_wi_0( r );
-	return r;
-}
-
-private static final byte _http_parser_trans_targs_wi[] = create__http_parser_trans_targs_wi();
-
-
-private static void init__http_parser_trans_actions_wi_0( byte[] r )
-{
-	r[0]=1; r[1]=0; r[2]=11; r[3]=0; r[4]=1; r[5]=1; r[6]=1; r[7]=1; 
-	r[8]=13; r[9]=13; r[10]=1; r[11]=0; r[12]=0; r[13]=0; r[14]=0; r[15]=0; 
-	r[16]=0; r[17]=0; r[18]=19; r[19]=0; r[20]=0; r[21]=3; r[22]=23; r[23]=0; 
-	r[24]=5; r[25]=7; r[26]=9; r[27]=7; r[28]=0; r[29]=15; r[30]=1; r[31]=1; 
-	r[32]=0; r[33]=0; r[34]=0; r[35]=0; r[36]=0; r[37]=0; r[38]=0; r[39]=28; 
-	r[40]=0; r[41]=28; r[42]=0; r[43]=21; r[44]=21; r[45]=0; r[46]=0; r[47]=0; 
-	r[48]=0; r[49]=0; r[50]=31; r[51]=17; r[52]=31; r[53]=17; r[54]=25; r[55]=0; 
-	r[56]=25; r[57]=0; r[58]=0; r[59]=0; r[60]=0; r[61]=0; r[62]=0; r[63]=0; 
-	r[64]=0; r[65]=0; r[66]=0; r[67]=0; r[68]=0; r[69]=0; r[70]=0; r[71]=0; 
-	r[72]=0; r[73]=0; r[74]=0; r[75]=0; r[76]=0; 
-}
-
-private static byte[] create__http_parser_trans_actions_wi( )
-{
-	byte[] r = new byte[77];
-	init__http_parser_trans_actions_wi_0( r );
-	return r;
-}
-
-private static final byte _http_parser_trans_actions_wi[] = create__http_parser_trans_actions_wi();
-
-
-static final int http_parser_start = 1;
-static final int http_parser_first_final = 57;
-static final int http_parser_error = 0;
-
-static final int http_parser_en_main = 1;
-
-// line 68 "http11_parser.java.rl"
-
-   public static interface ElementCB {
-     public void call(Object data, int at, int length);
-   }
-
-   public static interface FieldCB {
-     public void call(Object data, int field, int flen, int value, int vlen);
-   }
-
-   public static class HttpParser {
-      int cs;
-      int body_start;
-      int content_len;
-      int nread;
-      int mark;
-      int field_start;
-      int field_len;
-      int query_start;
-
-      Object data;
-      ByteList buffer;
-
-      public FieldCB http_field;
-      public ElementCB request_method;
-      public ElementCB request_uri;
-      public ElementCB fragment;
-      public ElementCB request_path;
-      public ElementCB query_string;
-      public ElementCB http_version;
-      public ElementCB header_done;
-
-      public void init() {
-          cs = 0;
-
-          
-// line 330 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
-	{
-	cs = http_parser_start;
-	}
-// line 103 "http11_parser.java.rl"
-
-          body_start = 0;
-          content_len = 0;
-          mark = 0;
-          nread = 0;
-          field_len = 0;
-          field_start = 0;
-      }
-   }
-
-   public final HttpParser parser = new HttpParser();
-
-   public int execute(ByteList buffer, int off) {
-     int p, pe;
-     int cs = parser.cs;
-     int len = buffer.realSize;
-     assert off<=len : "offset past end of buffer";
-
-     p = off;
-     pe = len;
-     byte[] data = buffer.bytes;
-     parser.buffer = buffer;
-
-     
-// line 359 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
-	{
-	int _klen;
-	int _trans;
-	int _acts;
-	int _nacts;
-	int _keys;
-
-	if ( p != pe ) {
-	if ( cs != 0 ) {
-	_resume: while ( true ) {
-	_again: do {
-	_match: do {
-	_keys = _http_parser_key_offsets[cs];
-	_trans = _http_parser_index_offsets[cs];
-	_klen = _http_parser_single_lengths[cs];
-	if ( _klen > 0 ) {
-		int _lower = _keys;
-		int _mid;
-		int _upper = _keys + _klen - 1;
-		while (true) {
-			if ( _upper < _lower )
-				break;
-
-			_mid = _lower + ((_upper-_lower) >> 1);
-			if ( data[p] < _http_parser_trans_keys[_mid] )
-				_upper = _mid - 1;
-			else if ( data[p] > _http_parser_trans_keys[_mid] )
-				_lower = _mid + 1;
-			else {
-				_trans += (_mid - _keys);
-				break _match;
-			}
-		}
-		_keys += _klen;
-		_trans += _klen;
-	}
-
-	_klen = _http_parser_range_lengths[cs];
-	if ( _klen > 0 ) {
-		int _lower = _keys;
-		int _mid;
-		int _upper = _keys + (_klen<<1) - 2;
-		while (true) {
-			if ( _upper < _lower )
-				break;
-
-			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
-			if ( data[p] < _http_parser_trans_keys[_mid] )
-				_upper = _mid - 2;
-			else if ( data[p] > _http_parser_trans_keys[_mid+1] )
-				_lower = _mid + 2;
-			else {
-				_trans += ((_mid - _keys)>>1);
-				break _match;
-			}
-		}
-		_trans += _klen;
-	}
-	} while (false);
-
-	_trans = _http_parser_indicies[_trans];
-	cs = _http_parser_trans_targs_wi[_trans];
-
-	if ( _http_parser_trans_actions_wi[_trans] == 0 )
-		break _again;
-
-	_acts = _http_parser_trans_actions_wi[_trans];
-	_nacts = (int) _http_parser_actions[_acts++];
-	while ( _nacts-- > 0 )
-	{
-		switch ( _http_parser_actions[_acts++] )
-		{
-	case 0:
-// line 13 "http11_parser.java.rl"
-	{parser.mark = p; }
-	break;
-	case 1:
-// line 15 "http11_parser.java.rl"
-	{ parser.field_start = p; }
-	break;
-	case 2:
-// line 16 "http11_parser.java.rl"
-	{ 
-    parser.field_len = p-parser.field_start;
-  }
-	break;
-	case 3:
-// line 20 "http11_parser.java.rl"
-	{ parser.mark = p; }
-	break;
-	case 4:
-// line 21 "http11_parser.java.rl"
-	{ 
-    if(parser.http_field != null) {
-      parser.http_field.call(parser.data, parser.field_start, parser.field_len, parser.mark, p-parser.mark);
-    }
-  }
-	break;
-	case 5:
-// line 26 "http11_parser.java.rl"
-	{ 
-    if(parser.request_method != null) 
-      parser.request_method.call(parser.data, parser.mark, p-parser.mark);
-  }
-	break;
-	case 6:
-// line 30 "http11_parser.java.rl"
-	{ 
-    if(parser.request_uri != null)
-      parser.request_uri.call(parser.data, parser.mark, p-parser.mark);
-  }
-	break;
-	case 7:
-// line 34 "http11_parser.java.rl"
-	{ 
-    if(parser.fragment != null)
-      parser.fragment.call(parser.data, parser.mark, p-parser.mark);
-  }
-	break;
-	case 8:
-// line 39 "http11_parser.java.rl"
-	{parser.query_start = p; }
-	break;
-	case 9:
-// line 40 "http11_parser.java.rl"
-	{ 
-    if(parser.query_string != null)
-      parser.query_string.call(parser.data, parser.query_start, p-parser.query_start);
-  }
-	break;
-	case 10:
-// line 45 "http11_parser.java.rl"
-	{	
-    if(parser.http_version != null)
-      parser.http_version.call(parser.data, parser.mark, p-parser.mark);
-  }
-	break;
-	case 11:
-// line 50 "http11_parser.java.rl"
-	{
-    if(parser.request_path != null)
-      parser.request_path.call(parser.data, parser.mark, p-parser.mark);
-  }
-	break;
-	case 12:
-// line 55 "http11_parser.java.rl"
-	{ 
-    parser.body_start = p + 1; 
-    if(parser.header_done != null)
-      parser.header_done.call(parser.data, p + 1, pe - p - 1);
-    if (true) break _resume;
-  }
-	break;
-// line 513 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
-		}
-	}
-
-	} while (false);
-	if ( cs == 0 )
-		break _resume;
-	if ( ++p == pe )
-		break _resume;
-	}
-	}	}
-	}
-// line 127 "http11_parser.java.rl"
-
-     parser.cs = cs;
-     parser.nread += (p - off);
-     
-     assert p <= pe                  : "buffer overflow after parsing execute";
-     assert parser.nread <= len      : "nread longer than length";
-     assert parser.body_start <= len : "body starts after buffer end";
-     assert parser.mark < len        : "mark is after buffer end";
-     assert parser.field_len <= len  : "field has length longer than whole buffer";
-     assert parser.field_start < len : "field starts after buffer end";
-
-     if(parser.body_start>0) {
-        /* final \r\n combo encountered so stop right here */
-        
-// line 540 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
-// line 141 "http11_parser.java.rl"
-        parser.nread++;
-     }
-
-     return parser.nread;
-   }
-
-   public int finish() {
-     int cs = parser.cs;
-
-     
-// line 552 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
-// line 151 "http11_parser.java.rl"
-
-     parser.cs = cs;
- 
-    if(has_error()) {
-      return -1;
-    } else if(is_finished()) {
-      return 1;
-    } else {
-      return 0;
-    }
-  }
-
-  public boolean has_error() {
-    return parser.cs == http_parser_error;
-  }
-
-  public boolean is_finished() {
-    return parser.cs == http_parser_first_final;
-  }
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/http11.bundle b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/http11.bundle
deleted file mode 100755
index 223892f..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/http11.bundle and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel.rb
deleted file mode 100644
index d99c56d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel.rb
+++ /dev/null
@@ -1,355 +0,0 @@
-
-# Standard libraries
-require 'socket'
-require 'tempfile'
-require 'yaml'
-require 'time'
-require 'etc'
-require 'uri'
-require 'stringio'
-
-# Compiled Mongrel extension
-require 'http11'
-
-# Gem conditional loader
-require 'mongrel/gems'
-Mongrel::Gems.require 'cgi_multipart_eof_fix'
-Mongrel::Gems.require 'fastthread'
-require 'thread'
-
-# Ruby Mongrel
-require 'mongrel/cgi'
-require 'mongrel/handlers'
-require 'mongrel/command'
-require 'mongrel/tcphack'
-require 'mongrel/configurator'
-require 'mongrel/uri_classifier'
-require 'mongrel/const'
-require 'mongrel/http_request'
-require 'mongrel/header_out'
-require 'mongrel/http_response'
-
-# Mongrel module containing all of the classes (include C extensions) for running
-# a Mongrel web server.  It contains a minimalist HTTP server with just enough
-# functionality to service web application requests fast as possible.
-module Mongrel
-
-  # Used to stop the HttpServer via Thread.raise.
-  class StopServer < Exception; end
-
-  # Thrown at a thread when it is timed out.
-  class TimeoutError < Exception; end
-
-  # A Hash with one extra parameter for the HTTP body, used internally.
-  class HttpParams < Hash
-    attr_accessor :http_body
-  end
-
-
-  # This is the main driver of Mongrel, while the Mongrel::HttpParser and Mongrel::URIClassifier
-  # make up the majority of how the server functions.  It's a very simple class that just
-  # has a thread accepting connections and a simple HttpServer.process_client function
-  # to do the heavy lifting with the IO and Ruby.  
-  #
-  # You use it by doing the following:
-  #
-  #   server = HttpServer.new("0.0.0.0", 3000)
-  #   server.register("/stuff", MyNiftyHandler.new)
-  #   server.run.join
-  #
-  # The last line can be just server.run if you don't want to join the thread used.
-  # If you don't though Ruby will mysteriously just exit on you.
-  #
-  # Ruby's thread implementation is "interesting" to say the least.  Experiments with
-  # *many* different types of IO processing simply cannot make a dent in it.  Future
-  # releases of Mongrel will find other creative ways to make threads faster, but don't
-  # hold your breath until Ruby 1.9 is actually finally useful.
-  class HttpServer
-    attr_reader :acceptor
-    attr_reader :workers
-    attr_reader :classifier
-    attr_reader :host
-    attr_reader :port
-    attr_reader :throttle
-    attr_reader :timeout
-    attr_reader :num_processors
-
-    # Creates a working server on host:port (strange things happen if port isn't a Number).
-    # Use HttpServer::run to start the server and HttpServer.acceptor.join to 
-    # join the thread that's processing incoming requests on the socket.
-    #
-    # The num_processors optional argument is the maximum number of concurrent
-    # processors to accept, anything over this is closed immediately to maintain
-    # server processing performance.  This may seem mean but it is the most efficient
-    # way to deal with overload.  Other schemes involve still parsing the client's request
-    # which defeats the point of an overload handling system.
-    # 
-    # The throttle parameter is a sleep timeout (in hundredths of a second) that is placed between 
-    # socket.accept calls in order to give the server a cheap throttle time.  It defaults to 0 and
-    # actually if it is 0 then the sleep is not done at all.
-    def initialize(host, port, num_processors=950, throttle=0, timeout=60)
-      
-      tries = 0
-      @socket = TCPServer.new(host, port) 
-      
-      @classifier = URIClassifier.new
-      @host = host
-      @port = port
-      @workers = ThreadGroup.new
-      @throttle = throttle / 100.0
-      @num_processors = num_processors
-      @timeout = timeout
-    end
-
-    # Does the majority of the IO processing.  It has been written in Ruby using
-    # about 7 different IO processing strategies and no matter how it's done 
-    # the performance just does not improve.  It is currently carefully constructed
-    # to make sure that it gets the best possible performance, but anyone who
-    # thinks they can make it faster is more than welcome to take a crack at it.
-    def process_client(client)
-      begin
-        parser = HttpParser.new
-        params = HttpParams.new
-        request = nil
-        data = client.readpartial(Const::CHUNK_SIZE)
-        nparsed = 0
-
-        # Assumption: nparsed will always be less since data will get filled with more
-        # after each parsing.  If it doesn't get more then there was a problem
-        # with the read operation on the client socket.  Effect is to stop processing when the
-        # socket can't fill the buffer for further parsing.
-        while nparsed < data.length
-          nparsed = parser.execute(params, data, nparsed)
-
-          if parser.finished?
-            if not params[Const::REQUEST_PATH]
-              # it might be a dumbass full host request header
-              uri = URI.parse(params[Const::REQUEST_URI])
-              params[Const::REQUEST_PATH] = uri.path
-            end
-
-            raise "No REQUEST PATH" if not params[Const::REQUEST_PATH]
-
-            script_name, path_info, handlers = @classifier.resolve(params[Const::REQUEST_PATH])
-
-            if handlers
-              params[Const::PATH_INFO] = path_info
-              params[Const::SCRIPT_NAME] = script_name
-
-              # From http://www.ietf.org/rfc/rfc3875 :
-              # "Script authors should be aware that the REMOTE_ADDR and REMOTE_HOST
-              #  meta-variables (see sections 4.1.8 and 4.1.9) may not identify the
-              #  ultimate source of the request.  They identify the client for the
-              #  immediate request to the server; that client may be a proxy, gateway,
-              #  or other intermediary acting on behalf of the actual source client."
-              params[Const::REMOTE_ADDR] = client.peeraddr.last
-
-              # select handlers that want more detailed request notification
-              notifiers = handlers.select { |h| h.request_notify }
-              request = HttpRequest.new(params, client, notifiers)
-
-              # in the case of large file uploads the user could close the socket, so skip those requests
-              break if request.body == nil  # nil signals from HttpRequest::initialize that the request was aborted
-
-              # request is good so far, continue processing the response
-              response = HttpResponse.new(client)
-
-              # Process each handler in registered order until we run out or one finalizes the response.
-              handlers.each do |handler|
-                handler.process(request, response)
-                break if response.done or client.closed?
-              end
-
-              # And finally, if nobody closed the response off, we finalize it.
-              unless response.done or client.closed? 
-                response.finished
-              end
-            else
-              # Didn't find it, return a stock 404 response.
-              client.write(Const::ERROR_404_RESPONSE)
-            end
-
-            break #done
-          else
-            # Parser is not done, queue up more data to read and continue parsing
-            chunk = client.readpartial(Const::CHUNK_SIZE)
-            break if !chunk or chunk.length == 0  # read failed, stop processing
-
-            data << chunk
-            if data.length >= Const::MAX_HEADER
-              raise HttpParserError.new("HEADER is longer than allowed, aborting client early.")
-            end
-          end
-        end
-      rescue EOFError,Errno::ECONNRESET,Errno::EPIPE,Errno::EINVAL,Errno::EBADF
-        client.close rescue nil
-      rescue HttpParserError => e
-        STDERR.puts "#{Time.now}: HTTP parse error, malformed request (#{params[Const::HTTP_X_FORWARDED_FOR] || client.peeraddr.last}): #{e.inspect}"
-        STDERR.puts "#{Time.now}: REQUEST DATA: #{data.inspect}\n---\nPARAMS: #{params.inspect}\n---\n"
-      rescue Errno::EMFILE
-        reap_dead_workers('too many files')
-      rescue Object => e
-        STDERR.puts "#{Time.now}: Read error: #{e.inspect}"
-        STDERR.puts e.backtrace.join("\n")
-      ensure
-        begin
-          client.close
-        rescue IOError
-          # Already closed
-        rescue Object => e
-          STDERR.puts "#{Time.now}: Client error: #{e.inspect}"
-          STDERR.puts e.backtrace.join("\n")
-        end
-        request.body.delete if request and request.body.class == Tempfile
-      end
-    end
-
-    # Used internally to kill off any worker threads that have taken too long
-    # to complete processing.  Only called if there are too many processors
-    # currently servicing.  It returns the count of workers still active
-    # after the reap is done.  It only runs if there are workers to reap.
-    def reap_dead_workers(reason='unknown')
-      if @workers.list.length > 0
-        STDERR.puts "#{Time.now}: Reaping #{@workers.list.length} threads for slow workers because of '#{reason}'"
-        error_msg = "Mongrel timed out this thread: #{reason}"
-        mark = Time.now
-        @workers.list.each do |worker|
-          worker[:started_on] = Time.now if not worker[:started_on]
-
-          if mark - worker[:started_on] > @timeout + @throttle
-            STDERR.puts "Thread #{worker.inspect} is too old, killing."
-            worker.raise(TimeoutError.new(error_msg))
-          end
-        end
-      end
-
-      return @workers.list.length
-    end
-
-    # Performs a wait on all the currently running threads and kills any that take
-    # too long.  It waits by @timeout seconds, which can be set in .initialize or
-    # via mongrel_rails. The @throttle setting does extend this waiting period by
-    # that much longer.
-    def graceful_shutdown
-      while reap_dead_workers("shutdown") > 0
-        STDERR.puts "Waiting for #{@workers.list.length} requests to finish, could take #{@timeout + @throttle} seconds."
-        sleep @timeout / 10
-      end
-    end
-
-    def configure_socket_options
-      case RUBY_PLATFORM
-      when /linux/
-        # 9 is currently TCP_DEFER_ACCEPT
-        $tcp_defer_accept_opts = [Socket::SOL_TCP, 9, 1]
-        $tcp_cork_opts = [Socket::SOL_TCP, 3, 1]
-      when /freebsd(([1-4]\..{1,2})|5\.[0-4])/
-        # Do nothing, just closing a bug when freebsd <= 5.4
-      when /freebsd/
-        # Use the HTTP accept filter if available.
-        # The struct made by pack() is defined in /usr/include/sys/socket.h as accept_filter_arg
-        unless `/sbin/sysctl -nq net.inet.accf.http`.empty?
-          $tcp_defer_accept_opts = [Socket::SOL_SOCKET, Socket::SO_ACCEPTFILTER, ['httpready', nil].pack('a16a240')]
-        end
-      end
-    end
-    
-    # Runs the thing.  It returns the thread used so you can "join" it.  You can also
-    # access the HttpServer::acceptor attribute to get the thread later.
-    def run
-      BasicSocket.do_not_reverse_lookup=true
-
-      configure_socket_options
-
-      if defined?($tcp_defer_accept_opts) and $tcp_defer_accept_opts
-        @socket.setsockopt(*$tcp_defer_accept_opts) rescue nil
-      end
-
-      @acceptor = Thread.new do
-        begin
-          while true
-            begin
-              client = @socket.accept
-  
-              if defined?($tcp_cork_opts) and $tcp_cork_opts
-                client.setsockopt(*$tcp_cork_opts) rescue nil
-              end
-  
-              worker_list = @workers.list
-  
-              if worker_list.length >= @num_processors
-                STDERR.puts "Server overloaded with #{worker_list.length} processors (#@num_processors max). Dropping connection."
-                client.close rescue nil
-                reap_dead_workers("max processors")
-              else
-                thread = Thread.new(client) {|c| process_client(c) }
-                thread[:started_on] = Time.now
-                @workers.add(thread)
-  
-                sleep @throttle if @throttle > 0
-              end
-            rescue StopServer
-              break
-            rescue Errno::EMFILE
-              reap_dead_workers("too many open files")
-              sleep 0.5
-            rescue Errno::ECONNABORTED
-              # client closed the socket even before accept
-              client.close rescue nil
-            rescue Object => e
-              STDERR.puts "#{Time.now}: Unhandled listen loop exception #{e.inspect}."
-              STDERR.puts e.backtrace.join("\n")
-            end
-          end
-          graceful_shutdown
-        ensure
-          @socket.close
-          # STDERR.puts "#{Time.now}: Closed socket."
-        end
-      end
-
-      return @acceptor
-    end
-
-    # Simply registers a handler with the internal URIClassifier.  When the URI is
-    # found in the prefix of a request then your handler's HttpHandler::process method
-    # is called.  See Mongrel::URIClassifier#register for more information.
-    #
-    # If you set in_front=true then the passed in handler will be put in the front of the list
-    # for that particular URI. Otherwise it's placed at the end of the list.
-    def register(uri, handler, in_front=false)
-      begin
-        @classifier.register(uri, [handler])
-      rescue URIClassifier::RegistrationError
-        handlers = @classifier.resolve(uri)[2]
-        method_name = in_front ? 'unshift' : 'push'
-        handlers.send(method_name, handler)
-      end
-      handler.listener = self
-    end
-
-    # Removes any handlers registered at the given URI.  See Mongrel::URIClassifier#unregister
-    # for more information.  Remember this removes them *all* so the entire
-    # processing chain goes away.
-    def unregister(uri)
-      @classifier.unregister(uri)
-    end
-
-    # Stops the acceptor thread and then causes the worker threads to finish
-    # off the request queue before finally exiting.
-    def stop(synchronous=false)
-      @acceptor.raise(StopServer.new)
-
-      if synchronous
-        sleep(0.5) while @acceptor.alive?
-      end
-    end
-
-  end
-end
-
-# Load experimental library, if present. We put it here so it can override anything
-# in regular Mongrel.
-
-$LOAD_PATH.unshift 'projects/mongrel_experimental/lib/'
-Mongrel::Gems.require 'mongrel_experimental', ">=#{Mongrel::Const::MONGREL_VERSION}"
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/camping.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/camping.rb
deleted file mode 100644
index 31bd196..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/camping.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'mongrel'
-
-
-module Mongrel
-  # Support for the Camping micro framework at http://camping.rubyforge.org
-  # This implements the unusually long Postamble that Camping usually
-  # needs and shrinks it down to just a single line or two.
-  #
-  # Your Postamble would now be:
-  #
-  #   Mongrel::Camping::start("0.0.0.0",3001,"/tepee",Tepee).join
-  #
-  # If you wish to get fancier than this then you can use the
-  # Camping::CampingHandler directly instead and do your own
-  # wiring:
-  #
-  #   h = Mongrel::HttpServer.new(server, port)
-  #   h.register(uri, CampingHandler.new(Tepee))
-  #   h.register("/favicon.ico", Mongrel::Error404Handler.new(""))
-  #
-  # I add the /favicon.ico since camping apps typically don't 
-  # have them and it's just annoying anyway.
-  module Camping
-
-    # This is a specialized handler for Camping applications
-    # that has them process the request and then translates
-    # the results into something the Mongrel::HttpResponse
-    # needs.
-    class CampingHandler < Mongrel::HttpHandler
-      attr_reader :files
-      attr_reader :guard
-      @@file_only_methods = ["GET","HEAD"]
-
-      def initialize(klass)
-        @files = Mongrel::DirHandler.new(nil, false)
-        @guard = Mutex.new
-        @klass = klass
-      end
-
-      def process(request, response)
-        if response.socket.closed?
-          return
-        end
-
-        controller = nil
-        @guard.synchronize {
-          controller = @klass.run(request.body, request.params)
-        }
-
-        sendfile, clength = nil
-        response.status = controller.status
-        controller.headers.each do |k, v|
-          if k =~ /^X-SENDFILE$/i
-            sendfile = v
-          elsif k =~ /^CONTENT-LENGTH$/i
-            clength = v.to_i
-          else
-            [*v].each do |vi|
-              response.header[k] = vi
-            end
-          end
-        end
-
-        if sendfile
-          request.params[Mongrel::Const::PATH_INFO] = sendfile
-          @files.process(request, response)
-        elsif controller.body.respond_to? :read
-          response.send_status(clength)
-          response.send_header
-          while chunk = controller.body.read(16384)
-            response.write(chunk)
-          end
-          if controller.body.respond_to? :close
-            controller.body.close
-          end
-        else
-          body = controller.body.to_s
-          response.send_status(body.length)
-          response.send_header
-          response.write(body)
-        end
-      end
-    end
-
-    # This is a convenience method that wires up a CampingHandler
-    # for your application on a given port and uri.  It's pretty
-    # much all you need for a camping application to work right.
-    #
-    # It returns the Mongrel::HttpServer which you should either
-    # join or somehow manage.  The thread is running when 
-    # returned.
-
-    def Camping.start(server, port, uri, klass)
-      h = Mongrel::HttpServer.new(server, port)
-      h.register(uri, CampingHandler.new(klass))
-      h.register("/favicon.ico", Mongrel::Error404Handler.new(""))
-      h.run
-      return h
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/cgi.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/cgi.rb
deleted file mode 100644
index 4173bde..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/cgi.rb
+++ /dev/null
@@ -1,181 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'cgi'
-
-module Mongrel
-  # The beginning of a complete wrapper around Mongrel's internal HTTP processing
-  # system but maintaining the original Ruby CGI module.  Use this only as a crutch
-  # to get existing CGI based systems working.  It should handle everything, but please
-  # notify me if you see special warnings.  This work is still very alpha so I need 
-  # testers to help work out the various corner cases.
-  #
-  # The CGIWrapper.handler attribute is normally not set and is available for 
-  # frameworks that need to get back to the handler.  Rails uses this to give
-  # people access to the RailsHandler#files (DirHandler really) so they can
-  # look-up paths and do other things with the files managed there.
-  #
-  # In Rails you can get the real file for a request with:
-  #
-  #  path = @request.cgi.handler.files.can_serve(@request['PATH_INFO'])
-  #
-  # Which is ugly but does the job.  Feel free to write a Rails helper for that.
-  # Refer to DirHandler#can_serve for more information on this.
-  class CGIWrapper < ::CGI
-    public :env_table
-    attr_reader :options
-    attr_accessor :handler
-    # Set this to false if you want calls to CGIWrapper.out to not actually send
-    # the response until you force it.
-    attr_accessor :default_really_final
-
-    # these are stripped out of any keys passed to CGIWrapper.header function
-    REMOVED_KEYS = [ "nph","status","server","connection","type",
-                     "charset","length","language","expires"]
-
-    # Takes an HttpRequest and HttpResponse object, plus any additional arguments
-    # normally passed to CGI.  These are used internally to create a wrapper around
-    # the real CGI while maintaining Mongrel's view of the world.
-    def initialize(request, response, *args)
-      @request = request
-      @response = response
-      @args = *args
-      @input = request.body
-      @head = {}
-      @out_called = false
-      @default_really_final=true
-      super(*args)
-    end
-    
-    # The header is typically called to send back the header.  In our case we
-    # collect it into a hash for later usage.
-    #
-    # nph -- Mostly ignored.  It'll output the date.
-    # connection -- Completely ignored.  Why is CGI doing this?
-    # length -- Ignored since Mongrel figures this out from what you write to output.
-    # 
-    def header(options = "text/html")
-      # if they pass in a string then just write the Content-Type
-      if options.class == String
-        @head['Content-Type'] = options unless @head['Content-Type']
-      else
-        # convert the given options into what Mongrel wants
-        @head['Content-Type'] = options['type'] || "text/html"
-        @head['Content-Type'] += "; charset=" + options['charset'] if options.has_key? "charset" if options['charset']
-        
-        # setup date only if they use nph
-        @head['Date'] = CGI::rfc1123_date(Time.now) if options['nph']
-
-        # setup the server to use the default or what they set
-        @head['Server'] = options['server'] || env_table['SERVER_SOFTWARE']
-
-        # remaining possible options they can give
-        @head['Status'] = options['status'] if options['status']
-        @head['Content-Language'] = options['language'] if options['language']
-        @head['Expires'] = options['expires'] if options['expires']
-
-        # drop the keys we don't want anymore
-        REMOVED_KEYS.each {|k| options.delete(k) }
-
-        # finally just convert the rest raw (which puts 'cookie' directly)
-        # 'cookie' is translated later as we write the header out
-        options.each{|k,v| @head[k] = v}
-      end
-
-      # doing this fakes out the cgi library to think the headers are empty
-      # we then do the real headers in the out function call later
-      ""
-    end
-
-    # Takes any 'cookie' setting and sends it over the Mongrel header,
-    # then removes the setting from the options. If cookie is an 
-    # Array or Hash then it sends those on with .to_s, otherwise
-    # it just calls .to_s on it and hopefully your "cookie" can
-    # write itself correctly.
-    def send_cookies(to)
-      # convert the cookies based on the myriad of possible ways to set a cookie
-      if @head['cookie']
-        cookie = @head['cookie']
-        case cookie
-        when Array
-          cookie.each {|c| to['Set-Cookie'] = c.to_s }
-        when Hash
-          cookie.each_value {|c| to['Set-Cookie'] = c.to_s}
-        else
-          to['Set-Cookie'] = options['cookie'].to_s
-        end
-        
-        @head.delete('cookie')
-      end
-      
-      # @output_cookies seems to never be used, but we'll process it just in case
-      @output_cookies.each {|c| to['Set-Cookie'] = c.to_s } if @output_cookies
-    end
-    
-    # The dumb thing is people can call header or this or both and in any order.
-    # So, we just reuse header and then finalize the HttpResponse the right way.
-    # Status is taken from the various options and converted to what Mongrel needs
-    # via the CGIWrapper.status function.
-    #
-    # We also prevent Rails from actually doing the final send by adding a
-    # second parameter "really_final".  Only Mongrel calls this after Rails
-    # is done.  Since this will break other frameworks, it defaults to 
-    # a different setting for rails (false) and (true) for others.
-    def out(options = "text/html", really_final=@default_really_final)
-      if @out_called || !really_final
-        # don't do it more than once or if it's not the really final call
-        return
-      end
-
-      header(options)
-
-      @response.start status do |head, body|
-        send_cookies(head)
-        
-        @head.each {|k,v| head[k] = v}
-        body.write(yield || "")
-      end
-
-      @out_called = true
-    end
-    
-    # Computes the status once, but lazily so that people who call header twice
-    # don't get penalized.  Because CGI insists on including the options status 
-    # message in the status we have to do a bit of parsing.
-    def status
-      if not @status
-        stat = @head["Status"]
-        stat = stat.split(' ')[0] if stat
-
-        @status = stat || "200"
-      end
-
-      @status
-    end
-
-    # Used to wrap the normal args variable used inside CGI.
-    def args
-      @args
-    end
-    
-    # Used to wrap the normal env_table variable used inside CGI.
-    def env_table
-      @request.params
-    end
-    
-    # Used to wrap the normal stdinput variable used inside CGI.
-    def stdinput
-      @input
-    end
-    
-    # The stdoutput should be completely bypassed but we'll drop a warning just in case
-    def stdoutput
-      STDERR.puts "WARNING: Your program is doing something not expected.  Please tell Zed that stdoutput was used and what software you are running.  Thanks."
-      @response.body
-    end    
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/command.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/command.rb
deleted file mode 100644
index a3ee57d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/command.rb
+++ /dev/null
@@ -1,222 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'singleton'
-require 'optparse'
-
-require 'mongrel/gems'
-Mongrel::Gems.require 'gem_plugin'
-
-module Mongrel
-
-  # Contains all of the various commands that are used with 
-  # Mongrel servers.
-
-  module Command
-
-    BANNER = "Usage: mongrel_rails <command> [options]"
-
-    # A Command pattern implementation used to create the set of command available to the user
-    # from Mongrel.  The script uses objects which implement this interface to do the
-    # user's bidding.
-    module Base
-
-      attr_reader :valid, :done_validating, :original_args
-
-      # Called by the implemented command to set the options for that command.
-      # Every option has a short and long version, a description, a variable to
-      # set, and a default value.  No exceptions.
-      def options(opts)
-        # process the given options array
-        opts.each do |short, long, help, variable, default|
-          self.instance_variable_set(variable, default)
-          @opt.on(short, long, help) do |arg|
-            self.instance_variable_set(variable, arg)
-          end
-        end
-      end
-
-      # Called by the subclass to setup the command and parse the argv arguments.
-      # The call is destructive on argv since it uses the OptionParser#parse! function.
-      def initialize(options={})
-        argv = options[:argv] || []
-        @opt = OptionParser.new
-        @opt.banner = Mongrel::Command::BANNER
-        @valid = true
-        # this is retarded, but it has to be done this way because -h and -v exit
-        @done_validating = false
-        @original_args = argv.dup
-
-        configure
-
-        # I need to add my own -h definition to prevent the -h by default from exiting.
-        @opt.on_tail("-h", "--help", "Show this message") do
-          @done_validating = true
-          puts @opt
-        end
-
-        # I need to add my own -v definition to prevent the -v from exiting by default as well.
-        @opt.on_tail("--version", "Show version") do
-          @done_validating = true
-          if VERSION
-            puts "Version #{Mongrel::Const::MONGREL_VERSION}"
-          end
-        end
-
-        @opt.parse! argv
-      end
-
-      def configure
-        options []
-      end
-
-      # Returns true/false depending on whether the command is configured properly.
-      def validate
-        return @valid
-      end
-
-      # Returns a help message.  Defaults to OptionParser#help which should be good.
-      def help
-        @opt.help
-      end
-
-      # Runs the command doing it's job.  You should implement this otherwise it will
-      # throw a NotImplementedError as a reminder.
-      def run
-        raise NotImplementedError
-      end
-
-
-      # Validates the given expression is true and prints the message if not, exiting.
-      def valid?(exp, message)
-        if not @done_validating and (not exp)
-          failure message
-          @valid = false
-          @done_validating = true
-        end
-      end
-
-      # Validates that a file exists and if not displays the message
-      def valid_exists?(file, message)
-        valid?(file != nil && File.exist?(file), message)
-      end
-
-
-      # Validates that the file is a file and not a directory or something else.
-      def valid_file?(file, message)
-        valid?(file != nil && File.file?(file), message)
-      end
-
-      # Validates that the given directory exists
-      def valid_dir?(file, message)
-        valid?(file != nil && File.directory?(file), message)
-      end
-
-      def valid_user?(user)
-        valid?(@group, "You must also specify a group.")
-        begin
-          Etc.getpwnam(user)
-        rescue
-          failure "User does not exist: #{user}"
-          @valid = false
-        end
-      end
-
-      def valid_group?(group)
-        valid?(@user, "You must also specify a user.")
-        begin
-          Etc.getgrnam(group)
-        rescue
-          failure "Group does not exist: #{group}"
-          @valid = false
-        end
-      end
-
-      # Just a simple method to display failure until something better is developed.
-      def failure(message)
-        STDERR.puts "!!! #{message}"
-      end
-    end
-
-    # A Singleton class that manages all of the available commands
-    # and handles running them.
-    class Registry
-      include Singleton
-
-      # Builds a list of possible commands from the Command derivates list
-      def commands
-        pmgr = GemPlugin::Manager.instance
-        list = pmgr.plugins["/commands"].keys
-        return list.sort
-      end
-
-      # Prints a list of available commands.
-      def print_command_list
-        puts "#{Mongrel::Command::BANNER}\nAvailable commands are:\n\n"
-
-        self.commands.each do |name|
-          if /mongrel::/ =~ name
-            name = name[9 .. -1]
-          end
-
-          puts " - #{name[1 .. -1]}\n"
-        end
-
-        puts "\nEach command takes -h as an option to get help."
-
-      end
-
-
-      # Runs the args against the first argument as the command name.
-      # If it has any errors it returns a false, otherwise it return true.
-      def run(args)
-        # find the command
-        cmd_name = args.shift
-
-        if !cmd_name or cmd_name == "?" or cmd_name == "help"
-          print_command_list
-          return true
-        elsif cmd_name == "--version"
-          puts "Mongrel Web Server #{Mongrel::Const::MONGREL_VERSION}"
-          return true
-        end
-
-        begin
-          # quick hack so that existing commands will keep working but the Mongrel:: ones can be moved
-          if ["start", "stop", "restart"].include? cmd_name
-            cmd_name = "mongrel::" + cmd_name
-          end
-
-          command = GemPlugin::Manager.instance.create("/commands/#{cmd_name}", :argv => args)
-        rescue OptionParser::InvalidOption
-          STDERR.puts "#$! for command '#{cmd_name}'"
-          STDERR.puts "Try #{cmd_name} -h to get help."
-          return false
-        rescue
-          STDERR.puts "ERROR RUNNING '#{cmd_name}': #$!"
-          STDERR.puts "Use help command to get help"
-          return false
-        end
-
-        # Normally the command is NOT valid right after being created
-        # but sometimes (like with -h or -v) there's no further processing
-        # needed so the command is already valid so we can skip it.
-        if not command.done_validating
-          if not command.validate
-            STDERR.puts "#{cmd_name} reported an error. Use mongrel_rails #{cmd_name} -h to get help."
-            return false
-          else
-            command.run
-          end
-        end
-
-        return true
-      end
-
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/configurator.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/configurator.rb
deleted file mode 100644
index bbb88ba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/configurator.rb
+++ /dev/null
@@ -1,388 +0,0 @@
-require 'yaml'
-require 'etc'
-
-module Mongrel
-  # Implements a simple DSL for configuring a Mongrel server for your 
-  # purposes.  More used by framework implementers to setup Mongrel
-  # how they like, but could be used by regular folks to add more things
-  # to an existing mongrel configuration.
-  #
-  # It is used like this:
-  #
-  #   require 'mongrel'
-  #   config = Mongrel::Configurator.new :host => "127.0.0.1" do
-  #     listener :port => 3000 do
-  #       uri "/app", :handler => Mongrel::DirHandler.new(".", load_mime_map("mime.yaml"))
-  #     end
-  #     run
-  #   end
-  # 
-  # This will setup a simple DirHandler at the current directory and load additional
-  # mime types from mimy.yaml.  The :host => "127.0.0.1" is actually not 
-  # specific to the servers but just a hash of default parameters that all 
-  # server or uri calls receive.
-  #
-  # When you are inside the block after Mongrel::Configurator.new you can simply
-  # call functions that are part of Configurator (like server, uri, daemonize, etc)
-  # without having to refer to anything else.  You can also call these functions on 
-  # the resulting object directly for additional configuration.
-  #
-  # A major thing about Configurator is that it actually lets you configure 
-  # multiple listeners for any hosts and ports you want.  These are kept in a
-  # map config.listeners so you can get to them.
-  #
-  # * :pid_file => Where to write the process ID.
-  class Configurator
-    attr_reader :listeners
-    attr_reader :defaults
-    attr_reader :needs_restart
-
-    # You pass in initial defaults and then a block to continue configuring.
-    def initialize(defaults={}, &block)
-      @listener = nil
-      @listener_name = nil
-      @listeners = {}
-      @defaults = defaults
-      @needs_restart = false
-      @pid_file = defaults[:pid_file]
-
-      if block
-        cloaker(&block).bind(self).call
-      end
-    end
-
-    # Change privileges of the process to specified user and group.
-    def change_privilege(user, group)
-      begin
-        uid, gid = Process.euid, Process.egid
-        target_uid = Etc.getpwnam(user).uid if user
-        target_gid = Etc.getgrnam(group).gid if group
-
-        if uid != target_uid or gid != target_gid
-          log "Initiating groups for #{user.inspect}:#{group.inspect}."
-          Process.initgroups(user, target_gid)
-        
-          log "Changing group to #{group.inspect}."
-          Process::GID.change_privilege(target_gid)
-
-          log "Changing user to #{user.inspect}." 
-          Process::UID.change_privilege(target_uid)
-        end
-      rescue Errno::EPERM => e
-        log "Couldn't change user and group to #{user.inspect}:#{group.inspect}: #{e.to_s}."
-        log "Mongrel failed to start."
-        exit 1
-      end
-    end
-
-    def remove_pid_file
-      File.unlink(@pid_file) if @pid_file and File.exists?(@pid_file)
-    end
-
-    # Writes the PID file if we're not on Windows.
-    def write_pid_file
-      if RUBY_PLATFORM !~ /mswin/
-        log "Writing PID file to #{@pid_file}"
-        open(@pid_file,"w") {|f| f.write(Process.pid) }
-        open(@pid_file,"w") do |f|
-          f.write(Process.pid)
-          File.chmod(0644, @pid_file)
-        end      
-      end
-    end
-
-    # Generates a class for cloaking the current self and making the DSL nicer.
-    def cloaking_class
-      class << self
-        self
-      end
-    end
-
-    # Do not call this.  You were warned.
-    def cloaker(&block)
-      cloaking_class.class_eval do
-        define_method :cloaker_, &block
-        meth = instance_method( :cloaker_ )
-        remove_method :cloaker_
-        meth
-      end
-    end
-
-    # This will resolve the given options against the defaults.
-    # Normally just used internally.
-    def resolve_defaults(options)
-      options.merge(@defaults)
-    end
-
-    # Starts a listener block.  This is the only one that actually takes
-    # a block and then you make Configurator.uri calls in order to setup
-    # your URIs and handlers.  If you write your Handlers as GemPlugins
-    # then you can use load_plugins and plugin to load them.
-    # 
-    # It expects the following options (or defaults):
-    # 
-    # * :host => Host name to bind.
-    # * :port => Port to bind.
-    # * :num_processors => The maximum number of concurrent threads allowed.
-    # * :throttle => Time to pause (in hundredths of a second) between accepting clients. 
-    # * :timeout => Time to wait (in seconds) before killing a stalled thread.
-    # * :user => User to change to, must have :group as well.
-    # * :group => Group to change to, must have :user as well.
-    #
-    def listener(options={},&block)
-      raise "Cannot call listener inside another listener block." if (@listener or @listener_name)
-      ops = resolve_defaults(options)
-      ops[:num_processors] ||= 950
-      ops[:throttle] ||= 0
-      ops[:timeout] ||= 60
-
-      @listener = Mongrel::HttpServer.new(ops[:host], ops[:port].to_i, ops[:num_processors].to_i, ops[:throttle].to_i, ops[:timeout].to_i)
-      @listener_name = "#{ops[:host]}:#{ops[:port]}"
-      @listeners[@listener_name] = @listener
-
-      if ops[:user] and ops[:group]
-        change_privilege(ops[:user], ops[:group])
-      end
-
-      # Does the actual cloaking operation to give the new implicit self.
-      if block
-        cloaker(&block).bind(self).call
-      end
-
-      # all done processing this listener setup, reset implicit variables
-      @listener = nil
-      @listener_name = nil
-    end
-
-
-    # Called inside a Configurator.listener block in order to 
-    # add URI->handler mappings for that listener.  Use this as
-    # many times as you like.  It expects the following options
-    # or defaults:
-    #
-    # * :handler => HttpHandler -- Handler to use for this location.
-    # * :in_front => true/false -- Rather than appending, it prepends this handler.
-    def uri(location, options={})
-      ops = resolve_defaults(options)
-      @listener.register(location, ops[:handler], ops[:in_front])
-    end
-
-
-    # Daemonizes the current Ruby script turning all the
-    # listeners into an actual "server" or detached process.
-    # You must call this *before* frameworks that open files
-    # as otherwise the files will be closed by this function.
-    #
-    # Does not work for Win32 systems (the call is silently ignored).
-    #
-    # Requires the following options or defaults:
-    #
-    # * :cwd => Directory to change to.
-    # * :log_file => Where to write STDOUT and STDERR.
-    # 
-    # It is safe to call this on win32 as it will only require the daemons
-    # gem/library if NOT win32.
-    def daemonize(options={})
-      ops = resolve_defaults(options)
-      # save this for later since daemonize will hose it
-      if RUBY_PLATFORM !~ /mswin/
-        require 'daemons/daemonize'
-
-        logfile = ops[:log_file]
-        if logfile[0].chr != "/"
-          logfile = File.join(ops[:cwd],logfile)
-          if not File.exist?(File.dirname(logfile))
-            log "!!! Log file directory not found at full path #{File.dirname(logfile)}.  Update your configuration to use a full path."
-            exit 1
-          end
-        end
-
-        Daemonize.daemonize(logfile)
-
-        # change back to the original starting directory
-        Dir.chdir(ops[:cwd])
-
-      else
-        log "WARNING: Win32 does not support daemon mode."
-      end
-    end
-
-
-    # Uses the GemPlugin system to easily load plugins based on their
-    # gem dependencies.  You pass in either an :includes => [] or 
-    # :excludes => [] setting listing the names of plugins to include
-    # or exclude from the determining the dependencies.
-    def load_plugins(options={})
-      ops = resolve_defaults(options)
-
-      load_settings = {}
-      if ops[:includes]
-        ops[:includes].each do |plugin|
-          load_settings[plugin] = GemPlugin::INCLUDE
-        end
-      end
-
-      if ops[:excludes]
-        ops[:excludes].each do |plugin|
-          load_settings[plugin] = GemPlugin::EXCLUDE
-        end
-      end
-
-      GemPlugin::Manager.instance.load(load_settings)
-    end
-
-
-    # Easy way to load a YAML file and apply default settings.
-    def load_yaml(file, default={})
-      default.merge(YAML.load_file(file))
-    end
-
-
-    # Loads the MIME map file and checks that it is correct
-    # on loading.  This is commonly passed to Mongrel::DirHandler
-    # or any framework handler that uses DirHandler to serve files.
-    # You can also include a set of default MIME types as additional
-    # settings.  See Mongrel::DirHandler for how the MIME types map
-    # is organized.
-    def load_mime_map(file, mime={})
-      # configure any requested mime map
-      mime = load_yaml(file, mime)
-
-      # check all the mime types to make sure they are the right format
-      mime.each {|k,v| log "WARNING: MIME type #{k} must start with '.'" if k.index(".") != 0 }
-
-      return mime
-    end
-
-
-    # Loads and creates a plugin for you based on the given
-    # name and configured with the selected options.  The options
-    # are merged with the defaults prior to passing them in.
-    def plugin(name, options={})
-      ops = resolve_defaults(options)
-      GemPlugin::Manager.instance.create(name, ops)
-    end
-
-    # Lets you do redirects easily as described in Mongrel::RedirectHandler.
-    # You use it inside the configurator like this:
-    #
-    #   redirect("/test", "/to/there") # simple
-    #   redirect("/to", /t/, 'w') # regexp
-    #   redirect("/hey", /(w+)/) {|match| ...}  # block
-    #
-    def redirect(from, pattern, replacement = nil, &block)
-      uri from, :handler => Mongrel::RedirectHandler.new(pattern, replacement, &block)
-    end
-
-    # Works like a meta run method which goes through all the 
-    # configured listeners.  Use the Configurator.join method
-    # to prevent Ruby from exiting until each one is done.
-    def run
-      @listeners.each {|name,s| 
-        s.run 
-      }
-
-      $mongrel_sleeper_thread = Thread.new { loop { sleep 1 } }
-    end
-
-    # Calls .stop on all the configured listeners so they
-    # stop processing requests (gracefully).  By default it
-    # assumes that you don't want to restart.
-    def stop(needs_restart=false, synchronous=false)   
-      @listeners.each do |name,s| 
-        s.stop(synchronous)      
-      end      
-      @needs_restart = needs_restart
-    end
-
-
-    # This method should actually be called *outside* of the
-    # Configurator block so that you can control it.  In other words
-    # do it like:  config.join.
-    def join
-      @listeners.values.each {|s| s.acceptor.join }
-    end
-
-
-    # Calling this before you register your URIs to the given location
-    # will setup a set of handlers that log open files, objects, and the
-    # parameters for each request.  This helps you track common problems
-    # found in Rails applications that are either slow or become unresponsive
-    # after a little while.
-    #
-    # You can pass an extra parameter *what* to indicate what you want to 
-    # debug.  For example, if you just want to dump rails stuff then do:
-    #
-    #   debug "/", what = [:rails]
-    # 
-    # And it will only produce the log/mongrel_debug/rails.log file.
-    # Available options are: :access, :files, :objects, :threads, :rails 
-    # 
-    # NOTE: Use [:files] to get accesses dumped to stderr like with WEBrick.
-    def debug(location, what = [:access, :files, :objects, :threads, :rails])
-      require 'mongrel/debug'
-      handlers = {
-        :access => "/handlers/requestlog::access", 
-        :files => "/handlers/requestlog::files", 
-        :objects => "/handlers/requestlog::objects", 
-        :threads => "/handlers/requestlog::threads",
-        :rails => "/handlers/requestlog::params"
-      }
-
-      # turn on the debugging infrastructure, and ObjectTracker is a pig
-      MongrelDbg.configure
-
-      # now we roll through each requested debug type, turn it on and load that plugin
-      what.each do |type| 
-        MongrelDbg.begin_trace type 
-        uri location, :handler => plugin(handlers[type])
-      end
-    end
-
-    # Used to allow you to let users specify their own configurations
-    # inside your Configurator setup.  You pass it a script name and
-    # it reads it in and does an eval on the contents passing in the right
-    # binding so they can put their own Configurator statements.
-    def run_config(script)
-      open(script) {|f| eval(f.read, proc {self}) }
-    end
-
-    # Sets up the standard signal handlers that are used on most Ruby
-    # It only configures if the platform is not win32 and doesn't do
-    # a HUP signal since this is typically framework specific.
-    #
-    # Requires a :pid_file option given to Configurator.new to indicate a file to delete.  
-    # It sets the MongrelConfig.needs_restart attribute if 
-    # the start command should reload.  It's up to you to detect this
-    # and do whatever is needed for a "restart".
-    #
-    # This command is safely ignored if the platform is win32 (with a warning)
-    def setup_signals(options={})
-      ops = resolve_defaults(options)
-
-      # forced shutdown, even if previously restarted (actually just like TERM but for CTRL-C)
-      trap("INT") { log "INT signal received."; stop(false) }
-
-      # clean up the pid file always
-      at_exit { remove_pid_file }
-
-      if RUBY_PLATFORM !~ /mswin/
-        # graceful shutdown
-        trap("TERM") { log "TERM signal received."; stop }
-        trap("USR1") { log "USR1 received, toggling $mongrel_debug_client to #{!$mongrel_debug_client}"; $mongrel_debug_client = !$mongrel_debug_client }
-        # restart
-        trap("USR2") { log "USR2 signal received."; stop(true) }
-
-        log "Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart)."
-      else
-        log "Signals ready.  INT => stop (no restart)."
-      end
-    end
-
-    # Logs a simple message to STDERR (or the mongrel log if in daemon mode).
-    def log(msg)
-      STDERR.print "** ", msg, "\n"
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/const.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/const.rb
deleted file mode 100644
index 9b4109e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/const.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-
-module Mongrel
-
-  # Every standard HTTP code mapped to the appropriate message.  These are
-  # used so frequently that they are placed directly in Mongrel for easy
-  # access rather than Mongrel::Const itself.
-  HTTP_STATUS_CODES = {  
-    100  => 'Continue', 
-    101  => 'Switching Protocols', 
-    200  => 'OK', 
-    201  => 'Created', 
-    202  => 'Accepted', 
-    203  => 'Non-Authoritative Information', 
-    204  => 'No Content', 
-    205  => 'Reset Content', 
-    206  => 'Partial Content', 
-    300  => 'Multiple Choices', 
-    301  => 'Moved Permanently', 
-    302  => 'Moved Temporarily', 
-    303  => 'See Other', 
-    304  => 'Not Modified', 
-    305  => 'Use Proxy', 
-    400  => 'Bad Request', 
-    401  => 'Unauthorized', 
-    402  => 'Payment Required', 
-    403  => 'Forbidden', 
-    404  => 'Not Found', 
-    405  => 'Method Not Allowed', 
-    406  => 'Not Acceptable', 
-    407  => 'Proxy Authentication Required', 
-    408  => 'Request Time-out', 
-    409  => 'Conflict', 
-    410  => 'Gone', 
-    411  => 'Length Required', 
-    412  => 'Precondition Failed', 
-    413  => 'Request Entity Too Large', 
-    414  => 'Request-URI Too Large', 
-    415  => 'Unsupported Media Type', 
-    500  => 'Internal Server Error', 
-    501  => 'Not Implemented', 
-    502  => 'Bad Gateway', 
-    503  => 'Service Unavailable', 
-    504  => 'Gateway Time-out', 
-    505  => 'HTTP Version not supported'
-  }
-
-  # Frequently used constants when constructing requests or responses.  Many times
-  # the constant just refers to a string with the same contents.  Using these constants
-  # gave about a 3% to 10% performance improvement over using the strings directly.
-  # Symbols did not really improve things much compared to constants.
-  #
-  # While Mongrel does try to emulate the CGI/1.2 protocol, it does not use the REMOTE_IDENT,
-  # REMOTE_USER, or REMOTE_HOST parameters since those are either a security problem or 
-  # too taxing on performance.
-  module Const
-    DATE = "Date".freeze
-
-    # This is the part of the path after the SCRIPT_NAME.  URIClassifier will determine this.
-    PATH_INFO="PATH_INFO".freeze
-
-    # This is the initial part that your handler is identified as by URIClassifier.
-    SCRIPT_NAME="SCRIPT_NAME".freeze
-
-    # The original URI requested by the client.  Passed to URIClassifier to build PATH_INFO and SCRIPT_NAME.
-    REQUEST_URI='REQUEST_URI'.freeze
-    REQUEST_PATH='REQUEST_PATH'.freeze
-
-    MONGREL_VERSION="1.1.5".freeze
-
-    MONGREL_TMP_BASE="mongrel".freeze
-
-    # The standard empty 404 response for bad requests.  Use Error4040Handler for custom stuff.
-    ERROR_404_RESPONSE="HTTP/1.1 404 Not Found\r\nConnection: close\r\nServer: Mongrel #{MONGREL_VERSION}\r\n\r\nNOT FOUND".freeze
-
-    CONTENT_LENGTH="CONTENT_LENGTH".freeze
-
-    # A common header for indicating the server is too busy.  Not used yet.
-    ERROR_503_RESPONSE="HTTP/1.1 503 Service Unavailable\r\n\r\nBUSY".freeze
-
-    # The basic max request size we'll try to read.
-    CHUNK_SIZE=(16 * 1024)
-
-    # This is the maximum header that is allowed before a client is booted.  The parser detects
-    # this, but we'd also like to do this as well.
-    MAX_HEADER=1024 * (80 + 32)
-
-    # Maximum request body size before it is moved out of memory and into a tempfile for reading.
-    MAX_BODY=MAX_HEADER
-
-    # A frozen format for this is about 15% faster
-    STATUS_FORMAT = "HTTP/1.1 %d %s\r\nConnection: close\r\n".freeze
-    CONTENT_TYPE = "Content-Type".freeze
-    LAST_MODIFIED = "Last-Modified".freeze
-    ETAG = "ETag".freeze
-    SLASH = "/".freeze
-    REQUEST_METHOD="REQUEST_METHOD".freeze
-    GET="GET".freeze
-    HEAD="HEAD".freeze
-    # ETag is based on the apache standard of hex mtime-size-inode (inode is 0 on win32)
-    ETAG_FORMAT="\"%x-%x-%x\"".freeze
-    HEADER_FORMAT="%s: %s\r\n".freeze
-    LINE_END="\r\n".freeze
-    REMOTE_ADDR="REMOTE_ADDR".freeze
-    HTTP_X_FORWARDED_FOR="HTTP_X_FORWARDED_FOR".freeze
-    HTTP_IF_MODIFIED_SINCE="HTTP_IF_MODIFIED_SINCE".freeze
-    HTTP_IF_NONE_MATCH="HTTP_IF_NONE_MATCH".freeze
-    REDIRECT = "HTTP/1.1 302 Found\r\nLocation: %s\r\nConnection: close\r\n\r\n".freeze
-    HOST = "HOST".freeze
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/debug.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/debug.rb
deleted file mode 100644
index 2686c1e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/debug.rb
+++ /dev/null
@@ -1,203 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'logger'
-require 'set'
-require 'socket'
-require 'fileutils'
-
-module MongrelDbg
-  SETTINGS = { :tracing => {}}
-  LOGGING = { }
-
-  def MongrelDbg::configure(log_dir = File.join("log","mongrel_debug"))
-    FileUtils.mkdir_p(log_dir)
-    @log_dir = log_dir
-    $objects_out=open(File.join("log","mongrel_debug","objects.log"),"w")
-    $objects_out.puts "run,classname,last,count,delta,lenmean,lensd,lenmax"
-    $objects_out.sync = true
-    $last_stat = nil
-    $run_count = 0
-  end
-
-  
-  def MongrelDbg::trace(target, message)
-    if SETTINGS[:tracing][target] and LOGGING[target]
-      LOGGING[target].log(Logger::DEBUG, message)
-    end
-  end
-
-  def MongrelDbg::begin_trace(target)
-    SETTINGS[:tracing][target] = true
-    if not LOGGING[target]
-      LOGGING[target] = Logger.new(File.join(@log_dir, "#{target.to_s}.log"))
-    end                          
-    MongrelDbg::trace(target, "TRACING ON #{Time.now}")
-  end
-
-  def MongrelDbg::end_trace(target)
-    SETTINGS[:tracing][target] = false
-    MongrelDbg::trace(target, "TRACING OFF #{Time.now}")
-    LOGGING[target].close
-    LOGGING[target] = nil
-  end
-
-  def MongrelDbg::tracing?(target)
-    SETTINGS[:tracing][target]
-  end
-end
-
-
-
-$open_files = {}
-
-class IO
-  alias_method :orig_open, :open
-  alias_method :orig_close, :close
-
-  def open(*arg, &blk)
-    $open_files[self] = args.inspect
-    orig_open(*arg,&blk)
-  end
-
-  def close(*arg,&blk)
-    $open_files.delete self
-    orig_close(*arg,&blk)
-  end
-end
-
-
-module Kernel
-  alias_method :orig_open, :open
-
-  def open(*arg, &blk)
-    $open_files[self] = arg[0]
-    orig_open(*arg,&blk)
-  end
-
-  def log_open_files
-    open_counts = {}
-    $open_files.each do |f,args|
-      open_counts[args] ||= 0
-      open_counts[args] += 1
-    end
-    MongrelDbg::trace(:files, open_counts.to_yaml)
-  end
-end  
-
-
-
-module RequestLog
-
-  # Just logs whatever requests it gets to STDERR (which ends up in the mongrel
-  # log when daemonized).
-  class Access < GemPlugin::Plugin "/handlers"
-    include Mongrel::HttpHandlerPlugin
-    
-    def process(request,response)
-      p = request.params
-      STDERR.puts "#{p['REMOTE_ADDR']} - [#{Time.now.httpdate}] \"#{p['REQUEST_METHOD']} #{p["REQUEST_URI"]} HTTP/1.1\""
-    end
-  end
-  
-
-  class Files < GemPlugin::Plugin "/handlers"
-    include Mongrel::HttpHandlerPlugin
-    
-    def process(request, response)
-      MongrelDbg::trace(:files, "#{Time.now} FILES OPEN BEFORE REQUEST #{request.params['PATH_INFO']}")
-      log_open_files
-    end
-    
-  end
-
-  # stolen from Robert Klemme
-  class Objects < GemPlugin::Plugin "/handlers"
-    include Mongrel::HttpHandlerPlugin
-
-    def process(request,response)
-      begin
-        stats = Hash.new(0)
-        lengths = {}
-        begin
-          ObjectSpace.each_object do |o| 
-            begin
-              if o.respond_to? :length
-                len = o.length
-                lengths[o.class] ||= Mongrel::Stats.new(o.class)
-                lengths[o.class].sample(len)
-              end
-            rescue Object
-            end
-  
-            stats[o.class] += 1
-          end
-        rescue Object # Ignore since ObjectSpace might not be loaded on JRuby
-        end
-
-        stats.sort {|(k1,v1),(k2,v2)| v2 <=> v1}.each do |k,v|
-          if $last_stat
-            delta = v - $last_stat[k]
-            if v > 10 and delta != 0
-              if lengths[k]
-                $objects_out.printf "%d,%s,%d,%d,%d,%f,%f,%f\n", $run_count, k, $last_stat[k], v, delta,lengths[k].mean,lengths[k].sd,lengths[k].max
-              else
-                $objects_out.printf "%d,%s,%d,%d,%d,,,\n", $run_count, k, $last_stat[k], v, delta
-              end
-            end
-          end
-        end
-
-        $run_count += 1
-        $last_stat = stats
-      rescue Object
-        STDERR.puts "object.log ERROR: #$!"
-      end
-    end
-  end
-
-  class Params < GemPlugin::Plugin "/handlers"
-    include Mongrel::HttpHandlerPlugin
-
-    def process(request, response)
-      MongrelDbg::trace(:rails, "#{Time.now} REQUEST #{request.params['PATH_INFO']}")
-      MongrelDbg::trace(:rails, request.params.to_yaml)
-    end
-
-  end
-
-  class Threads < GemPlugin::Plugin "/handlers"
-    include Mongrel::HttpHandlerPlugin
-
-    def process(request, response)
-      MongrelDbg::trace(:threads, "#{Time.now} REQUEST #{request.params['PATH_INFO']}")
-      begin
-        ObjectSpace.each_object do |obj|
-          begin
-            if obj.class == Mongrel::HttpServer
-              worker_list = obj.workers.list
-  
-              if worker_list.length > 0
-                keys = "-----\n\tKEYS:"
-                worker_list.each {|t| keys << "\n\t\t-- #{t}: #{t.keys.inspect}" }
-              end
-  
-              MongrelDbg::trace(:threads, "#{obj.host}:#{obj.port} -- THREADS: #{worker_list.length} #{keys}")
-            end
-          rescue Object # Ignore since obj.class can sometimes take parameters            
-          end
-        end
-      rescue Object # Ignore since ObjectSpace might not be loaded on JRuby
-      end
-    end
-  end
-end
-
-
-END {
-  MongrelDbg::trace(:files, "FILES OPEN AT EXIT")
-  log_open_files
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/gems.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/gems.rb
deleted file mode 100644
index eb6d0d6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/gems.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-module Mongrel
-  module Gems
-    class << self
-    
-      def require(library, version = nil)
-        begin
-          Kernel.require library
-        rescue LoadError, RuntimeError => e
-          begin 
-            # ActiveSupport breaks 'require' by making it always return a true value
-            Kernel.require 'rubygems'
-            version ? gem(library, version) : gem(library)
-            retry
-          rescue Gem::LoadError, LoadError, RuntimeError
-            # puts "** #{library.inspect} could not be loaded" unless library == "mongrel_experimental"
-          end
-        end  
-      end
-      
-    end    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/handlers.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/handlers.rb
deleted file mode 100644
index e643025..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/handlers.rb
+++ /dev/null
@@ -1,468 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'mongrel/stats'
-require 'zlib'
-require 'yaml'
-
-module Mongrel
-
-  # You implement your application handler with this.  It's very light giving
-  # just the minimum necessary for you to handle a request and shoot back 
-  # a response.  Look at the HttpRequest and HttpResponse objects for how
-  # to use them.
-  #
-  # This is used for very simple handlers that don't require much to operate.
-  # More extensive plugins or those you intend to distribute as GemPlugins 
-  # should be implemented using the HttpHandlerPlugin mixin.
-  #
-  class HttpHandler
-    attr_reader :request_notify
-    attr_accessor :listener
-
-    # This will be called by Mongrel if HttpHandler.request_notify set to *true*.
-    # You only get the parameters for the request, with the idea that you'd "bound"
-    # the beginning of the request processing and the first call to process.
-    def request_begins(params)
-    end
-
-    # Called by Mongrel for each IO chunk that is received on the request socket
-    # from the client, allowing you to track the progress of the IO and monitor
-    # the input.  This will be called by Mongrel only if HttpHandler.request_notify
-    # set to *true*.
-    def request_progress(params, clen, total)
-    end
-
-    def process(request, response)
-    end
-
-  end
-
-
-  # This is used when your handler is implemented as a GemPlugin.
-  # The plugin always takes an options hash which you can modify
-  # and then access later.  They are stored by default for 
-  # the process method later.
-  module HttpHandlerPlugin
-    attr_reader :options
-    attr_reader :request_notify
-    attr_accessor :listener
-
-    def request_begins(params)
-    end
-
-    def request_progress(params, clen, total)
-    end
-
-    def initialize(options={})
-      @options = options
-      @header_only = false
-    end
-
-    def process(request, response)
-    end
-
-  end
-
-
-  #
-  # The server normally returns a 404 response if an unknown URI is requested, but it
-  # also returns a lame empty message.  This lets you do a 404 response
-  # with a custom message for special URIs.
-  #
-  class Error404Handler < HttpHandler
-
-    # Sets the message to return.  This is constructed once for the handler
-    # so it's pretty efficient.
-    def initialize(msg)
-      @response = Const::ERROR_404_RESPONSE + msg
-    end
-
-    # Just kicks back the standard 404 response with your special message.
-    def process(request, response)
-      response.socket.write(@response)
-    end
-
-  end
-
-  #
-  # Serves the contents of a directory.  You give it the path to the root
-  # where the files are located, and it tries to find the files based on 
-  # the PATH_INFO inside the directory.  If the requested path is a
-  # directory then it returns a simple directory listing.
-  #
-  # It does a simple protection against going outside it's root path by
-  # converting all paths to an absolute expanded path, and then making 
-  # sure that the final expanded path includes the root path.  If it doesn't
-  # than it simply gives a 404.
-  #
-  # If you pass nil as the root path, it will not check any locations or
-  # expand any paths. This lets you serve files from multiple drives
-  # on win32. It should probably not be used in a public-facing way
-  # without additional checks.
-  #
-  # The default content type is "text/plain; charset=ISO-8859-1" but you
-  # can change it anything you want using the DirHandler.default_content_type
-  # attribute.
-  #
-  class DirHandler < HttpHandler
-    attr_accessor :default_content_type
-    attr_reader :path
-
-    MIME_TYPES_FILE = "mime_types.yml"
-    MIME_TYPES = YAML.load_file(File.join(File.dirname(__FILE__), MIME_TYPES_FILE))
-
-    ONLY_HEAD_GET="Only HEAD and GET allowed.".freeze
-
-    # You give it the path to the directory root and and optional listing_allowed and index_html
-    def initialize(path, listing_allowed=true, index_html="index.html")
-      @path = File.expand_path(path) if path
-      @listing_allowed = listing_allowed
-      @index_html = index_html
-      @default_content_type = "application/octet-stream".freeze
-    end
-
-    # Checks if the given path can be served and returns the full path (or nil if not).
-    def can_serve(path_info)
-
-      req_path = HttpRequest.unescape(path_info)
-      # Add the drive letter or root path
-      req_path = File.join(@path, req_path) if @path
-      req_path = File.expand_path req_path
-      
-      if File.exist? req_path and (!@path or req_path.index(@path) == 0)
-        # It exists and it's in the right location
-        if File.directory? req_path
-          # The request is for a directory
-          index = File.join(req_path, @index_html)
-          if File.exist? index
-            # Serve the index
-            return index
-          elsif @listing_allowed
-            # Serve the directory
-            return req_path
-          else
-            # Do not serve anything
-            return nil
-          end
-        else
-          # It's a file and it's there
-          return req_path
-        end
-      else
-        # does not exist or isn't in the right spot
-        return nil
-      end
-    end
-
-
-    # Returns a simplistic directory listing if they're enabled, otherwise a 403.
-    # Base is the base URI from the REQUEST_URI, dir is the directory to serve 
-    # on the file system (comes from can_serve()), and response is the HttpResponse
-    # object to send the results on.
-    def send_dir_listing(base, dir, response)
-      # take off any trailing / so the links come out right
-      base = HttpRequest.unescape(base)
-      base.chop! if base[-1] == "/"[-1]
-
-      if @listing_allowed
-        response.start(200) do |head,out|
-          head[Const::CONTENT_TYPE] = "text/html"
-          out << "<html><head><title>Directory Listing</title></head><body>"
-          Dir.entries(dir).each do |child|
-            next if child == "."
-            out << "<a href=\"#{base}/#{ HttpRequest.escape(child)}\">"
-            out << (child == ".." ? "Up to parent.." : child)
-            out << "</a><br/>"
-          end
-          out << "</body></html>"
-        end
-      else
-        response.start(403) do |head,out|
-          out.write("Directory listings not allowed")
-        end
-      end
-    end
-
-
-    # Sends the contents of a file back to the user. Not terribly efficient since it's
-    # opening and closing the file for each read.
-    def send_file(req_path, request, response, header_only=false)
-
-      stat = File.stat(req_path)
-
-      # Set the last modified times as well and etag for all files
-      mtime = stat.mtime
-      # Calculated the same as apache, not sure how well the works on win32
-      etag = Const::ETAG_FORMAT % [mtime.to_i, stat.size, stat.ino]
-
-      modified_since = request.params[Const::HTTP_IF_MODIFIED_SINCE]
-      none_match = request.params[Const::HTTP_IF_NONE_MATCH]
-
-      # test to see if this is a conditional request, and test if
-      # the response would be identical to the last response
-      same_response = case
-                      when modified_since && !last_response_time = Time.httpdate(modified_since) rescue nil : false
-                      when modified_since && last_response_time > Time.now                                  : false
-                      when modified_since && mtime > last_response_time                                     : false
-                      when none_match     && none_match == '*'                                              : false
-                      when none_match     && !none_match.strip.split(/\s*,\s*/).include?(etag)              : false
-                      else modified_since || none_match  # validation successful if we get this far and at least one of the header exists
-                      end
-
-      header = response.header
-      header[Const::ETAG] = etag
-
-      if same_response
-        response.start(304) {}
-      else
-        
-        # First we setup the headers and status then we do a very fast send on the socket directly
-        
-        # Support custom responses except 404, which is the default. A little awkward. 
-        response.status = 200 if response.status == 404        
-        header[Const::LAST_MODIFIED] = mtime.httpdate
-
-        # Set the mime type from our map based on the ending
-        dot_at = req_path.rindex('.')
-        if dot_at
-          header[Const::CONTENT_TYPE] = MIME_TYPES[req_path[dot_at .. -1]] || @default_content_type
-        else
-          header[Const::CONTENT_TYPE] = @default_content_type
-        end
-
-        # send a status with out content length
-        response.send_status(stat.size)
-        response.send_header
-
-        if not header_only
-          response.send_file(req_path, stat.size < Const::CHUNK_SIZE * 2)
-        end
-      end
-    end
-
-    # Process the request to either serve a file or a directory listing
-    # if allowed (based on the listing_allowed parameter to the constructor).
-    def process(request, response)
-      req_method = request.params[Const::REQUEST_METHOD] || Const::GET
-      req_path = can_serve request.params[Const::PATH_INFO]
-      if not req_path
-        # not found, return a 404
-        response.start(404) do |head,out|
-          out << "File not found"
-        end
-      else
-        begin
-          if File.directory? req_path
-            send_dir_listing(request.params[Const::REQUEST_URI], req_path, response)
-          elsif req_method == Const::HEAD
-            send_file(req_path, request, response, true)
-          elsif req_method == Const::GET
-            send_file(req_path, request, response, false)
-          else
-            response.start(403) {|head,out| out.write(ONLY_HEAD_GET) }
-          end
-        rescue => details
-          STDERR.puts "Error sending file #{req_path}: #{details}"
-        end
-      end
-    end
-
-    # There is a small number of default mime types for extensions, but
-    # this lets you add any others you'll need when serving content.
-    def DirHandler::add_mime_type(extension, type)
-      MIME_TYPES[extension] = type
-    end
-
-  end
-
-
-  # When added to a config script (-S in mongrel_rails) it will
-  # look at the client's allowed response types and then gzip 
-  # compress anything that is going out.
-  #
-  # Valid option is :always_deflate => false which tells the handler to
-  # deflate everything even if the client can't handle it.
-  class DeflateFilter < HttpHandler
-    include Zlib
-    HTTP_ACCEPT_ENCODING = "HTTP_ACCEPT_ENCODING" 
-
-    def initialize(ops={})
-      @options = ops
-      @always_deflate = ops[:always_deflate] || false
-    end
-
-    def process(request, response)
-      accepts = request.params[HTTP_ACCEPT_ENCODING]
-      # only process if they support compression
-      if @always_deflate or (accepts and (accepts.include? "deflate" and not response.body_sent))
-        response.header["Content-Encoding"] = "deflate"
-        response.body = deflate(response.body)
-      end
-    end
-
-    private
-      def deflate(stream)
-        deflater = Deflate.new(
-          DEFAULT_COMPRESSION,
-          # drop the zlib header which causes both Safari and IE to choke
-          -MAX_WBITS, 
-          DEF_MEM_LEVEL,
-          DEFAULT_STRATEGY)
-
-        stream.rewind
-        gzout = StringIO.new(deflater.deflate(stream.read, FINISH))
-        stream.close
-        gzout.rewind
-        gzout
-      end
-  end
-
-
-  # Implements a few basic statistics for a particular URI.  Register it anywhere
-  # you want in the request chain and it'll quickly gather some numbers for you
-  # to analyze.  It is pretty fast, but don't put it out in production.
-  #
-  # You should pass the filter to StatusHandler as StatusHandler.new(:stats_filter => stats).
-  # This lets you then hit the status URI you want and get these stats from a browser.
-  #
-  # StatisticsFilter takes an option of :sample_rate.  This is a number that's passed to
-  # rand and if that number gets hit then a sample is taken.  This helps reduce the load
-  # and keeps the statistics valid (since sampling is a part of how they work).
-  #
-  # The exception to :sample_rate is that inter-request time is sampled on every request.
-  # If this wasn't done then it wouldn't be accurate as a measure of time between requests.
-  class StatisticsFilter < HttpHandler
-    attr_reader :stats
-
-    def initialize(ops={})
-      @sample_rate = ops[:sample_rate] || 300
-
-      @processors = Mongrel::Stats.new("processors")
-      @reqsize = Mongrel::Stats.new("request Kb")
-      @headcount = Mongrel::Stats.new("req param count")
-      @respsize = Mongrel::Stats.new("response Kb")
-      @interreq = Mongrel::Stats.new("inter-request time")
-    end
-
-
-    def process(request, response)
-      if rand(@sample_rate)+1 == @sample_rate
-        @processors.sample(listener.workers.list.length)
-        @headcount.sample(request.params.length)
-        @reqsize.sample(request.body.length / 1024.0)
-        @respsize.sample((response.body.length + response.header.out.length) / 1024.0)
-      end
-      @interreq.tick
-    end
-
-    def dump
-      "#{@processors.to_s}\n#{@reqsize.to_s}\n#{@headcount.to_s}\n#{@respsize.to_s}\n#{@interreq.to_s}"
-    end
-  end
-
-
-  # The :stats_filter is basically any configured stats filter that you've added to this same
-  # URI.  This lets the status handler print out statistics on how Mongrel is doing.
-  class StatusHandler < HttpHandler
-    def initialize(ops={})
-      @stats = ops[:stats_filter]
-    end
-
-    def table(title, rows)
-      results = "<table border=\"1\"><tr><th colspan=\"#{rows[0].length}\">#{title}</th></tr>"
-      rows.each do |cols|
-        results << "<tr>"
-        cols.each {|col| results << "<td>#{col}</td>" }
-        results << "</tr>"
-      end
-      results + "</table>"
-    end
-
-    def describe_listener
-      results = ""
-      results << "<h1>Listener #{listener.host}:#{listener.port}</h1>"
-      results << table("settings", [
-                       ["host",listener.host],
-                       ["port",listener.port],
-                       ["throttle",listener.throttle],
-                       ["timeout",listener.timeout],
-                       ["workers max",listener.num_processors],
-      ])
-
-      if @stats
-        results << "<h2>Statistics</h2><p>N means the number of samples, pay attention to MEAN, SD, MIN and MAX."
-        results << "<pre>#{@stats.dump}</pre>"
-      end
-
-      results << "<h2>Registered Handlers</h2>"
-      handler_map = listener.classifier.handler_map
-      results << table("handlers", handler_map.map {|uri,handlers| 
-        [uri, 
-            "<pre>" + 
-            handlers.map {|h| h.class.to_s }.join("\n") + 
-            "</pre>"
-        ]
-      })
-
-      results
-    end
-
-    def process(request, response)
-      response.start do |head,out|
-        out.write <<-END
-        <html><body><title>Mongrel Server Status</title>
-        #{describe_listener}
-        </body></html>
-        END
-      end
-    end
-  end
-
-  # This handler allows you to redirect one url to another.
-  # You can use it like String#gsub, where the string is the REQUEST_URI.
-  # REQUEST_URI is the full path with GET parameters.
-  #
-  # Eg. /test/something?help=true&disclaimer=false
-  #
-  # == Examples
-  #
-  #   h = Mongrel::HttpServer.new('0.0.0.0')
-  #   h.register '/test', Mongrel::RedirectHandler.new('/to/there') # simple
-  #   h.register '/to',   Mongrel::RedirectHandler.new(/t/, 'w') # regexp
-  #   # and with a block
-  #   h.register '/hey',  Mongrel::RedirectHandler.new(/(\w+)/) { |match| ... }
-  # 
-  class RedirectHandler < Mongrel::HttpHandler
-    # You set the rewrite rules when building the object.
-    #
-    # pattern            => What to look for or replacement if used alone
-    #
-    # replacement, block => One of them is used to replace the found text
-
-    def initialize(pattern, replacement = nil, &block)
-      unless replacement or block
-        @pattern, @replacement = nil, pattern
-      else
-        @pattern, @replacement, @block = pattern, replacement, block
-      end
-    end
-
-    # Process the request and return a redirect response
-    def process(request, response)
-      unless @pattern
-        response.socket.write(Mongrel::Const::REDIRECT % @replacement)
-      else
-        if @block
-          new_path = request.params['REQUEST_URI'].gsub(@pattern, &@block)
-        else
-          new_path = request.params['REQUEST_URI'].gsub(@pattern, @replacement)
-        end
-        response.socket.write(Mongrel::Const::REDIRECT % new_path)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/header_out.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/header_out.rb
deleted file mode 100644
index b34e95e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/header_out.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-module Mongrel
-  # This class implements a simple way of constructing the HTTP headers dynamically
-  # via a Hash syntax.  Think of it as a write-only Hash.  Refer to HttpResponse for
-  # information on how this is used.
-  #
-  # One consequence of this write-only nature is that you can write multiple headers
-  # by just doing them twice (which is sometimes needed in HTTP), but that the normal
-  # semantics for Hash (where doing an insert replaces) is not there.
-  class HeaderOut
-    attr_reader :out
-    attr_accessor :allowed_duplicates
-
-    def initialize(out)
-      @sent = {}
-      @allowed_duplicates = {"Set-Cookie" => true, "Set-Cookie2" => true,
-        "Warning" => true, "WWW-Authenticate" => true}
-      @out = out
-    end
-
-    # Simply writes "#{key}: #{value}" to an output buffer.
-    def[]=(key,value)
-      if not @sent.has_key?(key) or @allowed_duplicates.has_key?(key)
-        @sent[key] = true
-        @out.write(Const::HEADER_FORMAT % [key, value])
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/http_request.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/http_request.rb
deleted file mode 100644
index 82ffe42..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/http_request.rb
+++ /dev/null
@@ -1,155 +0,0 @@
-
-module Mongrel
-  #
-  # When a handler is found for a registered URI then this class is constructed
-  # and passed to your HttpHandler::process method.  You should assume that 
-  # *one* handler processes all requests.  Included in the HttpRequest is a
-  # HttpRequest.params Hash that matches common CGI params, and a HttpRequest.body
-  # which is a string containing the request body (raw for now).
-  #
-  # The HttpRequest.initialize method will convert any request that is larger than
-  # Const::MAX_BODY into a Tempfile and use that as the body.  Otherwise it uses 
-  # a StringIO object.  To be safe, you should assume it works like a file.
-  #
-  # The HttpHandler.request_notify system is implemented by having HttpRequest call
-  # HttpHandler.request_begins, HttpHandler.request_progress, HttpHandler.process during
-  # the IO processing.  This adds a small amount of overhead but lets you implement
-  # finer controlled handlers and filters.
-  #
-  class HttpRequest
-    attr_reader :body, :params
-
-    # You don't really call this.  It's made for you.
-    # Main thing it does is hook up the params, and store any remaining
-    # body data into the HttpRequest.body attribute.
-    def initialize(params, socket, dispatchers)
-      @params = params
-      @socket = socket
-      @dispatchers = dispatchers
-      content_length = @params[Const::CONTENT_LENGTH].to_i
-      remain = content_length - @params.http_body.length
-      
-      # tell all dispatchers the request has begun
-      @dispatchers.each do |dispatcher|
-        dispatcher.request_begins(@params) 
-      end unless @dispatchers.nil? || @dispatchers.empty?
-
-      # Some clients (like FF1.0) report 0 for body and then send a body.  This will probably truncate them but at least the request goes through usually.
-      if remain <= 0
-        # we've got everything, pack it up
-        @body = StringIO.new
-        @body.write @params.http_body
-        update_request_progress(0, content_length)
-      elsif remain > 0
-        # must read more data to complete body
-        if remain > Const::MAX_BODY
-          # huge body, put it in a tempfile
-          @body = Tempfile.new(Const::MONGREL_TMP_BASE)
-          @body.binmode
-        else
-          # small body, just use that
-          @body = StringIO.new 
-        end
-
-        @body.write @params.http_body
-        read_body(remain, content_length)
-      end
-
-      @body.rewind if @body
-    end
-
-    # updates all dispatchers about our progress
-    def update_request_progress(clen, total)
-      return if @dispatchers.nil? || @dispatchers.empty?
-      @dispatchers.each do |dispatcher|
-        dispatcher.request_progress(@params, clen, total) 
-      end 
-    end
-    private :update_request_progress
-
-    # Does the heavy lifting of properly reading the larger body requests in 
-    # small chunks.  It expects @body to be an IO object, @socket to be valid,
-    # and will set @body = nil if the request fails.  It also expects any initial
-    # part of the body that has been read to be in the @body already.
-    def read_body(remain, total)
-      begin
-        # write the odd sized chunk first
-        @params.http_body = read_socket(remain % Const::CHUNK_SIZE)
-
-        remain -= @body.write(@params.http_body)
-
-        update_request_progress(remain, total)
-
-        # then stream out nothing but perfectly sized chunks
-        until remain <= 0 or @socket.closed?
-          # ASSUME: we are writing to a disk and these writes always write the requested amount
-          @params.http_body = read_socket(Const::CHUNK_SIZE)
-          remain -= @body.write(@params.http_body)
-
-          update_request_progress(remain, total)
-        end
-      rescue Object => e
-        STDERR.puts "#{Time.now}: Error reading HTTP body: #{e.inspect}"
-        STDERR.puts e.backtrace.join("\n")
-        # any errors means we should delete the file, including if the file is dumped
-        @socket.close rescue nil
-        @body.delete if @body.class == Tempfile
-        @body = nil # signals that there was a problem
-      end
-    end
- 
-    def read_socket(len)
-      if !@socket.closed?
-        data = @socket.read(len)
-        if !data
-          raise "Socket read return nil"
-        elsif data.length != len
-          raise "Socket read returned insufficient data: #{data.length}"
-        else
-          data
-        end
-      else
-        raise "Socket already closed when reading."
-      end
-    end
-
-    # Performs URI escaping so that you can construct proper
-    # query strings faster.  Use this rather than the cgi.rb
-    # version since it's faster.  (Stolen from Camping).
-    def self.escape(s)
-      s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
-        '%'+$1.unpack('H2'*$1.size).join('%').upcase
-      }.tr(' ', '+') 
-    end
-
-
-    # Unescapes a URI escaped string. (Stolen from Camping).
-    def self.unescape(s)
-      s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n){
-        [$1.delete('%')].pack('H*')
-      } 
-    end
-
-    # Parses a query string by breaking it up at the '&' 
-    # and ';' characters.  You can also use this to parse
-    # cookies by changing the characters used in the second
-    # parameter (which defaults to '&;'.
-    def self.query_parse(qs, d = '&;')
-      params = {}
-      (qs||'').split(/[#{d}] */n).inject(params) { |h,p|
-        k, v=unescape(p).split('=',2)
-        if cur = params[k]
-          if cur.class == Array
-            params[k] << v
-          else
-            params[k] = [cur, v]
-          end
-        else
-          params[k] = v
-        end
-      }
-
-      return params
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/http_response.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/http_response.rb
deleted file mode 100644
index 32e433e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/http_response.rb
+++ /dev/null
@@ -1,163 +0,0 @@
-module Mongrel
-  # Writes and controls your response to the client using the HTTP/1.1 specification.
-  # You use it by simply doing:
-  #
-  #  response.start(200) do |head,out|
-  #    head['Content-Type'] = 'text/plain'
-  #    out.write("hello\n")
-  #  end
-  #
-  # The parameter to start is the response code--which Mongrel will translate for you
-  # based on HTTP_STATUS_CODES.  The head parameter is how you write custom headers.
-  # The out parameter is where you write your body.  The default status code for 
-  # HttpResponse.start is 200 so the above example is redundant.
-  # 
-  # As you can see, it's just like using a Hash and as you do this it writes the proper
-  # header to the output on the fly.  You can even intermix specifying headers and 
-  # writing content.  The HttpResponse class with write the things in the proper order
-  # once the HttpResponse.block is ended.
-  #
-  # You may also work the HttpResponse object directly using the various attributes available
-  # for the raw socket, body, header, and status codes.  If you do this you're on your own.
-  # A design decision was made to force the client to not pipeline requests.  HTTP/1.1 
-  # pipelining really kills the performance due to how it has to be handled and how 
-  # unclear the standard is.  To fix this the HttpResponse gives a "Connection: close"
-  # header which forces the client to close right away.  The bonus for this is that it
-  # gives a pretty nice speed boost to most clients since they can close their connection
-  # immediately.
-  #
-  # One additional caveat is that you don't have to specify the Content-length header
-  # as the HttpResponse will write this for you based on the out length.
-  class HttpResponse
-    attr_reader :socket
-    attr_reader :body
-    attr_writer :body
-    attr_reader :header
-    attr_reader :status
-    attr_writer :status
-    attr_reader :body_sent
-    attr_reader :header_sent
-    attr_reader :status_sent
-
-    def initialize(socket)
-      @socket = socket
-      @body = StringIO.new
-      @status = 404
-      @reason = nil
-      @header = HeaderOut.new(StringIO.new)
-      @header[Const::DATE] = Time.now.httpdate
-      @body_sent = false
-      @header_sent = false
-      @status_sent = false
-    end
-
-    # Receives a block passing it the header and body for you to work with.
-    # When the block is finished it writes everything you've done to 
-    # the socket in the proper order.  This lets you intermix header and
-    # body content as needed.  Handlers are able to modify pretty much
-    # any part of the request in the chain, and can stop further processing
-    # by simple passing "finalize=true" to the start method.  By default
-    # all handlers run and then mongrel finalizes the request when they're
-    # all done.
-    def start(status=200, finalize=false, reason=nil)
-      @status = status.to_i
-      @reason = reason
-      yield @header, @body
-      finished if finalize
-    end
-
-    # Primarily used in exception handling to reset the response output in order to write
-    # an alternative response.  It will abort with an exception if you have already
-    # sent the header or the body.  This is pretty catastrophic actually.
-    def reset
-      if @body_sent
-        raise "You have already sent the request body."
-      elsif @header_sent
-        raise "You have already sent the request headers."
-      else
-        @header.out.truncate(0)
-        @body.close
-        @body = StringIO.new
-      end
-    end
-
-    def send_status(content_length=@body.length)
-      if not @status_sent
-        @header['Content-Length'] = content_length if content_length and @status != 304
-        write(Const::STATUS_FORMAT % [@status, @reason || HTTP_STATUS_CODES[@status]])
-        @status_sent = true
-      end
-    end
-
-    def send_header
-      if not @header_sent
-        @header.out.rewind
-        write(@header.out.read + Const::LINE_END)
-        @header_sent = true
-      end
-    end
-
-    def send_body
-      if not @body_sent
-        @body.rewind
-        write(@body.read)
-        @body_sent = true
-      end
-    end 
-
-    # Appends the contents of +path+ to the response stream.  The file is opened for binary
-    # reading and written in chunks to the socket.
-    #
-    # Sendfile API support has been removed in 0.3.13.4 due to stability problems.
-    def send_file(path, small_file = false)
-      if small_file
-        File.open(path, "rb") {|f| @socket << f.read }
-      else
-        File.open(path, "rb") do |f|
-          while chunk = f.read(Const::CHUNK_SIZE) and chunk.length > 0
-            begin
-              write(chunk)
-            rescue Object => exc
-              break
-            end
-          end
-        end
-      end
-      @body_sent = true
-    end
-
-    def socket_error(details)
-      # ignore these since it means the client closed off early
-      @socket.close rescue nil
-      done = true
-      raise details
-    end
-
-    def write(data)
-      @socket.write(data)
-    rescue => details
-      socket_error(details)
-    end
-
-    # This takes whatever has been done to header and body and then writes it in the
-    # proper format to make an HTTP/1.1 response.
-    def finished
-      send_status
-      send_header
-      send_body
-    end
-
-    # Used during error conditions to mark the response as "done" so there isn't any more processing
-    # sent to the client.
-    def done=(val)
-      @status_sent = true
-      @header_sent = true
-      @body_sent = true
-    end
-
-    def done
-      (@status_sent and @header_sent and @body_sent)
-    end
-
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/init.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/init.rb
deleted file mode 100644
index 00911f4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/init.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'mongrel/gems'
-Mongrel::Gems.require 'gem_plugin'
-
-# File is just a stub that makes sure the mongrel_plugins gem is loaded and ready
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/mime_types.yml b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/mime_types.yml
deleted file mode 100644
index 3ce1739..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/mime_types.yml
+++ /dev/null
@@ -1,616 +0,0 @@
----
-.a: application/octet-stream
-.abc: text/vnd.abc
-.acgi: text/html
-.afl: video/animaflex
-.ai: application/postscript
-.aif: audio/aiff
-.aifc: audio/aiff
-.aiff: audio/aiff
-.aip: text/x-audiosoft-intra
-.ani: application/x-navi-animation
-.aps: application/mime
-.arc: application/octet-stream
-.arj: application/octet-stream
-.art: image/x-jg
-.asf: video/x-ms-asf
-.asm: text/x-asm
-.asp: text/asp
-.asr: video/x-ms-asf
-.asx: video/x-ms-asf
-.atom: application/atom+xml
-.au: audio/basic
-.au: audio/x-au
-.avi: video/avi
-.avs: video/avs-video
-.axs: application/olescript
-.bas: text/plain
-.bcpio: application/x-bcpio
-.bin: application/octet-stream
-.bm: image/bmp
-.bmp: image/bmp
-.boo: application/book
-.book: application/book
-.boz: application/x-bzip2
-.bsh: application/x-bsh
-.bz2: application/x-bzip2
-.bz: application/x-bzip
-.c: text/plain
-.cat: application/octet-stream
-.cc: text/plain
-.ccad: application/clariscad
-.cco: application/x-cocoa
-.cdf: application/cdf
-.cer: application/x-x509-ca-cert
-.cha: application/x-chat
-.chat: application/x-chat
-.class: application/java
-.class: application/octet-stream
-.clp: application/x-msclip
-.cmx: image/x-cmx
-.cod: image/cis-cod
-.com: application/octet-stream
-.com: text/plain
-.conf: text/plain
-.cpio: application/x-cpio
-.cpp: text/x-c
-.cpt: application/x-cpt
-.crd: application/x-mscardfile
-.crl: application/pkcs-crl
-.crl: application/pkix-crl
-.crt: application/x-x509-ca-cert
-.csh: application/x-csh
-.csh: text/x-script.csh
-.css: text/css
-.cxx: text/plain
-.dcr: application/x-director
-.deb: application/octet-stream
-.deepv: application/x-deepv
-.def: text/plain
-.der: application/x-x509-ca-cert
-.dhh: application/david-heinemeier-hansson
-.dif: video/x-dv
-.dir: application/x-director
-.dl: video/dl
-.dll: application/octet-stream
-.dmg: application/octet-stream
-.dms: application/octet-stream
-.doc: application/msword
-.dp: application/commonground
-.drw: application/drafting
-.dump: application/octet-stream
-.dv: video/x-dv
-.dvi: application/x-dvi
-.dwg: application/acad
-.dwg: image/x-dwg
-.dxf: application/dxf
-.dxf: image/x-dwg
-.dxr: application/x-director
-.ear: application/java-archive
-.el: text/x-script.elisp
-.elc: application/x-bytecode.elisp (compiled elisp)
-.elc: application/x-elc
-.env: application/x-envoy
-.eot: application/octet-stream
-.eps: application/postscript
-.es: application/x-esrehber
-.etx: text/x-setext
-.evy: application/envoy
-.evy: application/x-envoy
-.exe: application/octet-stream
-.f77: text/x-fortran
-.f90: text/plain
-.f90: text/x-fortran
-.f: text/x-fortran
-.fdf: application/vnd.fdf
-.fif: application/fractals
-.fif: image/fif
-.fli: video/fli
-.fli: video/x-fli
-.flo: image/florian
-.flr: x-world/x-vrml
-.flv: video/x-flv
-.flx: text/vnd.fmi.flexstor
-.fmf: video/x-atomic3d-feature
-.for: text/plain
-.for: text/x-fortran
-.fpx: image/vnd.fpx
-.fpx: image/vnd.net-fpx
-.frl: application/freeloader
-.funk: audio/make
-.g3: image/g3fax
-.g: text/plain
-.gif: image/gif
-.gl: video/gl
-.gl: video/x-gl
-.gsd: audio/x-gsm
-.gsm: audio/x-gsm
-.gsp: application/x-gsp
-.gss: application/x-gss
-.gtar: application/x-gtar
-.gz: application/x-compressed
-.gzip: application/x-gzip
-.h: text/plain
-.hdf: application/x-hdf
-.help: application/x-helpfile
-.hgl: application/vnd.hp-hpgl
-.hh: text/plain
-.hlb: text/x-script
-.hlp: application/hlp
-.hpg: application/vnd.hp-hpgl
-.hpgl: application/vnd.hp-hpgl
-.hqx: application/binhex
-.hta: application/hta
-.htc: text/x-component
-.htm: text/html
-.html: text/html
-.htmls: text/html
-.htt: text/webviewhtml
-.htx: text/html
-.ico: image/x-icon
-.idc: text/plain
-.ief: image/ief
-.iefs: image/ief
-.iges: application/iges
-.igs: application/iges
-.iii: application/x-iphone
-.ima: application/x-ima
-.imap: application/x-httpd-imap
-.img: application/octet-stream
-.inf: application/inf
-.ins: application/x-internet-signup
-.ins: application/x-internett-signup
-.ip: application/x-ip2
-.iso: application/octet-stream
-.isp: application/x-internet-signup
-.isu: video/x-isvideo
-.it: audio/it
-.iv: application/x-inventor
-.ivr: i-world/i-vrml
-.ivy: application/x-livescreen
-.jam: audio/x-jam
-.jar: application/java-archive
-.jardiff: application/x-java-archive-diff
-.jav: text/plain
-.jav: text/x-java-source
-.java: text/plain
-.java: text/x-java-source
-.jcm: application/x-java-commerce
-.jfif-tbnl: image/jpeg
-.jfif: image/jpeg
-.jfif: image/pipeg
-.jfif: image/pjpeg
-.jng: image/x-jng
-.jnlp: application/x-java-jnlp-file
-.jpe: image/jpeg
-.jpeg: image/jpeg
-.jpg: image/jpeg
-.jps: image/x-jps
-.js: application/x-javascript
-.js: text/javascript
-.jut: image/jutvision
-.kar: audio/midi
-.kar: music/x-karaoke
-.ksh: application/x-ksh
-.ksh: text/x-script.ksh
-.la: audio/nspaudio
-.la: audio/x-nspaudio
-.lam: audio/x-liveaudio
-.latex: application/x-latex
-.lha: application/lha
-.lha: application/octet-stream
-.lha: application/x-lha
-.lhx: application/octet-stream
-.list: text/plain
-.lma: audio/nspaudio
-.lma: audio/x-nspaudio
-.log: text/plain
-.lsf: video/x-la-asf
-.lsp: application/x-lisp
-.lsp: text/x-script.lisp
-.lst: text/plain
-.lsx: text/x-la-asf
-.lsx: video/x-la-asf
-.ltx: application/x-latex
-.lzh: application/octet-stream
-.lzh: application/x-lzh
-.lzx: application/lzx
-.lzx: application/octet-stream
-.lzx: application/x-lzx
-.m13: application/x-msmediaview
-.m14: application/x-msmediaview
-.m1v: video/mpeg
-.m2a: audio/mpeg
-.m2v: video/mpeg
-.m3u: audio/x-mpegurl
-.m: text/x-m
-.man: application/x-troff-man
-.map: application/x-navimap
-.mar: text/plain
-.mbd: application/mbedlet
-.mc: application/x-magic-cap-package-1.0
-.mcd: application/mcad
-.mcd: application/x-mathcad
-.mcf: image/vasa
-.mcf: text/mcf
-.mcp: application/netmc
-.mdb: application/x-msaccess
-.me: application/x-troff-me
-.mht: message/rfc822
-.mhtml: message/rfc822
-.mid: audio/mid
-.mid: audio/midi
-.mid: audio/x-mid
-.mid: audio/x-midi
-.midi: audio/midi
-.midi: audio/x-mid
-.midi: audio/x-midi
-.mif: application/x-frame
-.mif: application/x-mif
-.mime: message/rfc822
-.mime: www/mime
-.mjf: audio/x-vnd.audioexplosion.mjuicemediafile
-.mjpg: video/x-motion-jpeg
-.mm: application/base64
-.mm: application/x-meme
-.mme: application/base64
-.mml: text/mathml
-.mng: video/x-mng
-.mod: audio/mod
-.moov: video/quicktime
-.mov: video/quicktime
-.movie: video/x-sgi-movie
-.mp2: audio/mpeg
-.mp3: audio/mpeg
-.mpa: audio/mpeg
-.mpc: application/x-project
-.mpe: video/mpeg
-.mpeg: video/mpeg
-.mpg: video/mpeg
-.mpga: audio/mpeg
-.mpp: application/vnd.ms-project
-.mpt: application/x-project
-.mpv2: video/mpeg
-.mpv: application/x-project
-.mpx: application/x-project
-.mrc: application/marc
-.ms: application/x-troff-ms
-.msi: application/octet-stream
-.msm: application/octet-stream
-.msp: application/octet-stream
-.mv: video/x-sgi-movie
-.mvb: application/x-msmediaview
-.my: audio/make
-.mzz: application/x-vnd.audioexplosion.mzz
-.nap: image/naplps
-.naplps: image/naplps
-.nc: application/x-netcdf
-.ncm: application/vnd.nokia.configuration-message
-.nif: image/x-niff
-.niff: image/x-niff
-.nix: application/x-mix-transfer
-.nsc: application/x-conference
-.nvd: application/x-navidoc
-.nws: message/rfc822
-.o: application/octet-stream
-.oda: application/oda
-.omc: application/x-omc
-.omcd: application/x-omcdatamaker
-.omcr: application/x-omcregerator
-.p10: application/pkcs10
-.p10: application/x-pkcs10
-.p12: application/pkcs-12
-.p12: application/x-pkcs12
-.p7a: application/x-pkcs7-signature
-.p7b: application/x-pkcs7-certificates
-.p7c: application/pkcs7-mime
-.p7c: application/x-pkcs7-mime
-.p7m: application/pkcs7-mime
-.p7m: application/x-pkcs7-mime
-.p7r: application/x-pkcs7-certreqresp
-.p7s: application/pkcs7-signature
-.p7s: application/x-pkcs7-signature
-.p: text/x-pascal
-.part: application/pro_eng
-.pas: text/pascal
-.pbm: image/x-portable-bitmap
-.pcl: application/vnd.hp-pcl
-.pcl: application/x-pcl
-.pct: image/x-pict
-.pcx: image/x-pcx
-.pdb: application/x-pilot
-.pdf: application/pdf
-.pem: application/x-x509-ca-cert
-.pfunk: audio/make
-.pfunk: audio/make.my.funk
-.pfx: application/x-pkcs12
-.pgm: image/x-portable-graymap
-.pgm: image/x-portable-greymap
-.pic: image/pict
-.pict: image/pict
-.pkg: application/x-newton-compatible-pkg
-.pko: application/vnd.ms-pki.pko
-.pko: application/ynd.ms-pkipko
-.pl: application/x-perl
-.pl: text/plain
-.pl: text/x-script.perl
-.plx: application/x-pixclscript
-.pm4: application/x-pagemaker
-.pm5: application/x-pagemaker
-.pm: application/x-perl
-.pm: image/x-xpixmap
-.pm: text/x-script.perl-module
-.pma: application/x-perfmon
-.pmc: application/x-perfmon
-.pml: application/x-perfmon
-.pmr: application/x-perfmon
-.pmw: application/x-perfmon
-.png: image/png
-.pnm: application/x-portable-anymap
-.pnm: image/x-portable-anymap
-.pot,: application/vnd.ms-powerpoint
-.pot: application/mspowerpoint
-.pot: application/vnd.ms-powerpoint
-.pov: model/x-pov
-.ppa: application/vnd.ms-powerpoint
-.ppm: image/x-portable-pixmap
-.pps: application/mspowerpoint
-.ppt: application/mspowerpoint
-.ppz: application/mspowerpoint
-.prc: application/x-pilot
-.pre: application/x-freelance
-.prf: application/pics-rules
-.prt: application/pro_eng
-.ps: application/postscript
-.psd: application/octet-stream
-.pub: application/x-mspublisher
-.pvu: paleovu/x-pv
-.pwz: application/vnd.ms-powerpoint
-.py: text/x-script.phyton
-.pyc: applicaiton/x-bytecode.python
-.qcp: audio/vnd.qcelp
-.qd3: x-world/x-3dmf
-.qd3d: x-world/x-3dmf
-.qif: image/x-quicktime
-.qt: video/quicktime
-.qtc: video/x-qtc
-.qti: image/x-quicktime
-.qtif: image/x-quicktime
-.ra: audio/x-pn-realaudio
-.ra: audio/x-pn-realaudio-plugin
-.ra: audio/x-realaudio
-.ram: audio/x-pn-realaudio
-.rar: application/x-rar-compressed
-.ras: application/x-cmu-raster
-.ras: image/cmu-raster
-.ras: image/x-cmu-raster
-.rast: image/cmu-raster
-.rexx: text/x-script.rexx
-.rf: image/vnd.rn-realflash
-.rgb: image/x-rgb
-.rm: application/vnd.rn-realmedia
-.rm: audio/x-pn-realaudio
-.rmi: audio/mid
-.rmm: audio/x-pn-realaudio
-.rmp: audio/x-pn-realaudio
-.rmp: audio/x-pn-realaudio-plugin
-.rng: application/ringing-tones
-.rng: application/vnd.nokia.ringing-tone
-.rnx: application/vnd.rn-realplayer
-.roff: application/x-troff
-.rp: image/vnd.rn-realpix
-.rpm: application/x-redhat-package-manager
-.rpm: audio/x-pn-realaudio-plugin
-.rss: text/xml
-.rt: text/richtext
-.rt: text/vnd.rn-realtext
-.rtf: application/rtf
-.rtf: application/x-rtf
-.rtf: text/richtext
-.rtx: application/rtf
-.rtx: text/richtext
-.run: application/x-makeself
-.rv: video/vnd.rn-realvideo
-.s3m: audio/s3m
-.s: text/x-asm
-.saveme: application/octet-stream
-.sbk: application/x-tbook
-.scd: application/x-msschedule
-.scm: application/x-lotusscreencam
-.scm: text/x-script.guile
-.scm: text/x-script.scheme
-.scm: video/x-scm
-.sct: text/scriptlet
-.sdml: text/plain
-.sdp: application/sdp
-.sdp: application/x-sdp
-.sdr: application/sounder
-.sea: application/sea
-.sea: application/x-sea
-.set: application/set
-.setpay: application/set-payment-initiation
-.setreg: application/set-registration-initiation
-.sgm: text/sgml
-.sgm: text/x-sgml
-.sgml: text/sgml
-.sgml: text/x-sgml
-.sh: application/x-bsh
-.sh: application/x-sh
-.sh: application/x-shar
-.sh: text/x-script.sh
-.shar: application/x-bsh
-.shar: application/x-shar
-.shtml: text/html
-.shtml: text/x-server-parsed-html
-.sid: audio/x-psid
-.sit: application/x-sit
-.sit: application/x-stuffit
-.skd: application/x-koan
-.skm: application/x-koan
-.skp: application/x-koan
-.skt: application/x-koan
-.sl: application/x-seelogo
-.smi: application/smil
-.smil: application/smil
-.snd: audio/basic
-.snd: audio/x-adpcm
-.sol: application/solids
-.spc: application/x-pkcs7-certificates
-.spc: text/x-speech
-.spl: application/futuresplash
-.spr: application/x-sprite
-.sprite: application/x-sprite
-.src: application/x-wais-source
-.ssi: text/x-server-parsed-html
-.ssm: application/streamingmedia
-.sst: application/vnd.ms-pki.certstore
-.sst: application/vnd.ms-pkicertstore
-.step: application/step
-.stl: application/sla
-.stl: application/vnd.ms-pki.stl
-.stl: application/vnd.ms-pkistl
-.stl: application/x-navistyle
-.stm: text/html
-.stp: application/step
-.sv4cpio: application/x-sv4cpio
-.sv4crc: application/x-sv4crc
-.svf: image/vnd.dwg
-.svf: image/x-dwg
-.svg: image/svg+xml
-.svr: application/x-world
-.svr: x-world/x-svr
-.swf: application/x-shockwave-flash
-.t: application/x-troff
-.talk: text/x-speech
-.tar: application/x-tar
-.tbk: application/toolbook
-.tbk: application/x-tbook
-.tcl: application/x-tcl
-.tcl: text/x-script.tcl
-.tcsh: text/x-script.tcsh
-.tex: application/x-tex
-.texi: application/x-texinfo
-.texinfo: application/x-texinfo
-.text: application/plain
-.text: text/plain
-.tgz: application/gnutar
-.tgz: application/x-compressed
-.tif: image/tiff
-.tiff: image/tiff
-.tk: application/x-tcl
-.tr: application/x-troff
-.trm: application/x-msterminal
-.tsi: audio/tsp-audio
-.tsp: application/dsptype
-.tsp: audio/tsplayer
-.tsv: text/tab-separated-values
-.turbot: image/florian
-.txt: text/plain
-.uil: text/x-uil
-.uls: text/iuls
-.uni: text/uri-list
-.unis: text/uri-list
-.unv: application/i-deas
-.uri: text/uri-list
-.uris: text/uri-list
-.ustar: application/x-ustar
-.ustar: multipart/x-ustar
-.uu: application/octet-stream
-.uu: text/x-uuencode
-.uue: text/x-uuencode
-.vcd: application/x-cdlink
-.vcf: text/x-vcard
-.vcs: text/x-vcalendar
-.vda: application/vda
-.vdo: video/vdo
-.vew: application/groupwise
-.viv: video/vivo
-.viv: video/vnd.vivo
-.vivo: video/vivo
-.vivo: video/vnd.vivo
-.vmd: application/vocaltec-media-desc
-.vmf: application/vocaltec-media-file
-.voc: audio/voc
-.voc: audio/x-voc
-.vos: video/vosaic
-.vox: audio/voxware
-.vqe: audio/x-twinvq-plugin
-.vqf: audio/x-twinvq
-.vql: audio/x-twinvq-plugin
-.vrml: application/x-vrml
-.vrml: model/vrml
-.vrml: x-world/x-vrml
-.vrt: x-world/x-vrt
-.vsd: application/x-visio
-.vst: application/x-visio
-.vsw: application/x-visio
-.w60: application/wordperfect6.0
-.w61: application/wordperfect6.1
-.w6w: application/msword
-.war: application/java-archive
-.wav: audio/wav
-.wav: audio/x-wav
-.wb1: application/x-qpro
-.wbmp: image/vnd.wap.wbmp
-.wbmp: image/vnd.wap.wbmp
-.wcm: application/vnd.ms-works
-.wdb: application/vnd.ms-works
-.web: application/vnd.xara
-.wiz: application/msword
-.wk1: application/x-123
-.wks: application/vnd.ms-works
-.wmf: application/x-msmetafile
-.wmf: windows/metafile
-.wml: text/vnd.wap.wml
-.wmlc: application/vnd.wap.wmlc
-.wmls: text/vnd.wap.wmlscript
-.wmlsc: application/vnd.wap.wmlscriptc
-.wmv: video/x-ms-wmv
-.word: application/msword
-.wp5: application/wordperfect
-.wp6: application/wordperfect
-.wp: application/wordperfect
-.wpd: application/wordperfect
-.wps: application/vnd.ms-works
-.wq1: application/x-lotus
-.wri: application/mswrite
-.wrl: application/x-world
-.wsc: text/scriplet
-.wsrc: application/x-wais-source
-.wtk: application/x-wintalk
-.x-png: image/png
-.xaf: x-world/x-vrml
-.xbm: image/xbm
-.xdr: video/x-amt-demorun
-.xgz: xgl/drawing
-.xhtml: application/xhtml+xml
-.xif: image/vnd.xiff
-.xl: application/excel
-.xla: application/excel
-.xlb: application/excel
-.xlc: application/excel
-.xld: application/excel
-.xlk: application/excel
-.xll: application/excel
-.xlm: application/excel
-.xls: application/excel
-.xlt: application/excel
-.xlv: application/excel
-.xlw: application/excel
-.xm: audio/xm
-.xml: text/xml
-.xmz: xgl/movie
-.xof: x-world/x-vrml
-.xpi: application/x-xpinstall
-.xpix: application/x-vnd.ls-xpix
-.xpm: image/x-xpixmap
-.xpm: image/xpm
-.xsl: application/xslt+xml
-.xsr: video/x-amt-showrun
-.xwd: image/x-xwd
-.xwd: image/x-xwindowdump
-.xyz: chemical/x-pdb
-.z: application/x-compressed
-.zip: application/zip
-.zoo: application/octet-stream
-.zsh: text/x-script.zsh
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/rails.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/rails.rb
deleted file mode 100644
index 853ae4e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/rails.rb
+++ /dev/null
@@ -1,185 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'mongrel'
-require 'cgi'
-
-
-module Mongrel
-  module Rails
-    # Implements a handler that can run Rails and serve files out of the
-    # Rails application's public directory.  This lets you run your Rails
-    # application with Mongrel during development and testing, then use it
-    # also in production behind a server that's better at serving the 
-    # static files.
-    #
-    # The RailsHandler takes a mime_map parameter which is a simple suffix=mimetype
-    # mapping that it should add to the list of valid mime types.
-    #
-    # It also supports page caching directly and will try to resolve a request
-    # in the following order:
-    #
-    # * If the requested exact PATH_INFO exists as a file then serve it.
-    # * If it exists at PATH_INFO+".html" exists then serve that.
-    # * Finally, construct a Mongrel::CGIWrapper and run Dispatcher.dispatch to have Rails go.
-    #
-    # This means that if you are using page caching it will actually work with Mongrel
-    # and you should see a decent speed boost (but not as fast as if you use a static
-    # server like Apache or Litespeed).
-    class RailsHandler < Mongrel::HttpHandler
-      attr_reader :files
-      attr_reader :guard
-      @@file_only_methods = ["GET","HEAD"]
-
-      def initialize(dir, mime_map = {})
-        @files = Mongrel::DirHandler.new(dir,false)
-        @guard = Mutex.new
-
-        # Register the requested MIME types
-        mime_map.each {|k,v| Mongrel::DirHandler::add_mime_type(k,v) }
-      end
-
-      # Attempts to resolve the request as follows:
-      #
-      # * If the requested exact PATH_INFO exists as a file then serve it.
-      # * If it exists at PATH_INFO+".html" exists then serve that.
-      # * Finally, construct a Mongrel::CGIWrapper and run Dispatcher.dispatch to have Rails go.
-      def process(request, response)
-        return if response.socket.closed?
-        
-        path_info = request.params[Mongrel::Const::PATH_INFO]
-        rest_operator = request.params[Mongrel::Const::REQUEST_URI][/^#{Regexp.escape path_info}(;[^\?]+)/, 1].to_s
-        path_info.chomp!("/")
-        
-        page_cached = path_info + rest_operator + ActionController::Base.page_cache_extension
-        get_or_head = @@file_only_methods.include? request.params[Mongrel::Const::REQUEST_METHOD]
-
-        if get_or_head and @files.can_serve(path_info)
-          # File exists as-is so serve it up
-          @files.process(request,response)
-        elsif get_or_head and @files.can_serve(page_cached)
-          # Possible cached page, serve it up
-          request.params[Mongrel::Const::PATH_INFO] = page_cached
-          @files.process(request,response)
-        else
-          begin
-            cgi = Mongrel::CGIWrapper.new(request, response)
-            cgi.handler = self
-            # We don't want the output to be really final until we're out of the lock
-            cgi.default_really_final = false
-
-            @guard.synchronize {
-              @active_request_path = request.params[Mongrel::Const::PATH_INFO] 
-              Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, response.body)
-              @active_request_path = nil
-            }
-
-            # This finalizes the output using the proper HttpResponse way
-            cgi.out("text/html",true) {""}
-          rescue Errno::EPIPE
-            response.socket.close
-          rescue Object => rails_error
-            STDERR.puts "#{Time.now}: Error calling Dispatcher.dispatch #{rails_error.inspect}"
-            STDERR.puts rails_error.backtrace.join("\n")
-          end
-        end
-      end
-
-      # Does the internal reload for Rails.  It might work for most cases, but
-      # sometimes you get exceptions.  In that case just do a real restart.
-      def reload!
-        begin
-          @guard.synchronize {
-            $".replace $orig_dollar_quote
-            GC.start
-            Dispatcher.reset_application!
-            ActionController::Routing::Routes.reload
-          }
-        end
-      end
-    end
-
-    # Creates Rails specific configuration options for people to use 
-    # instead of the base Configurator.
-    class RailsConfigurator < Mongrel::Configurator
-
-      # Creates a single rails handler and returns it so you
-      # can add it to a URI. You can actually attach it to 
-      # as many URIs as you want, but this returns the 
-      # same RailsHandler for each call.
-      #
-      # Requires the following options:
-      #
-      # * :docroot => The public dir to serve from.
-      # * :environment => Rails environment to use.
-      # * :cwd => The change to working directory
-      #
-      # And understands the following optional settings:
-      #
-      # * :mime => A map of mime types.
-      #
-      # Because of how Rails is designed you can only have
-      # one installed per Ruby interpreter (talk to them 
-      # about thread safety).  Because of this the first
-      # time you call this function it does all the config
-      # needed to get your Rails working.  After that
-      # it returns the one handler you've configured.
-      # This lets you attach Rails to any URI(s) you want,
-      # but it still protects you from threads destroying
-      # your handler.
-      def rails(options={})
-
-        return @rails_handler if @rails_handler
-
-        ops = resolve_defaults(options)
-
-        # fix up some defaults
-        ops[:environment] ||= "development"
-        ops[:docroot] ||= "public"
-        ops[:mime] ||= {}
-
-        $orig_dollar_quote = $".clone
-        ENV['RAILS_ENV'] = ops[:environment]
-        env_location = "#{ops[:cwd]}/config/environment"
-        require env_location
-        require 'dispatcher'
-        require 'mongrel/rails'
-
-        ActionController::AbstractRequest.relative_url_root = ops[:prefix] if ops[:prefix]
-
-        @rails_handler = RailsHandler.new(ops[:docroot], ops[:mime])
-      end
-
-      # Reloads Rails.  This isn't too reliable really, but it
-      # should work for most minimal reload purposes.  The only reliable
-      # way to reload properly is to stop and then start the process.
-      def reload!
-        if not @rails_handler
-          raise "Rails was not configured.  Read the docs for RailsConfigurator."
-        end
-
-        log "Reloading Rails..."
-        @rails_handler.reload!
-        log "Done reloading Rails."
-
-      end
-
-      # Takes the exact same configuration as Mongrel::Configurator (and actually calls that)
-      # but sets up the additional HUP handler to call reload!.
-      def setup_rails_signals(options={})
-        ops = resolve_defaults(options)
-        setup_signals(options)
-
-        if RUBY_PLATFORM !~ /mswin/
-          # rails reload
-          trap("HUP") { log "HUP signal received."; reload!          }
-
-          log "Rails signals registered.  HUP => reload (without restart).  It might not work well."
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/stats.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/stats.rb
deleted file mode 100644
index f6cf5ab..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/stats.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-# A very simple little class for doing some basic fast statistics sampling.
-# You feed it either samples of numeric data you want measured or you call
-# Stats.tick to get it to add a time delta between the last time you called it.
-# When you're done either call sum, sumsq, n, min, max, mean or sd to get 
-# the information.  The other option is to just call dump and see everything.
-#
-# It does all of this very fast and doesn't take up any memory since the samples
-# are not stored but instead all the values are calculated on the fly.
-module Mongrel
-  class Stats
-    attr_reader :sum, :sumsq, :n, :min, :max
-
-    def initialize(name)
-      @name = name
-      reset
-    end
-
-    # Resets the internal counters so you can start sampling again.
-    def reset
-      @sum = 0.0
-      @sumsq = 0.0
-      @last_time = Time.new
-      @n = 0.0
-      @min = 0.0
-      @max = 0.0
-    end
-
-    # Adds a sampling to the calculations.
-    def sample(s)
-      @sum += s
-      @sumsq += s * s
-      if @n == 0
-        @min = @max = s
-      else
-        @min = s if @min > s
-        @max = s if @max < s
-      end
-      @n+=1
-    end
-
-    # Dump this Stats object with an optional additional message.
-    def dump(msg = "", out=STDERR)
-      out.puts "#{msg}: #{self.to_s}"
-    end
-
-    # Returns a common display (used by dump)
-    def to_s  
-    "[#{@name}]: SUM=%0.4f, SUMSQ=%0.4f, N=%0.4f, MEAN=%0.4f, SD=%0.4f, MIN=%0.4f, MAX=%0.4f" % [@sum, @sumsq, @n, mean, sd, @min, @max]
-    end
-
-
-    # Calculates and returns the mean for the data passed so far.
-    def mean
-      @sum / @n
-    end
-
-    # Calculates the standard deviation of the data so far.
-    def sd
-      # (sqrt( ((s).sumsq - ( (s).sum * (s).sum / (s).n)) / ((s).n-1) ))
-      begin
-        return Math.sqrt( (@sumsq - ( @sum * @sum / @n)) / (@n-1) )
-      rescue Errno::EDOM
-        return 0.0
-      end
-    end
-
-
-    # Adds a time delta between now and the last time you called this.  This
-    # will give you the average time between two activities.
-    # 
-    # An example is:
-    #
-    #  t = Stats.new("do_stuff")
-    #  10000.times { do_stuff(); t.tick }
-    #  t.dump("time")
-    #
-    def tick
-      now = Time.now
-      sample(now - @last_time)
-      @last_time = now
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/tcphack.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/tcphack.rb
deleted file mode 100644
index 634f9dd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/tcphack.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-
-# A modification proposed by Sean Treadway that increases the default accept
-# queue of TCPServer to 1024 so that it handles more concurrent requests.
-class TCPServer
-   def initialize_with_backlog(*args)
-     initialize_without_backlog(*args)
-     listen(1024)
-   end
-
-   alias_method :initialize_without_backlog, :initialize
-   alias_method :initialize, :initialize_with_backlog
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/uri_classifier.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/uri_classifier.rb
deleted file mode 100644
index f39ccc9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/lib/mongrel/uri_classifier.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-
-module Mongrel
-  class URIClassifier
-  
-    class RegistrationError < RuntimeError
-    end
-    class UsageError < RuntimeError
-    end
-
-    attr_reader :handler_map   
- 
-    # Returns the URIs that have been registered with this classifier so far.
-    def uris
-      @handler_map.keys
-    end
-
-    def initialize
-      @handler_map = {}
-      @matcher = //
-      @root_handler = nil
-    end
-    
-    # Register a handler object at a particular URI. The handler can be whatever 
-    # you want, including an array. It's up to you what to do with it.
-    #
-    # Registering a handler is not necessarily threadsafe, so be careful if you go
-    # mucking around once the server is running.
-    def register(uri, handler)
-      raise RegistrationError, "#{uri.inspect} is already registered" if @handler_map[uri]
-      raise RegistrationError, "URI is empty" if !uri or uri.empty?
-      raise RegistrationError, "URI must begin with a \"#{Const::SLASH}\"" unless uri[0..0] == Const::SLASH
-      @handler_map[uri.dup] = handler
-      rebuild
-    end
-    
-    # Unregister a particular URI and its handler.
-    def unregister(uri)
-      handler = @handler_map.delete(uri)
-      raise RegistrationError, "#{uri.inspect} was not registered" unless handler
-      rebuild
-      handler
-    end
-    
-    # Resolve a request URI by finding the best partial match in the registered 
-    # handler URIs.
-    def resolve(request_uri)
-      if @root_handler
-        # Optimization for the pathological case of only one handler on "/"; e.g. Rails
-        [Const::SLASH, request_uri, @root_handler]
-      elsif match = @matcher.match(request_uri)
-        uri = match.to_s
-        # A root mounted ("/") handler must resolve such that path info matches the original URI.
-        [uri, (uri == Const::SLASH ? request_uri : match.post_match), @handler_map[uri]]
-      else
-        [nil, nil, nil]
-      end
-    end
-        
-    private
-    
-    def rebuild
-      if @handler_map.size == 1 and @handler_map[Const::SLASH]
-        @root_handler = @handler_map.values.first
-      else
-        @root_handler = nil
-        routes = @handler_map.keys.sort.sort_by do |uri|
-          -uri.length
-        end
-        @matcher = Regexp.new(routes.map do |uri|
-          Regexp.new('^' + Regexp.escape(uri))
-        end.join('|'))
-      end
-    end    
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/mongrel-public_cert.pem b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/mongrel-public_cert.pem
deleted file mode 100644
index 4fe190d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/mongrel-public_cert.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDUDCCAjigAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n
-cmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK
-CZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzI0OVoXDTA4MDkxNTEwMzI0OVow
-TjEcMBoGA1UEAwwTbW9uZ3JlbC1kZXZlbG9wbWVudDEZMBcGCgmSJomT8ixkARkW
-CXJ1Ynlmb3JnZTETMBEGCgmSJomT8ixkARkWA29yZzCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMb9v3B01eOHk3FyypbQgKXzJplUE5P6dXoG+xpPm0Lv
-P7BQmeMncOwqQ7zXpVQU+lTpXtQFTsOE3vL7KnhQFJKGvUAkbh24VFyopu1I0yqF
-mGu4nRqNXGXVj8TvLSj4S1WpSRLAa0acLPNyKhGmoV9+crqQypSjM6XKjBeppifo
-4eBmWGjiJEYMIJBvJZPJ4rAVDDA8C6CM1m3gMBGNh8ELDhU8HI9AP3dMIkTI2Wx9
-9xkJwHdroAaS0IFFtYChrwee4FbCF1FHDgoTosMwa47DrLHg4hZ6ojaKwK5QVWEV
-XGb6ju5UqpktnSWF2W+Lvl/K0tI42OH2CAhebT1gEVUCAwEAAaM5MDcwCQYDVR0T
-BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGHChyMSZ16u9WOzKhgJSQ9lqDc5
-MA0GCSqGSIb3DQEBBQUAA4IBAQA/lfeN2WdB1xN+82tT7vNS4HOjRQw6MUh5yktu
-GQjaGqm0UB+aX0Z9y0B0qpfv9rj7nmIvEGiwBmDepNWYCGuW15JyqpN7QVVnG2xS
-Mrame7VqgjM7A+VGDD5In5LtWbM/CHAATvvFlQ5Ph13YE1EdnVbZ65c+KQv+5sFY
-Q+zEop74d878uaC/SAHHXS46TiXneocaLSYw1CEZs/MAIy+9c4Q5ESbGpgnfg1Ad
-6lwl7k3hsNHO/+tZzx4HJtOXDI1yAl3+q6T9J0yI3z97EinwvAKhS1eyOI2Y5eeT
-tbQaNYkU127B3l/VNpd8fQm3Jkl/PqCCmDBQjUszFrJEODug
------END CERTIFICATE-----
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/mongrel.gemspec b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/mongrel.gemspec
deleted file mode 100644
index 39be53e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/mongrel.gemspec
+++ /dev/null
@@ -1,235 +0,0 @@
-
-# Gem::Specification for Mongrel-1.1.5
-# Originally generated by Echoe
-
-Gem::Specification.new do |s|
-  s.name = %q{mongrel}
-  s.version = "1.1.5"
-
-  s.specification_version = 2 if s.respond_to? :specification_version=
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Zed A. Shaw"]
-  s.date = %q{2008-05-22}
-  s.default_executable = %q{mongrel_rails}
-  s.description = %q{A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps.}
-  s.email = %q{}
-  s.executables = ["mongrel_rails"]
-  s.extensions = ["ext/http11/extconf.rb"]
-  s.extra_rdoc_files = ["CHANGELOG", "COPYING", "lib/mongrel/camping.rb", "lib/mongrel/cgi.rb", "lib/mongrel/command.rb", "lib/mongrel/configurator.rb", "lib/mongrel/const.rb", "lib/mongrel/debug.rb", "lib/mongrel/gems.rb", "lib/mongrel/handlers.rb", "lib/mongrel/header_out.rb", "lib/mongrel/http_request.rb", "lib/mongrel/http_response.rb", "lib/mongrel/init.rb", "lib/mongrel/rails.rb", "lib/mongrel/stats.rb", "lib/mongrel/tcphack.rb", "lib/mongrel/uri_classifier.rb", "lib/mongrel.rb", "LICENSE", "README"]
-  s.has_rdoc = true
-  s.homepage = %q{http://mongrel.rubyforge.org}
-  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Mongrel", "--main", "README"]
-  s.require_paths = ["lib", "ext"]
-  s.required_ruby_version = Gem::Requirement.new(">= 1.8.4")
-  s.rubyforge_project = %q{mongrel}
-  s.rubygems_version = %q{1.0.1}
-  s.summary = %q{A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps.}
-  s.test_files = ["test/test_cgi_wrapper.rb", "test/test_command.rb", "test/test_conditional.rb", "test/test_configurator.rb", "test/test_debug.rb", "test/test_handlers.rb", "test/test_http11.rb", "test/test_redirect_handler.rb", "test/test_request_progress.rb", "test/test_response.rb", "test/test_stats.rb", "test/test_uriclassifier.rb", "test/test_ws.rb"]
-
-  s.add_dependency(%q<gem_plugin>, [">= 0.2.3"])
-  s.add_dependency(%q<daemons>, [">= 1.0.3"])
-  s.add_dependency(%q<fastthread>, [">= 1.0.1"])
-  s.add_dependency(%q<cgi_multipart_eof_fix>, [">= 2.4"])
-end
-
-
-# # Original Rakefile source (requires the Echoe gem):
-# 
-# 
-# require 'rubygems'
-# gem 'echoe', '>=2.7.5'
-# require 'echoe'
-# 
-# e = Echoe.new("mongrel") do |p|
-#   p.summary = "A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps."
-#   p.author ="Zed A. Shaw"
-#   p.clean_pattern = ['ext/http11/*.{bundle,so,o,obj,pdb,lib,def,exp}', 'lib/*.{bundle,so,o,obj,pdb,lib,def,exp}', 'ext/http11/Makefile', 'pkg', 'lib/*.bundle', '*.gem', 'site/output', '.config', 'lib/http11.jar', 'ext/http11_java/classes', 'coverage', 'doc']
-#   p.url = "http://mongrel.rubyforge.org"
-#   p.rdoc_pattern = ['README', 'LICENSE', 'CHANGELOG', 'COPYING', 'lib/**/*.rb', 'doc/**/*.rdoc']
-#   p.docs_host = 'mongrel.cloudbur.st:/home/eweaver/www/mongrel/htdocs/web'
-#   p.ignore_pattern = /^(pkg|site|projects|doc|log)|CVS|\.log/
-#   p.ruby_version = '>=1.8.4'
-#   p.dependencies = ['gem_plugin >=0.2.3']  
-#   p.extension_pattern = nil
-#   
-#     when 'eweaver' 
-#     when 'luislavena'
-#   end
-#   
-#   p.need_tar_gz = false
-#   p.need_tgz = true
-# 
-#   if RUBY_PLATFORM !~ /mswin|java/
-#     p.extension_pattern = ["ext/**/extconf.rb"]
-#   end
-# 
-#   p.eval = proc do
-#     case RUBY_PLATFORM
-#     when /mswin/
-#       self.files += ['lib/http11.so']
-#       self.platform = Gem::Platform::CURRENT
-#       add_dependency('cgi_multipart_eof_fix', '>= 2.4')
-#     when /java/
-#       self.files += ['lib/http11.jar']
-#       self.platform = 'jruby' # XXX Is this right?
-#     else
-#       add_dependency('daemons', '>= 1.0.3')
-#       add_dependency('fastthread', '>= 1.0.1')
-#       add_dependency('cgi_multipart_eof_fix', '>= 2.4')
-#     end
-#   end
-# 
-# end
-# 
-# #### Ragel builder
-# 
-# desc "Rebuild the Ragel sources"
-# task :ragel do
-#   Dir.chdir "ext/http11" do
-#     target = "http11_parser.c"
-#     File.unlink target if File.exist? target
-#     sh "ragel http11_parser.rl | rlgen-cd -G2 -o #{target}"
-#     raise "Failed to build C source" unless File.exist? target
-#   end
-#   Dir.chdir "ext/http11" do
-#     target = "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
-#     File.unlink target if File.exist? target
-#     sh "ragel -J http11_parser.java.rl | rlgen-java -o #{target}"
-#     raise "Failed to build Java source" unless File.exist? target
-#   end
-# end
-# 
-# #### Pre-compiled extensions for alternative platforms
-# 
-# def move_extensions
-#   Dir["ext/**/*.#{Config::CONFIG['DLEXT']}"].each { |file| mv file, "lib/" }
-# end
-# 
-# def java_classpath_arg
-#   # A myriad of ways to discover the JRuby classpath
-#   classpath = begin
-#     require 'java'
-#     # Already running in a JRuby JVM
-#     Java::java.lang.System.getProperty('java.class.path')
-#   rescue LoadError
-#     ENV['JRUBY_PARENT_CLASSPATH'] || ENV['JRUBY_HOME'] && FileList["#{ENV['JRUBY_HOME']}/lib/*.jar"].join(File::PATH_SEPARATOR)
-#   end
-#   classpath ? "-cp #{classpath}" : ""
-# end
-# 
-# case RUBY_PLATFORM
-# when /mswin/
-#   filename = "lib/http11.so"
-#   file filename do
-#     Dir.chdir("ext/http11") do
-#       ruby "extconf.rb"
-#       system(PLATFORM =~ /mswin/ ? 'nmake' : 'make')
-#     end
-#     move_extensions
-#   end
-#   task :compile => [filename]
-# 
-# when /java/
-# 
-#   # Avoid JRuby in-process launching problem
-#   begin
-#     require 'jruby'
-#     JRuby.runtime.instance_config.run_ruby_in_process = false 
-#   rescue LoadError
-#   end
-# 
-#   filename = "lib/http11.jar"
-#   file filename do
-#     build_dir = "ext/http11_java/classes"
-#     mkdir_p build_dir
-#     sources = FileList['ext/http11_java/**/*.java'].join(' ')
-#     sh "javac -target 1.4 -source 1.4 -d #{build_dir} #{java_classpath_arg} #{sources}"
-#     sh "jar cf lib/http11.jar -C #{build_dir} ."
-#     move_extensions
-#   end
-#   task :compile => [filename]
-# 
-# end
-# 
-# #### Project-wide install and uninstall tasks
-# 
-# def sub_project(project, *targets)
-#   targets.each do |target|
-#     Dir.chdir "projects/#{project}" do
-#       unless RUBY_PLATFORM =~ /mswin/
-#         sh("rake #{target.to_s}") # --trace 
-#       end
-#     end
-#   end
-# end
-# 
-# desc "Package Mongrel and all subprojects"
-# task :package_all => [:package] do
-#   sub_project("gem_plugin", :package)
-#   sub_project("cgi_multipart_eof_fix", :package)
-#   sub_project("fastthread", :package)
-#   sub_project("mongrel_status", :package)
-#   sub_project("mongrel_upload_progress", :package)
-#   sub_project("mongrel_console", :package)
-#   sub_project("mongrel_cluster", :package)
-#   sub_project("mongrel_experimental", :package)
-# 
-#   sh("rake java package") unless RUBY_PLATFORM =~ /java/
-#   
-#   # XXX Broken by RubyGems 0.9.5
-#   # sub_project("mongrel_service", :package) if RUBY_PLATFORM =~ /mswin/
-#   # sh("rake mswin package") unless RUBY_PLATFORM =~ /mswin/
-# end
-# 
-# task :install_requirements do
-#   # These run before Mongrel is installed
-#   sub_project("gem_plugin", :install)
-#   sub_project("cgi_multipart_eof_fix", :install)
-#   sub_project("fastthread", :install)
-# end
-# 
-# desc "for Mongrel and all subprojects"
-# task :install => [:install_requirements] do
-#   # These run after Mongrel is installed
-#   sub_project("mongrel_status", :install)
-#   sub_project("mongrel_upload_progress", :install)
-#   sub_project("mongrel_console", :install)
-#   sub_project("mongrel_cluster", :install)
-#   # sub_project("mongrel_experimental", :install)
-#   sub_project("mongrel_service", :install) if RUBY_PLATFORM =~ /mswin/
-# end
-# 
-# desc "for Mongrel and all its subprojects"
-# task :uninstall => [:clean] do
-#   sub_project("mongrel_status", :uninstall)
-#   sub_project("cgi_multipart_eof_fix", :uninstall)
-#   sub_project("mongrel_upload_progress", :uninstall)
-#   sub_project("mongrel_console", :uninstall)
-#   sub_project("gem_plugin", :uninstall)
-#   sub_project("fastthread", :uninstall)
-#   # sub_project("mongrel_experimental", :uninstall)
-#   sub_project("mongrel_service", :uninstall) if RUBY_PLATFORM =~ /mswin/
-# end
-# 
-# desc "for Mongrel and all its subprojects"
-# task :clean do
-#   sub_project("gem_plugin", :clean)
-#   sub_project("cgi_multipart_eof_fix", :clean)
-#   sub_project("fastthread", :clean)
-#   sub_project("mongrel_status", :clean)
-#   sub_project("mongrel_upload_progress", :clean)
-#   sub_project("mongrel_console", :clean)
-#   sub_project("mongrel_cluster", :clean)
-#   sub_project("mongrel_experimental", :clean)
-#   sub_project("mongrel_service", :clean) if RUBY_PLATFORM =~ /mswin/
-# end
-# 
-# #### Site upload tasks
-# 
-# namespace :site do
-#   desc "Upload the coverage report"
-#   task :coverage => [:rcov] do
-#     sh "rsync -azv --no-perms --no-times test/coverage/* mongrel.cloudbur.st:/home/eweaver/www/mongrel/htdocs/web/coverage" rescue nil
-#   end
-# end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/setup.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/setup.rb
deleted file mode 100644
index 424a5f3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/setup.rb
+++ /dev/null
@@ -1,1585 +0,0 @@
-#
-# setup.rb
-#
-# Copyright (c) 2000-2005 Minero Aoki
-#
-# This program is free software.
-# You can distribute/modify this program under the terms of
-# the GNU LGPL, Lesser General Public License version 2.1.
-#
-
-unless Enumerable.method_defined?(:map)   # Ruby 1.4.6
-  module Enumerable
-    alias map collect
-  end
-end
-
-unless File.respond_to?(:read)   # Ruby 1.6
-  def File.read(fname)
-    open(fname) {|f|
-      return f.read
-    }
-  end
-end
-
-unless Errno.const_defined?(:ENOTEMPTY)   # Windows?
-  module Errno
-    class ENOTEMPTY
-      # We do not raise this exception, implementation is not needed.
-    end
-  end
-end
-
-def File.binread(fname)
-  open(fname, 'rb') {|f|
-    return f.read
-  }
-end
-
-# for corrupted Windows' stat(2)
-def File.dir?(path)
-  File.directory?((path[-1,1] == '/') ? path : path + '/')
-end
-
-
-class ConfigTable
-
-  include Enumerable
-
-  def initialize(rbconfig)
-    @rbconfig = rbconfig
-    @items = []
-    @table = {}
-    # options
-    @install_prefix = nil
-    @config_opt = nil
-    @verbose = true
-    @no_harm = false
-  end
-
-  attr_accessor :install_prefix
-  attr_accessor :config_opt
-
-  attr_writer :verbose
-
-  def verbose?
-    @verbose
-  end
-
-  attr_writer :no_harm
-
-  def no_harm?
-    @no_harm
-  end
-
-  def [](key)
-    lookup(key).resolve(self)
-  end
-
-  def []=(key, val)
-    lookup(key).set val
-  end
-
-  def names
-    @items.map {|i| i.name }
-  end
-
-  def each(&block)
-    @items.each(&block)
-  end
-
-  def key?(name)
-    @table.key?(name)
-  end
-
-  def lookup(name)
-    @table[name] or setup_rb_error "no such config item: #{name}"
-  end
-
-  def add(item)
-    @items.push item
-    @table[item.name] = item
-  end
-
-  def remove(name)
-    item = lookup(name)
-    @items.delete_if {|i| i.name == name }
-    @table.delete_if {|name, i| i.name == name }
-    item
-  end
-
-  def load_script(path, inst = nil)
-    if File.file?(path)
-      MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path
-    end
-  end
-
-  def savefile
-    '.config'
-  end
-
-  def load_savefile
-    begin
-      File.foreach(savefile()) do |line|
-        k, v = *line.split(/=/, 2)
-        self[k] = v.strip
-      end
-    rescue Errno::ENOENT
-      setup_rb_error $!.message + "\n#{File.basename($0)} config first"
-    end
-  end
-
-  def save
-    @items.each {|i| i.value }
-    File.open(savefile(), 'w') {|f|
-      @items.each do |i|
-        f.printf "%s=%s\n", i.name, i.value if i.value? and i.value
-      end
-    }
-  end
-
-  def load_standard_entries
-    standard_entries(@rbconfig).each do |ent|
-      add ent
-    end
-  end
-
-  def standard_entries(rbconfig)
-    c = rbconfig
-
-    rubypath = File.join(c['bindir'], c['ruby_install_name'] + c['EXEEXT'])
-
-    major = c['MAJOR'].to_i
-    minor = c['MINOR'].to_i
-    teeny = c['TEENY'].to_i
-    version = "#{major}.#{minor}"
-
-    # ruby ver. >= 1.4.4?
-    newpath_p = ((major >= 2) or
-                 ((major == 1) and
-                  ((minor >= 5) or
-                   ((minor == 4) and (teeny >= 4)))))
-
-    if c['rubylibdir']
-      # V > 1.6.3
-      libruby         = "#{c['prefix']}/lib/ruby"
-      librubyver      = c['rubylibdir']
-      librubyverarch  = c['archdir']
-      siteruby        = c['sitedir']
-      siterubyver     = c['sitelibdir']
-      siterubyverarch = c['sitearchdir']
-    elsif newpath_p
-      # 1.4.4 <= V <= 1.6.3
-      libruby         = "#{c['prefix']}/lib/ruby"
-      librubyver      = "#{c['prefix']}/lib/ruby/#{version}"
-      librubyverarch  = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
-      siteruby        = c['sitedir']
-      siterubyver     = "$siteruby/#{version}"
-      siterubyverarch = "$siterubyver/#{c['arch']}"
-    else
-      # V < 1.4.4
-      libruby         = "#{c['prefix']}/lib/ruby"
-      librubyver      = "#{c['prefix']}/lib/ruby/#{version}"
-      librubyverarch  = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
-      siteruby        = "#{c['prefix']}/lib/ruby/#{version}/site_ruby"
-      siterubyver     = siteruby
-      siterubyverarch = "$siterubyver/#{c['arch']}"
-    end
-    parameterize = lambda {|path|
-      path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')
-    }
-
-    if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
-      makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
-    else
-      makeprog = 'make'
-    end
-
-    [
-      ExecItem.new('installdirs', 'std/site/home',
-                   'std: install under libruby; site: install under site_ruby; home: install under $HOME')\
-          {|val, table|
-            case val
-            when 'std'
-              table['rbdir'] = '$librubyver'
-              table['sodir'] = '$librubyverarch'
-            when 'site'
-              table['rbdir'] = '$siterubyver'
-              table['sodir'] = '$siterubyverarch'
-            when 'home'
-              setup_rb_error '$HOME was not set' unless ENV['HOME']
-              table['prefix'] = ENV['HOME']
-              table['rbdir'] = '$libdir/ruby'
-              table['sodir'] = '$libdir/ruby'
-            end
-          },
-      PathItem.new('prefix', 'path', c['prefix'],
-                   'path prefix of target environment'),
-      PathItem.new('bindir', 'path', parameterize.call(c['bindir']),
-                   'the directory for commands'),
-      PathItem.new('libdir', 'path', parameterize.call(c['libdir']),
-                   'the directory for libraries'),
-      PathItem.new('datadir', 'path', parameterize.call(c['datadir']),
-                   'the directory for shared data'),
-      PathItem.new('mandir', 'path', parameterize.call(c['mandir']),
-                   'the directory for man pages'),
-      PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']),
-                   'the directory for system configuration files'),
-      PathItem.new('localstatedir', 'path', parameterize.call(c['localstatedir']),
-                   'the directory for local state data'),
-      PathItem.new('libruby', 'path', libruby,
-                   'the directory for ruby libraries'),
-      PathItem.new('librubyver', 'path', librubyver,
-                   'the directory for standard ruby libraries'),
-      PathItem.new('librubyverarch', 'path', librubyverarch,
-                   'the directory for standard ruby extensions'),
-      PathItem.new('siteruby', 'path', siteruby,
-          'the directory for version-independent aux ruby libraries'),
-      PathItem.new('siterubyver', 'path', siterubyver,
-                   'the directory for aux ruby libraries'),
-      PathItem.new('siterubyverarch', 'path', siterubyverarch,
-                   'the directory for aux ruby binaries'),
-      PathItem.new('rbdir', 'path', '$siterubyver',
-                   'the directory for ruby scripts'),
-      PathItem.new('sodir', 'path', '$siterubyverarch',
-                   'the directory for ruby extentions'),
-      PathItem.new('rubypath', 'path', rubypath,
-                   'the path to set to #! line'),
-      ProgramItem.new('rubyprog', 'name', rubypath,
-                      'the ruby program using for installation'),
-      ProgramItem.new('makeprog', 'name', makeprog,
-                      'the make program to compile ruby extentions'),
-      SelectItem.new('shebang', 'all/ruby/never', 'ruby',
-                     'shebang line (#!) editing mode'),
-      BoolItem.new('without-ext', 'yes/no', 'no',
-                   'does not compile/install ruby extentions')
-    ]
-  end
-  private :standard_entries
-
-  def load_multipackage_entries
-    multipackage_entries().each do |ent|
-      add ent
-    end
-  end
-
-  def multipackage_entries
-    [
-      PackageSelectionItem.new('with', 'name,name...', '', 'ALL',
-                               'package names that you want to install'),
-      PackageSelectionItem.new('without', 'name,name...', '', 'NONE',
-                               'package names that you do not want to install')
-    ]
-  end
-  private :multipackage_entries
-
-  ALIASES = {
-    'std-ruby'         => 'librubyver',
-    'stdruby'          => 'librubyver',
-    'rubylibdir'       => 'librubyver',
-    'archdir'          => 'librubyverarch',
-    'site-ruby-common' => 'siteruby',     # For backward compatibility
-    'site-ruby'        => 'siterubyver',  # For backward compatibility
-    'bin-dir'          => 'bindir',
-    'bin-dir'          => 'bindir',
-    'rb-dir'           => 'rbdir',
-    'so-dir'           => 'sodir',
-    'data-dir'         => 'datadir',
-    'ruby-path'        => 'rubypath',
-    'ruby-prog'        => 'rubyprog',
-    'ruby'             => 'rubyprog',
-    'make-prog'        => 'makeprog',
-    'make'             => 'makeprog'
-  }
-
-  def fixup
-    ALIASES.each do |ali, name|
-      @table[ali] = @table[name]
-    end
-    @items.freeze
-    @table.freeze
-    @options_re = /\A--(#{@table.keys.join('|')})(?:=(.*))?\z/
-  end
-
-  def parse_opt(opt)
-    m = @options_re.match(opt) or setup_rb_error "config: unknown option #{opt}"
-    m.to_a[1,2]
-  end
-
-  def dllext
-    @rbconfig['DLEXT']
-  end
-
-  def value_config?(name)
-    lookup(name).value?
-  end
-
-  class Item
-    def initialize(name, template, default, desc)
-      @name = name.freeze
-      @template = template
-      @value = default
-      @default = default
-      @description = desc
-    end
-
-    attr_reader :name
-    attr_reader :description
-
-    attr_accessor :default
-    alias help_default default
-
-    def help_opt
-      "--#{@name}=#{@template}"
-    end
-
-    def value?
-      true
-    end
-
-    def value
-      @value
-    end
-
-    def resolve(table)
-      @value.gsub(%r<\$([^/]+)>) { table[$1] }
-    end
-
-    def set(val)
-      @value = check(val)
-    end
-
-    private
-
-    def check(val)
-      setup_rb_error "config: --#{name} requires argument" unless val
-      val
-    end
-  end
-
-  class BoolItem < Item
-    def config_type
-      'bool'
-    end
-
-    def help_opt
-      "--#{@name}"
-    end
-
-    private
-
-    def check(val)
-      return 'yes' unless val
-      case val
-      when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes'
-      when /\An(o)?\z/i, /\Af(alse)\z/i  then 'no'
-      else
-        setup_rb_error "config: --#{@name} accepts only yes/no for argument"
-      end
-    end
-  end
-
-  class PathItem < Item
-    def config_type
-      'path'
-    end
-
-    private
-
-    def check(path)
-      setup_rb_error "config: --#{@name} requires argument"  unless path
-      path[0,1] == '$' ? path : File.expand_path(path)
-    end
-  end
-
-  class ProgramItem < Item
-    def config_type
-      'program'
-    end
-  end
-
-  class SelectItem < Item
-    def initialize(name, selection, default, desc)
-      super
-      @ok = selection.split('/')
-    end
-
-    def config_type
-      'select'
-    end
-
-    private
-
-    def check(val)
-      unless @ok.include?(val.strip)
-        setup_rb_error "config: use --#{@name}=#{@template} (#{val})"
-      end
-      val.strip
-    end
-  end
-
-  class ExecItem < Item
-    def initialize(name, selection, desc, &block)
-      super name, selection, nil, desc
-      @ok = selection.split('/')
-      @action = block
-    end
-
-    def config_type
-      'exec'
-    end
-
-    def value?
-      false
-    end
-
-    def resolve(table)
-      setup_rb_error "$#{name()} wrongly used as option value"
-    end
-
-    undef set
-
-    def evaluate(val, table)
-      v = val.strip.downcase
-      unless @ok.include?(v)
-        setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})"
-      end
-      @action.call v, table
-    end
-  end
-
-  class PackageSelectionItem < Item
-    def initialize(name, template, default, help_default, desc)
-      super name, template, default, desc
-      @help_default = help_default
-    end
-
-    attr_reader :help_default
-
-    def config_type
-      'package'
-    end
-
-    private
-
-    def check(val)
-      unless File.dir?("packages/#{val}")
-        setup_rb_error "config: no such package: #{val}"
-      end
-      val
-    end
-  end
-
-  class MetaConfigEnvironment
-    def initialize(config, installer)
-      @config = config
-      @installer = installer
-    end
-
-    def config_names
-      @config.names
-    end
-
-    def config?(name)
-      @config.key?(name)
-    end
-
-    def bool_config?(name)
-      @config.lookup(name).config_type == 'bool'
-    end
-
-    def path_config?(name)
-      @config.lookup(name).config_type == 'path'
-    end
-
-    def value_config?(name)
-      @config.lookup(name).config_type != 'exec'
-    end
-
-    def add_config(item)
-      @config.add item
-    end
-
-    def add_bool_config(name, default, desc)
-      @config.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc)
-    end
-
-    def add_path_config(name, default, desc)
-      @config.add PathItem.new(name, 'path', default, desc)
-    end
-
-    def set_config_default(name, default)
-      @config.lookup(name).default = default
-    end
-
-    def remove_config(name)
-      @config.remove(name)
-    end
-
-    # For only multipackage
-    def packages
-      raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor' unless @installer
-      @installer.packages
-    end
-
-    # For only multipackage
-    def declare_packages(list)
-      raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor' unless @installer
-      @installer.packages = list
-    end
-  end
-
-end   # class ConfigTable
-
-
-# This module requires: #verbose?, #no_harm?
-module FileOperations
-
-  def mkdir_p(dirname, prefix = nil)
-    dirname = prefix + File.expand_path(dirname) if prefix
-    $stderr.puts "mkdir -p #{dirname}" if verbose?
-    return if no_harm?
-
-    # Does not check '/', it's too abnormal.
-    dirs = File.expand_path(dirname).split(%r<(?=/)>)
-    if /\A[a-z]:\z/i =~ dirs[0]
-      disk = dirs.shift
-      dirs[0] = disk + dirs[0]
-    end
-    dirs.each_index do |idx|
-      path = dirs[0..idx].join('')
-      Dir.mkdir path unless File.dir?(path)
-    end
-  end
-
-  def rm_f(path)
-    $stderr.puts "rm -f #{path}" if verbose?
-    return if no_harm?
-    force_remove_file path
-  end
-
-  def rm_rf(path)
-    $stderr.puts "rm -rf #{path}" if verbose?
-    return if no_harm?
-    remove_tree path
-  end
-
-  def remove_tree(path)
-    if File.symlink?(path)
-      remove_file path
-    elsif File.dir?(path)
-      remove_tree0 path
-    else
-      force_remove_file path
-    end
-  end
-
-  def remove_tree0(path)
-    Dir.foreach(path) do |ent|
-      next if ent == '.'
-      next if ent == '..'
-      entpath = "#{path}/#{ent}"
-      if File.symlink?(entpath)
-        remove_file entpath
-      elsif File.dir?(entpath)
-        remove_tree0 entpath
-      else
-        force_remove_file entpath
-      end
-    end
-    begin
-      Dir.rmdir path
-    rescue Errno::ENOTEMPTY
-      # directory may not be empty
-    end
-  end
-
-  def move_file(src, dest)
-    force_remove_file dest
-    begin
-      File.rename src, dest
-    rescue
-      File.open(dest, 'wb') {|f|
-        f.write File.binread(src)
-      }
-      File.chmod File.stat(src).mode, dest
-      File.unlink src
-    end
-  end
-
-  def force_remove_file(path)
-    begin
-      remove_file path
-    rescue
-    end
-  end
-
-  def remove_file(path)
-    File.chmod 0777, path
-    File.unlink path
-  end
-
-  def install(from, dest, mode, prefix = nil)
-    $stderr.puts "install #{from} #{dest}" if verbose?
-    return if no_harm?
-
-    realdest = prefix ? prefix + File.expand_path(dest) : dest
-    realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
-    str = File.binread(from)
-    if diff?(str, realdest)
-      verbose_off {
-        rm_f realdest if File.exist?(realdest)
-      }
-      File.open(realdest, 'wb') {|f|
-        f.write str
-      }
-      File.chmod mode, realdest
-
-      File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
-        if prefix
-          f.puts realdest.sub(prefix, '')
-        else
-          f.puts realdest
-        end
-      }
-    end
-  end
-
-  def diff?(new_content, path)
-    return true unless File.exist?(path)
-    new_content != File.binread(path)
-  end
-
-  def command(*args)
-    $stderr.puts args.join(' ') if verbose?
-    system(*args) or raise RuntimeError,
-        "system(#{args.map{|a| a.inspect }.join(' ')}) failed"
-  end
-
-  def ruby(*args)
-    command config('rubyprog'), *args
-  end
-  
-  def make(task = nil)
-    command(*[config('makeprog'), task].compact)
-  end
-
-  def extdir?(dir)
-    File.exist?("#{dir}/MANIFEST") or File.exist?("#{dir}/extconf.rb")
-  end
-
-  def files_of(dir)
-    Dir.open(dir) {|d|
-      return d.select {|ent| File.file?("#{dir}/#{ent}") }
-    }
-  end
-
-  DIR_REJECT = %w( . .. CVS SCCS RCS CVS.adm .svn )
-
-  def directories_of(dir)
-    Dir.open(dir) {|d|
-      return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT
-    }
-  end
-
-end
-
-
-# This module requires: #srcdir_root, #objdir_root, #relpath
-module HookScriptAPI
-
-  def get_config(key)
-    @config[key]
-  end
-
-  alias config get_config
-
-  # obsolete: use metaconfig to change configuration
-  def set_config(key, val)
-    @config[key] = val
-  end
-
-  #
-  # srcdir/objdir (works only in the package directory)
-  #
-
-  def curr_srcdir
-    "#{srcdir_root()}/#{relpath()}"
-  end
-
-  def curr_objdir
-    "#{objdir_root()}/#{relpath()}"
-  end
-
-  def srcfile(path)
-    "#{curr_srcdir()}/#{path}"
-  end
-
-  def srcexist?(path)
-    File.exist?(srcfile(path))
-  end
-
-  def srcdirectory?(path)
-    File.dir?(srcfile(path))
-  end
-  
-  def srcfile?(path)
-    File.file?(srcfile(path))
-  end
-
-  def srcentries(path = '.')
-    Dir.open("#{curr_srcdir()}/#{path}") {|d|
-      return d.to_a - %w(. ..)
-    }
-  end
-
-  def srcfiles(path = '.')
-    srcentries(path).select {|fname|
-      File.file?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-  def srcdirectories(path = '.')
-    srcentries(path).select {|fname|
-      File.dir?(File.join(curr_srcdir(), path, fname))
-    }
-  end
-
-end
-
-
-class ToplevelInstaller
-
-  Version   = '3.4.1'
-  Copyright = 'Copyright (c) 2000-2005 Minero Aoki'
-
-  TASKS = [
-    [ 'all',      'do config, setup, then install' ],
-    [ 'config',   'saves your configurations' ],
-    [ 'show',     'shows current configuration' ],
-    [ 'setup',    'compiles ruby extentions and others' ],
-    [ 'install',  'installs files' ],
-    [ 'test',     'run all tests in test/' ],
-    [ 'clean',    "does `make clean' for each extention" ],
-    [ 'distclean',"does `make distclean' for each extention" ]
-  ]
-
-  def ToplevelInstaller.invoke
-    config = ConfigTable.new(load_rbconfig())
-    config.load_standard_entries
-    config.load_multipackage_entries if multipackage?
-    config.fixup
-    klass = (multipackage?() ? ToplevelInstallerMulti : ToplevelInstaller)
-    klass.new(File.dirname($0), config).invoke
-  end
-
-  def ToplevelInstaller.multipackage?
-    File.dir?(File.dirname($0) + '/packages')
-  end
-
-  def ToplevelInstaller.load_rbconfig
-    if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg }
-      ARGV.delete(arg)
-      load File.expand_path(arg.split(/=/, 2)[1])
-      $".push 'rbconfig.rb'
-    else
-      require 'rbconfig'
-    end
-    ::Config::CONFIG
-  end
-
-  def initialize(ardir_root, config)
-    @ardir = File.expand_path(ardir_root)
-    @config = config
-    # cache
-    @valid_task_re = nil
-  end
-
-  def config(key)
-    @config[key]
-  end
-
-  def inspect
-    "#<#{self.class} #{__id__()}>"
-  end
-
-  def invoke
-    run_metaconfigs
-    case task = parsearg_global()
-    when nil, 'all'
-      parsearg_config
-      init_installers
-      exec_config
-      exec_setup
-      exec_install
-    else
-      case task
-      when 'config', 'test'
-        ;
-      when 'clean', 'distclean'
-        @config.load_savefile if File.exist?(@config.savefile)
-      else
-        @config.load_savefile
-      end
-      __send__ "parsearg_#{task}"
-      init_installers
-      __send__ "exec_#{task}"
-    end
-  end
-  
-  def run_metaconfigs
-    @config.load_script "#{@ardir}/metaconfig"
-  end
-
-  def init_installers
-    @installer = Installer.new(@config, @ardir, File.expand_path('.'))
-  end
-
-  #
-  # Hook Script API bases
-  #
-
-  def srcdir_root
-    @ardir
-  end
-
-  def objdir_root
-    '.'
-  end
-
-  def relpath
-    '.'
-  end
-
-  #
-  # Option Parsing
-  #
-
-  def parsearg_global
-    while arg = ARGV.shift
-      case arg
-      when /\A\w+\z/
-        setup_rb_error "invalid task: #{arg}" unless valid_task?(arg)
-        return arg
-      when '-q', '--quiet'
-        @config.verbose = false
-      when '--verbose'
-        @config.verbose = true
-      when '--help'
-        print_usage $stdout
-        exit 0
-      when '--version'
-        puts "#{File.basename($0)} version #{Version}"
-        exit 0
-      when '--copyright'
-        puts Copyright
-        exit 0
-      else
-        setup_rb_error "unknown global option '#{arg}'"
-      end
-    end
-    nil
-  end
-
-  def valid_task?(t)
-    valid_task_re() =~ t
-  end
-
-  def valid_task_re
-    @valid_task_re ||= /\A(?:#{TASKS.map {|task,desc| task }.join('|')})\z/
-  end
-
-  def parsearg_no_options
-    unless ARGV.empty?
-      task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1)
-      setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}"
-    end
-  end
-
-  alias parsearg_show       parsearg_no_options
-  alias parsearg_setup      parsearg_no_options
-  alias parsearg_test       parsearg_no_options
-  alias parsearg_clean      parsearg_no_options
-  alias parsearg_distclean  parsearg_no_options
-
-  def parsearg_config
-    evalopt = []
-    set = []
-    @config.config_opt = []
-    while i = ARGV.shift
-      if /\A--?\z/ =~ i
-        @config.config_opt = ARGV.dup
-        break
-      end
-      name, value = *@config.parse_opt(i)
-      if @config.value_config?(name)
-        @config[name] = value
-      else
-        evalopt.push [name, value]
-      end
-      set.push name
-    end
-    evalopt.each do |name, value|
-      @config.lookup(name).evaluate value, @config
-    end
-    # Check if configuration is valid
-    set.each do |n|
-      @config[n] if @config.value_config?(n)
-    end
-  end
-
-  def parsearg_install
-    @config.no_harm = false
-    @config.install_prefix = ''
-    while a = ARGV.shift
-      case a
-      when '--no-harm'
-        @config.no_harm = true
-      when /\A--prefix=/
-        path = a.split(/=/, 2)[1]
-        path = File.expand_path(path) unless path[0,1] == '/'
-        @config.install_prefix = path
-      else
-        setup_rb_error "install: unknown option #{a}"
-      end
-    end
-  end
-
-  def print_usage(out)
-    out.puts 'Typical Installation Procedure:'
-    out.puts "  $ ruby #{File.basename $0} config"
-    out.puts "  $ ruby #{File.basename $0} setup"
-    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
-    out.puts
-    out.puts 'Detailed Usage:'
-    out.puts "  ruby #{File.basename $0} <global option>"
-    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"
-
-    fmt = "  %-24s %s\n"
-    out.puts
-    out.puts 'Global options:'
-    out.printf fmt, '-q,--quiet',   'suppress message outputs'
-    out.printf fmt, '   --verbose', 'output messages verbosely'
-    out.printf fmt, '   --help',    'print this message'
-    out.printf fmt, '   --version', 'print version and quit'
-    out.printf fmt, '   --copyright',  'print copyright and quit'
-    out.puts
-    out.puts 'Tasks:'
-    TASKS.each do |name, desc|
-      out.printf fmt, name, desc
-    end
-
-    fmt = "  %-24s %s [%s]\n"
-    out.puts
-    out.puts 'Options for CONFIG or ALL:'
-    @config.each do |item|
-      out.printf fmt, item.help_opt, item.description, item.help_default
-    end
-    out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's"
-    out.puts
-    out.puts 'Options for INSTALL:'
-    out.printf fmt, '--no-harm', 'only display what to do if given', 'off'
-    out.printf fmt, '--prefix=path',  'install path prefix', ''
-    out.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    @installer.exec_config
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    @installer.exec_setup
-  end
-
-  def exec_install
-    @installer.exec_install
-  end
-
-  def exec_test
-    @installer.exec_test
-  end
-
-  def exec_show
-    @config.each do |i|
-      printf "%-20s %s\n", i.name, i.value if i.value?
-    end
-  end
-
-  def exec_clean
-    @installer.exec_clean
-  end
-
-  def exec_distclean
-    @installer.exec_distclean
-  end
-
-end   # class ToplevelInstaller
-
-
-class ToplevelInstallerMulti < ToplevelInstaller
-
-  include FileOperations
-
-  def initialize(ardir_root, config)
-    super
-    @packages = directories_of("#{@ardir}/packages")
-    raise 'no package exists' if @packages.empty?
-    @root_installer = Installer.new(@config, @ardir, File.expand_path('.'))
-  end
-
-  def run_metaconfigs
-    @config.load_script "#{@ardir}/metaconfig", self
-    @packages.each do |name|
-      @config.load_script "#{@ardir}/packages/#{name}/metaconfig"
-    end
-  end
-
-  attr_reader :packages
-
-  def packages=(list)
-    raise 'package list is empty' if list.empty?
-    list.each do |name|
-      raise "directory packages/#{name} does not exist"\
-              unless File.dir?("#{@ardir}/packages/#{name}")
-    end
-    @packages = list
-  end
-
-  def init_installers
-    @installers = {}
-    @packages.each do |pack|
-      @installers[pack] = Installer.new(@config,
-                                       "#{@ardir}/packages/#{pack}",
-                                       "packages/#{pack}")
-    end
-    with    = extract_selection(config('with'))
-    without = extract_selection(config('without'))
-    @selected = @installers.keys.select {|name|
-                  (with.empty? or with.include?(name)) \
-                      and not without.include?(name)
-                }
-  end
-
-  def extract_selection(list)
-    a = list.split(/,/)
-    a.each do |name|
-      setup_rb_error "no such package: #{name}"  unless @installers.key?(name)
-    end
-    a
-  end
-
-  def print_usage(f)
-    super
-    f.puts 'Inluded packages:'
-    f.puts '  ' + @packages.sort.join(' ')
-    f.puts
-  end
-
-  #
-  # Task Handlers
-  #
-
-  def exec_config
-    run_hook 'pre-config'
-    each_selected_installers {|inst| inst.exec_config }
-    run_hook 'post-config'
-    @config.save   # must be final
-  end
-
-  def exec_setup
-    run_hook 'pre-setup'
-    each_selected_installers {|inst| inst.exec_setup }
-    run_hook 'post-setup'
-  end
-
-  def exec_install
-    run_hook 'pre-install'
-    each_selected_installers {|inst| inst.exec_install }
-    run_hook 'post-install'
-  end
-
-  def exec_test
-    run_hook 'pre-test'
-    each_selected_installers {|inst| inst.exec_test }
-    run_hook 'post-test'
-  end
-
-  def exec_clean
-    rm_f @config.savefile
-    run_hook 'pre-clean'
-    each_selected_installers {|inst| inst.exec_clean }
-    run_hook 'post-clean'
-  end
-
-  def exec_distclean
-    rm_f @config.savefile
-    run_hook 'pre-distclean'
-    each_selected_installers {|inst| inst.exec_distclean }
-    run_hook 'post-distclean'
-  end
-
-  #
-  # lib
-  #
-
-  def each_selected_installers
-    Dir.mkdir 'packages' unless File.dir?('packages')
-    @selected.each do |pack|
-      $stderr.puts "Processing the package `#{pack}' ..." if verbose?
-      Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
-      Dir.chdir "packages/#{pack}"
-      yield @installers[pack]
-      Dir.chdir '../..'
-    end
-  end
-
-  def run_hook(id)
-    @root_installer.run_hook id
-  end
-
-  # module FileOperations requires this
-  def verbose?
-    @config.verbose?
-  end
-
-  # module FileOperations requires this
-  def no_harm?
-    @config.no_harm?
-  end
-
-end   # class ToplevelInstallerMulti
-
-
-class Installer
-
-  FILETYPES = %w( bin lib ext data conf man )
-
-  include FileOperations
-  include HookScriptAPI
-
-  def initialize(config, srcroot, objroot)
-    @config = config
-    @srcdir = File.expand_path(srcroot)
-    @objdir = File.expand_path(objroot)
-    @currdir = '.'
-  end
-
-  def inspect
-    "#<#{self.class} #{File.basename(@srcdir)}>"
-  end
-
-  def noop(rel)
-  end
-
-  #
-  # Hook Script API base methods
-  #
-
-  def srcdir_root
-    @srcdir
-  end
-
-  def objdir_root
-    @objdir
-  end
-
-  def relpath
-    @currdir
-  end
-
-  #
-  # Config Access
-  #
-
-  # module FileOperations requires this
-  def verbose?
-    @config.verbose?
-  end
-
-  # module FileOperations requires this
-  def no_harm?
-    @config.no_harm?
-  end
-
-  def verbose_off
-    begin
-      save, @config.verbose = @config.verbose?, false
-      yield
-    ensure
-      @config.verbose = save
-    end
-  end
-
-  #
-  # TASK config
-  #
-
-  def exec_config
-    exec_task_traverse 'config'
-  end
-
-  alias config_dir_bin noop
-  alias config_dir_lib noop
-
-  def config_dir_ext(rel)
-    extconf if extdir?(curr_srcdir())
-  end
-
-  alias config_dir_data noop
-  alias config_dir_conf noop
-  alias config_dir_man noop
-
-  def extconf
-    ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt
-  end
-
-  #
-  # TASK setup
-  #
-
-  def exec_setup
-    exec_task_traverse 'setup'
-  end
-
-  def setup_dir_bin(rel)
-    files_of(curr_srcdir()).each do |fname|
-      update_shebang_line "#{curr_srcdir()}/#{fname}"
-    end
-  end
-
-  alias setup_dir_lib noop
-
-  def setup_dir_ext(rel)
-    make if extdir?(curr_srcdir())
-  end
-
-  alias setup_dir_data noop
-  alias setup_dir_conf noop
-  alias setup_dir_man noop
-
-  def update_shebang_line(path)
-    return if no_harm?
-    return if config('shebang') == 'never'
-    old = Shebang.load(path)
-    if old
-      $stderr.puts "warning: #{path}: Shebang line includes too many args.  It is not portable and your program may not work." if old.args.size > 1
-      new = new_shebang(old)
-      return if new.to_s == old.to_s
-    else
-      return unless config('shebang') == 'all'
-      new = Shebang.new(config('rubypath'))
-    end
-    $stderr.puts "updating shebang: #{File.basename(path)}" if verbose?
-    open_atomic_writer(path) {|output|
-      File.open(path, 'rb') {|f|
-        f.gets if old   # discard
-        output.puts new.to_s
-        output.print f.read
-      }
-    }
-  end
-
-  def new_shebang(old)
-    if /\Aruby/ =~ File.basename(old.cmd)
-      Shebang.new(config('rubypath'), old.args)
-    elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby'
-      Shebang.new(config('rubypath'), old.args[1..-1])
-    else
-      return old unless config('shebang') == 'all'
-      Shebang.new(config('rubypath'))
-    end
-  end
-
-  def open_atomic_writer(path, &block)
-    tmpfile = File.basename(path) + '.tmp'
-    begin
-      File.open(tmpfile, 'wb', &block)
-      File.rename tmpfile, File.basename(path)
-    ensure
-      File.unlink tmpfile if File.exist?(tmpfile)
-    end
-  end
-
-  class Shebang
-    def Shebang.load(path)
-      line = nil
-      File.open(path) {|f|
-        line = f.gets
-      }
-      return nil unless /\A#!/ =~ line
-      parse(line)
-    end
-
-    def Shebang.parse(line)
-      cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ')
-      new(cmd, args)
-    end
-
-    def initialize(cmd, args = [])
-      @cmd = cmd
-      @args = args
-    end
-
-    attr_reader :cmd
-    attr_reader :args
-
-    def to_s
-      "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}")
-    end
-  end
-
-  #
-  # TASK install
-  #
-
-  def exec_install
-    rm_f 'InstalledFiles'
-    exec_task_traverse 'install'
-  end
-
-  def install_dir_bin(rel)
-    install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755
-  end
-
-  def install_dir_lib(rel)
-    install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644
-  end
-
-  def install_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    install_files rubyextentions('.'),
-                  "#{config('sodir')}/#{File.dirname(rel)}",
-                  0555
-  end
-
-  def install_dir_data(rel)
-    install_files targetfiles(), "#{config('datadir')}/#{rel}", 0644
-  end
-
-  def install_dir_conf(rel)
-    # FIXME: should not remove current config files
-    # (rename previous file to .old/.org)
-    install_files targetfiles(), "#{config('sysconfdir')}/#{rel}", 0644
-  end
-
-  def install_dir_man(rel)
-    install_files targetfiles(), "#{config('mandir')}/#{rel}", 0644
-  end
-
-  def install_files(list, dest, mode)
-    mkdir_p dest, @config.install_prefix
-    list.each do |fname|
-      install fname, dest, mode, @config.install_prefix
-    end
-  end
-
-  def libfiles
-    glob_reject(%w(*.y *.output), targetfiles())
-  end
-
-  def rubyextentions(dir)
-    ents = glob_select("*.#{@config.dllext}", targetfiles())
-    if ents.empty?
-      setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first"
-    end
-    ents
-  end
-
-  def targetfiles
-    mapdir(existfiles() - hookfiles())
-  end
-
-  def mapdir(ents)
-    ents.map {|ent|
-      if File.exist?(ent)
-      then ent                         # objdir
-      else "#{curr_srcdir()}/#{ent}"   # srcdir
-      end
-    }
-  end
-
-  # picked up many entries from cvs-1.11.1/src/ignore.c
-  JUNK_FILES = %w( 
-    core RCSLOG tags TAGS .make.state
-    .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
-    *~ *.old *.bak *.BAK *.orig *.rej _$* *$
-
-    *.org *.in .*
-  )
-
-  def existfiles
-    glob_reject(JUNK_FILES, (files_of(curr_srcdir()) | files_of('.')))
-  end
-
-  def hookfiles
-    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
-      %w( config setup install clean ).map {|t| sprintf(fmt, t) }
-    }.flatten
-  end
-
-  def glob_select(pat, ents)
-    re = globs2re([pat])
-    ents.select {|ent| re =~ ent }
-  end
-
-  def glob_reject(pats, ents)
-    re = globs2re(pats)
-    ents.reject {|ent| re =~ ent }
-  end
-
-  GLOB2REGEX = {
-    '.' => '\.',
-    '$' => '\$',
-    '#' => '\#',
-    '*' => '.*'
-  }
-
-  def globs2re(pats)
-    /\A(?:#{
-      pats.map {|pat| pat.gsub(/[\.\$\#\*]/) {|ch| GLOB2REGEX[ch] } }.join('|')
-    })\z/
-  end
-
-  #
-  # TASK test
-  #
-
-  TESTDIR = 'test'
-
-  def exec_test
-    unless File.directory?('test')
-      $stderr.puts 'no test in this package' if verbose?
-      return
-    end
-    $stderr.puts 'Running tests...' if verbose?
-    begin
-      require 'test/unit'
-    rescue LoadError
-      setup_rb_error 'test/unit cannot loaded.  You need Ruby 1.8 or later to invoke this task.'
-    end
-    runner = Test::Unit::AutoRunner.new(true)
-    runner.to_run << TESTDIR
-    runner.run
-  end
-
-  #
-  # TASK clean
-  #
-
-  def exec_clean
-    exec_task_traverse 'clean'
-    rm_f @config.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  alias clean_dir_bin noop
-  alias clean_dir_lib noop
-  alias clean_dir_data noop
-  alias clean_dir_conf noop
-  alias clean_dir_man noop
-
-  def clean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'clean' if File.file?('Makefile')
-  end
-
-  #
-  # TASK distclean
-  #
-
-  def exec_distclean
-    exec_task_traverse 'distclean'
-    rm_f @config.savefile
-    rm_f 'InstalledFiles'
-  end
-
-  alias distclean_dir_bin noop
-  alias distclean_dir_lib noop
-
-  def distclean_dir_ext(rel)
-    return unless extdir?(curr_srcdir())
-    make 'distclean' if File.file?('Makefile')
-  end
-
-  alias distclean_dir_data noop
-  alias distclean_dir_conf noop
-  alias distclean_dir_man noop
-
-  #
-  # Traversing
-  #
-
-  def exec_task_traverse(task)
-    run_hook "pre-#{task}"
-    FILETYPES.each do |type|
-      if type == 'ext' and config('without-ext') == 'yes'
-        $stderr.puts 'skipping ext/* by user option' if verbose?
-        next
-      end
-      traverse task, type, "#{task}_dir_#{type}"
-    end
-    run_hook "post-#{task}"
-  end
-
-  def traverse(task, rel, mid)
-    dive_into(rel) {
-      run_hook "pre-#{task}"
-      __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
-      directories_of(curr_srcdir()).each do |d|
-        traverse task, "#{rel}/#{d}", mid
-      end
-      run_hook "post-#{task}"
-    }
-  end
-
-  def dive_into(rel)
-    return unless File.dir?("#{@srcdir}/#{rel}")
-
-    dir = File.basename(rel)
-    Dir.mkdir dir unless File.dir?(dir)
-    prevdir = Dir.pwd
-    Dir.chdir dir
-    $stderr.puts '---> ' + rel if verbose?
-    @currdir = rel
-    yield
-    Dir.chdir prevdir
-    $stderr.puts '<--- ' + rel if verbose?
-    @currdir = File.dirname(rel)
-  end
-
-  def run_hook(id)
-    path = [ "#{curr_srcdir()}/#{id}",
-             "#{curr_srcdir()}/#{id}.rb" ].detect {|cand| File.file?(cand) }
-    return unless path
-    begin
-      instance_eval File.read(path), path, 1
-    rescue
-      raise if $DEBUG
-      setup_rb_error "hook #{path} failed:\n" + $!.message
-    end
-  end
-
-end   # class Installer
-
-
-class SetupError < StandardError; end
-
-def setup_rb_error(msg)
-  raise SetupError, msg
-end
-
-if $0 == __FILE__
-  begin
-    ToplevelInstaller.invoke
-  rescue SetupError
-    raise if $DEBUG
-    $stderr.puts $!.message
-    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
-    exit 1
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/mime.yaml b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/mime.yaml
deleted file mode 100644
index 6e7bb04..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/mime.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
---- 
-.jpeg: image/jpeg
-.png: image/test
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/mongrel.conf b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/mongrel.conf
deleted file mode 100644
index 3daa23a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/mongrel.conf
+++ /dev/null
@@ -1 +0,0 @@
-uri "/fromconf", :handler => Mongrel::Error404Handler.new("test")
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_cgi_wrapper.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_cgi_wrapper.rb
deleted file mode 100644
index 449f6d0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_cgi_wrapper.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-
-require 'test/testhelp'
-
-class MockHttpRequest
-  attr_reader :body
-
-  def params
-    return { 'REQUEST_METHOD' => 'GET'}
-  end
-end
-
-class CGIWrapperTest < Test::Unit::TestCase
-  
-  def test_set_cookies_output_cookies
-    request = MockHttpRequest.new
-    response = nil # not needed for this test
-    output_headers = {}
-    
-    cgi = Mongrel::CGIWrapper.new(request, response) 
-    session = CGI::Session.new(cgi, 'database_manager' => CGI::Session::MemoryStore)
-    cgi.send_cookies(output_headers)
-    
-    assert(output_headers.has_key?("Set-Cookie"))
-    assert_equal("_session_id="+session.session_id+"; path=", output_headers["Set-Cookie"])
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_command.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_command.rb
deleted file mode 100644
index 3cb9643..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_command.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-class TestCommand < GemPlugin::Plugin "/commands"
-  include Mongrel::Command::Base
-
-  def configure
-    options [
-      ["-e", "--environment ENV", "Rails environment to run as", :@environment, ENV['RAILS_ENV'] || "development"],
-      ['', '--user USER', "User to run as", :@user, nil],
-      ["-d", "--daemonize", "Whether to run in the background or not", :@daemon, false],
-      ["-x", "--test", "Used to let the test run failures", :@test, false],
-    ]
-  end
-
-  def validate
-    valid_dir? ".", "Can't validate current directory."
-    valid_exists? "Rakefile", "Rakefile not there, test is invalid."
-    if @test
-      valid_exist? "BADFILE", "Yeah, badfile"
-      valid_file? "BADFILE", "Not even a file"
-      valid_dir? "BADDIR", "No dir here"
-      valid? false, "Total failure"
-    end
-
-    return @valid
-  end
-
-
-  def run
-    $test_command_ran = true
-  end
-end
-
-class CommandTest < Test::Unit::TestCase
-
-  def setup
-    $test_command_ran = false
-  end
-
-  def teardown
-  end
-
-  def run_cmd(args)
-    Mongrel::Command::Registry.instance.run args
-  end
-
-  def test_run_command
-    redirect_test_io do
-      run_cmd ["testcommand"]
-      assert $test_command_ran, "command didn't run"
-    end
-  end
-
-  def test_command_error
-    redirect_test_io do
-      run_cmd ["crapcommand"]
-    end
-  end
-
-  def test_command_listing
-    redirect_test_io do
-      run_cmd ["help"]
-    end
-  end
-
-  def test_options
-    redirect_test_io do
-      run_cmd ["testcommand","-h"]
-      run_cmd ["testcommand","--help"]
-      run_cmd ["testcommand","-e","test","-d","--user"]
-    end
-  end
-
-  def test_version
-    redirect_test_io do
-      run_cmd ["testcommand", "--version"]
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_conditional.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_conditional.rb
deleted file mode 100644
index cd3ce06..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_conditional.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-include Mongrel
-
-class ConditionalResponseTest < Test::Unit::TestCase
-  def setup
-    @server = HttpServer.new('127.0.0.1', 3501)
-    @server.register('/', Mongrel::DirHandler.new('.'))
-    @server.run
-    
-    @http = Net::HTTP.new(@server.host, @server.port)
-
-    # get the ETag and Last-Modified headers
-    @path = '/README'
-    res = @http.start { |http| http.get(@path) }
-    assert_not_nil @etag = res['ETag']
-    assert_not_nil @last_modified = res['Last-Modified']
-    assert_not_nil @content_length = res['Content-Length']
-  end
-
-  def teardown
-    @server.stop(true)
-  end
-
-  # status should be 304 Not Modified when If-None-Match is the matching ETag
-  def test_not_modified_via_if_none_match
-    assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag
-  end
-
-  # status should be 304 Not Modified when If-Modified-Since is the matching Last-Modified date
-  def test_not_modified_via_if_modified_since
-    assert_status_for_get_and_head Net::HTTPNotModified, 'If-Modified-Since' => @last_modified
-  end
-
-  # status should be 304 Not Modified when If-None-Match is the matching ETag
-  # and If-Modified-Since is the matching Last-Modified date
-  def test_not_modified_via_if_none_match_and_if_modified_since
-    assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag, 'If-Modified-Since' => @last_modified
-  end
-
-  # status should be 200 OK when If-None-Match is invalid
-  def test_invalid_if_none_match
-    assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => 'invalid'
-    assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => 'invalid', 'If-Modified-Since' => @last_modified
-  end
-
-  # status should be 200 OK when If-Modified-Since is invalid
-  def test_invalid_if_modified_since
-    assert_status_for_get_and_head Net::HTTPOK,                           'If-Modified-Since' => 'invalid'
-    assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Modified-Since' => 'invalid'
-  end
-
-  # status should be 304 Not Modified when If-Modified-Since is greater than the Last-Modified header, but less than the system time
-  def test_if_modified_since_greater_than_last_modified
-    sleep 2
-    last_modified_plus_1 = (Time.httpdate(@last_modified) + 1).httpdate
-    assert_status_for_get_and_head Net::HTTPNotModified,                           'If-Modified-Since' => last_modified_plus_1
-    assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag, 'If-Modified-Since' => last_modified_plus_1
-  end
-
-  # status should be 200 OK when If-Modified-Since is less than the Last-Modified header
-  def test_if_modified_since_less_than_last_modified
-    last_modified_minus_1 = (Time.httpdate(@last_modified) - 1).httpdate
-    assert_status_for_get_and_head Net::HTTPOK,                           'If-Modified-Since' => last_modified_minus_1
-    assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Modified-Since' => last_modified_minus_1
-  end
-
-  # status should be 200 OK when If-Modified-Since is a date in the future
-  def test_future_if_modified_since
-    the_future = Time.at(2**31-1).httpdate
-    assert_status_for_get_and_head Net::HTTPOK,                           'If-Modified-Since' => the_future
-    assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Modified-Since' => the_future
-  end
-
-  # status should be 200 OK when If-None-Match is a wildcard
-  def test_wildcard_match
-    assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => '*'
-    assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => '*', 'If-Modified-Since' => @last_modified
-  end
-
-  private
-
-    # assert the response status is correct for GET and HEAD
-    def assert_status_for_get_and_head(response_class, headers = {})
-      %w{ get head }.each do |method|
-        res = @http.send(method, @path, headers)
-        assert_kind_of response_class, res
-        assert_equal @etag, res['ETag']
-        case response_class.to_s
-          when 'Net::HTTPNotModified' then
-            assert_nil res['Last-Modified']
-            assert_nil res['Content-Length']
-          when 'Net::HTTPOK' then
-            assert_equal @last_modified, res['Last-Modified']
-            assert_equal @content_length, res['Content-Length']
-          else
-            fail "Incorrect response class: #{response_class}"
-        end
-      end
-    end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_configurator.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_configurator.rb
deleted file mode 100644
index dd99f00..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_configurator.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-$test_plugin_fired = 0
-
-class TestPlugin < GemPlugin::Plugin "/handlers"
-  include Mongrel::HttpHandlerPlugin
-
-  def process(request, response)
-    $test_plugin_fired += 1
-  end
-end
-
-
-class Sentinel < GemPlugin::Plugin "/handlers"
-  include Mongrel::HttpHandlerPlugin
-
-  def process(request, response)
-    raise "This Sentinel plugin shouldn't run."
-  end
-end
-
-
-class ConfiguratorTest < Test::Unit::TestCase
-
-  def test_base_handler_config
-    @config = nil
-
-    redirect_test_io do
-      @config = Mongrel::Configurator.new :host => "localhost" do
-        listener :port => 4501 do
-          # 2 in front should run, but the sentinel shouldn't since dirhandler processes the request
-          uri "/", :handler => plugin("/handlers/testplugin")
-          uri "/", :handler => plugin("/handlers/testplugin")
-          uri "/", :handler => Mongrel::DirHandler.new(".")
-          uri "/", :handler => plugin("/handlers/testplugin")
-
-          uri "/test", :handler => plugin("/handlers/testplugin")
-          uri "/test", :handler => plugin("/handlers/testplugin")
-          uri "/test", :handler => Mongrel::DirHandler.new(".")
-          uri "/test", :handler => plugin("/handlers/testplugin")
-
-          debug "/"
-          setup_signals
-
-          run_config(File.dirname(__FILE__) + "/../test/mongrel.conf")
-          load_mime_map(File.dirname(__FILE__) + "/../test/mime.yaml")
-
-          run
-        end
-      end
-    end
-
-    # pp @config.listeners.values.first.classifier.routes
-
-    @config.listeners.each do |host,listener| 
-      assert listener.classifier.uris.length == 3, "Wrong number of registered URIs"
-      assert listener.classifier.uris.include?("/"),  "/ not registered"
-      assert listener.classifier.uris.include?("/test"), "/test not registered"
-    end
-
-    res = Net::HTTP.get(URI.parse('http://localhost:4501/test'))
-    assert res != nil, "Didn't get a response"
-    assert $test_plugin_fired == 3, "Test filter plugin didn't run 3 times."
-
-    redirect_test_io do
-      res = Net::HTTP.get(URI.parse('http://localhost:4501/'))
-
-      assert res != nil, "Didn't get a response"
-      assert $test_plugin_fired == 6, "Test filter plugin didn't run 6 times."
-    end
-
-    redirect_test_io do
-      @config.stop(false, true)
-    end
-
-    assert_raise Errno::EBADF, Errno::ECONNREFUSED do
-      res = Net::HTTP.get(URI.parse("http://localhost:4501/"))
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_debug.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_debug.rb
deleted file mode 100644
index 2f7be24..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_debug.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-require 'mongrel/debug'
-
-class MongrelDbgTest < Test::Unit::TestCase
-
-  def test_tracing_to_log
-    FileUtils.rm_rf "log/mongrel_debug"
-
-    MongrelDbg::configure
-    out = StringIO.new
-
-    MongrelDbg::begin_trace(:rails)
-    MongrelDbg::trace(:rails, "Good stuff")
-    MongrelDbg::end_trace(:rails)
-
-    assert File.exist?("log/mongrel_debug"), "Didn't make logging directory"
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_handlers.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_handlers.rb
deleted file mode 100644
index 1005dd0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_handlers.rb
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-class SimpleHandler < Mongrel::HttpHandler
-  def process(request, response)
-    response.start do |head,out|
-      head["Content-Type"] = "text/html"
-      results = "<html><body>Your request:<br /><pre>#{request.params.to_yaml}</pre><a href=\"/files\">View the files.</a></body></html>"
-      out << results
-    end
-  end
-end
-
-class DumbHandler < Mongrel::HttpHandler
-  def process(request, response)
-    response.start do |head,out|
-      head["Content-Type"] = "text/html"
-      out.write("test")
-    end
-  end
-end
-
-def check_status(results, expecting)
-  results.each do |res|
-    assert(res.kind_of?(expecting), "Didn't get #{expecting}, got: #{res.class}")
-  end
-end
-
-class HandlersTest < Test::Unit::TestCase
-
-  def setup
-    stats = Mongrel::StatisticsFilter.new(:sample_rate => 1)
-
-    @config = Mongrel::Configurator.new :host => '127.0.0.1', :port => 9998 do
-      listener do
-        uri "/", :handler => SimpleHandler.new
-        uri "/", :handler => stats
-        uri "/404", :handler => Mongrel::Error404Handler.new("Not found")
-        uri "/dumb", :handler => Mongrel::DeflateFilter.new
-        uri "/dumb", :handler => DumbHandler.new, :in_front => true
-        uri "/files", :handler => Mongrel::DirHandler.new("doc")
-        uri "/files_nodir", :handler => Mongrel::DirHandler.new("doc", listing_allowed=false, index_html="none")
-        uri "/status", :handler => Mongrel::StatusHandler.new(:stats_filter => stats)
-        uri "/relative", :handler => Mongrel::DirHandler.new(nil, listing_allowed=false, index_html="none")
-      end
-    end
-    
-    File.open("/tmp/testfile", 'w') do
-      # Do nothing
-    end
-    
-    @config.run
-  end
-
-  def teardown
-    @config.stop(false, true)
-    File.delete "/tmp/testfile"
-  end
-
-  def test_more_web_server
-    res = hit([ "http://localhost:9998/test",
-          "http://localhost:9998/dumb",
-          "http://localhost:9998/404",
-          "http://localhost:9998/files/rdoc/index.html",
-          "http://localhost:9998/files/rdoc/nothere.html",
-          "http://localhost:9998/files/rdoc/",
-          "http://localhost:9998/files_nodir/rdoc/",
-          "http://localhost:9998/status",
-    ])
-    check_status res, String
-  end
-  
-  def test_nil_dirhandler
-    # Camping uses this internally
-    handler = Mongrel::DirHandler.new(nil, false)  
-    assert handler.can_serve("/tmp/testfile")
-    # Not a bug! A nil @file parameter is the only circumstance under which
-    # we are allowed to serve any existing file
-    assert handler.can_serve("../../../../../../../../../../tmp/testfile")
-  end
-  
-  def test_non_nil_dirhandler_is_not_vulnerable_to_path_traversal
-    # The famous security bug of Mongrel 1.1.2
-    handler = Mongrel::DirHandler.new("/doc", false)
-    assert_nil handler.can_serve("/tmp/testfile")
-    assert_nil handler.can_serve("../../../../../../../../../../tmp/testfile")
-  end
-
-  def test_deflate
-    Net::HTTP.start("localhost", 9998) do |h|
-      # Test that no accept-encoding returns a non-deflated response
-      req = h.get("/dumb")
-      assert(
-        !req['Content-Encoding'] ||
-        !req['Content-Encoding'].include?('deflate'))
-      assert_equal "test", req.body
-
-      req = h.get("/dumb", {"Accept-Encoding" => "deflate"})
-      # -MAX_WBITS stops zlib from looking for a zlib header
-      inflater = Zlib::Inflate.new(-Zlib::MAX_WBITS)
-      assert req['Content-Encoding'].include?('deflate')
-      assert_equal "test", inflater.inflate(req.body)
-    end
-  end
-
-  # TODO: find out why this fails on win32 but nowhere else
-  #def test_posting_fails_dirhandler
-  #  req = Net::HTTP::Post.new("http://localhost:9998/files/rdoc/")
-  #  req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';')
-  #  res = hit [["http://localhost:9998/files/rdoc/",req]]
-  #  check_status res, Net::HTTPNotFound
-  #end
-
-  def test_unregister
-    @config.listeners["127.0.0.1:9998"].unregister("/")
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_http11.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_http11.rb
deleted file mode 100644
index da311af..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_http11.rb
+++ /dev/null
@@ -1,156 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-include Mongrel
-
-class HttpParserTest < Test::Unit::TestCase
-    
-  def test_parse_simple
-    parser = HttpParser.new
-    req = {}
-    http = "GET / HTTP/1.1\r\n\r\n"
-    nread = parser.execute(req, http, 0)
-
-    assert nread == http.length, "Failed to parse the full HTTP request"
-    assert parser.finished?, "Parser didn't finish"
-    assert !parser.error?, "Parser had error"
-    assert nread == parser.nread, "Number read returned from execute does not match"
-
-    assert_equal 'HTTP/1.1', req['SERVER_PROTOCOL']
-    assert_equal '/', req['REQUEST_PATH']
-    assert_equal 'HTTP/1.1', req['HTTP_VERSION']
-    assert_equal '/', req['REQUEST_URI']
-    assert_equal 'CGI/1.2', req['GATEWAY_INTERFACE']
-    assert_equal 'GET', req['REQUEST_METHOD']    
-    assert_nil req['FRAGMENT']
-    assert_nil req['QUERY_STRING']
-    
-    parser.reset
-    assert parser.nread == 0, "Number read after reset should be 0"
-  end
- 
-  def test_parse_dumbfuck_headers
-    parser = HttpParser.new
-    req = {}
-    should_be_good = "GET / HTTP/1.1\r\naaaaaaaaaaaaa:++++++++++\r\n\r\n"
-    nread = parser.execute(req, should_be_good, 0)
-    assert_equal should_be_good.length, nread
-    assert parser.finished?
-    assert !parser.error?
-
-    nasty_pound_header = "GET / HTTP/1.1\r\nX-SSL-Bullshit:   -----BEGIN CERTIFICATE-----\r\n\tMIIFbTCCBFWgAwIBAgICH4cwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVUsx\r\n\tETAPBgNVBAoTCGVTY2llbmNlMRIwEAYDVQQLEwlBdXRob3JpdHkxCzAJBgNVBAMT\r\n\tAkNBMS0wKwYJKoZIhvcNAQkBFh5jYS1vcGVyYXRvckBncmlkLXN1cHBvcnQuYWMu\r\n\tdWswHhcNMDYwNzI3MTQxMzI4WhcNMDcwNzI3MTQxMzI4WjBbMQswCQYDVQQGEwJV\r\n\tSzERMA8GA1UEChMIZVNjaWVuY2UxEzARBgNVBAsTCk1hbmNoZXN0ZXIxCzAJBgNV\r\n\tBAcTmrsogriqMWLAk1DMRcwFQYDVQQDEw5taWNoYWVsIHBhcmQYJKoZIhvcNAQEB\r\n\tBQADggEPADCCAQoCggEBANPEQBgl1IaKdSS1TbhF3hEXSl72G9J+WC/1R64fAcEF\r\n\tW51rEyFYiIeZGx/BVzwXbeBoNUK41OK65sxGuflMo5gLflbwJtHBRIEKAfVVp3YR\r\n\tgW7cMA/s/XKgL1GEC7rQw8lIZT8RApukCGqOVHSi/F1SiFlPDxuDfmdiNzL31+sL\r\n\t0iwHDdNkGjy5pyBSB8Y79dsSJtCW/iaLB0/n8Sj7HgvvZJ7x0fr+RQjYOUUfrePP\r\n\tu2MSpFyf+9BbC/aXgaZuiCvSR+8Snv3xApQY+fULK/xY8h8Ua51iXoQ5jrgu2SqR\r\n\twgA7BUi3G8LFzMBl8FRCDYGUDy7M6QaHXx1ZWIPWNKsCAwEAAaOCAiQwggIgMAwG\r\n\tA1UdEwEB/wQCMAAwEQYJYIZIAYb4QgEBBAQDAgWgMA4GA1UdDwEB/wQEAwID6DAs\r\n\tBglghkgBhvhCAQ0EHxYdVUsgZS1TY2llbmNlIFVzZXIgQ2VydGlmaWNhdGUwHQYD\r\n\tVR0OBBYEFDTt/sf9PeMaZDHkUIldrDYMNTBZMIGaBgNVHSMEgZIwgY+AFAI4qxGj\r\n\tloCLDdMVKwiljjDastqooXSkcjBwMQswCQYDVQQGEwJVSzERMA8GA1UEChMIZVNj\r\n\taWVuY2UxEjAQBgNVBAsTCUF1dGhvcml0eTELMAkGA1UEAxMCQ0ExLTArBgkqhkiG\r\n\t9w0BCQEWHmNhLW9wZXJhdG9yQGdyaWQtc3VwcG9ydC5hYy51a4IBADApBgNVHRIE\r\n\tIjAggR5jYS1vcGVyYXRvckBncmlkLXN1cHBvcnQuYWMudWswGQYDVR0gBBIwEDAO\r\n\tBgwrBgEEAdkvAQEBAQYwPQYJYIZIAYb4QgEEBDAWLmh0dHA6Ly9jYS5ncmlkLXN1\r\n\tcHBvcnQuYWMudmT4sopwqlBWsvcHViL2NybC9jYWNybC5jcmwwPQYJYIZIAYb4QgEDBDAWLmh0\r\n\tdHA6Ly9jYS5ncmlkLXN1cHBvcnQuYWMudWsvcHViL2NybC9jYWNybC5jcmwwPwYD\r\n\tVR0fBDgwNjA0oDKgMIYuaHR0cDovL2NhLmdyaWQt5hYy51ay9wdWIv\r\n\tY3JsL2NhY3JsLmNybDANBgkqhkiG9w0BAQUFAAOCAQEAS/U4iiooBENGW/Hwmmd3\r\n\tXCy6Zrt08YjKCzGNjorT98g8uGsqYjSxv/hmi0qlnlHs+k/3Iobc3LjS5AMYr5L8\r\n\tUO7OSkgFFlLHQyC9JzPfmLCAugvzEbyv4Olnsr8hbxF1MbKZoQxUZtMVu29wjfXk\r\n\thTeApBv7eaKCWpSp7MCbvgzm74izKhu3vlDk9w6qVrxePfGgpKPqfHiOoGhFnbTK\r\n\twTC6o2xq5y0qZ03JonF7OJspEd3I5zKY3E+ov7/ZhW6DqT8UFvsAdjvQbXyhV8Eu\r\n\tYhixw1aKEPzNjNowuIseVogKOLXxWI5vAi5HgXdS0/ES5gDGsABo4fqovUKlgop3\r\n\tRA==\r\n\t-----END CERTIFICATE-----\r\n\r\n"
-    parser = HttpParser.new
-    req = {}
-    #nread = parser.execute(req, nasty_pound_header, 0)
-    #assert_equal nasty_pound_header.length, nread
-    #assert parser.finished?
-    #assert !parser.error?
-  end
-  
-  def test_parse_error
-    parser = HttpParser.new
-    req = {}
-    bad_http = "GET / SsUTF/1.1"
-
-    error = false
-    begin
-      nread = parser.execute(req, bad_http, 0)
-    rescue => details
-      error = true
-    end
-
-    assert error, "failed to throw exception"
-    assert !parser.finished?, "Parser shouldn't be finished"
-    assert parser.error?, "Parser SHOULD have error"
-  end
-
-  def test_fragment_in_uri
-    parser = HttpParser.new
-    req = {}
-    get = "GET /forums/1/topics/2375?page=1#posts-17408 HTTP/1.1\r\n\r\n"
-    assert_nothing_raised do
-      parser.execute(req, get, 0)
-    end
-    assert parser.finished?
-    assert_equal '/forums/1/topics/2375?page=1', req['REQUEST_URI']
-    assert_equal 'posts-17408', req['FRAGMENT']
-  end
-
-  # lame random garbage maker
-  def rand_data(min, max, readable=true)
-    count = min + ((rand(max)+1) *10).to_i
-    res = count.to_s + "/"
-    
-    if readable
-      res << Digest::SHA1.hexdigest(rand(count * 100).to_s) * (count / 40)
-    else
-      res << Digest::SHA1.digest(rand(count * 100).to_s) * (count / 20)
-    end
-
-    return res
-  end
-  
-
-  def test_horrible_queries
-    parser = HttpParser.new
-
-    # then that large header names are caught
-    10.times do |c|
-      get = "GET /#{rand_data(10,120)} HTTP/1.1\r\nX-#{rand_data(1024, 1024+(c*1024))}: Test\r\n\r\n"
-      assert_raises Mongrel::HttpParserError do
-        parser.execute({}, get, 0)
-        parser.reset
-      end
-    end
-
-    # then that large mangled field values are caught
-    10.times do |c|
-      get = "GET /#{rand_data(10,120)} HTTP/1.1\r\nX-Test: #{rand_data(1024, 1024+(c*1024), false)}\r\n\r\n"
-      assert_raises Mongrel::HttpParserError do
-        parser.execute({}, get, 0)
-        parser.reset
-      end
-    end
-
-    # then large headers are rejected too
-    get = "GET /#{rand_data(10,120)} HTTP/1.1\r\n"
-    get << "X-Test: test\r\n" * (80 * 1024)
-    assert_raises Mongrel::HttpParserError do
-      parser.execute({}, get, 0)
-      parser.reset
-    end
-
-    # finally just that random garbage gets blocked all the time
-    10.times do |c|
-      get = "GET #{rand_data(1024, 1024+(c*1024), false)} #{rand_data(1024, 1024+(c*1024), false)}\r\n\r\n"
-      assert_raises Mongrel::HttpParserError do
-        parser.execute({}, get, 0)
-        parser.reset
-      end
-    end
-
-  end
-
-
-
-  def test_query_parse
-    res = HttpRequest.query_parse("zed=1&frank=#{HttpRequest.escape('&&& ')}")
-    assert res["zed"], "didn't get the request right"
-    assert res["frank"], "no frank"
-    assert_equal "1", res["zed"], "wrong result"
-    assert_equal "&&& ", HttpRequest.unescape(res["frank"]), "wrong result"
-
-    res = HttpRequest.query_parse("zed=1&zed=2&zed=3&frank=11;zed=45")
-    assert res["zed"], "didn't get the request right"
-    assert res["frank"], "no frank"
-    assert_equal 4,res["zed"].length, "wrong number for zed"
-    assert_equal "11",res["frank"], "wrong number for frank"
-  end
-  
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_redirect_handler.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_redirect_handler.rb
deleted file mode 100644
index 2e03d48..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_redirect_handler.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-class RedirectHandlerTest < Test::Unit::TestCase
-
-  def setup
-    redirect_test_io do
-      @server = Mongrel::HttpServer.new('127.0.0.1', 9998)
-    end
-    @server.run
-    @client = Net::HTTP.new('127.0.0.1', 9998)
-  end
-
-  def teardown
-    @server.stop(true)
-  end
-
-  def test_simple_redirect
-    tester = Mongrel::RedirectHandler.new('/yo')
-    @server.register("/test", tester)
-
-    sleep(1)
-    res = @client.request_get('/test')
-    assert res != nil, "Didn't get a response"
-    assert_equal ['/yo'], res.get_fields('Location')
-  end
-
-  def test_rewrite
-    tester = Mongrel::RedirectHandler.new(/(\w+)/, '+\1+')
-    @server.register("/test", tester)
-
-    sleep(1)
-    res = @client.request_get('/test/something')
-    assert_equal ['/+test+/+something+'], res.get_fields('Location')
-  end
-
-end
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_request_progress.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_request_progress.rb
deleted file mode 100644
index ba21c27..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_request_progress.rb
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-class UploadBeginHandler < Mongrel::HttpHandler
-  attr_reader :request_began, :request_progressed, :request_processed
-
-  def initialize
-    @request_notify = true
-  end
-
-  def reset
-    @request_began = false
-    @request_progressed = false
-    @request_processed = false
-  end
-
-  def request_begins(params)
-    @request_began = true
-  end
-
-  def request_progress(params,len,total)
-    @request_progressed = true
-  end
-
-  def process(request, response)
-    @request_processed = true
-    response.start do |head,body|
-      body.write("test")
-    end
-  end
-
-end
-
-class RequestProgressTest < Test::Unit::TestCase
-  def setup
-    redirect_test_io do
-      @server = Mongrel::HttpServer.new("127.0.0.1", 9998)
-    end
-    @handler = UploadBeginHandler.new
-    @server.register("/upload", @handler)
-    @server.run
-  end
-
-  def teardown
-    @server.stop(true)
-  end
-
-  def test_begin_end_progress
-    Net::HTTP.get("localhost", "/upload", 9998)
-    assert @handler.request_began
-    assert @handler.request_progressed
-    assert @handler.request_processed
-  end
-
-  def call_and_assert_handlers_in_turn(handlers)
-    # reset all handlers
-    handlers.each { |h| h.reset }
-
-    # make the call
-    Net::HTTP.get("localhost", "/upload", 9998)
-
-    # assert that each one was fired
-    handlers.each { |h|
-      assert h.request_began && h.request_progressed && h.request_processed,
-        "Callbacks NOT fired for #{h}"
-    }
-  end
-
-  def test_more_than_one_begin_end_progress
-    handlers = [@handler]
-
-    second = UploadBeginHandler.new
-    @server.register("/upload", second)
-    handlers << second
-    call_and_assert_handlers_in_turn(handlers)
-
-    # check three handlers
-    third = UploadBeginHandler.new
-    @server.register("/upload", third)
-    handlers << third
-    call_and_assert_handlers_in_turn(handlers)
-
-    # remove handlers to make sure they've all gone away
-    @server.unregister("/upload")
-    handlers.each { |h| h.reset }
-    Net::HTTP.get("localhost", "/upload", 9998)
-    handlers.each { |h|
-      assert !h.request_began && !h.request_progressed && !h.request_processed
-    }
-
-    # re-register upload to the state before this test
-    @server.register("/upload", @handler)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_response.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_response.rb
deleted file mode 100644
index 123ed98..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_response.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-include Mongrel
-
-class ResponseTest < Test::Unit::TestCase
-  
-  def test_response_headers
-    out = StringIO.new
-    resp = HttpResponse.new(out)
-    resp.status = 200
-    resp.header["Accept"] = "text/plain"
-    resp.header["X-Whatever"] = "stuff"
-    resp.body.write("test")
-    resp.finished
-
-    assert out.length > 0, "output didn't have data"
-  end
-
-  def test_response_200
-    io = StringIO.new
-    resp = HttpResponse.new(io)
-    resp.start do |head,out|
-      head["Accept"] = "text/plain"
-      out.write("tested")
-      out.write("hello!")
-    end
-
-    resp.finished
-    assert io.length > 0, "output didn't have data"
-  end
-
-  def test_response_duplicate_header_squash
-    io = StringIO.new
-    resp = HttpResponse.new(io)
-    resp.start do |head,out|
-      head["Content-Length"] = 30
-      head["Content-Length"] = 0
-    end
-
-    resp.finished
-
-    assert_equal io.length, 95, "too much output"
-  end
-
-
-  def test_response_some_duplicates_allowed
-    allowed_duplicates = ["Set-Cookie", "Set-Cookie2", "Warning", "WWW-Authenticate"]
-    io = StringIO.new
-    resp = HttpResponse.new(io)
-    resp.start do |head,out|
-      allowed_duplicates.each do |dup|
-        10.times do |i|
-          head[dup] = i
-        end
-      end
-    end
-
-    resp.finished
-
-    assert_equal io.length, 734, "wrong amount of output"
-  end
-
-  def test_response_404
-    io = StringIO.new
-
-    resp = HttpResponse.new(io)
-    resp.start(404) do |head,out|
-      head['Accept'] = "text/plain"
-      out.write("NOT FOUND")
-    end
-
-    resp.finished
-    assert io.length > 0, "output didn't have data"
-  end
-
-  def test_response_file
-    contents = "PLAIN TEXT\r\nCONTENTS\r\n"
-    require 'tempfile'
-    tmpf = Tempfile.new("test_response_file")
-    tmpf.binmode
-    tmpf.write(contents)
-    tmpf.rewind
-
-    io = StringIO.new
-    resp = HttpResponse.new(io)
-    resp.start(200) do |head,out|
-      head['Content-Type'] = 'text/plain'
-      resp.send_header
-      resp.send_file(tmpf.path)
-    end
-    io.rewind
-    tmpf.close
-    
-    assert io.length > 0, "output didn't have data"
-    assert io.read[-contents.length..-1] == contents, "output doesn't end with file payload"
-  end
-
-  def test_response_with_custom_reason
-    reason = "You made a bad request"
-    io = StringIO.new
-    resp = HttpResponse.new(io)
-    resp.start(400, false, reason) { |head,out| }
-    resp.finished
-
-    io.rewind
-    assert_match(/.* #{reason}$/, io.readline.chomp, "wrong custom reason phrase")
-  end
-
-  def test_response_with_default_reason
-    code = 400
-    io = StringIO.new
-    resp = HttpResponse.new(io)
-    resp.start(code) { |head,out| }
-    resp.finished
-
-    io.rewind
-    assert_match(/.* #{HTTP_STATUS_CODES[code]}$/, io.readline.chomp, "wrong default reason phrase")
-  end
-
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_stats.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_stats.rb
deleted file mode 100644
index 404870a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_stats.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-class StatsTest < Test::Unit::TestCase
-
-  def test_sampling_speed
-    out = StringIO.new
-
-    s = Mongrel::Stats.new("test")
-    t = Mongrel::Stats.new("time")
-
-    100.times { s.sample(rand(20)); t.tick }
-
-    s.dump("FIRST", out)
-    t.dump("FIRST", out)
-    
-    old_mean = s.mean
-    old_sd = s.sd
-
-    s.reset
-    t.reset
-    100.times { s.sample(rand(30)); t.tick }
-    
-    s.dump("SECOND", out)
-    t.dump("SECOND", out)
-    assert_not_equal old_mean, s.mean
-    assert_not_equal old_mean, s.sd    
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_uriclassifier.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_uriclassifier.rb
deleted file mode 100644
index 28af72c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_uriclassifier.rb
+++ /dev/null
@@ -1,261 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-include Mongrel
-
-class URIClassifierTest < Test::Unit::TestCase
-
-  def test_uri_finding
-    uri_classifier = URIClassifier.new
-    uri_classifier.register("/test", 1)
-    
-    script_name, path_info, value = uri_classifier.resolve("/test")
-    assert_equal 1, value
-    assert_equal "/test", script_name
-  end
-  
-  def test_root_handler_only
-    uri_classifier = URIClassifier.new
-    uri_classifier.register("/", 1)
-    
-    script_name, path_info, value = uri_classifier.resolve("/test")
-    assert_equal 1, value
-    assert_equal "/", script_name 
-    assert_equal "/test", path_info
-  end
-
-  def test_uri_prefix_ops
-    test = "/pre/fix/test"
-    prefix = "/pre"
-
-    uri_classifier = URIClassifier.new
-    uri_classifier.register(prefix,1)
-
-    script_name, path_info, value = uri_classifier.resolve(prefix)
-    script_name, path_info, value = uri_classifier.resolve(test)
-    assert_equal 1, value
-    assert_equal prefix, script_name
-    assert_equal test[script_name.length .. -1], path_info
-
-    assert uri_classifier.inspect
-    assert_equal prefix, uri_classifier.uris[0]
-  end
-
-  def test_not_finding
-    test = "/cant/find/me"
-    uri_classifier = URIClassifier.new
-    uri_classifier.register(test, 1)
-
-    script_name, path_info, value = uri_classifier.resolve("/nope/not/here")
-    assert_nil script_name
-    assert_nil path_info
-    assert_nil value
-  end
-
-  def test_exceptions
-    uri_classifier = URIClassifier.new
-
-    uri_classifier.register("/test", 1)
-    
-    failed = false
-    begin 
-      uri_classifier.register("/test", 1)
-    rescue => e
-      failed = true
-    end
-
-    assert failed
-
-    failed = false
-    begin
-      uri_classifier.register("", 1)
-    rescue => e
-      failed = true
-    end
-
-    assert failed
-  end
-
-
-  def test_register_unregister
-    uri_classifier = URIClassifier.new
-    
-    100.times do
-      uri_classifier.register("/stuff", 1)
-      value = uri_classifier.unregister("/stuff")
-      assert_equal 1, value
-    end
-
-    uri_classifier.register("/things",1)
-    script_name, path_info, value = uri_classifier.resolve("/things")
-    assert_equal 1, value
-
-    uri_classifier.unregister("/things")
-    script_name, path_info, value = uri_classifier.resolve("/things")
-    assert_nil value
-
-  end
-
-
-  def test_uri_branching
-    uri_classifier = URIClassifier.new
-    uri_classifier.register("/test", 1)
-    uri_classifier.register("/test/this",2)
-  
-    script_name, path_info, handler = uri_classifier.resolve("/test")
-    script_name, path_info, handler = uri_classifier.resolve("/test/that")
-    assert_equal "/test", script_name, "failed to properly find script off branch portion of uri"
-    assert_equal "/that", path_info
-    assert_equal 1, handler, "wrong result for branching uri"
-  end
-
-  def test_all_prefixing
-    tests = ["/test","/test/that","/test/this"]
-    uri = "/test/this/that"
-    uri_classifier = URIClassifier.new
-    
-    current = ""
-    uri.each_byte do |c|
-      current << c.chr
-      uri_classifier.register(current, c)
-    end
-    
-
-    # Try to resolve everything with no asserts as a fuzzing
-    tests.each do |prefix|
-      current = ""
-      prefix.each_byte do |c|
-        current << c.chr
-        script_name, path_info, handler = uri_classifier.resolve(current)
-        assert script_name
-        assert path_info
-        assert handler
-      end
-    end
-
-    # Assert that we find stuff
-    tests.each do |t|
-      script_name, path_info, handler = uri_classifier.resolve(t)
-      assert handler
-    end
-
-    # Assert we don't find stuff
-    script_name, path_info, handler = uri_classifier.resolve("chicken")
-    assert_nil handler
-    assert_nil script_name
-    assert_nil path_info
-  end
-
-
-  # Verifies that a root mounted ("/") handler resolves
-  # such that path info matches the original URI.
-  # This is needed to accommodate real usage of handlers.
-  def test_root_mounted
-    uri_classifier = URIClassifier.new
-    root = "/"
-    path = "/this/is/a/test"
-
-    uri_classifier.register(root, 1)
-
-    script_name, path_info, handler = uri_classifier.resolve(root)
-    assert_equal 1, handler
-    assert_equal root, path_info
-    assert_equal root, script_name
-
-    script_name, path_info, handler = uri_classifier.resolve(path)
-    assert_equal path, path_info
-    assert_equal root, script_name
-    assert_equal 1, handler
-  end
-
-  # Verifies that a root mounted ("/") handler
-  # is the default point, doesn't matter the order we use
-  # to register the URIs
-  def test_classifier_order
-    tests = ["/before", "/way_past"]
-    root = "/"
-    path = "/path"
-
-    uri_classifier = URIClassifier.new
-    uri_classifier.register(path, 1)
-    uri_classifier.register(root, 2)
-
-    tests.each do |uri|
-      script_name, path_info, handler = uri_classifier.resolve(uri)
-      assert_equal root, script_name, "#{uri} did not resolve to #{root}"
-      assert_equal uri, path_info
-      assert_equal 2, handler
-    end
-  end
-  
-  if ENV['BENCHMARK']
-    # Eventually we will have a suite of benchmarks instead of lamely installing a test
-    
-    def test_benchmark    
-
-      # This URI set should favor a TST. Both versions increase linearly until you hit 14 
-      # URIs, then the TST flattens out.
-      @uris = %w(
-        / 
-        /dag /dig /digbark /dog /dogbark /dog/bark /dug /dugbarking /puppy 
-        /c /cat /cat/tree /cat/tree/mulberry /cats /cot /cot/tree/mulberry /kitty /kittycat
-#        /eag /eig /eigbark /eog /eogbark /eog/bark /eug /eugbarking /iuppy 
-#        /f /fat /fat/tree /fat/tree/mulberry /fats /fot /fot/tree/mulberry /jitty /jittyfat
-#        /gag /gig /gigbark /gog /gogbark /gog/bark /gug /gugbarking /kuppy 
-#        /h /hat /hat/tree /hat/tree/mulberry /hats /hot /hot/tree/mulberry /litty /littyhat
-#        /ceag /ceig /ceigbark /ceog /ceogbark /ceog/cbark /ceug /ceugbarking /ciuppy 
-#        /cf /cfat /cfat/ctree /cfat/ctree/cmulberry /cfats /cfot /cfot/ctree/cmulberry /cjitty /cjittyfat
-#        /cgag /cgig /cgigbark /cgog /cgogbark /cgog/cbark /cgug /cgugbarking /ckuppy 
-#        /ch /chat /chat/ctree /chat/ctree/cmulberry /chats /chot /chot/ctree/cmulberry /citty /cittyhat
-      )
-      
-      @requests = %w(
-        /
-        /dig
-        /digging
-        /dogging
-        /dogbarking/
-        /puppy/barking
-        /c
-        /cat
-        /cat/shrub
-        /cat/tree
-        /cat/tree/maple
-        /cat/tree/mulberry/tree
-        /cat/tree/oak
-        /cats/
-        /cats/tree
-        /cod
-        /zebra
-      )
-    
-      @classifier = URIClassifier.new
-      @uris.each do |uri|
-        @classifier.register(uri, 1)
-      end
-      
-      puts "#{@uris.size} URIs / #{@requests.size * 10000} requests"
-  
-      Benchmark.bm do |x|
-        x.report do
-  #        require 'ruby-prof'
-  #        profile = RubyProf.profile do
-            10000.times do
-              @requests.each do |request|
-                @classifier.resolve(request)
-              end
-            end
-  #        end
-  #        File.open("profile.html", 'w') { |file| RubyProf::GraphHtmlPrinter.new(profile).print(file, 0) }
-        end
-      end          
-    end
-  end
-  
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_ws.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_ws.rb
deleted file mode 100644
index d239e18..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/test_ws.rb
+++ /dev/null
@@ -1,115 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-require 'test/testhelp'
-
-include Mongrel
-
-class TestHandler < Mongrel::HttpHandler
-  attr_reader :ran_test
-
-  def process(request, response)
-    @ran_test = true
-    response.socket.write("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nhello!\n")
-  end
-end
-
-
-class WebServerTest < Test::Unit::TestCase
-
-  def setup
-    @valid_request = "GET / HTTP/1.1\r\nHost: www.zedshaw.com\r\nContent-Type: text/plain\r\n\r\n"
-    
-    redirect_test_io do
-      # We set num_processors=1 so that we can test the reaping code
-      @server = HttpServer.new("127.0.0.1", 9998, num_processors=1)
-    end
-    
-    @tester = TestHandler.new
-    @server.register("/test", @tester)
-    redirect_test_io do
-      @server.run 
-    end
-  end
-
-  def teardown
-    redirect_test_io do
-      @server.stop(true)
-    end
-  end
-
-  def test_simple_server
-    hit(['http://localhost:9998/test'])
-    assert @tester.ran_test, "Handler didn't really run"
-  end
-
-
-  def do_test(string, chunk, close_after=nil, shutdown_delay=0)
-    # Do not use instance variables here, because it needs to be thread safe
-    socket = TCPSocket.new("127.0.0.1", 9998);
-    request = StringIO.new(string)
-    chunks_out = 0
-
-    while data = request.read(chunk)
-      chunks_out += socket.write(data)
-      socket.flush
-      sleep 0.2
-      if close_after and chunks_out > close_after
-        socket.close
-        sleep 1
-      end
-    end
-    sleep(shutdown_delay)
-    socket.write(" ") # Some platforms only raise the exception on attempted write
-    socket.flush
-  end
-
-  def test_trickle_attack
-    do_test(@valid_request, 3)
-  end
-
-  def test_close_client
-    assert_raises IOError do
-      do_test(@valid_request, 10, 20)
-    end
-  end
-
-  def test_bad_client
-    redirect_test_io do
-      do_test("GET /test HTTP/BAD", 3)
-    end
-  end
-
-  def test_header_is_too_long
-    redirect_test_io do
-      long = "GET /test HTTP/1.1\r\n" + ("X-Big: stuff\r\n" * 15000) + "\r\n"
-      assert_raises Errno::ECONNRESET, Errno::EPIPE, Errno::ECONNABORTED, Errno::EINVAL, IOError do
-        do_test(long, long.length/2, 10)
-      end
-    end
-  end
-
-  def test_num_processors_overload
-    redirect_test_io do
-      assert_raises Errno::ECONNRESET, Errno::EPIPE, Errno::ECONNABORTED, Errno::EINVAL, IOError do
-        tests = [
-          Thread.new { do_test(@valid_request, 1) },
-          Thread.new { do_test(@valid_request, 10) },
-        ]
-
-        tests.each {|t| t.join}
-      end
-    end
-  end
-
-  def test_file_streamed_request
-    body = "a" * (Mongrel::Const::MAX_BODY * 2)
-    long = "GET /test HTTP/1.1\r\nContent-length: #{body.length}\r\n\r\n" + body
-    do_test(long, Mongrel::Const::CHUNK_SIZE * 2 -400)
-  end
-
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/testhelp.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/testhelp.rb
deleted file mode 100644
index 42ead2c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/test/testhelp.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2005 Zed A. Shaw 
-# You can redistribute it and/or modify it under the same terms as Ruby.
-#
-# Additional work donated by contributors.  See http://mongrel.rubyforge.org/attributions.html 
-# for more information.
-
-
-HERE = File.dirname(__FILE__)
-%w(lib ext bin test).each do |dir| 
-  $LOAD_PATH.unshift "#{HERE}/../#{dir}"
-end
-
-require 'rubygems'
-require 'test/unit'
-require 'net/http'
-require 'timeout'
-require 'cgi/session'
-require 'fileutils'
-require 'benchmark'
-require 'digest/sha1'
-require 'uri'
-require 'stringio'
-require 'pp'
-
-require 'mongrel'
-require 'mongrel/stats'
-
-if ENV['DEBUG']
-  require 'ruby-debug'
-  Debugger.start
-end
-
-def redirect_test_io
-  orig_err = STDERR.dup
-  orig_out = STDOUT.dup
-  STDERR.reopen("test_stderr.log")
-  STDOUT.reopen("test_stdout.log")
-
-  begin
-    yield
-  ensure
-    STDERR.reopen(orig_err)
-    STDOUT.reopen(orig_out)
-  end
-end
-    
-# Either takes a string to do a get request against, or a tuple of [URI, HTTP] where
-# HTTP is some kind of Net::HTTP request object (POST, HEAD, etc.)
-def hit(uris)
-  results = []
-  uris.each do |u|
-    res = nil
-
-    if u.kind_of? String
-      res = Net::HTTP.get(URI.parse(u))
-    else
-      url = URI.parse(u[0])
-      res = Net::HTTP.new(url.host, url.port).start {|h| h.request(u[1]) }
-    end
-
-    assert res != nil, "Didn't get a response: #{u}"
-    results << res
-  end
-
-  return results
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/tools/trickletest.rb b/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/tools/trickletest.rb
deleted file mode 100644
index e19ed71..0000000
--- a/spec10/public/webrat/test_app/gems/gems/mongrel-1.1.5/tools/trickletest.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require 'socket'
-require 'stringio'
-
-def do_test(st, chunk)
-  s = TCPSocket.new('127.0.0.1',ARGV[0].to_i);
-  req = StringIO.new(st)
-  nout = 0
-  randstop = rand(st.length / 10)
-  STDERR.puts "stopping after: #{randstop}"
-
-  begin
-    while data = req.read(chunk)
-      nout += s.write(data)
-      s.flush
-      sleep 0.1
-      if nout > randstop
-        STDERR.puts "BANG! after #{nout} bytes."
-        break
-      end
-    end
-  rescue Object => e
-    STDERR.puts "ERROR: #{e}"
-  ensure
-    s.close
-  end
-end
-
-content = "-" * (1024 * 240)
-st = "GET / HTTP/1.1\r\nHost: www.zedshaw.com\r\nContent-Type: text/plain\r\nContent-Length: #{content.length}\r\n\r\n#{content}"
-
-puts "length: #{content.length}"
-
-threads = []
-ARGV[1].to_i.times do 
-  t = Thread.new do
-    size = 100
-    puts ">>>> #{size} sized chunks"
-    do_test(st, size)
-  end
-
-  t.abort_on_exception = true
-  threads << t
-end
-
-threads.each {|t|  t.join}
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/AUTHORS b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/AUTHORS
deleted file mode 100644
index dc0203d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/AUTHORS
+++ /dev/null
@@ -1,8 +0,0 @@
-* Christian Neukirchen <chneukirchen at gmail.com>
-* HTTP authentication: Tim Fletcher <twoggle at gmail.com>
-* Cookie sessions, Static handler: Luc Heinrich <luc at honk-honk.com>
-* Pool sessions, OpenID authentication: blink <blinketje at gmail.com>
-* Rack::Deflater: Christoffer Sawicki <christoffer.sawicki at gmail.com>
-* LiteSpeed handler: Adrian Madrid
-* SCGI handler: Jeremy Evans
-* Official Logo: Armin Ronacher
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/COPYING b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/COPYING
deleted file mode 100644
index 8ed138b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/COPYING
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright (c) 2007 Christian Neukirchen <purl.org/net/chneukirchen>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/KNOWN-ISSUES b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/KNOWN-ISSUES
deleted file mode 100644
index 790199b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/KNOWN-ISSUES
+++ /dev/null
@@ -1,18 +0,0 @@
-= Known issues with Rack and Web servers
-
-* Lighttpd sets wrong SCRIPT_NAME and PATH_INFO if you mount your
-  FastCGI app at "/".  This can be fixed by using this middleware:
-
-    class LighttpdScriptNameFix
-      def initialize(app)
-        @app = app
-      end
-
-      def call(env)
-        env["PATH_INFO"] = env["SCRIPT_NAME"].to_s + env["PATH_INFO"].to_s
-        env["SCRIPT_NAME"] = ""
-        @app.call(env)
-      end
-    end
-
-  Of course, use this only when your app runs at "/".
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/RDOX b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/RDOX
deleted file mode 100644
index cf5c368..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/RDOX
+++ /dev/null
@@ -1,265 +0,0 @@
-
-== Rack::Auth::Basic
-* should challenge correctly when no credentials are specified
-* should rechallenge if incorrect credentials are specified
-* should return application output if correct credentials are specified
-* should return 400 Bad Request if different auth scheme used
-
-== Rack::Auth::Digest::MD5
-* should challenge when no credentials are specified
-* should return application output if correct credentials given
-* should return application output if correct credentials given (hashed passwords)
-* should rechallenge if incorrect username given
-* should rechallenge if incorrect password given
-* should rechallenge with stale parameter if nonce is stale
-* should return 400 Bad Request if incorrect qop given
-* should return 400 Bad Request if incorrect uri given
-* should return 400 Bad Request if different auth scheme used
-
-== Rack::Auth::OpenID
-* realm uri should be absolute and have a path
-* uri options should be absolute
-* return_to should be absolute and be under the realm
-* extensions should be a module
-* extensions should have required constants defined
-* extensions should have Request and Response defined and inherit from OpenID::Extension
-* extensions should have NS_URI defined and be a string of an absolute http uri
-
-== Rack::Builder
-* chains apps by default
-* has implicit #to_app
-* supports blocks on use
-
-== Rack::Adapter::Camping
-* works with GET
-* works with POST
-
-== Rack::Cascade
-* should dispatch onward on 404 by default
-* should dispatch onward on whatever is passed
-* should fail if empty
-* should append new app
-
-== Rack::Handler::CGI
-* startup (empty)
-* should respond
-* should be a lighttpd
-* should have rack headers
-* should have CGI headers on GET
-* should have CGI headers on POST
-* should support HTTP auth
-* should set status
-* shutdown
-
-== Rack::CommonLogger
-* should log to rack.errors by default
-* should log to anything with <<
-
-== Rack::Deflater
-* should be able to deflate bodies that respond to each
-* should be able to deflate String bodies
-* should be able to gzip bodies that respond to each
-* should be able to fallback to no deflation
-* should handle the lack of an acceptable encoding
-
-== Rack::Directory
-* serves directory indices
-* passes to app if file found
-* serves uri with URL encoded filenames
-* does not allow directory traversal
-* 404s if it can't find the file
-
-== Rack::Handler::FastCGI
-* startup (empty)
-* should respond
-* should be a lighttpd
-* should have rack headers
-* should have CGI headers on GET
-* should have CGI headers on POST
-* should support HTTP auth
-* should set status
-* shutdown
-
-== Rack::File
-* serves files
-* sets Last-Modified header
-* serves files with URL encoded filenames
-* does not allow directory traversal
-* 404s if it can't find the file
-
-== Rack::Handler
-* has registered default handlers
-* should get unregistered handler by name
-* should register custom handler
-
-== Rack::Lint
-* passes valid request
-* notices fatal errors
-* notices environment errors
-* notices input errors
-* notices error errors
-* notices status errors
-* notices header errors
-* notices content-type errors
-* notices body errors
-* notices input handling errors
-* notices error handling errors
-
-== Rack::Lobster::LambdaLobster
-* should be a single lambda
-* should look like a lobster
-* should be flippable
-
-== Rack::Lobster
-* should look like a lobster
-* should be flippable
-* should provide crashing for testing purposes
-
-== Rack::MockRequest
-* should return a MockResponse
-* should be able to only return the environment
-* should provide sensible defaults
-* should allow GET/POST/PUT/DELETE
-* should allow posting
-* should use all parts of an URL
-* should behave valid according to the Rack spec
-
-== Rack::MockResponse
-* should provide access to the HTTP status
-* should provide access to the HTTP headers
-* should provide access to the HTTP body
-* should provide access to the Rack errors
-* should optionally make Rack errors fatal
-
-== Rack::Handler::Mongrel
-* should respond
-* should be a Mongrel
-* should have rack headers
-* should have CGI headers on GET
-* should have CGI headers on POST
-* should support HTTP auth
-* should set status
-* should provide a .run
-* should provide a .run that maps a hash
-* should provide a .run that maps a urlmap
-* should provide a .run that maps a urlmap restricting by host
-
-== Rack::Recursive
-* should allow for subrequests
-* should raise error on requests not below the app
-* should support forwarding
-
-== Rack::Request
-* wraps the rack variables
-* can figure out the correct host
-* can parse the query string
-* can parse POST data
-* can parse POST data with explicit content type
-* does not parse POST data when media type is not form-data
-* can get value by key from params with #[]
-* can set value to key on params with #[]=
-* values_at answers values by keys in order given
-* referrer should be extracted correct
-* can cache, but invalidates the cache
-* can figure out if called via XHR
-* can parse cookies
-* parses cookies according to RFC 2109
-* provides setters
-* provides the original env
-* can restore the URL
-* can restore the full path
-* can handle multiple media type parameters
-* can parse multipart form data
-* can parse big multipart form data
-* can detect invalid multipart form data
-* should work around buggy 1.8.* Tempfile equality
-* does conform to the Rack spec
-* should parse Accept-Encoding correctly
-
-== Rack::Response
-* has sensible default values
-* can be written to
-* can set and read headers
-* can set cookies
-* formats the Cookie expiration date accordingly to RFC 2109
-* can delete cookies
-* has a useful constructor
-* has a constructor that can take a block
-* doesn't return invalid responses
-* knows if it's empty
-* should provide access to the HTTP status
-* should provide access to the HTTP headers
-
-== Rack::Session::Cookie
-* creates a new cookie
-* loads from a cookie
-* survives broken cookies
-* barks on too big cookies
-
-== Rack::Session::Memcache
-* startup (empty)
-* faults on no connection
-* creates a new cookie
-* determines session from a cookie
-* survives broken cookies
-* maintains freshness
-* multithread: should cleanly merge sessions
-* shutdown
-
-== Rack::Session::Pool
-* creates a new cookie
-* determines session from a cookie
-* survives broken cookies
-* maintains freshness
-* multithread: should merge sessions
-
-== Rack::ShowExceptions
-* catches exceptions
-
-== Rack::ShowStatus
-* should provide a default status message
-* should let the app provide additional information
-* should not replace existing messages
-* should pass on original headers
-* should replace existing messages if there is detail
-
-== Rack::Static
-* serves files
-* 404s if url root is known but it can't find the file
-* calls down the chain if url root is not known
-
-== Rack::URLMap
-* dispatches paths correctly
-* dispatches hosts correctly
-* should be nestable
-* should route root apps correctly
-
-== Rack::Utils
-* should escape correctly
-* should unescape correctly
-* should parse query strings correctly
-* should build query strings correctly
-* should figure out which encodings are acceptable
-
-== Rack::Utils::HeaderHash
-* should capitalize on all accesses
-* should capitalize correctly
-* should be converted to real Hash
-
-== Rack::Utils::Context
-* should perform checks on both arguments
-* should set context correctly
-* should alter app on recontexting
-* should run different apps
-
-== Rack::Handler::WEBrick
-* should respond
-* should be a WEBrick
-* should have rack headers
-* should have CGI headers on GET
-* should have CGI headers on POST
-* should support HTTP auth
-* should set status
-* should provide a .run
-
-197 specifications, 3 empty (886 requirements), 0 failures
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/README b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/README
deleted file mode 100644
index 200db82..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/README
+++ /dev/null
@@ -1,287 +0,0 @@
-= Rack, a modular Ruby webserver interface
-
-Rack provides a minimal, modular and adaptable interface for developing
-web applications in Ruby.  By wrapping HTTP requests and responses in
-the simplest way possible, it unifies and distills the API for web
-servers, web frameworks, and software in between (the so-called
-middleware) into a single method call.
-
-The exact details of this are described in the Rack specification,
-which all Rack applications should conform to.
-
-== Future specification changes
-
-PLEASE NOTE: In versions of Rack LATER than 0.4, the following
-changes will be commited to the Rack specification:
-
-* 1xx, 204 and 304 status codes MUST not contain a Content-Type.
-* A valid Content-Length header MUST be provided for non 1xx, 204 and 304
-  responses with a Transfer-Encoding of "identity" (default).
-  The Content-Length MUST be the same as the sum of the byte-sizes of
-  the chunks.
-* The REQUEST_METHOD may be any HTTP token.
-
-Internal Rack modules have been updated to follow this behavior, but
-the Rack 0.4 Lint does NOT check it yet for compatibility reasons.
-Please update your libraries accordingly.
-
-== Supported web servers
-
-The included *handlers* connect all kinds of web servers to Rack:
-* Mongrel
-* EventedMongrel
-* WEBrick
-* FCGI
-* CGI
-* SCGI
-* LiteSpeed
-
-These web servers include Rack handlers in their distributions:
-* Ebb
-* Fuzed
-* Phusion Passenger (which is mod_rack for Apache)
-* Thin
-
-Any valid Rack app will run the same on all these handlers, without
-changing anything.
-
-== Supported web frameworks
-
-The included *adapters* connect Rack with existing Ruby web frameworks:
-* Camping
-
-These frameworks include Rack adapters in their distributions:
-* Coset
-* Halcyon
-* Mack
-* Maveric
-* Merb
-* Racktools::SimpleApplication
-* Ramaze
-* Sinatra
-* Vintage
-* Waves
-
-Ruby on Rails can be run with the adapter included with Thin, which
-will be merged into a later Rack version.
-
-Current links to these projects can be found at
-http://ramaze.net/#other-frameworks
-
-== Available middleware
-
-Between the server and the framework, Rack can be customized to your
-applications needs using middleware, for example:
-* Rack::URLMap, to route to multiple applications inside the same process.
-* Rack::CommonLogger, for creating Apache-style logfiles.
-* Rack::ShowException, for catching unhandled exceptions and
-  presenting them in a nice and helpful way with clickable backtrace.
-* Rack::File, for serving static files.
-* ...many others!
-
-All these components use the same interface, which is described in
-detail in the Rack specification.  These optional components can be
-used in any way you wish.
-
-== Convenience
-
-If you want to develop outside of existing frameworks, implement your
-own ones, or develop middleware, Rack provides many helpers to create
-Rack applications quickly and without doing the same web stuff all
-over:
-* Rack::Request, which also provides query string parsing and
-  multipart handling.
-* Rack::Response, for convenient generation of HTTP replies and
-  cookie handling.
-* Rack::MockRequest and Rack::MockResponse for efficient and quick
-  testing of Rack application without real HTTP round-trips.
-
-== rackup
-
-rackup is a useful tool for running Rack applications, which uses the
-Rack::Builder DSL to configure middleware and build up applications
-easily.
-
-rackup automatically figures out the environment it is run in, and
-runs your application as FastCGI, CGI, or standalone with Mongrel or
-WEBrick---all from the same configuration.
-
-== Quick start
-
-Try the lobster!
-
-Either with the embedded WEBrick starter:
-
-    ruby -Ilib lib/rack/lobster.rb
-
-Or with rackup:
-
-    bin/rackup -Ilib example/lobster.ru 
-
-By default, the lobster is found at http://localhost:9292.
-
-== Installing with RubyGems
-
-A Gem of Rack is available.  You can install it with:
-
-    gem install rack
-
-I also provide a local mirror of the gems (and development snapshots)
-at my site:
-
-    gem install rack --source http://chneukirchen.org/releases/gems
-
-== Running the tests
-
-Testing Rack requires the test/spec testing framework:
-
-    gem install test-spec
-
-There are two rake-based test tasks:
-
-    rake test       tests all the fast tests (no Handlers or Adapters)
-    rake fulltest   runs all the tests
-
-The fast testsuite has no dependencies outside of the core Ruby
-installation and test-spec.
-
-To run the test suite completely, you need:
-
-  * camping
-  * mongrel
-  * fcgi
-  * ruby-openid
-  * memcache-client
-
-The full set of tests test FCGI access with lighttpd (on port
-9203) so you will need lighttpd installed as well as the FCGI
-libraries and the fcgi gem:
-
-Download and install lighttpd:
-
-    http://www.lighttpd.net/download
-
-Installing the FCGI libraries:
-
-    curl -O http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
-    tar xzvf fcgi-2.4.0.tar.gz
-    cd fcgi-2.4.0
-    ./configure --prefix=/usr/local
-    make
-    sudo make install
-    cd ..
-
-Installing the Ruby fcgi gem:
-
-    gem install fcgi
-
-Furthermore, to test Memcache sessions, you need memcached (will be
-run on port 11211) and memcache-client installed.
-
-== History
-
-* March 3rd, 2007: First public release 0.1.
-
-* May 16th, 2007: Second public release 0.2.
-  * HTTP Basic authentication.
-  * Cookie Sessions.
-  * Static file handler.
-  * Improved Rack::Request.
-  * Improved Rack::Response.
-  * Added Rack::ShowStatus, for better default error messages.
-  * Bug fixes in the Camping adapter.
-  * Removed Rails adapter, was too alpha.
-
-* February 26th, 2008: Third public release 0.3.
-  * LiteSpeed handler, by Adrian Madrid.
-  * SCGI handler, by Jeremy Evans.
-  * Pool sessions, by blink.
-  * OpenID authentication, by blink.
-  * :Port and :File options for opening FastCGI sockets, by blink.
-  * Last-Modified HTTP header for Rack::File, by blink.
-  * Rack::Builder#use now accepts blocks, by Corey Jewett.
-    (See example/protectedlobster.ru)
-  * HTTP status 201 can contain a Content-Type and a body now.
-  * Many bugfixes, especially related to Cookie handling.
-
-* August 21th, 2008: Fourth public release 0.4.
-  * New middleware, Rack::Deflater, by Christoffer Sawicki.
-  * OpenID authentication now needs ruby-openid 2.
-  * New Memcache sessions, by blink.
-  * Explicit EventedMongrel handler, by Joshua Peek <josh at joshpeek.com>
-  * Rack::Reloader is not loaded in rackup development mode.
-  * rackup can daemonize with -D.
-  * Many bugfixes, especially for pool sessions, URLMap, thread safety
-    and tempfile handling.
-  * Improved tests.
-  * Rack moved to Git.
-
-== Contact
-
-Please mail bugs, suggestions and patches to
-<mailto:rack-devel at googlegroups.com>.
-
-Mailing list archives are available at
-<http://groups.google.com/group/rack-devel>
-
-Git repository (branches rebased on master are most welcome):
-* http://github.com/chneukirchen/rack
-* http://git.vuxu.org/cgi-bin/gitweb.cgi?p=rack.git
-
-You are also welcome to join the #rack channel on irc.freenode.net.
-
-== Thanks to
-
-* blink for the Pool sessions, Memcache sessions, OpenID support, many
-  tweaks, patches and bugreports.
-* Michael Fellinger, for the helpful discussion, bugfixes and a better
-  Rack::Request interface.
-* Adrian Madrid, for the LiteSpeed handler.
-* Christoffer Sawicki, for the first Rails adapter and Rack::Deflater.
-* Tim Fletcher, for the HTTP authentication code.
-* Luc Heinrich for the Cookie sessions, the static file handler and bugfixes.
-* Armin Ronacher, for the logo and racktools.
-* Aredridel, for bug fixing.
-* Stephen Bannasch, for bug reports and documentation.
-* Gary Wright, for proposing a better Rack::Response interface.
-* Jonathan Buch, for improvements regarding Rack::Response.
-* Armin Röhrl, for tracking down bugs in the Cookie generator.
-* Alexander Kellett for testing the Gem and reviewing the announce.
-* Marcus Rückert, for help with configuring and debugging lighttpd.
-* The WSGI team for the well-done and documented work they've done and
-  Rack builds up on.
-* All bug reporters and patch contributers not mentioned above.
-
-== Copyright
-
-Copyright (C) 2007, 2008 Christian Neukirchen <http://purl.org/net/chneukirchen>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-== Links
-
-Rack:: <http://rack.rubyforge.org/>
-Rack's Rubyforge project:: <http://rubyforge.org/projects/rack>
-rack-devel mailing list:: <http://groups.google.com/group/rack-devel>
-
-Camping:: <http://camping.rubyforge.org/>
-Ramaze:: <http://ramaze.rubyforge.org/>
-Maveric:: <http://maveric.rubyforge.org/>
-
-Christian Neukirchen:: <http://chneukirchen.org/>
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/Rakefile b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/Rakefile
deleted file mode 100644
index 81ab736..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/Rakefile
+++ /dev/null
@@ -1,179 +0,0 @@
-# Rakefile for Rack.  -*-ruby-*-
-require 'rake/rdoctask'
-require 'rake/testtask'
-
-
-desc "Run all the tests"
-task :default => [:test]
-
-desc "Do predistribution stuff"
-task :predist => [:chmod, :changelog, :rdoc]
-
-
-desc "Make an archive as .tar.gz"
-task :dist => [:fulltest, :predist] do
-  sh "git archive --format=tar --prefix=#{release}/ HEAD^{tree} >#{release}.tar"
-  sh "pax -waf #{release}.tar -s ':^:#{release}/:' RDOX SPEC ChangeLog doc"
-  sh "gzip -f -9 #{release}.tar"
-end
-
-# Helper to retrieve the "revision number" of the git tree.
-def git_tree_version
-  if File.directory?(".git")
-    @tree_version ||= `git describe`.strip.sub('-', '.')
-    @tree_version << ".0"  unless @tree_version.count('.') == 2
-  else
-    $: << "lib"
-    require 'rack'
-    @tree_version = Rack.release
-  end
-  @tree_version
-end
-
-def gem_version
-  git_tree_version.gsub(/-.*/, '')
-end
-
-def release
-  "rack-#{git_tree_version}"
-end
-
-def manifest
-  `git ls-files`.split("\n")
-end
-
-
-desc "Make binaries executable"
-task :chmod do
-  Dir["bin/*"].each { |binary| File.chmod(0775, binary) }
-  Dir["test/cgi/test*"].each { |binary| File.chmod(0775, binary) }
-end
-
-desc "Generate a ChangeLog"
-task :changelog do
-  File.open("ChangeLog", "w") { |out|
-    `git log -z`.split("\0").map { |chunk|
-      author = chunk[/Author: (.*)/, 1].strip
-      date = chunk[/Date: (.*)/, 1].strip
-      desc, detail = $'.strip.split("\n", 2)
-      detail ||= ""
-      detail = detail.gsub(/.*darcs-hash:.*/, '')
-      detail.rstrip!
-      out.puts "#{date}  #{author}"
-      out.puts "  * #{desc.strip}"
-      out.puts detail  unless detail.empty?
-      out.puts
-    }
-  }
-end
-
-
-desc "Generate RDox"
-task "RDOX" do
-  sh "specrb -Ilib:test -a --rdox >RDOX"
-end
-
-desc "Generate Rack Specification"
-task "SPEC" do
-  File.open("SPEC", "wb") { |file|
-    IO.foreach("lib/rack/lint.rb") { |line|
-      if line =~ /## (.*)/
-        file.puts $1
-      end
-    }
-  }
-end
-
-desc "Run all the fast tests"
-task :test do
-  sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS'] || '-t "^(?!Rack::Handler|Rack::Adapter|Rack::Session::Memcache|Rack::Auth::OpenID)"'}"
-end
-
-desc "Run all the tests"
-task :fulltest => [:chmod] do
-  sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS']}"
-end
-
-begin
-  require 'rubygems'
-
-  require 'rake'
-  require 'rake/clean'
-  require 'rake/packagetask'
-  require 'rake/gempackagetask'
-  require 'fileutils'
-rescue LoadError
-  # Too bad.
-else
-  spec = Gem::Specification.new do |s|
-    s.name            = "rack"
-    s.version         = gem_version
-    s.platform        = Gem::Platform::RUBY
-    s.summary         = "a modular Ruby webserver interface"
-
-    s.description = <<-EOF
-Rack provides minimal, modular and adaptable interface for developing
-web applications in Ruby.  By wrapping HTTP requests and responses in
-the simplest way possible, it unifies and distills the API for web
-servers, web frameworks, and software in between (the so-called
-middleware) into a single method call.
-
-Also see http://rack.rubyforge.org.
-    EOF
-
-    s.files           = manifest + %w(SPEC RDOX)
-    s.bindir          = 'bin'
-    s.executables     << 'rackup'
-    s.require_path    = 'lib'
-    s.has_rdoc        = true
-    s.extra_rdoc_files = ['README', 'SPEC', 'RDOX', 'KNOWN-ISSUES']
-    s.test_files      = Dir['test/{test,spec}_*.rb']
-
-    s.author          = 'Christian Neukirchen'
-    s.email           = 'chneukirchen at gmail.com'
-    s.homepage        = 'http://rack.rubyforge.org'
-    s.rubyforge_project = 'rack'
-  end
-
-  Rake::GemPackageTask.new(spec) do |p|
-    p.gem_spec = spec
-    p.need_tar = false
-    p.need_zip = false
-  end
-end
-
-desc "Generate RDoc documentation"
-Rake::RDocTask.new(:rdoc) do |rdoc|
-  rdoc.options << '--line-numbers' << '--inline-source' <<
-    '--main' << 'README' <<
-    '--title' << 'Rack Documentation' <<
-    '--charset' << 'utf-8'
-  rdoc.rdoc_dir = "doc"
-  rdoc.rdoc_files.include 'README'
-  rdoc.rdoc_files.include 'KNOWN-ISSUES'
-  rdoc.rdoc_files.include 'SPEC'
-  rdoc.rdoc_files.include 'RDOX'
-  rdoc.rdoc_files.include('lib/rack.rb')
-  rdoc.rdoc_files.include('lib/rack/*.rb')
-  rdoc.rdoc_files.include('lib/rack/*/*.rb')
-end
-task :rdoc => ["SPEC", "RDOX"]
-
-task :pushsite => [:rdoc] do
-  sh "rsync -avz doc/ chneukirchen at rack.rubyforge.org:/var/www/gforge-projects/rack/doc/"
-  sh "rsync -avz site/ chneukirchen at rack.rubyforge.org:/var/www/gforge-projects/rack/"
-end
-
-begin
-  require 'rcov/rcovtask'
-
-  Rcov::RcovTask.new do |t|
-    t.test_files = FileList['test/{spec,test}_*.rb']
-    t.verbose = true     # uncomment to see the executed command
-    t.rcov_opts = ["--text-report",
-                   "-Ilib:test",
-                   "--include-file", "^lib,^test",
-                   "--exclude-only", "^/usr,^/home/.*/src,active_"]
-  end
-rescue LoadError
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/SPEC b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/SPEC
deleted file mode 100644
index d9d6bdc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/SPEC
+++ /dev/null
@@ -1,126 +0,0 @@
-This specification aims to formalize the Rack protocol.  You
-can (and should) use Rack::Lint to enforce it.
-When you develop middleware, be sure to add a Lint before and
-after to catch all mistakes.
-= Rack applications
-A Rack application is an Ruby object (not a class) that
-responds to +call+.
-It takes exactly one argument, the *environment*
-and returns an Array of exactly three values:
-The *status*,
-the *headers*,
-and the *body*.
-== The Environment
-The environment must be an true instance of Hash (no
-subclassing allowed) that includes CGI-like headers.
-The application is free to modify the environment.
-The environment is required to include these variables
-(adopted from PEP333), except when they'd be empty, but see
-below.
-<tt>REQUEST_METHOD</tt>:: The HTTP request method, such as
-                          "GET" or "POST". This cannot ever
-                          be an empty string, and so is
-                          always required.
-<tt>SCRIPT_NAME</tt>:: The initial portion of the request
-                       URL's "path" that corresponds to the
-                       application object, so that the
-                       application knows its virtual
-                       "location". This may be an empty
-                       string, if the application corresponds
-                       to the "root" of the server.
-<tt>PATH_INFO</tt>:: The remainder of the request URL's
-                     "path", designating the virtual
-                     "location" of the request's target
-                     within the application. This may be an
-                     empty string, if the request URL targets
-                     the application root and does not have a
-                     trailing slash.
-<tt>QUERY_STRING</tt>:: The portion of the request URL that
-                        follows the <tt>?</tt>, if any. May be
-                        empty, but is always required!
-<tt>SERVER_NAME</tt>, <tt>SERVER_PORT</tt>:: When combined with <tt>SCRIPT_NAME</tt> and <tt>PATH_INFO</tt>, these variables can be used to complete the URL. Note, however, that <tt>HTTP_HOST</tt>, if present, should be used in preference to <tt>SERVER_NAME</tt> for reconstructing the request URL.  <tt>SERVER_NAME</tt> and <tt>SERVER_PORT</tt> can never be empty strings, and so are always required.
-<tt>HTTP_</tt> Variables:: Variables corresponding to the
-                           client-supplied HTTP request
-                           headers (i.e., variables whose
-                           names begin with <tt>HTTP_</tt>). The
-                           presence or absence of these
-                           variables should correspond with
-                           the presence or absence of the
-                           appropriate HTTP header in the
-                           request.
-In addition to this, the Rack environment must include these
-Rack-specific variables:
-<tt>rack.version</tt>:: The Array [0,1], representing this version of Rack.
-<tt>rack.url_scheme</tt>:: +http+ or +https+, depending on the request URL.
-<tt>rack.input</tt>:: See below, the input stream.
-<tt>rack.errors</tt>:: See below, the error stream.
-<tt>rack.multithread</tt>:: true if the application object may be simultaneously invoked by another thread in the same process, false otherwise.
-<tt>rack.multiprocess</tt>:: true if an equivalent application object may be simultaneously invoked by another process, false otherwise.
-<tt>rack.run_once</tt>:: true if the server expects (but does not guarantee!) that the application will only be invoked this one time during the life of its containing process. Normally, this will only be true for a server based on CGI (or something similar).
-The server or the application can store their own data in the
-environment, too.  The keys must contain at least one dot,
-and should be prefixed uniquely.  The prefix <tt>rack.</tt>
-is reserved for use with the Rack core distribution and must
-not be used otherwise.
-The environment must not contain the keys
-<tt>HTTP_CONTENT_TYPE</tt> or <tt>HTTP_CONTENT_LENGTH</tt>
-(use the versions without <tt>HTTP_</tt>).
-The CGI keys (named without a period) must have String values.
-There are the following restrictions:
-* <tt>rack.version</tt> must be an array of Integers.
-* <tt>rack.url_scheme</tt> must either be +http+ or +https+.
-* There must be a valid input stream in <tt>rack.input</tt>.
-* There must be a valid error stream in <tt>rack.errors</tt>.
-* The <tt>REQUEST_METHOD</tt> must be one of +GET+, +POST+, +PUT+,
-  +DELETE+, +HEAD+, +OPTIONS+, +TRACE+.
-* The <tt>SCRIPT_NAME</tt>, if non-empty, must start with <tt>/</tt>
-* The <tt>PATH_INFO</tt>, if non-empty, must start with <tt>/</tt>
-* The <tt>CONTENT_LENGTH</tt>, if given, must consist of digits only.
-* One of <tt>SCRIPT_NAME</tt> or <tt>PATH_INFO</tt> must be
-  set.  <tt>PATH_INFO</tt> should be <tt>/</tt> if
-  <tt>SCRIPT_NAME</tt> is empty.
-  <tt>SCRIPT_NAME</tt> never should be <tt>/</tt>, but instead be empty.
-=== The Input Stream
-The input stream must respond to +gets+, +each+ and +read+.
-* +gets+ must be called without arguments and return a string,
-  or +nil+ on EOF.
-* +read+ must be called without or with one integer argument
-  and return a string, or +nil+ on EOF.
-* +each+ must be called without arguments and only yield Strings.
-* +close+ must never be called on the input stream.
-=== The Error Stream
-The error stream must respond to +puts+, +write+ and +flush+.
-* +puts+ must be called with a single argument that responds to +to_s+.
-* +write+ must be called with a single argument that is a String.
-* +flush+ must be called without arguments and must be called
-  in order to make the error appear for sure.
-* +close+ must never be called on the error stream.
-== The Response
-=== The Status
-The status, if parsed as integer (+to_i+), must be greater than or equal to 100.
-=== The Headers
-The header must respond to each, and yield values of key and value.
-The header keys must be Strings.
-The header must not contain a +Status+ key,
-contain keys with <tt>:</tt> or newlines in their name,
-contain keys names that end in <tt>-</tt> or <tt>_</tt>,
-but only contain keys that consist of
-letters, digits, <tt>_</tt> or <tt>-</tt> and start with a letter.
-The values of the header must respond to #each.
-The values passed on #each must be Strings
-and not contain characters below 037.
-=== The Content-Type
-There must be a <tt>Content-Type</tt>, except when the
-+Status+ is 204 or 304, in which case there must be none
-given.
-=== The Body
-The Body must respond to #each
-and must only yield String values.
-If the Body responds to #close, it will be called after iteration.
-The Body commonly is an Array of Strings, the application
-instance itself, or a File-like object.
-== Thanks
-Some parts of this specification are adopted from PEP333: Python
-Web Server Gateway Interface
-v1.0 (http://www.python.org/dev/peps/pep-0333/). I'd like to thank
-everyone involved in that effort.
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/bin/rackup b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/bin/rackup
deleted file mode 100755
index e06efd4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/bin/rackup
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/usr/bin/env ruby
-# -*- ruby -*-
-
-require 'optparse'
-
-automatic = false
-server = nil
-env = "development"
-daemonize = false
-pid = nil
-options = {:Port => 9292, :Host => "0.0.0.0", :AccessLog => []}
-
-opts = OptionParser.new("", 24, '  ') { |opts|
-  opts.banner = "Usage: rackup [ruby options] [rack options] [rackup config]"
-
-  opts.separator ""
-  opts.separator "Ruby options:"
-
-  lineno = 1
-  opts.on("-e", "--eval LINE", "evaluate a LINE of code") { |line|
-    eval line, TOPLEVEL_BINDING, "-e", lineno
-    lineno += 1
-  }
-
-  opts.on("-d", "--debug", "set debugging flags (set $DEBUG to true)") {
-    $DEBUG = true
-  }
-  opts.on("-w", "--warn", "turn warnings on for your script") {
-    $-w = true
-  }
-
-  opts.on("-I", "--include PATH",
-          "specify $LOAD_PATH (may be used more than once)") { |path|
-    $LOAD_PATH.unshift(*path.split(":"))
-  }
-
-  opts.on("-r", "--require LIBRARY",
-          "require the library, before executing your script") { |library|
-    require library
-  }
-
-  opts.separator ""
-  opts.separator "Rack options:"
-  opts.on("-s", "--server SERVER", "serve using SERVER (webrick/mongrel)") { |s|
-    server = s
-  }
-
-  opts.on("-o", "--host HOST", "listen on HOST (default: 0.0.0.0)") { |host|
-    options[:Host] = host
-  }
-
-  opts.on("-p", "--port PORT", "use PORT (default: 9292)") { |port|
-    options[:Port] = port
-  }
-
-  opts.on("-E", "--env ENVIRONMENT", "use ENVIRONMENT for defaults (default: development)") { |e|
-    env = e
-  }
-
-  opts.on("-D", "--daemonize", "run daemonized in the background") { |d|
-    daemonize = d ? true : false
-  }
-
-  opts.on("-P", "--pid FILE", "file to store PID (default: rack.pid)") { |f|
-    pid = File.expand_path(f)
-  }
-
-  opts.separator ""
-  opts.separator "Common options:"
-
-  opts.on_tail("-h", "--help", "Show this message") do
-    puts opts
-    exit
-  end
-
-  opts.on_tail("--version", "Show version") do
-    require 'rack'
-    puts "Rack #{Rack.version}"
-    exit
-  end
-
-  opts.parse! ARGV
-}
-
-require 'pp'  if $DEBUG
-
-config = ARGV[0] || "config.ru"
-if !File.exist? config
-  abort "configuration #{config} not found"
-end
-
-if config =~ /\.ru$/
-  cfgfile = File.read(config)
-  if cfgfile[/^#\\(.*)/]
-    opts.parse! $1.split(/\s+/)
-  end
-  require 'rack'
-  inner_app = eval "Rack::Builder.new {( " + cfgfile + "\n )}.to_app",
-                   nil, config
-else
-  require 'rack'
-  require config
-  inner_app = Object.const_get(File.basename(config, '.rb').capitalize)
-end
-
-unless server = Rack::Handler.get(server)
-  # Guess.
-  if ENV.include?("PHP_FCGI_CHILDREN")
-    server = Rack::Handler::FastCGI
-
-    # We already speak FastCGI
-    options.delete :File
-    options.delete :Port
-  elsif ENV.include?("REQUEST_METHOD")
-    server = Rack::Handler::CGI
-  else
-    begin
-      server = Rack::Handler::Mongrel
-    rescue LoadError => e
-      server = Rack::Handler::WEBrick
-    end
-  end
-end
-
-p server  if $DEBUG
-
-case env
-when "development"
-  app = Rack::Builder.new {
-    use Rack::CommonLogger, STDERR  unless server.name =~ /CGI/
-    use Rack::ShowExceptions
-    use Rack::Lint
-    run inner_app
-  }.to_app
-
-when "deployment"
-  app = Rack::Builder.new {
-    use Rack::CommonLogger, STDERR  unless server.name =~ /CGI/
-    run inner_app
-  }.to_app
-
-when "none"
-  app = inner_app
-
-end
-
-if $DEBUG
-  pp app
-  pp inner_app
-end
-
-if daemonize
-  if RUBY_VERSION < "1.9"
-    exit if fork
-    Process.setsid
-    exit if fork
-    Dir.chdir "/"
-    File.umask 0000
-    STDIN.reopen "/dev/null"
-    STDOUT.reopen "/dev/null", "a"
-    STDERR.reopen "/dev/null", "a"
-  else
-    Process.daemon
-  end
-
-  if pid
-    File.open(pid, 'w'){ |f| f.write("#{Process.pid}") }
-    at_exit { File.delete(pid) if File.exist?(pid) }
-  end
-end
-
-server.run app, options
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/contrib/rack_logo.svg b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/contrib/rack_logo.svg
deleted file mode 100644
index 905dcd3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/contrib/rack_logo.svg
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) 
-  by Armin Ronacher (mitsuhiko), MIT-licensed.
--->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://web.resource.org/cc/"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="200"
-   height="100"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.44"
-   version="1.0"
-   inkscape:export-filename="/home/blackbird/Desktop/rack_logo_final.png"
-   inkscape:export-xdpi="360"
-   inkscape:export-ydpi="360"
-   sodipodi:docbase="/home/blackbird/Desktop"
-   sodipodi:docname="rack_logo.svg">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     gridtolerance="10000"
-     guidetolerance="10"
-     objecttolerance="10"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="3.959798"
-     inkscape:cx="148.56163"
-     inkscape:cy="67.007749"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     width="200px"
-     height="100px"
-     inkscape:window-width="1400"
-     inkscape:window-height="975"
-     inkscape:window-x="0"
-     inkscape:window-y="24" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       style="font-size:33.17043304px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Frutiger"
-       d="M 102.28876,57.97848 L 102.28876,64.972684 C 101.77662,64.784857 101.19214,64.690938 100.5353,64.690927 C 99.767107,64.690938 99.026757,64.873251 98.314248,65.237867 C 97.612848,65.591455 97.056197,66.050001 96.644288,66.613505 C 96.343688,67.022337 96.121018,67.541654 95.976308,68.171455 C 95.876091,68.558187 95.826008,69.094078 95.826016,69.779128 L 95.826016,75.861765 L 87.125504,75.861765 L 87.125504,58.144219 L 95.274924,58.144219 L 95.274924,62.105392 C 95.987422,60.569555 96.783437,59.481201 97.662958,58.840325 C 98.542463,58.188434 99.622368,57.86248 100.90268,57.862463 C 101.30345,57.86248 101.76548,57.901153 102.28876,57.97848 M 115.63175,75.861765 L 115.63175,73.342526 C 114.26238,75.364548 112.21945,76.375557 109.50299,76.375558 C 107.49902,76.375557 105.94039,75.86729 104.82709,74.850755 C 103.71379,73.834221 103.15714,72.552504 103.15714,71.0056 C 103.15714,69.867528 103.41875,68.867568 103.94202,68.005716 C 104.4764,67.13283 105.22231,66.431201 106.17978,65.900825 C 106.79207,65.558307 107.65489,65.276551 108.7682,65.055554 C 109.89264,64.82353 111.22861,64.707512 112.7761,64.707501 C 113.47749,64.707512 114.37371,64.735135 115.46475,64.790371 C 115.44246,63.994833 115.12518,63.353974 114.51288,62.867793 C 113.90056,62.381638 112.86517,62.138553 111.40674,62.13854 C 110.47156,62.138553 109.50298,62.254571 108.50101,62.486592 C 107.76623,62.663395 106.66962,63.05012 105.21119,63.646768 L 105.21119,58.740881 C 106.54715,58.365223 107.78292,58.10004 108.91851,57.945332 C 110.05407,57.79066 111.31211,57.713315 112.69263,57.713297 C 114.85243,57.713315 116.71722,57.912202 118.28699,58.309959 C 119.05515,58.497815 119.76766,58.79062 120.42454,59.188378 C 121.08138,59.586169 121.59907,60.02814 121.97762,60.514293 C 122.36724,60.989428 122.68454,61.591614 122.9295,62.320853 C 123.18553,63.05012 123.31357,64.055605 123.31358,65.33731 L 123.31358,75.861765 L 115.63175,75.861765 M 115.69855,67.972568 C 114.30691,67.961526 113.33832,68.011249 112.79282,68.121734 C 112.24727,68.232234 111.81866,68.469793 111.50693,68.834413 C 111.19522,69.199047 111.03934,69.613395 111.03935,70.077459 C 111.03934,70.574683 111.22861,71.005604 111.60714,71.370227 C 111.98566,71.723808 112.44768,71.900596 112.99322,71.900593 C 113.67231,71.900596 114.29577,71.607791 114.86358,71.022173 C 115.43134,70.436566 115.71525,69.596821 115.71525,68.502934 C 115.71525,68.381399 115.70968,68.20461 115.69855,67.972568 M 142.55155,58.376254 L 142.55155,63.646768 C 141.04855,63.03907 139.76826,62.735215 138.71063,62.735202 C 137.41918,62.735215 136.38381,63.110891 135.6045,63.86223 C 134.82518,64.613593 134.43552,65.59698 134.43553,66.812392 C 134.43552,68.171463 134.82518,69.248768 135.6045,70.044311 C 136.39494,70.828816 137.46928,71.221066 138.82753,71.221061 C 139.92968,71.221066 141.22114,70.867489 142.70184,70.160328 L 142.70184,75.46399 C 140.50862,76.071702 138.34322,76.375557 136.20569,76.375558 C 134.44665,76.375557 132.80452,76.115898 131.27929,75.596582 C 130.13258,75.209858 129.13618,74.646344 128.29007,73.90604 C 127.45508,73.15469 126.80936,72.325994 126.35291,71.419948 C 125.69606,70.116137 125.36763,68.646582 125.36763,67.011279 C 125.36763,63.89539 126.52547,61.459022 128.84117,59.70217 C 130.66698,58.309976 133.14964,57.613871 136.2892,57.613853 C 138.47127,57.613871 140.55871,57.868005 142.55155,58.376254 M 154.2413,65.221293 L 159.21776,58.144219 L 168.95366,58.144219 L 162.94178,66.000268 L 169.20414,75.861765 L 159.13426,75.861765 L 154.2413,67.259888 L 154.2413,75.861765 L 145.52407,75.861765 L 145.52407,50.255022 L 154.2413,50.255022 L 154.2413,65.221293"
-       id="text2980" />
-    <path
-       style="font-size:9.72235012px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Frutiger45-Light"
-       d="M 87.460353,88.057465 L 88.081744,88.057465 L 88.081744,85.211201 L 88.101471,85.211201 C 88.259282,85.530647 88.463124,85.770232 88.712998,85.929955 C 88.962867,86.083288 89.281782,86.159955 89.669743,86.159955 C 90.33387,86.159955 90.843476,85.923565 91.198561,85.450785 C 91.560211,84.971618 91.741039,84.355087 91.741044,83.601194 C 91.741039,82.815359 91.579938,82.202023 91.25774,81.761184 C 91.086772,81.531188 90.869779,81.355493 90.60676,81.234098 C 90.343734,81.106325 90.031395,81.042436 89.669743,81.042431 C 89.43302,81.042436 89.222602,81.077575 89.038488,81.147848 C 88.85437,81.211743 88.699845,81.294798 88.574911,81.397016 C 88.456549,81.499244 88.361203,81.601466 88.288874,81.703684 C 88.216541,81.799522 88.147498,81.901745 88.081744,82.010353 L 88.062018,82.048686 L 88.042291,82.048686 L 88.081744,81.157431 L 87.460353,81.157431 L 87.460353,88.057465 M 91.060474,83.601194 C 91.06047,83.863141 91.037455,84.112309 90.991431,84.348697 C 90.945397,84.585088 90.863203,84.802312 90.744847,85.000367 C 90.633058,85.192035 90.478533,85.348563 90.281269,85.469952 C 90.090575,85.584954 89.853854,85.642454 89.571109,85.642453 C 89.308084,85.642454 89.081227,85.581759 88.890538,85.460369 C 88.699845,85.33898 88.545319,85.179258 88.426961,84.9812 C 88.308599,84.776755 88.219829,84.556338 88.160651,84.319947 C 88.108045,84.077169 88.081743,83.837586 88.081744,83.601194 C 88.081743,83.364806 88.108045,83.128416 88.160651,82.892023 C 88.219829,82.649248 88.305311,82.42883 88.417097,82.23077 C 88.535456,82.026329 88.689981,81.863412 88.880675,81.742018 C 89.077939,81.620632 89.308084,81.559938 89.571109,81.559933 C 89.853854,81.559938 90.090575,81.620632 90.281269,81.742018 C 90.478533,81.857022 90.633058,82.01355 90.744847,82.211603 C 90.863203,82.403275 90.945397,82.617303 90.991431,82.853689 C 91.037455,83.090082 91.06047,83.33925 91.060474,83.601194 M 92.509615,83.601194 C 92.509614,83.939808 92.555643,84.265642 92.647702,84.578698 C 92.746334,84.885367 92.890996,85.156896 93.081688,85.393285 C 93.272378,85.629676 93.515674,85.818149 93.811576,85.958705 C 94.11405,86.092872 94.462554,86.159955 94.85709,86.159955 C 95.251621,86.159955 95.596838,86.092872 95.892741,85.958705 C 96.195213,85.818149 96.441797,85.629676 96.632492,85.393285 C 96.823179,85.150508 96.964554,84.875783 97.056616,84.569114 C 97.155245,84.262449 97.204561,83.939808 97.204567,83.601194 C 97.204561,83.262583 97.155245,82.939944 97.056616,82.633272 C 96.964554,82.320218 96.823179,82.045495 96.632492,81.809101 C 96.441797,81.572716 96.195213,81.387438 95.892741,81.253266 C 95.596838,81.112714 95.251621,81.042436 94.85709,81.042431 C 94.462554,81.042436 94.117338,81.112714 93.821439,81.253266 C 93.525538,81.387438 93.278954,81.575911 93.081688,81.818685 C 92.890996,82.055079 92.746334,82.326608 92.647702,82.633272 C 92.555643,82.939944 92.509614,83.262583 92.509615,83.601194 M 93.190185,83.601194 C 93.190184,83.013416 93.334846,82.527858 93.624172,82.144519 C 93.920071,81.7548 94.331043,81.559938 94.85709,81.559933 C 95.383132,81.559938 95.790816,81.7548 96.080145,82.144519 C 96.376041,82.527858 96.523991,83.013416 96.523995,83.601194 C 96.523991,84.188976 96.376041,84.677727 96.080145,85.06745 C 95.790816,85.450786 95.383132,85.642454 94.85709,85.642453 C 94.331043,85.642454 93.920071,85.450786 93.624172,85.06745 C 93.334846,84.677727 93.190184,84.188976 93.190185,83.601194 M 105.09447,81.157431 L 104.47308,81.157431 L 103.08235,85.383702 L 103.06262,85.383702 L 101.73107,81.157431 L 100.98146,81.157431 L 99.580861,85.383702 L 99.561135,85.383702 L 98.239447,81.157431 L 97.558876,81.157431 L 99.176464,86.044955 L 99.926079,86.044955 L 101.29708,81.818685 L 101.31681,81.818685 L 102.68781,86.044955 L 103.43743,86.044955 L 105.09447,81.157431 M 109.15539,85.278285 C 109.00415,85.374119 108.78387,85.460369 108.49455,85.537035 C 108.2118,85.607314 107.96192,85.642454 107.74493,85.642453 C 107.22547,85.642454 106.81778,85.466758 106.52188,85.115367 C 106.23255,84.763978 106.0879,84.316754 106.0879,83.773694 L 109.5302,83.773694 L 109.5302,83.467026 C 109.5302,83.128416 109.49075,82.815359 109.41184,82.527854 C 109.33293,82.233968 109.21128,81.975217 109.04689,81.751601 C 108.88908,81.527994 108.68195,81.355493 108.42551,81.234098 C 108.16905,81.106325 107.86987,81.042436 107.52794,81.042431 C 107.21889,81.042436 106.93285,81.106325 106.66983,81.234098 C 106.4068,81.355493 106.17995,81.531188 105.98927,81.761184 C 105.80514,81.99119 105.66049,82.262718 105.55527,82.575772 C 105.45664,82.888832 105.40733,83.230639 105.40733,83.601194 C 105.40733,83.978141 105.45007,84.323142 105.53555,84.636199 C 105.62103,84.942868 105.75254,85.211201 105.93008,85.441202 C 106.11419,85.671204 106.35091,85.850093 106.64024,85.977872 C 106.93614,86.09926 107.28793,86.159955 107.69562,86.159955 C 107.93891,86.159955 108.18879,86.1344 108.44523,86.083288 C 108.70825,86.038566 108.94498,85.974677 109.15539,85.89162 L 109.15539,85.278285 M 106.0879,83.256192 C 106.0879,83.051749 106.12078,82.850499 106.18652,82.652439 C 106.25886,82.447997 106.35749,82.262718 106.48242,82.096603 C 106.61393,81.930495 106.77175,81.799522 106.95587,81.703684 C 107.13998,81.607855 107.34383,81.559938 107.56739,81.559933 C 107.79096,81.559938 107.98494,81.607855 108.14933,81.703684 C 108.31372,81.793134 108.44523,81.917717 108.54386,82.077436 C 108.64908,82.237163 108.72469,82.419247 108.77073,82.623689 C 108.82333,82.821749 108.84962,83.032582 108.84963,83.256192 L 106.0879,83.256192 M 110.61748,86.044955 L 111.23887,86.044955 L 111.23887,83.629944 C 111.23887,83.387167 111.2586,83.153972 111.29805,82.930357 C 111.33751,82.700359 111.40654,82.492719 111.50518,82.307437 C 111.60381,82.115773 111.73204,81.96244 111.88985,81.847435 C 112.05424,81.732439 112.25479,81.674939 112.49151,81.674934 C 112.66905,81.674939 112.82029,81.694105 112.94523,81.732434 L 112.94523,81.099931 C 112.88604,81.08077 112.81372,81.067992 112.72824,81.061598 C 112.64933,81.048825 112.57699,81.042436 112.51124,81.042431 C 112.21533,81.042436 111.9556,81.141464 111.73204,81.339516 C 111.51504,81.537577 111.34408,81.789939 111.21914,82.096603 L 111.19941,82.096603 L 111.19941,81.157431 L 110.57803,81.157431 C 110.59775,81.323548 110.60761,81.473688 110.60761,81.607851 C 110.61419,81.735634 110.61748,81.949662 110.61748,82.249937 L 110.61748,86.044955 M 113.39078,85.929955 C 113.78531,86.083288 114.25546,86.159955 114.80123,86.159955 C 115.00507,86.159955 115.20892,86.1344 115.41276,86.083288 C 115.61661,86.032177 115.804,85.952315 115.97497,85.843704 C 116.15251,85.735092 116.29389,85.591342 116.3991,85.412452 C 116.5043,85.233563 116.55691,85.019535 116.55691,84.770365 C 116.55691,84.553144 116.51417,84.361476 116.42868,84.195362 C 116.3432,84.029253 116.22813,83.888696 116.08347,83.773694 C 115.94537,83.652307 115.79743,83.553278 115.63961,83.476609 C 115.48838,83.393556 115.2944,83.300917 115.05769,83.198691 C 114.72232,83.051749 114.47575,82.920776 114.31793,82.805773 C 114.16012,82.690776 114.08121,82.547025 114.08121,82.374521 C 114.08121,82.080635 114.17326,81.872995 114.35738,81.751601 C 114.54807,81.623827 114.81767,81.559938 115.16618,81.559933 C 115.33714,81.559938 115.52454,81.582299 115.72839,81.627018 C 115.9388,81.665355 116.12292,81.719661 116.28074,81.789935 L 116.33991,81.262849 C 116.13607,81.186186 115.91579,81.131881 115.67907,81.099931 C 115.44893,81.061603 115.25495,81.042436 115.09713,81.042431 C 114.88014,81.042436 114.67301,81.067992 114.47575,81.119098 C 114.28505,81.163826 114.1108,81.240493 113.95298,81.349099 C 113.80175,81.457716 113.6801,81.598272 113.58805,81.770768 C 113.50256,81.936884 113.45981,82.138135 113.45981,82.374521 C 113.45981,82.547025 113.49598,82.703554 113.56832,82.844106 C 113.64065,82.978277 113.73599,83.096472 113.85435,83.198691 C 113.97272,83.300917 114.09765,83.387167 114.22916,83.457442 C 114.36725,83.527723 114.54478,83.61078 114.76178,83.706611 C 115.13658,83.879113 115.41605,84.038836 115.60016,84.185779 C 115.78428,84.326337 115.87634,84.521199 115.87634,84.770365 C 115.87634,85.038701 115.76784,85.25273 115.55085,85.412452 C 115.33385,85.565786 115.07083,85.642454 114.76178,85.642453 C 114.30807,85.642454 113.87079,85.540231 113.44995,85.335785 L 113.39078,85.929955 M 127.11361,81.157431 L 126.49222,81.157431 L 125.10149,85.383702 L 125.08177,85.383702 L 123.75021,81.157431 L 123.0006,81.157431 L 121.60001,85.383702 L 121.58027,85.383702 L 120.25859,81.157431 L 119.57802,81.157431 L 121.19561,86.044955 L 121.94522,86.044955 L 123.31623,81.818685 L 123.33595,81.818685 L 124.70696,86.044955 L 125.45657,86.044955 L 127.11361,81.157431 M 131.17454,85.278285 C 131.0233,85.374119 130.80301,85.460369 130.51369,85.537035 C 130.23094,85.607314 129.98107,85.642454 129.76408,85.642453 C 129.2446,85.642454 128.83693,85.466758 128.54103,85.115367 C 128.2517,84.763978 128.10703,84.316754 128.10704,83.773694 L 131.54935,83.773694 L 131.54935,83.467026 C 131.54934,83.128416 131.50988,82.815359 131.43099,82.527854 C 131.35207,82.233968 131.23043,81.975217 131.06604,81.751601 C 130.90822,81.527994 130.70109,81.355493 130.44465,81.234098 C 130.1882,81.106325 129.88901,81.042436 129.54709,81.042431 C 129.23803,81.042436 128.95199,81.106325 128.68897,81.234098 C 128.42595,81.355493 128.1991,81.531188 128.0084,81.761184 C 127.82429,81.99119 127.67962,82.262718 127.57442,82.575772 C 127.47578,82.888832 127.42646,83.230639 127.42646,83.601194 C 127.42646,83.978141 127.4692,84.323142 127.55469,84.636199 C 127.64017,84.942868 127.77168,85.211201 127.94923,85.441202 C 128.13334,85.671204 128.37006,85.850093 128.65939,85.977872 C 128.95529,86.09926 129.30708,86.159955 129.71476,86.159955 C 129.95805,86.159955 130.20792,86.1344 130.46438,86.083288 C 130.7274,86.038566 130.96411,85.974677 131.17454,85.89162 L 131.17454,85.278285 M 128.10704,83.256192 C 128.10703,83.051749 128.13991,82.850499 128.20567,82.652439 C 128.278,82.447997 128.37664,82.262718 128.50157,82.096603 C 128.63308,81.930495 128.7909,81.799522 128.97501,81.703684 C 129.15912,81.607855 129.36297,81.559938 129.58654,81.559933 C 129.81011,81.559938 130.00408,81.607855 130.16848,81.703684 C 130.33286,81.793134 130.46437,81.917717 130.56301,82.077436 C 130.66821,82.237163 130.74383,82.419247 130.78986,82.623689 C 130.84246,82.821749 130.86877,83.032582 130.86877,83.256192 L 128.10704,83.256192 M 132.57745,86.044955 L 133.19884,86.044955 L 133.19884,85.268702 L 133.21856,85.268702 C 133.54077,85.862871 134.06352,86.159955 134.78684,86.159955 C 135.45096,86.159955 135.96057,85.923565 136.31565,85.450785 C 136.6773,84.971618 136.85813,84.355087 136.85814,83.601194 C 136.85813,82.815359 136.69703,82.202023 136.37483,81.761184 C 136.20386,81.531188 135.98687,81.355493 135.72385,81.234098 C 135.46082,81.106325 135.14849,81.042436 134.78684,81.042431 C 134.55669,81.042436 134.34627,81.077575 134.15558,81.147848 C 133.97146,81.218131 133.81365,81.304381 133.68214,81.4066 C 133.55063,81.508827 133.44542,81.611049 133.36651,81.713268 C 133.29418,81.815494 133.24487,81.904939 133.21856,81.981603 L 133.19884,81.981603 L 133.19884,78.85742 L 132.57745,78.85742 L 132.57745,86.044955 M 136.17757,83.601194 C 136.17756,83.863141 136.15455,84.112309 136.10852,84.348697 C 136.06249,84.585088 135.9803,84.802312 135.86194,85.000367 C 135.75015,85.192035 135.59563,85.348563 135.39836,85.469952 C 135.20766,85.584954 134.97095,85.642454 134.6882,85.642453 C 134.42518,85.642454 134.19832,85.581759 134.00763,85.460369 C 133.81693,85.33898 133.66241,85.179258 133.54405,84.9812 C 133.42569,84.776755 133.33692,84.556338 133.27775,84.319947 C 133.22513,84.077169 133.19884,83.837586 133.19884,83.601194 C 133.19884,83.358417 133.22513,83.118832 133.27775,82.882439 C 133.33035,82.646053 133.41254,82.42883 133.52433,82.23077 C 133.64268,82.026329 133.79721,81.863412 133.98791,81.742018 C 134.18517,81.620632 134.4186,81.559938 134.6882,81.559933 C 134.97095,81.559938 135.20766,81.620632 135.39836,81.742018 C 135.59563,81.857022 135.75015,82.01355 135.86194,82.211603 C 135.9803,82.403275 136.06249,82.617303 136.10852,82.853689 C 136.15455,83.090082 136.17756,83.33925 136.17757,83.601194 M 143.57908,86.044955 L 144.1906,86.044955 C 144.17087,85.891621 144.15772,85.744676 144.15115,85.60412 C 144.14457,85.463564 144.14129,85.268702 144.14129,85.019534 L 144.14129,82.863273 C 144.14129,82.224385 144.0032,81.761189 143.72703,81.473683 C 143.45085,81.186186 143.00043,81.042436 142.37575,81.042431 C 142.15876,81.042436 141.9056,81.077575 141.61627,81.147848 C 141.32695,81.211743 141.08694,81.288409 140.89625,81.377849 L 140.89625,81.962436 C 141.33023,81.694105 141.8234,81.559938 142.37575,81.559933 C 142.78344,81.559938 143.07605,81.662161 143.25359,81.866601 C 143.43113,82.071051 143.51989,82.387303 143.51989,82.815356 L 143.51989,83.064524 L 143.40154,83.064524 C 142.9807,83.064527 142.6026,83.080499 142.26726,83.112441 C 141.93848,83.144389 141.62285,83.214667 141.32037,83.323276 C 141.0179,83.43189 140.77131,83.60439 140.58062,83.840777 C 140.39651,84.077169 140.30445,84.390227 140.30445,84.779949 C 140.30445,84.914117 140.32417,85.057868 140.36363,85.211201 C 140.40965,85.364536 140.49185,85.514675 140.61021,85.66162 C 140.72857,85.802177 140.89954,85.920372 141.1231,86.016205 C 141.34667,86.112038 141.62613,86.159955 141.96149,86.159955 C 142.29027,86.159955 142.60589,86.080094 142.90837,85.920371 C 143.21085,85.760649 143.42784,85.540231 143.55935,85.259118 L 143.57908,85.259118 L 143.57908,86.044955 M 143.51989,83.879111 C 143.51989,84.077169 143.50675,84.265642 143.48044,84.444531 C 143.46072,84.623422 143.40153,84.805506 143.3029,84.990783 C 143.21085,85.176063 143.0596,85.332591 142.84919,85.460369 C 142.64534,85.581759 142.37246,85.642454 142.03053,85.642453 C 141.72148,85.642454 141.46832,85.572176 141.27106,85.431619 C 141.08036,85.284674 140.98502,85.061063 140.98502,84.760782 C 140.98502,84.505227 141.05077,84.297587 141.18229,84.137862 C 141.32037,83.978141 141.5012,83.859946 141.72477,83.783277 C 141.95491,83.700224 142.2015,83.645918 142.46452,83.62036 C 142.72754,83.594807 143.02015,83.582028 143.34236,83.582027 L 143.51989,83.582027 L 143.51989,83.879111 M 145.46529,88.057465 L 146.08668,88.057465 L 146.08668,85.211201 L 146.10641,85.211201 C 146.26422,85.530647 146.46806,85.770232 146.71794,85.929955 C 146.9678,86.083288 147.28672,86.159955 147.67468,86.159955 C 148.33881,86.159955 148.84841,85.923565 149.2035,85.450785 C 149.56515,84.971618 149.74597,84.355087 149.74598,83.601194 C 149.74597,82.815359 149.58487,82.202023 149.26268,81.761184 C 149.09171,81.531188 148.87472,81.355493 148.6117,81.234098 C 148.34867,81.106325 148.03634,81.042436 147.67468,81.042431 C 147.43795,81.042436 147.22753,81.077575 147.04342,81.147848 C 146.85931,81.211743 146.70478,81.294798 146.57985,81.397016 C 146.46148,81.499244 146.36614,81.601466 146.29381,81.703684 C 146.22148,81.799522 146.15244,81.901745 146.08668,82.010353 L 146.06695,82.048686 L 146.04723,82.048686 L 146.08668,81.157431 L 145.46529,81.157431 L 145.46529,88.057465 M 149.06541,83.601194 C 149.06541,83.863141 149.04239,84.112309 148.99637,84.348697 C 148.95033,84.585088 148.86814,84.802312 148.74978,85.000367 C 148.638,85.192035 148.48347,85.348563 148.28621,85.469952 C 148.09551,85.584954 147.85879,85.642454 147.57605,85.642453 C 147.31302,85.642454 147.08616,85.581759 146.89548,85.460369 C 146.70478,85.33898 146.55025,85.179258 146.4319,84.9812 C 146.31354,84.776755 146.22477,84.556338 146.16558,84.319947 C 146.11298,84.077169 146.08668,83.837586 146.08668,83.601194 C 146.08668,83.364806 146.11298,83.128416 146.16558,82.892023 C 146.22477,82.649248 146.31025,82.42883 146.42203,82.23077 C 146.54039,82.026329 146.69492,81.863412 146.88562,81.742018 C 147.08288,81.620632 147.31302,81.559938 147.57605,81.559933 C 147.85879,81.559938 148.09551,81.620632 148.28621,81.742018 C 148.48347,81.857022 148.638,82.01355 148.74978,82.211603 C 148.86814,82.403275 148.95033,82.617303 148.99637,82.853689 C 149.04239,83.090082 149.06541,83.33925 149.06541,83.601194 M 150.84004,88.057465 L 151.46144,88.057465 L 151.46144,85.211201 L 151.48116,85.211201 C 151.63897,85.530647 151.84281,85.770232 152.09269,85.929955 C 152.34255,86.083288 152.66147,86.159955 153.04943,86.159955 C 153.71356,86.159955 154.22316,85.923565 154.57825,85.450785 C 154.9399,84.971618 155.12072,84.355087 155.12073,83.601194 C 155.12072,82.815359 154.95962,82.202023 154.63743,81.761184 C 154.46646,81.531188 154.24947,81.355493 153.98645,81.234098 C 153.72342,81.106325 153.41109,81.042436 153.04943,81.042431 C 152.8127,81.042436 152.60228,81.077575 152.41817,81.147848 C 152.23406,81.211743 152.07953,81.294798 151.9546,81.397016 C 151.83623,81.499244 151.74089,81.601466 151.66856,81.703684 C 151.59623,81.799522 151.52719,81.901745 151.46144,82.010353 L 151.4417,82.048686 L 151.42198,82.048686 L 151.46144,81.157431 L 150.84004,81.157431 L 150.84004,88.057465 M 154.44016,83.601194 C 154.44016,83.863141 154.41715,84.112309 154.37112,84.348697 C 154.32508,84.585088 154.24289,84.802312 154.12453,85.000367 C 154.01275,85.192035 153.85822,85.348563 153.66096,85.469952 C 153.47026,85.584954 153.23354,85.642454 152.9508,85.642453 C 152.68777,85.642454 152.46091,85.581759 152.27023,85.460369 C 152.07953,85.33898 151.925,85.179258 151.80665,84.9812 C 151.68829,84.776755 151.59952,84.556338 151.54033,84.319947 C 151.48773,84.077169 151.46143,83.837586 151.46144,83.601194 C 151.46143,83.364806 151.48773,83.128416 151.54033,82.892023 C 151.59952,82.649248 151.685,82.42883 151.79679,82.23077 C 151.91514,82.026329 152.06967,81.863412 152.26037,81.742018 C 152.45763,81.620632 152.68777,81.559938 152.9508,81.559933 C 153.23354,81.559938 153.47026,81.620632 153.66096,81.742018 C 153.85822,81.857022 154.01275,82.01355 154.12453,82.211603 C 154.24289,82.403275 154.32508,82.617303 154.37112,82.853689 C 154.41715,83.090082 154.44016,83.33925 154.44016,83.601194 M 156.27397,86.044955 L 156.89536,86.044955 L 156.89536,78.85742 L 156.27397,78.85742 L 156.27397,86.044955 M 158.43157,86.044955 L 159.05296,86.044955 L 159.05296,81.157431 L 158.43157,81.157431 L 158.43157,86.044955 M 159.05296,79.049088 L 158.43157,79.049088 L 158.43157,79.854092 L 159.05296,79.854092 L 159.05296,79.049088 M 163.91314,81.234098 C 163.7619,81.182993 163.58435,81.13827 163.38052,81.099931 C 163.18325,81.061603 162.95638,81.042436 162.69995,81.042431 C 162.33171,81.042436 161.99307,81.106325 161.68401,81.234098 C 161.38154,81.355493 161.11852,81.531188 160.89496,81.761184 C 160.67795,81.9848 160.51028,82.25633 160.39192,82.575772 C 160.27356,82.888832 160.21438,83.230639 160.21438,83.601194 C 160.21438,83.946197 160.2637,84.275226 160.36233,84.588282 C 160.46754,84.89495 160.61878,85.166479 160.81605,85.402869 C 161.01989,85.639259 161.27305,85.824537 161.57552,85.958705 C 161.88457,86.092872 162.23307,86.159955 162.62104,86.159955 C 162.87749,86.159955 163.10762,86.147178 163.31147,86.121622 C 163.51531,86.102455 163.71586,86.057733 163.91314,85.987455 L 163.85395,85.422035 C 163.44627,85.568981 163.06817,85.642454 162.71967,85.642453 C 162.44349,85.642454 162.19033,85.591342 161.96019,85.489119 C 161.73663,85.380508 161.54593,85.233563 161.38812,85.048284 C 161.23031,84.856617 161.10866,84.639394 161.02318,84.396614 C 160.9377,84.147448 160.89496,83.882308 160.89496,83.601194 C 160.89496,82.994249 161.06263,82.502303 161.39799,82.125353 C 161.73333,81.748411 162.19691,81.559938 162.78872,81.559933 C 162.94652,81.559938 163.12077,81.582299 163.31147,81.627018 C 163.50215,81.671744 163.68628,81.732439 163.86381,81.809101 L 163.91314,81.234098 M 167.77509,86.044955 L 168.38662,86.044955 C 168.36688,85.891621 168.35374,85.744676 168.34716,85.60412 C 168.34059,85.463564 168.3373,85.268702 168.3373,85.019534 L 168.3373,82.863273 C 168.3373,82.224385 168.19921,81.761189 167.92304,81.473683 C 167.64686,81.186186 167.19644,81.042436 166.57176,81.042431 C 166.35477,81.042436 166.10161,81.077575 165.81229,81.147848 C 165.52296,81.211743 165.28295,81.288409 165.09226,81.377849 L 165.09226,81.962436 C 165.52625,81.694105 166.01942,81.559938 166.57176,81.559933 C 166.97945,81.559938 167.27205,81.662161 167.4496,81.866601 C 167.62714,82.071051 167.71591,82.387303 167.71591,82.815356 L 167.71591,83.064524 L 167.59756,83.064524 C 167.17671,83.064527 166.79862,83.080499 166.46327,83.112441 C 166.13448,83.144389 165.81886,83.214667 165.51639,83.323276 C 165.21391,83.43189 164.96733,83.60439 164.77663,83.840777 C 164.59252,84.077169 164.50047,84.390227 164.50047,84.779949 C 164.50047,84.914117 164.52019,85.057868 164.55964,85.211201 C 164.60567,85.364536 164.68786,85.514675 164.80623,85.66162 C 164.92459,85.802177 165.09555,85.920372 165.31912,86.016205 C 165.54268,86.112038 165.82215,86.159955 166.1575,86.159955 C 166.48628,86.159955 166.8019,86.080094 167.10439,85.920371 C 167.40686,85.760649 167.62385,85.540231 167.75536,85.259118 L 167.77509,85.259118 L 167.77509,86.044955 M 167.71591,83.879111 C 167.71591,84.077169 167.70276,84.265642 167.67645,84.444531 C 167.65673,84.623422 167.59755,84.805506 167.49892,84.990783 C 167.40686,85.176063 167.25562,85.332591 167.0452,85.460369 C 166.84136,85.581759 166.56848,85.642454 166.22655,85.642453 C 165.91749,85.642454 165.66433,85.572176 165.46707,85.431619 C 165.27638,85.284674 165.18103,85.061063 165.18103,84.760782 C 165.18103,84.505227 165.24678,84.297587 165.3783,84.137862 C 165.51639,83.978141 165.69721,83.859946 165.92079,83.783277 C 166.15093,83.700224 166.39751,83.645918 166.66053,83.62036 C 166.92355,83.594807 167.21617,83.582028 167.53837,83.582027 L 167.71591,83.582027 L 167.71591,83.879111 M 171.89041,81.157431 L 170.74627,81.157431 L 170.74627,79.767842 L 170.12487,79.978676 L 170.12487,81.157431 L 169.13855,81.157431 L 169.13855,81.674934 L 170.12487,81.674934 L 170.12487,84.530781 C 170.12487,84.805506 170.13474,85.032313 170.15447,85.211201 C 170.17419,85.390091 170.22022,85.553009 170.29255,85.699953 C 170.36489,85.84051 170.47996,85.952315 170.63778,86.035372 C 170.79558,86.118427 171.006,86.159955 171.26903,86.159955 C 171.40711,86.159955 171.5452,86.143983 171.68328,86.112038 C 171.82795,86.086483 171.94301,86.057733 172.02851,86.025788 L 171.98905,85.527452 C 171.89041,85.565786 171.79507,85.594537 171.70301,85.613703 C 171.61753,85.63287 171.52218,85.642454 171.41697,85.642453 C 171.18025,85.642454 171.00929,85.568981 170.90408,85.422035 C 170.79887,85.275091 170.74627,85.080229 170.74627,84.837449 L 170.74627,81.674934 L 171.89041,81.674934 L 171.89041,81.157431 M 172.93762,86.044955 L 173.55901,86.044955 L 173.55901,81.157431 L 172.93762,81.157431 L 172.93762,86.044955 M 173.55901,79.049088 L 172.93762,79.049088 L 172.93762,79.854092 L 173.55901,79.854092 L 173.55901,79.049088 M 174.71057,83.601194 C 174.71057,83.939808 174.75659,84.265642 174.84866,84.578698 C 174.94729,84.885367 175.09195,85.156896 175.28264,85.393285 C 175.47333,85.629676 175.71663,85.818149 176.01253,85.958705 C 176.315,86.092872 176.66351,86.159955 177.05804,86.159955 C 177.45257,86.159955 177.7978,86.092872 178.0937,85.958705 C 178.39617,85.818149 178.64275,85.629676 178.83345,85.393285 C 179.02414,85.150508 179.16551,84.875783 179.25757,84.569114 C 179.35619,84.262449 179.40552,83.939808 179.40552,83.601194 C 179.40552,83.262583 179.35619,82.939944 179.25757,82.633272 C 179.16551,82.320218 179.02414,82.045495 178.83345,81.809101 C 178.64275,81.572716 178.39617,81.387438 178.0937,81.253266 C 177.7978,81.112714 177.45257,81.042436 177.05804,81.042431 C 176.66351,81.042436 176.31829,81.112714 176.0224,81.253266 C 175.72649,81.387438 175.47991,81.575911 175.28264,81.818685 C 175.09195,82.055079 174.94729,82.326608 174.84866,82.633272 C 174.75659,82.939944 174.71057,83.262583 174.71057,83.601194 M 175.39114,83.601194 C 175.39113,83.013416 175.5358,82.527858 175.82513,82.144519 C 176.12103,81.7548 176.53199,81.559938 177.05804,81.559933 C 177.58408,81.559938 177.99177,81.7548 178.2811,82.144519 C 178.57699,82.527858 178.72495,83.013416 178.72495,83.601194 C 178.72495,84.188976 178.57699,84.677727 178.2811,85.06745 C 177.99177,85.450786 177.58408,85.642454 177.05804,85.642453 C 176.53199,85.642454 176.12103,85.450786 175.82513,85.06745 C 175.5358,84.677727 175.39113,84.188976 175.39114,83.601194 M 180.46998,86.044955 L 181.09138,86.044955 L 181.09138,83.342442 C 181.09138,83.125222 181.11768,82.914387 181.17029,82.709939 C 181.22289,82.499108 181.30508,82.307441 181.41687,82.134936 C 181.53523,81.95605 181.68975,81.815494 181.88045,81.713268 C 182.07772,81.611049 182.31114,81.559938 182.58075,81.559933 C 182.995,81.559938 183.29748,81.690911 183.48817,81.952852 C 183.67886,82.214802 183.77421,82.588553 183.77421,83.074107 L 183.77421,86.044955 L 184.3956,86.044955 L 184.3956,82.920774 C 184.3956,82.345775 184.25751,81.888967 183.98134,81.55035 C 183.70516,81.211743 183.27118,81.042436 182.67938,81.042431 C 182.43608,81.042436 182.21909,81.071186 182.0284,81.128681 C 181.84428,81.186186 181.68975,81.262854 181.56482,81.358683 C 181.44646,81.454521 181.34782,81.556744 181.26893,81.665351 C 181.19001,81.773967 181.11768,81.895356 181.05192,82.029519 L 181.0322,82.029519 L 181.0322,81.157431 L 180.43054,81.157431 C 180.45684,81.419382 180.46998,81.802717 180.46998,82.307437 L 180.46998,86.044955 M 185.42016,85.929955 C 185.81469,86.083288 186.28484,86.159955 186.83061,86.159955 C 187.03445,86.159955 187.2383,86.1344 187.44214,86.083288 C 187.64598,86.032177 187.83338,85.952315 188.00435,85.843704 C 188.18188,85.735092 188.32326,85.591342 188.42848,85.412452 C 188.53368,85.233563 188.58628,85.019535 188.58628,84.770365 C 188.58628,84.553144 188.54354,84.361476 188.45806,84.195362 C 188.37258,84.029253 188.2575,83.888696 188.11285,83.773694 C 187.97475,83.652307 187.82681,83.553278 187.66899,83.476609 C 187.51776,83.393556 187.32378,83.300917 187.08706,83.198691 C 186.7517,83.051749 186.50513,82.920776 186.34731,82.805773 C 186.18949,82.690776 186.11059,82.547025 186.11059,82.374521 C 186.11059,82.080635 186.20264,81.872995 186.38676,81.751601 C 186.57745,81.623827 186.84705,81.559938 187.19555,81.559933 C 187.36652,81.559938 187.55392,81.582299 187.75777,81.627018 C 187.96818,81.665355 188.1523,81.719661 188.31012,81.789935 L 188.36929,81.262849 C 188.16545,81.186186 187.94517,81.131881 187.70845,81.099931 C 187.47831,81.061603 187.28432,81.042436 187.12652,81.042431 C 186.90952,81.042436 186.70238,81.067992 186.50513,81.119098 C 186.31443,81.163826 186.14018,81.240493 185.98236,81.349099 C 185.83113,81.457716 185.70948,81.598272 185.61743,81.770768 C 185.53194,81.936884 185.48919,82.138135 185.4892,82.374521 C 185.48919,82.547025 185.52536,82.703554 185.59769,82.844106 C 185.67003,82.978277 185.76537,83.096472 185.88373,83.198691 C 186.00209,83.300917 186.12703,83.387167 186.25854,83.457442 C 186.39662,83.527723 186.57416,83.61078 186.79116,83.706611 C 187.16596,83.879113 187.44543,84.038836 187.62955,84.185779 C 187.81366,84.326337 187.90572,84.521199 187.90572,84.770365 C 187.90572,85.038701 187.79722,85.25273 187.58022,85.412452 C 187.36323,85.565786 187.10021,85.642454 186.79116,85.642453 C 186.33745,85.642454 185.90017,85.540231 185.47933,85.335785 L 185.42016,85.929955"
-       id="text2985" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2.95839429;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 12.925286,86.778391 L 13.286986,19.159668 L 58.155285,26.942569 L 57.772633,93.67717 L 12.925286,86.778391 z "
-       id="path2990" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
-       d="M 13.488233,19.049404 L 37.172883,11.162464 L 77.786022,19.420245 L 57.107048,26.22552 L 13.488233,19.049404 z "
-       id="path3877" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 57.997556,93.629361 L 77.486975,86.74764 L 77.759697,19.547174 L 58.5016,26.445081 L 57.997556,93.629361 z "
-       id="path3879"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 14.330613,38.606641 L 36.912066,32.135194 L 76.635736,40.056811 L 58.346077,46.531185 L 14.330613,38.606641 z "
-       id="path3881"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 14.150271,65.640082 L 36.731724,59.168636 L 77.314157,65.640929 L 57.787539,72.680481 L 14.150271,65.640082 z "
-       id="path3883"
-       sodipodi:nodetypes="ccccc" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 13.820355,86.361841 L 35.130498,79.541609 L 76.834867,85.878963"
-       id="path3887" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 34.866065,79.042658 L 35.146638,69.563169"
-       id="path3889" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 36.154699,58.803397 L 36.535174,42.88001"
-       id="path3891" />
-    <path
-       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 36.776858,31.759485 L 36.855284,23.494878"
-       id="path3893"
-       sodipodi:nodetypes="cc" />
-  </g>
-</svg>
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/lobster.ru b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/lobster.ru
deleted file mode 100644
index cc7ffca..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/lobster.ru
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'rack/lobster'
-
-use Rack::ShowExceptions
-run Rack::Lobster.new
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/protectedlobster.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/protectedlobster.rb
deleted file mode 100644
index 108b9d0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/protectedlobster.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require 'rack'
-require 'rack/lobster'
-
-lobster = Rack::Lobster.new
-
-protected_lobster = Rack::Auth::Basic.new(lobster) do |username, password|
-  'secret' == password
-end
-
-protected_lobster.realm = 'Lobster 2.0'
-
-pretty_protected_lobster = Rack::ShowStatus.new(Rack::ShowExceptions.new(protected_lobster))
-
-Rack::Handler::WEBrick.run pretty_protected_lobster, :Port => 9292
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/protectedlobster.ru b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/protectedlobster.ru
deleted file mode 100644
index 29a9de3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/example/protectedlobster.ru
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'rack/lobster'
-
-use Rack::ShowExceptions
-use Rack::Auth::Basic do |username, password|
-  'secret' == password
-end
-
-run Rack::Lobster.new
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack.rb
deleted file mode 100644
index 62a1b35..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright (C) 2007, 2008 Christian Neukirchen <purl.org/net/chneukirchen>
-#
-# Rack is freely distributable under the terms of an MIT-style license.
-# See COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-$: << File.expand_path(File.dirname(__FILE__))
-
-
-# The Rack main module, serving as a namespace for all core Rack
-# modules and classes.
-#
-# All modules meant for use in your application are <tt>autoload</tt>ed here,
-# so it should be enough just to <tt>require rack.rb</tt> in your code.
-
-module Rack
-  # The Rack protocol version number implemented.
-  VERSION = [0,1]
-
-  # Return the Rack protocol version as a dotted string.
-  def self.version
-    VERSION.join(".")
-  end
-
-  # Return the Rack release as a dotted string.
-  def self.release
-    "0.4"
-  end
-
-  autoload :Builder, "rack/builder"
-  autoload :Cascade, "rack/cascade"
-  autoload :CommonLogger, "rack/commonlogger"
-  autoload :File, "rack/file"
-  autoload :Deflater, "rack/deflater"
-  autoload :Directory, "rack/directory"
-  autoload :ForwardRequest, "rack/recursive"
-  autoload :Handler, "rack/handler"
-  autoload :Lint, "rack/lint"
-  autoload :Recursive, "rack/recursive"
-  autoload :Reloader, "rack/reloader"
-  autoload :ShowExceptions, "rack/showexceptions"
-  autoload :ShowStatus, "rack/showstatus"
-  autoload :Static, "rack/static"
-  autoload :URLMap, "rack/urlmap"
-  autoload :Utils, "rack/utils"
-
-  autoload :MockRequest, "rack/mock"
-  autoload :MockResponse, "rack/mock"
-
-  autoload :Request, "rack/request"
-  autoload :Response, "rack/response"
-
-  module Auth
-    autoload :Basic, "rack/auth/basic"
-    autoload :AbstractRequest, "rack/auth/abstract/request"
-    autoload :AbstractHandler, "rack/auth/abstract/handler"
-    autoload :OpenID, "rack/auth/openid"
-    module Digest
-      autoload :MD5, "rack/auth/digest/md5"
-      autoload :Nonce, "rack/auth/digest/nonce"
-      autoload :Params, "rack/auth/digest/params"
-      autoload :Request, "rack/auth/digest/request"
-    end
-  end
-
-  module Session
-    autoload :Cookie, "rack/session/cookie"
-    autoload :Pool, "rack/session/pool"
-    autoload :Memcache, "rack/session/memcache"
-  end
-
-  # *Adapters* connect Rack with third party web frameworks.
-  #
-  # Rack includes an adapter for Camping, see README for other
-  # frameworks supporting Rack in their code bases.
-  #
-  # Refer to the submodules for framework-specific calling details.
-
-  module Adapter
-    autoload :Camping, "rack/adapter/camping"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/adapter/camping.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/adapter/camping.rb
deleted file mode 100644
index b910a13..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/adapter/camping.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-module Rack
-  module Adapter
-    class Camping
-      def initialize(app)
-        @app = app
-      end
-
-      def call(env)
-        env["PATH_INFO"] ||= ""
-        env["SCRIPT_NAME"] ||= ""
-        controller = @app.run(env['rack.input'], env)
-        h = controller.headers
-        h.each_pair do |k,v|
-          if v.kind_of? URI
-            h[k] = v.to_s
-          end
-        end
-        [controller.status, controller.headers, controller.body]
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/abstract/handler.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/abstract/handler.rb
deleted file mode 100644
index b213eac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/abstract/handler.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-module Rack
-  module Auth
-    # Rack::Auth::AbstractHandler implements common authentication functionality.
-    #
-    # +realm+ should be set for all handlers.
-
-    class AbstractHandler
-
-      attr_accessor :realm
-
-      def initialize(app, &authenticator)
-        @app, @authenticator = app, authenticator
-      end
-
-
-      private
-
-      def unauthorized(www_authenticate = challenge)
-        return [ 401, { 'WWW-Authenticate' => www_authenticate.to_s }, [] ]
-      end
-
-      def bad_request
-        [ 400, {}, [] ]
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/abstract/request.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/abstract/request.rb
deleted file mode 100644
index 1d9ccec..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/abstract/request.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Rack
-  module Auth
-    class AbstractRequest
-
-      def initialize(env)
-        @env = env
-      end
-
-      def provided?
-        !authorization_key.nil?
-      end
-
-      def parts
-        @parts ||= @env[authorization_key].split(' ', 2)
-      end
-
-      def scheme
-        @scheme ||= parts.first.downcase.to_sym
-      end
-
-      def params
-        @params ||= parts.last
-      end
-
-
-      private
-
-      AUTHORIZATION_KEYS = ['HTTP_AUTHORIZATION', 'X-HTTP_AUTHORIZATION', 'X_HTTP_AUTHORIZATION']
-
-      def authorization_key
-        @authorization_key ||= AUTHORIZATION_KEYS.detect { |key| @env.has_key?(key) }
-      end
-
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/basic.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/basic.rb
deleted file mode 100644
index 9557224..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/basic.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-require 'rack/auth/abstract/handler'
-require 'rack/auth/abstract/request'
-
-module Rack
-  module Auth
-    # Rack::Auth::Basic implements HTTP Basic Authentication, as per RFC 2617.
-    #
-    # Initialize with the Rack application that you want protecting,
-    # and a block that checks if a username and password pair are valid.
-    #
-    # See also: <tt>example/protectedlobster.rb</tt>
-
-    class Basic < AbstractHandler
-
-      def call(env)
-        auth = Basic::Request.new(env)
-
-        return unauthorized unless auth.provided?
-
-        return bad_request unless auth.basic?
-
-        if valid?(auth)
-          env['REMOTE_USER'] = auth.username
-
-          return @app.call(env)
-        end
-
-        unauthorized
-      end
-
-
-      private
-
-      def challenge
-        'Basic realm="%s"' % realm
-      end
-
-      def valid?(auth)
-        @authenticator.call(*auth.credentials)
-      end
-
-      class Request < Auth::AbstractRequest
-        def basic?
-          :basic == scheme
-        end
-
-        def credentials
-          @credentials ||= params.unpack("m*").first.split(/:/, 2)
-        end
-
-        def username
-          credentials.first
-        end
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/md5.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/md5.rb
deleted file mode 100644
index 6d2bd29..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/md5.rb
+++ /dev/null
@@ -1,124 +0,0 @@
-require 'rack/auth/abstract/handler'
-require 'rack/auth/digest/request'
-require 'rack/auth/digest/params'
-require 'rack/auth/digest/nonce'
-require 'digest/md5'
-
-module Rack
-  module Auth
-    module Digest
-      # Rack::Auth::Digest::MD5 implements the MD5 algorithm version of
-      # HTTP Digest Authentication, as per RFC 2617.
-      #
-      # Initialize with the [Rack] application that you want protecting,
-      # and a block that looks up a plaintext password for a given username.
-      #
-      # +opaque+ needs to be set to a constant base64/hexadecimal string.
-      #
-      class MD5 < AbstractHandler
-
-        attr_accessor :opaque
-
-        attr_writer :passwords_hashed
-
-        def initialize(app)
-          super
-          @passwords_hashed = nil
-        end
-
-        def passwords_hashed?
-          !!@passwords_hashed
-        end
-
-        def call(env)
-          auth = Request.new(env)
-
-          unless auth.provided?
-            return unauthorized
-          end
-
-          if !auth.digest? || !auth.correct_uri? || !valid_qop?(auth)
-            return bad_request
-          end
-
-          if valid?(auth)
-            if auth.nonce.stale?
-              return unauthorized(challenge(:stale => true))
-            else
-              env['REMOTE_USER'] = auth.username
-
-              return @app.call(env)
-            end
-          end
-
-          unauthorized
-        end
-
-
-        private
-
-        QOP = 'auth'.freeze
-
-        def params(hash = {})
-          Params.new do |params|
-            params['realm'] = realm
-            params['nonce'] = Nonce.new.to_s
-            params['opaque'] = H(opaque)
-            params['qop'] = QOP
-
-            hash.each { |k, v| params[k] = v }
-          end
-        end
-
-        def challenge(hash = {})
-          "Digest #{params(hash)}"
-        end
-
-        def valid?(auth)
-          valid_opaque?(auth) && valid_nonce?(auth) && valid_digest?(auth)
-        end
-
-        def valid_qop?(auth)
-          QOP == auth.qop
-        end
-
-        def valid_opaque?(auth)
-          H(opaque) == auth.opaque
-        end
-
-        def valid_nonce?(auth)
-          auth.nonce.valid?
-        end
-
-        def valid_digest?(auth)
-          digest(auth, @authenticator.call(auth.username)) == auth.response
-        end
-
-        def md5(data)
-          ::Digest::MD5.hexdigest(data)
-        end
-
-        alias :H :md5
-
-        def KD(secret, data)
-          H([secret, data] * ':')
-        end
-
-        def A1(auth, password)
-          [ auth.username, auth.realm, password ] * ':'
-        end
-
-        def A2(auth)
-          [ auth.method, auth.uri ] * ':'
-        end
-
-        def digest(auth, password)
-          password_hash = passwords_hashed? ? password : H(A1(auth, password))
-
-          KD(password_hash, [ auth.nonce, auth.nc, auth.cnonce, QOP, H(A2(auth)) ] * ':')
-        end
-
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/nonce.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/nonce.rb
deleted file mode 100644
index dbe109f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/nonce.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require 'digest/md5'
-
-module Rack
-  module Auth
-    module Digest
-      # Rack::Auth::Digest::Nonce is the default nonce generator for the
-      # Rack::Auth::Digest::MD5 authentication handler.
-      #
-      # +private_key+ needs to set to a constant string.
-      #
-      # +time_limit+ can be optionally set to an integer (number of seconds),
-      # to limit the validity of the generated nonces.
-
-      class Nonce
-
-        class << self
-          attr_accessor :private_key, :time_limit
-        end
-
-        def self.parse(string)
-          new(*string.unpack("m*").first.split(' ', 2))
-        end
-
-        def initialize(timestamp = Time.now, given_digest = nil)
-          @timestamp, @given_digest = timestamp.to_i, given_digest
-        end
-
-        def to_s
-          [([ @timestamp, digest ] * ' ')].pack("m*").strip
-        end
-
-        def digest
-          ::Digest::MD5.hexdigest([ @timestamp, self.class.private_key ] * ':')
-        end
-
-        def valid?
-          digest == @given_digest
-        end
-
-        def stale?
-          !self.class.time_limit.nil? && (@timestamp - Time.now.to_i) < self.class.time_limit
-        end
-
-        def fresh?
-          !stale?
-        end
-
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/params.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/params.rb
deleted file mode 100644
index 730e2ef..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/params.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-module Rack
-  module Auth
-    module Digest
-      class Params < Hash
-
-        def self.parse(str)
-          split_header_value(str).inject(new) do |header, param|
-            k, v = param.split('=', 2)
-            header[k] = dequote(v)
-            header
-          end
-        end
-
-        def self.dequote(str) # From WEBrick::HTTPUtils
-          ret = (/\A"(.*)"\Z/ =~ str) ? $1 : str.dup
-          ret.gsub!(/\\(.)/, "\\1")
-          ret
-        end
-
-        def self.split_header_value(str)
-          str.scan( /(\w+\=(?:"[^\"]+"|[^,]+))/n ).collect{ |v| v[0] }
-        end
-
-        def initialize
-          super
-
-          yield self if block_given?
-        end
-
-        def [](k)
-          super k.to_s
-        end
-
-        def []=(k, v)
-          super k.to_s, v.to_s
-        end
-
-        UNQUOTED = ['qop', 'nc', 'stale']
-
-        def to_s
-          inject([]) do |parts, (k, v)|
-            parts << "#{k}=" + (UNQUOTED.include?(k) ? v.to_s : quote(v))
-            parts
-          end.join(', ')
-        end
-
-        def quote(str) # From WEBrick::HTTPUtils
-          '"' << str.gsub(/[\\\"]/o, "\\\1") << '"'
-        end
-
-      end
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/request.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/request.rb
deleted file mode 100644
index a022754..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/digest/request.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require 'rack/auth/abstract/request'
-require 'rack/auth/digest/params'
-require 'rack/auth/digest/nonce'
-
-module Rack
-  module Auth
-    module Digest
-      class Request < Auth::AbstractRequest
-
-        def method
-          @env['REQUEST_METHOD']
-        end
-
-        def digest?
-          :digest == scheme
-        end
-
-        def correct_uri?
-          @env['PATH_INFO'] == uri
-        end
-
-        def nonce
-          @nonce ||= Nonce.parse(params['nonce'])
-        end
-
-        def params
-          @params ||= Params.parse(parts.last)
-        end
-
-        def method_missing(sym)
-          if params.has_key? key = sym.to_s
-            return params[key]
-          end
-          super
-        end
-
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/openid.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/openid.rb
deleted file mode 100644
index 2bd064e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/auth/openid.rb
+++ /dev/null
@@ -1,437 +0,0 @@
-# AUTHOR: blink <blinketje at gmail.com>; blink#ruby-lang at irc.freenode.net
-
-gem 'ruby-openid', '~> 2' if defined? Gem
-require 'rack/auth/abstract/handler' #rack
-require 'uri' #std
-require 'pp' #std
-require 'openid' #gem
-require 'openid/extension' #gem
-require 'openid/store/memory' #gem
-
-module Rack
-  module Auth
-    # Rack::Auth::OpenID provides a simple method for permitting
-    # openid based logins. It requires the ruby-openid library from
-    # janrain to operate, as well as a rack method of session management.
-    #
-    # The ruby-openid home page is at http://openidenabled.com/ruby-openid/.
-    #
-    # The OpenID specifications can be found at
-    # http://openid.net/specs/openid-authentication-1_1.html
-    # and
-    # http://openid.net/specs/openid-authentication-2_0.html. Documentation
-    # for published OpenID extensions and related topics can be found at
-    # http://openid.net/developers/specs/.
-    #
-    # It is recommended to read through the OpenID spec, as well as
-    # ruby-openid's documentation, to understand what exactly goes on. However
-    # a setup as simple as the presented examples is enough to provide
-    # functionality.
-    #
-    # This library strongly intends to utilize the OpenID 2.0 features of the
-    # ruby-openid library, while maintaining OpenID 1.0 compatiblity.
-    #
-    # All responses from this rack application will be 303 redirects unless an
-    # error occurs, with the exception of an authentication request requiring
-    # an HTML form submission.
-    #
-    # NOTE: Extensions are not currently supported by this implimentation of
-    # the OpenID rack application due to the complexity of the current
-    # ruby-openid extension handling.
-    #
-    # NOTE: Due to the amount of data that this library stores in the
-    # session, Rack::Session::Cookie may fault.
-    class OpenID < AbstractHandler
-      class NoSession < RuntimeError; end
-      # Required for ruby-openid
-      OIDStore = ::OpenID::Store::Memory.new
-      HTML = '<html><head><title>%s</title></head><body>%s</body></html>'
-
-      # A Hash of options is taken as it's single initializing
-      # argument. For example:
-      #
-      #   simple_oid = OpenID.new('http://mysite.com/')
-      #
-      #   return_oid = OpenID.new('http://mysite.com/', {
-      #     :return_to => 'http://mysite.com/openid'
-      #   })
-      #
-      #   page_oid = OpenID.new('http://mysite.com/',
-      #     :login_good => 'http://mysite.com/auth_good'
-      #   )
-      #
-      #   complex_oid = OpenID.new('http://mysite.com/',
-      #     :return_to => 'http://mysite.com/openid',
-      #     :login_good => 'http://mysite.com/user/preferences',
-      #     :auth_fail => [500, {'Content-Type'=>'text/plain'},
-      #       'Unable to negotiate with foreign server.'],
-      #     :immediate => true,
-      #     :extensions => {
-      #       ::OpenID::SReg => [['email'],['nickname']]
-      #     }
-      #   )
-      #
-      # = Arguments
-      #
-      # The first argument is the realm, identifying the site they are trusting
-      # with their identity. This is required.
-      #
-      # NOTE: In OpenID 1.x, the realm or trust_root is optional and the
-      # return_to url is required. As this library strives tward ruby-openid
-      # 2.0, and OpenID 2.0 compatibiliy, the realm is required and return_to
-      # is optional. However, this implimentation is still backwards compatible
-      # with OpenID 1.0 servers.
-      #
-      # The optional second argument is a hash of options.
-      #
-      # == Options
-      #
-      # <tt>:return_to</tt> defines the url to return to after the client
-      # authenticates with the openid service provider. This url should point
-      # to where Rack::Auth::OpenID is mounted. If <tt>:return_to</tt> is not
-      # provided, :return_to will be the current url including all query
-      # parameters.
-      #
-      # <tt>:session_key</tt> defines the key to the session hash in the env.
-      # It defaults to 'rack.session'.
-      #
-      # <tt>:openid_param</tt> defines at what key in the request parameters to
-      # find the identifier to resolve. As per the 2.0 spec, the default is
-      # 'openid_identifier'.
-      #
-      # <tt>:immediate</tt> as true will make immediate type of requests the
-      # default. See OpenID specification documentation.
-      #
-      # === URL options
-      #
-      # <tt>:login_good</tt> is the url to go to after the authentication
-      # process has completed.
-      #
-      # <tt>:login_fail</tt> is the url to go to after the authentication
-      # process has failed.
-      #
-      # <tt>:login_quit</tt> is the url to go to after the authentication
-      # process
-      # has been cancelled.
-      #
-      # === Response options
-      #
-      # <tt>:no_session</tt> should be a rack response to be returned if no or
-      # an incompatible session is found.
-      #
-      # <tt>:auth_fail</tt> should be a rack response to be returned if an
-      # OpenID::DiscoveryFailure occurs. This is typically due to being unable
-      # to access the identity url or identity server.
-      #
-      # <tt>:error</tt> should be a rack response to return if any other
-      # generic error would occur and <tt>options[:catch_errors]</tt> is true.
-      #
-      # === Extensions
-      #
-      # <tt>:extensions</tt> should be a hash of openid extension
-      # implementations. The key should be the extension main module, the value
-      # should be an array of arguments for extension::Request.new
-      #
-      # The hash is iterated over and passed to #add_extension for processing.
-      # Please see #add_extension for further documentation.
-      def initialize(realm, options={})
-        @realm = realm
-        realm = URI(realm)
-        if realm.path.empty?
-          raise ArgumentError, "Invalid realm path: '#{realm.path}'"
-        elsif not realm.absolute?
-          raise ArgumentError, "Realm '#{@realm}' not absolute"
-        end
-
-        [:return_to, :login_good, :login_fail, :login_quit].each do |key|
-          if options.key? key and luri = URI(options[key])
-            if !luri.absolute?
-              raise ArgumentError, ":#{key} is not an absolute uri: '#{luri}'"
-            end
-          end
-        end
-
-        if options[:return_to] and ruri = URI(options[:return_to])
-          if ruri.path.empty?
-            raise ArgumentError, "Invalid return_to path: '#{ruri.path}'"
-          elsif realm.path != ruri.path[0, realm.path.size]
-            raise ArgumentError, 'return_to not within realm.' \
-          end
-        end
-
-        # TODO: extension support
-        if extensions = options.delete(:extensions)
-          extensions.each do |ext, args|
-            add_extension ext, *args
-          end
-        end
-
-        @options = {
-          :session_key => 'rack.session',
-          :openid_param => 'openid_identifier',
-          #:return_to, :login_good, :login_fail, :login_quit
-          #:no_session, :auth_fail, :error
-          :store => OIDStore,
-          :immediate => false,
-          :anonymous => false,
-          :catch_errors => false
-        }.merge(options)
-        @extensions = {}
-      end
-
-      attr_reader :options, :extensions
-
-      # It sets up and uses session data at <tt>:openid</tt> within the
-      # session. It sets up the ::OpenID::Consumer using the store specified by
-      # <tt>options[:store]</tt>.
-      #
-      # If the parameter specified by <tt>options[:openid_param]</tt> is
-      # present, processing is passed to #check and the result is returned.
-      #
-      # If the parameter 'openid.mode' is set, implying a followup from the
-      # openid server, processing is passed to #finish and the result is
-      # returned.
-      #
-      # If neither of these conditions are met, a 400 error is returned.
-      #
-      # If an error is thrown and <tt>options[:catch_errors]</tt> is false, the
-      # exception will be reraised. Otherwise a 500 error is returned.
-      def call(env)
-        env['rack.auth.openid'] = self
-        session = env[@options[:session_key]]
-        unless session and session.is_a? Hash
-          raise(NoSession, 'No compatible session')
-        end
-        # let us work in our own namespace...
-        session = (session[:openid] ||= {})
-        unless session and session.is_a? Hash
-          raise(NoSession, 'Incompatible session')
-        end
-
-        request = Rack::Request.new env
-        consumer = ::OpenID::Consumer.new session, @options[:store]
-
-        if request.params['openid.mode']
-          finish consumer, session, request
-        elsif request.params[@options[:openid_param]]
-          check consumer, session, request
-        else
-          env['rack.errors'].puts "No valid params provided."
-          bad_request
-        end
-      rescue NoSession
-        env['rack.errors'].puts($!.message, *$@)
-
-        @options. ### Missing or incompatible session
-          fetch :no_session, [ 500,
-            {'Content-Type'=>'text/plain'},
-            $!.message ]
-      rescue
-        env['rack.errors'].puts($!.message, *$@)
-
-        if not @options[:catch_error]
-          raise($!)
-        end
-        @options.
-          fetch :error, [ 500,
-            {'Content-Type'=>'text/plain'},
-            'OpenID has encountered an error.' ]
-      end
-
-      # As the first part of OpenID consumer action, #check retrieves the data
-      # required for completion.
-      #
-      # * <tt>session[:openid][:openid_param]</tt> is set to the submitted
-      #   identifier to be authenticated.
-      # * <tt>session[:openid][:site_return]</tt> is set as the request's
-      #   HTTP_REFERER, unless already set.
-      # * <tt>env['rack.auth.openid.request']</tt> is the openid checkid
-      #   request instance.
-      def check(consumer, session, req)
-        session[:openid_param]  = req.params[@options[:openid_param]]
-        oid = consumer.begin(session[:openid_param], @options[:anonymous])
-        pp oid if $DEBUG
-        req.env['rack.auth.openid.request'] = oid
-
-        session[:site_return] ||= req.env['HTTP_REFERER']
-
-        # SETUP_NEEDED check!
-        # see OpenID::Consumer::CheckIDRequest docs
-        query_args = [@realm, *@options.values_at(:return_to, :immediate)]
-        query_args[1] ||= req.url
-        query_args[2] = false if session.key? :setup_needed
-        pp query_args if $DEBUG
-
-        ## Extension support
-        extensions.each do |ext,args|
-          oid.add_extension ext::Request.new(*args)
-        end
-
-        if oid.send_redirect?(*query_args)
-          redirect = oid.redirect_url(*query_args)
-          if $DEBUG
-            pp redirect
-            pp Rack::Utils.parse_query(URI(redirect).query)
-          end
-          [ 303, {'Location'=>redirect}, [] ]
-        else
-          # check on 'action' option.
-          formbody = oid.form_markup(*query_args)
-          if $DEBUG
-            pp formbody
-          end
-          body = HTML % ['Confirm...', formbody]
-          [ 200, {'Content-Type'=>'text/html'}, body.to_a ]
-        end
-      rescue ::OpenID::DiscoveryFailure => e
-        # thrown from inside OpenID::Consumer#begin by yadis stuff
-        req.env['rack.errors'].puts($!.message, *$@)
-
-        @options. ### Foreign server failed
-          fetch :auth_fail, [ 503,
-            {'Content-Type'=>'text/plain'},
-            'Foreign server failure.' ]
-      end
-
-      # This is the final portion of authentication. Unless any errors outside
-      # of specification occur, a 303 redirect will be returned with Location
-      # determined by the OpenID response type. If none of the response type
-      # :login_* urls are set, the redirect will be set to
-      # <tt>session[:openid][:site_return]</tt>. If
-      # <tt>session[:openid][:site_return]</tt> is unset, the realm will be
-      # used.
-      #
-      # Any messages from OpenID's response are appended to the 303 response
-      # body.
-      #
-      # Data gathered from extensions are stored in session[:openid] with the
-      # extension's namespace uri as the key.
-      #
-      # * <tt>env['rack.auth.openid.response']</tt> is the openid response.
-      #
-      # The four valid possible outcomes are:
-      # * failure: <tt>options[:login_fail]</tt> or
-      #   <tt>session[:site_return]</tt> or the realm
-      #   * <tt>session[:openid]</tt> is cleared and any messages are send to
-      #     rack.errors
-      #   * <tt>session[:openid]['authenticated']</tt> is <tt>false</tt>
-      # * success: <tt>options[:login_good]</tt> or
-      #   <tt>session[:site_return]</tt> or the realm
-      #   * <tt>session[:openid]</tt> is cleared
-      #   * <tt>session[:openid]['authenticated']</tt> is <tt>true</tt>
-      #   * <tt>session[:openid]['identity']</tt> is the actual identifier
-      #   * <tt>session[:openid]['identifier']</tt> is the pretty identifier
-      # * cancel: <tt>options[:login_good]</tt> or
-      #   <tt>session[:site_return]</tt> or the realm
-      #   * <tt>session[:openid]</tt> is cleared
-      #   * <tt>session[:openid]['authenticated']</tt> is <tt>false</tt>
-      # * setup_needed: resubmits the authentication request. A flag is set for
-      #   non-immediate handling.
-      #   * <tt>session[:openid][:setup_needed]</tt> is set to <tt>true</tt>,
-      #     which will prevent immediate style openid authentication.
-      def finish(consumer, session, req)
-        oid = consumer.complete(req.params, req.url)
-        pp oid if $DEBUG
-        req.env['rack.auth.openid.response'] = oid
-
-        goto = session.fetch :site_return, @realm
-        body = []
-
-        case oid.status
-        when ::OpenID::Consumer::FAILURE
-          session.clear
-          session['authenticated'] = false
-          req.env['rack.errors'].puts oid.message
-
-          goto = @options[:login_fail] if @option.key? :login_fail
-          body << "Authentication unsuccessful.\n"
-        when ::OpenID::Consumer::SUCCESS
-          session.clear
-
-          ## Extension support
-          extensions.each do |ext, args|
-            session[ext::NS_URI] = ext::Response.
-              from_success_response(oid).
-              get_extension_args
-          end
-
-          session['authenticated'] = true
-          # Value for unique identification and such
-          session['identity'] = oid.identity_url
-          # Value for display and UI labels
-          session['identifier'] = oid.display_identifier
-
-          goto = @options[:login_good] if @options.key? :login_good
-          body << "Authentication successful.\n"
-        when ::OpenID::Consumer::CANCEL
-          session.clear
-          session['authenticated'] = false
-
-          goto = @options[:login_fail] if @option.key? :login_fail
-          body << "Authentication cancelled.\n"
-        when ::OpenID::Consumer::SETUP_NEEDED
-          session[:setup_needed] = true
-          unless o_id = session[:openid_param]
-            raise('Required values missing.')
-          end
-
-          goto = req.script_name+
-            '?'+ at options[:openid_param]+
-            '='+o_id
-          body << "Reauthentication required.\n"
-        end
-        body << oid.message if oid.message
-        [ 303, {'Location'=>goto}, body]
-      end
-
-      # The first argument should be the main extension module.
-      # The extension module should contain the constants:
-      #   * class Request, with OpenID::Extension as an ancestor
-      #   * class Response, with OpenID::Extension as an ancestor
-      #   * string NS_URI, which defines the namespace of the extension, should
-      #     be an absolute http uri
-      #
-      # All trailing arguments will be passed to extension::Request.new in
-      # #check.
-      # The openid response will be passed to
-      # extension::Response#from_success_response, #get_extension_args will be
-      # called on the result to attain the gathered data.
-      #
-      # This method returns the key at which the response data will be found in
-      # the session, which is the namespace uri by default.
-      def add_extension ext, *args
-        if not ext.is_a? Module
-          raise TypeError, "#{ext.inspect} is not a module"
-        elsif not (m = %w'Request Response NS_URI' - ext.constants).empty?
-          raise ArgumentError, "#{ext.inspect} missing #{m*', '}"
-        end
-
-        consts = [ext::Request, ext::Response]
-
-        if not consts.all?{|c| c.is_a? Class }
-          raise TypeError, "#{ext.inspect}'s Request or Response is not a class"
-        elsif not consts.all?{|c| ::OpenID::Extension > c }
-          raise ArgumentError, "#{ext.inspect}'s Request or Response not a decendant of OpenID::Extension"
-        end
-
-        if not ext::NS_URI.is_a? String
-          raise TypeError, "#{ext.inspect}'s NS_URI is not a string"
-        elsif not uri = URI(ext::NS_URI)
-          raise ArgumentError, "#{ext.inspect}'s NS_URI is not a valid uri"
-        elsif not uri.scheme =~ /^https?$/
-          raise ArgumentError, "#{ext.inspect}'s NS_URI is not an http uri"
-        elsif not uri.absolute?
-          raise ArgumentError, "#{ext.inspect}'s NS_URI is not and absolute uri"
-        end
-        @extensions[ext] = args
-        return ext::NS_URI
-      end
-
-      # A conveniance method that returns the namespace of all current
-      # extensions used by this instance.
-      def extension_namespaces
-        @extensions.keys.map{|e|e::NS_URI}
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/builder.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/builder.rb
deleted file mode 100644
index e708b52..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/builder.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-module Rack
-  # Rack::Builder implements a small DSL to iteratively construct Rack
-  # applications.
-  #
-  # Example:
-  #
-  #  app = Rack::Builder.new {
-  #    use Rack::CommonLogger
-  #    use Rack::ShowExceptions
-  #    map "/lobster" do
-  #      use Rack::Lint
-  #      run Rack::Lobster.new
-  #    end
-  #  }
-  #
-  # +use+ adds a middleware to the stack, +run+ dispatches to an application.
-  # You can use +map+ to construct a Rack::URLMap in a convenient way.
-
-  class Builder
-    def initialize(&block)
-      @ins = []
-      instance_eval(&block) if block_given?
-    end
-
-    def use(middleware, *args, &block)
-      @ins << if block_given?
-        lambda { |app| middleware.new(app, *args, &block) }
-      else
-        lambda { |app| middleware.new(app, *args) }
-      end
-    end
-
-    def run(app)
-      @ins << app #lambda { |nothing| app }
-    end
-
-    def map(path, &block)
-      if @ins.last.kind_of? Hash
-        @ins.last[path] = Rack::Builder.new(&block).to_app
-      else
-        @ins << {}
-        map(path, &block)
-      end
-    end
-
-    def to_app
-      @ins[-1] = Rack::URLMap.new(@ins.last)  if Hash === @ins.last
-      inner_app = @ins.last
-      @ins[0...-1].reverse.inject(inner_app) { |a, e| e.call(a) }
-    end
-
-    def call(env)
-      to_app.call(env)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/cascade.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/cascade.rb
deleted file mode 100644
index a038aa1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/cascade.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-module Rack
-  # Rack::Cascade tries an request on several apps, and returns the
-  # first response that is not 404 (or in a list of configurable
-  # status codes).
-
-  class Cascade
-    attr_reader :apps
-
-    def initialize(apps, catch=404)
-      @apps = apps
-      @catch = [*catch]
-    end
-
-    def call(env)
-      status = headers = body = nil
-      raise ArgumentError, "empty cascade"  if @apps.empty?
-      @apps.each { |app|
-        begin
-          status, headers, body = app.call(env)
-          break  unless @catch.include?(status.to_i)
-        end
-      }
-      [status, headers, body]
-    end
-
-    def add app
-      @apps << app
-    end
-
-    def include? app
-      @apps.include? app
-    end
-
-    alias_method :<<, :add
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/commonlogger.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/commonlogger.rb
deleted file mode 100644
index 5e68ac6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/commonlogger.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-module Rack
-  # Rack::CommonLogger forwards every request to an +app+ given, and
-  # logs a line in the Apache common log format to the +logger+, or
-  # rack.errors by default.
-
-  class CommonLogger
-    def initialize(app, logger=nil)
-      @app = app
-      @logger = logger
-    end
-
-    def call(env)
-      dup._call(env)
-    end
-
-    def _call(env)
-      @env = env
-      @logger ||= self
-      @time = Time.now
-      @status, @header, @body = @app.call(env)
-      [@status, @header, self]
-    end
-
-    def close
-      @body.close if @body.respond_to? :close
-    end
-
-    # By default, log to rack.errors.
-    def <<(str)
-      @env["rack.errors"].write(str)
-      @env["rack.errors"].flush
-    end
-
-    def each
-      length = 0
-      @body.each { |part|
-        length += part.size
-        yield part
-      }
-
-      @now = Time.now
-
-      # Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
-      # lilith.local - - [07/Aug/2006 23:58:02] "GET / HTTP/1.1" 500 -
-      #             %{%s - %s [%s] "%s %s%s %s" %d %s\n} %
-      @logger << %{%s - %s [%s] "%s %s%s %s" %d %s %0.4f\n} %
-        [
-         @env['HTTP_X_FORWARDED_FOR'] || @env["REMOTE_ADDR"] || "-",
-         @env["REMOTE_USER"] || "-",
-         @now.strftime("%d/%b/%Y %H:%M:%S"),
-         @env["REQUEST_METHOD"],
-         @env["PATH_INFO"],
-         @env["QUERY_STRING"].empty? ? "" : "?"+ at env["QUERY_STRING"],
-         @env["HTTP_VERSION"],
-         @status.to_s[0..3],
-         (length.zero? ? "-" : length.to_s),
-         @now - @time
-        ]
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/deflater.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/deflater.rb
deleted file mode 100644
index 1341eec..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/deflater.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-require "zlib"
-require "stringio"
-
-module Rack
-
-class Deflater
-  def initialize(app)
-    @app = app
-  end
-
-  def call(env)
-    status, headers, body = @app.call(env)
-
-    request = Request.new(env)
-
-    encoding = Utils.select_best_encoding(%w(gzip deflate identity), request.accept_encoding)
-
-    case encoding
-    when "gzip"
-      mtime = headers["Last-Modified"] || Time.now
-      [status, headers.merge("Content-Encoding" => "gzip"), self.class.gzip(body, mtime)]
-    when "deflate"
-      [status, headers.merge("Content-Encoding" => "deflate"), self.class.deflate(body)]
-    when "identity"
-      [status, headers, body]
-    when nil
-      message = "An acceptable encoding for the requested resource #{request.fullpath} could not be found."
-      [406, {"Content-Type" => "text/plain"}, message]
-    end
-  end
-
-  def self.gzip(body, mtime)
-    io = StringIO.new
-    gzip = Zlib::GzipWriter.new(io)
-    gzip.mtime = mtime
-
-    # TODO: Add streaming
-    body.each { |part| gzip << part }
-
-    gzip.close
-    return io.string
-  end
-
-  DEFLATE_ARGS = [
-    Zlib::DEFAULT_COMPRESSION,
-    # drop the zlib header which causes both Safari and IE to choke
-   -Zlib::MAX_WBITS,
-    Zlib::DEF_MEM_LEVEL,
-    Zlib::DEFAULT_STRATEGY
-  ]
-
-  # Loosely based on Mongrel's Deflate handler
-  def self.deflate(body)
-    deflater = Zlib::Deflate.new(*DEFLATE_ARGS)
-
-    # TODO: Add streaming
-    body.each { |part| deflater << part }
-
-    return deflater.finish
-  end
-end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/directory.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/directory.rb
deleted file mode 100644
index 31e0db8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/directory.rb
+++ /dev/null
@@ -1,158 +0,0 @@
-require 'time'
-
-module Rack
-  # Rack::Directory serves entries below the +root+ given, according to the
-  # path info of the Rack request. If a directory is found, the file's contents
-  # will be presented in an html based index. If a file is found, the env will
-  # be passed to the specified +app+.
-  #
-  # If +app+ is not specified, a Rack::File of the same +root+ will be used.
-
-  class Directory
-    DIR_FILE = "<tr><td class='name'><a href='%s'>%s</a></td><td class='size'>%s</td><td class='type'>%s</td><td class='mtime'>%s</td></tr>"
-    DIR_PAGE = <<-PAGE
-<html><head>
-  <title>%s</title>
-  <style type='text/css'>
-table { width:100%%; }
-.name { text-align:left; }
-.size, .mtime { text-align:right; }
-  </style>
-</head><body>
-<h1>%s</h1>
-<hr />
-<table>
-  <tr>
-    <th class='name'>Name</th>
-    <th class='size'>Size</th>
-    <th class='type'>Type</th>
-    <th class='mtime'>Last Modified</th>
-  </tr>
-%s
-</table>
-<hr />
-</body></html>
-    PAGE
-
-    attr_reader :files
-    attr_accessor :root, :path
-
-    def initialize(root, app=nil)
-      @root = root
-      @app = app
-      unless defined? @app
-        @app = Rack::File.new(@root)
-      end
-    end
-
-    def call(env)
-      dup._call(env)
-    end
-
-    F = ::File
-
-    def _call(env)
-      if env["PATH_INFO"].include? ".."
-        body = "Forbidden\n"
-        size = body.respond_to?(:bytesize) ? body.bytesize : body.size
-        return [403, {"Content-Type" => "text/plain","Content-Length" => size.to_s}, [body]]
-      end
-
-      @path = F.join(@root, Utils.unescape(env['PATH_INFO']))
-
-      if F.exist?(@path) and F.readable?(@path)
-        if F.file?(@path)
-          return @app.call(env)
-        elsif F.directory?(@path)
-          @files = [['../','Parent Directory','','','']]
-          sName, pInfo = env.values_at('SCRIPT_NAME', 'PATH_INFO')
-          Dir.entries(@path).sort.each do |file|
-            next if file[0] == ?.
-            fl    = F.join(@path, file)
-            sz    = F.size(fl)
-            url   = F.join(sName, pInfo, file)
-            type  = F.directory?(fl) ? 'directory' :
-              MIME_TYPES.fetch(F.extname(file)[1..-1],'unknown')
-            size  = (type!='directory' ? (sz<10240 ? "#{sz}B" : "#{sz/1024}KB") : '-')
-            mtime = F.mtime(fl).httpdate
-            @files << [ url, file, size, type, mtime ]
-          end
-          return [ 200, {'Content-Type'=>'text/html'}, self ]
-        end
-      end
-
-      body = "Entity not found: #{env["PATH_INFO"]}\n"
-      size = body.respond_to?(:bytesize) ? body.bytesize : body.size
-      return [404, {"Content-Type" => "text/plain", "Content-Length" => size.to_s}, [body]]
-    end
-
-    def each
-      show_path = @path.sub(/^#{@root}/,'')
-      files = @files.map{|f| DIR_FILE % f }*"\n"
-      page  = DIR_PAGE % [ show_path, show_path , files ]
-      page.each_line{|l| yield l }
-    end
-
-    def each_entry
-      @files.each{|e| yield e }
-    end
-
-    # From WEBrick.
-    MIME_TYPES = {
-      "ai"    => "application/postscript",
-      "asc"   => "text/plain",
-      "avi"   => "video/x-msvideo",
-      "bin"   => "application/octet-stream",
-      "bmp"   => "image/bmp",
-      "class" => "application/octet-stream",
-      "cer"   => "application/pkix-cert",
-      "crl"   => "application/pkix-crl",
-      "crt"   => "application/x-x509-ca-cert",
-     #"crl"   => "application/x-pkcs7-crl",
-      "css"   => "text/css",
-      "dms"   => "application/octet-stream",
-      "doc"   => "application/msword",
-      "dvi"   => "application/x-dvi",
-      "eps"   => "application/postscript",
-      "etx"   => "text/x-setext",
-      "exe"   => "application/octet-stream",
-      "gif"   => "image/gif",
-      "htm"   => "text/html",
-      "html"  => "text/html",
-      "jpe"   => "image/jpeg",
-      "jpeg"  => "image/jpeg",
-      "jpg"   => "image/jpeg",
-      "js"    => "text/javascript",
-      "lha"   => "application/octet-stream",
-      "lzh"   => "application/octet-stream",
-      "mov"   => "video/quicktime",
-      "mpe"   => "video/mpeg",
-      "mpeg"  => "video/mpeg",
-      "mpg"   => "video/mpeg",
-      "pbm"   => "image/x-portable-bitmap",
-      "pdf"   => "application/pdf",
-      "pgm"   => "image/x-portable-graymap",
-      "png"   => "image/png",
-      "pnm"   => "image/x-portable-anymap",
-      "ppm"   => "image/x-portable-pixmap",
-      "ppt"   => "application/vnd.ms-powerpoint",
-      "ps"    => "application/postscript",
-      "qt"    => "video/quicktime",
-      "ras"   => "image/x-cmu-raster",
-      "rb"    => "text/plain",
-      "rd"    => "text/plain",
-      "rtf"   => "application/rtf",
-      "sgm"   => "text/sgml",
-      "sgml"  => "text/sgml",
-      "tif"   => "image/tiff",
-      "tiff"  => "image/tiff",
-      "txt"   => "text/plain",
-      "xbm"   => "image/x-xbitmap",
-      "xls"   => "application/vnd.ms-excel",
-      "xml"   => "text/xml",
-      "xpm"   => "image/x-xpixmap",
-      "xwd"   => "image/x-xwindowdump",
-      "zip"   => "application/zip",
-    }
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/file.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/file.rb
deleted file mode 100644
index afb2138..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/file.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-require 'time'
-
-module Rack
-  # Rack::File serves files below the +root+ given, according to the
-  # path info of the Rack request.
-  #
-  # Handlers can detect if bodies are a Rack::File, and use mechanisms
-  # like sendfile on the +path+.
-
-  class File
-    attr_accessor :root
-    attr_accessor :path
-
-    def initialize(root)
-      @root = root
-    end
-
-    def call(env)
-      dup._call(env)
-    end
-
-    F = ::File
-
-    def _call(env)
-      if env["PATH_INFO"].include? ".."
-        body = "Forbidden\n"
-        size = body.respond_to?(:bytesize) ? body.bytesize : body.size
-        return [403, {"Content-Type" => "text/plain","Content-Length" => size.to_s}, [body]]
-      end
-
-      @path = F.join(@root, Utils.unescape(env["PATH_INFO"]))
-      ext = F.extname(@path)[1..-1]
-
-      if F.file?(@path) && F.readable?(@path)
-        [200, {
-           "Last-Modified"  => F.mtime(@path).httpdate,
-           "Content-Type"   => MIME_TYPES[ext] || "text/plain",
-           "Content-Length" => F.size(@path).to_s
-         }, self]
-      else
-        body = "File not found: #{env["PATH_INFO"]}\n"
-        size = body.respond_to?(:bytesize) ? body.bytesize : body.size
-        [404, {"Content-Type" => "text/plain", "Content-Length" => size.to_s}, [body]]
-      end
-    end
-
-    def each
-      F.open(@path, "rb") { |file|
-        while part = file.read(8192)
-          yield part
-        end
-      }
-    end
-
-    # :stopdoc:
-    # From WEBrick with some additions.
-    MIME_TYPES = {
-      "ai"    => "application/postscript",
-      "asc"   => "text/plain",
-      "avi"   => "video/x-msvideo",
-      "bin"   => "application/octet-stream",
-      "bmp"   => "image/bmp",
-      "class" => "application/octet-stream",
-      "cer"   => "application/pkix-cert",
-      "crl"   => "application/pkix-crl",
-      "crt"   => "application/x-x509-ca-cert",
-     #"crl"   => "application/x-pkcs7-crl",
-      "css"   => "text/css",
-      "dms"   => "application/octet-stream",
-      "doc"   => "application/msword",
-      "dvi"   => "application/x-dvi",
-      "eps"   => "application/postscript",
-      "etx"   => "text/x-setext",
-      "exe"   => "application/octet-stream",
-      "gif"   => "image/gif",
-      "htm"   => "text/html",
-      "html"  => "text/html",
-      "jpe"   => "image/jpeg",
-      "jpeg"  => "image/jpeg",
-      "jpg"   => "image/jpeg",
-      "js"    => "text/javascript",
-      "lha"   => "application/octet-stream",
-      "lzh"   => "application/octet-stream",
-      "mov"   => "video/quicktime",
-      "mp3"   => "audio/mpeg",
-      "mpe"   => "video/mpeg",
-      "mpeg"  => "video/mpeg",
-      "mpg"   => "video/mpeg",
-      "pbm"   => "image/x-portable-bitmap",
-      "pdf"   => "application/pdf",
-      "pgm"   => "image/x-portable-graymap",
-      "png"   => "image/png",
-      "pnm"   => "image/x-portable-anymap",
-      "ppm"   => "image/x-portable-pixmap",
-      "ppt"   => "application/vnd.ms-powerpoint",
-      "ps"    => "application/postscript",
-      "qt"    => "video/quicktime",
-      "ras"   => "image/x-cmu-raster",
-      "rb"    => "text/plain",
-      "rd"    => "text/plain",
-      "rtf"   => "application/rtf",
-      "sgm"   => "text/sgml",
-      "sgml"  => "text/sgml",
-      "tif"   => "image/tiff",
-      "tiff"  => "image/tiff",
-      "txt"   => "text/plain",
-      "xbm"   => "image/x-xbitmap",
-      "xls"   => "application/vnd.ms-excel",
-      "xml"   => "text/xml",
-      "xpm"   => "image/x-xpixmap",
-      "xwd"   => "image/x-xwindowdump",
-      "zip"   => "application/zip",
-    }
-    # :startdoc:
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler.rb
deleted file mode 100644
index debd15d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-module Rack
-  # *Handlers* connect web servers with Rack.
-  #
-  # Rack includes Handlers for Mongrel, WEBrick, FastCGI, CGI, SCGI
-  # and LiteSpeed.
-  #
-  # Handlers usually are activated by calling <tt>MyHandler.run(myapp)</tt>.
-  # A second optional hash can be passed to include server-specific
-  # configuration.
-  module Handler
-    def self.get(server)
-      return unless server
-
-      if klass = @handlers[server]
-        obj = Object
-        klass.split("::").each { |x| obj = obj.const_get(x) }
-        obj
-      else
-        Rack::Handler.const_get(server.capitalize)
-      end
-    end
-
-    def self.register(server, klass)
-      @handlers ||= {}
-      @handlers[server] = klass
-    end
-
-    autoload :CGI, "rack/handler/cgi"
-    autoload :FastCGI, "rack/handler/fastcgi"
-    autoload :Mongrel, "rack/handler/mongrel"
-    autoload :EventedMongrel, "rack/handler/evented_mongrel"
-    autoload :WEBrick, "rack/handler/webrick"
-    autoload :LSWS, "rack/handler/lsws"
-    autoload :SCGI, "rack/handler/scgi"
-
-    register 'cgi', 'Rack::Handler::CGI'
-    register 'fastcgi', 'Rack::Handler::FastCGI'
-    register 'mongrel', 'Rack::Handler::Mongrel'
-    register 'emongrel', 'Rack::Handler::EventedMongrel'
-    register 'webrick', 'Rack::Handler::WEBrick'
-    register 'lsws', 'Rack::Handler::LSWS'
-    register 'scgi', 'Rack::Handler::SCGI'
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/cgi.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/cgi.rb
deleted file mode 100644
index 1922402..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/cgi.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-module Rack
-  module Handler
-    class CGI
-      def self.run(app, options=nil)
-        serve app
-      end
-
-      def self.serve(app)
-        env = ENV.to_hash
-        env.delete "HTTP_CONTENT_LENGTH"
-
-        env["SCRIPT_NAME"] = ""  if env["SCRIPT_NAME"] == "/"
-
-        env.update({"rack.version" => [0,1],
-                     "rack.input" => STDIN,
-                     "rack.errors" => STDERR,
-
-                     "rack.multithread" => false,
-                     "rack.multiprocess" => true,
-                     "rack.run_once" => true,
-
-                     "rack.url_scheme" => ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http"
-                   })
-
-        env["QUERY_STRING"] ||= ""
-        env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
-        env["REQUEST_PATH"] ||= "/"
-
-        status, headers, body = app.call(env)
-        begin
-          send_headers status, headers
-          send_body body
-        ensure
-          body.close  if body.respond_to? :close
-        end
-      end
-
-      def self.send_headers(status, headers)
-        STDOUT.print "Status: #{status}\r\n"
-        headers.each { |k, vs|
-          vs.each { |v|
-            STDOUT.print "#{k}: #{v}\r\n"
-          }
-        }
-        STDOUT.print "\r\n"
-        STDOUT.flush
-      end
-
-      def self.send_body(body)
-        body.each { |part|
-          STDOUT.print part
-          STDOUT.flush
-        }
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/evented_mongrel.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/evented_mongrel.rb
deleted file mode 100644
index 1eb5eb9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/evented_mongrel.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'swiftcore/evented_mongrel'
-
-module Rack
-  module Handler
-    class EventedMongrel < Mongrel
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/fastcgi.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/fastcgi.rb
deleted file mode 100644
index 5f8801d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/fastcgi.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require 'fcgi'
-require 'socket'
-
-module Rack
-  module Handler
-    class FastCGI
-      def self.run(app, options={})
-        file = options[:File] and STDIN.reopen(UNIXServer.new(file))
-        port = options[:Port] and STDIN.reopen(TCPServer.new(port))
-        FCGI.each { |request|
-          serve request, app
-        }
-      end
-
-      module ProperStream       # :nodoc:
-        def each                # This is missing by default.
-          while line = gets
-            yield line
-          end
-        end
-
-        def read(*args)
-          if args.empty?
-            super || ""           # Empty string on EOF.
-          else
-            super
-          end
-        end
-      end
-
-      def self.serve(request, app)
-        env = request.env
-        env.delete "HTTP_CONTENT_LENGTH"
-
-        request.in.extend ProperStream
-
-        env["SCRIPT_NAME"] = ""  if env["SCRIPT_NAME"] == "/"
-
-        env.update({"rack.version" => [0,1],
-                     "rack.input" => request.in,
-                     "rack.errors" => request.err,
-
-                     "rack.multithread" => false,
-                     "rack.multiprocess" => true,
-                     "rack.run_once" => false,
-
-                     "rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http"
-                   })
-
-        env["QUERY_STRING"] ||= ""
-        env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
-        env["REQUEST_PATH"] ||= "/"
-        env.delete "PATH_INFO"  if env["PATH_INFO"] == ""
-
-        status, headers, body = app.call(env)
-        begin
-          send_headers request.out, status, headers
-          send_body request.out, body
-        ensure
-          body.close  if body.respond_to? :close
-          request.finish
-        end
-      end
-
-      def self.send_headers(out, status, headers)
-        out.print "Status: #{status}\r\n"
-        headers.each { |k, vs|
-          vs.each { |v|
-            out.print "#{k}: #{v}\r\n"
-          }
-        }
-        out.print "\r\n"
-        out.flush
-      end
-
-      def self.send_body(out, body)
-        body.each { |part|
-          out.print part
-          out.flush
-        }
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/lsws.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/lsws.rb
deleted file mode 100644
index 48b82b5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/lsws.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-require 'lsapi'
-#require 'cgi'
-module Rack
-  module Handler
-    class LSWS
-      def self.run(app, options=nil)
-        while LSAPI.accept != nil
-          serve app
-        end
-      end
-      def self.serve(app)
-        env = ENV.to_hash
-        env.delete "HTTP_CONTENT_LENGTH"
-        env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/"
-        env.update({"rack.version" => [0,1],
-                     "rack.input" => STDIN,
-                     "rack.errors" => STDERR,
-                     "rack.multithread" => false,
-                     "rack.multiprocess" => true,
-                     "rack.run_once" => false,
-                     "rack.url_scheme" => ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http"
-                   })
-        env["QUERY_STRING"] ||= ""
-        env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
-        env["REQUEST_PATH"] ||= "/"
-        status, headers, body = app.call(env)
-        begin
-          send_headers status, headers
-          send_body body
-        ensure
-          body.close if body.respond_to? :close
-        end
-      end
-      def self.send_headers(status, headers)
-        print "Status: #{status}\r\n"
-        headers.each { |k, vs|
-          vs.each { |v|
-            print "#{k}: #{v}\r\n"
-          }
-        }
-        print "\r\n"
-        STDOUT.flush
-      end
-      def self.send_body(body)
-        body.each { |part|
-          print part
-          STDOUT.flush
-        }
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/mongrel.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/mongrel.rb
deleted file mode 100644
index 8bdd6b7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/mongrel.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-require 'mongrel'
-require 'stringio'
-
-module Rack
-  module Handler
-    class Mongrel < ::Mongrel::HttpHandler
-      def self.run(app, options={})
-        server = ::Mongrel::HttpServer.new(options[:Host] || '0.0.0.0',
-                                           options[:Port] || 8080)
-        # Acts like Rack::URLMap, utilizing Mongrel's own path finding methods.
-        # Use is similar to #run, replacing the app argument with a hash of 
-        # { path=>app, ... } or an instance of Rack::URLMap.
-        if options[:map]
-          if app.is_a? Hash
-            app.each do |path, appl|
-              path = '/'+path unless path[0] == ?/
-              server.register(path, Rack::Handler::Mongrel.new(appl))
-            end
-          elsif app.is_a? URLMap
-            app.instance_variable_get(:@mapping).each do |(host, path, appl)|
-             next if !host.nil? && !options[:Host].nil? && options[:Host] != host
-             path = '/'+path unless path[0] == ?/
-             server.register(path, Rack::Handler::Mongrel.new(appl))
-            end
-          else
-            raise ArgumentError, "first argument should be a Hash or URLMap"
-          end
-        else
-          server.register('/', Rack::Handler::Mongrel.new(app))
-        end
-        yield server  if block_given?
-        server.run.join
-      end
-
-      def initialize(app)
-        @app = app
-      end
-
-      def process(request, response)
-        env = {}.replace(request.params)
-        env.delete "HTTP_CONTENT_TYPE"
-        env.delete "HTTP_CONTENT_LENGTH"
-
-        env["SCRIPT_NAME"] = ""  if env["SCRIPT_NAME"] == "/"
-
-        env.update({"rack.version" => [0,1],
-                     "rack.input" => request.body || StringIO.new(""),
-                     "rack.errors" => STDERR,
-
-                     "rack.multithread" => true,
-                     "rack.multiprocess" => false, # ???
-                     "rack.run_once" => false,
-
-                     "rack.url_scheme" => "http",
-                   })
-        env["QUERY_STRING"] ||= ""
-        env.delete "PATH_INFO"  if env["PATH_INFO"] == ""
-
-        status, headers, body = @app.call(env)
-
-        begin
-          response.status = status.to_i
-          headers.each { |k, vs|
-            vs.each { |v|
-              response.header[k] = v
-            }
-          }
-          body.each { |part|
-            response.body << part
-          }
-          response.finished
-        ensure
-          body.close  if body.respond_to? :close
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/scgi.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/scgi.rb
deleted file mode 100644
index 0e14339..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/scgi.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'scgi'
-require 'stringio'
-
-module Rack
-  module Handler
-    class SCGI < ::SCGI::Processor
-      attr_accessor :app
-      
-      def self.run(app, options=nil)
-        new(options.merge(:app=>app,
-                          :host=>options[:Host],
-                          :port=>options[:Port],
-                          :socket=>options[:Socket])).listen
-      end
-      
-      def initialize(settings = {})
-        @app = settings[:app]
-        @log = Object.new
-        def @log.info(*args); end
-        def @log.error(*args); end
-        super(settings)
-      end
-        
-      def process_request(request, input_body, socket)
-        env = {}.replace(request)
-        env.delete "HTTP_CONTENT_TYPE"
-        env.delete "HTTP_CONTENT_LENGTH"
-        env["REQUEST_PATH"], env["QUERY_STRING"] = env["REQUEST_URI"].split('?', 2)
-        env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
-        env["PATH_INFO"] = env["REQUEST_PATH"]
-        env["QUERY_STRING"] ||= ""
-        env["SCRIPT_NAME"] = ""
-        env.update({"rack.version" => [0,1],
-                     "rack.input" => StringIO.new(input_body),
-                     "rack.errors" => STDERR,
-
-                     "rack.multithread" => true,
-                     "rack.multiprocess" => true,
-                     "rack.run_once" => false,
-
-                     "rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http"
-                   })
-        status, headers, body = app.call(env)
-        begin
-          socket.write("Status: #{status}\r\n")
-          headers.each do |k, vs|
-            vs.each {|v| socket.write("#{k}: #{v}\r\n")}
-          end
-          socket.write("\r\n")
-          body.each {|s| socket.write(s)}
-        ensure
-          body.close if body.respond_to? :close
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/webrick.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/webrick.rb
deleted file mode 100644
index c3222fd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/handler/webrick.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'webrick'
-require 'stringio'
-
-module Rack
-  module Handler
-    class WEBrick < WEBrick::HTTPServlet::AbstractServlet
-      def self.run(app, options={})
-        server = ::WEBrick::HTTPServer.new(options)
-        server.mount "/", Rack::Handler::WEBrick, app
-        trap(:INT) { server.shutdown }
-        yield server  if block_given?
-        server.start
-      end
-
-      def initialize(server, app)
-        super server
-        @app = app
-      end
-
-      def service(req, res)
-        env = req.meta_vars
-        env.delete_if { |k, v| v.nil? }
-
-        env.update({"rack.version" => [0,1],
-                     "rack.input" => StringIO.new(req.body.to_s),
-                     "rack.errors" => STDERR,
-
-                     "rack.multithread" => true,
-                     "rack.multiprocess" => false,
-                     "rack.run_once" => false,
-
-                     "rack.url_scheme" => ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http"
-                   })
-
-        env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
-        env["QUERY_STRING"] ||= ""
-        env["REQUEST_PATH"] ||= "/"
-        env.delete "PATH_INFO"  if env["PATH_INFO"] == ""
-
-        status, headers, body = @app.call(env)
-        begin
-          res.status = status.to_i
-          headers.each { |k, vs|
-            vs.each { |v|
-              res[k] = v
-            }
-          }
-          body.each { |part|
-            res.body << part
-          }
-        ensure
-          body.close  if body.respond_to? :close
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/lint.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/lint.rb
deleted file mode 100644
index 7bc433b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/lint.rb
+++ /dev/null
@@ -1,401 +0,0 @@
-module Rack
-  # Rack::Lint validates your application and the requests and
-  # responses according to the Rack spec.
-
-  class Lint
-    def initialize(app)
-      @app = app
-    end
-
-    # :stopdoc:
-
-    class LintError < RuntimeError; end
-    module Assertion
-      def assert(message, &block)
-        unless block.call
-          raise LintError, message
-        end
-      end
-    end
-    include Assertion
-
-    ## This specification aims to formalize the Rack protocol.  You
-    ## can (and should) use Rack::Lint to enforce it.
-    ##
-    ## When you develop middleware, be sure to add a Lint before and
-    ## after to catch all mistakes.
-
-    ## = Rack applications
-
-    ## A Rack application is an Ruby object (not a class) that
-    ## responds to +call+.
-    def call(env=nil) 
-      dup._call(env) 
-    end
-
-    def _call(env)
-      ## It takes exactly one argument, the *environment*
-      assert("No env given") { env }
-      check_env env
-
-      env['rack.input'] = InputWrapper.new(env['rack.input'])
-      env['rack.errors'] = ErrorWrapper.new(env['rack.errors'])
-
-      ## and returns an Array of exactly three values:
-      status, headers, @body = @app.call(env)
-      ## The *status*,
-      check_status status
-      ## the *headers*,
-      check_headers headers
-      ## and the *body*.
-      check_content_type status, headers
-      [status, headers, self]
-    end
-
-    ## == The Environment
-    def check_env(env)
-      ## The environment must be an true instance of Hash (no
-      ## subclassing allowed) that includes CGI-like headers.
-      ## The application is free to modify the environment.
-      assert("env #{env.inspect} is not a Hash, but #{env.class}") {
-        env.instance_of? Hash
-      }
-
-      ##
-      ## The environment is required to include these variables
-      ## (adopted from PEP333), except when they'd be empty, but see
-      ## below.
-
-      ## <tt>REQUEST_METHOD</tt>:: The HTTP request method, such as
-      ##                           "GET" or "POST". This cannot ever
-      ##                           be an empty string, and so is
-      ##                           always required.
-
-      ## <tt>SCRIPT_NAME</tt>:: The initial portion of the request
-      ##                        URL's "path" that corresponds to the
-      ##                        application object, so that the
-      ##                        application knows its virtual
-      ##                        "location". This may be an empty
-      ##                        string, if the application corresponds
-      ##                        to the "root" of the server.
-
-      ## <tt>PATH_INFO</tt>:: The remainder of the request URL's
-      ##                      "path", designating the virtual
-      ##                      "location" of the request's target
-      ##                      within the application. This may be an
-      ##                      empty string, if the request URL targets
-      ##                      the application root and does not have a
-      ##                      trailing slash.
-
-      ## <tt>QUERY_STRING</tt>:: The portion of the request URL that
-      ##                         follows the <tt>?</tt>, if any. May be
-      ##                         empty, but is always required!
-
-      ## <tt>SERVER_NAME</tt>, <tt>SERVER_PORT</tt>:: When combined with <tt>SCRIPT_NAME</tt> and <tt>PATH_INFO</tt>, these variables can be used to complete the URL. Note, however, that <tt>HTTP_HOST</tt>, if present, should be used in preference to <tt>SERVER_NAME</tt> for reconstructing the request URL.  <tt>SERVER_NAME</tt> and <tt>SERVER_PORT</tt> can never be empty strings, and so are always required.
-
-      ## <tt>HTTP_</tt> Variables:: Variables corresponding to the
-      ##                            client-supplied HTTP request
-      ##                            headers (i.e., variables whose
-      ##                            names begin with <tt>HTTP_</tt>). The
-      ##                            presence or absence of these
-      ##                            variables should correspond with
-      ##                            the presence or absence of the
-      ##                            appropriate HTTP header in the
-      ##                            request.
-
-      ## In addition to this, the Rack environment must include these
-      ## Rack-specific variables:
-
-      ## <tt>rack.version</tt>:: The Array [0,1], representing this version of Rack.
-      ## <tt>rack.url_scheme</tt>:: +http+ or +https+, depending on the request URL.
-      ## <tt>rack.input</tt>:: See below, the input stream.
-      ## <tt>rack.errors</tt>:: See below, the error stream.
-      ## <tt>rack.multithread</tt>:: true if the application object may be simultaneously invoked by another thread in the same process, false otherwise.
-      ## <tt>rack.multiprocess</tt>:: true if an equivalent application object may be simultaneously invoked by another process, false otherwise.
-      ## <tt>rack.run_once</tt>:: true if the server expects (but does not guarantee!) that the application will only be invoked this one time during the life of its containing process. Normally, this will only be true for a server based on CGI (or something similar).
-
-      ## The server or the application can store their own data in the
-      ## environment, too.  The keys must contain at least one dot,
-      ## and should be prefixed uniquely.  The prefix <tt>rack.</tt>
-      ## is reserved for use with the Rack core distribution and must
-      ## not be used otherwise.
-      ##
-
-      %w[REQUEST_METHOD SERVER_NAME SERVER_PORT
-         QUERY_STRING
-         rack.version rack.input rack.errors
-         rack.multithread rack.multiprocess rack.run_once].each { |header|
-        assert("env missing required key #{header}") { env.include? header }
-      }
-
-      ## The environment must not contain the keys
-      ## <tt>HTTP_CONTENT_TYPE</tt> or <tt>HTTP_CONTENT_LENGTH</tt>
-      ## (use the versions without <tt>HTTP_</tt>).
-      %w[HTTP_CONTENT_TYPE HTTP_CONTENT_LENGTH].each { |header|
-        assert("env contains #{header}, must use #{header[5,-1]}") {
-          not env.include? header
-        }
-      }
-
-      ## The CGI keys (named without a period) must have String values.
-      env.each { |key, value|
-        next  if key.include? "."   # Skip extensions
-        assert("env variable #{key} has non-string value #{value.inspect}") {
-          value.instance_of? String
-        }
-      }
-
-      ##
-      ## There are the following restrictions:
-
-      ## * <tt>rack.version</tt> must be an array of Integers.
-      assert("rack.version must be an Array, was #{env["rack.version"].class}") {
-        env["rack.version"].instance_of? Array
-      }
-      ## * <tt>rack.url_scheme</tt> must either be +http+ or +https+.
-      assert("rack.url_scheme unknown: #{env["rack.url_scheme"].inspect}") {
-        %w[http https].include? env["rack.url_scheme"]
-      }
-
-      ## * There must be a valid input stream in <tt>rack.input</tt>.
-      check_input env["rack.input"]
-      ## * There must be a valid error stream in <tt>rack.errors</tt>.
-      check_error env["rack.errors"]
-
-      ## * The <tt>REQUEST_METHOD</tt> must be one of +GET+, +POST+, +PUT+,
-      ##   +DELETE+, +HEAD+, +OPTIONS+, +TRACE+.
-      assert("REQUEST_METHOD unknown: #{env["REQUEST_METHOD"]}") {
-        %w[GET POST PUT DELETE
-           HEAD OPTIONS TRACE].include?(env["REQUEST_METHOD"])
-      }
-
-      ## * The <tt>SCRIPT_NAME</tt>, if non-empty, must start with <tt>/</tt>
-      assert("SCRIPT_NAME must start with /") {
-        !env.include?("SCRIPT_NAME") ||
-        env["SCRIPT_NAME"] == "" ||
-        env["SCRIPT_NAME"] =~ /\A\//
-      }
-      ## * The <tt>PATH_INFO</tt>, if non-empty, must start with <tt>/</tt>
-      assert("PATH_INFO must start with /") {
-        !env.include?("PATH_INFO") ||
-        env["PATH_INFO"] == "" ||
-        env["PATH_INFO"] =~ /\A\//
-      }
-      ## * The <tt>CONTENT_LENGTH</tt>, if given, must consist of digits only.
-      assert("Invalid CONTENT_LENGTH: #{env["CONTENT_LENGTH"]}") {
-        !env.include?("CONTENT_LENGTH") || env["CONTENT_LENGTH"] =~ /\A\d+\z/
-      }
-
-      ## * One of <tt>SCRIPT_NAME</tt> or <tt>PATH_INFO</tt> must be
-      ##   set.  <tt>PATH_INFO</tt> should be <tt>/</tt> if
-      ##   <tt>SCRIPT_NAME</tt> is empty.
-      assert("One of SCRIPT_NAME or PATH_INFO must be set (make PATH_INFO '/' if SCRIPT_NAME is empty)") {
-        env["SCRIPT_NAME"] || env["PATH_INFO"]
-      }
-      ##   <tt>SCRIPT_NAME</tt> never should be <tt>/</tt>, but instead be empty.
-      assert("SCRIPT_NAME cannot be '/', make it '' and PATH_INFO '/'") {
-        env["SCRIPT_NAME"] != "/"
-      }
-    end
-
-    ## === The Input Stream
-    def check_input(input)
-      ## The input stream must respond to +gets+, +each+ and +read+.
-      [:gets, :each, :read].each { |method|
-        assert("rack.input #{input} does not respond to ##{method}") {
-          input.respond_to? method
-        }
-      }
-    end
-
-    class InputWrapper
-      include Assertion
-
-      def initialize(input)
-        @input = input
-      end
-
-      ## * +gets+ must be called without arguments and return a string,
-      ##   or +nil+ on EOF.
-      def gets(*args)
-        assert("rack.input#gets called with arguments") { args.size == 0 }
-        v = @input.gets
-        assert("rack.input#gets didn't return a String") {
-          v.nil? or v.instance_of? String
-        }
-        v
-      end
-
-      ## * +read+ must be called without or with one integer argument
-      ##   and return a string, or +nil+ on EOF.
-      def read(*args)
-        assert("rack.input#read called with too many arguments") {
-          args.size <= 1
-        }
-        if args.size == 1
-          assert("rack.input#read called with non-integer argument") {
-            args.first.kind_of? Integer
-          }
-        end
-        v = @input.read(*args)
-        assert("rack.input#read didn't return a String") {
-          v.nil? or v.instance_of? String
-        }
-        v
-      end
-
-      ## * +each+ must be called without arguments and only yield Strings.
-      def each(*args)
-        assert("rack.input#each called with arguments") { args.size == 0 }
-        @input.each { |line|
-          assert("rack.input#each didn't yield a String") {
-            line.instance_of? String
-          }
-          yield line
-        }
-      end
-
-      ## * +close+ must never be called on the input stream.
-      def close(*args)
-        assert("rack.input#close must not be called") { false }
-      end
-    end
-
-    ## === The Error Stream
-    def check_error(error)
-      ## The error stream must respond to +puts+, +write+ and +flush+.
-      [:puts, :write, :flush].each { |method|
-        assert("rack.error #{error} does not respond to ##{method}") {
-          error.respond_to? method
-        }
-      }
-    end
-
-    class ErrorWrapper
-      include Assertion
-
-      def initialize(error)
-        @error = error
-      end
-
-      ## * +puts+ must be called with a single argument that responds to +to_s+.
-      def puts(str)
-        @error.puts str
-      end
-
-      ## * +write+ must be called with a single argument that is a String.
-      def write(str)
-        assert("rack.errors#write not called with a String") { str.instance_of? String }
-        @error.write str
-      end
-
-      ## * +flush+ must be called without arguments and must be called
-      ##   in order to make the error appear for sure.
-      def flush
-        @error.flush
-      end
-
-      ## * +close+ must never be called on the error stream.
-      def close(*args)
-        assert("rack.errors#close must not be called") { false }
-      end
-    end
-
-    ## == The Response
-
-    ## === The Status
-    def check_status(status)
-      ## The status, if parsed as integer (+to_i+), must be greater than or equal to 100.
-      assert("Status must be >=100 seen as integer") { status.to_i >= 100 }
-    end
-
-    ## === The Headers
-    def check_headers(header)
-      ## The header must respond to each, and yield values of key and value.
-      assert("headers object should respond to #each, but doesn't (got #{header.class} as headers)") {
-         header.respond_to? :each
-      }
-      header.each { |key, value|
-        ## The header keys must be Strings.
-        assert("header key must be a string, was #{key.class}") {
-          key.instance_of? String
-        }
-        ## The header must not contain a +Status+ key,
-        assert("header must not contain Status") { key.downcase != "status" }
-        ## contain keys with <tt>:</tt> or newlines in their name,
-        assert("header names must not contain : or \\n") { key !~ /[:\n]/ }
-        ## contain keys names that end in <tt>-</tt> or <tt>_</tt>,
-        assert("header names must not end in - or _") { key !~ /[-_]\z/ }
-        ## but only contain keys that consist of
-        ## letters, digits, <tt>_</tt> or <tt>-</tt> and start with a letter.
-        assert("invalid header name: #{key}") { key =~ /\A[a-zA-Z][a-zA-Z0-9_-]*\z/ }
-        ##
-        ## The values of the header must respond to #each.
-        assert("header values must respond to #each, but the value of " +
-          "'#{key}' doesn't (is #{value.class})") { value.respond_to? :each }
-        value.each { |item|
-          ## The values passed on #each must be Strings
-          assert("header values must consist of Strings, but '#{key}' also contains a #{item.class}") {
-            item.instance_of?(String)
-          }
-          ## and not contain characters below 037.
-          assert("invalid header value #{key}: #{item.inspect}") {
-            item !~ /[\000-\037]/
-          }
-        }
-      }
-    end
-
-    ## === The Content-Type
-    def check_content_type(status, headers)
-      headers.each { |key, value|
-        ## There must be a <tt>Content-Type</tt>, except when the
-        ## +Status+ is 204 or 304, in which case there must be none
-        ## given.
-        if key.downcase == "content-type"
-          assert("Content-Type header found in #{status} response, not allowed"){
-            not [204, 304].include? status.to_i
-          }
-          return
-        end
-      }
-      assert("No Content-Type header found") {
-        [204, 304].include? status.to_i
-      }
-    end
-
-    ## === The Body
-    def each
-      @closed = false
-      ## The Body must respond to #each
-      @body.each { |part|
-        ## and must only yield String values.
-        assert("Body yielded non-string value #{part.inspect}") {
-          part.instance_of? String
-        }
-        yield part
-      }
-      ##
-      ## If the Body responds to #close, it will be called after iteration.
-      # XXX howto: assert("Body has not been closed") { @closed }
-
-      ##
-      ## The Body commonly is an Array of Strings, the application
-      ## instance itself, or a File-like object.
-    end
-
-    def close
-      @closed = true
-      @body.close  if @body.respond_to?(:close)
-    end
-
-    # :startdoc:
-
-  end
-end
-
-## == Thanks
-## Some parts of this specification are adopted from PEP333: Python
-## Web Server Gateway Interface
-## v1.0 (http://www.python.org/dev/peps/pep-0333/). I'd like to thank
-## everyone involved in that effort.
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/lobster.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/lobster.rb
deleted file mode 100644
index 33f6b81..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/lobster.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-require 'zlib'
-
-require 'rack/request'
-require 'rack/response'
-
-module Rack
-  # Paste has a Pony, Rack has a Lobster!
-  class Lobster
-    LobsterString = Zlib::Inflate.inflate("eJx9kEEOwyAMBO99xd7MAcytUhPlJyj2
-    P6jy9i4k9EQyGAnBarEXeCBqSkntNXsi/ZCvC48zGQoZKikGrFMZvgS5ZHd+aGWVuWwhVF0
-    t1drVmiR42HcWNz5w3QanT+2gIvTVCiE1lm1Y0eU4JGmIIbaKwextKn8rvW+p5PIwFl8ZWJ
-    I8jyiTlhTcYXkekJAzTyYN6E08A+dk8voBkAVTJQ==".delete("\n ").unpack("m*")[0])
-
-    LambdaLobster = lambda { |env|
-      if env["QUERY_STRING"].include?("flip")
-        lobster = LobsterString.split("\n").
-          map { |line| line.ljust(42).reverse }.
-          join("\n")
-        href = "?"
-      else
-        lobster = LobsterString
-        href = "?flip"
-      end
-
-      [200, {"Content-Type" => "text/html"},
-       ["<title>Lobstericious!</title>",
-        "<pre>", lobster, "</pre>",
-        "<a href='#{href}'>flip!</a>"]
-      ]
-    }
-
-    def call(env)
-      req = Request.new(env)
-      if req.GET["flip"] == "left"
-        lobster = LobsterString.split("\n").
-          map { |line| line.ljust(42).reverse }.
-          join("\n")
-        href = "?flip=right"
-      elsif req.GET["flip"] == "crash"
-        raise "Lobster crashed"
-      else
-        lobster = LobsterString
-        href = "?flip=left"
-      end
-
-      Response.new.finish do |res|
-        res.write "<title>Lobstericious!</title>"
-        res.write "<pre>"
-        res.write lobster
-        res.write "</pre>"
-        res.write "<p><a href='#{href}'>flip!</a></p>"
-        res.write "<p><a href='?flip=crash'>crash!</a></p>"
-      end
-    end
-
-  end
-end
-
-if $0 == __FILE__
-  require 'rack'
-  require 'rack/showexceptions'
-  Rack::Handler::WEBrick.run \
-    Rack::ShowExceptions.new(Rack::Lint.new(Rack::Lobster.new)),
-    :Port => 9292
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/mock.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/mock.rb
deleted file mode 100644
index f43b9af..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/mock.rb
+++ /dev/null
@@ -1,160 +0,0 @@
-require 'uri'
-require 'stringio'
-require 'rack/lint'
-require 'rack/utils'
-require 'rack/response'
-
-module Rack
-  # Rack::MockRequest helps testing your Rack application without
-  # actually using HTTP.
-  #
-  # After performing a request on a URL with get/post/put/delete, it
-  # returns a MockResponse with useful helper methods for effective
-  # testing.
-  #
-  # You can pass a hash with additional configuration to the
-  # get/post/put/delete.
-  # <tt>:input</tt>:: A String or IO-like to be used as rack.input.
-  # <tt>:fatal</tt>:: Raise a FatalWarning if the app writes to rack.errors.
-  # <tt>:lint</tt>:: If true, wrap the application in a Rack::Lint.
-
-  class MockRequest
-    class FatalWarning < RuntimeError
-    end
-
-    class FatalWarner
-      def puts(warning)
-        raise FatalWarning, warning
-      end
-
-      def write(warning)
-        raise FatalWarning, warning
-      end
-
-      def flush
-      end
-
-      def string
-        ""
-      end
-    end
-
-    DEFAULT_ENV = {
-      "rack.version" => [0,1],
-      "rack.input" => StringIO.new,
-      "rack.errors" => StringIO.new,
-      "rack.multithread" => true,
-      "rack.multiprocess" => true,
-      "rack.run_once" => false,
-    }
-
-    def initialize(app)
-      @app = app
-    end
-
-    def get(uri, opts={})    request("GET", uri, opts)    end
-    def post(uri, opts={})   request("POST", uri, opts)   end
-    def put(uri, opts={})    request("PUT", uri, opts)    end
-    def delete(uri, opts={}) request("DELETE", uri, opts) end
-
-    def request(method="GET", uri="", opts={})
-      env = self.class.env_for(uri, opts.merge(:method => method))
-
-      if opts[:lint]
-        app = Rack::Lint.new(@app)
-      else
-        app = @app
-      end
-
-      errors = env["rack.errors"]
-      MockResponse.new(*(app.call(env) + [errors]))
-    end
-
-    # Return the Rack environment used for a request to +uri+.
-    def self.env_for(uri="", opts={})
-      uri = URI(uri)
-      env = DEFAULT_ENV.dup
-
-      env["REQUEST_METHOD"] = opts[:method] || "GET"
-      env["SERVER_NAME"] = uri.host || "example.org"
-      env["SERVER_PORT"] = uri.port ? uri.port.to_s : "80"
-      env["QUERY_STRING"] = uri.query.to_s
-      env["PATH_INFO"] = (!uri.path || uri.path.empty?) ? "/" : uri.path
-      env["rack.url_scheme"] = uri.scheme || "http"
-
-      env["SCRIPT_NAME"] = opts[:script_name] || ""
-
-      if opts[:fatal]
-        env["rack.errors"] = FatalWarner.new
-      else
-        env["rack.errors"] = StringIO.new
-      end
-
-      opts[:input] ||= ""
-      if String === opts[:input]
-        env["rack.input"] = StringIO.new(opts[:input])
-      else
-        env["rack.input"] = opts[:input]
-      end
-
-      opts.each { |field, value|
-        env[field] = value  if String === field
-      }
-
-      env
-    end
-  end
-
-  # Rack::MockResponse provides useful helpers for testing your apps.
-  # Usually, you don't create the MockResponse on your own, but use
-  # MockRequest.
-
-  class MockResponse
-    def initialize(status, headers, body, errors=StringIO.new(""))
-      @status = status.to_i
-
-      @original_headers = headers
-      @headers = Rack::Utils::HeaderHash.new
-      headers.each { |field, values|
-        values.each { |value|
-          @headers[field] = value
-        }
-        @headers[field] = ""  if values.empty?
-      }
-
-      @body = ""
-      body.each { |part| @body << part }
-
-      @errors = errors.string
-    end
-
-    # Status
-    attr_reader :status
-
-    # Headers
-    attr_reader :headers, :original_headers
-
-    def [](field)
-      headers[field]
-    end
-
-
-    # Body
-    attr_reader :body
-
-    def =~(other)
-      @body =~ other
-    end
-
-    def match(other)
-      @body.match other
-    end
-
-
-    # Errors
-    attr_accessor :errors
-
-
-    include Response::Helpers
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/recursive.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/recursive.rb
deleted file mode 100644
index bf8b965..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/recursive.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'uri'
-
-module Rack
-  # Rack::ForwardRequest gets caught by Rack::Recursive and redirects
-  # the current request to the app at +url+.
-  #
-  #   raise ForwardRequest.new("/not-found")
-  #
-
-  class ForwardRequest < Exception
-    attr_reader :url, :env
-
-    def initialize(url, env={})
-      @url = URI(url)
-      @env = env
-
-      @env["PATH_INFO"] =       @url.path
-      @env["QUERY_STRING"] =    @url.query  if @url.query
-      @env["HTTP_HOST"] =       @url.host   if @url.host
-      @env["HTTP_PORT"] =       @url.port   if @url.port
-      @env["rack.url_scheme"] = @url.scheme if @url.scheme
-
-      super "forwarding to #{url}"
-    end
-  end
-
-  # Rack::Recursive allows applications called down the chain to
-  # include data from other applications (by using
-  # <tt>rack['rack.recursive.include'][...]</tt> or raise a
-  # ForwardRequest to redirect internally.
-
-  class Recursive
-    def initialize(app)
-      @app = app
-    end
-
-    def call(env)
-      @script_name = env["SCRIPT_NAME"]
-      @app.call(env.merge('rack.recursive.include' => method(:include)))
-    rescue ForwardRequest => req
-      call(env.merge(req.env))
-    end
-
-    def include(env, path)
-      unless path.index(@script_name) == 0 && (path[@script_name.size] == ?/ ||
-                                               path[@script_name.size].nil?)
-        raise ArgumentError, "can only include below #{@script_name}, not #{path}"
-      end
-
-      env = env.merge("PATH_INFO" => path, "SCRIPT_NAME" => @script_name,
-                      "REQUEST_METHOD" => "GET",
-                      "CONTENT_LENGTH" => "0", "CONTENT_TYPE" => "",
-                      "rack.input" => StringIO.new(""))
-      @app.call(env)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/reloader.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/reloader.rb
deleted file mode 100644
index 25ca2f9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/reloader.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-require 'thread'
-
-module Rack
-  # Rack::Reloader checks on every request, but at most every +secs+
-  # seconds, if a file loaded changed, and reloads it, logging to
-  # rack.errors.
-  #
-  # It is recommended you use ShowExceptions to catch SyntaxErrors etc.
-
-  class Reloader
-    def initialize(app, secs=10)
-      @app = app
-      @secs = secs              # reload every @secs seconds max
-      @last = Time.now
-    end
-
-    def call(env)
-      if Time.now > @last + @secs
-        Thread.exclusive {
-          reload!(env['rack.errors'])
-          @last = Time.now
-        }
-      end
-
-      @app.call(env)
-    end
-
-    def reload!(stderr=STDERR)
-      need_reload = $LOADED_FEATURES.find_all { |loaded|
-        begin
-          if loaded =~ /\A[.\/]/  # absolute filename or 1.9
-            abs = loaded
-          else
-            abs = $LOAD_PATH.map { |path| ::File.join(path, loaded) }.
-                             find { |file| ::File.exist? file }
-          end
-
-          if abs
-            ::File.mtime(abs) > @last - @secs  rescue false
-          else
-            false
-          end
-        end
-      }
-
-      need_reload.each { |l|
-        $LOADED_FEATURES.delete l
-      }
-
-      need_reload.each { |to_load|
-        begin
-          if require to_load
-            stderr.puts "#{self.class}: reloaded `#{to_load}'"
-          end
-        rescue LoadError, SyntaxError => e
-          raise e                 # Possibly ShowExceptions
-        end
-      }
-
-      stderr.flush
-      need_reload
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/request.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/request.rb
deleted file mode 100644
index 2a9bcc1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/request.rb
+++ /dev/null
@@ -1,209 +0,0 @@
-require 'rack/utils'
-
-module Rack
-  # Rack::Request provides a convenient interface to a Rack
-  # environment.  It is stateless, the environment +env+ passed to the
-  # constructor will be directly modified.
-  #
-  #   req = Rack::Request.new(env)
-  #   req.post?
-  #   req.params["data"]
-
-  class Request
-    # The environment of the request.
-    attr_reader :env
-
-    def initialize(env)
-      @env = env
-    end
-
-    def body;            @env["rack.input"]                       end
-    def scheme;          @env["rack.url_scheme"]                  end
-    def script_name;     @env["SCRIPT_NAME"].to_s                 end
-    def path_info;       @env["PATH_INFO"].to_s                   end
-    def port;            @env["SERVER_PORT"].to_i                 end
-    def request_method;  @env["REQUEST_METHOD"]                   end
-    def query_string;    @env["QUERY_STRING"].to_s                end
-    def content_length;  @env['CONTENT_LENGTH']                   end
-    def content_type;    @env['CONTENT_TYPE']                     end
-
-    # The media type (type/subtype) portion of the CONTENT_TYPE header
-    # without any media type parameters. e.g., when CONTENT_TYPE is
-    # "text/plain;charset=utf-8", the media-type is "text/plain".
-    #
-    # For more information on the use of media types in HTTP, see:
-    # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
-    def media_type
-      content_type && content_type.split(/\s*[;,]\s*/, 2)[0].downcase
-    end
-
-    # The media type parameters provided in CONTENT_TYPE as a Hash, or
-    # an empty Hash if no CONTENT_TYPE or media-type parameters were
-    # provided.  e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8",
-    # this method responds with the following Hash:
-    #   { 'charset' => 'utf-8' }
-    def media_type_params
-      return {} if content_type.nil?
-      content_type.split(/\s*[;,]\s*/)[1..-1].
-        collect { |s| s.split('=', 2) }.
-        inject({}) { |hash,(k,v)| hash[k.downcase] = v ; hash }
-    end
-
-    # The character set of the request body if a "charset" media type
-    # parameter was given, or nil if no "charset" was specified. Note
-    # that, per RFC2616, text/* media types that specify no explicit
-    # charset are to be considered ISO-8859-1.
-    def content_charset
-      media_type_params['charset']
-    end
-
-    def host
-      # Remove port number.
-      (@env["HTTP_HOST"] || @env["SERVER_NAME"]).gsub(/:\d+\z/, '')
-    end
-
-    def script_name=(s); @env["SCRIPT_NAME"] = s.to_s             end
-    def path_info=(s);   @env["PATH_INFO"] = s.to_s               end
-
-    def get?;            request_method == "GET"                  end
-    def post?;           request_method == "POST"                 end
-    def put?;            request_method == "PUT"                  end
-    def delete?;         request_method == "DELETE"               end
-    def head?;           request_method == "HEAD"                 end
-
-    # The set of form-data media-types. Requests that do not indicate
-    # one of the media types presents in this list will not be eligible
-    # for form-data / param parsing.
-    FORM_DATA_MEDIA_TYPES = [
-      nil,
-      'application/x-www-form-urlencoded',
-      'multipart/form-data'
-    ]
-
-    # Determine whether the request body contains form-data by checking
-    # the request media_type against registered form-data media-types:
-    # "application/x-www-form-urlencoded" and "multipart/form-data". The
-    # list of form-data media types can be modified through the
-    # +FORM_DATA_MEDIA_TYPES+ array.
-    def form_data?
-      FORM_DATA_MEDIA_TYPES.include?(media_type)
-    end
-
-    # Returns the data recieved in the query string.
-    def GET
-      if @env["rack.request.query_string"] == query_string
-        @env["rack.request.query_hash"]
-      else
-        @env["rack.request.query_string"] = query_string
-        @env["rack.request.query_hash"]   =
-          Utils.parse_query(query_string)
-      end
-    end
-
-    # Returns the data recieved in the request body.
-    #
-    # This method support both application/x-www-form-urlencoded and
-    # multipart/form-data.
-    def POST
-      if @env["rack.request.form_input"].eql? @env["rack.input"]
-        @env["rack.request.form_hash"]
-      elsif form_data?
-        @env["rack.request.form_input"] = @env["rack.input"]
-        unless @env["rack.request.form_hash"] =
-            Utils::Multipart.parse_multipart(env)
-          @env["rack.request.form_vars"] = @env["rack.input"].read
-          @env["rack.request.form_hash"] = Utils.parse_query(@env["rack.request.form_vars"])
-        end
-        @env["rack.request.form_hash"]
-      else
-        {}
-      end
-    end
-
-    # The union of GET and POST data.
-    def params
-      self.GET.update(self.POST)
-    rescue EOFError => e
-      self.GET
-    end
-
-    # shortcut for request.params[key]
-    def [](key)
-      params[key.to_s]
-    end
-
-    # shortcut for request.params[key] = value
-    def []=(key, value)
-      params[key.to_s] = value
-    end
-
-    # like Hash#values_at
-    def values_at(*keys)
-      keys.map{|key| params[key] }
-    end
-
-    # the referer of the client or '/'
-    def referer
-      @env['HTTP_REFERER'] || '/'
-    end
-    alias referrer referer
-
-
-    def cookies
-      return {}  unless @env["HTTP_COOKIE"]
-
-      if @env["rack.request.cookie_string"] == @env["HTTP_COOKIE"]
-        @env["rack.request.cookie_hash"]
-      else
-        @env["rack.request.cookie_string"] = @env["HTTP_COOKIE"]
-        # According to RFC 2109:
-        #   If multiple cookies satisfy the criteria above, they are ordered in
-        #   the Cookie header such that those with more specific Path attributes
-        #   precede those with less specific.  Ordering with respect to other
-        #   attributes (e.g., Domain) is unspecified.
-        @env["rack.request.cookie_hash"] =
-          Utils.parse_query(@env["rack.request.cookie_string"], ';,').inject({}) {|h,(k,v)|
-            h[k] = Array === v ? v.first : v
-            h
-          }
-      end
-    end
-
-    def xhr?
-      @env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest"
-    end
-
-    # Tries to return a remake of the original request URL as a string.
-    def url
-      url = scheme + "://"
-      url << host
-
-      if scheme == "https" && port != 443 ||
-          scheme == "http" && port != 80
-        url << ":#{port}"
-      end
-
-      url << fullpath
-
-      url
-    end
-
-    def fullpath
-      path = script_name + path_info
-      path << "?" << query_string  unless query_string.empty?
-      path
-    end
-
-    def accept_encoding
-      @env["HTTP_ACCEPT_ENCODING"].to_s.split(/,\s*/).map do |part|
-        m = /^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$/.match(part) # From WEBrick
-
-        if m
-          [m[1], (m[2] || 1.0).to_f]
-        else
-          raise "Invalid value for Accept-Encoding: #{part.inspect}"
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/response.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/response.rb
deleted file mode 100644
index 3ae095f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/response.rb
+++ /dev/null
@@ -1,166 +0,0 @@
-require 'rack/request'
-require 'rack/utils'
-
-module Rack
-  # Rack::Response provides a convenient interface to create a Rack
-  # response.
-  #
-  # It allows setting of headers and cookies, and provides useful
-  # defaults (a OK response containing HTML).
-  #
-  # You can use Response#write to iteratively generate your response,
-  # but note that this is buffered by Rack::Response until you call
-  # +finish+.  +finish+ however can take a block inside which calls to
-  # +write+ are syncronous with the Rack response.
-  #
-  # Your application's +call+ should end returning Response#finish.
-
-  class Response
-    def initialize(body=[], status=200, header={}, &block)
-      @status = status
-      @header = Utils::HeaderHash.new({"Content-Type" => "text/html"}.
-                                      merge(header))
-
-      @writer = lambda { |x| @body << x }
-      @block = nil
-
-      @body = []
-
-      if body.respond_to? :to_str
-        write body.to_str
-      elsif body.respond_to?(:each)
-        body.each { |part|
-          write part.to_s
-        }
-      else
-        raise TypeError, "stringable or iterable required"
-      end
-
-      yield self  if block_given?
-    end
-
-    attr_reader :header
-    attr_accessor :status, :body
-
-    def [](key)
-      header[key]
-    end
-
-    def []=(key, value)
-      header[key] = value
-    end
-
-    def set_cookie(key, value)
-      case value
-      when Hash
-        domain  = "; domain="  + value[:domain]    if value[:domain]
-        path    = "; path="    + value[:path]      if value[:path]
-        # According to RFC 2109, we need dashes here.
-        # N.B.: cgi.rb uses spaces...
-        expires = "; expires=" + value[:expires].clone.gmtime.
-          strftime("%a, %d-%b-%Y %H:%M:%S GMT")    if value[:expires]
-        value = value[:value]
-      end
-      value = [value]  unless Array === value
-      cookie = Utils.escape(key) + "=" +
-        value.map { |v| Utils.escape v }.join("&") +
-        "#{domain}#{path}#{expires}"
-
-      case self["Set-Cookie"]
-      when Array
-        self["Set-Cookie"] << cookie
-      when String
-        self["Set-Cookie"] = [self["Set-Cookie"], cookie]
-      when nil
-        self["Set-Cookie"] = cookie
-      end
-    end
-
-    def delete_cookie(key, value={})
-      unless Array === self["Set-Cookie"]
-        self["Set-Cookie"] = [self["Set-Cookie"]].compact
-      end
-
-      self["Set-Cookie"].reject! { |cookie|
-        cookie =~ /\A#{Utils.escape(key)}=/
-      }
-
-      set_cookie(key,
-                 {:value => '', :path => nil, :domain => nil,
-                   :expires => Time.at(0) }.merge(value))
-    end
-
-
-    def finish(&block)
-      @block = block
-
-      if [204, 304].include?(status.to_i)
-        header.delete "Content-Type"
-        [status.to_i, header.to_hash, []]
-      else
-        [status.to_i, header.to_hash, self]
-      end
-    end
-    alias to_a finish           # For *response
-
-    def each(&callback)
-      @body.each(&callback)
-      @writer = callback
-      @block.call(self)  if @block
-    end
-
-    def write(str)
-      @writer.call str.to_s
-      str
-    end
-
-    def close
-      body.close if body.respond_to?(:close)
-    end
-
-    def empty?
-      @block == nil && @body.empty?
-    end
-
-    alias headers header
-
-    module Helpers
-      def invalid?;       @status < 100 || @status >= 600;       end
-
-      def informational?; @status >= 100 && @status < 200;       end
-      def successful?;    @status >= 200 && @status < 300;       end
-      def redirection?;   @status >= 300 && @status < 400;       end
-      def client_error?;  @status >= 400 && @status < 500;       end
-      def server_error?;  @status >= 500 && @status < 600;       end
-
-      def ok?;            @status == 200;                        end
-      def forbidden?;     @status == 403;                        end
-      def not_found?;     @status == 404;                        end
-
-      def redirect?;      [301, 302, 303, 307].include? @status; end
-      def empty?;         [201, 204, 304].include?      @status; end
-
-      # Headers
-      attr_reader :headers, :original_headers
-
-      def include?(header)
-        !!headers[header]
-      end
-
-      def content_type
-        headers["Content-Type"]
-      end
-
-      def content_length
-        cl = headers["Content-Length"]
-        cl ? cl.to_i : cl
-      end
-
-      def location
-        headers["Location"]
-      end
-    end
-
-    include Helpers
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/abstract/id.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/abstract/id.rb
deleted file mode 100644
index c220b2c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/abstract/id.rb
+++ /dev/null
@@ -1,140 +0,0 @@
-# AUTHOR: blink <blinketje at gmail.com>; blink#ruby-lang at irc.freenode.net
-# bugrep: Andreas Zehnder
-
-require 'rack/utils'
-require 'time'
-
-module Rack
-  module Session
-    module Abstract
-      # ID sets up a basic framework for implementing an id based sessioning
-      # service. Cookies sent to the client for maintaining sessions will only
-      # contain an id reference. Only #get_session and #set_session should
-      # need to be overwritten.
-      #
-      # All parameters are optional.
-      # * :key determines the name of the cookie, by default it is
-      #   'rack.session'
-      # * :domain and :path set the related cookie values, by default
-      #   domain is nil, and the path is '/'.
-      # * :expire_after is the number of seconds in which the session
-      #   cookie will expire. By default it is set not to provide any
-      #   expiry time.
-      class ID
-        attr_reader :key
-        DEFAULT_OPTIONS = {
-          :key =>           'rack.session',
-          :path =>          '/',
-          :domain =>        nil,
-          :expire_after =>  nil
-        }
-
-        def initialize(app, options={})
-          @default_options = self.class::DEFAULT_OPTIONS.merge(options)
-          @key = @default_options[:key]
-          @default_context = context app
-        end
-
-        def call(env)
-          @default_context.call(env)
-        end
-
-        def context(app)
-          Rack::Utils::Context.new self, app do |env|
-            load_session env
-            response = app.call(env)
-            commit_session env, response
-            response
-          end
-        end
-
-        private
-
-        # Extracts the session id from provided cookies and passes it and the
-        # environment to #get_session. It then sets the resulting session into
-        # 'rack.session', and places options and session metadata into
-        # 'rack.session.options'.
-        def load_session(env)
-          sid           = (env['HTTP_COOKIE']||'')[/#{@key}=([^,;]+)/,1]
-          sid, session  = get_session(env, sid)
-          unless session.is_a?(Hash)
-            puts 'Session: '+sid.inspect+"\n"+session.inspect if $DEBUG
-            raise TypeError, 'Session not a Hash'
-          end
-
-          options = @default_options.
-            merge({ :id => sid, :by => self, :at => Time.now })
-
-          env['rack.session'] = session
-          env['rack.session.options'] = options
-
-          return true
-        end
-
-        # Acquires the session from the environment and the session id from
-        # the session options and passes them to #set_session. It then
-        # proceeds to set a cookie up in the response with the session's id.
-        def commit_session(env, response)
-          unless response.is_a?(Array)
-            puts 'Response: '+response.inspect if $DEBUG
-            raise ArgumentError, 'Response is not an array.'
-          end
-
-          options = env['rack.session.options']
-          unless options.is_a?(Hash)
-            puts 'Options: '+options.inspect if $DEBUG
-            raise TypeError, 'Options not a Hash'
-          end
-
-          sid, time, z = options.values_at(:id, :at, :by)
-          unless self == z
-            warn "#{self} not managing this session."
-            return
-          end
-
-          unless env['rack.session'].is_a?(Hash)
-            warn 'Session: '+sid.inspect+"\n"+session.inspect if $DEBUG
-            raise TypeError, 'Session not a Hash'
-          end
-
-          unless set_session(env, sid)
-            warn "Session not saved." if $DEBUG
-            warn "#{env['rack.session'].inspect} has been lost."if $DEBUG
-            return false
-          end
-
-          cookie = Utils.escape(@key)+'='+Utils.escape(sid)
-          cookie<< "; domain=#{options[:domain]}" if options[:domain]
-          cookie<< "; path=#{options[:path]}" if options[:path]
-          if options[:expire_after]
-            expiry = time + options[:expire_after]
-            cookie<< "; expires=#{expiry.httpdate}"
-          end
-
-          case a = (h = response[1])['Set-Cookie']
-          when Array then  a << cookie
-          when String then h['Set-Cookie'] = [a, cookie]
-          when nil then    h['Set-Cookie'] = cookie
-          end
-
-          return true
-        end
-
-        # Should return [session_id, session]. All thread safety and session
-        # retrival proceedures should occur here.
-        # If nil is provided as the session id, generation of a new valid id
-        # should occur within.
-        def get_session(env, sid)
-          raise '#get_session needs to be implemented.'
-        end
-
-        # All thread safety and session storage proceedures should occur here.
-        # Should return true or false dependant on whether or not the session
-        # was saved or not.
-        def set_session(env, sid)
-          raise '#set_session needs to be implemented.'
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/cookie.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/cookie.rb
deleted file mode 100644
index 154a87c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/cookie.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-module Rack
-
-  module Session
-
-    # Rack::Session::Cookie provides simple cookie based session management.
-    # The session is a Ruby Hash stored as base64 encoded marshalled data
-    # set to :key (default: rack.session).
-    #
-    # Example:
-    #
-    #     use Rack::Session::Cookie, :key => 'rack.session',
-    #                                :domain => 'foo.com',
-    #                                :path => '/',
-    #                                :expire_after => 2592000
-    #
-    #     All parameters are optional.
-
-    class Cookie
-
-      def initialize(app, options={})
-        @app = app
-        @key = options[:key] || "rack.session"
-        @default_options = {:domain => nil,
-          :path => "/",
-          :expire_after => nil}.merge(options)
-      end
-
-      def call(env)
-        load_session(env)
-        status, headers, body = @app.call(env)
-        commit_session(env, status, headers, body)
-      end
-
-      private
-
-      def load_session(env)
-        request = Rack::Request.new(env)
-        session_data = request.cookies[@key]
-
-        begin
-          session_data = session_data.unpack("m*").first
-          session_data = Marshal.load(session_data)
-          env["rack.session"] = session_data
-        rescue
-          env["rack.session"] = Hash.new
-        end
-
-        env["rack.session.options"] = @default_options.dup
-      end
-
-      def commit_session(env, status, headers, body)
-        session_data = Marshal.dump(env["rack.session"])
-        session_data = [session_data].pack("m*")
-
-        if session_data.size > (4096 - @key.size)
-          env["rack.errors"].puts("Warning! Rack::Session::Cookie data size exceeds 4K. Content dropped.")
-          [status, headers, body]
-        else
-          options = env["rack.session.options"]
-          cookie = Hash.new
-          cookie[:value] = session_data
-          cookie[:expires] = Time.now + options[:expire_after] unless options[:expire_after].nil?
-          response = Rack::Response.new(body, status, headers)
-          response.set_cookie(@key, cookie.merge(options))
-          response.to_a
-        end
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/memcache.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/memcache.rb
deleted file mode 100644
index 7cda9d8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/memcache.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-# AUTHOR: blink <blinketje at gmail.com>; blink#ruby-lang at irc.freenode.net
-
-require 'rack/session/abstract/id'
-require 'memcache'
-
-module Rack
-  module Session
-    # Rack::Session::Memcache provides simple cookie based session management.
-    # Session data is stored in memcached. The corresponding session key is
-    # maintained in the cookie.
-    # You may treat Session::Memcache as you would Session::Pool with the
-    # following caveats.
-    #
-    # * Setting :expire_after to 0 would note to the Memcache server to hang
-    #   onto the session data until it would drop it according to it's own
-    #   specifications. However, the cookie sent to the client would expire
-    #   immediately.
-    #
-    # Note that memcache does drop data before it may be listed to expire. For
-    # a full description of behaviour, please see memcache's documentation.
-
-    class Memcache < Abstract::ID
-      attr_reader :mutex, :pool
-      DEFAULT_OPTIONS = Abstract::ID::DEFAULT_OPTIONS.merge({
-        :namespace => 'rack:session',
-        :memcache_server => 'localhost:11211'
-      })
-
-      def initialize(app, options={})
-        super
-        @pool = MemCache.new @default_options[:memcache_server], @default_options
-        unless @pool.servers.any?{|s|s.alive?}
-          raise "#{self} unable to find server during initialization."
-        end
-        @mutex = Mutex.new
-      end
-
-      private
-
-      def get_session(env, sid)
-        session = sid && @pool.get(sid)
-        unless session and session.is_a?(Hash)
-          session = {}
-          lc = 0
-          @mutex.synchronize do
-            begin
-              raise RuntimeError, 'Unique id finding looping excessively' if (lc+=1) > 1000
-              sid = "%08x" % rand(0xffffffff)
-              ret = @pool.add(sid, session)
-            end until /^STORED/ =~ ret
-          end
-        end
-        class << session
-          @deleted = []
-          def delete key
-            (@deleted||=[]) << key
-            super
-          end
-        end
-        [sid, session]
-      rescue MemCache::MemCacheError, Errno::ECONNREFUSED # MemCache server cannot be contacted
-        warn "#{self} is unable to find server."
-        warn $!.inspect
-        return [ nil, {} ]
-      end
-
-      def set_session(env, sid)
-        session = env['rack.session']
-        options = env['rack.session.options']
-        expiry  = options[:expire_after] || 0
-        o, s = @mutex.synchronize do
-          old_session = @pool.get(sid)
-          unless old_session.is_a?(Hash)
-            warn 'Session not properly initialized.' if $DEBUG
-            old_session = {}
-            @pool.add sid, old_session, expiry
-          end
-          session.instance_eval do
-            @deleted.each{|k| old_session.delete(k) } if defined? @deleted
-          end
-          @pool.set sid, old_session.merge(session), expiry
-          [old_session, session]
-        end
-        s.each do |k,v|
-          next unless o.has_key?(k) and v != o[k]
-          warn "session value assignment collision at #{k.inspect}:"+
-            "\n\t#{o[k].inspect}\n\t#{v.inspect}"
-        end if $DEBUG and env['rack.multithread']
-        return true
-      rescue MemCache::MemCacheError, Errno::ECONNREFUSED # MemCache server cannot be contacted
-        warn "#{self} is unable to find server."
-        warn $!.inspect
-        return false
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/pool.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/pool.rb
deleted file mode 100644
index 6e5e788..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/session/pool.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-# AUTHOR: blink <blinketje at gmail.com>; blink#ruby-lang at irc.freenode.net
-# THANKS:
-#   apeiros, for session id generation, expiry setup, and threadiness
-#   sergio, threadiness and bugreps
-
-require 'rack/session/abstract/id'
-require 'thread'
-
-module Rack
-  module Session
-    # Rack::Session::Pool provides simple cookie based session management.
-    # Session data is stored in a hash held by @pool.
-    # In the context of a multithreaded environment, sessions being
-    # committed to the pool is done in a merging manner.
-    #
-    # Example:
-    #   myapp = MyRackApp.new
-    #   sessioned = Rack::Session::Pool.new(myapp,
-    #     :key => 'rack.session',
-    #     :domain => 'foo.com',
-    #     :path => '/',
-    #     :expire_after => 2592000
-    #   )
-    #   Rack::Handler::WEBrick.run sessioned
-
-    class Pool < Abstract::ID
-      attr_reader :mutex, :pool
-      DEFAULT_OPTIONS = Abstract::ID::DEFAULT_OPTIONS.dup
-
-      def initialize(app, options={})
-        super
-        @pool = Hash.new
-        @mutex = Mutex.new
-      end
-
-      private
-
-      def get_session(env, sid)
-        session = @mutex.synchronize do
-          unless sess = @pool[sid] and ((expires = sess[:expire_at]).nil? or expires > Time.now)
-            @pool.delete_if{|k,v| expiry = v[:expire_at] and expiry < Time.now }
-            begin
-              sid = "%08x" % rand(0xffffffff)
-            end while @pool.has_key?(sid)
-          end
-          @pool[sid] ||= {}
-        end
-        [sid, session]
-      end
-
-      def set_session(env, sid)
-        options = env['rack.session.options']
-        expiry = options[:expire_after] && options[:at]+options[:expire_after]
-        @mutex.synchronize do
-          old_session = @pool[sid]
-          old_session[:expire_at] = expiry if expiry
-          session = old_session.merge(env['rack.session'])
-          @pool[sid] = session
-          session.each do |k,v|
-            next unless old_session.has_key?(k) and v != old_session[k]
-            warn "session value assignment collision at #{k}: #{old_session[k]} <- #{v}"
-          end if $DEBUG and env['rack.multithread']
-        end
-        return true
-      rescue
-        warn "#{self} is unable to find server."
-        warn "#{env['rack.session'].inspect} has been lost."
-        warn $!.inspect
-        return false
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/showexceptions.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/showexceptions.rb
deleted file mode 100644
index 1c85dec..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/showexceptions.rb
+++ /dev/null
@@ -1,344 +0,0 @@
-require 'ostruct'
-require 'erb'
-require 'rack/request'
-
-module Rack
-  # Rack::ShowExceptions catches all exceptions raised from the app it
-  # wraps.  It shows a useful backtrace with the sourcefile and
-  # clickable context, the whole Rack environment and the request
-  # data.
-  #
-  # Be careful when you use this on public-facing sites as it could
-  # reveal information helpful to attackers.
-
-  class ShowExceptions
-    CONTEXT = 7
-
-    def initialize(app)
-      @app = app
-      @template = ERB.new(TEMPLATE)
-    end
-
-    def call(env)
-      @app.call(env)
-    rescue StandardError, LoadError, SyntaxError => e
-      [500, {"Content-Type" => "text/html"}, pretty(env, e)]
-    end
-
-    def pretty(env, exception)
-      req = Rack::Request.new(env)
-      path = (req.script_name + req.path_info).squeeze("/")
-
-      frames = exception.backtrace.map { |line|
-        frame = OpenStruct.new
-        if line =~ /(.*?):(\d+)(:in `(.*)')?/
-          frame.filename = $1
-          frame.lineno = $2.to_i
-          frame.function = $4
-
-          begin
-            lineno = frame.lineno-1
-            lines = ::File.readlines(frame.filename)
-            frame.pre_context_lineno = [lineno-CONTEXT, 0].max
-            frame.pre_context = lines[frame.pre_context_lineno...lineno]
-            frame.context_line = lines[lineno].chomp
-            frame.post_context_lineno = [lineno+CONTEXT, lines.size].min
-            frame.post_context = lines[lineno+1..frame.post_context_lineno]
-          rescue
-          end
-
-          frame
-        else
-          nil
-        end
-      }.compact
-
-      env["rack.errors"].puts "#{exception.class}: #{exception.message}"
-      env["rack.errors"].puts exception.backtrace.map { |l| "\t" + l }
-      env["rack.errors"].flush
-
-      [@template.result(binding)]
-    end
-
-    def h(obj)                  # :nodoc:
-      case obj
-      when String
-        Utils.escape_html(obj)
-      else
-        Utils.escape_html(obj.inspect)
-      end
-    end
-
-    # :stopdoc:
-
-# adapted from Django <djangoproject.com>
-# Copyright (c) 2005, the Lawrence Journal-World
-# Used under the modified BSD license:
-# http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
-TEMPLATE = <<'HTML'
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-  <meta name="robots" content="NONE,NOARCHIVE" />
-  <title><%=h exception.class %> at <%=h path %></title>
-  <style type="text/css">
-    html * { padding:0; margin:0; }
-    body * { padding:10px 20px; }
-    body * * { padding:0; }
-    body { font:small sans-serif; }
-    body>div { border-bottom:1px solid #ddd; }
-    h1 { font-weight:normal; }
-    h2 { margin-bottom:.8em; }
-    h2 span { font-size:80%; color:#666; font-weight:normal; }
-    h3 { margin:1em 0 .5em 0; }
-    h4 { margin:0 0 .5em 0; font-weight: normal; }
-    table {
-        border:1px solid #ccc; border-collapse: collapse; background:white; }
-    tbody td, tbody th { vertical-align:top; padding:2px 3px; }
-    thead th {
-        padding:1px 6px 1px 3px; background:#fefefe; text-align:left;
-        font-weight:normal; font-size:11px; border:1px solid #ddd; }
-    tbody th { text-align:right; color:#666; padding-right:.5em; }
-    table.vars { margin:5px 0 2px 40px; }
-    table.vars td, table.req td { font-family:monospace; }
-    table td.code { width:100%;}
-    table td.code div { overflow:hidden; }
-    table.source th { color:#666; }
-    table.source td {
-        font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
-    ul.traceback { list-style-type:none; }
-    ul.traceback li.frame { margin-bottom:1em; }
-    div.context { margin: 10px 0; }
-    div.context ol {
-        padding-left:30px; margin:0 10px; list-style-position: inside; }
-    div.context ol li {
-        font-family:monospace; white-space:pre; color:#666; cursor:pointer; }
-    div.context ol.context-line li { color:black; background-color:#ccc; }
-    div.context ol.context-line li span { float: right; }
-    div.commands { margin-left: 40px; }
-    div.commands a { color:black; text-decoration:none; }
-    #summary { background: #ffc; }
-    #summary h2 { font-weight: normal; color: #666; }
-    #summary ul#quicklinks { list-style-type: none; margin-bottom: 2em; }
-    #summary ul#quicklinks li { float: left; padding: 0 1em; }
-    #summary ul#quicklinks>li+li { border-left: 1px #666 solid; }
-    #explanation { background:#eee; }
-    #template, #template-not-exist { background:#f6f6f6; }
-    #template-not-exist ul { margin: 0 0 0 20px; }
-    #traceback { background:#eee; }
-    #requestinfo { background:#f6f6f6; padding-left:120px; }
-    #summary table { border:none; background:transparent; }
-    #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
-    #requestinfo h3 { margin-bottom:-1em; }
-    .error { background: #ffc; }
-    .specific { color:#cc3300; font-weight:bold; }
-  </style>
-  <script type="text/javascript">
-  //<!--
-    function getElementsByClassName(oElm, strTagName, strClassName){
-        // Written by Jonathan Snook, http://www.snook.ca/jon;
-        // Add-ons by Robert Nyman, http://www.robertnyman.com
-        var arrElements = (strTagName == "*" && document.all)? document.all :
-        oElm.getElementsByTagName(strTagName);
-        var arrReturnElements = new Array();
-        strClassName = strClassName.replace(/\-/g, "\\-");
-        var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$$)");
-        var oElement;
-        for(var i=0; i<arrElements.length; i++){
-            oElement = arrElements[i];
-            if(oRegExp.test(oElement.className)){
-                arrReturnElements.push(oElement);
-            }
-        }
-        return (arrReturnElements)
-    }
-    function hideAll(elems) {
-      for (var e = 0; e < elems.length; e++) {
-        elems[e].style.display = 'none';
-      }
-    }
-    window.onload = function() {
-      hideAll(getElementsByClassName(document, 'table', 'vars'));
-      hideAll(getElementsByClassName(document, 'ol', 'pre-context'));
-      hideAll(getElementsByClassName(document, 'ol', 'post-context'));
-    }
-    function toggle() {
-      for (var i = 0; i < arguments.length; i++) {
-        var e = document.getElementById(arguments[i]);
-        if (e) {
-          e.style.display = e.style.display == 'none' ? 'block' : 'none';
-        }
-      }
-      return false;
-    }
-    function varToggle(link, id) {
-      toggle('v' + id);
-      var s = link.getElementsByTagName('span')[0];
-      var uarr = String.fromCharCode(0x25b6);
-      var darr = String.fromCharCode(0x25bc);
-      s.innerHTML = s.innerHTML == uarr ? darr : uarr;
-      return false;
-    }
-    //-->
-  </script>
-</head>
-<body>
-
-<div id="summary">
-  <h1><%=h exception.class %> at <%=h path %></h1>
-  <h2><%=h exception.message %></h2>
-  <table><tr>
-    <th>Ruby</th>
-    <td><code><%=h frames.first.filename %></code>: in <code><%=h frames.first.function %></code>, line <%=h frames.first.lineno %></td>
-  </tr><tr>
-    <th>Web</th>
-    <td><code><%=h req.request_method %> <%=h(req.host + path)%></code></td>
-  </tr></table>
-
-  <h3>Jump to:</h3>
-  <ul id="quicklinks">
-    <li><a href="#get-info">GET</a></li>
-    <li><a href="#post-info">POST</a></li>
-    <li><a href="#cookie-info">Cookies</a></li>
-    <li><a href="#env-info">ENV</a></li>
-  </ul>
-</div>
-
-<div id="traceback">
-  <h2>Traceback <span>(innermost first)</span></h2>
-  <ul class="traceback">
-<% frames.each { |frame| %>
-      <li class="frame">
-        <code><%=h frame.filename %></code>: in <code><%=h frame.function %></code>
-
-          <% if frame.context_line %>
-          <div class="context" id="c<%=h frame.object_id %>">
-              <% if frame.pre_context %>
-              <ol start="<%=h frame.pre_context_lineno+1 %>" class="pre-context" id="pre<%=h frame.object_id %>">
-                <% frame.pre_context.each { |line| %>
-                <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h line %></li>
-                <% } %>
-              </ol>
-              <% end %>
-
-            <ol start="<%=h frame.lineno %>" class="context-line">
-              <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h frame.context_line %><span>...</span></li></ol>
-
-              <% if frame.post_context %>
-              <ol start='<%=h frame.lineno+1 %>' class="post-context" id="post<%=h frame.object_id %>">
-                <% frame.post_context.each { |line| %>
-                <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h line %></li>
-                <% } %>
-              </ol>
-              <% end %>
-          </div>
-          <% end %>
-      </li>
-<% } %>
-  </ul>
-</div>
-
-<div id="requestinfo">
-  <h2>Request information</h2>
-
-  <h3 id="get-info">GET</h3>
-  <% unless req.GET.empty? %>
-    <table class="req">
-      <thead>
-        <tr>
-          <th>Variable</th>
-          <th>Value</th>
-        </tr>
-      </thead>
-      <tbody>
-          <% req.GET.sort_by { |k, v| k.to_s }.each { |key, val| %>
-          <tr>
-            <td><%=h key %></td>
-            <td class="code"><div><%=h val.inspect %></div></td>
-          </tr>
-          <% } %>
-      </tbody>
-    </table>
-  <% else %>
-    <p>No GET data.</p>
-  <% end %>
-
-  <h3 id="post-info">POST</h3>
-  <% unless req.POST.empty? %>
-    <table class="req">
-      <thead>
-        <tr>
-          <th>Variable</th>
-          <th>Value</th>
-        </tr>
-      </thead>
-      <tbody>
-          <% req.POST.sort_by { |k, v| k.to_s }.each { |key, val| %>
-          <tr>
-            <td><%=h key %></td>
-            <td class="code"><div><%=h val.inspect %></div></td>
-          </tr>
-          <% } %>
-      </tbody>
-    </table>
-  <% else %>
-    <p>No POST data.</p>
-  <% end %>
-
-
-  <h3 id="cookie-info">COOKIES</h3>
-  <% unless req.cookies.empty? %>
-    <table class="req">
-      <thead>
-        <tr>
-          <th>Variable</th>
-          <th>Value</th>
-        </tr>
-      </thead>
-      <tbody>
-        <% req.cookies.each { |key, val| %>
-          <tr>
-            <td><%=h key %></td>
-            <td class="code"><div><%=h val.inspect %></div></td>
-          </tr>
-        <% } %>
-      </tbody>
-    </table>
-  <% else %>
-    <p>No cookie data.</p>
-  <% end %>
-
-  <h3 id="env-info">Rack ENV</h3>
-    <table class="req">
-      <thead>
-        <tr>
-          <th>Variable</th>
-          <th>Value</th>
-        </tr>
-      </thead>
-      <tbody>
-          <% env.sort_by { |k, v| k.to_s }.each { |key, val| %>
-          <tr>
-            <td><%=h key %></td>
-            <td class="code"><div><%=h val %></div></td>
-          </tr>
-          <% } %>
-      </tbody>
-    </table>
-
-</div>
-
-<div id="explanation">
-  <p>
-    You're seeing this error because you use <code>Rack::ShowException</code>.
-  </p>
-</div>
-
-</body>
-</html>
-HTML
-
-    # :startdoc:
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/showstatus.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/showstatus.rb
deleted file mode 100644
index ca81f7d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/showstatus.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-require 'erb'
-require 'rack/request'
-require 'rack/utils'
-
-module Rack
-  # Rack::ShowStatus catches all empty responses the app it wraps and
-  # replaces them with a site explaining the error.
-  #
-  # Additional details can be put into <tt>rack.showstatus.detail</tt>
-  # and will be shown as HTML.  If such details exist, the error page
-  # is always rendered, even if the reply was not empty.
-
-  class ShowStatus
-    def initialize(app)
-      @app = app
-      @template = ERB.new(TEMPLATE)
-    end
-
-    def call(env)
-      status, headers, body = @app.call(env)
-
-      # client or server error, or explicit message
-      if status.to_i >= 400 &&
-          (body.empty? rescue false) || env["rack.showstatus.detail"]
-        req = Rack::Request.new(env)
-        message = Rack::Utils::HTTP_STATUS_CODES[status.to_i] || status.to_s
-        detail = env["rack.showstatus.detail"] || message
-        body = @template.result(binding)
-        size = body.respond_to?(:bytesize) ? body.bytesize : body.size
-        [status, headers.merge("Content-Type" => "text/html", "Content-Length" => size.to_s), [body]]
-      else
-        [status, headers, body]
-      end
-    end
-
-    def h(obj)                  # :nodoc:
-      case obj
-      when String
-        Utils.escape_html(obj)
-      else
-        Utils.escape_html(obj.inspect)
-      end
-    end
-
-    # :stopdoc:
-
-# adapted from Django <djangoproject.com>
-# Copyright (c) 2005, the Lawrence Journal-World
-# Used under the modified BSD license:
-# http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
-TEMPLATE = <<'HTML'
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-  <title><%=h message %> at <%=h req.script_name + req.path_info %></title>
-  <meta name="robots" content="NONE,NOARCHIVE" />
-  <style type="text/css">
-    html * { padding:0; margin:0; }
-    body * { padding:10px 20px; }
-    body * * { padding:0; }
-    body { font:small sans-serif; background:#eee; }
-    body>div { border-bottom:1px solid #ddd; }
-    h1 { font-weight:normal; margin-bottom:.4em; }
-    h1 span { font-size:60%; color:#666; font-weight:normal; }
-    table { border:none; border-collapse: collapse; width:100%; }
-    td, th { vertical-align:top; padding:2px 3px; }
-    th { width:12em; text-align:right; color:#666; padding-right:.5em; }
-    #info { background:#f6f6f6; }
-    #info ol { margin: 0.5em 4em; }
-    #info ol li { font-family: monospace; }
-    #summary { background: #ffc; }
-    #explanation { background:#eee; border-bottom: 0px none; }
-  </style>
-</head>
-<body>
-  <div id="summary">
-    <h1><%=h message %> <span>(<%= status.to_i %>)</span></h1>
-    <table class="meta">
-      <tr>
-        <th>Request Method:</th>
-        <td><%=h req.request_method %></td>
-      </tr>
-      <tr>
-        <th>Request URL:</th>
-      <td><%=h req.url %></td>
-      </tr>
-    </table>
-  </div>
-  <div id="info">
-    <p><%= detail %></p>
-  </div>
-
-  <div id="explanation">
-    <p>
-    You're seeing this error because you use <code>Rack::ShowStatus</code>.
-    </p>
-  </div>
-</body>
-</html>
-HTML
-
-    # :startdoc:
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/static.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/static.rb
deleted file mode 100644
index 168e8f8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/static.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-module Rack
-
-  # The Rack::Static middleware intercepts requests for static files
-  # (javascript files, images, stylesheets, etc) based on the url prefixes
-  # passed in the options, and serves them using a Rack::File object. This
-  # allows a Rack stack to serve both static and dynamic content.
-  #
-  # Examples:
-  #     use Rack::Static, :urls => ["/media"]
-  #     will serve all requests beginning with /media from the "media" folder
-  #     located in the current directory (ie media/*).
-  #
-  #     use Rack::Static, :urls => ["/css", "/images"], :root => "public"
-  #     will serve all requests beginning with /css or /images from the folder
-  #     "public" in the current directory (ie public/css/* and public/images/*)
-
-  class Static
-
-    def initialize(app, options={})
-      @app = app
-      @urls = options[:urls] || ["/favicon.ico"]
-      root = options[:root] || Dir.pwd
-      @file_server = Rack::File.new(root)
-    end
-
-    def call(env)
-      path = env["PATH_INFO"]
-      can_serve = @urls.any? { |url| path.index(url) == 0 }
-
-      if can_serve
-        @file_server.call(env)
-      else
-        @app.call(env)
-      end
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/urlmap.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/urlmap.rb
deleted file mode 100644
index b00f2d7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/urlmap.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-module Rack
-  # Rack::URLMap takes a hash mapping urls or paths to apps, and
-  # dispatches accordingly.  Support for HTTP/1.1 host names exists if
-  # the URLs start with <tt>http://</tt> or <tt>https://</tt>.
-  #
-  # URLMap modifies the SCRIPT_NAME and PATH_INFO such that the part
-  # relevant for dispatch is in the SCRIPT_NAME, and the rest in the
-  # PATH_INFO.  This should be taken care of when you need to
-  # reconstruct the URL in order to create links.
-  #
-  # URLMap dispatches in such a way that the longest paths are tried
-  # first, since they are most specific.
-
-  class URLMap
-    def initialize(map)
-      @mapping = map.map { |location, app|
-        if location =~ %r{\Ahttps?://(.*?)(/.*)}
-          host, location = $1, $2
-        else
-          host = nil
-        end
-
-        unless location[0] == ?/
-          raise ArgumentError, "paths need to start with /"
-        end
-        location = location.chomp('/')
-
-        [host, location, app]
-      }.sort_by { |(h, l, a)| -l.size }  # Longest path first
-    end
-
-    def call(env)
-      path = env["PATH_INFO"].to_s.squeeze("/")
-      hHost, sName, sPort = env.values_at('HTTP_HOST','SERVER_NAME','SERVER_PORT')
-      @mapping.each { |host, location, app|
-        next unless (hHost == host || sName == host \
-          || (host.nil? && (hHost == sName || hHost == sName+':'+sPort)))
-        next unless location == path[0, location.size]
-        next unless path[location.size] == nil || path[location.size] == ?/
-        env["SCRIPT_NAME"] += location
-        env["PATH_INFO"]    = path[location.size..-1]
-        return app.call(env)
-      }
-      [404, {"Content-Type" => "text/plain"}, ["Not Found: #{path}"]]
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/utils.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/utils.rb
deleted file mode 100644
index 25254bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/lib/rack/utils.rb
+++ /dev/null
@@ -1,318 +0,0 @@
-require 'tempfile'
-
-module Rack
-  # Rack::Utils contains a grab-bag of useful methods for writing web
-  # applications adopted from all kinds of Ruby libraries.
-
-  module Utils
-    # Performs URI escaping so that you can construct proper
-    # query strings faster.  Use this rather than the cgi.rb
-    # version since it's faster.  (Stolen from Camping).
-    def escape(s)
-      s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
-        '%'+$1.unpack('H2'*$1.size).join('%').upcase
-      }.tr(' ', '+')
-    end
-    module_function :escape
-
-    # Unescapes a URI escaped string. (Stolen from Camping).
-    def unescape(s)
-      s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n){
-        [$1.delete('%')].pack('H*')
-      }
-    end
-    module_function :unescape
-
-    # Stolen from Mongrel, with some small modifications:
-    # Parses a query string by breaking it up at the '&'
-    # and ';' characters.  You can also use this to parse
-    # cookies by changing the characters used in the second
-    # parameter (which defaults to '&;').
-
-    def parse_query(qs, d = '&;')
-      params = {}
-      
-      (qs || '').split(/[#{d}] */n).each do |p|
-        k, v = unescape(p).split('=', 2)
-        
-        if cur = params[k]
-          if cur.class == Array
-            params[k] << v
-          else
-            params[k] = [cur, v]
-          end
-        else
-          params[k] = v
-        end
-      end
-      
-      return params
-    end
-    module_function :parse_query
-    
-    def build_query(params)
-      params.map { |k, v|
-        if v.class == Array
-          build_query(v.map { |x| [k, x] })
-        else
-          escape(k) + "=" + escape(v)
-        end
-      }.join("&")
-    end
-    module_function :build_query
-
-    # Escape ampersands, brackets and quotes to their HTML/XML entities.
-    def escape_html(string)
-      string.to_s.gsub("&", "&").
-        gsub("<", "<").
-        gsub(">", ">").
-        gsub("'", "'").
-        gsub('"', """)
-    end
-    module_function :escape_html
-
-    def select_best_encoding(available_encodings, accept_encoding)
-      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
-
-      expanded_accept_encoding =
-        accept_encoding.map { |m, q|
-          if m == "*"
-            (available_encodings - accept_encoding.map { |m2, _| m2 }).map { |m2| [m2, q] }
-          else
-            [[m, q]]
-          end
-        }.inject([]) { |mem, list|
-          mem + list
-        }
-
-      encoding_candidates = expanded_accept_encoding.sort_by { |_, q| -q }.map { |m, _| m }
-
-      unless encoding_candidates.include?("identity")
-        encoding_candidates.push("identity")
-      end
-
-      expanded_accept_encoding.find_all { |m, q|
-        q == 0.0
-      }.each { |m, _|
-        encoding_candidates.delete(m)
-      }
-
-      return (encoding_candidates & available_encodings)[0]
-    end
-    module_function :select_best_encoding
-
-    # The recommended manner in which to implement a contexting application
-    # is to define a method #context in which a new Context is instantiated.
-    #
-    # As a Context is a glorified block, it is highly recommended that you
-    # define the contextual block within the application's operational scope.
-    # This would typically the application as you're place into Rack's stack.
-    #
-    #   class MyObject
-    #     ...
-    #     def context app
-    #       Rack::Utils::Context.new app do |env|
-    #         do_stuff
-    #         response = app.call(env)
-    #         do_more_stuff
-    #       end
-    #     end
-    #     ...
-    #   end
-    #
-    # mobj = MyObject.new
-    # app = mobj.context other_app
-    # Rack::Handler::Mongrel.new app
-    class Context < Proc
-      alias_method :old_inspect, :inspect
-      attr_reader :for, :app
-      def initialize app_f, app_r
-        raise 'running context not provided' unless app_f
-        raise 'running context does not respond to #context' unless app_f.respond_to? :context
-        raise 'application context not provided' unless app_r
-        raise 'application context does not respond to #call' unless app_r.respond_to? :call
-        @for = app_f
-        @app = app_r
-      end
-      def inspect
-        "#{old_inspect} ==> #{@for.inspect} ==> #{@app.inspect}"
-      end
-      def context app_r
-        raise 'new application context not provided' unless app_r
-        raise 'new application context does not respond to #call' unless app_r.respond_to? :call
-        @for.context app_r
-      end
-      def pretty_print pp
-        pp.text old_inspect
-        pp.nest 1 do
-          pp.breakable
-          pp.text '=for> '
-          pp.pp @for
-          pp.breakable
-          pp.text '=app> '
-          pp.pp @app
-        end
-      end
-    end
-
-    # A case-normalizing Hash, adjusting on [] and []=.
-    class HeaderHash < Hash
-      def initialize(hash={})
-        hash.each { |k, v| self[k] = v }
-      end
-
-      def to_hash
-        {}.replace(self)
-      end
-
-      def [](k)
-        super capitalize(k)
-      end
-
-      def []=(k, v)
-        super capitalize(k), v
-      end
-
-      def capitalize(k)
-        k.to_s.downcase.gsub(/^.|[-_\s]./) { |x| x.upcase }
-      end
-    end
-
-    # Every standard HTTP code mapped to the appropriate message.
-    # Stolen from Mongrel.
-    HTTP_STATUS_CODES = {
-      100  => 'Continue',
-      101  => 'Switching Protocols',
-      200  => 'OK',
-      201  => 'Created',
-      202  => 'Accepted',
-      203  => 'Non-Authoritative Information',
-      204  => 'No Content',
-      205  => 'Reset Content',
-      206  => 'Partial Content',
-      300  => 'Multiple Choices',
-      301  => 'Moved Permanently',
-      302  => 'Moved Temporarily',
-      303  => 'See Other',
-      304  => 'Not Modified',
-      305  => 'Use Proxy',
-      400  => 'Bad Request',
-      401  => 'Unauthorized',
-      402  => 'Payment Required',
-      403  => 'Forbidden',
-      404  => 'Not Found',
-      405  => 'Method Not Allowed',
-      406  => 'Not Acceptable',
-      407  => 'Proxy Authentication Required',
-      408  => 'Request Time-out',
-      409  => 'Conflict',
-      410  => 'Gone',
-      411  => 'Length Required',
-      412  => 'Precondition Failed',
-      413  => 'Request Entity Too Large',
-      414  => 'Request-URI Too Large',
-      415  => 'Unsupported Media Type',
-      500  => 'Internal Server Error',
-      501  => 'Not Implemented',
-      502  => 'Bad Gateway',
-      503  => 'Service Unavailable',
-      504  => 'Gateway Time-out',
-      505  => 'HTTP Version not supported'
-    }
-
-    # A multipart form data parser, adapted from IOWA.
-    #
-    # Usually, Rack::Request#POST takes care of calling this.
-
-    module Multipart
-      EOL = "\r\n"
-
-      def self.parse_multipart(env)
-        unless env['CONTENT_TYPE'] =~
-            %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)\"?|n
-          nil
-        else
-          boundary = "--#{$1}"
-
-          params = {}
-          buf = ""
-          content_length = env['CONTENT_LENGTH'].to_i
-          input = env['rack.input']
-
-          boundary_size = boundary.size + EOL.size
-          bufsize = 16384
-
-          content_length -= boundary_size
-
-          status = input.read(boundary_size)
-          raise EOFError, "bad content body"  unless status == boundary + EOL
-
-          rx = /(?:#{EOL})?#{Regexp.quote boundary}(#{EOL}|--)/
-
-          loop {
-            head = nil
-            body = ''
-            filename = content_type = name = nil
-
-            until head && buf =~ rx
-              if !head && i = buf.index("\r\n\r\n")
-                head = buf.slice!(0, i+2) # First \r\n
-                buf.slice!(0, 2)          # Second \r\n
-
-                filename = head[/Content-Disposition:.* filename="?([^\";]*)"?/ni, 1]
-                content_type = head[/Content-Type: (.*)\r\n/ni, 1]
-                name = head[/Content-Disposition:.* name="?([^\";]*)"?/ni, 1]
-
-                if filename
-                  body = Tempfile.new("RackMultipart")
-                  body.binmode  if body.respond_to?(:binmode)
-                end
-
-                next
-              end
-
-              # Save the read body part.
-              if head && (boundary_size+4 < buf.size)
-                body << buf.slice!(0, buf.size - (boundary_size+4))
-              end
-
-              c = input.read(bufsize < content_length ? bufsize : content_length)
-              raise EOFError, "bad content body"  if c.nil? || c.empty?
-              buf << c
-              content_length -= c.size
-            end
-
-            # Save the rest.
-            if i = buf.index(rx)
-              body << buf.slice!(0, i)
-              buf.slice!(0, boundary_size+2)
-
-              content_length = -1  if $1 == "--"
-            end
-
-            if filename
-              body.rewind
-              data = {:filename => filename, :type => content_type,
-                      :name => name, :tempfile => body, :head => head}
-            else
-              data = body
-            end
-
-            if name
-              if name =~ /\[\]\z/
-                params[name] ||= []
-                params[name] << data
-              else
-                params[name] = data
-              end
-            end
-
-            break  if buf.empty? || content_length == -1
-          }
-
-          params
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/lighttpd.conf b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/lighttpd.conf
deleted file mode 100644
index 8b258dd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/lighttpd.conf
+++ /dev/null
@@ -1,20 +0,0 @@
-server.modules = ("mod_fastcgi", "mod_cgi")
-server.document-root = "."
-server.errorlog = "lighttpd.errors"
-server.port = 9203
-
-server.event-handler = "freebsd-kqueue"
-
-cgi.assign = ("/test" => "",
-#              ".ru" => ""
-             )
-
-fastcgi.server = ("test.fcgi" => ("localhost" =>
-                    ("min-procs" => 1,
-                     "socket" => "/tmp/rack-test-fcgi",
-                     "bin-path" => "test.fcgi")),
-                  "test.ru" => ("localhost" =>
-                    ("min-procs" => 1,
-                     "socket" => "/tmp/rack-test-ru-fcgi",
-                     "bin-path" => "test.ru")),
-                 )
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test
deleted file mode 100644
index e4837a4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env ruby
-# -*- ruby -*-
-
-$: << File.join(File.dirname(__FILE__), "..", "..", "lib")
-
-require 'rack'
-require '../testrequest'
-
-Rack::Handler::CGI.run(Rack::Lint.new(TestRequest.new))
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test.fcgi b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test.fcgi
deleted file mode 100644
index 5e104fc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test.fcgi
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-# -*- ruby -*-
-
-$:.unshift '../../lib'
-require 'rack'
-require '../testrequest'
-
-Rack::Handler::FastCGI.run(Rack::Lint.new(TestRequest.new))
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test.ru b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test.ru
deleted file mode 100644
index 4054b88..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/cgi/test.ru
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env ../../bin/rackup
-#\ -E deployment -I ../../lib
-# -*- ruby -*-
-
-require '../testrequest'
-
-run TestRequest.new
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_basic.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_basic.rb
deleted file mode 100644
index 3a76155..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_basic.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require 'test/spec'
-
-require 'rack/auth/basic'
-require 'rack/mock'
-
-context 'Rack::Auth::Basic' do
-
-  def realm
-    'WallysWorld'
-  end
-  
-  def unprotected_app
-    lambda { |env| [ 200, {'Content-Type' => 'text/plain'}, ["Hi #{env['REMOTE_USER']}"] ] }
-  end
-  
-  def protected_app
-    app = Rack::Auth::Basic.new(unprotected_app) { |username, password| 'Boss' == username }
-    app.realm = realm
-    app
-  end
-
-  setup do
-    @request = Rack::MockRequest.new(protected_app)
-  end
-
-  def request_with_basic_auth(username, password, &block)
-    request 'HTTP_AUTHORIZATION' => 'Basic ' + ["#{username}:#{password}"].pack("m*"), &block
-  end
-
-  def request(headers = {})
-    yield @request.get('/', headers)
-  end
-
-  def assert_basic_auth_challenge(response)
-    response.should.be.a.client_error
-    response.status.should.equal 401
-    response.should.include 'WWW-Authenticate'
-    response.headers['WWW-Authenticate'].should =~ /Basic realm="/
-    response.body.should.be.empty
-  end
-
-  specify 'should challenge correctly when no credentials are specified' do
-    request do |response|
-      assert_basic_auth_challenge response
-    end
-  end
-
-  specify 'should rechallenge if incorrect credentials are specified' do
-    request_with_basic_auth 'joe', 'password' do |response|
-      assert_basic_auth_challenge response
-    end
-  end
-
-  specify 'should return application output if correct credentials are specified' do
-    request_with_basic_auth 'Boss', 'password' do |response|
-      response.status.should.equal 200
-      response.body.to_s.should.equal 'Hi Boss'
-    end
-  end
-  
-  specify 'should return 400 Bad Request if different auth scheme used' do
-    request 'HTTP_AUTHORIZATION' => 'Digest params' do |response|
-      response.should.be.a.client_error
-      response.status.should.equal 400
-      response.should.not.include 'WWW-Authenticate'
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_digest.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_digest.rb
deleted file mode 100644
index 67fb0e5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_digest.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-require 'test/spec'
-
-require 'rack/auth/digest/md5'
-require 'rack/mock'
-
-context 'Rack::Auth::Digest::MD5' do
-
-  def realm
-    'WallysWorld'
-  end
-
-  def unprotected_app
-    lambda do |env|
-      [ 200, {'Content-Type' => 'text/plain'}, ["Hi #{env['REMOTE_USER']}"] ]
-    end
-  end
-  
-  def protected_app
-    app = Rack::Auth::Digest::MD5.new(unprotected_app) do |username|
-      { 'Alice' => 'correct-password' }[username]
-    end
-    app.realm = realm
-    app.opaque = 'this-should-be-secret'
-    app
-  end
-  
-  def protected_app_with_hashed_passwords
-    app = Rack::Auth::Digest::MD5.new(unprotected_app) do |username|
-      username == 'Alice' ? Digest::MD5.hexdigest("Alice:#{realm}:correct-password") : nil
-    end
-    app.realm = realm
-    app.opaque = 'this-should-be-secret'
-    app.passwords_hashed = true
-    app
-  end
-  
-  setup do
-    @request = Rack::MockRequest.new(protected_app)
-  end
-
-  def request(path, headers = {}, &block)
-    response = @request.get(path, headers)
-    block.call(response) if block
-    return response
-  end
-  
-  class MockDigestRequest
-    def initialize(params)
-      @params = params
-    end
-    def method_missing(sym)
-      if @params.has_key? k = sym.to_s
-        return @params[k]
-      end
-      super
-    end
-    def method
-      'GET'
-    end
-    def response(password)
-      Rack::Auth::Digest::MD5.new(nil).send :digest, self, password
-    end
-  end
-  
-  def request_with_digest_auth(path, username, password, options = {}, &block)
-    response = request('/')
-    
-    return response unless response.status == 401
-    
-    if wait = options.delete(:wait)
-      sleep wait
-    end
-    
-    challenge = response['WWW-Authenticate'].split(' ', 2).last
-
-    params = Rack::Auth::Digest::Params.parse(challenge)
-
-    params['username'] = username
-    params['nc'] = '00000001'
-    params['cnonce'] = 'nonsensenonce'
-    params['uri'] = path
-        
-    params.update options
-    
-    params['response'] = MockDigestRequest.new(params).response(password)
-    
-    request(path, { 'HTTP_AUTHORIZATION' => "Digest #{params}" }, &block)
-  end
-
-  def assert_digest_auth_challenge(response)
-    response.should.be.a.client_error
-    response.status.should.equal 401
-    response.should.include 'WWW-Authenticate'
-    response.headers['WWW-Authenticate'].should =~ /^Digest /
-    response.body.should.be.empty
-  end
-  
-  def assert_bad_request(response)
-    response.should.be.a.client_error
-    response.status.should.equal 400
-    response.should.not.include 'WWW-Authenticate'
-  end
-
-  specify 'should challenge when no credentials are specified' do
-    request '/' do |response|
-      assert_digest_auth_challenge response
-    end
-  end
-  
-  specify 'should return application output if correct credentials given' do
-    request_with_digest_auth '/', 'Alice', 'correct-password' do |response|
-      response.status.should.equal 200
-      response.body.to_s.should.equal 'Hi Alice'
-    end
-  end  
-
-  specify 'should return application output if correct credentials given (hashed passwords)' do
-    @request = Rack::MockRequest.new(protected_app_with_hashed_passwords)
-    
-    request_with_digest_auth '/', 'Alice', 'correct-password' do |response|
-      response.status.should.equal 200
-      response.body.to_s.should.equal 'Hi Alice'
-    end
-  end  
-  
-  specify 'should rechallenge if incorrect username given' do
-    request_with_digest_auth '/', 'Bob', 'correct-password' do |response|
-      assert_digest_auth_challenge response
-    end
-  end
-  
-  specify 'should rechallenge if incorrect password given' do
-    request_with_digest_auth '/', 'Alice', 'wrong-password' do |response|
-      assert_digest_auth_challenge response
-    end
-  end
-  
-  specify 'should rechallenge with stale parameter if nonce is stale' do
-    begin
-      Rack::Auth::Digest::Nonce.time_limit = 1
-    
-      request_with_digest_auth '/', 'Alice', 'correct-password', :wait => 2 do |response|
-        assert_digest_auth_challenge response
-        response.headers['WWW-Authenticate'].should =~ /\bstale=true\b/
-      end
-    ensure
-      Rack::Auth::Digest::Nonce.time_limit = nil
-    end
-  end
-
-  specify 'should return 400 Bad Request if incorrect qop given' do
-    request_with_digest_auth '/', 'Alice', 'correct-password', 'qop' => 'auth-int' do |response|
-      assert_bad_request response
-    end
-  end
-
-  specify 'should return 400 Bad Request if incorrect uri given' do
-    request_with_digest_auth '/', 'Alice', 'correct-password', 'uri' => '/foo' do |response|
-      assert_bad_request response
-    end
-  end
-
-  specify 'should return 400 Bad Request if different auth scheme used' do
-    request '/', 'HTTP_AUTHORIZATION' => 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==' do |response|
-      assert_bad_request response
-    end
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_openid.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_openid.rb
deleted file mode 100644
index fd890fd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_auth_openid.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-require 'test/spec'
-
-begin
-# requires the ruby-openid gem
-require 'rack/auth/openid'
-
-context "Rack::Auth::OpenID" do
-  OID = Rack::Auth::OpenID
-  realm = 'http://path/arf'
-  ruri = %w{arf arf/blargh}
-  auri = ruri.map{|u|'/'+u}
-  furi = auri.map{|u|'http://path'+u}
-
-  specify 'realm uri should be absolute and have a path' do
-    lambda{OID.new('/path')}.
-      should.raise ArgumentError
-    lambda{OID.new('http://path')}.
-      should.raise ArgumentError
-    lambda{OID.new('http://path/')}.
-      should.not.raise
-    lambda{OID.new('http://path/arf')}.
-      should.not.raise
-  end
-
-  specify 'uri options should be absolute' do
-    [:login_good, :login_fail, :login_quit, :return_to].each do |param|
-      ruri.each do |uri|
-        lambda{OID.new(realm, {param=>uri})}.
-          should.raise ArgumentError
-      end
-      auri.each do |uri|
-        lambda{OID.new(realm, {param=>uri})}.
-          should.raise ArgumentError
-      end
-      furi.each do |uri|
-        lambda{OID.new(realm, {param=>uri})}.
-          should.not.raise
-      end
-    end
-  end
-
-  specify 'return_to should be absolute and be under the realm' do
-    lambda{OID.new(realm, {:return_to => 'http://path'})}.
-      should.raise ArgumentError
-    lambda{OID.new(realm, {:return_to => 'http://path/'})}.
-      should.raise ArgumentError
-    lambda{OID.new(realm, {:return_to => 'http://path/arf'})}.
-      should.not.raise
-    lambda{OID.new(realm, {:return_to => 'http://path/arf/'})}.
-      should.not.raise
-    lambda{OID.new(realm, {:return_to => 'http://path/arf/blargh'})}.
-      should.not.raise
-  end
-
-  specify 'extensions should be a module' do
-    ext = Object.new
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(TypeError).
-      message.should.match(/not a module/)
-    ext2 = Module.new
-    lambda{OID.new(realm).add_extension(ext2)}.
-      should.raise(ArgumentError).
-      message.should.not.match(/not a module/)
-  end
-
-  specify 'extensions should have required constants defined' do
-    ext = Module.new
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(ArgumentError).
-      message.should.match(/missing/)
-    ext::Request = nil
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(ArgumentError).
-      message.should.match(/missing/).
-        should.not.match(/Request/)
-    ext::Response = nil
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(ArgumentError).
-      message.should.match(/missing/).
-        should.not.match(/Response/)
-    ext::NS_URI = nil
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(TypeError).
-      message.should.not.match(/missing/)
-  end
-
-  specify 'extensions should have Request and Response defined and inherit from OpenID::Extension' do
-$-w, w = nil, $-w               # yuck
-    ext = Module.new
-    ext::Request = nil
-    ext::Response = nil
-    ext::NS_URI = nil
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(TypeError).
-      message.should.match(/not a class/)
-    ext::Request = Class.new()
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(TypeError).
-      message.should.match(/not a class/)
-    ext::Response = Class.new()
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(ArgumentError).
-      message.should.match(/not a decendant/)
-    ext::Request = Class.new(::OpenID::Extension)
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(ArgumentError).
-      message.should.match(/not a decendant/)
-    ext::Response = Class.new(::OpenID::Extension)
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(TypeError).
-      message.should.match(/NS_URI/)
-$-w = w
-  end
-
-  specify 'extensions should have NS_URI defined and be a string of an absolute http uri' do
-$-w, w = nil, $-w               # yuck
-    ext = Module.new
-    ext::Request = Class.new(::OpenID::Extension)
-    ext::Response = Class.new(::OpenID::Extension)
-    ext::NS_URI = nil
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(TypeError).
-      message.should.match(/not a string/)
-    ext::NS_URI = 'openid.net'
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.raise(ArgumentError).
-      message.should.match(/not an http uri/)
-    ext::NS_URI = 'http://openid.net'
-    lambda{OID.new(realm).add_extension(ext)}.
-      should.not.raise
-$-w = w
-  end
-end
-
-rescue LoadError
-  $stderr.puts "Skipping Rack::Auth::OpenID tests (ruby-openid 2 is required). `gem install ruby-openid` and try again."
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_builder.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_builder.rb
deleted file mode 100644
index 2a0b465..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_builder.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-require 'test/spec'
-
-require 'rack/builder'
-require 'rack/mock'
-
-context "Rack::Builder" do
-  specify "chains apps by default" do
-    app = Rack::Builder.new do
-      use Rack::ShowExceptions
-      run lambda { |env| raise "bzzzt" }
-    end.to_app
-
-    Rack::MockRequest.new(app).get("/").should.be.server_error
-    Rack::MockRequest.new(app).get("/").should.be.server_error
-    Rack::MockRequest.new(app).get("/").should.be.server_error
-  end
-
-  specify "has implicit #to_app" do
-    app = Rack::Builder.new do
-      use Rack::ShowExceptions
-      run lambda { |env| raise "bzzzt" }
-    end
-
-    Rack::MockRequest.new(app).get("/").should.be.server_error
-    Rack::MockRequest.new(app).get("/").should.be.server_error
-    Rack::MockRequest.new(app).get("/").should.be.server_error
-  end
-
-  specify "supports blocks on use" do
-    app = Rack::Builder.new do
-      use Rack::ShowExceptions
-      use Rack::Auth::Basic do |username, password|
-        'secret' == password
-      end
-
-      run lambda { |env| [200, {}, 'Hi Boss'] }
-    end
-
-    response = Rack::MockRequest.new(app).get("/")
-    response.should.be.client_error
-    response.status.should.equal 401
-
-    # with auth...
-    response = Rack::MockRequest.new(app).get("/", 
-        'HTTP_AUTHORIZATION' => 'Basic ' + ["joe:secret"].pack("m*"))
-    response.status.should.equal 200
-    response.body.to_s.should.equal 'Hi Boss'
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_camping.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_camping.rb
deleted file mode 100644
index bed1171..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_camping.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require 'test/spec'
-require 'stringio'
-require 'uri'
-
-begin
-  require 'rack/mock'
-
-  $-w, w = nil, $-w               # yuck
-  require 'camping'
-  require 'rack/adapter/camping'
-
-  Camping.goes :CampApp
-  module CampApp
-    module Controllers
-      class HW < R('/')
-        def get
-          @headers["X-Served-By"] = URI("http://rack.rubyforge.org")
-          "Camping works!"
-        end
-
-        def post
-          "Data: #{input.foo}"
-        end
-      end
-    end
-  end
-  $-w = w
-
-  context "Rack::Adapter::Camping" do
-    specify "works with GET" do
-      res = Rack::MockRequest.new(Rack::Adapter::Camping.new(CampApp)).
-        get("/")
-
-      res.should.be.ok
-      res["Content-Type"].should.equal "text/html"
-      res["X-Served-By"].should.equal "http://rack.rubyforge.org"
-
-      res.body.should.equal "Camping works!"
-    end
-
-    specify "works with POST" do
-      res = Rack::MockRequest.new(Rack::Adapter::Camping.new(CampApp)).
-        post("/", :input => "foo=bar")
-
-      res.should.be.ok
-      res.body.should.equal "Data: bar"
-    end
-  end
-rescue LoadError
-  $stderr.puts "Skipping Rack::Adapter::Camping tests (Camping is required). `gem install camping` and try again."
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_cascade.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_cascade.rb
deleted file mode 100644
index 3c0f3be..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_cascade.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-require 'test/spec'
-
-require 'rack/cascade'
-require 'rack/mock'
-
-require 'rack/urlmap'
-require 'rack/file'
-
-context "Rack::Cascade" do
-  docroot = File.expand_path(File.dirname(__FILE__))
-  app1 = Rack::File.new(docroot)
-
-  app2 = Rack::URLMap.new("/crash" => lambda { |env| raise "boom" })
-
-  app3 = Rack::URLMap.new("/foo" => lambda { |env|
-                            [200, { "Content-Type" => "text/plain"}, [""]]})
-
-  specify "should dispatch onward on 404 by default" do
-    cascade = Rack::Cascade.new([app1, app2, app3])
-    Rack::MockRequest.new(cascade).get("/cgi/test").should.be.ok
-    Rack::MockRequest.new(cascade).get("/foo").should.be.ok
-    Rack::MockRequest.new(cascade).get("/toobad").should.be.not_found
-    Rack::MockRequest.new(cascade).get("/cgi/../bla").should.be.forbidden
-  end
-
-  specify "should dispatch onward on whatever is passed" do
-    cascade = Rack::Cascade.new([app1, app2, app3], [404, 403])
-    Rack::MockRequest.new(cascade).get("/cgi/../bla").should.be.not_found
-  end
-
-  specify "should fail if empty" do
-    lambda { Rack::MockRequest.new(Rack::Cascade.new([])).get("/") }.
-      should.raise(ArgumentError)
-  end
-
-  specify "should append new app" do
-    cascade = Rack::Cascade.new([], [404, 403])
-    lambda { Rack::MockRequest.new(cascade).get('/cgi/test') }.
-      should.raise(ArgumentError)
-    cascade << app2
-    Rack::MockRequest.new(cascade).get('/cgi/test').should.be.not_found
-    Rack::MockRequest.new(cascade).get('/cgi/../bla').should.be.not_found
-    cascade << app1
-    Rack::MockRequest.new(cascade).get('/cgi/test').should.be.ok
-    Rack::MockRequest.new(cascade).get('/cgi/../bla').should.be.forbidden
-    Rack::MockRequest.new(cascade).get('/foo').should.be.not_found
-    cascade << app3
-    Rack::MockRequest.new(cascade).get('/foo').should.be.ok
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_cgi.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_cgi.rb
deleted file mode 100644
index 331f988..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_cgi.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-require 'test/spec'
-require 'testrequest'
-
-context "Rack::Handler::CGI" do
-  include TestRequest::Helpers
-  
-  setup do
-    @host = '0.0.0.0'
-    @port = 9203
-  end
-
-  # Keep this first.
-  specify "startup" do
-    $pid = fork {
-      Dir.chdir(File.join(File.dirname(__FILE__), "..", "test", "cgi"))
-      exec "lighttpd -D -f lighttpd.conf"
-    }
-  end
-
-  specify "should respond" do
-    sleep 1
-    lambda {
-      GET("/test")
-    }.should.not.raise
-  end
-
-  specify "should be a lighttpd" do
-    GET("/test")
-    status.should.be 200
-    response["SERVER_SOFTWARE"].should =~ /lighttpd/
-    response["HTTP_VERSION"].should.equal "HTTP/1.1"
-    response["SERVER_PROTOCOL"].should.equal "HTTP/1.1"
-    response["SERVER_PORT"].should.equal @port.to_s
-    response["SERVER_NAME"].should =~ @host
-  end
-
-  specify "should have rack headers" do
-    GET("/test")
-    response["rack.version"].should.equal [0,1]
-    response["rack.multithread"].should.be false
-    response["rack.multiprocess"].should.be true
-    response["rack.run_once"].should.be true
-  end
-
-  specify "should have CGI headers on GET" do
-    GET("/test")
-    response["REQUEST_METHOD"].should.equal "GET"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/"
-    response["PATH_INFO"].should.be.nil
-    response["QUERY_STRING"].should.equal ""
-    response["test.postdata"].should.equal ""
-
-    GET("/test/foo?quux=1")
-    response["REQUEST_METHOD"].should.equal "GET"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/"
-    response["PATH_INFO"].should.equal "/foo"
-    response["QUERY_STRING"].should.equal "quux=1"
-  end
-
-  specify "should have CGI headers on POST" do
-    POST("/test", {"rack-form-data" => "23"}, {'X-test-header' => '42'})
-    status.should.equal 200
-    response["REQUEST_METHOD"].should.equal "POST"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/"
-    response["QUERY_STRING"].should.equal ""
-    response["HTTP_X_TEST_HEADER"].should.equal "42"
-    response["test.postdata"].should.equal "rack-form-data=23"
-  end
-
-  specify "should support HTTP auth" do
-    GET("/test", {:user => "ruth", :passwd => "secret"})
-    response["HTTP_AUTHORIZATION"].should.equal "Basic cnV0aDpzZWNyZXQ="
-  end
-
-  specify "should set status" do
-    GET("/test?secret")
-    status.should.equal 403
-    response["rack.url_scheme"].should.equal "http"
-  end
-
-  # Keep this last.
-  specify "shutdown" do
-    Process.kill 15, $pid
-    Process.wait($pid).should.equal $pid
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_commonlogger.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_commonlogger.rb
deleted file mode 100644
index ba03b78..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_commonlogger.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require 'test/spec'
-require 'stringio'
-
-require 'rack/commonlogger'
-require 'rack/lobster'
-require 'rack/mock'
-
-context "Rack::CommonLogger" do
-  app = lambda { |env|
-    [200,
-     {"Content-Type" => "text/html"},
-     ["foo"]]}
-
-  specify "should log to rack.errors by default" do
-    log = StringIO.new
-    res = Rack::MockRequest.new(Rack::CommonLogger.new(app)).get("/")
-
-    res.errors.should.not.be.empty
-    res.errors.should =~ /GET /
-    res.errors.should =~ / 200 / # status
-    res.errors.should =~ / 3 /   # length
-  end
-
-  specify "should log to anything with <<" do
-    log = ""
-    res = Rack::MockRequest.new(Rack::CommonLogger.new(app, log)).get("/")
-
-    log.should =~ /GET /
-    log.should =~ / 200 / # status
-    log.should =~ / 3 / # length
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_deflater.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_deflater.rb
deleted file mode 100644
index db75d39..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_deflater.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-require 'test/spec'
-
-require 'rack/mock'
-require 'rack/deflater'
-require 'stringio'
-
-context "Rack::Deflater" do
-  def build_response(body, accept_encoding, headers = {})
-    app = lambda { |env| [200, {}, body] }
-    request = Rack::MockRequest.env_for("", headers.merge("HTTP_ACCEPT_ENCODING" => accept_encoding))
-    response = Rack::Deflater.new(app).call(request)
-
-    return response
-  end
-
-  specify "should be able to deflate bodies that respond to each" do
-    body = Object.new
-    class << body; def each; yield("foo"); yield("bar"); end; end
-
-    response = build_response(body, "deflate")
-
-    response[0].should.equal(200)
-    response[1].should.equal({ "Content-Encoding" => "deflate" })
-    response[2].to_s.should.equal("K\313\317OJ,\002\000")
-  end
-
-  # TODO: This is really just a special case of the above...
-  specify "should be able to deflate String bodies" do
-    response = build_response("Hello world!", "deflate")
-
-    response[0].should.equal(200)
-    response[1].should.equal({ "Content-Encoding" => "deflate" })
-    response[2].to_s.should.equal("\363H\315\311\311W(\317/\312IQ\004\000")
-  end
-
-  specify "should be able to gzip bodies that respond to each" do
-    body = Object.new
-    class << body; def each; yield("foo"); yield("bar"); end; end
-
-    response = build_response(body, "gzip")
-
-    response[0].should.equal(200)
-    response[1].should.equal({ "Content-Encoding" => "gzip" })
-
-    io = StringIO.new(response[2].to_s)
-    gz = Zlib::GzipReader.new(io)
-    gz.read.should.equal("foobar")
-    gz.close
-  end
-
-  specify "should be able to fallback to no deflation" do
-    response = build_response("Hello world!", "superzip")
-
-    response[0].should.equal(200)
-    response[1].should.equal({})
-    response[2].should.equal("Hello world!")
-  end
-
-  specify "should handle the lack of an acceptable encoding" do
-    response1 = build_response("Hello world!", "identity;q=0", "PATH_INFO" => "/")
-    response1[0].should.equal(406)
-    response1[1].should.equal({"Content-Type" => "text/plain"})
-    response1[2].should.equal("An acceptable encoding for the requested resource / could not be found.")
-
-    response2 = build_response("Hello world!", "identity;q=0", "SCRIPT_NAME" => "/foo", "PATH_INFO" => "/bar")
-    response2[0].should.equal(406)
-    response2[1].should.equal({"Content-Type" => "text/plain"})
-    response2[2].should.equal("An acceptable encoding for the requested resource /foo/bar could not be found.")
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_directory.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_directory.rb
deleted file mode 100644
index bf0b879..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_directory.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'test/spec'
-
-require 'rack/directory'
-require 'rack/lint'
-
-require 'rack/mock'
-
-context "Rack::Directory" do
-  DOCROOT = File.expand_path(File.dirname(__FILE__))
-  FILE_CATCH = proc{|env| [200, {'Content-Type'=>'text/plain', "Content-Length" => "7"}, 'passed!'] }
-  app = Rack::Directory.new DOCROOT, FILE_CATCH
-
-  specify "serves directory indices" do
-    res = Rack::MockRequest.new(Rack::Lint.new(app)).
-      get("/cgi/")
-
-    res.should.be.ok
-    res.should =~ /<html><head>/
-  end
-
-  specify "passes to app if file found" do
-    res = Rack::MockRequest.new(Rack::Lint.new(app)).
-      get("/cgi/test")
-
-    res.should.be.ok
-    res.should =~ /passed!/
-  end
-
-  specify "serves uri with URL encoded filenames" do
-    res = Rack::MockRequest.new(Rack::Lint.new(app)).
-      get("/%63%67%69/") # "/cgi/test"
-
-    res.should.be.ok
-    res.should =~ /<html><head>/
-
-    res = Rack::MockRequest.new(Rack::Lint.new(app)).
-      get("/cgi/%74%65%73%74") # "/cgi/test"
-
-    res.should.be.ok
-    res.should =~ /passed!/
-  end
-
-  specify "does not allow directory traversal" do
-    res = Rack::MockRequest.new(Rack::Lint.new(app)).
-      get("/cgi/../test")
-
-    res.should.be.forbidden
-  end
-
-  specify "404s if it can't find the file" do
-    res = Rack::MockRequest.new(Rack::Lint.new(app)).
-      get("/cgi/blubb")
-
-    res.should.be.not_found
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_fastcgi.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_fastcgi.rb
deleted file mode 100644
index 66ab4f7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_fastcgi.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-require 'test/spec'
-require 'testrequest'
-
-context "Rack::Handler::FastCGI" do
-  include TestRequest::Helpers
-
-  setup do
-    @host = '0.0.0.0'
-    @port = 9203
-  end
-
-  # Keep this first.
-  specify "startup" do
-    $pid = fork {
-      Dir.chdir(File.join(File.dirname(__FILE__), "..", "test", "cgi"))
-      exec "lighttpd -D -f lighttpd.conf"
-    }
-  end
-
-  specify "should respond" do
-    sleep 1
-    lambda {
-      GET("/test.fcgi")
-    }.should.not.raise
-  end
-
-  specify "should be a lighttpd" do
-    GET("/test.fcgi")
-    status.should.be 200
-    response["SERVER_SOFTWARE"].should =~ /lighttpd/
-    response["HTTP_VERSION"].should.equal "HTTP/1.1"
-    response["SERVER_PROTOCOL"].should.equal "HTTP/1.1"
-    response["SERVER_PORT"].should.equal @port.to_s
-    response["SERVER_NAME"].should =~ @host
-  end
-
-  specify "should have rack headers" do
-    GET("/test.fcgi")
-    response["rack.version"].should.equal [0,1]
-    response["rack.multithread"].should.be false
-    response["rack.multiprocess"].should.be true
-    response["rack.run_once"].should.be false
-  end
-
-  specify "should have CGI headers on GET" do
-    GET("/test.fcgi")
-    response["REQUEST_METHOD"].should.equal "GET"
-    response["SCRIPT_NAME"].should.equal "/test.fcgi"
-    response["REQUEST_PATH"].should.equal "/"
-    response["PATH_INFO"].should.be.nil
-    response["QUERY_STRING"].should.equal ""
-    response["test.postdata"].should.equal ""
-
-    GET("/test.fcgi/foo?quux=1")
-    response["REQUEST_METHOD"].should.equal "GET"
-    response["SCRIPT_NAME"].should.equal "/test.fcgi"
-    response["REQUEST_PATH"].should.equal "/"
-    response["PATH_INFO"].should.equal "/foo"
-    response["QUERY_STRING"].should.equal "quux=1"
-  end
-
-  specify "should have CGI headers on POST" do
-    POST("/test.fcgi", {"rack-form-data" => "23"}, {'X-test-header' => '42'})
-    status.should.equal 200
-    response["REQUEST_METHOD"].should.equal "POST"
-    response["SCRIPT_NAME"].should.equal "/test.fcgi"
-    response["REQUEST_PATH"].should.equal "/"
-    response["QUERY_STRING"].should.equal ""
-    response["HTTP_X_TEST_HEADER"].should.equal "42"
-    response["test.postdata"].should.equal "rack-form-data=23"
-  end
-
-  specify "should support HTTP auth" do
-    GET("/test.fcgi", {:user => "ruth", :passwd => "secret"})
-    response["HTTP_AUTHORIZATION"].should.equal "Basic cnV0aDpzZWNyZXQ="
-  end
-
-  specify "should set status" do
-    GET("/test.fcgi?secret")
-    status.should.equal 403
-    response["rack.url_scheme"].should.equal "http"
-  end
-
-  # Keep this last.
-  specify "shutdown" do
-    Process.kill 15, $pid
-    Process.wait($pid).should.equal $pid
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_file.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_file.rb
deleted file mode 100644
index 0707d03..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_file.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-require 'test/spec'
-
-require 'rack/file'
-require 'rack/lint'
-
-require 'rack/mock'
-
-context "Rack::File" do
-  DOCROOT = File.expand_path(File.dirname(__FILE__))
-
-  specify "serves files" do
-    res = Rack::MockRequest.new(Rack::Lint.new(Rack::File.new(DOCROOT))).
-      get("/cgi/test")
-
-    res.should.be.ok
-    res.should =~ /ruby/
-  end
-
-  specify "sets Last-Modified header" do
-    res = Rack::MockRequest.new(Rack::Lint.new(Rack::File.new(DOCROOT))).
-      get("/cgi/test")
-
-    path = File.join(DOCROOT, "/cgi/test")
-
-    res.should.be.ok
-    res["Last-Modified"].should.equal File.mtime(path).httpdate
-  end
-
-  specify "serves files with URL encoded filenames" do
-    res = Rack::MockRequest.new(Rack::Lint.new(Rack::File.new(DOCROOT))).
-      get("/cgi/%74%65%73%74") # "/cgi/test"
-
-    res.should.be.ok
-    res.should =~ /ruby/
-  end
-
-  specify "does not allow directory traversal" do
-    res = Rack::MockRequest.new(Rack::Lint.new(Rack::File.new(DOCROOT))).
-      get("/cgi/../test")
-
-    res.should.be.forbidden
-  end
-
-  specify "404s if it can't find the file" do
-    res = Rack::MockRequest.new(Rack::Lint.new(Rack::File.new(DOCROOT))).
-      get("/cgi/blubb")
-
-    res.should.be.not_found
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_handler.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_handler.rb
deleted file mode 100644
index e961d2b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_handler.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require 'test/spec'
-
-require 'rack/handler'
-
-context "Rack::Handler" do
-  class Rack::Handler::Lobster; end
-  class RockLobster; end
-
-  specify "has registered default handlers" do
-    Rack::Handler.get('cgi').should.equal Rack::Handler::CGI
-    Rack::Handler.get('fastcgi').should.equal Rack::Handler::FastCGI
-    Rack::Handler.get('mongrel').should.equal Rack::Handler::Mongrel
-    Rack::Handler.get('webrick').should.equal Rack::Handler::WEBrick
-  end
-
-  specify "should get unregistered handler by name" do
-    Rack::Handler.get('lobster').should.equal Rack::Handler::Lobster
-  end
-
-  specify "should register custom handler" do
-    Rack::Handler.register('rock_lobster', 'RockLobster')
-    Rack::Handler.get('rock_lobster').should.equal RockLobster
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_lint.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_lint.rb
deleted file mode 100644
index dbb6687..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_lint.rb
+++ /dev/null
@@ -1,303 +0,0 @@
-require 'test/spec'
-require 'stringio'
-
-require 'rack/lint'
-require 'rack/mock'
-
-context "Rack::Lint" do
-  def env(*args)
-    Rack::MockRequest.env_for("/", *args)
-  end
-
-  specify "passes valid request" do
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"Content-type" => "test/plain", "Content-length" => "3"}, "foo"]
-                     }).call(env({}))
-    }.should.not.raise
-  end
-
-  specify "notices fatal errors" do
-    lambda { Rack::Lint.new(nil).call }.should.raise(Rack::Lint::LintError).
-      message.should.match(/No env given/)
-  end
-
-  specify "notices environment errors" do
-    lambda { Rack::Lint.new(nil).call 5 }.should.raise(Rack::Lint::LintError).
-      message.should.match(/not a Hash/)
-
-    lambda {
-      e = env
-      e.delete("REQUEST_METHOD")
-      Rack::Lint.new(nil).call(e)
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/missing required key REQUEST_METHOD/)
-
-    lambda {
-      e = env
-      e.delete("SERVER_NAME")
-      Rack::Lint.new(nil).call(e)
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/missing required key SERVER_NAME/)
-
-
-    lambda {
-      Rack::Lint.new(nil).call(env("HTTP_CONTENT_TYPE" => "text/plain"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/contains HTTP_CONTENT_TYPE/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("HTTP_CONTENT_LENGTH" => "42"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/contains HTTP_CONTENT_LENGTH/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("FOO" => Object.new))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/non-string value/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("rack.version" => "0.2"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/must be an Array/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("rack.url_scheme" => "gopher"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/url_scheme unknown/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("REQUEST_METHOD" => "FUCKUP"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/REQUEST_METHOD unknown/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("SCRIPT_NAME" => "howdy"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/must start with/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("PATH_INFO" => "../foo"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/must start with/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("CONTENT_LENGTH" => "xcii"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/Invalid CONTENT_LENGTH/)
-
-    lambda {
-      e = env
-      e.delete("PATH_INFO")
-      e.delete("SCRIPT_NAME")
-      Rack::Lint.new(nil).call(e)
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/One of .* must be set/)
-
-    lambda {
-      Rack::Lint.new(nil).call(env("SCRIPT_NAME" => "/"))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/cannot be .* make it ''/)
-  end
-
-  specify "notices input errors" do
-    lambda {
-      Rack::Lint.new(nil).call(env("rack.input" => ""))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/does not respond to #gets/)
-  end
-
-  specify "notices error errors" do
-    lambda {
-      Rack::Lint.new(nil).call(env("rack.errors" => ""))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/does not respond to #puts/)
-  end
-
-  specify "notices status errors" do
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       ["cc", {}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/must be >=100 seen as integer/)
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [42, {}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/must be >=100 seen as integer/)
-  end
-
-  specify "notices header errors" do
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, Object.new, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.equal("headers object should respond to #each, but doesn't (got Object as headers)")
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {true=>false}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.equal("header key must be a string, was TrueClass")
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"Status" => "404"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/must not contain Status/)
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"Content-Type:" => "text/plain"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/must not contain :/)
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"Content-" => "text/plain"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/must not end/)
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"..%%quark%%.." => "text/plain"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.equal("invalid header name: ..%%quark%%..")
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"Foo" => Object.new}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.equal("header values must respond to #each, but the value of 'Foo' doesn't (is Object)")
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"Foo" => [1,2,3]}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.equal("header values must consist of Strings, but 'Foo' also contains a Fixnum")
-
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"Foo-Bar" => "text\000plain"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/invalid header/)
-  end
-
-  specify "notices content-type errors" do
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       [200, {"Content-length" => "0"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/No Content-Type/)
-  end
-
-  specify "notices body errors" do
-    lambda {
-      status, header, body = Rack::Lint.new(lambda { |env|
-                               [200, {"Content-type" => "text/plain","Content-length" => "3"}, [1,2,3]]
-                             }).call(env({}))
-      body.each { |part| }
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/yielded non-string/)
-  end
-
-  specify "notices input handling errors" do
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       env["rack.input"].gets("\r\n")
-                       [201, {"Content-type" => "text/plain", "Content-length" => "0"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/gets called with arguments/)
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       env["rack.input"].read("foo")
-                       [201, {"Content-type" => "text/plain", "Content-length" => "0"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/read called with non-integer argument/)
-
-    weirdio = Object.new
-    class << weirdio
-      def gets
-        42
-      end
-
-      def read
-        23
-      end
-
-      def each
-        yield 23
-        yield 42
-      end
-    end
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       env["rack.input"].gets
-                       [201, {"Content-type" => "text/plain", "Content-length" => "0"}, ""]
-                     }).call(env("rack.input" => weirdio))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/gets didn't return a String/)
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       env["rack.input"].each { |x| }
-                       [201, {"Content-type" => "text/plain", "Content-length" => "0"}, ""]
-                     }).call(env("rack.input" => weirdio))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/each didn't yield a String/)
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       env["rack.input"].read
-                       [201, {"Content-type" => "text/plain", "Content-length" => "0"}, ""]
-                     }).call(env("rack.input" => weirdio))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/read didn't return a String/)
-
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       env["rack.input"].close
-                       [201, {"Content-type" => "text/plain", "Content-length" => "0"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/close must not be called/)
-  end
-
-  specify "notices error handling errors" do
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       env["rack.errors"].write(42)
-                       [201, {"Content-type" => "text/plain", "Content-length" => "0"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/write not called with a String/)
-
-    lambda {
-      Rack::Lint.new(lambda { |env|
-                       env["rack.errors"].close
-                       [201, {"Content-type" => "text/plain", "Content-length" => "0"}, ""]
-                     }).call(env({}))
-    }.should.raise(Rack::Lint::LintError).
-      message.should.match(/close must not be called/)
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_lobster.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_lobster.rb
deleted file mode 100644
index 7be267a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_lobster.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require 'test/spec'
-
-require 'rack/lobster'
-require 'rack/mock'
-
-context "Rack::Lobster::LambdaLobster" do
-  specify "should be a single lambda" do
-    Rack::Lobster::LambdaLobster.should.be.kind_of Proc
-  end
-  
-  specify "should look like a lobster" do
-    res = Rack::MockRequest.new(Rack::Lobster::LambdaLobster).get("/")
-    res.should.be.ok
-    res.body.should.include "(,(,,(,,,("
-    res.body.should.include "?flip"
-  end
-
-  specify "should be flippable" do
-    res = Rack::MockRequest.new(Rack::Lobster::LambdaLobster).get("/?flip")
-    res.should.be.ok
-    res.body.should.include "(,,,(,,(,("
-  end
-end
-
-context "Rack::Lobster" do
-  specify "should look like a lobster" do
-    res = Rack::MockRequest.new(Rack::Lobster.new).get("/")
-    res.should.be.ok
-    res.body.should.include "(,(,,(,,,("
-    res.body.should.include "?flip"
-    res.body.should.include "crash"
-  end
-
-  specify "should be flippable" do
-    res = Rack::MockRequest.new(Rack::Lobster.new).get("/?flip=left")
-    res.should.be.ok
-    res.body.should.include "(,,,(,,(,("
-  end
-
-  specify "should provide crashing for testing purposes" do
-    lambda {
-      Rack::MockRequest.new(Rack::Lobster.new).get("/?flip=crash")
-    }.should.raise
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_mock.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_mock.rb
deleted file mode 100644
index c487bd0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_mock.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-require 'yaml'
-require 'rack/mock'
-require 'rack/request'
-require 'rack/response'
-
-app = lambda { |env|
-  req = Rack::Request.new(env)
-  
-  env["mock.postdata"] = env["rack.input"].read
-  if req.GET["error"]
-    env["rack.errors"].puts req.GET["error"]
-    env["rack.errors"].flush
-  end
-  
-  Rack::Response.new(env.to_yaml,
-                     req.GET["status"] || 200,
-                     "Content-Type" => "text/yaml").finish
-}
-
-context "Rack::MockRequest" do
-  specify "should return a MockResponse" do
-    res = Rack::MockRequest.new(app).get("")
-    res.should.be.kind_of Rack::MockResponse
-  end
-
-  specify "should be able to only return the environment" do
-    env = Rack::MockRequest.env_for("")
-    env.should.be.kind_of Hash
-    env.should.include "rack.version"
-  end
-
-  specify "should provide sensible defaults" do
-    res = Rack::MockRequest.new(app).request
-
-    env = YAML.load(res.body)
-    env["REQUEST_METHOD"].should.equal "GET"
-    env["SERVER_NAME"].should.equal "example.org"
-    env["SERVER_PORT"].should.equal "80"
-    env["QUERY_STRING"].should.equal ""
-    env["PATH_INFO"].should.equal "/"
-    env["SCRIPT_NAME"].should.equal ""
-    env["rack.url_scheme"].should.equal "http"
-    env["mock.postdata"].should.be.empty
-  end
-
-  specify "should allow GET/POST/PUT/DELETE" do
-    res = Rack::MockRequest.new(app).get("", :input => "foo")
-    env = YAML.load(res.body)
-    env["REQUEST_METHOD"].should.equal "GET"
-
-    res = Rack::MockRequest.new(app).post("", :input => "foo")
-    env = YAML.load(res.body)
-    env["REQUEST_METHOD"].should.equal "POST"
-
-    res = Rack::MockRequest.new(app).put("", :input => "foo")
-    env = YAML.load(res.body)
-    env["REQUEST_METHOD"].should.equal "PUT"
-
-    res = Rack::MockRequest.new(app).delete("", :input => "foo")
-    env = YAML.load(res.body)
-    env["REQUEST_METHOD"].should.equal "DELETE"
-
-    Rack::MockRequest.env_for("/", :method => "OPTIONS")["REQUEST_METHOD"].
-      should.equal "OPTIONS"
-  end
-
-  specify "should allow posting" do
-    res = Rack::MockRequest.new(app).get("", :input => "foo")
-    env = YAML.load(res.body)
-    env["mock.postdata"].should.equal "foo"
-
-    res = Rack::MockRequest.new(app).post("", :input => StringIO.new("foo"))
-    env = YAML.load(res.body)
-    env["mock.postdata"].should.equal "foo"
-  end
-
-  specify "should use all parts of an URL" do
-    res = Rack::MockRequest.new(app).
-      get("https://bla.example.org:9292/meh/foo?bar")
-    res.should.be.kind_of Rack::MockResponse
-
-    env = YAML.load(res.body)
-    env["REQUEST_METHOD"].should.equal "GET"
-    env["SERVER_NAME"].should.equal "bla.example.org"
-    env["SERVER_PORT"].should.equal "9292"
-    env["QUERY_STRING"].should.equal "bar"
-    env["PATH_INFO"].should.equal "/meh/foo"
-    env["rack.url_scheme"].should.equal "https"
-  end
-
-  specify "should behave valid according to the Rack spec" do
-    lambda {
-      res = Rack::MockRequest.new(app).
-        get("https://bla.example.org:9292/meh/foo?bar", :lint => true)
-    }.should.not.raise(Rack::Lint::LintError)
-  end
-end
-
-context "Rack::MockResponse" do
-  specify "should provide access to the HTTP status" do
-    res = Rack::MockRequest.new(app).get("")
-    res.should.be.successful
-    res.should.be.ok
-
-    res = Rack::MockRequest.new(app).get("/?status=404")
-    res.should.not.be.successful
-    res.should.be.client_error
-    res.should.be.not_found
-
-    res = Rack::MockRequest.new(app).get("/?status=501")
-    res.should.not.be.successful
-    res.should.be.server_error
-
-    res = Rack::MockRequest.new(app).get("/?status=307")
-    res.should.be.redirect
-
-    res = Rack::MockRequest.new(app).get("/?status=201", :lint => true)
-    res.should.be.empty
-  end
-
-  specify "should provide access to the HTTP headers" do
-    res = Rack::MockRequest.new(app).get("")
-    res.should.include "Content-Type"
-    res.headers["Content-Type"].should.equal "text/yaml"
-    res.original_headers["Content-Type"].should.equal "text/yaml"
-    res["Content-Type"].should.equal "text/yaml"
-    res.content_type.should.equal "text/yaml"
-    res.content_length.should.be.nil
-    res.location.should.be.nil
-  end
-
-  specify "should provide access to the HTTP body" do
-    res = Rack::MockRequest.new(app).get("")
-    res.body.should =~ /rack/
-    res.should =~ /rack/
-    res.should.match(/rack/)
-    res.should.satisfy { |r| r.match(/rack/) }
-  end
-
-  specify "should provide access to the Rack errors" do
-    res = Rack::MockRequest.new(app).get("/?error=foo", :lint => true)
-    res.should.be.ok
-    res.errors.should.not.be.empty
-    res.errors.should.include "foo"
-  end
-
-  specify "should optionally make Rack errors fatal" do
-    lambda {
-      Rack::MockRequest.new(app).get("/?error=foo", :fatal => true)
-    }.should.raise(Rack::MockRequest::FatalWarning)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_mongrel.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_mongrel.rb
deleted file mode 100644
index c42126f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_mongrel.rb
+++ /dev/null
@@ -1,170 +0,0 @@
-require 'test/spec'
-
-begin
-require 'rack/handler/mongrel'
-require 'rack/urlmap'
-require 'rack/lint'
-require 'testrequest'
-
-Thread.abort_on_exception = true
-$tcp_defer_accept_opts = nil
-$tcp_cork_opts = nil
-
-context "Rack::Handler::Mongrel" do
-  include TestRequest::Helpers
-  
-  setup do
-    server = Mongrel::HttpServer.new(@host='0.0.0.0', @port=9201)
-    server.register('/test',
-                    Rack::Handler::Mongrel.new(Rack::Lint.new(TestRequest.new)))
-    @acc = server.run
-  end
-
-  specify "should respond" do
-    lambda {
-      GET("/test")
-    }.should.not.raise
-  end
-
-  specify "should be a Mongrel" do
-    GET("/test")
-    status.should.be 200
-    response["SERVER_SOFTWARE"].should =~ /Mongrel/
-    response["HTTP_VERSION"].should.equal "HTTP/1.1"
-    response["SERVER_PROTOCOL"].should.equal "HTTP/1.1"
-    response["SERVER_PORT"].should.equal "9201"
-    response["SERVER_NAME"].should.equal "0.0.0.0"
-  end
-
-  specify "should have rack headers" do
-    GET("/test")
-    response["rack.version"].should.equal [0,1]
-    response["rack.multithread"].should.be true
-    response["rack.multiprocess"].should.be false
-    response["rack.run_once"].should.be false
-  end
-
-  specify "should have CGI headers on GET" do
-    GET("/test")
-    response["REQUEST_METHOD"].should.equal "GET"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/test"
-    response["PATH_INFO"].should.be.nil
-    response["QUERY_STRING"].should.equal ""
-    response["test.postdata"].should.equal ""
-
-    GET("/test/foo?quux=1")
-    response["REQUEST_METHOD"].should.equal "GET"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/test/foo"
-    response["PATH_INFO"].should.equal "/foo"
-    response["QUERY_STRING"].should.equal "quux=1"
-  end
-
-  specify "should have CGI headers on POST" do
-    POST("/test", {"rack-form-data" => "23"}, {'X-test-header' => '42'})
-    status.should.equal 200
-    response["REQUEST_METHOD"].should.equal "POST"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/test"
-    response["QUERY_STRING"].should.equal ""
-    response["HTTP_X_TEST_HEADER"].should.equal "42"
-    response["test.postdata"].should.equal "rack-form-data=23"
-  end
-
-  specify "should support HTTP auth" do
-    GET("/test", {:user => "ruth", :passwd => "secret"})
-    response["HTTP_AUTHORIZATION"].should.equal "Basic cnV0aDpzZWNyZXQ="
-  end
-
-  specify "should set status" do
-    GET("/test?secret")
-    status.should.equal 403
-    response["rack.url_scheme"].should.equal "http"
-  end
-
-  specify "should provide a .run" do
-    block_ran = false
-    Thread.new {
-      Rack::Handler::Mongrel.run(lambda {}, {:Port => 9211}) { |server|
-        server.should.be.kind_of Mongrel::HttpServer
-        block_ran = true
-      }
-    }
-    sleep 1
-    block_ran.should.be true
-  end
-
-  specify "should provide a .run that maps a hash" do
-    block_ran = false
-    Thread.new {
-      map = {'/'=>lambda{},'/foo'=>lambda{}}
-      Rack::Handler::Mongrel.run(map, :map => true, :Port => 9221) { |server|
-        server.should.be.kind_of Mongrel::HttpServer
-        server.classifier.uris.size.should.be 2
-        server.classifier.uris.should.not.include '/arf'
-        server.classifier.uris.should.include '/'
-        server.classifier.uris.should.include '/foo'
-        block_ran = true
-      }
-    }
-    sleep 1
-    block_ran.should.be true
-  end
-
-  specify "should provide a .run that maps a urlmap" do
-    block_ran = false
-    Thread.new {
-      map = Rack::URLMap.new({'/'=>lambda{},'/bar'=>lambda{}})
-      Rack::Handler::Mongrel.run(map, {:map => true, :Port => 9231}) { |server|
-        server.should.be.kind_of Mongrel::HttpServer
-        server.classifier.uris.size.should.be 2
-        server.classifier.uris.should.not.include '/arf'
-        server.classifier.uris.should.include '/'
-        server.classifier.uris.should.include '/bar'
-        block_ran = true
-      }
-    }
-    sleep 1
-    block_ran.should.be true
-  end
-
-  specify "should provide a .run that maps a urlmap restricting by host" do
-    block_ran = false
-    Thread.new {
-      map = Rack::URLMap.new({
-        '/' => lambda{},
-        '/foo' => lambda{},
-        '/bar' => lambda{},
-        'http://localhost/' => lambda{},
-        'http://localhost/bar' => lambda{},
-        'http://falsehost/arf' => lambda{},
-        'http://falsehost/qux' => lambda{}
-      })
-      opt = {:map => true, :Port => 9241, :Host => 'localhost'}
-      Rack::Handler::Mongrel.run(map, opt) { |server|
-        server.should.be.kind_of Mongrel::HttpServer
-        server.classifier.uris.should.include '/'
-        server.classifier.handler_map['/'].size.should.be 2
-        server.classifier.uris.should.include '/foo'
-        server.classifier.handler_map['/foo'].size.should.be 1
-        server.classifier.uris.should.include '/bar'
-        server.classifier.handler_map['/bar'].size.should.be 2
-        server.classifier.uris.should.not.include '/qux'
-        server.classifier.uris.should.not.include '/arf'
-        server.classifier.uris.size.should.be 3
-        block_ran = true
-      }
-    }
-    sleep 1
-    block_ran.should.be true
-  end
-
-  teardown do
-    @acc.raise Mongrel::StopServer
-  end
-end
-
-rescue LoadError
-  $stderr.puts "Skipping Rack::Handler::Mongrel tests (Mongrel is required). `gem install mongrel` and try again."
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_recursive.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_recursive.rb
deleted file mode 100644
index afc1a0d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_recursive.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-require 'test/spec'
-
-require 'rack/recursive'
-require 'rack/urlmap'
-require 'rack/response'
-require 'rack/mock'
-
-context "Rack::Recursive" do
-  setup do
-
-    @app1 = lambda { |env|
-      res = Rack::Response.new
-      res["X-Path-Info"] = env["PATH_INFO"]
-      res["X-Query-String"] = env["QUERY_STRING"]
-      res.finish do |res|
-        res.write "App1"
-      end
-    }
-
-    @app2 = lambda { |env|
-      Rack::Response.new.finish do |res|
-        res.write "App2"
-        _, _, body = env['rack.recursive.include'].call(env, "/app1")
-        body.each { |b|
-          res.write b
-        }
-      end
-    }
-
-    @app3 = lambda { |env|
-      raise Rack::ForwardRequest.new("/app1")
-    }
-
-    @app4 = lambda { |env|
-      raise Rack::ForwardRequest.new("http://example.org/app1/quux?meh")
-    }
-
-  end
-
-  specify "should allow for subrequests" do
-    res = Rack::MockRequest.new(Rack::Recursive.new(
-                                  Rack::URLMap.new("/app1" => @app1,
-                                                   "/app2" => @app2))).
-      get("/app2")
-
-    res.should.be.ok
-    res.body.should.equal "App2App1"    
-  end
-
-  specify "should raise error on requests not below the app" do
-    app = Rack::URLMap.new("/app1" => @app1,
-                           "/app" => Rack::Recursive.new(
-                              Rack::URLMap.new("/1" => @app1,
-                                               "/2" => @app2)))
-
-    lambda {
-      Rack::MockRequest.new(app).get("/app/2")
-    }.should.raise(ArgumentError).
-      message.should =~ /can only include below/
-  end
-
-  specify "should support forwarding" do
-    app = Rack::Recursive.new(Rack::URLMap.new("/app1" => @app1,
-                                               "/app3" => @app3,
-                                               "/app4" => @app4))
-
-    res = Rack::MockRequest.new(app).get("/app3")
-    res.should.be.ok
-    res.body.should.equal "App1"
-
-    res = Rack::MockRequest.new(app).get("/app4")
-    res.should.be.ok
-    res.body.should.equal "App1"
-    res["X-Path-Info"].should.equal "/quux"
-    res["X-Query-String"].should.equal "meh"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_request.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_request.rb
deleted file mode 100644
index 0b2c9fc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_request.rb
+++ /dev/null
@@ -1,401 +0,0 @@
-require 'test/spec'
-require 'stringio'
-
-require 'rack/request'
-require 'rack/mock'
-
-context "Rack::Request" do
-  specify "wraps the rack variables" do
-    req = Rack::Request.new(Rack::MockRequest.env_for("http://example.com:8080/"))
-
-    req.body.should.respond_to? :gets
-    req.scheme.should.equal "http"
-    req.request_method.should.equal "GET"
-
-    req.should.be.get
-    req.should.not.be.post
-    req.should.not.be.put
-    req.should.not.be.delete
-    req.should.not.be.head
-
-    req.script_name.should.equal ""
-    req.path_info.should.equal "/"
-    req.query_string.should.equal ""
-
-    req.host.should.equal "example.com"
-    req.port.should.equal 8080
-
-    req.content_length.should.be.nil
-    req.content_type.should.be.nil
-  end
-
-  specify "can figure out the correct host" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/", "HTTP_HOST" => "www2.example.org")
-    req.host.should.equal "www2.example.org"
-
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/", "SERVER_NAME" => "example.org:9292")
-    req.host.should.equal "example.org"
-  end
-
-  specify "can parse the query string" do
-    req = Rack::Request.new(Rack::MockRequest.env_for("/?foo=bar&quux=bla"))
-    req.query_string.should.equal "foo=bar&quux=bla"
-    req.GET.should.equal "foo" => "bar", "quux" => "bla"
-    req.POST.should.be.empty
-    req.params.should.equal "foo" => "bar", "quux" => "bla"
-  end
-
-  specify "can parse POST data" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/?foo=quux", :input => "foo=bar&quux=bla")
-    req.content_type.should.be.nil
-    req.media_type.should.be.nil
-    req.query_string.should.equal "foo=quux"
-    req.GET.should.equal "foo" => "quux"
-    req.POST.should.equal "foo" => "bar", "quux" => "bla"
-    req.params.should.equal "foo" => "bar", "quux" => "bla"
-  end
-
-  specify "can parse POST data with explicit content type" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/",
-        "CONTENT_TYPE" => 'application/x-www-form-urlencoded;foo=bar',
-        :input => "foo=bar&quux=bla")
-    req.content_type.should.equal 'application/x-www-form-urlencoded;foo=bar'
-    req.media_type.should.equal 'application/x-www-form-urlencoded'
-    req.media_type_params['foo'].should.equal 'bar'
-    req.POST.should.equal "foo" => "bar", "quux" => "bla"
-    req.params.should.equal "foo" => "bar", "quux" => "bla"
-  end
-
-  specify "does not parse POST data when media type is not form-data" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/?foo=quux",
-        "CONTENT_TYPE" => 'text/plain;charset=utf-8',
-        :input => "foo=bar&quux=bla")
-    req.content_type.should.equal 'text/plain;charset=utf-8'
-    req.media_type.should.equal 'text/plain'
-    req.media_type_params['charset'].should.equal 'utf-8'
-    req.POST.should.be.empty
-    req.params.should.equal "foo" => "quux"
-    req.body.read.should.equal "foo=bar&quux=bla"
-  end
-
-  specify "can get value by key from params with #[]" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("?foo=quux")
-    req['foo'].should.equal 'quux'
-    req[:foo].should.equal 'quux'
-  end
-
-  specify "can set value to key on params with #[]=" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("?foo=duh")
-    req['foo'].should.equal 'duh'
-    req[:foo].should.equal 'duh'
-    req.params.should.equal 'foo' => 'duh'
-
-    req['foo'] = 'bar'
-    req.params.should.equal 'foo' => 'bar'
-    req['foo'].should.equal 'bar'
-    req[:foo].should.equal 'bar'
-
-    req[:foo] = 'jaz'
-    req.params.should.equal 'foo' => 'jaz'
-    req['foo'].should.equal 'jaz'
-    req[:foo].should.equal 'jaz'
-  end
-
-  specify "values_at answers values by keys in order given" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("?foo=baz&wun=der&bar=ful")
-    req.values_at('foo').should.equal ['baz']
-    req.values_at('foo', 'wun').should.equal ['baz', 'der']
-    req.values_at('bar', 'foo', 'wun').should.equal ['ful', 'baz', 'der']
-  end
-
-  specify "referrer should be extracted correct" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/", "HTTP_REFERER" => "/some/path")
-    req.referer.should.equal "/some/path"
-
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/")
-    req.referer.should.equal "/"
-  end
-
-  specify "can cache, but invalidates the cache" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/?foo=quux", :input => "foo=bar&quux=bla")
-    req.GET.should.equal "foo" => "quux"
-    req.GET.should.equal "foo" => "quux"
-    req.env["QUERY_STRING"] = "bla=foo"
-    req.GET.should.equal "bla" => "foo"
-    req.GET.should.equal "bla" => "foo"
-
-    req.POST.should.equal "foo" => "bar", "quux" => "bla"
-    req.POST.should.equal "foo" => "bar", "quux" => "bla"
-    req.env["rack.input"] = StringIO.new("foo=bla&quux=bar")
-    req.POST.should.equal "foo" => "bla", "quux" => "bar"
-    req.POST.should.equal "foo" => "bla", "quux" => "bar"
-  end
-
-  specify "can figure out if called via XHR" do
-    req = Rack::Request.new(Rack::MockRequest.env_for(""))
-    req.should.not.be.xhr
-
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("", "HTTP_X_REQUESTED_WITH" => "XMLHttpRequest")
-    req.should.be.xhr
-  end
-
-  specify "can parse cookies" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("", "HTTP_COOKIE" => "foo=bar;quux=h&m")
-    req.cookies.should.equal "foo" => "bar", "quux" => "h&m"
-    req.cookies.should.equal "foo" => "bar", "quux" => "h&m"
-    req.env.delete("HTTP_COOKIE")
-    req.cookies.should.equal({})
-  end
-
-  specify "parses cookies according to RFC 2109" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for('', 'HTTP_COOKIE' => 'foo=bar;foo=car')
-    req.cookies.should.equal 'foo' => 'bar'
-  end
-
-  specify "provides setters" do
-    req = Rack::Request.new(e=Rack::MockRequest.env_for(""))
-    req.script_name.should.equal ""
-    req.script_name = "/foo"
-    req.script_name.should.equal "/foo"
-    e["SCRIPT_NAME"].should.equal "/foo"
-
-    req.path_info.should.equal "/"
-    req.path_info = "/foo"
-    req.path_info.should.equal "/foo"
-    e["PATH_INFO"].should.equal "/foo"
-  end
-
-  specify "provides the original env" do
-    req = Rack::Request.new(e=Rack::MockRequest.env_for(""))
-    req.env.should.be e
-  end
-
-  specify "can restore the URL" do
-    Rack::Request.new(Rack::MockRequest.env_for("")).url.
-      should.equal "http://example.org/"
-    Rack::Request.new(Rack::MockRequest.env_for("", "SCRIPT_NAME" => "/foo")).url.
-      should.equal "http://example.org/foo/"
-    Rack::Request.new(Rack::MockRequest.env_for("/foo")).url.
-      should.equal "http://example.org/foo"
-    Rack::Request.new(Rack::MockRequest.env_for("?foo")).url.
-      should.equal "http://example.org/?foo"
-    Rack::Request.new(Rack::MockRequest.env_for("http://example.org:8080/")).url.
-      should.equal "http://example.org:8080/"
-    Rack::Request.new(Rack::MockRequest.env_for("https://example.org/")).url.
-      should.equal "https://example.org/"
-
-    Rack::Request.new(Rack::MockRequest.env_for("https://example.com:8080/foo?foo")).url.
-      should.equal "https://example.com:8080/foo?foo"
-  end
-
-  specify "can restore the full path" do
-    Rack::Request.new(Rack::MockRequest.env_for("")).fullpath.
-      should.equal "/"
-    Rack::Request.new(Rack::MockRequest.env_for("", "SCRIPT_NAME" => "/foo")).fullpath.
-      should.equal "/foo/"
-    Rack::Request.new(Rack::MockRequest.env_for("/foo")).fullpath.
-      should.equal "/foo"
-    Rack::Request.new(Rack::MockRequest.env_for("?foo")).fullpath.
-      should.equal "/?foo"
-    Rack::Request.new(Rack::MockRequest.env_for("http://example.org:8080/")).fullpath.
-      should.equal "/"
-    Rack::Request.new(Rack::MockRequest.env_for("https://example.org/")).fullpath.
-      should.equal "/"
-
-    Rack::Request.new(Rack::MockRequest.env_for("https://example.com:8080/foo?foo")).fullpath.
-      should.equal "/foo?foo"
-  end
-
-  specify "can handle multiple media type parameters" do
-    req = Rack::Request.new \
-      Rack::MockRequest.env_for("/",
-        "CONTENT_TYPE" => 'text/plain; foo=BAR,baz=bizzle dizzle;BLING=bam')
-      req.should.not.be.form_data
-      req.media_type_params.should.include 'foo'
-      req.media_type_params['foo'].should.equal 'BAR'
-      req.media_type_params.should.include 'baz'
-      req.media_type_params['baz'].should.equal 'bizzle dizzle'
-      req.media_type_params.should.not.include 'BLING'
-      req.media_type_params.should.include 'bling'
-      req.media_type_params['bling'].should.equal 'bam'
-  end
-
-  specify "can parse multipart form data" do
-    # Adapted from RFC 1867.
-    input = <<EOF
---AaB03x\r
-content-disposition: form-data; name="reply"\r
-\r
-yes\r
---AaB03x\r
-content-disposition: form-data; name="fileupload"; filename="dj.jpg"\r
-Content-Type: image/jpeg\r
-Content-Transfer-Encoding: base64\r
-\r
-/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\r
---AaB03x--\r
-EOF
-    req = Rack::Request.new Rack::MockRequest.env_for("/",
-                      "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x",
-                      "CONTENT_LENGTH" => input.size,
-                      :input => input)
-
-    req.POST.should.include "fileupload"
-    req.POST.should.include "reply"
-
-    req.should.be.form_data
-    req.content_length.should.equal input.size
-    req.media_type.should.equal 'multipart/form-data'
-    req.media_type_params.should.include 'boundary'
-    req.media_type_params['boundary'].should.equal 'AaB03x'
-
-    req.POST["reply"].should.equal "yes"
-
-    f = req.POST["fileupload"]
-    f.should.be.kind_of Hash
-    f[:type].should.equal "image/jpeg"
-    f[:filename].should.equal "dj.jpg"
-    f.should.include :tempfile
-    f[:tempfile].size.should.equal 76
-  end
-
-  specify "can parse big multipart form data" do
-    input = <<EOF
---AaB03x\r
-content-disposition: form-data; name="huge"; filename="huge"\r
-\r
-#{"x"*32768}\r
---AaB03x\r
-content-disposition: form-data; name="mean"; filename="mean"\r
-\r
---AaB03xha\r
---AaB03x--\r
-EOF
-    req = Rack::Request.new Rack::MockRequest.env_for("/",
-                      "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x",
-                      "CONTENT_LENGTH" => input.size,
-                      :input => input)
-    
-    req.POST["huge"][:tempfile].size.should.equal 32768
-    req.POST["mean"][:tempfile].size.should.equal 10
-    req.POST["mean"][:tempfile].read.should.equal "--AaB03xha"
-  end
-
-  specify "can detect invalid multipart form data" do
-    input = <<EOF
---AaB03x\r
-content-disposition: form-data; name="huge"; filename="huge"\r
-EOF
-    req = Rack::Request.new Rack::MockRequest.env_for("/",
-                      "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x",
-                      "CONTENT_LENGTH" => input.size,
-                      :input => input)
-
-    lambda { req.POST }.should.raise(EOFError)
-
-    input = <<EOF
---AaB03x\r
-content-disposition: form-data; name="huge"; filename="huge"\r
-\r
-foo\r
-EOF
-    req = Rack::Request.new Rack::MockRequest.env_for("/",
-                      "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x",
-                      "CONTENT_LENGTH" => input.size,
-                      :input => input)
-
-    lambda { req.POST }.should.raise(EOFError)
-
-    input = <<EOF
---AaB03x\r
-content-disposition: form-data; name="huge"; filename="huge"\r
-\r
-foo\r
-EOF
-    req = Rack::Request.new Rack::MockRequest.env_for("/",
-                      "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x",
-                      "CONTENT_LENGTH" => input.size,
-                      :input => input)
-
-    lambda { req.POST }.should.raise(EOFError)
-  end
-
-  specify "should work around buggy 1.8.* Tempfile equality" do
-    input = <<EOF
---AaB03x\r
-content-disposition: form-data; name="huge"; filename="huge"\r
-\r
-foo\r
---AaB03x--
-EOF
-
-    rack_input = Tempfile.new("rackspec")
-    rack_input.write(input)
-    rack_input.rewind
-
-    req = Rack::Request.new Rack::MockRequest.env_for("/",
-                      "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x",
-                      "CONTENT_LENGTH" => input.size,
-                      :input => rack_input)
-
-    lambda {req.POST}.should.not.raise
-    lambda {req.POST}.should.blaming("input re-processed!").not.raise
-  end
-
-  specify "does conform to the Rack spec" do
-    app = lambda { |env|
-      content = Rack::Request.new(env).POST["file"].inspect
-      size = content.respond_to?(:bytesize) ? content.bytesize : content.size
-      [200, {"Content-Type" => "text/html", "Content-Length" => size.to_s}, content]
-    }
-
-    input = <<EOF
---AaB03x\r
-content-disposition: form-data; name="reply"\r
-\r
-yes\r
---AaB03x\r
-content-disposition: form-data; name="fileupload"; filename="dj.jpg"\r
-Content-Type: image/jpeg\r
-Content-Transfer-Encoding: base64\r
-\r
-/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\r
---AaB03x--\r
-EOF
-    res = Rack::MockRequest.new(Rack::Lint.new(app)).get "/",
-      "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x",
-      "CONTENT_LENGTH" => input.size.to_s, "rack.input" => StringIO.new(input)
-
-    res.should.be.ok
-  end
-
-  specify "should parse Accept-Encoding correctly" do
-    parser = lambda do |x|
-      Rack::Request.new(Rack::MockRequest.env_for("", "HTTP_ACCEPT_ENCODING" => x)).accept_encoding
-    end
-
-    parser.call(nil).should.equal([])
-
-    parser.call("compress, gzip").should.equal([["compress", 1.0], ["gzip", 1.0]])
-    parser.call("").should.equal([])
-    parser.call("*").should.equal([["*", 1.0]])
-    parser.call("compress;q=0.5, gzip;q=1.0").should.equal([["compress", 0.5], ["gzip", 1.0]])
-    parser.call("gzip;q=1.0, identity; q=0.5, *;q=0").should.equal([["gzip", 1.0], ["identity", 0.5], ["*", 0] ])
-
-    lambda { parser.call("gzip ; q=1.0") }.should.raise(RuntimeError)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_response.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_response.rb
deleted file mode 100644
index bf612b5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_response.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-require 'test/spec'
-
-require 'rack/response'
-
-context "Rack::Response" do
-  specify "has sensible default values" do
-    response = Rack::Response.new
-    status, header, body = response.finish
-    status.should.equal 200
-    header.should.equal "Content-Type" => "text/html"
-    body.each { |part|
-      part.should.equal ""
-    }
-
-    response = Rack::Response.new
-    status, header, body = *response
-    status.should.equal 200
-    header.should.equal "Content-Type" => "text/html"
-    body.each { |part|
-      part.should.equal ""
-    }
-  end
-
-  specify "can be written to" do
-    response = Rack::Response.new
-
-    status, header, body = response.finish do
-      response.write "foo"
-      response.write "bar"
-      response.write "baz"
-    end
-    
-    parts = []
-    body.each { |part| parts << part }
-    
-    parts.should.equal ["foo", "bar", "baz"]
-  end
-
-  specify "can set and read headers" do
-    response = Rack::Response.new
-    response["Content-Type"].should.equal "text/html"
-    response["Content-Type"] = "text/plain"
-    response["Content-Type"].should.equal "text/plain"
-  end
-
-  specify "can set cookies" do
-    response = Rack::Response.new
-    
-    response.set_cookie "foo", "bar"
-    response["Set-Cookie"].should.equal "foo=bar"
-    response.set_cookie "foo2", "bar2"
-    response["Set-Cookie"].should.equal ["foo=bar", "foo2=bar2"]
-    response.set_cookie "foo3", "bar3"
-    response["Set-Cookie"].should.equal ["foo=bar", "foo2=bar2", "foo3=bar3"]
-  end
-
-  specify "formats the Cookie expiration date accordingly to RFC 2109" do
-    response = Rack::Response.new
-    
-    response.set_cookie "foo", {:value => "bar", :expires => Time.now+10}
-    response["Set-Cookie"].should.match(
-      /expires=..., \d\d-...-\d\d\d\d \d\d:\d\d:\d\d .../)
-  end
-
-  specify "can delete cookies" do
-    response = Rack::Response.new
-    response.set_cookie "foo", "bar"
-    response.set_cookie "foo2", "bar2"
-    response.delete_cookie "foo"
-    response["Set-Cookie"].should.equal ["foo2=bar2",
-                                  "foo=; expires=Thu, 01-Jan-1970 00:00:00 GMT"]
-  end
-
-  specify "has a useful constructor" do
-    r = Rack::Response.new("foo")
-    status, header, body = r.finish
-    str = ""; body.each { |part| str << part }
-    str.should.equal "foo"
-
-    r = Rack::Response.new(["foo", "bar"])
-    status, header, body = r.finish
-    str = ""; body.each { |part| str << part }
-    str.should.equal "foobar"
-
-    r = Rack::Response.new({"foo", "bar"})
-    r.write "foo"
-    status, header, body = r.finish
-    str = ""; body.each { |part| str << part }
-    str.should.equal "foobarfoo"
-
-    r = Rack::Response.new([], 500)
-    r.status.should.equal 500
-  end
-
-  specify "has a constructor that can take a block" do
-    r = Rack::Response.new { |res|
-      res.status = 404
-      res.write "foo"
-    }
-    status, header, body = r.finish
-    str = ""; body.each { |part| str << part }
-    str.should.equal "foo"
-    status.should.equal 404
-  end
- 
-  specify "doesn't return invalid responses" do
-    r = Rack::Response.new(["foo", "bar"], 204)
-    status, header, body = r.finish
-    str = ""; body.each { |part| str << part }
-    str.should.be.empty
-    header["Content-Type"].should.equal nil
-
-    lambda {
-      Rack::Response.new(Object.new)
-    }.should.raise(TypeError).
-      message.should =~ /stringable or iterable required/
-  end
-
-  specify "knows if it's empty" do
-    r = Rack::Response.new
-    r.should.be.empty
-    r.write "foo"
-    r.should.not.be.empty
-
-    r = Rack::Response.new
-    r.should.be.empty
-    r.finish
-    r.should.be.empty
-
-    r = Rack::Response.new
-    r.should.be.empty
-    r.finish { }
-    r.should.not.be.empty
-  end
-
-  specify "should provide access to the HTTP status" do
-    res = Rack::Response.new
-    res.status = 200
-    res.should.be.successful
-    res.should.be.ok
-
-    res.status = 404
-    res.should.not.be.successful
-    res.should.be.client_error
-    res.should.be.not_found
-
-    res.status = 501
-    res.should.not.be.successful
-    res.should.be.server_error
-
-    res.status = 307
-    res.should.be.redirect
-  end
-
-  specify "should provide access to the HTTP headers" do
-    res = Rack::Response.new
-    res["Content-Type"] = "text/yaml"
-
-    res.should.include "Content-Type"
-    res.headers["Content-Type"].should.equal "text/yaml"
-    res["Content-Type"].should.equal "text/yaml"
-    res.content_type.should.equal "text/yaml"
-    res.content_length.should.be.nil
-    res.location.should.be.nil
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_cookie.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_cookie.rb
deleted file mode 100644
index 96be4ad..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_cookie.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require 'test/spec'
-
-require 'rack/session/cookie'
-require 'rack/mock'
-require 'rack/response'
-
-context "Rack::Session::Cookie" do
-  incrementor = lambda { |env|
-    env["rack.session"]["counter"] ||= 0
-    env["rack.session"]["counter"] += 1
-    Rack::Response.new(env["rack.session"].inspect).to_a
-  }
-
-  specify "creates a new cookie" do
-    res = Rack::MockRequest.new(Rack::Session::Cookie.new(incrementor)).get("/")
-    res["Set-Cookie"].should.match("rack.session=")
-    res.body.should.equal '{"counter"=>1}'
-  end
-
-  specify "loads from a cookie" do
-    res = Rack::MockRequest.new(Rack::Session::Cookie.new(incrementor)).get("/")
-    cookie = res["Set-Cookie"]
-    res = Rack::MockRequest.new(Rack::Session::Cookie.new(incrementor)).
-      get("/", "HTTP_COOKIE" => cookie)
-    res.body.should.equal '{"counter"=>2}'
-    cookie = res["Set-Cookie"]
-    res = Rack::MockRequest.new(Rack::Session::Cookie.new(incrementor)).
-      get("/", "HTTP_COOKIE" => cookie)
-    res.body.should.equal '{"counter"=>3}'
-  end
-
-  specify "survives broken cookies" do
-    res = Rack::MockRequest.new(Rack::Session::Cookie.new(incrementor)).
-      get("/", "HTTP_COOKIE" => "rack.session=blarghfasel")
-    res.body.should.equal '{"counter"=>1}'
-  end
-
-  bigcookie = lambda { |env|
-    env["rack.session"]["cookie"] = "big" * 3000
-    Rack::Response.new(env["rack.session"].inspect).to_a
-  }
-
-  specify "barks on too big cookies" do
-    lambda {
-      Rack::MockRequest.new(Rack::Session::Cookie.new(bigcookie)).
-        get("/", :fatal => true)
-    }.should.raise(Rack::MockRequest::FatalWarning)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_memcache.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_memcache.rb
deleted file mode 100644
index 4435241..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_memcache.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-require 'test/spec'
-
-begin
-  require 'rack/session/memcache'
-  require 'rack/mock'
-  require 'rack/response'
-  require 'thread'
-
-  context "Rack::Session::Memcache" do
-    incrementor = lambda { |env|
-      env["rack.session"]["counter"] ||= 0
-      env["rack.session"]["counter"] += 1
-      Rack::Response.new(env["rack.session"].inspect).to_a
-    }
-
-    # Keep this first.
-    specify "startup" do
-      $pid = fork {
-        exec "memcached"
-      }
-      sleep 1
-    end
-
-    specify "faults on no connection" do
-      lambda do
-        Rack::Session::Memcache.new(incrementor, :memcache_server => '')
-      end.should.raise
-    end
-
-    specify "creates a new cookie" do
-      cache = Rack::Session::Memcache.new(incrementor)
-      res = Rack::MockRequest.new(cache).get("/")
-      res["Set-Cookie"].should.match("rack.session=")
-      res.body.should.equal '{"counter"=>1}'
-    end
-
-    specify "determines session from a cookie" do
-      cache = Rack::Session::Memcache.new(incrementor)
-      res = Rack::MockRequest.new(cache).get("/")
-      cookie = res["Set-Cookie"]
-      res = Rack::MockRequest.new(cache).get("/", "HTTP_COOKIE" => cookie)
-      res.body.should.equal '{"counter"=>2}'
-      res = Rack::MockRequest.new(cache).get("/", "HTTP_COOKIE" => cookie)
-      res.body.should.equal '{"counter"=>3}'
-    end
-
-    specify "survives broken cookies" do
-      cache = Rack::Session::Memcache.new(incrementor)
-      res = Rack::MockRequest.new(cache).
-        get("/", "HTTP_COOKIE" => "rack.session=blarghfasel")
-      res.body.should.equal '{"counter"=>1}'
-    end
-
-    specify "maintains freshness" do
-      cache = Rack::Session::Memcache.new(incrementor, :expire_after => 3)
-      res = Rack::MockRequest.new(cache).get('/')
-      res.body.should.include '"counter"=>1'
-      cookie = res["Set-Cookie"]
-      res = Rack::MockRequest.new(cache).get('/', "HTTP_COOKIE" => cookie)
-      res["Set-Cookie"].should.equal cookie
-      res.body.should.include '"counter"=>2'
-      puts 'Sleeping to expire session' if $DEBUG
-      sleep 4
-      res = Rack::MockRequest.new(cache).get('/', "HTTP_COOKIE" => cookie)
-      res["Set-Cookie"].should.not.equal cookie
-      res.body.should.include '"counter"=>1'
-    end
-
-    specify "multithread: should cleanly merge sessions" do
-      cache = Rack::Session::Memcache.new(incrementor)
-      drop_counter = Rack::Session::Memcache.new(proc do |env|
-        env['rack.session'].delete 'counter'
-        env['rack.session']['foo'] = 'bar'
-        [200, {'Content-Type'=>'text/plain'}, env['rack.session'].inspect]
-      end)
-
-      res = Rack::MockRequest.new(cache).get('/')
-      res.body.should.equal '{"counter"=>1}'
-      cookie = res["Set-Cookie"]
-      sess_id = cookie[/#{cache.key}=([^,;]+)/, 1]
-
-      res = Rack::MockRequest.new(cache).get('/', "HTTP_COOKIE" => cookie)
-      res.body.should.equal '{"counter"=>2}'
-
-      r = Array.new(rand(7).to_i+2) do |i|
-        app = proc do |env|
-          env['rack.session'][i]  = Time.now
-          sleep 2
-          env['rack.session']     = env['rack.session'].dup
-          env['rack.session'][i] -= Time.now
-          incrementor.call(env)
-        end
-        Thread.new(cache.context(app)) do |run|
-          Rack::MockRequest.new(run).
-            get('/', "HTTP_COOKIE" => cookie, 'rack.multithread' => true)
-        end
-      end
-
-      r.reverse!
-
-      r.map! do |t|
-        p t if $DEBUG
-        t.join.value
-      end
-
-      r.each do |res|
-        res['Set-Cookie'].should.equal cookie
-        res.body.should.include '"counter"=>3'
-      end
-
-      session = cache.pool[sess_id]
-      session.size.should.be r.size+1
-      session['counter'].should.be 3
-
-      res = Rack::MockRequest.new(drop_counter).get('/', "HTTP_COOKIE" => cookie)
-      res.body.should.include '"foo"=>"bar"'
-
-      session = cache.pool[sess_id]
-      session.size.should.be r.size+1
-      session['counter'].should.be.nil?
-      session['foo'].should.equal 'bar'
-    end
-
-    # Keep this last.
-    specify "shutdown" do
-      Process.kill 15, $pid
-      Process.wait($pid).should.equal $pid
-    end
-  end
-rescue LoadError
-  $stderr.puts "Skipping Rack::Session::Memcache tests (Memcache is required). `gem install memcache-client` and try again."
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_pool.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_pool.rb
deleted file mode 100644
index 794f961..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_session_pool.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require 'test/spec'
-
-require 'rack/session/pool'
-require 'rack/mock'
-require 'rack/response'
-require 'thread'
-
-context "Rack::Session::Pool" do
-  incrementor = lambda { |env|
-    env["rack.session"]["counter"] ||= 0
-    env["rack.session"]["counter"] += 1
-    Rack::Response.new(env["rack.session"].inspect).to_a
-  }
-
-  specify "creates a new cookie" do
-    pool = Rack::Session::Pool.new(incrementor)
-    res = Rack::MockRequest.new(pool).get("/")
-    res["Set-Cookie"].should.match("rack.session=")
-    res.body.should.equal '{"counter"=>1}'
-  end
-
-  specify "determines session from a cookie" do
-    pool = Rack::Session::Pool.new(incrementor)
-    res = Rack::MockRequest.new(pool).get("/")
-    cookie = res["Set-Cookie"]
-    res = Rack::MockRequest.new(pool).get("/", "HTTP_COOKIE" => cookie)
-    res.body.should.equal '{"counter"=>2}'
-    res = Rack::MockRequest.new(pool).get("/", "HTTP_COOKIE" => cookie)
-    res.body.should.equal '{"counter"=>3}'
-  end
-
-  specify "survives broken cookies" do
-    pool = Rack::Session::Pool.new(incrementor)
-    res = Rack::MockRequest.new(pool).
-      get("/", "HTTP_COOKIE" => "rack.session=blarghfasel")
-    res.body.should.equal '{"counter"=>1}'
-  end
-
-  specify "maintains freshness" do
-    pool = Rack::Session::Pool.new(incrementor, :expire_after => 3)
-    res = Rack::MockRequest.new(pool).get('/')
-    res.body.should.include '"counter"=>1'
-    cookie = res["Set-Cookie"]
-    res = Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
-    res["Set-Cookie"].should.equal cookie
-    res.body.should.include '"counter"=>2'
-    sleep 4
-    res = Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
-    res["Set-Cookie"].should.not.equal cookie
-    res.body.should.include '"counter"=>1'
-  end
-
-  specify "multithread: should merge sessions" do
-    delta_incrementor = lambda do |env|
-      # emulate disconjoinment of threading
-      env['rack.session'] = env['rack.session'].dup
-      Thread.stop
-      env['rack.session'][(Time.now.usec*rand).to_i] = true
-      incrementor.call(env)
-    end
-    pool = Rack::Session::Pool.new(incrementor)
-    res = Rack::MockRequest.new(pool).get('/')
-    res.body.should.equal '{"counter"=>1}'
-    cookie = res["Set-Cookie"]
-    sess_id = cookie[/#{pool.key}=([^,;]+)/,1]
-
-    pool = pool.context(delta_incrementor)
-    r = Array.new(rand(7).to_i+3).
-      map! do
-        Thread.new do
-          Rack::MockRequest.new(pool).get('/', "HTTP_COOKIE" => cookie)
-        end
-      end.
-      reverse!.
-      map!{|t| t.run.join.value }
-    session = pool.for.pool[sess_id] # for is needed by Utils::Context
-    session.size.should.be r.size+1 # counter
-    session['counter'].should.be 2 # meeeh
-    r.each do |res|
-      res['Set-Cookie'].should.equal cookie
-      res.body.should.include '"counter"=>2'
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_showexceptions.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_showexceptions.rb
deleted file mode 100644
index bdbc120..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_showexceptions.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'test/spec'
-
-require 'rack/showexceptions'
-require 'rack/mock'
-
-context "Rack::ShowExceptions" do
-  specify "catches exceptions" do
-    res = nil
-    req = Rack::MockRequest.new(Rack::ShowExceptions.new(lambda { |env|
-                                                           raise RuntimeError
-                                                         }))
-    lambda {
-      res = req.get("/")
-    }.should.not.raise
-    res.should.be.a.server_error
-    res.status.should.equal 500
-
-    res.should =~ /RuntimeError/
-    res.should =~ /ShowExceptions/
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_showstatus.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_showstatus.rb
deleted file mode 100644
index 7870013..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_showstatus.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-require 'test/spec'
-
-require 'rack/showstatus'
-require 'rack/mock'
-
-context "Rack::ShowStatus" do
-  specify "should provide a default status message" do
-    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env|
-                                                       [404, {"Content-Type" => "text/plain", "Content-Length" => "0"}, []]
-                                                     }))
-
-    res = req.get("/", :lint => true)
-    res.should.be.not_found
-    res.should.be.not.empty
-
-    res["Content-Type"].should.equal("text/html")
-    res.should =~ /404/
-    res.should =~ /Not Found/
-  end
-
-  specify "should let the app provide additional information" do
-    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env|
-                                                       env["rack.showstatus.detail"] = "gone too meta."
-                                                       [404, {"Content-Type" => "text/plain", "Content-Length" => "0"}, []]
-                                                     }))
-
-    res = req.get("/", :lint => true)
-    res.should.be.not_found
-    res.should.be.not.empty
-
-    res["Content-Type"].should.equal("text/html")
-    res.should =~ /404/
-    res.should =~ /Not Found/
-    res.should =~ /too meta/
-  end
-
-  specify "should not replace existing messages" do
-    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env|
-                                                       [404, {"Content-Type" => "text/plain", "Content-Length" => "4"}, ["foo!"]]
-                                                     }))
-    res = req.get("/", :lint => true)
-    res.should.be.not_found
-
-    res.body.should == "foo!"
-  end
-
-  specify "should pass on original headers" do
-    headers = {"WWW-Authenticate" => "Basic blah"}
-
-    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env| [401, headers, []] }))
-    res = req.get("/", :lint => true)
-
-    res["WWW-Authenticate"].should.equal("Basic blah")
-  end
-
-  specify "should replace existing messages if there is detail" do
-    req = Rack::MockRequest.new(Rack::ShowStatus.new(lambda { |env|
-                                                       env["rack.showstatus.detail"] = "gone too meta."
-                                                       [404, {"Content-Type" => "text/plain", "Content-Length" => "4"}, ["foo!"]]
-                                                     }))
-
-    res = req.get("/", :lint => true)
-    res.should.be.not_found
-    res.should.be.not.empty
-
-    res["Content-Type"].should.equal("text/html")
-    res["Content-Length"].should.not.equal("4")
-    res.should =~ /404/
-    res.should =~ /too meta/
-    res.body.should.not =~ /foo/
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_static.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_static.rb
deleted file mode 100644
index 67cf97e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_static.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-require 'test/spec'
-
-require 'rack/static'
-require 'rack/mock'
-
-class DummyApp
-  def call(env)
-    [200, {}, "Hello World"]
-  end
-end
-
-context "Rack::Static" do
-  root = File.expand_path(File.dirname(__FILE__))
-  OPTIONS = {:urls => ["/cgi"], :root => root}
-
-  setup do
-    @request = Rack::MockRequest.new(Rack::Static.new(DummyApp.new, OPTIONS))
-  end
-
-  specify "serves files" do
-    res = @request.get("/cgi/test")
-    res.should.be.ok
-    res.body.should =~ /ruby/
-  end
-
-  specify "404s if url root is known but it can't find the file" do
-    res = @request.get("/cgi/foo")
-    res.should.be.not_found
-  end
-
-  specify "calls down the chain if url root is not known" do
-    res = @request.get("/something/else")
-    res.should.be.ok
-    res.body.should == "Hello World"
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_urlmap.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_urlmap.rb
deleted file mode 100644
index d2c2062..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_urlmap.rb
+++ /dev/null
@@ -1,175 +0,0 @@
-require 'test/spec'
-
-require 'rack/urlmap'
-require 'rack/mock'
-
-context "Rack::URLMap" do
-  specify "dispatches paths correctly" do
-    app = lambda { |env|
-      [200, {
-        'X-ScriptName' => env['SCRIPT_NAME'],
-        'X-PathInfo' => env['PATH_INFO'],
-        'Content-Type' => 'text/plain'
-      }, [""]]
-    }
-    map = Rack::URLMap.new({
-      'http://foo.org/bar' => app,
-      '/foo' => app,
-      '/foo/bar' => app
-    })
-
-    res = Rack::MockRequest.new(map).get("/")
-    res.should.be.not_found
-
-    res = Rack::MockRequest.new(map).get("/qux")
-    res.should.be.not_found
-
-    res = Rack::MockRequest.new(map).get("/foo")
-    res.should.be.ok
-    res["X-ScriptName"].should.equal "/foo"
-    res["X-PathInfo"].should.equal ""
-
-    res = Rack::MockRequest.new(map).get("/foo/")
-    res.should.be.ok
-    res["X-ScriptName"].should.equal "/foo"
-    res["X-PathInfo"].should.equal "/"
-
-    res = Rack::MockRequest.new(map).get("/foo/bar")
-    res.should.be.ok
-    res["X-ScriptName"].should.equal "/foo/bar"
-    res["X-PathInfo"].should.equal ""
-
-    res = Rack::MockRequest.new(map).get("/foo/bar/")
-    res.should.be.ok
-    res["X-ScriptName"].should.equal "/foo/bar"
-    res["X-PathInfo"].should.equal "/"
-
-    res = Rack::MockRequest.new(map).get("/foo/quux", "SCRIPT_NAME" => "/bleh")
-    res.should.be.ok
-    res["X-ScriptName"].should.equal "/bleh/foo"
-    res["X-PathInfo"].should.equal "/quux"
-
-    res = Rack::MockRequest.new(map).get("/bar", 'HTTP_HOST' => 'foo.org')
-    res.should.be.ok
-    res["X-ScriptName"].should.equal "/bar"
-    res["X-PathInfo"].should.be.empty
-
-    res = Rack::MockRequest.new(map).get("/bar/", 'HTTP_HOST' => 'foo.org')
-    res.should.be.ok
-    res["X-ScriptName"].should.equal "/bar"
-    res["X-PathInfo"].should.equal '/'
-  end
-
-
-  specify "dispatches hosts correctly" do
-    map = Rack::URLMap.new("http://foo.org/" => lambda { |env|
-                             [200,
-                              { "Content-Type" => "text/plain",
-                                "X-Position" => "foo.org",
-                                "X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
-                              }, [""]]},
-                           "http://bar.org/" => lambda { |env|
-                             [200,
-                              { "Content-Type" => "text/plain",
-                                "X-Position" => "bar.org",
-                                "X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
-                              }, [""]]},
-                           "/" => lambda { |env|
-                             [200,
-                              { "Content-Type" => "text/plain",
-                                "X-Position" => "default.org",
-                                "X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
-                              }, [""]]}
-                           )
-
-    res = Rack::MockRequest.new(map).get("/")
-    res.should.be.ok
-    res["X-Position"].should.equal "default.org"
-
-    res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "bar.org")
-    res.should.be.ok
-    res["X-Position"].should.equal "bar.org"
-
-    res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "foo.org")
-    res.should.be.ok
-    res["X-Position"].should.equal "foo.org"
-
-    res = Rack::MockRequest.new(map).get("http://foo.org/")
-    res.should.be.ok
-    res["X-Position"].should.equal "default.org"
-
-    res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "example.org")
-    res.should.be.ok
-    res["X-Position"].should.equal "default.org"
-
-    res = Rack::MockRequest.new(map).get("/",
-                                         "HTTP_HOST" => "example.org:9292",
-                                         "SERVER_PORT" => "9292")
-    res.should.be.ok
-    res["X-Position"].should.equal "default.org"
-  end
-
-  specify "should be nestable" do
-    map = Rack::URLMap.new("/foo" =>
-      Rack::URLMap.new("/bar" =>
-        Rack::URLMap.new("/quux" =>  lambda { |env|
-                           [200,
-                            { "Content-Type" => "text/plain",
-                              "X-Position" => "/foo/bar/quux",
-                              "X-PathInfo" => env["PATH_INFO"],
-                              "X-ScriptName" => env["SCRIPT_NAME"],
-                            }, [""]]}
-                         )))
-
-    res = Rack::MockRequest.new(map).get("/foo/bar")
-    res.should.be.not_found
-
-    res = Rack::MockRequest.new(map).get("/foo/bar/quux")
-    res.should.be.ok
-    res["X-Position"].should.equal "/foo/bar/quux"
-    res["X-PathInfo"].should.equal ""
-    res["X-ScriptName"].should.equal "/foo/bar/quux"
-  end
-
-  specify "should route root apps correctly" do
-    map = Rack::URLMap.new("/" => lambda { |env|
-                             [200,
-                              { "Content-Type" => "text/plain",
-                                "X-Position" => "root",
-                                "X-PathInfo" => env["PATH_INFO"],
-                                "X-ScriptName" => env["SCRIPT_NAME"]
-                              }, [""]]},
-                           "/foo" => lambda { |env|
-                             [200,
-                              { "Content-Type" => "text/plain",
-                                "X-Position" => "foo",
-                                "X-PathInfo" => env["PATH_INFO"],
-                                "X-ScriptName" => env["SCRIPT_NAME"]
-                              }, [""]]}
-                           )
-
-    res = Rack::MockRequest.new(map).get("/foo/bar")
-    res.should.be.ok
-    res["X-Position"].should.equal "foo"
-    res["X-PathInfo"].should.equal "/bar"
-    res["X-ScriptName"].should.equal "/foo"
-
-    res = Rack::MockRequest.new(map).get("/foo")
-    res.should.be.ok
-    res["X-Position"].should.equal "foo"
-    res["X-PathInfo"].should.equal ""
-    res["X-ScriptName"].should.equal "/foo"
-
-    res = Rack::MockRequest.new(map).get("/bar")
-    res.should.be.ok
-    res["X-Position"].should.equal "root"
-    res["X-PathInfo"].should.equal "/bar"
-    res["X-ScriptName"].should.equal ""
-
-    res = Rack::MockRequest.new(map).get("")
-    res.should.be.ok
-    res["X-Position"].should.equal "root"
-    res["X-PathInfo"].should.equal "/"
-    res["X-ScriptName"].should.equal ""
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_utils.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_utils.rb
deleted file mode 100644
index 0ec0a39..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_utils.rb
+++ /dev/null
@@ -1,174 +0,0 @@
-require 'test/spec'
-
-require 'rack/utils'
-require 'rack/lint'
-require 'rack/mock'
-
-context "Rack::Utils" do
-  specify "should escape correctly" do
-    Rack::Utils.escape("fo<o>bar").should.equal "fo%3Co%3Ebar"
-    Rack::Utils.escape("a space").should.equal "a+space"
-    Rack::Utils.escape("q1!2\"'w$5&7/z8)?\\").
-      should.equal "q1%212%22%27w%245%267%2Fz8%29%3F%5C"
-  end
-
-  specify "should unescape correctly" do
-    Rack::Utils.unescape("fo%3Co%3Ebar").should.equal "fo<o>bar"
-    Rack::Utils.unescape("a+space").should.equal "a space"
-    Rack::Utils.unescape("a%20space").should.equal "a space"
-    Rack::Utils.unescape("q1%212%22%27w%245%267%2Fz8%29%3F%5C").
-      should.equal "q1!2\"'w$5&7/z8)?\\"
-  end
-
-  specify "should parse query strings correctly" do
-    Rack::Utils.parse_query("foo=bar").should.equal "foo" => "bar"
-    Rack::Utils.parse_query("foo=bar&foo=quux").
-      should.equal "foo" => ["bar", "quux"]
-    Rack::Utils.parse_query("foo=1&bar=2").
-      should.equal "foo" => "1", "bar" => "2"
-    Rack::Utils.parse_query("my+weird+field=q1%212%22%27w%245%267%2Fz8%29%3F").
-      should.equal "my weird field" => "q1!2\"'w$5&7/z8)?"
-  end
-  
-  specify "should build query strings correctly" do
-    Rack::Utils.build_query("foo" => "bar").should.equal "foo=bar"
-    Rack::Utils.build_query("foo" => ["bar", "quux"]).
-      should.equal "foo=bar&foo=quux"
-    Rack::Utils.build_query("foo" => "1", "bar" => "2").
-      should.equal "foo=1&bar=2"
-    Rack::Utils.build_query("my weird field" => "q1!2\"'w$5&7/z8)?").
-      should.equal "my+weird+field=q1%212%22%27w%245%267%2Fz8%29%3F"
-  end
-
-  specify "should figure out which encodings are acceptable" do
-    helper = lambda do |a, b|
-      request = Rack::Request.new(Rack::MockRequest.env_for("", "HTTP_ACCEPT_ENCODING" => a))
-      Rack::Utils.select_best_encoding(a, b)
-    end
-
-    helper.call(%w(), [["x", 1]]).should.equal(nil)
-    helper.call(%w(identity), [["identity", 0.0]]).should.equal(nil)
-    helper.call(%w(identity), [["*", 0.0]]).should.equal(nil)
-
-    helper.call(%w(identity), [["compress", 1.0], ["gzip", 1.0]]).should.equal("identity")
-
-    helper.call(%w(compress gzip identity), [["compress", 1.0], ["gzip", 1.0]]).should.equal("compress")
-    helper.call(%w(compress gzip identity), [["compress", 0.5], ["gzip", 1.0]]).should.equal("gzip")
-
-    helper.call(%w(foo bar identity), []).should.equal("identity")
-    helper.call(%w(foo bar identity), [["*", 1.0]]).should.equal("foo")
-    helper.call(%w(foo bar identity), [["*", 1.0], ["foo", 0.9]]).should.equal("bar")
-
-    helper.call(%w(foo bar identity), [["foo", 0], ["bar", 0]]).should.equal("identity")
-    helper.call(%w(foo bar baz identity), [["*", 0], ["identity", 0.1]]).should.equal("identity")
-  end
-end
-
-context "Rack::Utils::HeaderHash" do
-  specify "should capitalize on all accesses" do
-    h = Rack::Utils::HeaderHash.new("foo" => "bar")
-    h["foo"].should.equal "bar"
-    h["Foo"].should.equal "bar"
-    h["FOO"].should.equal "bar"
-
-    h.to_hash.should.equal "Foo" => "bar"
-
-    h["bar-zzle"] = "quux"
-
-    h.to_hash.should.equal "Foo" => "bar", "Bar-Zzle" => "quux"
-  end
-
-  specify "should capitalize correctly" do
-    h = Rack::Utils::HeaderHash.new
-
-    h.capitalize("foo").should.equal "Foo"
-    h.capitalize("foo-bar").should.equal "Foo-Bar"
-    h.capitalize("foo_bar").should.equal "Foo_Bar"
-    h.capitalize("foo bar").should.equal "Foo Bar"
-    h.capitalize("foo-bar-quux").should.equal "Foo-Bar-Quux"
-    h.capitalize("foo-bar-2quux").should.equal "Foo-Bar-2quux"
-  end
-
-  specify "should be converted to real Hash" do
-    h = Rack::Utils::HeaderHash.new("foo" => "bar")
-    h.to_hash.should.be.instance_of Hash
-  end
-end
-
-context "Rack::Utils::Context" do
-  test_app1 = Object.new
-  def test_app1.context app
-    Rack::Utils::Context.new self, app do |env|
-      app.call env
-    end
-  end
-  test_app2 = Object.new
-  def test_app2.context env; end
-  test_app3 = Object.new
-  test_target1 = proc{|e| e.to_s+' world' }
-  test_target2 = proc{|e| e.to_i+2 }
-  test_target3 = proc{|e| nil }
-  test_target4 = proc{|e| [200,{'Content-Type'=>'text/plain', 'Content-Length'=>'0'},['']] }
-  test_target5 = Object.new
-
-  specify "should perform checks on both arguments" do
-    lambda { Rack::Utils::Context.new(nil, nil){} }.should.raise
-    lambda { Rack::Utils::Context.new(test_app1, nil){} }.should.raise
-    lambda { Rack::Utils::Context.new(nil, test_target1){} }.should.raise
-    lambda { Rack::Utils::Context.new(test_app1, test_target1){} }.should.not.raise
-    lambda { Rack::Utils::Context.new(test_app3, test_target1){} }.should.raise
-    lambda { Rack::Utils::Context.new(test_app1, test_target5){} }.should.raise
-    lambda { test_app1.context(nil){} }.should.raise
-    lambda { test_app1.context(test_target1){} }.should.not.raise
-    lambda { test_app1.context(test_target5){} }.should.raise
-  end
-
-  specify "should set context correctly" do
-    c1 = Rack::Utils::Context.new(test_app1, test_target1){}
-    c1.for.should.equal test_app1
-    c1.app.should.equal test_target1
-    c2 = Rack::Utils::Context.new(test_app1, test_target2){}
-    c2.for.should.equal test_app1
-    c2.app.should.equal test_target2
-    c3 = Rack::Utils::Context.new(test_app2, test_target3){}
-    c3.for.should.equal test_app2
-    c3.app.should.equal test_target3
-    c4 = Rack::Utils::Context.new(test_app2, test_target4){}
-    c4.for.should.equal test_app2
-    c4.app.should.equal test_target4
-  end
-
-  specify "should alter app on recontexting" do
-    c1 = Rack::Utils::Context.new(test_app1, test_target1){}
-    c1.for.should.equal test_app1
-    c1.app.should.equal test_target1
-    c2 = c1.context(test_target2)
-    c2.for.should.equal test_app1
-    c2.app.should.not.equal test_target1
-    c2.app.should.equal test_target2
-    c3 = c2.context(test_target3)
-    c3.for.should.equal test_app1
-    c3.app.should.not.equal test_target2
-    c3.app.should.equal test_target3
-    c4 = c3.context(test_target4)
-    c4.for.should.equal test_app1
-    c4.app.should.not.equal test_target3
-    c4.app.should.equal test_target4
-  end
-
-  specify "should run different apps" do
-    c1 = test_app1.context(test_target1)
-    c2 = c1.context test_target2
-    c3 = c2.context test_target3
-    c4 = c3.context test_target4
-    a4 = Rack::Lint.new c4
-    r1 = c1.call('hello')
-    r1.should.equal 'hello world'
-    r2 = c2.call(2)
-    r2.should.equal 4
-    r3 = c3.call(:misc_symbol)
-    r3.should.be.nil
-    r4 = Rack::MockRequest.new(a4).get('/')
-    r4.status.should.be 200
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_webrick.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_webrick.rb
deleted file mode 100644
index 42fdac9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/spec_rack_webrick.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-require 'test/spec'
-
-require 'rack/handler/webrick'
-require 'rack/lint'
-require 'testrequest'
-
-Thread.abort_on_exception = true
-
-context "Rack::Handler::WEBrick" do
-  include TestRequest::Helpers
-  
-  setup do
-    @server = WEBrick::HTTPServer.new(:Host => @host='0.0.0.0',
-                                      :Port => @port=9202,
-                                      :Logger => WEBrick::Log.new(nil, WEBrick::BasicLog::WARN),
-                                      :AccessLog => [])
-    @server.mount "/test", Rack::Handler::WEBrick,
-      Rack::Lint.new(TestRequest.new)
-    Thread.new { @server.start }
-    trap(:INT) { @server.shutdown }
-  end
-
-  specify "should respond" do
-    lambda {
-      GET("/test")
-    }.should.not.raise
-  end
-
-  specify "should be a WEBrick" do
-    GET("/test")
-    status.should.be 200
-    response["SERVER_SOFTWARE"].should =~ /WEBrick/
-    response["HTTP_VERSION"].should.equal "HTTP/1.1"
-    response["SERVER_PROTOCOL"].should.equal "HTTP/1.1"
-    response["SERVER_PORT"].should.equal "9202"
-    response["SERVER_NAME"].should.equal "0.0.0.0"
-  end
-
-  specify "should have rack headers" do
-    GET("/test")
-    response["rack.version"].should.equal [0,1]
-    response["rack.multithread"].should.be true
-    response["rack.multiprocess"].should.be false
-    response["rack.run_once"].should.be false
-  end
-
-  specify "should have CGI headers on GET" do
-    GET("/test")
-    response["REQUEST_METHOD"].should.equal "GET"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/"
-    response["PATH_INFO"].should.be.nil
-    response["QUERY_STRING"].should.equal ""
-    response["test.postdata"].should.equal ""
-
-    GET("/test/foo?quux=1")
-    response["REQUEST_METHOD"].should.equal "GET"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/"
-    response["PATH_INFO"].should.equal "/foo"
-    response["QUERY_STRING"].should.equal "quux=1"
-  end
-
-  specify "should have CGI headers on POST" do
-    POST("/test", {"rack-form-data" => "23"}, {'X-test-header' => '42'})
-    status.should.equal 200
-    response["REQUEST_METHOD"].should.equal "POST"
-    response["SCRIPT_NAME"].should.equal "/test"
-    response["REQUEST_PATH"].should.equal "/"
-    response["QUERY_STRING"].should.equal ""
-    response["HTTP_X_TEST_HEADER"].should.equal "42"
-    response["test.postdata"].should.equal "rack-form-data=23"
-  end
-
-  specify "should support HTTP auth" do
-    GET("/test", {:user => "ruth", :passwd => "secret"})
-    response["HTTP_AUTHORIZATION"].should.equal "Basic cnV0aDpzZWNyZXQ="
-  end
-
-  specify "should set status" do
-    GET("/test?secret")
-    status.should.equal 403
-    response["rack.url_scheme"].should.equal "http"
-  end
-
-  specify "should provide a .run" do
-    block_ran = false
-    catch(:done) {
-      Rack::Handler::WEBrick.run(lambda {},
-                                 {:Port => 9210,
-                                   :Logger => WEBrick::Log.new(nil, WEBrick::BasicLog::WARN),
-                                   :AccessLog => []}) { |server|
-        block_ran = true
-        server.should.be.kind_of WEBrick::HTTPServer
-        @s = server
-        throw :done
-      }
-    }
-    block_ran.should.be true
-    @s.shutdown
-  end
-
-  teardown do
-    @server.shutdown
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/testrequest.rb b/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/testrequest.rb
deleted file mode 100644
index 348cd49..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rack-0.4.0/test/testrequest.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require 'yaml'
-require 'net/http'
-
-class TestRequest
-  def call(env)
-    status = env["QUERY_STRING"] =~ /secret/ ? 403 : 200
-    env["test.postdata"] = env["rack.input"].read
-    body = env.to_yaml
-    size = body.respond_to?(:bytesize) ? body.bytesize : body.size
-    [status, {"Content-Type" => "text/yaml", "Content-Length" => size.to_s}, [body]]
-  end
-
-  module Helpers
-    attr_reader :status, :response
-
-    def GET(path, header={})
-      Net::HTTP.start(@host, @port) { |http|
-        user = header.delete(:user)
-        passwd = header.delete(:passwd)
-
-        get = Net::HTTP::Get.new(path, header)
-        get.basic_auth user, passwd  if user && passwd
-        http.request(get) { |response|
-          @status = response.code.to_i
-          @response = YAML.load(response.body)
-        }
-      }
-    end
-
-    def POST(path, formdata={}, header={})
-      Net::HTTP.start(@host, @port) { |http|
-        user = header.delete(:user)
-        passwd = header.delete(:passwd)
-
-        post = Net::HTTP::Post.new(path, header)
-        post.form_data = formdata
-        post.basic_auth user, passwd  if user && passwd
-        http.request(post) { |response|
-          @status = response.code.to_i
-          @response = YAML.load(response.body)
-        }
-      }
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/CHANGES b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/CHANGES
deleted file mode 100644
index ce3ab9f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/CHANGES
+++ /dev/null
@@ -1,400 +0,0 @@
-
-= Rake Changelog
-
-== Version 0.8.3
-
-* Enhanced the system directory detection in windows. We now check
-  HOMEDRIVE/HOMEPATH and USERPROFILE if APPDATA isn't found. (Patch
-  supplied by James Tucker). Rake no long aborts if it can't find the
-  directory.
-
-* Added fix to handle ruby installations in directories with spaces in
-  their name.  
-
-== Version 0.8.2
-
-* Fixed bug in package task so that it will include the subdir
-  directory in the package for testing. (Bug found by Adam Majer)
-
-* Added ENV var to rakefile to prevent OS X from including extended
-  attribute junk in a tar file. (Bug found by Adam Majer)
-
-* Fixed filename dependency order bug in test_inspect_pending and
-  test_to_s_pending. (Bug found by Adam Majer)
-
-* Fixed check for file utils options to make them immune to the
-  symbol/string differences. (Patch supplied by Edwin Pratomo)
-
-* Fixed bug with rules involving multiple source (Patch supplied by
-  Emanuel Indermühle)
-
-* Switched from getoptlong to optparse (patches supplied by Edwin
-  Pratomo)
-
-* The -T option will now attempt to dynamically sense the size of the
-  terminal.  RAKE_COLUMNS will override any dynamic sensing.
-
-* FileList#clone and FileList#dup have better sematics w.r.t. taint
-  and freeze.
-
-* Added ability clear prerequisites, and/or actions from an existing
-  task.
-
-* Added the ability to reenable a task to be invoked a second time.
-
-* Changed RDoc test task to have no default template. This makes it
-  easier for the tempate to pick up the template from the environment.
-
-* Changed from using Mutex to Monitor. Evidently Mutex causes thread
-  join errors when Ruby is compiled with -disable-pthreads. (Patch
-  supplied by Ittay Dror) 
-
-* Fixed bug in makefile parser that had problems with extra spaces in
-  file task names. (Patch supplied by Ittay Dror)
-
-* Added a performance patch for reading large makefile dependency
-  files. (Patch supplied by Ittay Dror)
-
-* Default values for task arguments can easily be specified with the
-  :with_defaults method. (Idea for default argument merging supplied
-  by (Adam Q. Salter)
-
-* The -T output will only self-truncate if the output is a tty.
-  However, if RAKE_COLUMNS is explicitly set, it will be honored in
-  any case. (Patch provided by Gavin Stark).
-
-* Numerous fixes for running under windows. A big thanks to Bheeshmar
-  Redheendran for spending a good part of the afternoon at the
-  Lonestar Ruby Conference to help me work out these issues.
-
-== Version 0.8.1
-
-* Removed requires on parsedate.rb (in Ftptools)
-* Removed ftools from rake.rb.  Made it options in sys.rb
-
-== Version 0.8.0
-
-* Added task parameters (e.g. "rake build[version7]")
-* Made task parameters passable to prerequisites.
-* Comments are limited to 80 columns or so (suggested by Jamis Buck).
-* Added -D to display full comments (suggested by Jamis Buck).
-* The rake program will set the status value used in any explicit
-  exit(n) calls. (patch provided by Stephen Touset)
-* Fixed error in functional tests that were not including session (and
-  silently skipping the functionl tests.
-* Removed --usage and make -h the same as -H.
-* Make a prettier inspect for tasks.
-
-== Version 0.7.3
-
-* Added existing and existing! methods to FileList
-* FileLists now claim to be Arrays (via is_a?) to get better support
-  from the FileUtil module.
-* Added init and top_level for custom rake applications.
-
-== Version 0.7.2
-
-* Error messages are now send to stderr rather than stdout (from
-  Payton Quackenbush).
-* Better error handling on invalid command line arguments (from Payton
-  Quackenbush).
-* Added rcov task and updated unit testing for better code coverage.
-* Fixed some bugs where the application object was going to the global
-  appliation instead of using its own data.
-* Added square and curly bracket patterns to FileList#include (Tilman
-  Sauerbeck). 
-* Added plain filename support to rule dependents (suggested by Nobu
-  Nakada). 
-* Added pathmap support to rule dependents.
-* Added a 'tasks' method to a namespace to get a list of tasks
-  associated with the namespace.
-* Fixed the method name leak from FileUtils (bug found by Glenn
-  Vanderburg). 
-* Added rake_extension to handle detection of extension collisions.
-* Added test for noop, bad_option and verbose flags to sh command.
-* Removed dependency on internal fu_xxx functions from FileUtils.
-* Added a 'shame' task to the Rakefile.
-* Added tar_command and zip_command options to the Package task.
-* Added a description to the gem task in GemPackageTask.
-* Fixed a bug when rules have multiple prerequisites (patch by Joel
-  VanderWerf)
-* Added a protected 'require "rubygems"' to test/test_application to
-  unbreak cruisecontrol.rb.
-* Added the handful of RakeFileUtils to the private method as well.
-* Added block based exclusion.
-* The clean task will no longer delete 'core' if it is a directory.
-* Removed rake_dup.  Now we just simply rescue a bad dup.
-* Refactored the FileList reject logic to remove duplication.
-* Removed if __FILE__ at the end of the rake.rb file.
-
-== Version 0.7.1
-
-* Added optional filter parameter to the --tasks command line option.
-* Added flatten to allow rule transform procs to return lists of
-  prereqs (Joel VanderWerf provided patch).
-* Added pathmap to String and FileList.
-* The -r option will now load .rake files (but a straight require
-  doesn't yet).  NOTE: This is experimental ... it may be
-  discontinued.
-* The -f option without a value will disable the search for a
-  Rakefile.  The assumption is that the -r files are adequate.
-* Fixed the safe_ln function to fall back to cp in more error
-  scenarios.
-
-== Version 0.7.0
-
-* Added Rake.original_dir to return the original starting directory of
-  the rake application.
-* Added safe_ln support for openAFS (from Ludvig Omholt).
-* Added --trace reminder on short exception messages (David Heinemeier
-  Hansson suggestion).
-* Added multitask declaration that executes prerequisites in
-  parallel. (Doug Young providied an initial implementation).
-* Fixed missing_const hack to be compatible with Rails. (Jamis Buck
-  supplied test case).
-* Made the RDoc task default to internal (in-process) RDoc formatting.
-  The old behavior is still available by setting the +external+ flag
-  to true.
-* Rakefiles are now loaded with the expanded path to prevent
-  accidental polution from the Ruby load path.
-* The +namespace+ command now returns a NameSpace object that can be
-  used to lookup tasks defined in that namespace.  This allows for
-  better anonymous namespace behavior.
-* Task objects my now be used in prerequisite lists directly.
-
-== Version 0.6.1
-
-* Rebuilt 0.6.0 gem without signing.
-
-== Version 0.6.0
-
-* Fixed file creation bug in the unit tests (caused infinite loop on
-  windows).
-* Fixed bug where session based functional tests were run under
-  windows.
-* Fixed bug in directory tasks so that updating a directory will not
-  retrigger file tasks depending on the directory (see
-  FileCreationTask and EarlyTime).
-* Added egrep to FileList
-* ruby command now runs same ruby version as rake.
-* Added investigation to task object. (suggested by Martin Fowler)
-* Added ruby_opts to the test task to allow arbitrary ruby options to
-  be passed to the test script. (Greg Fast)
-* Fixed the test loader to ignore options. (Greg Fast)
-* Moved Task, FileTask, FileCreationTask and RakeApp into the Rake
-  module namespace.  Old style namespace behavior can be invoked via
-  the --classic-namespace option. (requested by Kelly Felkins).
-* GemTask is now sensitive to the gem platform (Masao Mutoh).
-* A non-existing file prerequisite will no longer cause an exception
-  (Philipp Neubeck).
-* Multiple prerequisites on Rake rules now allowed (initial patch
-  supplied by Stuart Jansen).
-
-== Version 0.5.4
-
-* Added double quotes to the test runner.
-* Added .svn to default ignore list.
-* Updated FileList#include to support nested arrays and filelists.
-
-== Version 0.5.3
-
-* Added support for importing Rakefile and other dependencies.
-* Fixed bug so that now rules can chain off of existing tasks as well
-  as existing files.
-* Fixed verbose flag bug in the testing task.  Shortened some failure
-  messages.
-* Make FileUtils methods private at the top level module to avoid
-  accidental method leaking into other objects.
-* Added test loader option to test task.  "testrb" is no longer the
-  default test loader.  It is now eating syntax errors that should
-  halt the unit tests.
-* Revamped FileList so that it works more like and array (addressed
-  flatten bug).  Added many tests around file list.
-* Added +ext+ method to both String and FileList.
-
-== Version 0.5.0
-
-* Fixed documentation that was lacking the Rake module name (Tilman
-  Sauerbeck).
-* Added tar.gz and tar.bz2 support to package task (Tilman Sauerbeck).
-* Recursive rules are now supported (Tilman Sauerbeck).
-* Added warning option for the Test Task (requested by Eric Hodel).
-* The jamis rdoc template is only used if it exists.
-* Added fix for Ruby 1.8.2 test/unit and rails problem.
-* Added contributed rake man file (Jani Monoses).
-* Added Brian Candler's fix for problems in --trace and --dry-run
-  mode.
-
-== Version 0.4.15
-
-* Fixed a bug that prevented the TESTOPTS flag from working with the
-  revised for 1.8.2 test task.
-* Updated the docs on --trace to indicate that it also enables a full
-  backtrace on errors. 
-
-== Version 0.4.14
-
-* Modified the TestTask to workaround the Ruby 1.8.2 change in
-  autoexecuting unit tests.
-
-== Version 0.4.13
-
-* Fixed the dry-run flag so it is operating again.
-* Multiple arguments to sh and ruby commands will not be interpreted
-  by the shell (patch provided by Jonathan Paisley).
-
-== Version 0.4.12
-
-* Added --silent (-s) to suppress the (in directory) rake message.
-
-== Version 0.4.11
-
-* Changed the "don't know how to rake" message (finally)
-* Changes references to a literal "Rakefile" to reference the global
-  variable $rakefile (which contains the actual name of the rakefile).
-
-== Version 0.4.10
-
-* Added block support to the "sh" command, allowing users to take
-  special actions on the result of the system call.  E.g.
-
-    sh "shell_command" do |ok, res|
-      puts "Program returned #{res.exitstatus}" if ! ok
-    end
-
-== Version 0.4.9
-
-* Switched to Jamis Buck's RDoc template.
-* Removed autorequire from Rake's gem spec.  This prevents the Rake
-  libraries from loading while using rails.
-
-== Version 0.4.8
-
-* Added support for .rb versions of Rakefile.
-* Removed \\\n's from test task.
-* Fixed Ruby 1.9 compatibility issue with FileList.
-
-== Version 0.4.7
-
-* Fixed problem in FileList that caused Ruby 1.9 to go into infinite
-  recursion.  Since to_a was removed from Object, it does not need to
-  added back into the list of methods to rewrite in FileList.  (Thanks
-  to Kent Sibilev for pointing this out).
-
-== Version 0.4.6
-* Removed test version of ln in FileUtils that prevented safe_ln from
-  using ln.
-
-== Version 0.4.5
-* Upgraded comments in TestTask.
-* FileList to_s and inspect now automatically resolve pending changes.
-* FileList#exclude properly returns the FileList.
-
-== Version 0.4.4
-* Fixed initialization problem with @comment.
-* Now using multi -r technique in TestTask.  Switch Rakefile back to
-  using the built-in test task macros because the rake runtime is no
-  longer needed.
-* Added 'TEST=filename' and 'TESTOPTS=options' to the Test Task
-  macros.
-* Allow a +test_files+ attribute in test tasks.  This allows more
-  flexibility in specifying test files.
-
-== Version 0.4.3
-* Fixed Comment leakage.
-
-== Version 0.4.2
-* Added safe_ln that falls back to a copy if a file link is not supported.
-* Package builder now uses safe_ln.
-
-== Version 0.4.1
-* Task comments are now additive, combined with "/".
-* Works with (soon to be released) rubygems 0.6.2 (or 0.7.0)
-
-== Version 0.4.0
-* FileList now uses deferred loading.  The file system is not searched
-  until the first call that needs the file names.
-* VAR=VALUE options are now accepted on the command line and are
-  treated like environment variables.  The values may be tested in a
-  Rakefile by referencing ENV['VAR'].
-* File.mtime is now used (instead of File.new().mtime).
-
-== Version 0.3.2.x
-
-* Removed some hidden dependencies on rubygems.  Tests now will test
-  gems only if they are installed.
-* Removed Sys from some example files.  I believe that is that last
-  reference to Sys outside of the contrib area.
-* Updated all copyright notices to include 2004.
-
-== Version 0.3.2
-
-* GEM Installation now works with the application stub.
-
-== Version 0.3.1
-
-* FileLists now automatically ignore CVS, .bak, !
-* GEM Installation now works.
-
-== Version 0.3.0
-
-Promoted 0.2.10.
-
-== Version 0.2.10
-General
-
-* Added title to Rake's rdocs
-* Contrib packages are no longer included in the documentation.
-
-RDoc Issues
-
-* Removed default for the '--main' option
-* Fixed rendering of the rdoc options
-* Fixed clean/clobber confusion with rerdoc
-* 'title' attribute added
-
-Package Task Library Issues
-
-* Version (or explicit :noversion) is required.
-* +package_file+ attribute is now writable
-
-FileList Issues
-
-* Dropped bang version of exclude.  Now using ant-like include/exclude semantics.
-* Enabled the "yield self" idiom in FileList#initialize.
-
-== Version 0.2.9
-
-This version contains numerous changes as the RubyConf.new(2003)
-presentation was being prepared.  The changes include:
-
-* The monolithic rubyapp task library is in the process of being
-  dropped in favor of lighter weight task libraries.
-
-== Version 0.2.7
-
-* Added "desc" for task descriptions.
-* -T will now display tasks with descriptions.
-* -P will display tasks and prerequisites.
-* Dropped the Sys module in favor of the 1.8.x FileUtils module.  Sys
-  is still supported in the contrib area.
-
-== Version 0.2.6
-
-* Moved to RubyForge
-
-== Version 0.2.5
-
-* Switched to standard ruby app builder.
-* Added no_match option to file matcher.
-
-== Version 0.2.4
-
-* Fixed indir, which neglected to actually change directories.
-
-== Version 0.2.3
-
-* Added rake module for a help target
-* Added 'for_files' to Sys
-* Added a $rakefile constant
-* Added test for selecting proper rule with multiple targets.
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/MIT-LICENSE b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/MIT-LICENSE
deleted file mode 100644
index 7273475..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/MIT-LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright (c) 2003, 2004 Jim Weirich
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/README b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/README
deleted file mode 100644
index a04fa7e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/README
+++ /dev/null
@@ -1,285 +0,0 @@
-= RAKE -- Ruby Make 
-
-Supporting Rake version: 0.8.2
-
-This package contains Rake, a simple ruby build program with
-capabilities similar to make.
-
-Rake has the following features:
-
-* Rakefiles (rake's version of Makefiles) are completely defined in
-  standard Ruby syntax.  No XML files to edit.  No quirky Makefile
-  syntax to worry about (is that a tab or a space?)
-
-* Users can specify tasks with prerequisites.
-
-* Rake supports rule patterns to synthesize implicit tasks.
-
-*  Flexible FileLists that act like arrays but know about manipulating
-   file names and paths.
-
-* A library of prepackaged tasks to make building rakefiles easier.
-
-== Download
-
-The latest version of rake can be found at
-
-* http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Source Repository
-
-Rake is currently hosted at github. The github web page is
-http://github.com/jimweirich/rake. The public git clone URL is
-
-* git://github.com/jimweirich/rake.git
-
-== Installation
-
-=== Normal Installation
-
-You can install rake with the following command.
-
-  % ruby install.rb
-
-from its distribution directory.
-
-=== GEM Installation
-
-Download and install  rake with the following.
-
-   gem install --remote rake
-
-=== Running the Rake Test Suite
-
-If you wish to run the unit and functional tests that come with Rake:
-
-* Install the 'session' gem in order to run the functional tests. adf
-  asdf asdf
-* CD into the top project directory of rake.
-* Type one of the following:
-
-     rake                  # If you have a version of rake installed
-     ruby -Ilib bin/rake   # If you do not have a version of rake installed.
-
-== Online Resources
-
-== Rake References
-
-* Rake Documentation Home: http://docs.rubyrake.org
-* Rake Project Page: http://rubyforge.org/projects/rake
-* Rake API Documents: http://rake.rubyforge.org
-* Rake Source Code Repo:  http://github.com/jimweirich/rake
-* Rake Git Repo Clone URL: git://github.com/jimweirich/rake.git
-
-== Presentations and Articles about Rake
-
-* Jim Weirich's 2003 RubyConf presentation: http://onestepback.org/articles/buildingwithrake/
-* Martin Fowler's article on Rake: http://martinfowler.com/articles/rake.html
-
-=== Road Map
-
-* If you want to see how to invoke rake to build your projects, read on.
-* If you want to see the format of a Rakefile, see
-  doc/rakefile.rdoc[http://rake.rubyforge.org/files/doc/rakefile_rdoc.html].
-* If you want to see the original announcement of rake, see
-  doc/rational.rdoc[http://rake.rubyforge.org/files/doc/rational_rdoc.html].
-* If you want to see a glossary of terms, see
-  doc/glossary.rdoc[http://rake.rubyforge.org/files/doc/glossary_rdoc.html].
-
-== Simple Example
-
-Once installed, you can run rake as follows ...
-
-  % rake [options ...]  [VAR=VALUE ...]  [tasks...]
-
-Type "rake --help" for an up-to-date option summary.
-
-Invoking <tt>rake</tt> without any options or targets causes rake to
-look for a rakefile and invoke the default task in that rakefile.
-
-For example, given a simple rakefile like this ...
-
-  task :default => [:test]
-
-  task :test do
-    ruby "test/unittest.rb"
-  end
-
-The command 
-
-  $ rake
-
-will invoke the +default+ task.  As +default+ satisfies its
-prerequisites, the +test+ task will run the unit tests for the
-package.
-
-== Other Make Reinvisionings ...
-
-Rake is a late entry in the make replacement field.  Here are links to
-other projects with similar (and not so similar) goals.
-
-* http://directory.fsf.org/bras.html -- Bras, one of earliest
-  implementations of "make in a scripting language".
-* http://www.a-a-p.org -- Make in Python
-* http://www.aromatic.com/tools/jam.txt -- JAM, Java Automated Make
-* http://ant.apache.org -- The Ant project
-* http://ppt.perl.org/commands/make/index.html -- Make from the Perl
-  Power Tools implementation.
-* http://search.cpan.org/search?query=PerlBuildSystem -- The Perl Build System
-* http://make.rubyforge.org -- Rant, another Ruby make tool.
-
-== Credits
-
-[<b>Ryan Dlugosz</b>] For the initial conversation that sparked Rake.
-
-[<b>nobu.nokada at softhome.net</b>] For the initial patch for rule support.
-
-[<b>Tilman Sauerbeck <tilman at code-monkey.de></b>] For the recursive rule patch.
-
-== License
-
-Rake is available under an MIT-style license.
-
-:include: MIT-LICENSE
-
-== Support
-
-The Rake homepage is http://rake.rubyforge.org.  You can find the Rake
-RubyForge page at http://rubyforge.org/projects/rake.
-
-Feel free to submit commits or feature requests.  If you send a patch,
-remember to update the corresponding unit tests.  If fact, I prefer
-new feature to be submitted in the form of new unit tests.
-
-For other information, feel free to ask on the ruby-talk mailing list
-(which is mirrored to comp.lang.ruby) or contact
-mailto:jim at weirichhouse.org.
-
-----
-
-= Usage
-
-Rake is invoked from the command line using:
-
-   % rake [<em>options</em> ...]  [<em>VAR</em>=<em>VALUE</em>]  [<em>targets</em> ...]
-
-Options are:
-
-[<tt><em>name</em>=<em>value</em></tt>]
-    Set the environment variable <em>name</em> to <em>value</em>
-    during the execution of the <b>rake</b> command.  You can access
-    the value by using ENV['<em>name</em>'].  
-
-[<tt>--classic-namespace</tt> (-n)]
-    Import the Task, FileTask, and FileCreateTask into the top-level
-    scope to be compatible with older versions of Rake.  Alternatively
-    you can include the line <code>require
-    'rake/classic_namespace'</code> in your Rakefile to get the
-    classic behavior.
-
-[<tt>--describe</tt> _pattern_ (-D)]
-    Describe the tasks (matching optional PATTERN), then exit.
-
-[<tt>--dry-run</tt> (-n)]
-    Do a dry run.  Print the tasks invoked and executed, but do not
-    actually execute any of the actions.
-
-[<tt>--execute</tt> _code_ (-e)]
-    Execute some Ruby code and exit.
-
-[<tt>--execute-print</tt> _code_ (-p)]
-    Execute some Ruby code, print the result, and exit.
-
-[<tt>--execute-continue</tt> _code_ (-p)]
-    Execute some Ruby code, then continue with normal task processing.
-
-[<tt>--help</tt>  (-H)]
-    Display some help text and exit.
-
-[<tt>--libdir</tt> _directory_  (-I)]
-    Add _directory_ to the list of directories searched for require.
-
-[<tt>--nosearch</tt>  (-N)]
-    Do not search for a Rakefile in parent directories.
-
-[<tt>--prereqs</tt>  (-P)]
-    Display a list of all tasks and their immediate prerequisites.
-
-[<tt>--quiet</tt> (-q)]
-    Do not echo commands from FileUtils.
-
-[<tt>--rakefile</tt> _filename_ (-f)]
-    Use _filename_ as the name of the rakefile. The default rakefile
-    names are +rakefile+ and +Rakefile+ (with +rakefile+ taking
-    precedence). If the rakefile is not found in the current
-    directory, +rake+ will search parent directories for a match. The
-    directory where the Rakefile is found will become the current
-    directory for the actions executed in the Rakefile.
-
-[<tt>--rakelibdir</tt> _rakelibdir_ (-R)]
-    Auto-import any .rake files in RAKELIBDIR. (default is 'rakelib')
-
-[<tt>--require</tt> _name_ (-r)]
-    Require _name_ before executing the Rakefile.
-
-[<tt>--rules</tt>]
-    Trace the rules resolution.
-
-[<tt>--silent (-s)]
-    Like --quiet, but also suppresses the 'in directory' announcement.
-
-[<tt>--system</tt> (-g)]
-    Use the system wide (global) rakefiles. The project Rakefile is
-    ignored. By default, the system wide rakefiles are used only if no
-    project Rakefile is found. On Unix-like system, the system wide
-    rake files are located in $HOME/.rake. On a windows system they
-    are stored in $APPDATA/Rake.
-
-[<tt>--no-system</tt> (-G)]
-    Use the project level Rakefile, ignoring the system-wide (global)
-    rakefiles.
-
-[<tt>--tasks</tt> (-T)]
-    Display a list of the major tasks and their comments.  Comments
-    are defined using the "desc" command.
-
-[<tt>--trace</tt> (-t)]
-    Turn on invoke/execute tracing. Also enable full backtrace on
-    errors.
-
-[<tt>--usage</tt> (-h)]
-    Display a usage message and exit.
-
-[<tt>--verbose</tt> (-v)]
-    Echo the Sys commands to standard output.
-
-[<tt>--version</tt> (-V)]
-    Display the program version and exit.
-
-In addition, any command line option of the form
-<em>VAR</em>=<em>VALUE</em> will be added to the environment hash
-<tt>ENV</tt> and may be tested in the Rakefile.
-
----
-
-= Rakefile Format
-
-See doc/rakefile.rdoc[http://rake.rubyforge.org/files/doc/rakefile_rdoc.html]
-for details on the Rakefile format.
-
----
-
-= Other stuff
-
-Author::   Jim Weirich <jim at weirichhouse.org>
-Requires:: Ruby 1.8.0 or later
-License::  Copyright 2003, 2004 by Jim Weirich.
-           Released under an MIT-style license.  See the LICENSE file
-           included in the distribution.
-
-== Warranty
-
-This software is provided "as is" and without any express or
-implied warranties, including, without limitation, the implied
-warranties of merchantibility and fitness for a particular
-purpose.
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/Rakefile
deleted file mode 100644
index 2e26efb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/Rakefile
+++ /dev/null
@@ -1,418 +0,0 @@
-# Rakefile for rake        -*- ruby -*-
-
-# Copyright 2003, 2004, 2005 by Jim Weirich (jim at weirichhouse.org)
-# All rights reserved.
-
-# This file may be distributed under an MIT style license.  See
-# MIT-LICENSE for details.
-
-begin
-  require 'rubygems'
-  require 'rake/gempackagetask'
-rescue Exception
-  nil
-end
-require 'rake/clean'
-require 'rake/testtask'
-require 'rake/rdoctask'
-
-CLEAN.include('**/*.o', '*.dot', '**/.*.rbc')
-CLOBBER.include('doc/example/main', 'testdata')
-CLOBBER.include('test/data/**/temp_*')
-CLOBBER.include('test/data/chains/play.*')
-CLOBBER.include('test/data/file_creation_task/build')
-CLOBBER.include('test/data/file_creation_task/src')
-CLOBBER.include('TAGS')
-CLOBBER.include('coverage', 'rcov_aggregate')
-
-# Prevent OS X from including extended attribute junk in the tar output
-ENV['COPY_EXTENDED_ATTRIBUTES_DISABLE'] = 'true'
-
-def announce(msg='')
-  STDERR.puts msg
-end
-
-# Determine the current version of the software
-
-if `ruby -Ilib ./bin/rake --version` =~ /rake, version ([0-9.]+)$/
-  CURRENT_VERSION = $1
-else
-  CURRENT_VERSION = "0.0.0"
-end
-
-$package_version = CURRENT_VERSION
-
-SRC_RB = FileList['lib/**/*.rb']
-
-# The default task is run if rake is given no explicit arguments.
-
-desc "Default Task"
-task :default => :test_all
-
-# Test Tasks ---------------------------------------------------------
-task :dbg do |t|
-  puts "Arguments are: #{t.args.join(', ')}"
-end
-
-# Common Abbreviations ...
-
-task :ta => :test_all
-task :tf => :test_functional
-task :tu => :test_units
-task :tc => :test_contribs
-task :test => :test_units
-
-Rake::TestTask.new(:test_all) do |t|
-  t.test_files = FileList[
-    'test/test*.rb',
-    'test/contrib/test*.rb',
-    'test/fun*.rb'
-  ]
-  t.warning = true
-  t.verbose = false
-end
-
-Rake::TestTask.new(:test_units) do |t|
-  t.test_files = FileList['test/test*.rb']
-  t.warning = true
-  t.verbose = false
-end
-
-Rake::TestTask.new(:test_functional) do |t|
-  t.test_files = FileList['test/fun*.rb']
-  t.warning = true
-  t.verbose = false
-end
-
-Rake::TestTask.new(:test_contribs) do |t|
-  t.test_files = FileList['test/contrib/test*.rb']
-  t.warning = true
-  t.verbose = false
-end
-
-begin
-  require 'rcov/rcovtask'
-
-  Rcov::RcovTask.new do |t|
-    t.libs << "test"
-    dot_rakes = 
-    t.rcov_opts = [
-      '-xRakefile', '-xrakefile', '-xpublish.rf',
-      '-xlib/rake/contrib', '-x/Library', 
-      '--text-report',
-      '--sort coverage'
-    ] + FileList['rakelib/*.rake'].pathmap("-x%p")
-    t.test_files = FileList[
-      'test/test*.rb', 'test/functional.rb'
-    ]
-    t.output_dir = 'coverage'
-    t.verbose = true
-  end
-rescue LoadError
-  puts "RCov is not available"
-end
-
-directory 'testdata'
-[:test_all, :test_units, :test_contribs, :test_functional].each do |t|
-  task t => ['testdata']
-end
-
-# CVS Tasks ----------------------------------------------------------
-
-# Install rake using the standard install.rb script.
-
-desc "Install the application"
-task :install do
-  ruby "install.rb"
-end
-
-# Create a task to build the RDOC documentation tree.
-
-rd = Rake::RDocTask.new("rdoc") { |rdoc|
-  rdoc.rdoc_dir = 'html'
-#  rdoc.template = 'kilmer'
-#  rdoc.template = 'css2'
-  rdoc.template = 'doc/jamis.rb'
-  rdoc.title    = "Rake -- Ruby Make"
-  rdoc.options << '--line-numbers' << '--inline-source' <<
-    '--main' << 'README' <<
-    '--title' <<  'Rake -- Ruby Make' 
-  rdoc.rdoc_files.include('README', 'MIT-LICENSE', 'TODO', 'CHANGES')
-  rdoc.rdoc_files.include('lib/**/*.rb', 'doc/**/*.rdoc')
-  rdoc.rdoc_files.exclude(/\bcontrib\b/)
-}
-
-# ====================================================================
-# Create a task that will package the Rake software into distributable
-# tar, zip and gem files.
-
-PKG_FILES = FileList[
-  'install.rb',
-  '[A-Z]*',
-  'bin/**/*', 
-  'lib/**/*.rb', 
-  'test/**/*.rb',
-  'test/**/*.rf',
-  'test/**/*.mf',
-  'test/**/Rakefile',
-  'test/**/subdir',
-  'doc/**/*'
-]
-PKG_FILES.exclude('doc/example/*.o')
-PKG_FILES.exclude(%r{doc/example/main$})
-
-if ! defined?(Gem)
-  puts "Package Target requires RubyGEMs"
-else
-  SPEC = Gem::Specification.new do |s|
-    
-    #### Basic information.
-
-    s.name = 'rake'
-    s.version = $package_version
-    s.summary = "Ruby based make-like utility."
-    s.description = <<-EOF
-      Rake is a Make-like program implemented in Ruby. Tasks
-      and dependencies are specified in standard Ruby syntax. 
-    EOF
-
-    #### Dependencies and requirements.
-
-    #s.add_dependency('log4r', '> 1.0.4')
-    #s.requirements << ""
-
-    #### Which files are to be included in this gem?  Everything!  (Except CVS directories.)
-
-    s.files = PKG_FILES.to_a
-
-    #### C code extensions.
-
-    #s.extensions << "ext/rmagic/extconf.rb"
-
-    #### Load-time details: library and application (you will need one or both).
-
-    s.require_path = 'lib'                         # Use these for libraries.
-
-    s.bindir = "bin"                               # Use these for applications.
-    s.executables = ["rake"]
-    s.default_executable = "rake"
-
-    #### Documentation and testing.
-
-    s.has_rdoc = true
-    s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
-    s.rdoc_options = rd.options
-
-    #### Author and project details.
-
-    s.author = "Jim Weirich"
-    s.email = "jim at weirichhouse.org"
-    s.homepage = "http://rake.rubyforge.org"
-    s.rubyforge_project = "rake"
-#     if ENV['CERT_DIR']
-#       s.signing_key = File.join(ENV['CERT_DIR'], 'gem-private_key.pem')
-#       s.cert_chain  = [File.join(ENV['CERT_DIR'], 'gem-public_cert.pem')]
-#     end
-  end
-
-  package_task = Rake::GemPackageTask.new(SPEC) do |pkg|
-    pkg.need_zip = true
-    pkg.need_tar = true
-  end
-
-  file "rake.gemspec" => ["Rakefile", "lib/rake.rb"] do |t|
-    require 'yaml'
-    open(t.name, "w") { |f| f.puts SPEC.to_yaml }
-  end
-
-  desc "Create a stand-alone gemspec"
-  task :gemspec => "rake.gemspec"
-end
-
-# Misc tasks =========================================================
-
-def count_lines(filename)
-  lines = 0
-  codelines = 0
-  open(filename) { |f|
-    f.each do |line|
-      lines += 1
-      next if line =~ /^\s*$/
-      next if line =~ /^\s*#/
-      codelines += 1
-    end
-  }
-  [lines, codelines]
-end
-
-def show_line(msg, lines, loc)
-  printf "%6s %6s   %s\n", lines.to_s, loc.to_s, msg
-end
-
-desc "Count lines in the main rake file"
-task :lines do
-  total_lines = 0
-  total_code = 0
-  show_line("File Name", "LINES", "LOC")
-  SRC_RB.each do |fn|
-    lines, codelines = count_lines(fn)
-    show_line(fn, lines, codelines)
-    total_lines += lines
-    total_code  += codelines
-  end
-  show_line("TOTAL", total_lines, total_code)
-end
-
-# Define an optional publish target in an external file.  If the
-# publish.rf file is not found, the publish targets won't be defined.
-
-load "publish.rf" if File.exist? "publish.rf"
-
-# Support Tasks ------------------------------------------------------
-
-RUBY_FILES = FileList['**/*.rb'].exclude('pkg')
-
-desc "Look for TODO and FIXME tags in the code"
-task :todo do
-  RUBY_FILES.egrep(/#.*(FIXME|TODO|TBD)/)
-end
-
-desc "Look for Debugging print lines"
-task :dbg do
-  RUBY_FILES.egrep(/\bDBG|\bbreakpoint\b/)
-end
-
-desc "List all ruby files"
-task :rubyfiles do 
-  puts RUBY_FILES
-  puts FileList['bin/*'].exclude('bin/*.rb')
-end
-task :rf => :rubyfiles
-
-desc "Create a TAGS file"
-task :tags => "TAGS"
-
-TAGS = 'xctags -e'
-
-file "TAGS" => RUBY_FILES do
-  puts "Makings TAGS"
-  sh "#{TAGS} #{RUBY_FILES}", :verbose => false
-end
-
-# --------------------------------------------------------------------
-# Creating a release
-
-def plugin(plugin_name)
-  require "rake/plugins/#{plugin_name}"
-end
-
-task :noop
-#plugin "release_manager"
-
-desc "Make a new release"
-task :release, :rel, :reuse, :reltest,
-  :needs => [
-    :prerelease,
-    :clobber,
-    :test_all,
-    :update_version,
-    :package,
-    :tag
-  ] do
-  announce 
-  announce "**************************************************************"
-  announce "* Release #{$package_version} Complete."
-  announce "* Packages ready to upload."
-  announce "**************************************************************"
-  announce 
-end
-
-# Validate that everything is ready to go for a release.
-task :prerelease, :rel, :reuse, :reltest do |t, args|
-  $package_version = args.rel
-  announce 
-  announce "**************************************************************"
-  announce "* Making RubyGem Release #{$package_version}"
-  announce "* (current version #{CURRENT_VERSION})"
-  announce "**************************************************************"
-  announce  
-
-  # Is a release number supplied?
-  unless args.rel
-    fail "Usage: rake release[X.Y.Z] [REUSE=tag_suffix]"
-  end
-
-  # Is the release different than the current release.
-  # (or is REUSE set?)
-  if $package_version == CURRENT_VERSION && ! args.reuse
-    fail "Current version is #{$package_version}, must specify REUSE=tag_suffix to reuse version"
-  end
-
-  # Are all source files checked in?
-  if args.reltest
-    announce "Release Task Testing, skipping checked-in file test"
-  else
-    announce "Checking for unchecked-in files..."
-    data = `svn st`
-    unless data =~ /^$/
-      abort "svn status is not clean ... do you have unchecked-in files?"
-    end
-    announce "No outstanding checkins found ... OK"
-  end
-end
-
-task :update_version, :rel, :reuse, :reltest,
-  :needs => [:prerelease] do |t, args|
-  if args.rel == CURRENT_VERSION
-    announce "No version change ... skipping version update"
-  else
-    announce "Updating Rake version to #{args.rel}"
-    open("lib/rake.rb") do |rakein|
-      open("lib/rake.rb.new", "w") do |rakeout|
-	rakein.each do |line|
-	  if line =~ /^RAKEVERSION\s*=\s*/
-	    rakeout.puts "RAKEVERSION = '#{args.rel}'"
-	  else
-	    rakeout.puts line
-	  end
-	end
-      end
-    end
-    mv "lib/rake.rb.new", "lib/rake.rb"
-    if args.reltest
-      announce "Release Task Testing, skipping commiting of new version"
-    else
-      sh %{svn commit -m "Updated to version #{args.rel}" lib/rake.rb} # "
-    end
-  end
-end
-
-desc "Tag all the CVS files with the latest release number (REL=x.y.z)"
-task :tag, :rel, :reuse, :reltest,
-  :needs => [:prerelease] do |t, args|
-  reltag = "REL_#{args.rel.gsub(/\./, '_')}"
-  reltag << args.reuse.gsub(/\./, '_') if args.reuse
-  announce "Tagging Repository with [#{reltag}]"
-  if args.reltest
-    announce "Release Task Testing, skipping CVS tagging"
-  else
-    sh %{svn copy svn+ssh://rubyforge.org/var/svn/rake/trunk svn+ssh://rubyforge.org/var/svn/rake/tags/#{reltag} -m 'Commiting release #{reltag}'} ###'
-  end
-end
-
-desc "Install the jamis RDoc template"
-task :install_jamis_template do
-  require 'rbconfig'
-  dest_dir = File.join(Config::CONFIG['rubylibdir'], "rdoc/generators/template/html")
-  fail "Unabled to write to #{dest_dir}" unless File.writable?(dest_dir)
-  install "doc/jamis.rb", dest_dir, :verbose => true
-end
-
-# Require experimental XForge/Metaproject support.
-
-load 'xforge.rf' if File.exist?('xforge.rf')
-
-desc "Where is the current directory.  This task displays\nthe current rake directory"
-task :where_am_i do
-  puts Rake.original_dir
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/TODO b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/TODO
deleted file mode 100644
index bd8a969..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/TODO
+++ /dev/null
@@ -1,20 +0,0 @@
-= Rake Project -- To Do List
-
-Send suggestions for this list to mailto:jim at weirichhouse.org or on
-the rake-devel at rubyforge.org mailing list.
-
-=== To Do
-* Need a nice API for accessing tasks in namespaces, namespaces in an app, etc.
-* Provide a way to disable -w warning mode.
-* Define a set of default rules that work in the absense of any Rakefile
-* What about cyclic dependencies?
-* Java support utilities
-* Installation support utilities
-  * Check out installpkg.rb
-* Autogenerate Dependencies
-* Rules should apply to existing tasks if no actions are defined.
-* How to create multiple package tasks without task name collision?
-* Trap "ln -s" commands that fail and use "cp" instead (SMB mounted
-  drives have problems with "ln -s".
-
-(moved DONE list to CHANGES file)
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/bin/rake b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/bin/rake
deleted file mode 100755
index c9e95da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/bin/rake
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env ruby
-
-#--
-# Copyright (c) 2003, 2004, 2005, 2006, 2007  Jim Weirich
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#++
-
-begin
-  require 'rake'
-rescue LoadError
-  require 'rubygems'
-  require 'rake'
-end
-Rake.application.run
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/Rakefile1 b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/Rakefile1
deleted file mode 100644
index 39f8bcc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/Rakefile1
+++ /dev/null
@@ -1,38 +0,0 @@
-# Example Rakefile -*- ruby -*-
-
-task :default => [:main]
-
-file "a.o" => ["a.c"] do |t|
-  src = t.name.sub(/\.o$/, '.c')
-  sh "gcc #{src} -c -o #{t.name}"
-end
-
-file "b.o" => ["b.c"] do |t|
-  src = t.name.sub(/\.o$/, '.c')
-  sh "gcc #{src} -c -o #{t.name}"
-end
-
-file "main.o" => ["main.c"] do |t|
-  src = t.name.sub(/\.o$/, '.c')
-  sh "gcc #{src} -c -o #{t.name}"
-end
-
-OBJFILES = ["a.o", "b.o", "main.o"]
-task :obj => OBJFILES
-
-file "main" => OBJFILES do |t|
-  sh "gcc -o #{t.name} main.o a.o b.o"
-end
-
-task :clean do
-  rm_f FileList['*.o']
-  Dir['*~'].each { |fn| rm_f fn }
-end
-
-task :clobber => [:clean] do
-  rm_f "main"
-end
-
-task :run => ["main"] do
-  sh "./main"
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/Rakefile2 b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/Rakefile2
deleted file mode 100644
index 35310ec..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/Rakefile2
+++ /dev/null
@@ -1,35 +0,0 @@
-# Example Rakefile -*- ruby -*-
-# Using the power of Ruby
-
-task :default => [:main]
-
-def ext(fn, newext)
-  fn.sub(/\.[^.]+$/, newext)
-end
-
-SRCFILES = Dir['*.c']
-OBJFILES = SRCFILES.collect { |fn| ext(fn,".o") }
-
-OBJFILES.each do |objfile|
-  srcfile = ext(objfile, ".c")
-  file objfile => [srcfile] do |t|
-    sh "gcc #{srcfile} -c -o #{t.name}"
-  end
-end
-
-file "main" => OBJFILES do |t|
-  sh "gcc -o #{t.name} main.o a.o b.o"
-end
-
-task :clean do
-  rm_f FileList['*.o']
-  Dir['*~'].each { |fn| rm_f fn }
-end
-
-task :clobber => [:clean] do
-  rm_f "main"
-end
-
-task :run => ["main"] do
-  sh "./main"
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/a.c b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/a.c
deleted file mode 100644
index 620e6f8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/a.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void a()
-{
-    printf ("In function a\n");
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/b.c b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/b.c
deleted file mode 100644
index 9b24aa1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/b.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-void b()
-{
-    printf ("In function b\n");
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/main.c b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/main.c
deleted file mode 100644
index a04558a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/example/main.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <stdio.h>
-
-extern void a();
-extern void b();
-
-int main ()
-{
-    a();
-    b();
-    return 0;
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/glossary.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/glossary.rdoc
deleted file mode 100644
index 0ca1869..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/glossary.rdoc
+++ /dev/null
@@ -1,51 +0,0 @@
-= Glossary
-
-[<b>action</b>]
-	Code to be executed in order to perform a task.  Actions in a
-	rakefile are specified in a code block (usually delimited by
-	+do+/+end+ pairs.
-
-[<b>execute</b>]
-	When a task is executed, all of its actions are performed, in
-	the order they were defined.  Note that unlike
-	<tt>invoke</tt>, <tt>execute</tt> always executes the actions
-	(without invoking or executing the prerequisites).
-
-[<b>file task</b> (FileTask)]
-	 A file task is a task whose purpose is to create a file
-	 (which has the same name as the task).  When invoked, a file
-	 task will only execute if one or more of the following
-	 conditions are true.
-
-         1. The associated file does not exist.
-	 2. A prerequisite has a later time stamp than the existing file.
-
-	 Because normal Tasks always have the current time as
-	 timestamp, a FileTask that has a normal Task prerequisite
-	 will always execute.
-
-[<b>invoke</b>]
-	When a task is invoked, first we check to see if it has been
-	invoked before.  if it has been, then nothing else is done.
-	If this is the first time its been invoked, then we invoke
-	each of its prerequisites.  Finally, we check to see if we
-	need to execute the actions of this task by calling
-	<tt>needed?</tt>.  Finally, if the task is needed, we execute
-	its actions.
-
-	NOTE: Currently prerequisites are invoked even if the task is
-	not needed.  This may change in the future.
-
-[<b>prerequisites</b>]
-	Every task has a set (possiblity empty) of prerequisites.  A
-	prerequisite P to Task T is itself a task that must be invoked
-	before Task T.  
-
-[<b>rule</b>]
-	A rule is a recipe for synthesizing a task when no task is
-	explicitly defined.  Rules generally synthesize file tasks.
-
-[<b>task</b> (Task)]
-	Basic unit of work in a rakefile.  A task has a name, a set of
-	prerequisites and a list of actions to be performed.
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/jamis.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/jamis.rb
deleted file mode 100644
index c7439d8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/jamis.rb
+++ /dev/null
@@ -1,591 +0,0 @@
-module RDoc
-module Page
-
-FONTS = "\"Bitstream Vera Sans\", Verdana, Arial, Helvetica, sans-serif"
-
-STYLE = <<CSS
-a {
-  color: #00F;
-  text-decoration: none;
-}
-
-a:hover {
-  color: #77F;
-  text-decoration: underline;
-}
-
-body, td, p {
-  font-family: %fonts%;
-  background: #FFF;
-  color: #000;
-  margin: 0px;
-  font-size: small;
-}
-
-#content {
-  margin: 2em;
-}
-
-#description p {
-  margin-bottom: 0.5em;
-}
-
-.sectiontitle {
-  margin-top: 1em;
-  margin-bottom: 1em;
-  padding: 0.5em;
-  padding-left: 2em;
-  background: #005;
-  color: #FFF;
-  font-weight: bold;
-  border: 1px dotted black;
-}
-
-.attr-rw {
-  padding-left: 1em;
-  padding-right: 1em;
-  text-align: center;
-  color: #055;
-}
-
-.attr-name {
-  font-weight: bold;
-}
-
-.attr-desc {
-}
-
-.attr-value {
-  font-family: monospace;
-}
-
-.file-title-prefix {
-  font-size: large;
-}
-
-.file-title {
-  font-size: large;
-  font-weight: bold;
-  background: #005;
-  color: #FFF;
-}
-
-.banner {
-  background: #005;
-  color: #FFF;
-  border: 1px solid black;
-  padding: 1em;
-}
-
-.banner td {
-  background: transparent;
-  color: #FFF;
-}
-
-h1 a, h2 a, .sectiontitle a, .banner a {
-  color: #FF0;
-}
-
-h1 a:hover, h2 a:hover, .sectiontitle a:hover, .banner a:hover {
-  color: #FF7;
-}
-
-.dyn-source {
-  display: none;
-  background: #FFE;
-  color: #000;
-  border: 1px dotted black;
-  margin: 0.5em 2em 0.5em 2em;
-  padding: 0.5em;
-}
-
-.dyn-source .cmt {
-  color: #00F;
-  font-style: italic;
-}
-
-.dyn-source .kw {
-  color: #070;
-  font-weight: bold;
-}
-
-.method {
-  margin-left: 1em;
-  margin-right: 1em;
-  margin-bottom: 1em;
-}
-
-.description pre {
-  padding: 0.5em;
-  border: 1px dotted black;
-  background: #FFE;
-}
-
-.method .title {
-  font-family: monospace;
-  font-size: large;
-  border-bottom: 1px dashed black;
-  margin-bottom: 0.3em;
-  padding-bottom: 0.1em;
-}
-
-.method .description, .method .sourcecode {
-  margin-left: 1em;
-}
-
-.description p, .sourcecode p {
-  margin-bottom: 0.5em;
-}
-
-.method .sourcecode p.source-link {
-  text-indent: 0em;
-  margin-top: 0.5em;
-}
-
-.method .aka {
-  margin-top: 0.3em;
-  margin-left: 1em;
-  font-style: italic;
-  text-indent: 2em;
-}
-
-h1 {
-  padding: 1em;
-  border: 1px solid black;
-  font-size: x-large;
-  font-weight: bold;
-  color: #FFF;
-  background: #007;
-}
-
-h2 {
-  padding: 0.5em 1em 0.5em 1em;
-  border: 1px solid black;
-  font-size: large;
-  font-weight: bold;
-  color: #FFF;
-  background: #009;
-}
-
-h3, h4, h5, h6 {
-  padding: 0.2em 1em 0.2em 1em;
-  border: 1px dashed black;
-  color: #000;
-  background: #AAF;
-}
-
-.sourcecode > pre {
-  padding: 0.5em;
-  border: 1px dotted black;
-  background: #FFE;
-}
-
-CSS
-
-XHTML_PREAMBLE = %{<?xml version="1.0" encoding="%charset%"?>
-<!DOCTYPE html 
-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-}
-
-HEADER = XHTML_PREAMBLE + <<ENDHEADER
-<html>
-  <head>
-    <title>%title%</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
-    <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
-
-    <script language="JavaScript" type="text/javascript">
-    // <![CDATA[
-
-        function toggleSource( id )
-        {
-          var elem
-          var link
-
-          if( document.getElementById )
-          {
-            elem = document.getElementById( id )
-            link = document.getElementById( "l_" + id )
-          }
-          else if ( document.all )
-          {
-            elem = eval( "document.all." + id )
-            link = eval( "document.all.l_" + id )
-          }
-          else
-            return false;
-
-          if( elem.style.display == "block" )
-          {
-            elem.style.display = "none"
-            link.innerHTML = "show source"
-          }
-          else
-          {
-            elem.style.display = "block"
-            link.innerHTML = "hide source"
-          }
-        }
-
-        function openCode( url )
-        {
-          window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
-        }
-      // ]]>
-    </script>
-  </head>
-
-  <body>
-ENDHEADER
-
-FILE_PAGE = <<HTML
-<table border='0' cellpadding='0' cellspacing='0' width="100%" class='banner'>
-  <tr><td>
-    <table width="100%" border='0' cellpadding='0' cellspacing='0'><tr>
-      <td class="file-title" colspan="2"><span class="file-title-prefix">File</span><br />%short_name%</td>
-      <td align="right">
-        <table border='0' cellspacing="0" cellpadding="2">
-          <tr>
-            <td>Path:</td>
-            <td>%full_path%
-IF:cvsurl
-               (<a href="%cvsurl%">CVS</a>)
-ENDIF:cvsurl
-            </td>
-          </tr>
-          <tr>
-            <td>Modified:</td>
-            <td>%dtm_modified%</td>
-          </tr>
-        </table>
-      </td></tr>
-    </table>
-  </td></tr>
-</table><br>
-HTML
-
-###################################################################
-
-CLASS_PAGE = <<HTML
-<table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
-  <td class="file-title"><span class="file-title-prefix">%classmod%</span><br />%full_name%</td>
-  <td align="right">
-    <table cellspacing=0 cellpadding=2>
-      <tr valign="top">
-        <td>In:</td>
-        <td>
-START:infiles
-HREF:full_path_url:full_path:
-IF:cvsurl
- (<a href="%cvsurl%">CVS</a>)
-ENDIF:cvsurl
-END:infiles
-        </td>
-      </tr>
-IF:parent
-    <tr>
-      <td>Parent:</td>
-      <td>
-IF:par_url
-        <a href="%par_url%">
-ENDIF:par_url
-%parent%
-IF:par_url
-         </a>
-ENDIF:par_url
-     </td>
-   </tr>
-ENDIF:parent
-         </table>
-        </td>
-        </tr>
-      </table>
-HTML
-
-###################################################################
-
-METHOD_LIST = <<HTML
-  <div id="content">
-IF:diagram
-  <table cellpadding='0' cellspacing='0' border='0' width="100%"><tr><td align="center">
-    %diagram%
-  </td></tr></table>
-ENDIF:diagram
-
-IF:description
-  <div class="description">%description%</div>
-ENDIF:description
-
-IF:requires
-  <div class="sectiontitle">Required Files</div>
-  <ul>
-START:requires
-  <li>HREF:aref:name:</li>
-END:requires
-  </ul>
-ENDIF:requires
-
-IF:toc
-  <div class="sectiontitle">Contents</div>
-  <ul>
-START:toc
-  <li><a href="#%href%">%secname%</a></li>
-END:toc
-  </ul>
-ENDIF:toc
-
-IF:methods
-  <div class="sectiontitle">Methods</div>
-  <ul>
-START:methods
-  <li>HREF:aref:name:</li>
-END:methods
-  </ul>
-ENDIF:methods
-
-IF:includes
-<div class="sectiontitle">Included Modules</div>
-<ul>
-START:includes
-  <li>HREF:aref:name:</li>
-END:includes
-</ul>
-ENDIF:includes
-
-START:sections
-IF:sectitle
-<div class="sectiontitle"><a nem="%secsequence%">%sectitle%</a></div>
-IF:seccomment
-<div class="description">
-%seccomment%
-</div>
-ENDIF:seccomment
-ENDIF:sectitle
-
-IF:classlist
-  <div class="sectiontitle">Classes and Modules</div>
-  %classlist%
-ENDIF:classlist
-
-IF:constants
-  <div class="sectiontitle">Constants</div>
-  <table border='0' cellpadding='5'>
-START:constants
-  <tr valign='top'>
-    <td class="attr-name">%name%</td>
-    <td>=</td>
-    <td class="attr-value">%value%</td>
-  </tr>
-IF:desc
-  <tr valign='top'>
-    <td> </td>
-    <td colspan="2" class="attr-desc">%desc%</td>
-  </tr>
-ENDIF:desc
-END:constants
-  </table>
-ENDIF:constants
-
-IF:attributes
-  <div class="sectiontitle">Attributes</div>
-  <table border='0' cellpadding='5'>
-START:attributes
-  <tr valign='top'>
-    <td class='attr-rw'>
-IF:rw
-[%rw%]
-ENDIF:rw
-    </td>
-    <td class='attr-name'>%name%</td>
-    <td class='attr-desc'>%a_desc%</td>
-  </tr>
-END:attributes
-  </table>
-ENDIF:attributes
-
-IF:method_list
-START:method_list
-IF:methods
-<div class="sectiontitle">%type% %category% methods</div>
-START:methods
-<div class="method">
-  <div class="title">
-IF:callseq
-    <a name="%aref%"></a><b>%callseq%</b>
-ENDIF:callseq
-IFNOT:callseq
-    <a name="%aref%"></a><b>%name%</b>%params%
-ENDIF:callseq
-IF:codeurl
-[ <a href="javascript:openCode('%codeurl%')">source</a> ]
-ENDIF:codeurl
-  </div>
-IF:m_desc
-  <div class="description">
-  %m_desc%
-  </div>
-ENDIF:m_desc
-IF:aka
-<div class="aka">
-  This method is also aliased as
-START:aka
-  <a href="%aref%">%name%</a>
-END:aka
-</div>
-ENDIF:aka
-IF:sourcecode
-<div class="sourcecode">
-  <p class="source-link">[ <a href="javascript:toggleSource('%aref%_source')" id="l_%aref%_source">show source</a> ]</p>
-  <div id="%aref%_source" class="dyn-source">
-<pre>
-%sourcecode%
-</pre>
-  </div>
-</div>
-ENDIF:sourcecode
-</div>
-END:methods
-ENDIF:methods
-END:method_list
-ENDIF:method_list
-END:sections
-</div>
-HTML
-
-FOOTER = <<ENDFOOTER
-  </body>
-</html>
-ENDFOOTER
-
-BODY = HEADER + <<ENDBODY
-  !INCLUDE! <!-- banner header -->
-
-  <div id="bodyContent">
-    #{METHOD_LIST}
-  </div>
-
-  #{FOOTER}
-ENDBODY
-
-########################## Source code ##########################
-
-SRC_PAGE = XHTML_PREAMBLE + <<HTML
-<html>
-<head><title>%title%</title>
-<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
-<style>
-.ruby-comment    { color: green; font-style: italic }
-.ruby-constant   { color: #4433aa; font-weight: bold; }
-.ruby-identifier { color: #222222;  }
-.ruby-ivar       { color: #2233dd; }
-.ruby-keyword    { color: #3333FF; font-weight: bold }
-.ruby-node       { color: #777777; }
-.ruby-operator   { color: #111111;  }
-.ruby-regexp     { color: #662222; }
-.ruby-value      { color: #662222; font-style: italic }
-  .kw { color: #3333FF; font-weight: bold }
-  .cmt { color: green; font-style: italic }
-  .str { color: #662222; font-style: italic }
-  .re  { color: #662222; }
-</style>
-</head>
-<body bgcolor="white">
-<pre>%code%</pre>
-</body>
-</html>
-HTML
-
-########################## Index ################################
-
-FR_INDEX_BODY = <<HTML
-!INCLUDE!
-HTML
-
-FILE_INDEX = XHTML_PREAMBLE + <<HTML
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
-<style>
-<!--
-  body {
-    background-color: #EEE;
-    font-family: #{FONTS}; 
-    color: #000;
-    margin: 0px;
-  }
-  .banner {
-    background: #005;
-    color: #FFF;
-    padding: 0.2em;
-    font-size: small;
-    font-weight: bold;
-    text-align: center;
-  }
-  .entries {
-    margin: 0.25em 1em 0 1em;
-    font-size: x-small;
-  }
-  a {
-    color: #00F;
-    text-decoration: none;
-    white-space: nowrap;
-  }
-  a:hover {
-    color: #77F;
-    text-decoration: underline;
-  }
--->
-</style>
-<base target="docwin">
-</head>
-<body>
-<div class="banner">%list_title%</div>
-<div class="entries">
-START:entries
-<a href="%href%">%name%</a><br>
-END:entries
-</div>
-</body></html>
-HTML
-
-CLASS_INDEX = FILE_INDEX
-METHOD_INDEX = FILE_INDEX
-
-INDEX = XHTML_PREAMBLE + <<HTML
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>%title%</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=%charset%">
-</head>
-
-<frameset cols="20%,*">
-    <frameset rows="15%,35%,50%">
-        <frame src="fr_file_index.html"   title="Files" name="Files" />
-        <frame src="fr_class_index.html"  name="Classes" />
-        <frame src="fr_method_index.html" name="Methods" />
-    </frameset>
-IF:inline_source
-      <frame  src="%initial_page%" name="docwin">
-ENDIF:inline_source
-IFNOT:inline_source
-    <frameset rows="80%,20%">
-      <frame  src="%initial_page%" name="docwin">
-      <frame  src="blank.html" name="source">
-    </frameset>
-ENDIF:inline_source
-    <noframes>
-          <body bgcolor="white">
-            Click <a href="html/index.html">here</a> for a non-frames
-            version of this page.
-          </body>
-    </noframes>
-</frameset>
-
-</html>
-HTML
-
-end
-end
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/proto_rake.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/proto_rake.rdoc
deleted file mode 100644
index 39b9b88..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/proto_rake.rdoc
+++ /dev/null
@@ -1,127 +0,0 @@
-= Original Prototype Rake
-
-This is the original 100 line prototype rake program.
-
----
- #!/usr/bin/env ruby
- 
- require 'ftools'
- 
- class Task
-   TASKS = Hash.new
- 
-   attr_reader :prerequisites
- 
-   def initialize(task_name)
-     @name = task_name
-     @prerequisites = []
-     @actions = []
-   end
- 
-   def enhance(deps=nil, &block)
-     @prerequisites |= deps if deps
-     @actions << block if block_given?
-     self
-   end
- 
-   def name
-     @name.to_s
-   end
- 
-   def invoke
-     @prerequisites.each { |n| Task[n].invoke }
-     execute if needed?
-   end
- 
-   def execute
-     return if @triggered
-     @triggered = true
-     @actions.collect { |act| result = act.call(self) }.last
-   end
- 
-   def needed?
-     true
-   end
- 
-   def timestamp
-     Time.now
-   end
- 
-   class << self
-     def [](task_name)
-       TASKS[intern(task_name)] or fail "Don't know how to rake #{task_name}"
-     end
-     
-     def define_task(args, &block)
-       case args
-       when Hash
- 	fail "Too Many Target Names: #{args.keys.join(' ')}" if args.size > 1
- 	fail "No Task Name Given" if args.size < 1
- 	task_name = args.keys[0]
- 	deps = args[task_name]
-       else
- 	task_name = args
- 	deps = []
-       end
-       deps = deps.collect {|d| intern(d) }
-       get(task_name).enhance(deps, &block)
-     end
- 
-     def get(task_name)
-       name = intern(task_name)
-       TASKS[name] ||= self.new(name)
-     end
- 
-     def intern(task_name)
-       (Symbol === task_name) ? task_name : task_name.intern
-     end
-   end
- end
- 
- class FileTask < Task
-   def needed?
-     return true unless File.exist?(name)
-     latest_prereq = @prerequisites.collect{|n| Task[n].timestamp}.max
-     return false if latest_prereq.nil?
-     timestamp < latest_prereq
-   end
- 
-   def timestamp
-     File.new(name.to_s).mtime
-   end
- end
- 
- def task(args, &block)
-   Task.define_task(args, &block)
- end
- 
- def file(args, &block)
-   FileTask.define_task(args, &block)
- end
- 
- def sys(cmd)
-   puts cmd
-   system(cmd) or fail "Command Failed: [#{cmd}]"
- end
-   
- def rake
-   begin
-     here = Dir.pwd
-     while ! File.exist?("Rakefile")
-       Dir.chdir("..")
-       fail "No Rakefile found" if Dir.pwd == here
-       here = Dir.pwd
-     end
-     puts "(in #{Dir.pwd})"
-     load "./Rakefile"
-     ARGV.push("default") if ARGV.size == 0
-     ARGV.each { |task_name| Task[task_name].invoke }
-   rescue Exception => ex
-     puts "rake aborted ... #{ex.message}"
-     puts ex.backtrace.find {|str| str =~ /Rakefile/ } || ""
-   end    
- end
- 
- if __FILE__ == $0 then
-   rake
- end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rake.1.gz b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rake.1.gz
deleted file mode 100644
index 02af4de..0000000
Binary files a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rake.1.gz and /dev/null differ
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rakefile.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rakefile.rdoc
deleted file mode 100644
index dc116e3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rakefile.rdoc
+++ /dev/null
@@ -1,534 +0,0 @@
-= Rakefile Format (as of version 0.8.2)
-
-First of all, there is no special format for a Rakefile.  A Rakefile
-contains executable Ruby code.  Anything legal in a ruby script is
-allowed in a Rakefile.
-
-Now that we understand there is no special syntax in a Rakefile, there
-are some conventions that are used in a Rakefile that are a little
-unusual in a typical Ruby program.  Since a Rakefile is tailored to
-specifying tasks and actions, the idioms used in a Rakefile are
-designed to support that.
-
-So, what goes into a Rakefile?
-
-== Tasks
-
-Tasks are the main unit of work in a Rakefile.  Tasks have a name
-(usually given as a symbol or a string), a list of prerequisites (more
-symbols or strings) and a list of actions (given as a block).
-
-=== Simple Tasks
-
-A task is declared by using the +task+ method.  +task+ takes a single
-parameter that is the name of the task.
-
-  task :name
-
-=== Tasks with Prerequisites
-
-Any prerequisites are given as a list (inclosed in square brackets)
-following the name and an arrow (=>).
-
-  task :name => [:prereq1, :prereq2]
-
-<b>NOTE:</b> Although this syntax looks a little funky, it is legal
-Ruby.  We are constructing a hash where the key is :name and the value
-for that key is the list of prerequisites.  It is equivalent to the
-following ...
-
-  hash = Hash.new
-  hash[:name] = [:prereq1, :prereq2]
-  task(hash)
-
-=== Tasks with Actions
-
-Actions are defined by passing a block to the +task+ method.  Any Ruby
-code can be placed in the block.  The block may reference the task
-object via the block paramter..
-
-  task :name => [:prereq1, :prereq2] do |t|
-    # actions (may reference t)
-  end
-
-=== Multiple Definitions
-
-A task may be specified more than once.  Each specification adds its
-prerequisites and actions to the existing definition.  This allows one
-part of a rakefile to specify the actions and a different rakefile
-(perhaps separately generated) to specify the dependencies.
-
-For example, the following is equivalent to the single task
-specification given above.
-
-  task :name
-  task :name => [:prereq1]
-  task :name => [:prereq2]
-  task :name do |t|
-    # actions
-  end
-
-== File Tasks
-
-Some tasks are designed to create a file from one or more other files.
-Tasks that generate these files may be skipped if the file already
-exists.  File tasks are used to specify file creation tasks.
-
-File tasks are declared using the +file+ method (instead of the +task+
-method).  In addition, file tasks are usually named with a string
-rather than a symbol.
-
-The following file task creates a executable program (named +prog+)
-given two object files name <tt>a.o</tt> and <tt>b.o</tt>.  The tasks
-for creating <tt>a.o</tt> and <tt>b.o</tt> are not shown.
-
-  file "prog" => ["a.o", "b.o"] do |t|
-    sh "cc -o #{t.name} #{t.prerequisites.join(' ')}"
-  end
-
-== Directory Tasks
-
-It is common to need to create directories upon demand.  The
-+directory+ convenience method is a short-hand for creating a FileTask
-that creates the directory.  For example, the following declaration
-...
-
-  directory "testdata/examples/doc"
-
-is equivalent to ...
-
-  file "testdata"              do |t| mkdir t.name end
-  file "testdata/examples"     do |t| mkdir t.name end
-  file "testdata/examples/doc" do |t| mkdir t.name end
-
-The +directory+ method does not accept prerequisites or actions, but
-both prerequisites and actions can be added later.  For example ...
-
-  directory "testdata"
-  file "testdata" => ["otherdata"]
-  file "testdata" do
-    cp Dir["standard_data/*.data"], "testdata"
-  end
-
-== Tasks with Parallel Prerequisites
-
-Rake allows parallel execution of prerequisites using the following syntax:
-
-  multitask :copy_files => [:copy_src, :copy_doc, :copy_bin] do
-    puts "All Copies Complete"
-  end
-
-In this example, +copy_files+ is a normal rake task.  Its actions are
-executed whereever all of its prerequisites are done.  The big
-difference is that the prerequisites (+copy_src+, +copy_bin+ and
-+copy_doc+) are executed in parallel.  Each of the prerequisites are
-run in their own Ruby thread, possibly allowing faster overall runtime.
-
-=== Secondary Prerequisites
-
-If any of the primary prerequites of a multitask have common secondary
-prerequisites, all of the primary/parallel prerequisites will wait
-until the common prerequisites have been run.
-
-For example, if the <tt>copy_<em>xxx</em></tt> tasks have the
-following prerequisites:
-
-  task :copy_src => [:prep_for_copy]
-  task :copy_bin => [:prep_for_copy]
-  task :copy_doc => [:prep_for_copy]
-
-Then the +prep_for_copy+ task is run before starting all the copies in
-parallel.  Once +prep_for_copy+ is complete, +copy_src+, +copy_bin+,
-and +copy_doc+ are all run in parallel.  Note that +prep_for_copy+ is
-run only once, even though it is referenced in multiple threads.
-
-=== Thread Safety
-
-The Rake internal data structures are thread-safe with respect
-to the multitask parallel execution, so there is no need for the user
-to do extra synchronization for Rake's benefit.  However, if there are
-user data structures shared between the parallel prerequisites, the
-user must do whatever is necessary to prevent race conditions.
-
-== Tasks with Arguments
-
-Prior to version 0.8.0, rake was only able to handle command line
-arguments of the form NAME=VALUE that were passed into Rake via the
-ENV hash.  Many folks had asked for some kind of simple command line
-arguments, perhaps using "--" to separate regular task names from
-argument values on the command line.  The problem is that there was no
-easy way to associate positional arguments on the command line with
-different tasks.  Suppose both tasks :a and :b expect a command line
-argument: does the first value go with :a?  What if :b is run first?
-Should it then get the first command line argument.
-
-Rake 0.8.0 solves this problem by explicitly passing values directly
-to the tasks that need them.  For example, if I had a release task
-that required a version number, I could say:
-
-   rake release[0.8.2]
-
-And the string "0.8.2" will be passed to the :release task.  Multiple
-arguments can be passed by separating them with a comma, for example:
-
-   rake name[john,doe]
-
-Just a few words of caution.  The rake task name and its arguments
-need to be a single command line argument to rake.  This generally
-means no spaces.  If spaces are needed, then the entire rake +
-argument string should be quoted.  Something like this:
-
-   rake "name[billy bob, smith]"
-
-(Quoting rules vary between operating systems and shells, so make sure
-you consult the proper docs for your OS/shell).
-
-=== Tasks that Expect Parameters
-
-Parameters are only given to tasks that are setup to expect them.  In
-order to handle named parameters, the task declaration syntax for
-tasks has been extended slightly.
-
-For example, a task that needs a first name and last name might be
-declared as:
-
-   task :name, [:first_name, :last_name]
-
-The first argument is still the name of the task (:name in this case).
-The next to argumements are the names of the parameters expected by
-:name in an array (:first_name and :last_name in the example).
-
-To access the values of the paramters, the block defining the task
-behaviour can now accept a second parameter:
-
-   task :name, [:first_name, :last_name] do |t, args|
-     puts "First name is #{args.first_name}"
-     puts "Last  name is #{args.last_name}"
-   end
-
-The first argument of the block "t" is always bound to the current
-task object.  The second argument "args" is an open-struct like object
-that allows access to the task arguments.  Extra command line
-arguments to a task are ignored.  Missing command line arguments are
-given the nil value.
-
-If you wish to specify default values for the arguments, you can use
-the with_defaults method in the task body.  Here is the above example
-where we specify default values for the first and last names:
-
-   task :name, [:first_name, :last_name] do |t, args|
-     args.with_defaults(:first_name => "John", :last_name => "Dough")
-     puts "First name is #{args.first_name}"
-     puts "Last  name is #{args.last_name}"
-   end
-
-=== Tasks that Expect Parameters and Have Prerequisites
-
-Tasks that use parameters have a slightly different format for
-prerequisites.  Use the <tt>:needs</tt> keyword to specify the
-prerequisites for tasks with arguments.  For example:
-
-   task :name, [:first_name, :last_name] => [:pre_name] do |t, args|
-     args.with_defaults(:first_name => "John", :last_name => "Dough")
-     puts "First name is #{args.first_name}"
-     puts "Last  name is #{args.last_name}"
-   end
-
-=== Deprecated Task Parameters Format
-
-There is an older format for declaring task parameters that omitted
-the task array and used the :needs keyword to introduce the
-dependencies.  That format is still supported for compatibility, but
-is not recommended for use.
-
-== Accessing Task Programatically
-
-Sometimes it is useful to manipulate tasks programatically in a
-Rakefile. To find a task object, use the <tt>:[]</tt> operator on the
-<tt>Rake::Task</tt>.
-
-=== Programmatic Task Example
-
-For example, the following Rakefile defines two tasks.  The :doit task
-simply prints a simple "DONE" message.  The :dont class will lookup
-the doit class and remove (clear) all of its prerequisites and
-actions.
-
-   task :doit do
-     puts "DONE"
-   end
-
-   task :dont do
-     Rake::Task[:doit].clear
-   end        
-
-Running this example:
-
-  $ rake doit
-  (in /Users/jim/working/git/rake/x)
-  DONE
-  $ rake dont doit
-  (in /Users/jim/working/git/rake/x)
-  $ 
-
-The ability to programmatically manipulate tasks gives rake very
-powerful meta-programming capabilities w.r.t. task execution, but
-should be used with cation.
-
-== Rules
-
-When a file is named as a prerequisite, but does not have a file task
-defined for it, Rake will attempt to synthesize a task by looking at a
-list of rules supplied in the Rakefile.
-
-Suppose we were trying to invoke task "mycode.o", but no task is
-defined for it.  But the rakefile has a rule that look like this ...
-
-  rule '.o' => ['.c'] do |t|
-    sh "cc #{t.source} -c -o #{t.name}"
-  end
-
-This rule will synthesize any task that ends in ".o".  It has a
-prerequisite a source file with an extension of ".c" must exist.  If
-Rake is able to find a file named "mycode.c", it will automatically
-create a task that builds "mycode.o" from "mycode.c".
-
-If the file "mycode.c" does not exist, rake will attempt
-to recursively synthesize a rule for it. 
-
-When a task is synthesized from a rule, the +source+ attribute of the
-task is set to the matching source file.  This allows us to write
-rules with actions that reference the source file.
-
-=== Advanced Rules
-
-Any regular expression may be used as the rule pattern.  Additionally,
-a proc may be used to calculate the name of the source file.  This
-allows for complex patterns and sources.
-
-The following rule is equivalent to the example above.
-
-  rule( /\.o$/ => [
-    proc {|task_name| task_name.sub(/\.[^.]+$/, '.c') }
-  ]) do |t|
-    sh "cc #{t.source} -c -o #{t.name}"
-  end    
-
-<b>NOTE:</b> Because of a _quirk_ in Ruby syntax, parenthesis are
-required on *rule* when the first argument is a regular expression.
-
-The following rule might be used for Java files ...
-
-  rule '.java' => [
-    proc { |tn| tn.sub(/\.class$/, '.java').sub(/^classes\//, 'src/') }
-  ] do |t|
-    java_compile(t.source, t.name)  
-  end
-
-<b>NOTE:</b> +java_compile+ is a hypothetical method that invokes the
-java compiler.
-
-== Importing Dependencies
-
-Any ruby file (including other rakefiles) can be included with a
-standard Ruby +require+ command.  The rules and declarations in the
-required file are just added to the definitions already accumulated.
-
-Because the files are loaded _before_ the rake targets are evaluated,
-the loaded files must be "ready to go" when the rake command is
-invoked.  This make generated dependency files difficult to use.  By
-the time rake gets around to updating the dependencies file, it is too
-late to load it.
-
-The +import+ command addresses this by specifying a file to be loaded
-_after_ the main rakefile is loaded, but _before_ any targets on the
-command line are specified.  In addition, if the file name matches an
-explicit task, that task is invoked before loading the file.  This
-allows dependency files to be generated and used in a single rake
-command invocation.
-
-=== Example:
-
-  require 'rake/loaders/makefile'
-
-  file ".depends.mf" => [SRC_LIST] do |t|
-    sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}"
-  end
-
-  import ".depends.mf"
-
-If ".depends" does not exist, or is out of date w.r.t. the source
-files, a new ".depends" file is generated using +makedepend+ before
-loading.
-
-== Comments
-
-Standard Ruby comments (beginning with "#") can be used anywhere it is
-legal in Ruby source code, including comments for tasks and rules.
-However, if you wish a task to be described using the "-T" switch,
-then you need to use the +desc+ command to describe the task.
-
-=== Example:
-
-  desc "Create a distribution package"
-  task :package => [ ... ] do ... end
-
-The "-T" switch (or "--tasks" if you like to spell things out) will
-display a list of tasks that have a defined comment.  If you use
-+desc+ to describe your major tasks, you have a semi-automatic way of
-generating a summary of your Rake file.
-
-  traken$ rake -T
-  (in /home/.../rake)
-  rake clean            # Remove any temporary products.
-  rake clobber          # Remove any generated file.
-  rake clobber_rdoc     # Remove rdoc products
-  rake contrib_test     # Run tests for contrib_test
-  rake default          # Default Task
-  rake install          # Install the application
-  rake lines            # Count lines in the main rake file
-  rake rdoc             # Build the rdoc HTML Files
-  rake rerdoc           # Force a rebuild of the RDOC files
-  rake test             # Run tests
-  rake testall          # Run all test targets
-
-Only tasks with descriptions will be displayed with the "-T" switch.
-Use "-P" (or "--prereqs") to get a list of all tasks and their
-prerequisites.
-
-== Namespaces
-
-As projects grow (and along with it, the number of tasks), it is
-common for task names to begin to clash.  For example, if you might
-have a main program and a set of sample programs built by a single
-Rakefile.  By placing the tasks related to the main program in one
-namespace, and the tasks for building the sample programs in a
-different namespace, the task names will not will not interfer with
-each other.
-
-For example:
-
-  namespace "main"
-    task :build do
-      # Build the main program
-    end
-  end
-
-  namespace "samples" do
-    task :build do
-      # Build the sample programs
-    end
-  end
-
-  task :build => ["main:build", "samples:build"]
-
-Referencing a task in a separate namespace can be achieved by
-prefixing the task name with the namespace and a colon
-(e.g. "main:build" refers to the :build task in the +main+ namespace).
-Nested namespaces are supported, so
-
-Note that the name given in the +task+ command is always the unadorned
-task name without any namespace prefixes.  The +task+ command always
-defines a task in the current namespace.  
-
-=== FileTasks
-
-File task names are not scoped by the namespace command.  Since the
-name of a file task is the name of an actual file in the file system,
-it makes little sense to include file task names in name space.
-Directory tasks (created by the +directory+ command) are a type of
-file task and are also not affected by namespaces.
-
-=== Name Resolution
-
-When looking up a task name, rake will start with the current
-namespace and attempt to find the name there.  If it fails to find a
-name in the current namespace, it will search the parent namespaces
-until a match is found (or an error occurs if there is no match).
-
-The "rake" namespace is a special implicit namespace that refers to
-the toplevel names.
-
-If a task name begins with a "^" character, the name resolution will
-start in the parent namespace.  Multiple "^" characters are allowed.
-
-Here is an example file with multiple :run tasks and how various names
-resolve in different locations.
-
-  task :run
-
-  namespace "one" do
-    task :run
-
-    namespace "two" do
-      task :run
-
-      # :run            => "one:two:run"
-      # "two:run"       => "one:two:run"
-      # "one:two:run"   => "one:two:run"
-      # "one:run"       => "one:run"
-      # "^run"          => "one:run"
-      # "^^run"         => "rake:run" (the top level task)
-      # "rake:run"      => "rake:run" (the top level task)
-    end
-
-    # :run       => "one:run"
-    # "two:run"  => "one:two:run"
-    # "^run"     => "rake:run"
-  end
-
-  # :run           => "rake:run"
-  # "one:run"      => "one:run"
-  # "one:two:run"  => "one:two:run"
-
-== FileLists
-
-FileLists are the way Rake manages lists of files.  You can treat a
-FileList as an array of strings for the most part, but FileLists
-support some additional operations.
-
-=== Creating a FileList
-
-Creating a file list is easy.  Just give it the list of file names:
-
-   fl = FileList['file1.rb', file2.rb']
-
-Or give it a glob pattern:
-
-   fl = FileList['*.rb']
-
-== Odds and Ends
-
-=== do/end verses { }
-
-Blocks may be specified with either a +do+/+end+ pair, or with curly
-braces in Ruby.  We _strongly_ recommend using +do+/+end+ to specify the
-actions for tasks and rules.  Because the rakefile idiom tends to
-leave off parenthesis on the task/file/rule methods, unusual
-ambiguities can arise when using curly braces.
-
-For example, suppose that the method +object_files+ returns a list of
-object files in a project.  Now we use +object_files+ as the
-prerequistes in a rule specified with actions in curly braces.
-
-  # DON'T DO THIS!
-  file "prog" => object_files {
-    # Actions are expected here (but it doesn't work)!
-  }
-
-Because curly braces have a higher precedence than +do+/+end+, the
-block is associated with the +object_files+ method rather than the
-+file+ method.
-
-This is the proper way to specify the task ...
-
-  # THIS IS FINE
-  file "prog" => object_files do
-    # Actions go here
-  end
-
-----
-
-== See
-
-* README -- Main documentation for Rake.
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rational.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rational.rdoc
deleted file mode 100644
index f741e65..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/rational.rdoc
+++ /dev/null
@@ -1,151 +0,0 @@
-= Why rake?
-
-Ok, let me state from the beginning that I never intended to write this
-code.  I'm not convinced it is useful, and I'm not convinced anyone
-would even be interested in it.  All I can say is that Why's onion truck
-must by been passing through the Ohio valley.
-
-What am I talking about? ... A Ruby version of Make.
-
-See, I can sense you cringing already, and I agree.  The world certainly
-doesn't need yet another reworking of the "make" program.  I mean, we
-already have "ant".  Isn't that enough?
-
-It started yesterday.  I was helping a coworker fix a problem in one of
-the Makefiles we use in our project.  Not a particularly tough problem,
-but during the course of the conversation I began lamenting some of the
-shortcomings of make.  In particular, in one of my makefiles I wanted to
-determine the name of a file dynamically and had to resort to some
-simple scripting (in Ruby) to make it work.  "Wouldn't it be nice if you
-could just use Ruby inside a Makefile" I said.
-
-My coworker (a recent convert to Ruby) agreed, but wondered what it
-would look like.  So I sketched the following on the whiteboard...
-
-    "What if you could specify the make tasks in Ruby, like this ..."
-
-      task "build" do
-        java_compile(...args, etc ...)
-      end
-
-    "The task function would register "build" as a target to be made,
-    and the block would be the action executed whenever the build
-    system determined that it was time to do the build target."
-
-We agreed that would be cool, but writing make from scratch would be WAY
-too much work.  And that was the end of that!
-
-... Except I couldn't get the thought out of my head.  What exactly
-would be needed to make the about syntax work as a make file?  Hmmm, you
-would need to register the tasks, you need some way of specifying
-dependencies between tasks, and some way of kicking off the process. 
-Hey!  What if we did ... and fifteen minutes later I had a working
-prototype of Ruby make, complete with dependencies and actions.
-
-I showed the code to my coworker and we had a good laugh.  It was just
-about a page worth of code that reproduced an amazing amount of the
-functionality of make.  We were both truely stunned with the power of
-Ruby.
-
-But it didn't do everything make did.  In particular, it didn't have
-timestamp based file dependencies (where a file is rebuilt if any of its
-prerequisite files have a later timestamp).  Obviously THAT would be a
-pain to add and so Ruby Make would remain an interesting experiment.
-
-... Except as I walked back to my desk, I started thinking about what
-file based dependecies would really need.  Rats!  I was hooked again,
-and by adding a new class and two new methods, file/timestamp
-dependencies were implemented.
-
-Ok, now I was really hooked.  Last night (during CSI!) I massaged the
-code and cleaned it up a bit.  The result is a bare-bones replacement
-for make in exactly 100 lines of code.
-
-For the curious, you can see it at ...
-* doc/proto_rake.rdoc
-
-Oh, about the name.  When I wrote the example Ruby Make task on my
-whiteboard, my coworker exclaimed "Oh! I have the perfect name: Rake ...
-Get it?  Ruby-Make. Rake!"  He said he envisioned the tasks as leaves
-and Rake would clean them up  ... or something like that.  Anyways, the
-name stuck.
-
-Some quick examples ...
-
-A simple task to delete backup files ...
-
-   task :clean do
-     Dir['*~'].each {|fn| rm fn rescue nil}
-   end
-
-Note that task names are symbols (they are slightly easier to type
-than quoted strings ... but you may use quoted string if you would
-rather). Rake makes the methods of the FileUtils module directly
-available, so we take advantage of the <tt>rm</tt> command.  Also note
-the use of "rescue nil" to trap and ignore errors in the <tt>rm</tt>
-command.
-
-To run it, just type "rake clean".  Rake will automatically find a
-Rakefile in the current directory (or above!) and will invoke the
-targets named on the command line.  If there are no targets explicitly
-named, rake will invoke the task "default".
-
-Here's another task with dependencies ...
-
-   task :clobber => [:clean] do
-     rm_r "tempdir"
-   end
-
-Task :clobber depends upon task :clean, so :clean will be run before
-:clobber is executed. 
-
-Files are specified by using the "file" command.  It is similar to the
-task command, except that the task name represents a file, and the task
-will be run only if the file doesn't exist, or if its modification time
-is earlier than any of its prerequisites.
-
-Here is a file based dependency that will compile "hello.cc" to
-"hello.o".
-
-   file "hello.cc"
-   file "hello.o" => ["hello.cc"] do |t|
-     srcfile = t.name.sub(/\.o$/, ".cc")
-     sh %{g++ #{srcfile} -c -o #{t.name}}
-   end
-
-I normally specify file tasks with string (rather than symbols).  Some
-file names can't be represented by symbols.  Plus it makes the
-distinction between them more clear to the casual reader.  
-
-Currently writing a task for each and every file in the project would be
-tedious at best.  I envision a set of libraries to make this job
-easier.  For instance, perhaps something like this ...
-
-   require 'rake/ctools'
-   Dir['*.c'].each do |fn|
-     c_source_file(fn)
-   end
-
-where "c_source_file" will create all the tasks need to compile all the
-C source files in a directory.  Any number of useful libraries could be
-created for rake.
-
-That's it.  There's no documentation (other than whats in this
-message).  Does this sound interesting to anyone?  If so, I'll continue
-to clean it up and write it up and publish it on RAA.  Otherwise, I'll
-leave it as an interesting excerise and a tribute to the power of Ruby.
-
-Why /might/ rake be interesting to Ruby programmers.  I don't know,
-perhaps ...
-
-* No weird make syntax (only weird Ruby syntax :-)
-* No need to edit or read XML (a la ant)
-* Platform independent build scripts.
-* Will run anywhere Ruby exists, so no need to have "make" installed.
-  If you stay away from the "sys" command and use things like
-  'ftools', you can have a perfectly platform independent
-  build script.  Also rake is only 100 lines of code, so it can
-  easily be packaged along with the rest of your code.
-
-So ... Sorry for the long rambling message.  Like I said, I never
-intended to write this code at all.
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.4.14.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.4.14.rdoc
deleted file mode 100644
index b2f1f84..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.4.14.rdoc
+++ /dev/null
@@ -1,23 +0,0 @@
-= Rake 0.4.14 Released
-
-== Changes
-
-Version 0.4.14 is a compatibility fix to allow Rake's test task to
-work under Ruby 1.8.2.  A change in the Test::Unit autorun feature
-prevented Rake from running any tests.  This release fixes the
-problem.
-
-Rake 0.4.14 is the recommended release for anyone using Ruby 1.8.2.
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.4.15.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.4.15.rdoc
deleted file mode 100644
index 1d8afd9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.4.15.rdoc
+++ /dev/null
@@ -1,35 +0,0 @@
-= Rake 0.4.15 Released
-
-== Changes
-
-Version 0.4.15 is a bug fix update for the Ruby 1.8.2 compatibility
-changes.  This release includes:
-
-* Fixed a bug that prevented the TESTOPTS flag from working with the
-  revised for 1.8.2 test task.
-
-* Updated the docs on --trace to indicate that it also enables a full
-  backtrace on errors. 
-
-* Several fixes for new warnings generated.
-
-== Mini-Roadmap
-
-I will continue to issue Rake updates in the 0.4.xx series as new
-Ruby-1.8.2 issues become manifest.  Once the codebase stabilizes, I
-will release a 0.5.0 version incorporating all the changes.  If you
-are not using Ruby-1.8.2 and wish to avoid version churn, I recommend
-staying with a release prior to Rake-0.4.14.
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.0.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.0.rdoc
deleted file mode 100644
index 6b49d2a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.0.rdoc
+++ /dev/null
@@ -1,53 +0,0 @@
-= Rake 0.5.0 Released
-
-It has been a long time in coming, but we finally have a new version
-of Rake available.  
-
-== Changes
-
-* Fixed bug where missing intermediate file dependencies could cause
-  an abort with --trace or --dry-run.  (Brian Candler)
-
-* Recursive rules are now supported (Tilman Sauerbeck).
-
-* Added tar.gz and tar.bz2 support to package task (Tilman Sauerbeck).
-
-* Added warning option for the Test Task (requested by Eric Hodel).
-
-* The jamis rdoc template is only used if it exists.
-
-* Added fix for Ruby 1.8.2 test/unit and rails problem.
-
-* Added contributed rake man file. (Jani Monoses)
-
-* Fixed documentation that was lacking the Rake module name (Tilman
-  Sauerbeck).
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Thanks
-
-Lots of people provided input to this release.  Thanks to Tilman
-Sauerbeck for numerous patches, documentation fixes and suggestions.
-And for also pushing me to get this release out.  Also, thanks to
-Brian Candler for the finding and fixing --trace/dry-run fix.  That
-was an obscure bug.  Also to Eric Hodel for some good suggestions.
-
--- Jim Weirich
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.3.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.3.rdoc
deleted file mode 100644
index be2919f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.3.rdoc
+++ /dev/null
@@ -1,78 +0,0 @@
-= Rake 0.5.0 Released
-
-Although it has only been two weeks since the last release, we have
-enough updates to the Rake program to make it time for another
-release.
-
-== Changes
-
-Here are the changes for version 0.5.3 ...
-
-* FileLists have been extensively changed so that they mimic the
-  behavior of real arrays even more closely.  In particular,
-  operations on FileLists that return a new collection (e.g. collect,
-  reject) will now return a FileList rather than an array.  In
-  addition, several places where FileLists were not properly expanded
-  before use have been fixed.
-
-* A method (+ext+) to simplify the handling of file extensions was
-  added to String and to Array.
-
-* The 'testrb' script in test/unit tends to silently swallow syntax
-  errors in test suites.  Because of that, the default test loader is
-  now a rake-provided script.  You can still use 'testrb' by setting
-  the loader flag in the test task to :testrb.  (See the API documents
-  for TestTask for all the loader flag values).
-
-* FileUtil methods (e.g. cp, mv, install) are now declared to be
-  private.  This will cut down on the interference with user defined
-  methods of the same name.
-
-* Fixed the verbose flag in the TestTask so that the test code is
-  controlled by the flag.  Also shortened up some failure messages.
-  (Thanks to Tobias Luetke for the suggestion).
-
-* Rules will now properly detect a task that can generate a source
-  file.  Previously rules would only consider source files that were
-  already present.
-
-* Added an +import+ command that allows Rake to dynamically import
-  dependendencies into a running Rake session.  The +import+ command
-  can run tasks to update the dependency file before loading them.
-  Dependency files can be in rake or make format, allowing rake to
-  work with tools designed to generate dependencies for make.
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes.
-Thanks to ...
-
-* Brian Gernhardt for the rules fix (especially for the patience to
-  explain the problem to me until I got what he was talking about).
-* Stefan Lang for pointing out problems in the dark corners of the
-  FileList implementation.
-* Alexey Verkhovsky pointing out the silently swallows syntax errors
-  in tests.
-* Tobias Luetke for beautifying the test task output.
-* Sam Roberts for some of the ideas behind dependency loading.
-
--- Jim Weirich
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.4.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.4.rdoc
deleted file mode 100644
index 38dfbdd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.5.4.rdoc
+++ /dev/null
@@ -1,46 +0,0 @@
-= Rake 0.5.4 Released
-
-Time for some minor bug fixes and small enhancements
-
-== Changes
-
-Here are the changes for version 0.5.3 ...
-
-* Added double quotes to the test runner.  This allows the location of
-  the tests (and runner) to be in a directory path that contains
-  spaces (e.g. "C:/Program Files/ruby/bin").
-
-* Added .svn to default ignore list.  Now subversion project metadata
-  is automatically ignored by Rake's FileList.
-
-* Updated FileList#include to support nested arrays and filelists.
-  FileLists are flat lists of file names.  Using a FileList in an
-  include will flatten out the nested file names.
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes.
-Thanks to ...
-
-* Tilman Sauerbeck for the nested FileList suggestion.
-* Josh Knowles for pointing out the spaces in directory name problem.
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.6.0.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.6.0.rdoc
deleted file mode 100644
index 340c07b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.6.0.rdoc
+++ /dev/null
@@ -1,141 +0,0 @@
-= Rake 0.6.0 Released
-
-Its time for some long requested enhancements and lots of bug fixes
-... And a whole new web page.
-
-== New Web Page
-
-The primary documentation for rake has moved from the RubyForge based
-wiki to its own Hieraki based web site.  Constant spam on the wiki
-made it a difficult to keep clean.  The new site will be easier to
-update and organize.
-
-Check out the new documentation at: http://docs.rubyrake.org
-
-We will be adding new documentation to the site as time goes on.
-
-In addition to the new docs page, make sure you check out Martin
-Fowlers article on rake at http://martinfowler.com/articles/rake.html
-
-== Changes
-
-=== New Features
-
-* Multiple prerequisites on Rake rules now allowed.  However, keep the
-  following in mind:
-
-  1. All the prerequisites of a rule must be available before a rule
-     is triggered, where "enabled" means (a) an existing file, (b) a
-     defined rule, or (c) another rule which also must be
-     trigger-able.
-  2. Rules are checked in order of definition, so it is important to
-     order your rules properly.  If a file can be created by two
-     different rules, put the more specific rule first (otherwise the
-     more general rule will trigger first and the specific one will
-     never be triggered).
-  3. The <tt>source</tt> method now returns the name of the first
-     prerequisite listed in the rule.  <tt>sources</tt> returns the
-     names of all the rule prerequisites, ordered as they are defined
-     in the rule.  If the task has other prerequisites not defined in
-     the rule (but defined in an explicit task definition), then they
-     will _not_ be included in the sources list.
-
-* FileLists may now use the egrep command.  This popular enhancement
-  is now a core part of the FileList object.  If you want to get a
-  list of all your to-dos, fixmes and TBD comments, add the following
-  to your Rakefile.
-
-    desc "Look for TODO and FIXME tags in the code"
-    task :todo do
-      FileList['**/*.rb'].egrep /#.*(FIXME|TODO|TBD)/
-    end
-
-* The <tt>investigation</tt> method was added to task object to dump
-  out some important values.  This makes it a bit easier to debug Rake
-  tasks.
-
-  For example, if you are having problems with a particular task, just
-  print it out:
-
-    task :huh do
-      puts Rake::Task['huh'].investigation
-    end
-
-* The Rake::TestTask class now supports a "ruby_opts" option to pass
-  arbitrary ruby options to a test subprocess.
-
-=== Some Incompatibilities
-
-* When using the <tt>ruby</tt> command to start a Ruby subprocess, the
-  Ruby interpreter that is currently running rake is used by default.
-  This makes it easier to use rake in an environment with multiple
-  ruby installation.  (Previously, the first ruby command found in the
-  PATH was used).
-
-  If you wish to chose a different Ruby interpreter, you can
-  explicitly choose the interpreter via the <tt>sh</tt> command.
-
-* The major rake classes (Task, FileTask, FileCreationTask, RakeApp)
-  have been moved out of the toplevel scope and are now accessible as
-  Rake::Task, Rake::FileTask, Rake::FileCreationTask and
-  Rake::Application.  If your Rakefile
-  directly references any one of these tasks, you may:
-
-  1. Update your Rakefile to use the new classnames
-  2. Use the --classic-namespace option on the rake command to get the
-     old behavior,
-  3. Add <code>require 'rake/classic_namespace'</code> to the
-     Rakefile to get the old behavior.
-
-  <tt>rake</tt> will print a rather annoying warning whenever a
-  deprecated class name is referenced without enabling classic
-  namespace.
-
-=== Bug Fixes
-
-* Several unit tests and functional tests were fixed to run better
-  under windows.
-
-* Directory tasks are now a specialized version of a File task.  A
-  directory task will only be triggered if it doesn't exist.  It will
-  not be triggered if it is out of date w.r.t. any of its
-  prerequisites.
-
-* Fixed a bug in the Rake::GemPackageTask class so that the gem now
-  properly contains the platform name.
-
-* Fixed a bug where a prerequisite on a <tt>file</tt> task would cause
-  an exception if the prerequisite did not exist.
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes.
-The following people either contributed patches, made suggestions or
-made otherwise helpful comments.  Thanks to ...
-
-* Greg Fast (better ruby_opt test options)
-* Kelly Felkins (requested by better namespace support)
-* Martin Fowler (suggested Task.investigation)
-* Stuart Jansen (send initial patch for multiple prerequisites).
-* Masao Mutch (better support for non-ruby Gem platforms)
-* Philipp Neubeck (patch for file task exception fix)
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.0.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.0.rdoc
deleted file mode 100644
index 9c07c7f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.0.rdoc
+++ /dev/null
@@ -1,119 +0,0 @@
-= Rake 0.7.0 Released
-
-These changes for Rake have been brewing for a long time.  Here they
-are, I hope you enjoy them.
-
-== Changes
-
-=== New Features
-
-* Name space support for task names (see below).
-
-* Prerequisites can be executed in parallel (see below).
-
-* Added safe_ln support for openAFS (via Ludvig Omholt).
-
-* RDoc defaults to internal (in-process) invocation.  The old behavior
-  is still available by setting the +external+ flag to true.
-
-* Rakefiles are now loaded with the expanded path to prevent
-  accidental polution from the Ruby load path.
-
-* Task objects my now be used in prerequisite lists directly.
-
-* Task objects (in addition to task names) may now be included in the
-  prerequisite list of a task.
-
-* Internals cleanup and refactoring.
-
-=== Bug Fixes
-
-* Compatibility fixes for Ruby 1.8.4 FileUtils changes.
-
-=== Namespaces
-
-Tasks can now be nested inside their own namespaces.  Tasks within one
-namespace will not accidently interfer with tasks named in a different
-namespace.
-
-For example:
-
-  namespace "main" do
-    task :build do
-      # Build the main program
-    end
-  end
-
-  namespace "samples" do
-    task :build do
-      # Build the sample programs
-    end
-  end
-
-  task :build_all => ["main:build", "samples:build"]
-
-Even though both tasks are named :build, they are separate tasks in
-their own namespaces.  The :build_all task (defined in the toplevel
-namespace) references both build tasks in its prerequisites.
-
-You may invoke each of the individual build tasks with the following
-commands:
-
-  rake main:build
-  rake samples:build
-
-Or invoke both via the :build_all command:
-
-  rake build_all  
-
-Namespaces may be nested arbitrarily.  Since the name of file tasks
-correspond to the name of a file in the external file system,
-FileTasks are not affected by the namespaces.
-
-See the Rakefile format documentation (in the Rake API documents) for
-more information.
-
-=== Parallel Tasks
-
-Sometimes you have several tasks that can be executed in parallel.  By
-specifying these tasks as prerequisites to a +multitask+ task.
-
-In the following example the tasks copy_src, copy_doc and copy_bin
-will all execute in parallel in their own thread.
-
-  multitask :copy_files => [:copy_src, :copy_doc, :copy_bin] do
-    puts "All Copies Complete"
-  end
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes.
-The following people either contributed patches, made suggestions or
-made otherwise helpful comments.  Thanks to ...
-
-* Doug Young (inspriation for the parallel task)
-
-* David Heinemeier Hansson (for --trace message enhancement and for
-  pushing for namespace support).
-
-* Ludvig Omholt (for the openAFS fix)
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.1.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.1.rdoc
deleted file mode 100644
index c17088e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.1.rdoc
+++ /dev/null
@@ -1,59 +0,0 @@
-= Rake 0.7.1 Released
-
-Version 0.7.1 supplies a bug fix and a few minor enhancements.
-
-== Changes
-
-=== Bug Fixes in 0.7.1
-
-* Changes in the exception reported for the FileUtils.ln caused
-  safe_ln to fail with a NotImplementedError.  Rake 0.7.1 will now
-  catch that error or any StandardError and properly fall back to
-  using +cp+.
-
-=== New Features in 0.7.1
-
-* You can filter the results of the --task option by supplying an
-  optional regular expression.  This allows the user to easily find a
-  particular task name in a long list of possible names.
-
-* Transforming procs in a rule may now return a list of prerequisites.
-  This allows more flexible rule formation.
-
-* FileList and String now support a +pathmap+ melthod that makes the
-  transforming paths a bit easier.  See the API docs for +pathmap+ for
-  details.
-
-* The -f option without a value will disable the search for a
-  Rakefile.  This allows the Rakefile to be defined entirely in a
-  library (and loaded with the -r option).  The current working
-  directory is not changed when this is done.
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes.
-The following people either contributed patches, made suggestions or
-made otherwise helpful comments.  Thanks to ...
-
-* James Britt and Assaph Mehr for reporting and helping to debug the
-  safe_ln issue.
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.2.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.2.rdoc
deleted file mode 100644
index 2cc86be..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.2.rdoc
+++ /dev/null
@@ -1,121 +0,0 @@
-= Rake 0.7.2 Released
-
-Version 0.7.2 supplies a bug fix and a few minor enhancements.  In
-particular, the new version fixes an incompatibility with the soon to
-be released Ruby 1.8.6.  We strongly recommend upgrading to Rake 0.7.2
-in order to be compatible with the new version of Ruby.
-
-== Changes
-
-=== Bug Fixes in 0.7.2
-
-There are quite a number of bug fixes in the new 0.7.2 version of
-Rake:
-
-* Removed dependency on internal fu_xxx functions from FileUtils.
-
-* Error messages are now send to stderr rather than stdout (from
-  Payton Quackenbush).
-
-* Better error handling on invalid command line arguments (from Payton
-  Quackenbush).
-
-* Fixed some bugs where the application object was going to the global
-  appliation instead of using its own data.
-
-* Fixed the method name leak from FileUtils (bug found by Glenn
-  Vanderburg). 
-
-* Added test for noop, bad_option and verbose flags to sh command.
-
-* Added a description to the gem task in GemPackageTask.
-
-* Fixed a bug when rules have multiple prerequisites (patch by Joel
-  VanderWerf)
-
-* Added the handful of RakeFileUtils to the private method as well.
-
-=== New Features in 0.7.2
-
-The following new features are available in Rake version 0.7.2:
-
-* Added square and curly bracket patterns to FileList#include (Tilman
-  Sauerbeck). 
-
-* FileLists can now pass a block to FileList#exclude to exclude files
-  based on calculated values.
-
-* Added plain filename support to rule dependents (suggested by Nobu
-  Nakada). 
-
-* Added pathmap support to rule dependents.  In other words, if a
-  pathmap format (beginning with a '%') is given as a Rake rule
-  dependent, then the name of the depend will be the name of the
-  target with the pathmap format applied.
-
-* Added a 'tasks' method to a namespace to get a list of tasks
-  associated with the namespace.
-
-* Added tar_command and zip_command options to the Package task.
-
-* The clean task will no longer delete 'core' if it is a directory.
-
-=== Internal Rake Improvements
-
-The following changes will are mainly internal improvements and
-refactorings and have little effect on the end user.  But they may be
-of interest to the general public.
-
-* Added rcov task and updated unit testing for better code coverage.
-
-* Added a 'shame' task to the Rakefile.
-
-* Added rake_extension to handle detection of extension collisions.
-
-* Added a protected 'require "rubygems"' to test/test_application to
-  unbreak cruisecontrol.rb.
-
-* Removed rake_dup.  Now we just simply rescue a bad dup.
-
-* Refactored the FileList reject logic to remove duplication.
-
-* Removed if __FILE__ at the end of the rake.rb file.
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways.  But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies.  You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes.
-The following people either contributed patches, made suggestions or
-made otherwise helpful comments.  Thanks to ...
-
-* Payton Quackenbush -- For several error handling improvements.
-
-* Glenn Vanderburg -- For finding and fixing the method name leak from
-  FileUtils.
-
-* Joel VanderWerf -- for finding and fixing a bug in the handling of
-  multiple prerequisites.
-
-* Tilman Sauerbeck -- For some enhancing FileList to support more
-  advanced file globbing.
-
-* Nobu Nakada -- For suggesting plain file name support to rule dependents.
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.3.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.3.rdoc
deleted file mode 100755
index 39e91bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.7.3.rdoc
+++ /dev/null
@@ -1,47 +0,0 @@
-= Rake 0.7.3 Released
-
-Rake version 0.7.3 is a minor release that includes some refactoring to better
-support custom Rake applications.
-
-== Changes
-
-=== New Features in Version 0.7.3
-
-* Added the +init+ and +top_level+ methods to make the creation of custom Rake applications a bit easier.  E.g.
-
-    gem 'rake', ">= 0.7.3"
-    require 'rake'
-
-    Rake.application.init('myrake')
-   
-    task :default do
-      something_interesting
-    end
-    
-    Rake.application.top_level
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways. But instead of
-cryptic make recipes, Rake uses standard Ruby code to declare tasks and
-dependencies. You have the full power of a modern scripting language built
-right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes. The
-following people either contributed patches, made suggestions or made
-otherwise helpful comments. Thanks to ...
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.0.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.0.rdoc
deleted file mode 100644
index 05e5877..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.0.rdoc
+++ /dev/null
@@ -1,114 +0,0 @@
-= Rake 0.8.0/0.8.1 Released
-
-Rake version 0.8.0 is a new release of rake that includes serveral new
-features.  
-
-== Changes
-
-=== New Features in Version 0.8.0
-
-* Tasks can now receive command line parameters.  See the examples
-  below for more details.
-
-* Comments are limited to 80 columns on output, but full comments can
-  be seen by using the -D parameter. (feature suggested by Jamis
-  Buck).
-
-* Explicit exit(n) calls will now set the exit status to n. (patch
-  provided by Stephen Touset).
-
-* Rake is now compatible with Ruby 1.9.
-
-Version 0.8.1 is a minor update that includes additional Ruby 1.9
-compatibility fixes.
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways. But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies. You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Task Argument Examples
-
-Prior to version 0.8.0, rake was only able to handle command line
-arguments of the form NAME=VALUE that were passed into Rake via the
-ENV hash.  Many folks had asked for some kind of simple command line
-arguments, perhaps using "--" to separate regular task names from
-argument values on the command line.  The problem is that there was no
-easy way to associate positional arguments on the command line with
-different tasks.  Suppose both tasks :a and :b expect a command line
-argument: does the first value go with :a?  What if :b is run first?
-Should it then get the first command line argument.
-
-Rake 0.8.0 solves this problem by explicitly passing values directly
-to the tasks that need them.  For example, if I had a release task
-that required a version number, I could say:
-
-   rake release[0.8.0]
-
-And the string "0.8.0" will be passed to the :release task.  Multiple
-arguments can be passed by separating them with a comma, for example:
-
-   rake name[john,doe]
-
-Just a few words of caution.  The rake task name and its arguments
-need to be a single command line argument to rake.  This generally
-means no spaces.  If spaces are needed, then the entire rake +
-argument string should be quoted.  Something like this:
-
-   rake "name[billy bob, smith]"
-
-(Quoting rules vary between operating systems and shells, so make sure
-you consult the proper docs for your OS/shell).
-
-=== Tasks that Expect Parameters
-
-Parameters are only given to tasks that are setup to expect them.  In
-order to handle named parameters, the task declaration syntax for
-tasks has been extended slightly.
-
-For example, a task that needs a first name and last name might be
-declared as:
-
-   task :name, :first_name, :last_name
-
-The first argument is still the name of the task (:name in this case).
-The next to argumements are the names of the parameters expected by
-:name (:first_name and :last_name in the example).
-
-To access the values of the paramters, the block defining the task
-behaviour can now accept a second parameter:
-
-   task :name, :first_name, :last_name do |t, args|
-     puts "First name is #{args.first_name}"
-     puts "Last  name is #{args.last_name}"
-   end
-
-The first argument of the block "t" is always bound to the current
-task object.  The second argument "args" is an open-struct like object
-that allows access to the task arguments.  Extra command line
-arguments to a task are ignored.  Missing command line arguments are
-given the nil value.
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes. The
-following people either contributed patches, made suggestions or made
-otherwise helpful comments.  Thanks to ...
-
-* Jamis Buck (for comment formatting suggestions)
-* Stephen Touset (for exit status patch).
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.2.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.2.rdoc
deleted file mode 100644
index cfb9941..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.2.rdoc
+++ /dev/null
@@ -1,165 +0,0 @@
-= Rake 0.8.2 Released
-
-Rake version 0.8.2 is a new release of rake that includes a number of
-new features and numerous bug fixes.
-
-== Changes
-
-=== New Features in Version 0.8.2
-
-* Switched from getoptlong to optparse (patches supplied by Edwin
-  Pratomo).
-
-* The -T option will now attempt to dynamically sense the size of the
-  terminal. The -T output will only self-truncate if the output is a
-  tty. However, if RAKE_COLUMNS is explicitly set, it will be honored
-  in any case. (Patch provided by Gavin Stark).
-
-* The following public methods have been added to rake task objects:
-
-  * task.clear -- Clear both the prerequisites and actions of the
-    target rake task.
-  * task.clear_prerequisites -- Clear all the existing prerequisites
-    from the target rake task.
-  * task.clear_actions -- Clear all the existing actions from the
-    target rake task.
-  * task.reenable -- Re-enable a task, allowing its actions to be
-    executed again if the task is invoked.
-
-* Changed RDoc test task to have no default template. This makes it
-  easier for the tempate to pick up the template from the environment.
-
-* Default values for task arguments can easily be specified with the
-  :with_defaults method. (Idea for default argument merging supplied
-  by (Adam Q. Salter)
-
-=== Bug Fixes in Version 0.8.2
-
-* Fixed bug in package task so that it will include the subdir
-  directory in the package for testing. (Bug found by Adam Majer)
-
-* Fixed filename dependency order bug in test_inspect_pending and
-  test_to_s_pending. (Bug found by Adam Majer)
-
-* Fixed check for file utils options to make them immune to the
-  symbol/string differences. (Patch supplied by Edwin Pratomo)
-
-* Fixed bug with rules involving multiple source, where only the first
-  dependency of a rule has any effect (Patch supplied by Emanuel
-  Indermühle)
-
-* FileList#clone and FileList#dup have better sematics w.r.t. taint
-  and freeze.
-
-* Changed from using Mutex to Monitor. Evidently Mutex causes thread
-  join errors when Ruby is compiled with -disable-pthreads. (Patch
-  supplied by Ittay Dror) 
-
-* Fixed bug in makefile parser that had problems with extra spaces in
-  file task names. (Patch supplied by Ittay Dror)
-
-== Other changes in Version 0.8.2
-
-* Added ENV var to rake's own Rakefile to prevent OS X from including
-  extended attribute junk in the rake package tar file. (Bug found by
-  Adam Majer)
-
-* Added a performance patch for reading large makefile dependency
-  files. (Patch supplied by Ittay Dror)
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways. But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies. You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Task Argument Examples
-
-Prior to version 0.8.0, rake was only able to handle command line
-arguments of the form NAME=VALUE that were passed into Rake via the
-ENV hash.  Many folks had asked for some kind of simple command line
-arguments, perhaps using "--" to separate regular task names from
-argument values on the command line.  The problem is that there was no
-easy way to associate positional arguments on the command line with
-different tasks.  Suppose both tasks :a and :b expect a command line
-argument: does the first value go with :a?  What if :b is run first?
-Should it then get the first command line argument.
-
-Rake 0.8.0 solves this problem by explicitly passing values directly
-to the tasks that need them.  For example, if I had a release task
-that required a version number, I could say:
-
-   rake release[0.8.2]
-
-And the string "0.8.2" will be passed to the :release task.  Multiple
-arguments can be passed by separating them with a comma, for example:
-
-   rake name[john,doe]
-
-Just a few words of caution.  The rake task name and its arguments
-need to be a single command line argument to rake.  This generally
-means no spaces.  If spaces are needed, then the entire rake +
-argument string should be quoted.  Something like this:
-
-   rake "name[billy bob, smith]"
-
-(Quoting rules vary between operating systems and shells, so make sure
-you consult the proper docs for your OS/shell).
-
-=== Tasks that Expect Parameters
-
-Parameters are only given to tasks that are setup to expect them.  In
-order to handle named parameters, the task declaration syntax for
-tasks has been extended slightly.
-
-For example, a task that needs a first name and last name might be
-declared as:
-
-   task :name, :first_name, :last_name
-
-The first argument is still the name of the task (:name in this case).
-The next to argumements are the names of the parameters expected by
-:name (:first_name and :last_name in the example).
-
-To access the values of the paramters, the block defining the task
-behaviour can now accept a second parameter:
-
-   task :name, :first_name, :last_name do |t, args|
-     puts "First name is #{args.first_name}"
-     puts "Last  name is #{args.last_name}"
-   end
-
-The first argument of the block "t" is always bound to the current
-task object.  The second argument "args" is an open-struct like object
-that allows access to the task arguments.  Extra command line
-arguments to a task are ignored.  Missing command line arguments are
-given the nil value.
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes. The
-following people either contributed patches, made suggestions or made
-otherwise helpful comments.  Thanks to ...
-
-* Edwin Pratomo
-* Gavin Stark
-* Adam Q. Salter
-* Adam Majer
-* Emanuel Indermühle
-* Ittay Dror
-* Bheeshmar Redheendran (for spending an afternoon with me debugging
-  windows issues)
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.3.rdoc b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.3.rdoc
deleted file mode 100644
index fefc8c0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/doc/release_notes/rake-0.8.3.rdoc
+++ /dev/null
@@ -1,112 +0,0 @@
-= Rake 0.8.3 Released
-
-Rake version 0.8.3 is a bug-fix release of rake.
-
-== Changes
-
-=== Bug Fixes in Version 0.8.3
-
-* Enhanced the system directory detection in windows. We now check
-  HOMEDRIVE/HOMEPATH and USERPROFILE if APPDATA isn't found. (Patch
-  supplied by James Tucker). Rake no long aborts if it can't find the
-  directory.
-
-* Added fix to handle ruby installations in directories with spaces in
-  their name.  
-
-== What is Rake
-
-Rake is a build tool similar to the make program in many ways. But
-instead of cryptic make recipes, Rake uses standard Ruby code to
-declare tasks and dependencies. You have the full power of a modern
-scripting language built right into your build tool.
-
-== Availability
-
-The easiest way to get and install rake is via RubyGems ...
-
-  gem install rake    (you may need root/admin privileges)
-
-Otherwise, you can get it from the more traditional places:
-
-Home Page:: http://rake.rubyforge.org/
-Download::  http://rubyforge.org/project/showfiles.php?group_id=50
-
-== Task Argument Examples
-
-Prior to version 0.8.0, rake was only able to handle command line
-arguments of the form NAME=VALUE that were passed into Rake via the
-ENV hash.  Many folks had asked for some kind of simple command line
-arguments, perhaps using "--" to separate regular task names from
-argument values on the command line.  The problem is that there was no
-easy way to associate positional arguments on the command line with
-different tasks.  Suppose both tasks :a and :b expect a command line
-argument: does the first value go with :a?  What if :b is run first?
-Should it then get the first command line argument.
-
-Rake 0.8.0 solves this problem by explicitly passing values directly
-to the tasks that need them.  For example, if I had a release task
-that required a version number, I could say:
-
-   rake release[0.8.3]
-
-And the string "0.8.3" will be passed to the :release task.  Multiple
-arguments can be passed by separating them with a comma, for example:
-
-   rake name[john,doe]
-
-Just a few words of caution.  The rake task name and its arguments
-need to be a single command line argument to rake.  This generally
-means no spaces.  If spaces are needed, then the entire rake +
-argument string should be quoted.  Something like this:
-
-   rake "name[billy bob, smith]"
-
-(Quoting rules vary between operating systems and shells, so make sure
-you consult the proper docs for your OS/shell).
-
-=== Tasks that Expect Parameters
-
-Parameters are only given to tasks that are setup to expect them.  In
-order to handle named parameters, the task declaration syntax for
-tasks has been extended slightly.
-
-For example, a task that needs a first name and last name might be
-declared as:
-
-   task :name, :first_name, :last_name
-
-The first argument is still the name of the task (:name in this case).
-The next to argumements are the names of the parameters expected by
-:name (:first_name and :last_name in the example).
-
-To access the values of the paramters, the block defining the task
-behaviour can now accept a second parameter:
-
-   task :name, :first_name, :last_name do |t, args|
-     puts "First name is #{args.first_name}"
-     puts "Last  name is #{args.last_name}"
-   end
-
-The first argument of the block "t" is always bound to the current
-task object.  The second argument "args" is an open-struct like object
-that allows access to the task arguments.  Extra command line
-arguments to a task are ignored.  Missing command line arguments are
-given the nil value.
-
-== Thanks
-
-As usual, it was input from users that drove a alot of these changes. The
-following people either contributed patches, made suggestions or made
-otherwise helpful comments.  Thanks to ...
-
-* Edwin Pratomo
-* Gavin Stark
-* Adam Q. Salter
-* Adam Majer
-* Emanuel Indermühle
-* Ittay Dror
-* Bheeshmar Redheendran (for spending an afternoon with me debugging
-  windows issues)
-
--- Jim Weirich
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/install.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/install.rb
deleted file mode 100644
index 2d0dc61..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/install.rb
+++ /dev/null
@@ -1,88 +0,0 @@
-require 'rbconfig'
-require 'find'
-require 'ftools'
-
-include Config
-
-$ruby = CONFIG['ruby_install_name']
-
-##
-# Install a binary file. We patch in on the way through to
-# insert a #! line. If this is a Unix install, we name
-# the command (for example) 'rake' and let the shebang line
-# handle running it. Under windows, we add a '.rb' extension
-# and let file associations to their stuff
-#
-
-def installBIN(from, opfile)
-
-  tmp_dir = nil
-  for t in [".", "/tmp", "c:/temp", $bindir]
-    stat = File.stat(t) rescue next
-    if stat.directory? and stat.writable?
-      tmp_dir = t
-      break
-    end
-  end
-
-  fail "Cannot find a temporary directory" unless tmp_dir
-  tmp_file = File.join(tmp_dir, "_tmp")
-    
-  File.open(from) do |ip|
-    File.open(tmp_file, "w") do |op|
-      ruby = File.join($realbindir, $ruby)
-      op.puts "#!#{ruby} -w"
-      op.write ip.read
-    end
-  end
-
-  opfile += ".rb" if CONFIG["target_os"] =~ /mswin/i
-  File::install(tmp_file, File.join($bindir, opfile), 0755, true)
-  File::unlink(tmp_file)
-end
-
-$sitedir = CONFIG["sitelibdir"]
-unless $sitedir
-  version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
-  $libdir = File.join(CONFIG["libdir"], "ruby", version)
-  $sitedir = $:.find {|x| x =~ /site_ruby/}
-  if !$sitedir
-    $sitedir = File.join($libdir, "site_ruby")
-  elsif $sitedir !~ Regexp.quote(version)
-    $sitedir = File.join($sitedir, version)
-  end
-end
-
-$bindir =  CONFIG["bindir"]
-
-$realbindir = $bindir
-
-bindir = CONFIG["bindir"]
-if (destdir = ENV['DESTDIR'])
-  $bindir  = destdir + $bindir
-  $sitedir = destdir + $sitedir
-  
-  File::makedirs($bindir)
-  File::makedirs($sitedir)
-end
-
-rake_dest = File.join($sitedir, "rake")
-File::makedirs(rake_dest, true)
-File::chmod(0755, rake_dest)
-
-# The library files
-
-files = Dir.chdir('lib') { Dir['**/*.rb'] }
-
-for fn in files
-  fn_dir = File.dirname(fn)
-  target_dir = File.join($sitedir, fn_dir)
-  if ! File.exist?(target_dir)
-    File.makedirs(target_dir)
-  end
-  File::install(File.join('lib', fn), File.join($sitedir, fn), 0644, true)
-end
-
-# and the executable
-
-installBIN("bin/rake", "rake")
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake.rb
deleted file mode 100755
index 313e169..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake.rb
+++ /dev/null
@@ -1,2468 +0,0 @@
-#!/usr/bin/env ruby
-
-#--
-
-# Copyright (c) 2003, 2004, 2005, 2006, 2007  Jim Weirich
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-#++
-#
-# = Rake -- Ruby Make
-#
-# This is the main file for the Rake application.  Normally it is referenced
-# as a library via a require statement, but it can be distributed
-# independently as an application.
-
-RAKEVERSION = '0.8.3'
-
-require 'rbconfig'
-require 'fileutils'
-require 'singleton'
-require 'monitor'
-require 'optparse'
-require 'ostruct'
-
-require 'rake/win32'
-
-######################################################################
-# Rake extensions to Module.
-#
-class Module
-  # Check for an existing method in the current class before extending.  IF
-  # the method already exists, then a warning is printed and the extension is
-  # not added.  Otherwise the block is yielded and any definitions in the
-  # block will take effect.
-  #
-  # Usage:
-  #
-  #   class String
-  #     rake_extension("xyz") do
-  #       def xyz
-  #         ...
-  #       end
-  #     end
-  #   end
-  #
-  def rake_extension(method)
-    if instance_methods.include?(method.to_s) || instance_methods.include?(method.to_sym)
-      $stderr.puts "WARNING: Possible conflict with Rake extension: #{self}##{method} already exists"
-    else
-      yield
-    end
-  end
-end # module Module
-
-
-######################################################################
-# User defined methods to be added to String.
-#
-class String
-  rake_extension("ext") do
-    # Replace the file extension with +newext+.  If there is no extenson on
-    # the string, append the new extension to the end.  If the new extension
-    # is not given, or is the empty string, remove any existing extension.
-    #
-    # +ext+ is a user added method for the String class.
-    def ext(newext='')
-      return self.dup if ['.', '..'].include? self
-      if newext != ''
-        newext = (newext =~ /^\./) ? newext : ("." + newext)
-      end
-      dup.sub!(%r(([^/\\])\.[^./\\]*$)) { $1 + newext } || self + newext
-    end
-  end
-
-  rake_extension("pathmap") do
-    # Explode a path into individual components.  Used by +pathmap+.
-    def pathmap_explode
-      head, tail = File.split(self)
-      return [self] if head == self
-      return [tail] if head == '.' || tail == '/'
-      return [head, tail] if head == '/'
-      return head.pathmap_explode + [tail]
-    end
-    protected :pathmap_explode
-
-    # Extract a partial path from the path.  Include +n+ directories from the
-    # front end (left hand side) if +n+ is positive.  Include |+n+|
-    # directories from the back end (right hand side) if +n+ is negative.
-    def pathmap_partial(n)
-      dirs = File.dirname(self).pathmap_explode
-      partial_dirs =
-        if n > 0
-          dirs[0...n]
-        elsif n < 0
-          dirs.reverse[0...-n].reverse
-        else
-          "."
-        end
-      File.join(partial_dirs)
-    end
-    protected :pathmap_partial
-      
-    # Preform the pathmap replacement operations on the given path. The
-    # patterns take the form 'pat1,rep1;pat2,rep2...'.
-    def pathmap_replace(patterns, &block)
-      result = self
-      patterns.split(';').each do |pair|
-        pattern, replacement = pair.split(',')
-        pattern = Regexp.new(pattern)
-        if replacement == '*' && block_given?
-          result = result.sub(pattern, &block)
-        elsif replacement
-          result = result.sub(pattern, replacement)
-        else
-          result = result.sub(pattern, '')
-        end
-      end
-      result
-    end
-    protected :pathmap_replace
-
-    # Map the path according to the given specification.  The specification
-    # controls the details of the mapping.  The following special patterns are
-    # recognized:
-    #
-    # * <b>%p</b> -- The complete path.
-    # * <b>%f</b> -- The base file name of the path, with its file extension,
-    #   but without any directories.
-    # * <b>%n</b> -- The file name of the path without its file extension.
-    # * <b>%d</b> -- The directory list of the path.
-    # * <b>%x</b> -- The file extension of the path.  An empty string if there
-    #   is no extension.
-    # * <b>%X</b> -- Everything *but* the file extension.
-    # * <b>%s</b> -- The alternate file separater if defined, otherwise use
-    #   the standard file separator.
-    # * <b>%%</b> -- A percent sign.
-    #
-    # The %d specifier can also have a numeric prefix (e.g. '%2d'). If the
-    # number is positive, only return (up to) +n+ directories in the path,
-    # starting from the left hand side.  If +n+ is negative, return (up to)
-    # |+n+| directories from the right hand side of the path.
-    #
-    # Examples:
-    #
-    #   'a/b/c/d/file.txt'.pathmap("%2d")   => 'a/b'
-    #   'a/b/c/d/file.txt'.pathmap("%-2d")  => 'c/d'
-    #
-    # Also the %d, %p, $f, $n, %x, and %X operators can take a
-    # pattern/replacement argument to perform simple string substititions on a
-    # particular part of the path.  The pattern and replacement are speparated
-    # by a comma and are enclosed by curly braces.  The replacement spec comes
-    # after the % character but before the operator letter.  (e.g.
-    # "%{old,new}d").  Muliple replacement specs should be separated by
-    # semi-colons (e.g. "%{old,new;src,bin}d").
-    #
-    # Regular expressions may be used for the pattern, and back refs may be
-    # used in the replacement text.  Curly braces, commas and semi-colons are
-    # excluded from both the pattern and replacement text (let's keep parsing
-    # reasonable).
-    #
-    # For example:
-    #
-    #    "src/org/onestepback/proj/A.java".pathmap("%{^src,bin}X.class")
-    #
-    # returns:
-    #
-    #    "bin/org/onestepback/proj/A.class"
-    #
-    # If the replacement text is '*', then a block may be provided to perform
-    # some arbitrary calculation for the replacement.
-    #
-    # For example:
-    #
-    #   "/path/to/file.TXT".pathmap("%X%{.*,*}x") { |ext|
-    #      ext.downcase
-    #   }
-    #
-    # Returns:
-    #
-    #  "/path/to/file.txt"
-    #
-    def pathmap(spec=nil, &block)
-      return self if spec.nil?
-      result = ''
-      spec.scan(/%\{[^}]*\}-?\d*[sdpfnxX%]|%-?\d+d|%.|[^%]+/) do |frag|
-        case frag
-        when '%f'
-          result << File.basename(self)
-        when '%n'
-          result << File.basename(self).ext
-        when '%d'
-          result << File.dirname(self)
-        when '%x'
-          result << $1 if self =~ /[^\/](\.[^.]+)$/
-        when '%X'
-          if self =~ /^(.*[^\/])(\.[^.]+)$/
-            result << $1
-          else
-            result << self
-          end
-        when '%p'
-          result << self
-        when '%s'
-          result << (File::ALT_SEPARATOR || File::SEPARATOR)
-        when '%-'
-          # do nothing
-        when '%%'
-          result << "%"
-        when /%(-?\d+)d/
-          result << pathmap_partial($1.to_i)
-        when /^%\{([^}]*)\}(\d*[dpfnxX])/
-          patterns, operator = $1, $2
-          result << pathmap('%' + operator).pathmap_replace(patterns, &block)
-        when /^%/
-          fail ArgumentError, "Unknown pathmap specifier #{frag} in '#{spec}'"
-        else
-          result << frag
-        end
-      end
-      result
-    end
-  end
-end # class String
-
-##############################################################################
-module Rake
-
-  # Errors -----------------------------------------------------------
-
-  # Error indicating an ill-formed task declaration.
-  class TaskArgumentError < ArgumentError
-  end
-
-  # Error indicating a recursion overflow error in task selection.
-  class RuleRecursionOverflowError < StandardError
-    def initialize(*args)
-      super
-      @targets = []
-    end
-
-    def add_target(target)
-      @targets << target
-    end
-
-    def message
-      super + ": [" + @targets.reverse.join(' => ') + "]"
-    end
-  end
-
-  # --------------------------------------------------------------------------
-  # Rake module singleton methods.
-  #
-  class << self
-    # Current Rake Application
-    def application
-      @application ||= Rake::Application.new
-    end
-
-    # Set the current Rake application object.
-    def application=(app)
-      @application = app
-    end
-
-    # Return the original directory where the Rake application was started.
-    def original_dir
-      application.original_dir
-    end
-
-  end
-
-  # ##########################################################################
-  # Mixin for creating easily cloned objects.
-  #
-  module Cloneable
-    # Clone an object by making a new object and setting all the instance
-    # variables to the same values.
-    def dup
-      sibling = self.class.new
-      instance_variables.each do |ivar|
-        value = self.instance_variable_get(ivar)
-        new_value = value.clone rescue value
-        sibling.instance_variable_set(ivar, new_value)
-      end
-      sibling.taint if tainted?
-      sibling
-    end
-
-    def clone
-      sibling = dup
-      sibling.freeze if frozen?
-      sibling
-    end
-  end
-
-  ####################################################################
-  # TaskAguments manage the arguments passed to a task.
-  #
-  class TaskArguments
-    include Enumerable
-
-    attr_reader :names
-
-    # Create a TaskArgument object with a list of named arguments
-    # (given by :names) and a set of associated values (given by
-    # :values).  :parent is the parent argument object.
-    def initialize(names, values, parent=nil)
-      @names = names
-      @parent = parent
-      @hash = {}
-      names.each_with_index { |name, i|
-        @hash[name.to_sym] = values[i] unless values[i].nil?
-      }
-    end
-
-    # Create a new argument scope using the prerequisite argument
-    # names.
-    def new_scope(names)
-      values = names.collect { |n| self[n] }
-      self.class.new(names, values, self)
-    end
-
-    # Find an argument value by name or index.
-    def [](index)
-      lookup(index.to_sym)
-    end
-
-    # Specify a hash of default values for task arguments. Use the
-    # defaults only if there is no specific value for the given
-    # argument.
-    def with_defaults(defaults)
-      @hash = defaults.merge(@hash)
-    end
-
-    def each(&block)
-      @hash.each(&block)
-    end
-
-    def method_missing(sym, *args, &block)
-      lookup(sym.to_sym)
-    end
-
-    def to_hash
-      @hash
-    end
-
-    def to_s
-      @hash.inspect
-    end
-
-    def inspect
-      to_s
-    end
-    
-    protected
-    
-    def lookup(name)
-      if @hash.has_key?(name)
-        @hash[name]
-      elsif ENV.has_key?(name.to_s)
-        ENV[name.to_s]
-      elsif ENV.has_key?(name.to_s.upcase)
-        ENV[name.to_s.upcase]
-      elsif @parent
-        @parent.lookup(name)
-      end
-    end
-  end
-
-  EMPTY_TASK_ARGS = TaskArguments.new([], [])
-
-  ####################################################################
-  # InvocationChain tracks the chain of task invocations to detect
-  # circular dependencies.
-  class InvocationChain
-    def initialize(value, tail)
-      @value = value
-      @tail = tail
-    end
-
-    def member?(obj)
-      @value == obj || @tail.member?(obj)
-    end
-
-    def append(value)
-      if member?(value)
-        fail RuntimeError, "Circular dependency detected: #{to_s} => #{value}"
-      end
-      self.class.new(value, self)
-    end
-
-    def to_s
-      "#{prefix}#{@value}"
-    end
-
-    def self.append(value, chain)
-      chain.append(value)
-    end
-
-    private
-
-    def prefix
-      "#{@tail.to_s} => "
-    end
-
-    class EmptyInvocationChain
-      def member?(obj)
-        false
-      end
-      def append(value)
-        InvocationChain.new(value, self)
-      end
-      def to_s
-        "TOP"
-      end
-    end
-
-    EMPTY = EmptyInvocationChain.new
-
-  end # class InvocationChain
-
-end # module Rake
-
-module Rake
-
-  # #########################################################################
-  # A Task is the basic unit of work in a Rakefile.  Tasks have associated
-  # actions (possibly more than one) and a list of prerequisites.  When
-  # invoked, a task will first ensure that all of its prerequisites have an
-  # opportunity to run and then it will execute its own actions.
-  #
-  # Tasks are not usually created directly using the new method, but rather
-  # use the +file+ and +task+ convenience methods.
-  #
-  class Task
-    # List of prerequisites for a task.
-    attr_reader :prerequisites
-
-    # List of actions attached to a task.
-    attr_reader :actions
-
-    # Application owning this task.
-    attr_accessor :application
-
-    # Comment for this task.  Restricted to a single line of no more than 50
-    # characters.
-    attr_reader :comment
-
-    # Full text of the (possibly multi-line) comment.
-    attr_reader :full_comment
-
-    # Array of nested namespaces names used for task lookup by this task.
-    attr_reader :scope
-
-    # Return task name
-    def to_s
-      name
-    end
-
-    def inspect
-      "<#{self.class} #{name} => [#{prerequisites.join(', ')}]>"
-    end
-
-    # List of sources for task.
-    attr_writer :sources
-    def sources
-      @sources ||= []
-    end
-
-    # First source from a rule (nil if no sources)
-    def source
-      @sources.first if defined?(@sources)
-    end
-
-    # Create a task named +task_name+ with no actions or prerequisites. Use
-    # +enhance+ to add actions and prerequisites.
-    def initialize(task_name, app)
-      @name = task_name.to_s
-      @prerequisites = []
-      @actions = []
-      @already_invoked = false
-      @full_comment = nil
-      @comment = nil
-      @lock = Monitor.new
-      @application = app
-      @scope = app.current_scope
-      @arg_names = nil
-    end
-
-    # Enhance a task with prerequisites or actions.  Returns self.
-    def enhance(deps=nil, &block)
-      @prerequisites |= deps if deps
-      @actions << block if block_given?
-      self
-    end
-
-    # Name of the task, including any namespace qualifiers.
-    def name
-      @name.to_s
-    end
-
-    # Name of task with argument list description.
-    def name_with_args # :nodoc:
-      if arg_description
-        "#{name}#{arg_description}"
-      else
-        name
-      end
-    end
-
-    # Argument description (nil if none).
-    def arg_description # :nodoc:
-      @arg_names ? "[#{(arg_names || []).join(',')}]" : nil
-    end
-
-    # Name of arguments for this task.
-    def arg_names
-      @arg_names || []
-    end
-
-    # Reenable the task, allowing its tasks to be executed if the task
-    # is invoked again.
-    def reenable
-      @already_invoked = false
-    end
-
-    # Clear the existing prerequisites and actions of a rake task.
-    def clear
-      clear_prerequisites
-      clear_actions
-      self
-    end
-
-    # Clear the existing prerequisites of a rake task.
-    def clear_prerequisites
-      prerequisites.clear
-      self
-    end
-
-    # Clear the existing actions on a rake task.
-    def clear_actions
-      actions.clear
-      self
-    end
-
-    # Invoke the task if it is needed.  Prerequites are invoked first.
-    def invoke(*args)
-      task_args = TaskArguments.new(arg_names, args)
-      invoke_with_call_chain(task_args, InvocationChain::EMPTY)
-    end
-
-    # Same as invoke, but explicitly pass a call chain to detect
-    # circular dependencies.
-    def invoke_with_call_chain(task_args, invocation_chain) # :nodoc:
-      new_chain = InvocationChain.append(self, invocation_chain)
-      @lock.synchronize do
-        if application.options.trace
-          puts "** Invoke #{name} #{format_trace_flags}"
-        end
-        return if @already_invoked
-        @already_invoked = true
-        invoke_prerequisites(task_args, new_chain)
-        execute(task_args) if needed?
-      end
-    end
-    protected :invoke_with_call_chain
-
-    # Invoke all the prerequisites of a task.
-    def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
-      @prerequisites.each { |n|
-        prereq = application[n, @scope]
-        prereq_args = task_args.new_scope(prereq.arg_names)
-        prereq.invoke_with_call_chain(prereq_args, invocation_chain)
-      }
-    end
-
-    # Format the trace flags for display.
-    def format_trace_flags
-      flags = []
-      flags << "first_time" unless @already_invoked
-      flags << "not_needed" unless needed?
-      flags.empty? ? "" : "(" + flags.join(", ") + ")"
-    end
-    private :format_trace_flags
-
-    # Execute the actions associated with this task.
-    def execute(args=nil)
-      args ||= EMPTY_TASK_ARGS
-      if application.options.dryrun
-        puts "** Execute (dry run) #{name}"
-        return
-      end
-      if application.options.trace
-        puts "** Execute #{name}"
-      end
-      application.enhance_with_matching_rule(name) if @actions.empty?
-      @actions.each do |act|
-        case act.arity
-        when 1
-          act.call(self)
-        else
-          act.call(self, args)
-        end
-      end
-    end
-
-    # Is this task needed?
-    def needed?
-      true
-    end
-
-    # Timestamp for this task.  Basic tasks return the current time for their
-    # time stamp.  Other tasks can be more sophisticated.
-    def timestamp
-      @prerequisites.collect { |p| application[p].timestamp }.max || Time.now
-    end
-
-    # Add a description to the task.  The description can consist of an option
-    # argument list (enclosed brackets) and an optional comment.
-    def add_description(description)
-      return if ! description
-      comment = description.strip
-      add_comment(comment) if comment && ! comment.empty?
-    end
-
-    # Writing to the comment attribute is the same as adding a description.
-    def comment=(description)
-      add_description(description)
-    end
-
-    # Add a comment to the task.  If a comment alread exists, separate
-    # the new comment with " / ".
-    def add_comment(comment)
-      if @full_comment
-        @full_comment << " / "
-      else
-        @full_comment = ''
-      end
-      @full_comment << comment
-      if @full_comment =~ /\A([^.]+?\.)( |$)/
-        @comment = $1
-      else
-        @comment = @full_comment
-      end
-    end
-    private :add_comment
-
-    # Set the names of the arguments for this task. +args+ should be
-    # an array of symbols, one for each argument name.
-    def set_arg_names(args)
-      @arg_names = args.map { |a| a.to_sym }
-    end
-
-    # Return a string describing the internal state of a task.  Useful for
-    # debugging.
-    def investigation
-      result = "------------------------------\n"
-      result << "Investigating #{name}\n"
-      result << "class: #{self.class}\n"
-      result <<  "task needed: #{needed?}\n"
-      result <<  "timestamp: #{timestamp}\n"
-      result << "pre-requisites: \n"
-      prereqs = @prerequisites.collect {|name| application[name]}
-      prereqs.sort! {|a,b| a.timestamp <=> b.timestamp}
-      prereqs.each do |p|
-        result << "--#{p.name} (#{p.timestamp})\n"
-      end
-      latest_prereq = @prerequisites.collect{|n| application[n].timestamp}.max
-      result <<  "latest-prerequisite time: #{latest_prereq}\n"
-      result << "................................\n\n"
-      return result
-    end
-
-    # ----------------------------------------------------------------
-    # Rake Module Methods
-    #
-    class << self
-
-      # Clear the task list.  This cause rake to immediately forget all the
-      # tasks that have been assigned.  (Normally used in the unit tests.)
-      def clear
-        Rake.application.clear
-      end
-
-      # List of all defined tasks.
-      def tasks
-        Rake.application.tasks
-      end
-
-      # Return a task with the given name.  If the task is not currently
-      # known, try to synthesize one from the defined rules.  If no rules are
-      # found, but an existing file matches the task name, assume it is a file
-      # task with no dependencies or actions.
-      def [](task_name)
-        Rake.application[task_name]
-      end
-
-      # TRUE if the task name is already defined.
-      def task_defined?(task_name)
-        Rake.application.lookup(task_name) != nil
-      end
-
-      # Define a task given +args+ and an option block.  If a rule with the
-      # given name already exists, the prerequisites and actions are added to
-      # the existing task.  Returns the defined task.
-      def define_task(*args, &block)
-        Rake.application.define_task(self, *args, &block)
-      end
-
-      # Define a rule for synthesizing tasks.
-      def create_rule(*args, &block)
-        Rake.application.create_rule(*args, &block)
-      end
-
-      # Apply the scope to the task name according to the rules for
-      # this kind of task.  Generic tasks will accept the scope as
-      # part of the name.
-      def scope_name(scope, task_name)
-        (scope + [task_name]).join(':')
-      end
-
-    end # class << Rake::Task
-  end # class Rake::Task
-
-
-  # #########################################################################
-  # A FileTask is a task that includes time based dependencies.  If any of a
-  # FileTask's prerequisites have a timestamp that is later than the file
-  # represented by this task, then the file must be rebuilt (using the
-  # supplied actions).
-  #
-  class FileTask < Task
-
-    # Is this file task needed?  Yes if it doesn't exist, or if its time stamp
-    # is out of date.
-    def needed?
-      return true unless File.exist?(name)
-      return true if out_of_date?(timestamp)
-      false
-    end
-
-    # Time stamp for file task.
-    def timestamp
-      if File.exist?(name)
-        File.mtime(name.to_s)
-      else
-        Rake::EARLY
-      end
-    end
-
-    private
-
-    # Are there any prerequisites with a later time than the given time stamp?
-    def out_of_date?(stamp)
-      @prerequisites.any? { |n| application[n].timestamp > stamp}
-    end
-
-    # ----------------------------------------------------------------
-    # Task class methods.
-    #
-    class << self
-      # Apply the scope to the task name according to the rules for this kind
-      # of task.  File based tasks ignore the scope when creating the name.
-      def scope_name(scope, task_name)
-        task_name
-      end
-    end
-  end # class Rake::FileTask
-
-  # #########################################################################
-  # A FileCreationTask is a file task that when used as a dependency will be
-  # needed if and only if the file has not been created.  Once created, it is
-  # not re-triggered if any of its dependencies are newer, nor does trigger
-  # any rebuilds of tasks that depend on it whenever it is updated.
-  #
-  class FileCreationTask < FileTask
-    # Is this file task needed?  Yes if it doesn't exist.
-    def needed?
-      ! File.exist?(name)
-    end
-
-    # Time stamp for file creation task.  This time stamp is earlier
-    # than any other time stamp.
-    def timestamp
-      Rake::EARLY
-    end
-  end
-
-  # #########################################################################
-  # Same as a regular task, but the immediate prerequisites are done in
-  # parallel using Ruby threads.
-  #
-  class MultiTask < Task
-    def invoke_prerequisites(args, invocation_chain)
-      threads = @prerequisites.collect { |p|
-        Thread.new(p) { |r| application[r].invoke_with_call_chain(args, invocation_chain) }
-      }
-      threads.each { |t| t.join }
-    end
-  end
-end # module Rake
-
-# ###########################################################################
-# Task Definition Functions ...
-
-# Declare a basic task.
-#
-# Example:
-#   task :clobber => [:clean] do
-#     rm_rf "html"
-#   end
-#
-def task(*args, &block)
-  Rake::Task.define_task(*args, &block)
-end
-
-
-# Declare a file task.
-#
-# Example:
-#   file "config.cfg" => ["config.template"] do
-#     open("config.cfg", "w") do |outfile|
-#       open("config.template") do |infile|
-#         while line = infile.gets
-#           outfile.puts line
-#         end
-#       end
-#     end
-#  end
-#
-def file(*args, &block)
-  Rake::FileTask.define_task(*args, &block)
-end
-
-# Declare a file creation task.
-# (Mainly used for the directory command).
-def file_create(args, &block)
-  Rake::FileCreationTask.define_task(args, &block)
-end
-
-# Declare a set of files tasks to create the given directories on demand.
-#
-# Example:
-#   directory "testdata/doc"
-#
-def directory(dir)
-  Rake.each_dir_parent(dir) do |d|
-    file_create d do |t|
-      mkdir_p t.name if ! File.exist?(t.name)
-    end
-  end
-end
-
-# Declare a task that performs its prerequisites in parallel. Multitasks does
-# *not* guarantee that its prerequisites will execute in any given order
-# (which is obvious when you think about it)
-#
-# Example:
-#   multitask :deploy => [:deploy_gem, :deploy_rdoc]
-#
-def multitask(args, &block)
-  Rake::MultiTask.define_task(args, &block)
-end
-
-# Create a new rake namespace and use it for evaluating the given block.
-# Returns a NameSpace object that can be used to lookup tasks defined in the
-# namespace.
-#
-# E.g.
-#
-#   ns = namespace "nested" do
-#     task :run
-#   end
-#   task_run = ns[:run] # find :run in the given namespace.
-#
-def namespace(name=nil, &block)
-  Rake.application.in_namespace(name, &block)
-end
-
-# Declare a rule for auto-tasks.
-#
-# Example:
-#  rule '.o' => '.c' do |t|
-#    sh %{cc -o #{t.name} #{t.source}}
-#  end
-#
-def rule(*args, &block)
-  Rake::Task.create_rule(*args, &block)
-end
-
-# Describe the next rake task.
-#
-# Example:
-#   desc "Run the Unit Tests"
-#   task :test => [:build]
-#     runtests
-#   end
-#
-def desc(description)
-  Rake.application.last_description = description
-end
-
-# Import the partial Rakefiles +fn+.  Imported files are loaded _after_ the
-# current file is completely loaded.  This allows the import statement to
-# appear anywhere in the importing file, and yet allowing the imported files
-# to depend on objects defined in the importing file.
-#
-# A common use of the import statement is to include files containing
-# dependency declarations.
-#
-# See also the --rakelibdir command line option.
-#
-# Example:
-#   import ".depend", "my_rules"
-#
-def import(*fns)
-  fns.each do |fn|
-    Rake.application.add_import(fn)
-  end
-end
-
-# ###########################################################################
-# This a FileUtils extension that defines several additional commands to be
-# added to the FileUtils utility functions.
-#
-module FileUtils
-  RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']).
-    sub(/.*\s.*/m, '"\&"')
-
-  OPT_TABLE['sh']  = %w(noop verbose)
-  OPT_TABLE['ruby'] = %w(noop verbose)
-
-  # Run the system command +cmd+. If multiple arguments are given the command
-  # is not run with the shell (same semantics as Kernel::exec and
-  # Kernel::system).
-  #
-  # Example:
-  #   sh %{ls -ltr}
-  #
-  #   sh 'ls', 'file with spaces'
-  #
-  #   # check exit status after command runs
-  #   sh %{grep pattern file} do |ok, res|
-  #     if ! ok
-  #       puts "pattern not found (status = #{res.exitstatus})"
-  #     end
-  #   end
-  #
-  def sh(*cmd, &block)
-    options = (Hash === cmd.last) ? cmd.pop : {}
-    unless block_given?
-      show_command = cmd.join(" ")
-      show_command = show_command[0,42] + "..."
-      # TODO code application logic heref show_command.length > 45
-      block = lambda { |ok, status|
-        ok or fail "Command failed with status (#{status.exitstatus}): [#{show_command}]"
-      }
-    end
-    if RakeFileUtils.verbose_flag == :default
-      options[:verbose] = false
-    else
-      options[:verbose] ||= RakeFileUtils.verbose_flag
-    end
-    options[:noop]    ||= RakeFileUtils.nowrite_flag
-    rake_check_options options, :noop, :verbose
-    rake_output_message cmd.join(" ") if options[:verbose]
-    unless options[:noop]
-      res = rake_system(*cmd)
-      block.call(res, $?)
-    end
-  end
-
-  def rake_system(*cmd)
-    if Rake::Win32.windows?
-      Rake::Win32.rake_system(*cmd)
-    else
-      system(*cmd)
-    end
-  end
-  private :rake_system
-
-  # Run a Ruby interpreter with the given arguments.
-  #
-  # Example:
-  #   ruby %{-pe '$_.upcase!' <README}
-  #
-  def ruby(*args,&block)
-    options = (Hash === args.last) ? args.pop : {}
-    if args.length > 1 then
-      sh(*([RUBY] + args + [options]), &block)
-    else
-      sh("#{RUBY} #{args.first}", options, &block)
-    end
-  end
-
-  LN_SUPPORTED = [true]
-
-  #  Attempt to do a normal file link, but fall back to a copy if the link
-  #  fails.
-  def safe_ln(*args)
-    unless LN_SUPPORTED[0]
-      cp(*args)
-    else
-      begin
-        ln(*args)
-      rescue StandardError, NotImplementedError => ex
-        LN_SUPPORTED[0] = false
-        cp(*args)
-      end
-    end
-  end
-
-  # Split a file path into individual directory names.
-  #
-  # Example:
-  #   split_all("a/b/c") =>  ['a', 'b', 'c']
-  #
-  def split_all(path)
-    head, tail = File.split(path)
-    return [tail] if head == '.' || tail == '/'
-    return [head, tail] if head == '/'
-    return split_all(head) + [tail]
-  end
-end
-
-# ###########################################################################
-# RakeFileUtils provides a custom version of the FileUtils methods that
-# respond to the <tt>verbose</tt> and <tt>nowrite</tt> commands.
-#
-module RakeFileUtils
-  include FileUtils
-
-  class << self
-    attr_accessor :verbose_flag, :nowrite_flag
-  end
-  RakeFileUtils.verbose_flag = :default
-  RakeFileUtils.nowrite_flag = false
-
-  $fileutils_verbose = true
-  $fileutils_nowrite = false
-
-  FileUtils::OPT_TABLE.each do |name, opts|
-    default_options = []
-    if opts.include?(:verbose) || opts.include?("verbose")
-      default_options << ':verbose => RakeFileUtils.verbose_flag'
-    end
-    if opts.include?(:noop) || opts.include?("noop")
-      default_options << ':noop => RakeFileUtils.nowrite_flag'
-    end
-
-    next if default_options.empty?
-    module_eval(<<-EOS, __FILE__, __LINE__ + 1)
-    def #{name}( *args, &block )
-      super(
-        *rake_merge_option(args,
-          #{default_options.join(', ')}
-          ), &block)
-    end
-    EOS
-  end
-
-  # Get/set the verbose flag controlling output from the FileUtils utilities.
-  # If verbose is true, then the utility method is echoed to standard output.
-  #
-  # Examples:
-  #    verbose              # return the current value of the verbose flag
-  #    verbose(v)           # set the verbose flag to _v_.
-  #    verbose(v) { code }  # Execute code with the verbose flag set temporarily to _v_.
-  #                         # Return to the original value when code is done.
-  def verbose(value=nil)
-    oldvalue = RakeFileUtils.verbose_flag
-    RakeFileUtils.verbose_flag = value unless value.nil?
-    if block_given?
-      begin
-        yield
-      ensure
-        RakeFileUtils.verbose_flag = oldvalue
-      end
-    end
-    RakeFileUtils.verbose_flag
-  end
-
-  # Get/set the nowrite flag controlling output from the FileUtils utilities.
-  # If verbose is true, then the utility method is echoed to standard output.
-  #
-  # Examples:
-  #    nowrite              # return the current value of the nowrite flag
-  #    nowrite(v)           # set the nowrite flag to _v_.
-  #    nowrite(v) { code }  # Execute code with the nowrite flag set temporarily to _v_.
-  #                         # Return to the original value when code is done.
-  def nowrite(value=nil)
-    oldvalue = RakeFileUtils.nowrite_flag
-    RakeFileUtils.nowrite_flag = value unless value.nil?
-    if block_given?
-      begin
-        yield
-      ensure
-        RakeFileUtils.nowrite_flag = oldvalue
-      end
-    end
-    oldvalue
-  end
-
-  # Use this function to prevent protentially destructive ruby code from
-  # running when the :nowrite flag is set.
-  #
-  # Example:
-  #
-  #   when_writing("Building Project") do
-  #     project.build
-  #   end
-  #
-  # The following code will build the project under normal conditions. If the
-  # nowrite(true) flag is set, then the example will print:
-  #      DRYRUN: Building Project
-  # instead of actually building the project.
-  #
-  def when_writing(msg=nil)
-    if RakeFileUtils.nowrite_flag
-      puts "DRYRUN: #{msg}" if msg
-    else
-      yield
-    end
-  end
-
-  # Merge the given options with the default values.
-  def rake_merge_option(args, defaults)
-    if Hash === args.last
-      defaults.update(args.last)
-      args.pop
-    end
-    args.push defaults
-    args
-  end
-  private :rake_merge_option
-
-  # Send the message to the default rake output (which is $stderr).
-  def rake_output_message(message)
-    $stderr.puts(message)
-  end
-  private :rake_output_message
-
-  # Check that the options do not contain options not listed in +optdecl+.  An
-  # ArgumentError exception is thrown if non-declared options are found.
-  def rake_check_options(options, *optdecl)
-    h = options.dup
-    optdecl.each do |name|
-      h.delete name
-    end
-    raise ArgumentError, "no such option: #{h.keys.join(' ')}" unless h.empty?
-  end
-  private :rake_check_options
-
-  extend self
-end
-
-# ###########################################################################
-# Include the FileUtils file manipulation functions in the top level module,
-# but mark them private so that they don't unintentionally define methods on
-# other objects.
-
-include RakeFileUtils
-private(*FileUtils.instance_methods(false))
-private(*RakeFileUtils.instance_methods(false))
-
-######################################################################
-module Rake
-
-  # #########################################################################
-  # A FileList is essentially an array with a few helper methods defined to
-  # make file manipulation a bit easier.
-  #
-  # FileLists are lazy.  When given a list of glob patterns for possible files
-  # to be included in the file list, instead of searching the file structures
-  # to find the files, a FileList holds the pattern for latter use.
-  #
-  # This allows us to define a number of FileList to match any number of
-  # files, but only search out the actual files when then FileList itself is
-  # actually used.  The key is that the first time an element of the
-  # FileList/Array is requested, the pending patterns are resolved into a real
-  # list of file names.
-  #
-  class FileList
-
-    include Cloneable
-
-    # == Method Delegation
-    #
-    # The lazy evaluation magic of FileLists happens by implementing all the
-    # array specific methods to call +resolve+ before delegating the heavy
-    # lifting to an embedded array object (@items).
-    #
-    # In addition, there are two kinds of delegation calls.  The regular kind
-    # delegates to the @items array and returns the result directly.  Well,
-    # almost directly.  It checks if the returned value is the @items object
-    # itself, and if so will return the FileList object instead.
-    #
-    # The second kind of delegation call is used in methods that normally
-    # return a new Array object.  We want to capture the return value of these
-    # methods and wrap them in a new FileList object.  We enumerate these
-    # methods in the +SPECIAL_RETURN+ list below.
-
-    # List of array methods (that are not in +Object+) that need to be
-    # delegated.
-    ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).map { |n| n.to_s }
-
-    # List of additional methods that must be delegated.
-    MUST_DEFINE = %w[to_a inspect]
-
-    # List of methods that should not be delegated here (we define special
-    # versions of them explicitly below).
-    MUST_NOT_DEFINE = %w[to_a to_ary partition *]
-
-    # List of delegated methods that return new array values which need
-    # wrapping.
-    SPECIAL_RETURN = %w[
-      map collect sort sort_by select find_all reject grep
-      compact flatten uniq values_at
-      + - & |
-    ]
-
-    DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).collect{ |s| s.to_s }.sort.uniq
-
-    # Now do the delegation.
-    DELEGATING_METHODS.each_with_index do |sym, i|
-      if SPECIAL_RETURN.include?(sym)
-        ln = __LINE__+1
-        class_eval %{
-          def #{sym}(*args, &block)
-            resolve
-            result = @items.send(:#{sym}, *args, &block)
-            FileList.new.import(result)
-          end
-        }, __FILE__, ln
-      else
-        ln = __LINE__+1
-        class_eval %{
-          def #{sym}(*args, &block)
-            resolve
-            result = @items.send(:#{sym}, *args, &block)
-            result.object_id == @items.object_id ? self : result
-          end
-        }, __FILE__, ln
-      end
-    end
-
-    # Create a file list from the globbable patterns given.  If you wish to
-    # perform multiple includes or excludes at object build time, use the
-    # "yield self" pattern.
-    #
-    # Example:
-    #   file_list = FileList.new('lib/**/*.rb', 'test/test*.rb')
-    #
-    #   pkg_files = FileList.new('lib/**/*') do |fl|
-    #     fl.exclude(/\bCVS\b/)
-    #   end
-    #
-    def initialize(*patterns)
-      @pending_add = []
-      @pending = false
-      @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
-      @exclude_procs = DEFAULT_IGNORE_PROCS.dup
-      @exclude_re = nil
-      @items = []
-      patterns.each { |pattern| include(pattern) }
-      yield self if block_given?
-    end
-
-    # Add file names defined by glob patterns to the file list.  If an array
-    # is given, add each element of the array.
-    #
-    # Example:
-    #   file_list.include("*.java", "*.cfg")
-    #   file_list.include %w( math.c lib.h *.o )
-    #
-    def include(*filenames)
-      # TODO: check for pending
-      filenames.each do |fn|
-        if fn.respond_to? :to_ary
-          include(*fn.to_ary)
-        else
-          @pending_add << fn
-        end
-      end
-      @pending = true
-      self
-    end
-    alias :add :include
-
-    # Register a list of file name patterns that should be excluded from the
-    # list.  Patterns may be regular expressions, glob patterns or regular
-    # strings.  In addition, a block given to exclude will remove entries that
-    # return true when given to the block.
-    #
-    # Note that glob patterns are expanded against the file system. If a file
-    # is explicitly added to a file list, but does not exist in the file
-    # system, then an glob pattern in the exclude list will not exclude the
-    # file.
-    #
-    # Examples:
-    #   FileList['a.c', 'b.c'].exclude("a.c") => ['b.c']
-    #   FileList['a.c', 'b.c'].exclude(/^a/)  => ['b.c']
-    #
-    # If "a.c" is a file, then ...
-    #   FileList['a.c', 'b.c'].exclude("a.*") => ['b.c']
-    #
-    # If "a.c" is not a file, then ...
-    #   FileList['a.c', 'b.c'].exclude("a.*") => ['a.c', 'b.c']
-    #
-    def exclude(*patterns, &block)
-      patterns.each do |pat|
-        @exclude_patterns << pat
-      end
-      if block_given?
-        @exclude_procs << block
-      end
-      resolve_exclude if ! @pending
-      self
-    end
-
-
-    # Clear all the exclude patterns so that we exclude nothing.
-    def clear_exclude
-      @exclude_patterns = []
-      @exclude_procs = []
-      calculate_exclude_regexp if ! @pending
-      self
-    end
-
-    # Define equality.
-    def ==(array)
-      to_ary == array
-    end
-
-    # Return the internal array object.
-    def to_a
-      resolve
-      @items
-    end
-
-    # Return the internal array object.
-    def to_ary
-      to_a
-    end
-
-    # Lie about our class.
-    def is_a?(klass)
-      klass == Array || super(klass)
-    end
-    alias kind_of? is_a?
-
-    # Redefine * to return either a string or a new file list.
-    def *(other)
-      result = @items * other
-      case result
-      when Array
-        FileList.new.import(result)
-      else
-        result
-      end
-    end
-
-    # Resolve all the pending adds now.
-    def resolve
-      if @pending
-        @pending = false
-        @pending_add.each do |fn| resolve_add(fn) end
-        @pending_add = []
-        resolve_exclude
-      end
-      self
-    end
-
-    def calculate_exclude_regexp
-      ignores = []
-      @exclude_patterns.each do |pat|
-        case pat
-        when Regexp
-          ignores << pat
-        when /[*?]/
-          Dir[pat].each do |p| ignores << p end
-        else
-          ignores << Regexp.quote(pat)
-        end
-      end
-      if ignores.empty?
-        @exclude_re = /^$/
-      else
-        re_str = ignores.collect { |p| "(" + p.to_s + ")" }.join("|")
-        @exclude_re = Regexp.new(re_str)
-      end
-    end
-
-    def resolve_add(fn)
-      case fn
-      when %r{[*?\[\{]}
-        add_matching(fn)
-      else
-        self << fn
-      end
-    end
-    private :resolve_add
-
-    def resolve_exclude
-      calculate_exclude_regexp
-      reject! { |fn| exclude?(fn) }
-      self
-    end
-    private :resolve_exclude
-
-    # Return a new FileList with the results of running +sub+ against each
-    # element of the oringal list.
-    #
-    # Example:
-    #   FileList['a.c', 'b.c'].sub(/\.c$/, '.o')  => ['a.o', 'b.o']
-    #
-    def sub(pat, rep)
-      inject(FileList.new) { |res, fn| res << fn.sub(pat,rep) }
-    end
-
-    # Return a new FileList with the results of running +gsub+ against each
-    # element of the original list.
-    #
-    # Example:
-    #   FileList['lib/test/file', 'x/y'].gsub(/\//, "\\")
-    #      => ['lib\\test\\file', 'x\\y']
-    #
-    def gsub(pat, rep)
-      inject(FileList.new) { |res, fn| res << fn.gsub(pat,rep) }
-    end
-
-    # Same as +sub+ except that the oringal file list is modified.
-    def sub!(pat, rep)
-      each_with_index { |fn, i| self[i] = fn.sub(pat,rep) }
-      self
-    end
-
-    # Same as +gsub+ except that the original file list is modified.
-    def gsub!(pat, rep)
-      each_with_index { |fn, i| self[i] = fn.gsub(pat,rep) }
-      self
-    end
-
-    # Apply the pathmap spec to each of the included file names, returning a
-    # new file list with the modified paths.  (See String#pathmap for
-    # details.)
-    def pathmap(spec=nil)
-      collect { |fn| fn.pathmap(spec) }
-    end
-
-    # Return a new array with <tt>String#ext</tt> method applied to each
-    # member of the array.
-    #
-    # This method is a shortcut for:
-    #
-    #    array.collect { |item| item.ext(newext) }
-    #
-    # +ext+ is a user added method for the Array class.
-    def ext(newext='')
-      collect { |fn| fn.ext(newext) }
-    end
-
-
-    # Grep each of the files in the filelist using the given pattern. If a
-    # block is given, call the block on each matching line, passing the file
-    # name, line number, and the matching line of text.  If no block is given,
-    # a standard emac style file:linenumber:line message will be printed to
-    # standard out.
-    def egrep(pattern)
-      each do |fn|
-        open(fn) do |inf|
-          count = 0
-          inf.each do |line|
-            count += 1
-            if pattern.match(line)
-              if block_given?
-                yield fn, count, line
-              else
-                puts "#{fn}:#{count}:#{line}"
-              end
-            end
-          end
-        end
-      end
-    end
-
-    # Return a new file list that only contains file names from the current
-    # file list that exist on the file system.
-    def existing
-      select { |fn| File.exist?(fn) }
-    end
-
-    # Modify the current file list so that it contains only file name that
-    # exist on the file system.
-    def existing!
-      resolve
-      @items = @items.select { |fn| File.exist?(fn) }
-      self
-    end
-
-    # FileList version of partition.  Needed because the nested arrays should
-    # be FileLists in this version.
-    def partition(&block)       # :nodoc:
-      resolve
-      result = @items.partition(&block)
-      [
-        FileList.new.import(result[0]),
-        FileList.new.import(result[1]),
-      ]
-    end
-
-    # Convert a FileList to a string by joining all elements with a space.
-    def to_s
-      resolve
-      self.join(' ')
-    end
-
-    # Add matching glob patterns.
-    def add_matching(pattern)
-      Dir[pattern].each do |fn|
-        self << fn unless exclude?(fn)
-      end
-    end
-    private :add_matching
-
-    # Should the given file name be excluded?
-    def exclude?(fn)
-      calculate_exclude_regexp unless @exclude_re
-      fn =~ @exclude_re || @exclude_procs.any? { |p| p.call(fn) }
-    end
-
-    DEFAULT_IGNORE_PATTERNS = [
-      /(^|[\/\\])CVS([\/\\]|$)/,
-      /(^|[\/\\])\.svn([\/\\]|$)/,
-      /\.bak$/,
-      /~$/
-    ]
-    DEFAULT_IGNORE_PROCS = [
-      proc { |fn| fn =~ /(^|[\/\\])core$/ && ! File.directory?(fn) }
-    ]
-#    @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
-
-    def import(array)
-      @items = array
-      self
-    end
-
-    class << self
-      # Create a new file list including the files listed. Similar to:
-      #
-      #   FileList.new(*args)
-      def [](*args)
-        new(*args)
-      end
-    end
-  end # FileList
-end
-
-module Rake
-  class << self
-
-    # Yield each file or directory component.
-    def each_dir_parent(dir)    # :nodoc:
-      old_length = nil
-      while dir != '.' && dir.length != old_length
-        yield(dir)
-        old_length = dir.length
-        dir = File.dirname(dir)
-      end
-    end
-  end
-end # module Rake
-
-# Alias FileList to be available at the top level.
-FileList = Rake::FileList
-
-# ###########################################################################
-module Rake
-
-  # Default Rakefile loader used by +import+.
-  class DefaultLoader
-    def load(fn)
-      Kernel.load(File.expand_path(fn))
-    end
-  end
-
-  # EarlyTime is a fake timestamp that occurs _before_ any other time value.
-  class EarlyTime
-    include Comparable
-    include Singleton
-
-    def <=>(other)
-      -1
-    end
-
-    def to_s
-      "<EARLY TIME>"
-    end
-  end
-
-  EARLY = EarlyTime.instance
-end # module Rake
-
-# ###########################################################################
-# Extensions to time to allow comparisons with an early time class.
-#
-class Time
-  alias rake_original_time_compare :<=>
-  def <=>(other)
-    if Rake::EarlyTime === other
-      - other.<=>(self)
-    else
-      rake_original_time_compare(other)
-    end
-  end
-end # class Time
-
-module Rake
-
-  ####################################################################
-  # The NameSpace class will lookup task names in the the scope
-  # defined by a +namespace+ command.
-  #
-  class NameSpace
-
-    # Create a namespace lookup object using the given task manager
-    # and the list of scopes.
-    def initialize(task_manager, scope_list)
-      @task_manager = task_manager
-      @scope = scope_list.dup
-    end
-
-    # Lookup a task named +name+ in the namespace.
-    def [](name)
-      @task_manager.lookup(name, @scope)
-    end
-
-    # Return the list of tasks defined in this namespace.
-    def tasks
-      @task_manager.tasks
-    end
-  end # NameSpace
-
-
-  ####################################################################
-  # The TaskManager module is a mixin for managing tasks.
-  module TaskManager
-    # Track the last comment made in the Rakefile.
-    attr_accessor :last_description
-    alias :last_comment :last_description    # Backwards compatibility
-
-    def initialize
-      super
-      @tasks = Hash.new
-      @rules = Array.new
-      @scope = Array.new
-      @last_description = nil
-    end
-
-    def create_rule(*args, &block)
-      pattern, arg_names, deps = resolve_args(args)
-      pattern = Regexp.new(Regexp.quote(pattern) + '$') if String === pattern
-      @rules << [pattern, deps, block]
-    end
-
-    def define_task(task_class, *args, &block)
-      task_name, arg_names, deps = resolve_args(args)
-      task_name = task_class.scope_name(@scope, task_name)
-      deps = [deps] unless deps.respond_to?(:to_ary)
-      deps = deps.collect {|d| d.to_s }
-      task = intern(task_class, task_name)
-      task.set_arg_names(arg_names) unless arg_names.empty?
-      task.add_description(@last_description)
-      @last_description = nil
-      task.enhance(deps, &block)
-      task
-    end
-
-    # Lookup a task.  Return an existing task if found, otherwise
-    # create a task of the current type.
-    def intern(task_class, task_name)
-      @tasks[task_name.to_s] ||= task_class.new(task_name, self)
-    end
-
-    # Find a matching task for +task_name+.
-    def [](task_name, scopes=nil)
-      task_name = task_name.to_s
-      self.lookup(task_name, scopes) or
-        enhance_with_matching_rule(task_name) or
-        synthesize_file_task(task_name) or
-        fail "Don't know how to build task '#{task_name}'"
-    end
-
-    def synthesize_file_task(task_name)
-      return nil unless File.exist?(task_name)
-      define_task(Rake::FileTask, task_name)
-    end
-
-    # Resolve the arguments for a task/rule.  Returns a triplet of
-    # [task_name, arg_name_list, prerequisites].
-    def resolve_args(args)
-      if args.last.is_a?(Hash)
-        deps = args.pop
-        resolve_args_with_dependencies(args, deps)
-      else
-        resolve_args_without_dependencies(args)
-      end
-    end
-
-    # Resolve task arguments for a task or rule when there are no
-    # dependencies declared.
-    #
-    # The patterns recognized by this argument resolving function are:
-    #
-    #   task :t
-    #   task :t, [:a]
-    #   task :t, :a                 (deprecated)
-    #
-    def resolve_args_without_dependencies(args)
-      task_name = args.shift
-      if args.size == 1 && args.first.respond_to?(:to_ary)
-        arg_names = args.first.to_ary
-      else
-        arg_names = args
-      end
-      [task_name, arg_names, []]
-    end
-    private :resolve_args_without_dependencies
-    
-    # Resolve task arguments for a task or rule when there are
-    # dependencies declared.
-    #
-    # The patterns recognized by this argument resolving function are:
-    #
-    #   task :t => [:d]
-    #   task :t, [a] => [:d]
-    #   task :t, :needs => [:d]                 (deprecated)
-    #   task :t, :a, :needs => [:d]             (deprecated)
-    #
-    def resolve_args_with_dependencies(args, hash) # :nodoc:
-      fail "Task Argument Error" if hash.size != 1
-      key, value = hash.map { |k, v| [k,v] }.first
-      if args.empty?
-        task_name = key
-        arg_names = []
-        deps = value
-      elsif key == :needs
-        task_name = args.shift
-        arg_names = args
-        deps = value
-      else
-        task_name = args.shift
-        arg_names = key
-        deps = value
-      end
-      deps = [deps] unless deps.respond_to?(:to_ary)
-      [task_name, arg_names, deps]
-    end
-    private :resolve_args_with_dependencies
-    
-    # If a rule can be found that matches the task name, enhance the
-    # task with the prerequisites and actions from the rule.  Set the
-    # source attribute of the task appropriately for the rule.  Return
-    # the enhanced task or nil of no rule was found.
-    def enhance_with_matching_rule(task_name, level=0)
-      fail Rake::RuleRecursionOverflowError,
-        "Rule Recursion Too Deep" if level >= 16
-      @rules.each do |pattern, extensions, block|
-        if md = pattern.match(task_name)
-          task = attempt_rule(task_name, extensions, block, level)
-          return task if task
-        end
-      end
-      nil
-    rescue Rake::RuleRecursionOverflowError => ex
-      ex.add_target(task_name)
-      fail ex
-    end
-
-    # List of all defined tasks in this application.
-    def tasks
-      @tasks.values.sort_by { |t| t.name }
-    end
-
-    # Clear all tasks in this application.
-    def clear
-      @tasks.clear
-      @rules.clear
-    end
-
-    # Lookup a task, using scope and the scope hints in the task name.
-    # This method performs straight lookups without trying to
-    # synthesize file tasks or rules.  Special scope names (e.g. '^')
-    # are recognized.  If no scope argument is supplied, use the
-    # current scope.  Return nil if the task cannot be found.
-    def lookup(task_name, initial_scope=nil)
-      initial_scope ||= @scope
-      task_name = task_name.to_s
-      if task_name =~ /^rake:/
-        scopes = []
-        task_name = task_name.sub(/^rake:/, '')
-      elsif task_name =~ /^(\^+)/
-        scopes = initial_scope[0, initial_scope.size - $1.size]
-        task_name = task_name.sub(/^(\^+)/, '')
-      else
-        scopes = initial_scope
-      end
-      lookup_in_scope(task_name, scopes)
-    end
-
-    # Lookup the task name
-    def lookup_in_scope(name, scope)
-      n = scope.size
-      while n >= 0
-        tn = (scope[0,n] + [name]).join(':')
-        task = @tasks[tn]
-        return task if task
-        n -= 1
-      end
-      nil
-    end
-    private :lookup_in_scope
-
-    # Return the list of scope names currently active in the task
-    # manager.
-    def current_scope
-      @scope.dup
-    end
-
-    # Evaluate the block in a nested namespace named +name+.  Create
-    # an anonymous namespace if +name+ is nil.
-    def in_namespace(name)
-      name ||= generate_name
-      @scope.push(name)
-      ns = NameSpace.new(self, @scope)
-      yield(ns)
-      ns
-    ensure
-      @scope.pop
-    end
-
-    private
-
-    # Generate an anonymous namespace name.
-    def generate_name
-      @seed ||= 0
-      @seed += 1
-      "_anon_#{@seed}"
-    end
-
-    def trace_rule(level, message)
-      puts "#{"    "*level}#{message}" if Rake.application.options.trace_rules
-    end
-
-    # Attempt to create a rule given the list of prerequisites.
-    def attempt_rule(task_name, extensions, block, level)
-      sources = make_sources(task_name, extensions)
-      prereqs = sources.collect { |source|
-        trace_rule level, "Attempting Rule #{task_name} => #{source}"
-        if File.exist?(source) || Rake::Task.task_defined?(source)
-          trace_rule level, "(#{task_name} => #{source} ... EXIST)"
-          source
-        elsif parent = enhance_with_matching_rule(source, level+1)
-          trace_rule level, "(#{task_name} => #{source} ... ENHANCE)"
-          parent.name
-        else
-          trace_rule level, "(#{task_name} => #{source} ... FAIL)"
-          return nil
-        end
-      }
-      task = FileTask.define_task({task_name => prereqs}, &block)
-      task.sources = prereqs
-      task
-    end
-
-    # Make a list of sources from the list of file name extensions /
-    # translation procs.
-    def make_sources(task_name, extensions)
-      extensions.collect { |ext|
-        case ext
-        when /%/
-          task_name.pathmap(ext)
-        when %r{/}
-          ext
-        when /^\./
-          task_name.ext(ext)
-        when String
-          ext
-        when Proc
-          if ext.arity == 1
-            ext.call(task_name)
-          else
-            ext.call
-          end
-        else
-          fail "Don't know how to handle rule dependent: #{ext.inspect}"
-        end
-      }.flatten
-    end
-
-  end # TaskManager
-
-  ######################################################################
-  # Rake main application object.  When invoking +rake+ from the
-  # command line, a Rake::Application object is created and run.
-  #
-  class Application
-    include TaskManager
-
-    # The name of the application (typically 'rake')
-    attr_reader :name
-
-    # The original directory where rake was invoked.
-    attr_reader :original_dir
-
-    # Name of the actual rakefile used.
-    attr_reader :rakefile
-
-    # List of the top level task names (task names from the command line).
-    attr_reader :top_level_tasks
-
-    DEFAULT_RAKEFILES = ['rakefile', 'Rakefile', 'rakefile.rb', 'Rakefile.rb'].freeze
-
-    # Initialize a Rake::Application object.
-    def initialize
-      super
-      @name = 'rake'
-      @rakefiles = DEFAULT_RAKEFILES.dup
-      @rakefile = nil
-      @pending_imports = []
-      @imported = []
-      @loaders = {}
-      @default_loader = Rake::DefaultLoader.new
-      @original_dir = Dir.pwd
-      @top_level_tasks = []
-      add_loader('rb', DefaultLoader.new)
-      add_loader('rf', DefaultLoader.new)
-      add_loader('rake', DefaultLoader.new)
-      @tty_output = STDOUT.tty?
-    end
-
-    # Run the Rake application.  The run method performs the following three steps:
-    #
-    # * Initialize the command line options (+init+).
-    # * Define the tasks (+load_rakefile+).
-    # * Run the top level tasks (+run_tasks+).
-    #
-    # If you wish to build a custom rake command, you should call +init+ on your
-    # application.  The define any tasks.  Finally, call +top_level+ to run your top
-    # level tasks.
-    def run
-      standard_exception_handling do
-        init
-        load_rakefile
-        top_level
-      end
-    end
-
-    # Initialize the command line parameters and app name.
-    def init(app_name='rake')
-      standard_exception_handling do
-        @name = app_name
-        collect_tasks handle_options
-      end
-    end
-
-    # Find the rakefile and then load it and any pending imports.
-    def load_rakefile
-      standard_exception_handling do
-        raw_load_rakefile
-      end
-    end
-
-    # Run the top level tasks of a Rake application.
-    def top_level
-      standard_exception_handling do
-        if options.show_tasks
-          display_tasks_and_comments
-        elsif options.show_prereqs
-          display_prerequisites
-        else
-          top_level_tasks.each { |task_name| invoke_task(task_name) }
-        end
-      end
-    end
-
-    # Add a loader to handle imported files ending in the extension
-    # +ext+.
-    def add_loader(ext, loader)
-      ext = ".#{ext}" unless ext =~ /^\./
-      @loaders[ext] = loader
-    end
-
-    # Application options from the command line
-    def options
-      @options ||= OpenStruct.new
-    end
-
-    # private ----------------------------------------------------------------
-
-    def invoke_task(task_string)
-      name, args = parse_task_string(task_string)
-      t = self[name]
-      t.invoke(*args)
-    end
-
-    def parse_task_string(string)
-      if string =~ /^([^\[]+)(\[(.*)\])$/
-        name = $1
-        args = $3.split(/\s*,\s*/)
-      else
-        name = string
-        args = []
-      end
-      [name, args]
-    end
-
-    # Provide standard execption handling for the given block.
-    def standard_exception_handling
-      begin
-        yield
-      rescue SystemExit => ex
-        # Exit silently with current status
-        exit(ex.status)
-      rescue SystemExit, OptionParser::InvalidOption => ex
-        # Exit silently
-        exit(1)
-      rescue Exception => ex
-        # Exit with error message
-        $stderr.puts "rake aborted!"
-        $stderr.puts ex.message
-        if options.trace
-          $stderr.puts ex.backtrace.join("\n")
-        else
-          $stderr.puts ex.backtrace.find {|str| str =~ /#{@rakefile}/ } || ""
-          $stderr.puts "(See full trace by running task with --trace)"
-        end
-        exit(1)
-      end
-    end
-
-    # True if one of the files in RAKEFILES is in the current directory.
-    # If a match is found, it is copied into @rakefile.
-    def have_rakefile
-      @rakefiles.each do |fn|
-        if File.exist?(fn) || fn == ''
-          return fn
-        end
-      end
-      return nil
-    end
-
-    # True if we are outputting to TTY, false otherwise
-    def tty_output?
-      @tty_output
-    end
-
-    # Override the detected TTY output state (mostly for testing)
-    def tty_output=( tty_output_state )
-      @tty_output = tty_output_state
-    end
-
-    # We will truncate output if we are outputting to a TTY or if we've been
-    # given an explicit column width to honor
-    def truncate_output?
-      tty_output? || ENV['RAKE_COLUMNS']
-    end
-
-    # Display the tasks and dependencies.
-    def display_tasks_and_comments
-      displayable_tasks = tasks.select { |t|
-        t.comment && t.name =~ options.show_task_pattern
-      }
-      if options.full_description
-        displayable_tasks.each do |t|
-          puts "rake #{t.name_with_args}"
-          t.full_comment.split("\n").each do |line|
-            puts "    #{line}"
-          end
-          puts
-        end
-      else
-        width = displayable_tasks.collect { |t| t.name_with_args.length }.max || 10
-        max_column = truncate_output? ? terminal_width - name.size - width - 7 : nil
-        displayable_tasks.each do |t|
-          printf "#{name} %-#{width}s  # %s\n",
-            t.name_with_args, max_column ? truncate(t.comment, max_column) : t.comment
-        end
-      end
-    end
-
-    def terminal_width
-      if ENV['RAKE_COLUMNS']
-        result = ENV['RAKE_COLUMNS'].to_i
-      else
-        result = unix? ? dynamic_width : 80
-      end
-      (result < 10) ? 80 : result
-    rescue
-      80
-    end
-
-    # Calculate the dynamic width of the 
-    def dynamic_width
-      @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
-    end
-
-    def dynamic_width_stty
-      %x{stty size 2>/dev/null}.split[1].to_i
-    end
-
-    def dynamic_width_tput
-      %x{tput cols 2>/dev/null}.to_i
-    end
-
-    def unix?
-      RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
-    end
-    
-    def windows?
-      Win32.windows?
-    end
-
-    def truncate(string, width)
-      if string.length <= width
-        string
-      else
-        ( string[0, width-3] || "" ) + "..."
-      end
-    end
-
-    # Display the tasks and prerequisites
-    def display_prerequisites
-      tasks.each do |t|
-        puts "rake #{t.name}"
-        t.prerequisites.each { |pre| puts "    #{pre}" }
-      end
-    end
-
-    # A list of all the standard options used in rake, suitable for
-    # passing to OptionParser.
-    def standard_rake_options
-      [
-        ['--classic-namespace', '-C', "Put Task and FileTask in the top level namespace",
-          lambda { |value|
-            require 'rake/classic_namespace'
-            options.classic_namespace = true
-          }
-        ],
-        ['--describe', '-D [PATTERN]', "Describe the tasks (matching optional PATTERN), then exit.",
-          lambda { |value|
-            options.show_tasks = true
-            options.full_description = true
-            options.show_task_pattern = Regexp.new(value || '')
-          }
-        ],
-        ['--dry-run', '-n', "Do a dry run without executing actions.",
-          lambda { |value|
-            verbose(true)
-            nowrite(true)
-            options.dryrun = true
-            options.trace = true
-          }
-        ],
-        ['--execute',  '-e CODE', "Execute some Ruby code and exit.",
-          lambda { |value|
-            eval(value)
-            exit
-          }
-        ],
-        ['--execute-print',  '-p CODE', "Execute some Ruby code, print the result, then exit.",
-          lambda { |value|
-            puts eval(value)
-            exit
-          }
-        ],
-        ['--execute-continue',  '-E CODE',
-          "Execute some Ruby code, then continue with normal task processing.",
-          lambda { |value| eval(value) }            
-        ],
-        ['--libdir', '-I LIBDIR', "Include LIBDIR in the search path for required modules.",
-          lambda { |value| $:.push(value) }
-        ],
-        ['--prereqs', '-P', "Display the tasks and dependencies, then exit.",
-          lambda { |value| options.show_prereqs = true }
-        ],
-        ['--quiet', '-q', "Do not log messages to standard output.",
-          lambda { |value| verbose(false) }
-        ],
-        ['--rakefile', '-f [FILE]', "Use FILE as the rakefile.",
-          lambda { |value| 
-            value ||= ''
-            @rakefiles.clear 
-            @rakefiles << value
-          }
-        ],
-        ['--rakelibdir', '--rakelib', '-R RAKELIBDIR',
-          "Auto-import any .rake files in RAKELIBDIR. (default is 'rakelib')",
-          lambda { |value| options.rakelib = value.split(':') }
-        ],
-        ['--require', '-r MODULE', "Require MODULE before executing rakefile.",
-          lambda { |value|
-            begin
-              require value
-            rescue LoadError => ex
-              begin
-                rake_require value
-              rescue LoadError => ex2
-                raise ex
-              end
-            end
-          }
-        ],
-        ['--rules', "Trace the rules resolution.",
-          lambda { |value| options.trace_rules = true }
-        ],
-        ['--no-search', '--nosearch', '-N', "Do not search parent directories for the Rakefile.",
-          lambda { |value| options.nosearch = true }
-        ],
-        ['--silent', '-s', "Like --quiet, but also suppresses the 'in directory' announcement.",
-          lambda { |value|
-            verbose(false)
-            options.silent = true
-          }
-        ],
-        ['--system',  '-g',
-          "Using system wide (global) rakefiles (usually '~/.rake/*.rake').",
-          lambda { |value| options.load_system = true }
-        ],
-        ['--no-system', '--nosystem', '-G',
-          "Use standard project Rakefile search paths, ignore system wide rakefiles.",
-          lambda { |value| options.ignore_system = true }
-        ],
-        ['--tasks', '-T [PATTERN]', "Display the tasks (matching optional PATTERN) with descriptions, then exit.",
-          lambda { |value|
-            options.show_tasks = true
-            options.show_task_pattern = Regexp.new(value || '')
-            options.full_description = false
-          }
-        ],
-        ['--trace', '-t', "Turn on invoke/execute tracing, enable full backtrace.",
-          lambda { |value|
-            options.trace = true
-            verbose(true)
-          }
-        ],
-        ['--verbose', '-v', "Log message to standard output (default).",
-          lambda { |value| verbose(true) }
-        ],
-        ['--version', '-V', "Display the program version.",
-          lambda { |value|
-            puts "rake, version #{RAKEVERSION}"
-            exit
-          }
-        ]
-      ]
-    end
-
-    # Read and handle the command line options.
-    def handle_options
-      options.rakelib = ['rakelib']
-
-      opts = OptionParser.new
-      opts.banner = "rake [-f rakefile] {options} targets..."
-      opts.separator ""
-      opts.separator "Options are ..."
-      
-      opts.on_tail("-h", "--help", "-H", "Display this help message.") do
-        puts opts
-        exit
-      end
-      
-      standard_rake_options.each { |args| opts.on(*args) }
-      parsed_argv = opts.parse(ARGV)
-
-      # If class namespaces are requested, set the global options
-      # according to the values in the options structure.
-      if options.classic_namespace
-        $show_tasks = options.show_tasks
-        $show_prereqs = options.show_prereqs
-        $trace = options.trace
-        $dryrun = options.dryrun
-        $silent = options.silent
-      end
-      parsed_argv
-    end
-
-    # Similar to the regular Ruby +require+ command, but will check
-    # for *.rake files in addition to *.rb files.
-    def rake_require(file_name, paths=$LOAD_PATH, loaded=$")
-      return false if loaded.include?(file_name)
-      paths.each do |path|
-        fn = file_name + ".rake"
-        full_path = File.join(path, fn)
-        if File.exist?(full_path)
-          load full_path
-          loaded << fn
-          return true
-        end
-      end
-      fail LoadError, "Can't find #{file_name}"
-    end
-
-    def find_rakefile_location
-      here = Dir.pwd
-      while ! (fn = have_rakefile)
-        Dir.chdir("..")
-        if Dir.pwd == here || options.nosearch
-          return nil
-        end
-        here = Dir.pwd
-      end
-      [fn, here]
-    ensure
-      Dir.chdir(Rake.original_dir)
-    end
-
-    def raw_load_rakefile # :nodoc:
-      rakefile, location = find_rakefile_location
-      if (! options.ignore_system) &&
-          (options.load_system || rakefile.nil?) &&
-          system_dir && File.directory?(system_dir)
-        puts "(in #{Dir.pwd})" unless options.silent
-        glob("#{system_dir}/*.rake") do |name|
-          add_import name
-        end
-      else
-        fail "No Rakefile found (looking for: #{@rakefiles.join(', ')})" if
-          rakefile.nil?
-        @rakefile = rakefile
-        Dir.chdir(location)
-        puts "(in #{Dir.pwd})" unless options.silent
-        $rakefile = @rakefile if options.classic_namespace
-        load File.expand_path(@rakefile) if @rakefile && @rakefile != ''
-        options.rakelib.each do |rlib|
-          glob("#{rlib}/*.rake") do |name|
-            add_import name
-          end
-        end
-      end
-      load_imports
-    end
-
-    def glob(path, &block)
-      Dir[path.gsub("\\", '/')].each(&block)
-    end
-    private :glob
-
-    # The directory path containing the system wide rakefiles.
-    def system_dir
-      @system_dir ||=
-        begin
-          if ENV['RAKE_SYSTEM']
-            ENV['RAKE_SYSTEM']
-          elsif Win32.windows?
-            Win32.win32_system_dir
-          else
-            standard_system_dir
-          end
-        end
-    end
-    
-    # The standard directory containing system wide rake files.
-    def standard_system_dir #:nodoc:
-      File.join(File.expand_path('~'), '.rake')
-    end
-    private :standard_system_dir
-
-    # Collect the list of tasks on the command line.  If no tasks are
-    # given, return a list containing only the default task.
-    # Environmental assignments are processed at this time as well.
-    def collect_tasks(argv)
-      @top_level_tasks = []
-      argv.each do |arg|
-        if arg =~ /^(\w+)=(.*)$/
-          ENV[$1] = $2
-        else
-          @top_level_tasks << arg unless arg =~ /^-/
-        end
-      end
-      @top_level_tasks.push("default") if @top_level_tasks.size == 0
-    end
-
-    # Add a file to the list of files to be imported.
-    def add_import(fn)
-      @pending_imports << fn
-    end
-
-    # Load the pending list of imported files.
-    def load_imports
-      while fn = @pending_imports.shift
-        next if @imported.member?(fn)
-        if fn_task = lookup(fn)
-          fn_task.invoke
-        end
-        ext = File.extname(fn)
-        loader = @loaders[ext] || @default_loader
-        loader.load(fn)
-        @imported << fn
-      end
-    end
-
-    # Warn about deprecated use of top level constant names.
-    def const_warning(const_name)
-      @const_warning ||= false
-      if ! @const_warning
-        $stderr.puts %{WARNING: Deprecated reference to top-level constant '#{const_name}' } +
-          %{found at: #{rakefile_location}} # '
-        $stderr.puts %{    Use --classic-namespace on rake command}
-        $stderr.puts %{    or 'require "rake/classic_namespace"' in Rakefile}
-      end
-      @const_warning = true
-    end
-
-    def rakefile_location
-      begin
-        fail
-      rescue RuntimeError => ex
-        ex.backtrace.find {|str| str =~ /#{@rakefile}/ } || ""
-      end
-    end
-  end
-end
-
-
-class Module
-  # Rename the original handler to make it available.
-  alias :rake_original_const_missing :const_missing
-
-  # Check for deprecated uses of top level (i.e. in Object) uses of
-  # Rake class names.  If someone tries to reference the constant
-  # name, display a warning and return the proper object.  Using the
-  # --classic-namespace command line option will define these
-  # constants in Object and avoid this handler.
-  def const_missing(const_name)
-    case const_name
-    when :Task
-      Rake.application.const_warning(const_name)
-      Rake::Task
-    when :FileTask
-      Rake.application.const_warning(const_name)
-      Rake::FileTask
-    when :FileCreationTask
-      Rake.application.const_warning(const_name)
-      Rake::FileCreationTask
-    when :RakeApp
-      Rake.application.const_warning(const_name)
-      Rake::Application
-    else
-      rake_original_const_missing(const_name)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/classic_namespace.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/classic_namespace.rb
deleted file mode 100644
index feb7569..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/classic_namespace.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-# The following classes used to be in the top level namespace.
-# Loading this file enables compatibility with older Rakefile that
-# referenced Task from the top level.
-
-Task = Rake::Task
-FileTask = Rake::FileTask
-FileCreationTask = Rake::FileCreationTask
-RakeApp = Rake::Application
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/clean.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/clean.rb
deleted file mode 100644
index 4ee2c5a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/clean.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env ruby
-
-# The 'rake/clean' file defines two file lists (CLEAN and CLOBBER) and
-# two rake tasks (:clean and :clobber).
-#
-# [:clean] Clean up the project by deleting scratch files and backup
-#          files.  Add files to the CLEAN file list to have the :clean
-#          target handle them.
-#
-# [:clobber] Clobber all generated and non-source files in a project.
-#            The task depends on :clean, so all the clean files will
-#            be deleted as well as files in the CLOBBER file list.
-#            The intent of this task is to return a project to its
-#            pristine, just unpacked state.
-
-require 'rake'
-
-CLEAN = Rake::FileList["**/*~", "**/*.bak", "**/core"]
-CLEAN.clear_exclude.exclude { |fn| 
-  fn.pathmap("%f") == 'core' && File.directory?(fn) 
-}
-
-desc "Remove any temporary products."
-task :clean do
-  CLEAN.each { |fn| rm_r fn rescue nil }
-end
-
-CLOBBER = Rake::FileList.new
-
-desc "Remove any generated file."
-task :clobber => [:clean] do
-  CLOBBER.each { |fn| rm_r fn rescue nil }
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/compositepublisher.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/compositepublisher.rb
deleted file mode 100644
index d771ccc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/compositepublisher.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env ruby
-
-module Rake
-
-  # Manage several publishers as a single entity.
-  class CompositePublisher
-    def initialize
-      @publishers = []
-    end
-    
-    # Add a publisher to the composite.
-    def add(pub)
-      @publishers << pub
-    end
-    
-    # Upload all the individual publishers.
-    def upload
-      @publishers.each { |p| p.upload }
-    end
-  end
-
-end
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/ftptools.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/ftptools.rb
deleted file mode 100644
index 4cd02f3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/ftptools.rb
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/env ruby
-
-# = Tools for FTP uploading.
-#
-# This file is still under development and is not released for general
-# use.
-
-require 'date'
-require 'net/ftp'
-
-module Rake # :nodoc:
-
-  ####################################################################
-  # <b>Note:</b> <em> Not released for general use.</em>
-  class FtpFile
-    attr_reader :name, :size, :owner, :group, :time
-
-    def self.date
-      @date_class ||= Date
-    end
-
-    def self.time
-      @time_class ||= Time
-    end
-
-    def initialize(path, entry)
-      @path = path
-      @mode, line, @owner, @group, size, d1, d2, d3, @name = entry.split(' ')
-      @size = size.to_i
-      @time = determine_time(d1, d2, d3)
-    end
-
-    def path
-      File.join(@path, @name)
-    end
-
-    def directory?
-      @mode[0] == ?d
-    end
-
-    def mode
-      parse_mode(@mode)
-    end
-
-    def symlink?
-      @mode[0] == ?l
-    end
-
-    private # --------------------------------------------------------
-
-    def parse_mode(m)
-      result = 0
-      (1..9).each do |i|
-        result = 2*result + ((m[i]==?-) ? 0 : 1)
-      end
-      result
-    end
-
-    def determine_time(d1, d2, d3)
-      now = self.class.time.now
-      if /:/ =~ d3
-        h, m = d3.split(':')
-        result = Time.parse("#{d1} #{d2} #{now.year} #{d3}")
-        if result > now
-          result = Time.parse("#{d1} #{d2} #{now.year-1} #{d3}")
-        end
-      else
-        result = Time.parse("#{d1} #{d2} #{d3}")
-      end
-      result
-#       elements = ParseDate.parsedate("#{d1} #{d2} #{d3}")
-#       if elements[0].nil?
-#         today = self.class.date.today
-#         if elements[1] > today.month
-#           elements[0] = today.year - 1
-#         else
-#           elements[0] = today.year
-#         end
-#       end
-#       elements = elements.collect { |el| el.nil? ? 0 : el }
-#       Time.mktime(*elements[0,7])
-    end
-  end
-
-  ####################################################################
-  # Manage the uploading of files to an FTP account.
-  class FtpUploader
-
-    # Log uploads to standard output when true.
-    attr_accessor :verbose
-
-    class << FtpUploader
-      # Create an uploader and pass it to the given block as +up+.
-      # When the block is complete, close the uploader.
-      def connect(path, host, account, password)
-        up = self.new(path, host, account, password)
-        begin
-          yield(up)
-        ensure
-          up.close
-        end
-      end
-    end
-
-    # Create an FTP uploader targetting the directory +path+ on +host+
-    # using the given account and password.  +path+ will be the root
-    # path of the uploader.
-    def initialize(path, host, account, password)
-      @created = Hash.new
-      @path = path
-      @ftp = Net::FTP.new(host, account, password)
-      makedirs(@path)
-      @ftp.chdir(@path)
-    end
-
-    # Create the directory +path+ in the uploader root path.
-    def makedirs(path)
-      route = []
-      File.split(path).each do |dir|
-        route << dir
-        current_dir = File.join(route)
-        if @created[current_dir].nil?
-          @created[current_dir] = true
-          puts "Creating Directory  #{current_dir}" if @verbose
-          @ftp.mkdir(current_dir) rescue nil
-        end
-      end
-    end
-
-    # Upload all files matching +wildcard+ to the uploader's root
-    # path.
-    def upload_files(wildcard)
-      Dir[wildcard].each do |fn|
-        upload(fn)
-      end
-    end
-    
-    # Close the uploader.
-    def close
-      @ftp.close
-    end
-
-    private # --------------------------------------------------------
-
-    # Upload a single file to the uploader's root path.
-    def upload(file)
-      puts "Uploading #{file}" if @verbose
-      dir = File.dirname(file)
-      makedirs(dir)
-      @ftp.putbinaryfile(file, file) unless File.directory?(file)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/publisher.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/publisher.rb
deleted file mode 100644
index 6e80eb7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/publisher.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env ruby
-
-# Copyright 2003, 2004 by Jim Weirich (jim at weirichhouse.org)
-# All rights reserved.
-
-# Permission is granted for use, copying, modification, distribution,
-# and distribution of modified versions of this work as long as the
-# above copyright notice is included.
-
-# Configuration information about an upload host system.
-# * name   :: Name of host system.
-# * webdir :: Base directory for the web information for the
-#             application.  The application name (APP) is appended to
-#             this directory before using.
-# * pkgdir :: Directory on the host system where packages can be
-#             placed. 
-HostInfo = Struct.new(:name, :webdir, :pkgdir)
-
-# Manage several publishers as a single entity.
-class CompositePublisher
-  def initialize
-    @publishers = []
-  end
-
-  # Add a publisher to the composite.
-  def add(pub)
-    @publishers << pub
-  end
-
-  # Upload all the individual publishers.
-  def upload
-    @publishers.each { |p| p.upload }
-  end
-end
-
-# Publish an entire directory to an existing remote directory using
-# SSH.
-class SshDirPublisher
-  def initialize(host, remote_dir, local_dir)
-    @host = host
-    @remote_dir = remote_dir
-    @local_dir = local_dir
-  end
-
-  def upload
-    run %{scp -rq #{@local_dir}/* #{@host}:#{@remote_dir}}
-  end
-end
-
-# Publish an entire directory to a fresh remote directory using SSH.
-class SshFreshDirPublisher < SshDirPublisher
-  def upload
-    run %{ssh #{@host} rm -rf #{@remote_dir}} rescue nil
-    run %{ssh #{@host} mkdir #{@remote_dir}}
-    super
-  end
-end
-
-# Publish a list of files to an existing remote directory.
-class SshFilePublisher
-  # Create a publisher using the give host information.
-  def initialize(host, remote_dir, local_dir, *files)
-    @host = host
-    @remote_dir = remote_dir
-    @local_dir = local_dir
-    @files = files
-  end
-
-  # Upload the local directory to the remote directory.
-  def upload
-    @files.each do |fn|
-      run %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}}
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/rubyforgepublisher.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/rubyforgepublisher.rb
deleted file mode 100644
index a91265f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/rubyforgepublisher.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rake/contrib/sshpublisher'
-
-module Rake
-
-  class RubyForgePublisher < SshDirPublisher
-    attr_reader :project, :proj_id, :user
-    
-    def initialize(projname, user)
-      super(
-        "#{user}@rubyforge.org",
-        "/var/www/gforge-projects/#{projname}",
-        "html")
-    end
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/sshpublisher.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/sshpublisher.rb
deleted file mode 100644
index d77fcc3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/sshpublisher.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rake/contrib/compositepublisher'
-
-module Rake
-
-  # Publish an entire directory to an existing remote directory using
-  # SSH.
-  class SshDirPublisher
-    def initialize(host, remote_dir, local_dir)
-      @host = host
-      @remote_dir = remote_dir
-      @local_dir = local_dir
-    end
-    
-    def upload
-      sh %{scp -rq #{@local_dir}/* #{@host}:#{@remote_dir}}
-    end
-  end
-  
-  # Publish an entire directory to a fresh remote directory using SSH.
-  class SshFreshDirPublisher < SshDirPublisher
-    def upload
-      sh %{ssh #{@host} rm -rf #{@remote_dir}} rescue nil
-      sh %{ssh #{@host} mkdir #{@remote_dir}}
-      super
-    end
-  end
-  
-  # Publish a list of files to an existing remote directory.
-  class SshFilePublisher
-    # Create a publisher using the give host information.
-    def initialize(host, remote_dir, local_dir, *files)
-      @host = host
-      @remote_dir = remote_dir
-      @local_dir = local_dir
-      @files = files
-    end
-    
-    # Upload the local directory to the remote directory.
-    def upload
-      @files.each do |fn|
-        sh %{scp -q #{@local_dir}/#{fn} #{@host}:#{@remote_dir}}
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/sys.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/sys.rb
deleted file mode 100644
index 06ac9e9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/contrib/sys.rb
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/usr/bin/env ruby
-
-#--
-# Copyright (c) 2003, 2004 Jim Weirich
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#++
-#
-begin
-  require 'ftools'
-rescue LoadError
-end
-require 'rbconfig'
-
-######################################################################
-# Sys provides a number of file manipulation tools for the convenience
-# of writing Rakefiles.  All commands in this module will announce
-# their activity on standard output if the $verbose flag is set
-# ($verbose = true is the default).  You can control this by globally
-# setting $verbose or by using the +verbose+ and +quiet+ methods.
-#
-# Sys has been deprecated in favor of the FileUtils module available
-# in Ruby 1.8.
-#
-module Sys
-  RUBY = Config::CONFIG['ruby_install_name']
-
-  # Install all the files matching +wildcard+ into the +dest_dir+
-  # directory.  The permission mode is set to +mode+.
-  def install(wildcard, dest_dir, mode)
-    Dir[wildcard].each do |fn|
-      File.install(fn, dest_dir, mode, $verbose)
-    end
-  end
-
-  # Run the system command +cmd+.
-  def run(cmd)
-    log cmd
-    system(cmd) or fail "Command Failed: [#{cmd}]"
-  end
-
-  # Run a Ruby interpreter with the given arguments.
-  def ruby(*args)
-    run "#{RUBY} #{args.join(' ')}"
-  end
-  
-  # Copy a single file from +file_name+ to +dest_file+.
-  def copy(file_name, dest_file)
-    log "Copying file #{file_name} to #{dest_file}"
-    File.copy(file_name, dest_file)
-  end
-
-  # Copy all files matching +wildcard+ into the directory +dest_dir+.
-  def copy_files(wildcard, dest_dir)
-    for_matching_files(wildcard, dest_dir) { |from, to| copy(from, to) }
-  end
-
-  # Link +file_name+ to +dest_file+.
-  def link(file_name, dest_file)
-    log "Linking file #{file_name} to #{dest_file}"
-    File.link(file_name, dest_file)
-  end
-
-  # Link all files matching +wildcard+ into the directory +dest_dir+.
-  def link_files(wildcard, dest_dir)
-    for_matching_files(wildcard, dest_dir) { |from, to| link(from, to) }
-  end
-
-  # Symlink +file_name+ to +dest_file+.
-  def symlink(file_name, dest_file)
-    log "Symlinking file #{file_name} to #{dest_file}"
-    File.symlink(file_name, dest_file)
-  end
-
-  # Symlink all files matching +wildcard+ into the directory +dest_dir+.
-  def symlink_files(wildcard, dest_dir)
-    for_matching_files(wildcard, dest_dir) { |from, to| link(from, to) }
-  end
-
-  # Remove all files matching +wildcard+.  If a matching file is a
-  # directory, it must be empty to be removed.  used +delete_all+ to
-  # recursively delete directories.
-  def delete(*wildcards)
-    wildcards.each do |wildcard|
-      Dir[wildcard].each do |fn|
-        if File.directory?(fn)
-          log "Deleting directory #{fn}"
-          Dir.delete(fn)
-        else
-          log "Deleting file #{fn}"
-          File.delete(fn)
-        end
-      end
-    end
-  end
-
-  # Recursively delete all files and directories matching +wildcard+.
-  def delete_all(*wildcards)
-    wildcards.each do |wildcard|
-      Dir[wildcard].each do |fn|
-        next if ! File.exist?(fn)
-        if File.directory?(fn)
-          Dir["#{fn}/*"].each do |subfn|
-            next if subfn=='.' || subfn=='..'
-            delete_all(subfn)
-          end
-          log "Deleting directory #{fn}"
-          Dir.delete(fn)
-        else
-          log "Deleting file #{fn}"
-          File.delete(fn)
-        end
-      end
-    end
-  end
-
-  # Make the directories given in +dirs+.
-  def makedirs(*dirs)
-    dirs.each do |fn|
-      log "Making directory #{fn}"
-      File.makedirs(fn)
-    end
-  end
-
-  # Make +dir+ the current working directory for the duration of
-  # executing the given block.
-  def indir(dir)
-    olddir = Dir.pwd
-    Dir.chdir(dir)
-    yield
-  ensure
-    Dir.chdir(olddir)
-  end
-
-  # Split a file path into individual directory names.
-  #
-  # For example:
-  #   split_all("a/b/c") =>  ['a', 'b', 'c']
-  def split_all(path)
-    head, tail = File.split(path)
-    return [tail] if head == '.' || tail == '/'
-    return [head, tail] if head == '/'
-    return split_all(head) + [tail]
-  end
-
-  # Write a message to standard out if $verbose is enabled.
-  def log(msg)
-    print "  " if $trace && $verbose
-    puts msg if $verbose
-  end
-
-  # Perform a block with $verbose disabled.
-  def quiet(&block)
-    with_verbose(false, &block)
-  end
-
-  # Perform a block with $verbose enabled.
-  def verbose(&block)
-    with_verbose(true, &block)
-  end
-
-  # Perform a block with each file matching a set of wildcards.
-  def for_files(*wildcards)
-    wildcards.each do |wildcard|
-      Dir[wildcard].each do |fn|
-        yield(fn)
-      end
-    end
-  end
-
-  extend(self)
-
-  private # ----------------------------------------------------------
-
-  def for_matching_files(wildcard, dest_dir)
-    Dir[wildcard].each do |fn|
-      dest_file = File.join(dest_dir, fn)
-      parent = File.dirname(dest_file)
-      makedirs(parent) if ! File.directory?(parent)
-      yield(fn, dest_file)
-    end
-  end
-
-  def with_verbose(v)
-    oldverbose = $verbose
-    $verbose = v
-    yield
-  ensure
-    $verbose = oldverbose
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/gempackagetask.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/gempackagetask.rb
deleted file mode 100644
index a4e5cd1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/gempackagetask.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env ruby
-
-# Define a package task library to aid in the definition of GEM
-# packages.
-
-require 'rubygems'
-require 'rake'
-require 'rake/packagetask'
-require 'rubygems/user_interaction'
-require 'rubygems/builder'
-
-begin
-  Gem.manage_gems
-rescue NoMethodError => ex
-  # Using rubygems prior to 0.6.1
-end
-
-module Rake
-
-  # Create a package based upon a Gem spec.  Gem packages, as well as
-  # zip files and tar/gzipped packages can be produced by this task.
-  #
-  # In addition to the Rake targets generated by PackageTask, a
-  # GemPackageTask will also generate the following tasks:
-  #
-  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.gem"</b>]
-  #   Create a Ruby GEM package with the given name and version.
-  #
-  # Example using a Ruby GEM spec:
-  #
-  #   require 'rubygems'
-  #
-  #   spec = Gem::Specification.new do |s|
-  #     s.platform = Gem::Platform::RUBY
-  #     s.summary = "Ruby based make-like utility."
-  #     s.name = 'rake'
-  #     s.version = PKG_VERSION
-  #     s.requirements << 'none'
-  #     s.require_path = 'lib'
-  #     s.autorequire = 'rake'
-  #     s.files = PKG_FILES
-  #     s.description = <<EOF
-  #   Rake is a Make-like program implemented in Ruby. Tasks
-  #   and dependencies are specified in standard Ruby syntax. 
-  #   EOF
-  #   end
-  #   
-  #   Rake::GemPackageTask.new(spec) do |pkg|
-  #     pkg.need_zip = true
-  #     pkg.need_tar = true
-  #   end
-  #
-  class GemPackageTask < PackageTask
-    # Ruby GEM spec containing the metadata for this package.  The
-    # name, version and package_files are automatically determined
-    # from the GEM spec and don't need to be explicitly provided.
-    attr_accessor :gem_spec
-
-    # Create a GEM Package task library.  Automatically define the gem
-    # if a block is given.  If no block is supplied, then +define+
-    # needs to be called to define the task.
-    def initialize(gem_spec)
-      init(gem_spec)
-      yield self if block_given?
-      define if block_given?
-    end
-
-    # Initialization tasks without the "yield self" or define
-    # operations.
-    def init(gem)
-      super(gem.name, gem.version)
-      @gem_spec = gem
-      @package_files += gem_spec.files if gem_spec.files
-    end
-
-    # Create the Rake tasks and actions specified by this
-    # GemPackageTask.  (+define+ is automatically called if a block is
-    # given to +new+).
-    def define
-      super
-      task :package => [:gem]
-      desc "Build the gem file #{gem_file}"
-      task :gem => ["#{package_dir}/#{gem_file}"]
-      file "#{package_dir}/#{gem_file}" => [package_dir] + @gem_spec.files do
-        when_writing("Creating GEM") {
-          Gem::Builder.new(gem_spec).build
-          verbose(true) {
-            mv gem_file, "#{package_dir}/#{gem_file}"
-          }
-        }
-      end
-    end
-    
-    def gem_file
-      if @gem_spec.platform == Gem::Platform::RUBY
-        "#{package_name}.gem"
-      else
-        "#{package_name}-#{@gem_spec.platform}.gem"
-      end
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/loaders/makefile.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/loaders/makefile.rb
deleted file mode 100644
index 9ade098..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/loaders/makefile.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env ruby
-
-module Rake
-
-  # Makefile loader to be used with the import file loader.
-  class MakefileLoader
-
-    # Load the makefile dependencies in +fn+.
-    def load(fn)
-      open(fn) do |mf|
-        lines = mf.read
-        lines.gsub!(/#[^\n]*\n/m, "")
-        lines.gsub!(/\\\n/, ' ')
-        lines.split("\n").each do |line|
-          process_line(line)
-        end
-      end
-    end
-
-    private
-
-    # Process one logical line of makefile data.
-    def process_line(line)
-      file_tasks, args = line.split(':')
-      return if args.nil?
-      dependents = args.split
-      file_tasks.strip.split.each do |file_task|
-        file file_task => dependents
-      end
-    end
-  end
-
-  # Install the handler
-  Rake.application.add_loader('mf', MakefileLoader.new)
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/packagetask.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/packagetask.rb
deleted file mode 100644
index 4b0775d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/packagetask.rb
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env ruby
-
-# Define a package task libarary to aid in the definition of
-# redistributable package files.
-
-require 'rake'
-require 'rake/tasklib'
-
-module Rake
-
-  # Create a packaging task that will package the project into
-  # distributable files (e.g zip archive or tar files).
-  #
-  # The PackageTask will create the following targets:
-  #
-  # [<b>:package</b>]
-  #   Create all the requested package files.
-  #
-  # [<b>:clobber_package</b>]
-  #   Delete all the package files.  This target is automatically
-  #   added to the main clobber target.
-  #
-  # [<b>:repackage</b>]
-  #   Rebuild the package files from scratch, even if they are not out
-  #   of date.
-  #
-  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tgz"</b>]
-  #   Create a gzipped tar package (if <em>need_tar</em> is true).  
-  #
-  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.gz"</b>]
-  #   Create a gzipped tar package (if <em>need_tar_gz</em> is true).  
-  #
-  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.bz2"</b>]
-  #   Create a bzip2'd tar package (if <em>need_tar_bz2</em> is true).  
-  #
-  # [<b>"<em>package_dir</em>/<em>name</em>-<em>version</em>.zip"</b>]
-  #   Create a zip package archive (if <em>need_zip</em> is true).
-  #
-  # Example:
-  #
-  #   Rake::PackageTask.new("rake", "1.2.3") do |p|
-  #     p.need_tar = true
-  #     p.package_files.include("lib/**/*.rb")
-  #   end
-  #
-  class PackageTask < TaskLib
-    # Name of the package (from the GEM Spec).
-    attr_accessor :name
-
-    # Version of the package (e.g. '1.3.2').
-    attr_accessor :version
-
-    # Directory used to store the package files (default is 'pkg').
-    attr_accessor :package_dir
-
-    # True if a gzipped tar file (tgz) should be produced (default is false).
-    attr_accessor :need_tar
-
-    # True if a gzipped tar file (tar.gz) should be produced (default is false).
-    attr_accessor :need_tar_gz
-
-    # True if a bzip2'd tar file (tar.bz2) should be produced (default is false).
-    attr_accessor :need_tar_bz2
-
-    # True if a zip file should be produced (default is false)
-    attr_accessor :need_zip
-
-    # List of files to be included in the package.
-    attr_accessor :package_files
-
-    # Tar command for gzipped or bzip2ed archives.  The default is 'tar'.
-    attr_accessor :tar_command
-
-    # Zip command for zipped archives.  The default is 'zip'.
-    attr_accessor :zip_command
-
-    # Create a Package Task with the given name and version. 
-    def initialize(name=nil, version=nil)
-      init(name, version)
-      yield self if block_given?
-      define unless name.nil?
-    end
-
-    # Initialization that bypasses the "yield self" and "define" step.
-    def init(name, version)
-      @name = name
-      @version = version
-      @package_files = Rake::FileList.new
-      @package_dir = 'pkg'
-      @need_tar = false
-      @need_tar_gz = false
-      @need_tar_bz2 = false
-      @need_zip = false
-      @tar_command = 'tar'
-      @zip_command = 'zip'
-    end
-
-    # Create the tasks defined by this task library.
-    def define
-      fail "Version required (or :noversion)" if @version.nil?
-      @version = nil if :noversion == @version
-
-      desc "Build all the packages"
-      task :package
-      
-      desc "Force a rebuild of the package files"
-      task :repackage => [:clobber_package, :package]
-      
-      desc "Remove package products" 
-      task :clobber_package do
-        rm_r package_dir rescue nil
-      end
-
-      task :clobber => [:clobber_package]
-
-      [
-        [need_tar, tgz_file, "z"],
-        [need_tar_gz, tar_gz_file, "z"],
-        [need_tar_bz2, tar_bz2_file, "j"]
-      ].each do |(need, file, flag)|
-        if need
-          task :package => ["#{package_dir}/#{file}"]
-          file "#{package_dir}/#{file}" => [package_dir_path] + package_files do
-            chdir(package_dir) do
-              sh %{env}
-              sh %{#{@tar_command} #{flag}cvf #{file} #{package_name}}
-            end
-          end
-        end
-      end
-      
-      if need_zip
-        task :package => ["#{package_dir}/#{zip_file}"]
-        file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do
-          chdir(package_dir) do
-            sh %{#{@zip_command} -r #{zip_file} #{package_name}}
-          end
-        end
-      end
-
-      directory package_dir
-
-      file package_dir_path => @package_files do
-        mkdir_p package_dir rescue nil
-        @package_files.each do |fn|
-          f = File.join(package_dir_path, fn)
-          fdir = File.dirname(f)
-          mkdir_p(fdir) if !File.exist?(fdir)
-          if File.directory?(fn)
-            mkdir_p(f)
-          else
-            rm_f f
-            safe_ln(fn, f)
-          end
-        end
-      end
-      self
-    end
-
-    def package_name
-      @version ? "#{@name}-#{@version}" : @name
-    end
-      
-    def package_dir_path
-      "#{package_dir}/#{package_name}"
-    end
-
-    def tgz_file
-      "#{package_name}.tgz"
-    end
-
-    def tar_gz_file
-      "#{package_name}.tar.gz"
-    end
-
-    def tar_bz2_file
-      "#{package_name}.tar.bz2"
-    end
-
-    def zip_file
-      "#{package_name}.zip"
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/rake_test_loader.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/rake_test_loader.rb
deleted file mode 100644
index 8d7dad3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/rake_test_loader.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env ruby
-
-# Load the test files from the command line.
-
-ARGV.each { |f| load f unless f =~ /^-/  }
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/rdoctask.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/rdoctask.rb
deleted file mode 100644
index 6cfbda1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/rdoctask.rb
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rake'
-require 'rake/tasklib'
-
-module Rake
-
-  # Create a documentation task that will generate the RDoc files for
-  # a project.
-  #
-  # The RDocTask will create the following targets:
-  #
-  # [<b><em>rdoc</em></b>]
-  #   Main task for this RDOC task.  
-  #
-  # [<b>:clobber_<em>rdoc</em></b>]
-  #   Delete all the rdoc files.  This target is automatically
-  #   added to the main clobber target.
-  #
-  # [<b>:re<em>rdoc</em></b>]
-  #   Rebuild the rdoc files from scratch, even if they are not out
-  #   of date.
-  #
-  # Simple Example:
-  #
-  #   Rake::RDocTask.new do |rd|
-  #     rd.main = "README.rdoc"
-  #     rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
-  #   end
-  #
-  # You may wish to give the task a different name, such as if you are
-  # generating two sets of documentation.  For instance, if you want to have a
-  # development set of documentation including private methods:
-  #
-  #   Rake::RDocTask.new(:rdoc_dev) do |rd|
-  #     rd.main = "README.doc"
-  #     rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
-  #     rd.options << "--all"
-  #   end
-  #
-  # The tasks would then be named :<em>rdoc_dev</em>, :clobber_<em>rdoc_dev</em>, and
-  # :re<em>rdoc_dev</em>.
-  #
-  class RDocTask < TaskLib
-    # Name of the main, top level task.  (default is :rdoc)
-    attr_accessor :name
-
-    # Name of directory to receive the html output files. (default is "html")
-    attr_accessor :rdoc_dir
-
-    # Title of RDoc documentation. (default is none)
-    attr_accessor :title
-
-    # Name of file to be used as the main, top level file of the
-    # RDoc. (default is none)
-    attr_accessor :main
-
-    # Name of template to be used by rdoc. (defaults to rdoc's default)
-    attr_accessor :template
-
-    # List of files to be included in the rdoc generation. (default is [])
-    attr_accessor :rdoc_files
-
-    # List of options to be passed rdoc.  (default is [])
-    attr_accessor :options
-
-    # Run the rdoc process as an external shell (default is false)
-    attr_accessor :external
-
-    # Create an RDoc task named <em>rdoc</em>.  Default task name is +rdoc+.
-    def initialize(name=:rdoc)  # :yield: self
-      @name = name
-      @rdoc_files = Rake::FileList.new
-      @rdoc_dir = 'html'
-      @main = nil
-      @title = nil
-      @template = nil
-      @external = false
-      @options = []
-      yield self if block_given?
-      define
-    end
-    
-    # Create the tasks defined by this task lib.
-    def define
-      if name.to_s != "rdoc"
-        desc "Build the RDOC HTML Files"
-      end
-
-      desc "Build the #{name} HTML Files"
-      task name
-      
-      desc "Force a rebuild of the RDOC files"
-      task "re#{name}" => ["clobber_#{name}", name]
-      
-      desc "Remove rdoc products" 
-      task "clobber_#{name}" do
-        rm_r rdoc_dir rescue nil
-      end
-      
-      task :clobber => ["clobber_#{name}"]
-      
-      directory @rdoc_dir
-      task name => [rdoc_target]
-      file rdoc_target => @rdoc_files + [Rake.application.rakefile] do
-        rm_r @rdoc_dir rescue nil
-        args = option_list + @rdoc_files
-        if @external
-          argstring = args.join(' ')
-          sh %{ruby -Ivendor vender/rd #{argstring}}
-        else
-          require 'rdoc/rdoc'
-          RDoc::RDoc.new.document(args)
-        end
-      end
-      self
-    end
-
-    def option_list
-      result = @options.dup
-      result << "-o" << @rdoc_dir
-      result << "--main" << quote(main) if main
-      result << "--title" << quote(title) if title
-      result << "-T" << quote(template) if template
-      result
-    end
-
-    def quote(str)
-      if @external
-        "'#{str}'"
-      else
-        str
-      end
-    end
-
-    def option_string
-      option_list.join(' ')
-    end
-
-    private
-
-    def rdoc_target
-      "#{rdoc_dir}/index.html"
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/ruby182_test_unit_fix.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/ruby182_test_unit_fix.rb
deleted file mode 100755
index f02c787..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/ruby182_test_unit_fix.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-module Test
-  module Unit
-    module Collector
-      class Dir
-        undef collect_file
-        def collect_file(name, suites, already_gathered)
-          # loadpath = $:.dup
-          dir = File.dirname(File.expand_path(name))
-          $:.unshift(dir) unless $:.first == dir
-          if(@req)
-            @req.require(name)
-          else
-            require(name)
-          end
-          find_test_cases(already_gathered).each{|t| add_suite(suites, t.suite)}
-        ensure
-          # $:.replace(loadpath)
-          $:.delete_at $:.rindex(dir)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/runtest.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/runtest.rb
deleted file mode 100644
index 3f1d205..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/runtest.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'test/unit/assertions'
-
-module Rake
-  include Test::Unit::Assertions
-
-  def run_tests(pattern='test/test*.rb', log_enabled=false)
-    Dir["#{pattern}"].each { |fn|
-      puts fn if log_enabled
-      begin
-        load fn
-      rescue Exception => ex
-        puts "Error in #{fn}: #{ex.message}"
-        puts ex.backtrace
-        assert false
-      end
-    }
-  end
-
-  extend self
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/tasklib.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/tasklib.rb
deleted file mode 100644
index c7fd981..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/tasklib.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rake'
-
-module Rake
-
-  # Base class for Task Libraries.
-  class TaskLib
-    include Cloneable
-
-    # Make a symbol by pasting two strings together.
-    #
-    # NOTE: DEPRECATED! This method is kinda stupid. I don't know why
-    # I didn't just use string interpolation. But now other task
-    # libraries depend on this so I can't remove it without breaking
-    # other people's code. So for now it stays for backwards
-    # compatibility. BUT DON'T USE IT.
-    def paste(a,b)              # :nodoc:
-      (a.to_s + b.to_s).intern
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/testtask.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/testtask.rb
deleted file mode 100644
index 79154e4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/testtask.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env ruby
-
-# Define a task library for running unit tests.
-
-require 'rake'
-require 'rake/tasklib'
-
-module Rake
-
-  # Create a task that runs a set of tests.
-  #
-  # Example:
-  #  
-  #   Rake::TestTask.new do |t|
-  #     t.libs << "test"
-  #     t.test_files = FileList['test/test*.rb']
-  #     t.verbose = true
-  #   end
-  #
-  # If rake is invoked with a "TEST=filename" command line option,
-  # then the list of test files will be overridden to include only the
-  # filename specified on the command line.  This provides an easy way
-  # to run just one test.
-  #
-  # If rake is invoked with a "TESTOPTS=options" command line option,
-  # then the given options are passed to the test process after a
-  # '--'.  This allows Test::Unit options to be passed to the test
-  # suite.
-  #
-  # Examples:
-  #
-  #   rake test                           # run tests normally
-  #   rake test TEST=just_one_file.rb     # run just one test file.
-  #   rake test TESTOPTS="-v"             # run in verbose mode
-  #   rake test TESTOPTS="--runner=fox"   # use the fox test runner
-  #
-  class TestTask < TaskLib
-
-    # Name of test task. (default is :test)
-    attr_accessor :name
-
-    # List of directories to added to $LOAD_PATH before running the
-    # tests. (default is 'lib')
-    attr_accessor :libs
-
-    # True if verbose test output desired. (default is false)
-    attr_accessor :verbose
-
-    # Test options passed to the test suite.  An explicit
-    # TESTOPTS=opts on the command line will override this. (default
-    # is NONE)
-    attr_accessor :options
-
-    # Request that the tests be run with the warning flag set.
-    # E.g. warning=true implies "ruby -w" used to run the tests.
-    attr_accessor :warning
-
-    # Glob pattern to match test files. (default is 'test/test*.rb')
-    attr_accessor :pattern
-
-    # Style of test loader to use.  Options are:
-    #
-    # * :rake -- Rake provided test loading script (default).
-    # * :testrb -- Ruby provided test loading script.
-    # * :direct -- Load tests using command line loader.
-    # 
-    attr_accessor :loader
-
-    # Array of commandline options to pass to ruby when running test loader.
-    attr_accessor :ruby_opts
-
-    # Explicitly define the list of test files to be included in a
-    # test.  +list+ is expected to be an array of file names (a
-    # FileList is acceptable).  If both +pattern+ and +test_files+ are
-    # used, then the list of test files is the union of the two.
-    def test_files=(list)
-      @test_files = list
-    end
-
-    # Create a testing task.
-    def initialize(name=:test)
-      @name = name
-      @libs = ["lib"]
-      @pattern = nil
-      @options = nil
-      @test_files = nil
-      @verbose = false
-      @warning = false
-      @loader = :rake
-      @ruby_opts = []
-      yield self if block_given?
-      @pattern = 'test/test*.rb' if @pattern.nil? && @test_files.nil?
-      define
-    end
-
-    # Create the tasks defined by this task lib.
-    def define
-      lib_path = @libs.join(File::PATH_SEPARATOR)
-      desc "Run tests" + (@name==:test ? "" : " for #{@name}")
-      task @name do
-        run_code = ''
-        RakeFileUtils.verbose(@verbose) do
-          run_code =
-            case @loader
-            when :direct
-              "-e 'ARGV.each{|f| load f}'"
-            when :testrb
-              "-S testrb #{fix}"
-            when :rake
-              rake_loader
-            end
-          @ruby_opts.unshift( "-I#{lib_path}" )
-          @ruby_opts.unshift( "-w" ) if @warning
-          ruby @ruby_opts.join(" ") +
-            " \"#{run_code}\" " +
-            file_list.collect { |fn| "\"#{fn}\"" }.join(' ') +
-            " #{option_list}"
-        end
-      end
-      self
-    end
-
-    def option_list # :nodoc:
-      ENV['TESTOPTS'] || @options || ""
-    end
-
-    def file_list # :nodoc:
-      if ENV['TEST']
-        FileList[ ENV['TEST'] ]
-      else
-        result = []
-        result += @test_files.to_a if @test_files
-        result += FileList[ @pattern ].to_a if @pattern
-        FileList[result]
-      end
-    end
-
-    def fix # :nodoc:
-      case RUBY_VERSION
-      when '1.8.2'
-        find_file 'rake/ruby182_test_unit_fix'
-      else
-        nil
-      end || ''
-    end
-
-    def rake_loader # :nodoc:
-      find_file('rake/rake_test_loader') or
-        fail "unable to find rake test loader"
-    end
-
-    def find_file(fn) # :nodoc:
-      $LOAD_PATH.each do |path|
-        file_path = File.join(path, "#{fn}.rb")
-        return file_path if File.exist? file_path
-      end
-      nil
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/win32.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/win32.rb
deleted file mode 100644
index eadc585..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/lib/rake/win32.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-module Rake
-  
-  # Win 32 interface methods for Rake. Windows specific functionality
-  # will be placed here to collect that knowledge in one spot.
-  module Win32
-    
-    # Error indicating a problem in locating the home directory on a
-    # Win32 system.
-    class Win32HomeError < RuntimeError
-    end
-    
-    class << self
-      # True if running on a windows system.
-      def windows?
-        Config::CONFIG['host_os'] =~ /mswin/
-      end
-
-      # Run a command line on windows.
-      def rake_system(*cmd)
-        if cmd.size == 1
-          system("call #{cmd}")
-        else
-          system(*cmd)
-        end
-      end
-      
-      # The standard directory containing system wide rake files on
-      # Win 32 systems. Try the following environment variables (in
-      # order):
-      #
-      # * APPDATA
-      # * HOMEDRIVE + HOMEPATH
-      # * USERPROFILE
-      #
-      # If the above are not defined, the return nil.
-      def win32_system_dir #:nodoc:
-        win32_shared_path = ENV['APPDATA']
-        if win32_shared_path.nil? && ENV['HOMEDRIVE'] && ENV['HOMEPATH']
-          win32_shared_path = ENV['HOMEDRIVE'] + ENV['HOMEPATH']
-        end
-        win32_shared_path ||= ENV['USERPROFILE']
-        raise Win32HomeError, "Unable to determine home path environment variable." if
-          win32_shared_path.nil? or win32_shared_path.empty?
-        normalize(File.join(win32_shared_path, 'Rake'))
-      end
-      
-      # Normalize a win32 path so that the slashes are all forward slashes.
-      def normalize(path)
-        path.gsub(/\\/, '/')
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/capture_stdout.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/capture_stdout.rb
deleted file mode 100644
index 8b664ad..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/capture_stdout.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'stringio'
-
-# Mix-in for capturing standard output.
-module CaptureStdout
-  def capture_stdout
-    s = StringIO.new
-    oldstdout = $stdout
-    $stdout = s
-    yield
-    s.string
-  ensure
-    $stdout = oldstdout
-  end
-
-  def capture_stderr
-    s = StringIO.new
-    oldstderr = $stderr
-    $stderr = s
-    yield
-    s.string
-  ensure
-    $stderr = oldstderr
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/check_expansion.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/check_expansion.rb
deleted file mode 100644
index 659cf71..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/check_expansion.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-if ARGV[0] != ARGV[1]
-  exit 1
-else
-  exit 0
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/contrib/test_sys.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/contrib/test_sys.rb
deleted file mode 100644
index 37a5dc9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/contrib/test_sys.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'test/filecreation'
-require 'rake/contrib/sys'
-
-class TestSys < Test::Unit::TestCase
-  include FileCreation
-
-#   def test_delete
-#     create_file("testdata/a")
-#     Sys.delete_all("testdata/a")
-#     assert ! File.exist?("testdata/a")
-#   end
-
-#   def test_copy
-#     create_file("testdata/a")
-#     Sys.copy("testdata/a", "testdata/b")
-#     assert File.exist?("testdata/b")
-#   end
-
-#   def test_for_files
-#     test_files = ["testdata/a.pl", "testdata/c.pl", "testdata/b.rb"]
-#     test_files.each { |fn| create_file(fn) }
-#     list = []
-#     Sys.for_files("testdata/*.pl", "testdata/*.rb") { |fn|
-#       list << fn
-#     }
-#     assert_equal test_files.sort, list.sort
-#   end
-
-#   def test_indir
-#     here = Dir.pwd
-#     Sys.makedirs("testdata/dir")
-#     assert_equal "#{here}/testdata/dir", Sys.indir("testdata/dir") { Dir.pwd }
-#     assert_equal here, Dir.pwd
-#   end
-
-  def test_split_all
-    assert_equal ['a'], Sys.split_all('a')
-    assert_equal ['..'], Sys.split_all('..')
-    assert_equal ['/'], Sys.split_all('/')
-    assert_equal ['a', 'b'], Sys.split_all('a/b')
-    assert_equal ['/', 'a', 'b'], Sys.split_all('/a/b')
-    assert_equal ['..', 'a', 'b'], Sys.split_all('../a/b')
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/chains/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/chains/Rakefile
deleted file mode 100644
index 31bdc25..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/chains/Rakefile
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- ruby -*-
-
-task :default => "play.app"
-
-file "play.scpt" => "base" do |t|
-  cp t.prerequisites.first, t.name
-end
-
-rule ".app" => ".scpt" do |t|
-  cp t.source, t.name
-end
-
-file 'base' do
-  touch 'base'
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/default/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/default/Rakefile
deleted file mode 100644
index 22ed5e0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/default/Rakefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env ruby
-
-if ENV['TESTTOPSCOPE']
-  puts "TOPSCOPE"
-end
-
-task :default do
-  puts "DEFAULT"
-end
-
-task :other => [:default] do
-  puts "OTHER"
-end
-
-task :task_scope do
-  if ENV['TESTTASKSCOPE']
-    puts "TASKSCOPE"
-  end
-end    
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/dryrun/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/dryrun/Rakefile
deleted file mode 100644
index 0a68a0d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/dryrun/Rakefile
+++ /dev/null
@@ -1,22 +0,0 @@
-# 
-
-task :default => ["temp_main"]
-
-file "temp_main" => [:all_apps]  do touch "temp_main" end
-
-task :all_apps => [:one, :two]
-task :one => ["temp_one"]
-task :two => ["temp_two"]
-
-file "temp_one" do |t|
-  touch "temp_one"
-end
-file "temp_two" do |t|
-  touch "temp_two"
-end
-
-task :clean do
-  ["temp_one", "temp_two", "temp_main"].each do |file|
-    rm_f file
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/file_creation_task/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/file_creation_task/Rakefile
deleted file mode 100644
index 94641b6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/file_creation_task/Rakefile
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env ruby
-
-N = 2
-
-task :default => :run
-
-BUILD_DIR = 'build'
-task :clean do 
-  rm_rf 'build'
-  rm_rf 'src'
-end
-
-task :run
-
-TARGET_DIR = 'build/copies'
-
-FileList['src/*'].each do |src|
-  directory TARGET_DIR
-  target = File.join TARGET_DIR, File.basename(src)
-  file target => [src, TARGET_DIR] do
-    cp src, target
-    # sleep 3 if src !~ /foo#{N-1}$/   # I'm commenting out this sleep, it doesn't seem to do anything.
-  end
-  task :run => target
-end
-
-task :prep => :clean do
-  mkdir_p 'src'
-  N.times do |n|
-    puts "DBG: Touching src/foo#{n}"
-    touch "src/foo#{n}"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/imports/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/imports/Rakefile
deleted file mode 100644
index 6a60f61..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/imports/Rakefile
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- ruby -*-
-
-require 'rake/loaders/makefile'
-
-task :default
-
-task :other do
-  puts "OTHER"
-end
-
-file "dynamic_deps" do |t|
-  open(t.name, "w") do |f| f.puts "puts 'DYNAMIC'" end
-end
-
-import "dynamic_deps"
-import "static_deps"
-import "static_deps"
-import "deps.mf"
-puts "FIRST"
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/imports/deps.mf b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/imports/deps.mf
deleted file mode 100644
index 04643d0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/imports/deps.mf
+++ /dev/null
@@ -1 +0,0 @@
-default: other
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/multidesc/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/multidesc/Rakefile
deleted file mode 100644
index 5342481..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/multidesc/Rakefile
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env ruby
-
-task :b
-
-desc "A"
-task :a
-
-desc "B"
-task :b
-
-desc "A2"
-task :a
-
-task :c
-
-desc "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-task :d
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/namespace/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/namespace/Rakefile
deleted file mode 100644
index 6de98ed..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/namespace/Rakefile
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env ruby
-
-desc "copy"
-task :copy do
-  puts "COPY"
-end
-
-namespace "nest" do
-  desc "nest copy"
-  task :copy do
-    puts "NEST COPY"
-  end
-  task :xx => :copy
-end
-
-anon_ns = namespace do
-  desc "anonymous copy task"
-  task :copy do
-    puts "ANON COPY"
-  end
-end
-
-desc "Top level task to run the anonymous version of copy"
-task :anon => anon_ns[:copy]
-
-namespace "very" do
-  namespace "nested" do
-    task "run" => "rake:copy"
-  end
-end
-
-namespace "a" do
-  desc "Run task in the 'a' namespace"
-  task "run" do
-    puts "IN A"
-  end
-end
-
-namespace "b" do
-  desc "Run task in the 'b' namespace"
-  task "run" => "a:run" do
-    puts "IN B"
-  end
-end
-
-namespace "file1" do
-  file "xyz.rb" do
-    puts "XYZ1"
-  end
-end
-
-namespace "file2" do
-  file "xyz.rb" do
-    puts "XYZ2"
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/rakelib/test1.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/rakelib/test1.rb
deleted file mode 100644
index bb1c419..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/rakelib/test1.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-task :default do
-  puts "TEST1"
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/rbext/rakefile.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/rbext/rakefile.rb
deleted file mode 100644
index 670604d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/rbext/rakefile.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-task :default do
-  puts "OK"
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/sample.mf b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/sample.mf
deleted file mode 100644
index 0ce672c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/sample.mf
+++ /dev/null
@@ -1,12 +0,0 @@
-# Comments
-a: a1 a2 a3 a4
-b: b1 b2 b3 \
-   b4 b5 b6\
-# Mid: Comment
-b7
-
- a : a5 a6 a7
-c: c1
-d: d1 d2 \
-
-e f : e1 f1
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/statusreturn/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/statusreturn/Rakefile
deleted file mode 100644
index 6802305..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/statusreturn/Rakefile
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-
-task :exit5 do
-  exit(5)
-end
-
-task :normal do
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/unittest/Rakefile b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/unittest/Rakefile
deleted file mode 100644
index 9c3b8ac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/data/unittest/Rakefile
+++ /dev/null
@@ -1 +0,0 @@
-# Empty Rakefile for Unit Test
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/filecreation.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/filecreation.rb
deleted file mode 100644
index 7a8bc87..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/filecreation.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env ruby
-
-module FileCreation
-  OLDFILE = "testdata/old"
-  NEWFILE = "testdata/new"
-
-  def create_timed_files(oldfile, *newfiles)
-    return if File.exist?(oldfile) && newfiles.all? { |newfile| File.exist?(newfile) }
-    old_time = create_file(oldfile)
-    newfiles.each do |newfile|
-      while create_file(newfile) <= old_time
-        sleep(0.1)
-        File.delete(newfile) rescue nil
-      end
-    end
-  end
-
-  def create_dir(dirname)
-    FileUtils.mkdir_p(dirname) unless File.exist?(dirname)
-    File.stat(dirname).mtime
-  end
-
-  def create_file(name)
-    create_dir(File.dirname(name))
-    FileUtils.touch(name) unless File.exist?(name)
-    File.stat(name).mtime
-  end
-
-  def delete_file(name)
-    File.delete(name) rescue nil
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/functional.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/functional.rb
deleted file mode 100644
index 6a5c602..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/functional.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env ruby
-
-begin
-  require 'rubygems'
-  gem 'session'
-  require 'session'
-rescue LoadError
-  puts "UNABLE TO RUN FUNCTIONAL TESTS"
-  puts "No Session Found (gem install session)"
-end
-
-if defined?(Session)
-  puts "RUNNING WITH SESSIONS"
-  require 'test/session_functional'
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/in_environment.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/in_environment.rb
deleted file mode 100644
index fb02eba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/in_environment.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-module InEnvironment
-  private
-  
-  # Create an environment for a test. At the completion of the yielded
-  # block, the environment is restored to its original conditions.
-  def in_environment(settings)
-    original_settings = set_env(settings)
-    yield    
-  ensure
-    set_env(original_settings)
-  end
-
-  # Set the environment according to the settings hash.
-  def set_env(settings)         # :nodoc:
-    result = {}
-    settings.each do |k, v|
-      result[k] = ENV[k]
-      if k == 'PWD'
-        result[k] = Dir.pwd
-        Dir.chdir(v)
-      elsif v.nil?
-        ENV.delete(k)
-      else
-        ENV[k] = v
-      end
-    end
-    result
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/rake_test_setup.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/rake_test_setup.rb
deleted file mode 100644
index 74b28e1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/rake_test_setup.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# Common setup for all test files.
-
-begin
-  require 'rubygems'
-  gem 'flexmock'
-rescue LoadError
-  # got no gems
-end
-
-require 'flexmock/test_unit'
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/reqfile.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/reqfile.rb
deleted file mode 100644
index 5372544..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/reqfile.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# For --require testing
-
-TESTING_REQUIRE << 1
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/reqfile2.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/reqfile2.rb
deleted file mode 100644
index 6599390..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/reqfile2.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# For --require testing
-
-TESTING_REQUIRE << 2
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/session_functional.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/session_functional.rb
deleted file mode 100644
index bf4635a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/session_functional.rb
+++ /dev/null
@@ -1,337 +0,0 @@
-#!/usr/bin/env ruby
-
-begin
-  require 'rubygems'
-rescue LoadError => ex
-end
-require 'test/unit'
-require 'fileutils'
-require 'session'
-require 'test/in_environment'
-
-# Version 2.1.9 of session has a bug where the @debug instance
-# variable is not initialized, causing warning messages.  This snippet
-# of code fixes that problem.
-module Session
-  class AbstractSession
-    alias old_initialize initialize
-    def initialize(*args)
-      @debug = nil
-      old_initialize(*args)
-    end
-  end
-end
-
-class FunctionalTest < Test::Unit::TestCase
-  include InEnvironment
-
-  RUBY_COMMAND = 'ruby'
-
-  def setup
-    @rake_path = File.expand_path("bin/rake")
-    lib_path = File.expand_path("lib")
-    @ruby_options = "-I#{lib_path} -I."
-    @verbose = ! ENV['VERBOSE'].nil?
-    if @verbose
-      puts
-      puts
-      puts "--------------------------------------------------------------------"
-      puts name
-      puts "--------------------------------------------------------------------"
-    end
-  end
-
-  def test_rake_default
-    Dir.chdir("test/data/default") do rake end
-    assert_match(/^DEFAULT$/, @out)
-    assert_status
-  end
-
-  def test_rake_error_on_bad_task
-    Dir.chdir("test/data/default") do rake "xyz" end
-    assert_match(/rake aborted/, @err)
-    assert_status(1)
-  end
-
-  def test_env_availabe_at_top_scope
-    Dir.chdir("test/data/default") do rake "TESTTOPSCOPE=1" end
-    assert_match(/^TOPSCOPE$/, @out)
-    assert_status
-  end
-
-  def test_env_availabe_at_task_scope
-    Dir.chdir("test/data/default") do rake "TESTTASKSCOPE=1 task_scope" end
-    assert_match(/^TASKSCOPE$/, @out)
-    assert_status
-  end
-
-  def test_multi_desc
-    in_environment(
-      'RAKE_COLUMNS' => "80",
-      "PWD" => "test/data/multidesc"
-      ) do
-      rake "-T"
-    end
-    assert_match %r{^rake a *# A / A2 *$}, @out
-    assert_match %r{^rake b *# B *$}, @out
-    assert_no_match %r{^rake c}, @out
-    assert_match %r{^rake d *# x{65}\.\.\.$}, @out
-  end
-  
-  def test_long_description
-    in_environment("PWD" => "test/data/multidesc") do
-      rake "--describe"
-    end
-    assert_match %r{^rake a\n *A / A2 *$}m, @out
-    assert_match %r{^rake b\n *B *$}m, @out
-    assert_match %r{^rake d\n *x{80}}m, @out
-    assert_no_match %r{^rake c\n}m, @out
-  end
-
-  def test_rbext
-    in_environment("PWD" => "test/data/rbext") do
-      rake "-N"
-    end
-    assert_match %r{^OK$}, @out
-  end
-
-  def test_system
-    in_environment('RAKE_SYSTEM' => 'test/data/sys') do
-      rake '-g', "sys1"
-    end
-    assert_match %r{^SYS1}, @out
-  end
-
-  def test_system_excludes_rakelib_files_too
-    in_environment('RAKE_SYSTEM' => 'test/data/sys') do
-      rake '-g', "sys1", '-T', 'extra'
-    end
-    assert_no_match %r{extra:extra}, @out
-  end
-
-  def test_by_default_rakelib_files_are_include
-    in_environment('RAKE_SYSTEM' => 'test/data/sys') do
-      rake '-T', 'extra'
-    end
-    assert_match %r{extra:extra}, @out
-  end
-
-  def test_implicit_system
-    in_environment('RAKE_SYSTEM' => File.expand_path('test/data/sys'), "PWD" => "/") do
-      rake "sys1", "--trace"
-    end
-    assert_match %r{^SYS1}, @out
-  end
-
-  def test_no_system
-    in_environment('RAKE_SYSTEM' => 'test/data/sys') do
-      rake '-G', "sys1"
-    end
-    assert_match %r{^Don't know how to build task}, @err # emacs wart: '
-  end
-
-  def test_nosearch_with_rakefile_uses_local_rakefile
-    in_environment("PWD" => "test/data/default") do
-      rake "--nosearch"
-    end
-    assert_match %r{^DEFAULT}, @out
-  end
-
-  def test_nosearch_without_rakefile_finds_system
-    in_environment(
-      "PWD" => "test/data/nosearch",
-      "RAKE_SYSTEM" => File.expand_path("test/data/sys")
-      ) do
-      rake "--nosearch", "sys1"
-    end
-    assert_match %r{^SYS1}, @out
-  end
-
-  def test_nosearch_without_rakefile_and_no_system_fails
-    in_environment("PWD" => "test/data/nosearch", "RAKE_SYSTEM" => "not_exist") do
-      rake "--nosearch"
-    end
-    assert_match %r{^No Rakefile found}, @err
-  end
-
-  def test_dry_run
-    in_environment("PWD" => "test/data/default") do rake "-n", "other" end
-    assert_match %r{Execute \(dry run\) default}, @out
-    assert_match %r{Execute \(dry run\) other}, @out
-    assert_no_match %r{DEFAULT}, @out
-    assert_no_match %r{OTHER}, @out
-  end
-
-  # Test for the trace/dry_run bug found by Brian Chandler
-  def test_dry_run_bug
-    in_environment("PWD" => "test/data/dryrun") do
-      rake
-    end
-    FileUtils.rm_f "test/data/dryrun/temp_one"
-    in_environment("PWD" => "test/data/dryrun") do
-      rake "--dry-run"
-    end
-    assert_no_match(/No such file/, @out)
-    assert_status
-  end
-
-  # Test for the trace/dry_run bug found by Brian Chandler
-  def test_trace_bug
-    in_environment("PWD" => "test/data/dryrun") do
-      rake
-    end
-    FileUtils.rm_f "test/data/dryrun/temp_one"
-    in_environment("PWD" => "test/data/dryrun") do
-      rake "--trace"
-    end
-    assert_no_match(/No such file/, @out)
-    assert_status
-  end
-
-  def test_imports
-    open("test/data/imports/static_deps", "w") do |f|
-      f.puts 'puts "STATIC"'
-    end
-    FileUtils.rm_f "test/data/imports/dynamic_deps"
-    in_environment("PWD" => "test/data/imports") do
-      rake
-    end
-    assert File.exist?("test/data/imports/dynamic_deps"),
-      "'dynamic_deps' file should exist"
-    assert_match(/^FIRST$\s+^DYNAMIC$\s+^STATIC$\s+^OTHER$/, @out)
-    assert_status
-    FileUtils.rm_f "test/data/imports/dynamic_deps"
-    FileUtils.rm_f "test/data/imports/static_deps"
-  end
-
-  def test_rules_chaining_to_file_task
-    remove_chaining_files
-    in_environment("PWD" => "test/data/chains") do
-      rake
-    end
-    assert File.exist?("test/data/chains/play.app"),
-      "'play.app' file should exist"
-    assert_status
-    remove_chaining_files
-  end
-
-  def test_file_creation_task
-    in_environment("PWD" => "test/data/file_creation_task") do
-      rake "prep"
-      rake "run"
-      rake "run"
-    end
-    assert(@err !~ /^cp src/, "Should not recopy data")
-  end
-
-  def test_dash_f_with_no_arg_foils_rakefile_lookup
-    rake "-I test/data/rakelib -rtest1 -f"
-    assert_match(/^TEST1$/, @out)
-  end
-
-  def test_dot_rake_files_can_be_loaded_with_dash_r
-    rake "-I test/data/rakelib -rtest2 -f"
-    assert_match(/^TEST2$/, @out)
-  end
-
-  def test_can_invoke_task_in_toplevel_namespace
-    in_environment("PWD" => "test/data/namespace") do
-      rake "copy"
-    end
-    assert_match(/^COPY$/, @out)
-  end
-
-  def test_can_invoke_task_in_nested_namespace
-    in_environment("PWD" => "test/data/namespace") do
-      rake "nest:copy"
-      assert_match(/^NEST COPY$/, @out)
-    end
-  end
-
-  def test_tasks_can_reference_task_in_same_namespace
-    in_environment("PWD" => "test/data/namespace") do
-      rake "nest:xx"
-      assert_match(/^NEST COPY$/m, @out)
-    end
-  end
-
-  def test_tasks_can_reference_task_in_other_namespaces
-    in_environment("PWD" => "test/data/namespace") do
-      rake "b:run"
-      assert_match(/^IN A\nIN B$/m, @out)
-    end
-  end
-
-  def test_anonymous_tasks_can_be_invoked_indirectly
-    in_environment("PWD" => "test/data/namespace") do
-      rake "anon"
-      assert_match(/^ANON COPY$/m, @out)
-    end
-  end
-
-  def test_rake_namespace_refers_to_toplevel
-    in_environment("PWD" => "test/data/namespace") do
-      rake "very:nested:run"
-      assert_match(/^COPY$/m, @out)
-    end
-  end
-
-  def test_file_task_are_not_scoped_by_namespaces
-    in_environment("PWD" => "test/data/namespace") do
-      rake "xyz.rb"
-      assert_match(/^XYZ1\nXYZ2$/m, @out)
-    end
-  end
-  
-  def test_rake_returns_status_error_values
-    in_environment("PWD" => "test/data/statusreturn") do
-      rake "exit5"
-      assert_status(5)
-    end
-  end
-
-  def test_rake_returns_no_status_error_on_normal_exit
-    in_environment("PWD" => "test/data/statusreturn") do
-      rake "normal"
-      assert_status(0)
-    end
-  end
-
-  private
-
-  def remove_chaining_files
-    %w(play.scpt play.app base).each do |fn|
-      FileUtils.rm_f File.join("test/data/chains", fn)
-    end
-  end
-
-  class << self
-    def format_command
-      @format_command ||= lambda { |ruby_options, rake_path, options|
-        "ruby #{ruby_options} #{rake_path} #{options}"
-      }
-    end
-    
-    def format_command=(fmt_command)
-      @format_command = fmt_command
-    end
-  end
-  
-  def rake(*option_list)
-    options = option_list.join(' ')
-    shell = Session::Shell.new
-    command = self.class.format_command[@ruby_options, @rake_path, options]
-    puts "COMMAND: [#{command}]" if @verbose
-    @out, @err = shell.execute command
-    @status = shell.exit_status
-    puts "STATUS:  [#{@status}]" if @verbose
-    puts "OUTPUT:  [#{@out}]" if @verbose
-    puts "ERROR:   [#{@err}]" if @verbose
-    puts "PWD:     [#{Dir.pwd}]" if @verbose
-    shell.close
-  end
-
-  def assert_status(expected_status=0)
-    assert_equal expected_status, @status
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/shellcommand.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/shellcommand.rb
deleted file mode 100755
index 58db8a0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/shellcommand.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-
-exit((ARGV[0] || "0").to_i)
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_application.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_application.rb
deleted file mode 100644
index d9b281e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_application.rb
+++ /dev/null
@@ -1,694 +0,0 @@
-#!/usr/bin/env ruby
-
-begin
-  require 'rubygems'
-rescue LoadError
-  # got no gems
-end
-
-require 'test/unit'
-require 'rake'
-require 'test/rake_test_setup'
-require 'test/capture_stdout'
-require 'test/in_environment'
-
-TESTING_REQUIRE = [ ]
-
-######################################################################
-class TestApplication < Test::Unit::TestCase
-  include CaptureStdout
-  include InEnvironment
-
-  def setup
-    @app = Rake::Application.new
-    @app.options.rakelib = []
-  end
-
-  def test_constant_warning
-    err = capture_stderr do @app.instance_eval { const_warning("Task") } end
-    assert_match(/warning/i, err)
-    assert_match(/deprecated/i, err)
-    assert_match(/Task/i, err)
-  end
-
-  def test_display_tasks
-    @app.options.show_task_pattern = //
-    @app.last_description = "COMMENT"
-    @app.define_task(Rake::Task, "t")
-    out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
-    assert_match(/^rake t/, out)
-    assert_match(/# COMMENT/, out)
-  end
-
-  def test_display_tasks_with_long_comments
-    in_environment('RAKE_COLUMNS' => '80') do
-      @app.options.show_task_pattern = //
-      @app.last_description = "1234567890" * 8
-      @app.define_task(Rake::Task, "t")
-      out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
-      assert_match(/^rake t/, out)
-      assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
-    end
-  end
-
-  def test_display_tasks_with_task_name_wider_than_tty_display
-    in_environment('RAKE_COLUMNS' => '80') do
-      @app.options.show_task_pattern = //
-      description = "something short"
-      task_name = "task name" * 80
-      @app.last_description = "something short"
-      @app.define_task(Rake::Task, task_name )
-      out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
-      # Ensure the entire task name is output and we end up showing no description
-      assert_match(/rake #{task_name}  # .../, out)
-    end
-  end
-
-  def test_display_tasks_with_very_long_task_name_to_a_non_tty_shows_name_and_comment
-    @app.options.show_task_pattern = //
-    @app.tty_output = false
-    description = "something short"
-    task_name = "task name" * 80
-    @app.last_description = "something short"
-    @app.define_task(Rake::Task, task_name )
-    out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
-    # Ensure the entire task name is output and we end up showing no description
-    assert_match(/rake #{task_name}  # #{description}/, out)
-  end
-
-  def test_display_tasks_with_long_comments_to_a_non_tty_shows_entire_comment
-    @app.options.show_task_pattern = //
-    @app.tty_output = false
-    @app.last_description = "1234567890" * 8
-    @app.define_task(Rake::Task, "t")
-    out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
-    assert_match(/^rake t/, out)
-    assert_match(/# #{@app.last_description}/, out)
-  end
-
-  def test_display_tasks_with_long_comments_to_a_non_tty_with_columns_set_truncates_comments
-    in_environment("RAKE_COLUMNS" => '80') do
-      @app.options.show_task_pattern = //
-      @app.tty_output = false
-      @app.last_description = "1234567890" * 8
-      @app.define_task(Rake::Task, "t")
-      out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
-      assert_match(/^rake t/, out)
-      assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
-    end
-  end
-
-  def test_display_tasks_with_full_descriptions
-    @app.options.show_task_pattern = //
-    @app.options.full_description = true
-    @app.last_description = "COMMENT"
-    @app.define_task(Rake::Task, "t")
-    out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
-    assert_match(/^rake t$/, out)
-    assert_match(/^ {4}COMMENT$/, out)
-  end
-
-  def test_finding_rakefile
-    assert_match(/[Rr]akefile/, @app.instance_eval { have_rakefile })
-  end
-
-  def test_not_finding_rakefile
-    @app.instance_eval { @rakefiles = ['NEVER_FOUND'] }
-    assert( ! @app.instance_eval do have_rakefile end )
-    assert_nil @app.rakefile
-  end
-
-  def test_load_rakefile
-    in_environment("PWD" => "test/data/unittest") do
-      @app.instance_eval do 
-        handle_options
-        options.silent = true
-        load_rakefile
-      end
-      assert_equal "rakefile", @app.rakefile.downcase
-      assert_match(%r(unittest$), Dir.pwd)
-    end
-  end
-
-  def test_load_rakefile_from_subdir
-    in_environment("PWD" => "test/data/unittest/subdir") do
-      @app.instance_eval do
-        handle_options
-        options.silent = true
-        load_rakefile
-      end
-      assert_equal "rakefile", @app.rakefile.downcase
-      assert_match(%r(unittest$), Dir.pwd)
-    end
-  end
-
-  def test_load_rakefile_not_found
-    in_environment("PWD" => "/", "RAKE_SYSTEM" => 'not_exist') do
-      @app.instance_eval do
-        handle_options
-        options.silent = true
-      end
-      ex = assert_raise(RuntimeError) do 
-        @app.instance_eval do raw_load_rakefile end 
-      end
-      assert_match(/no rakefile found/i, ex.message)
-    end
-  end
-
-  def test_load_from_system_rakefile
-    in_environment('RAKE_SYSTEM' => 'test/data/sys') do
-      @app.options.rakelib = []
-      @app.instance_eval do
-        handle_options
-        options.silent = true
-        options.load_system = true
-        load_rakefile
-      end
-      assert_equal "test/data/sys", @app.system_dir
-      assert_nil @app.rakefile
-    end
-  end
-
-  def test_load_from_system_rakefile_on_unix
-    flexmock(@app, :windows? => false,
-      :win32_system_dir => nil,
-      :load => nil)
-    flexmock(File).should_receive(:expand_path).with("~").and_return("/HOME")
-    flexmock(File).should_receive(:expand_path).and_return { |fn| fn }
-    
-    in_environment('RAKE_SYSTEM' => nil) do
-      @app.options.rakelib = []
-      @app.instance_eval do
-        handle_options
-        options.silent = true
-        options.load_system = true
-        load_rakefile
-      end
-      assert_equal "/HOME/.rake", @app.system_dir
-    end
-  end
-
-  def test_windows
-    assert ! (@app.windows? && @app.unix?)
-  end
-
-  def test_load_from_system_rakefile_on_windows
-    flexmock(Rake::Win32, :windows? => true)
-    flexmock(@app, :standard_system_dir => "XX")
-    flexmock(@app).should_receive(:directory?).with("/AD/Rake").and_return(true)
-    flexmock(@app).should_receive(:load).and_return(nil)
-    in_environment('RAKE_SYSTEM' => nil, 'APPDATA' => '/AD') do
-      @app.options.rakelib = []
-      @app.instance_eval do
-        handle_options
-        options.silent = true
-        options.load_system = true
-        load_rakefile
-      end
-      assert_equal "/AD/Rake", @app.system_dir
-    end
-  end
-
-  def test_loading_imports
-    mock = flexmock("loader")
-    mock.should_receive(:load).with("x.dummy").once
-    @app.instance_eval do
-      add_loader("dummy", mock)
-      add_import("x.dummy")
-      load_imports
-    end
-  end
-
-  def test_building_imported_files_on_demand
-    mock = flexmock("loader")
-    mock.should_receive(:load).with("x.dummy").once
-    mock.should_receive(:make_dummy).with_no_args.once
-    @app.instance_eval do
-      intern(Rake::Task, "x.dummy").enhance do mock.make_dummy end
-        add_loader("dummy", mock)
-      add_import("x.dummy")
-      load_imports
-    end
-  end
-
-  def test_good_run
-    ran = false
-    ARGV.clear
-    ARGV << '--rakelib=""'
-    @app.options.silent = true
-    @app.instance_eval do
-      intern(Rake::Task, "default").enhance { ran = true }
-    end
-    in_environment("PWD" => "test/data/default") do
-      @app.run
-    end
-    assert ran
-  end
-
-  def test_display_task_run
-    ran = false
-    ARGV.clear
-    ARGV << '-f' << '-s' << '--tasks' << '--rakelib=""'
-    @app.last_description = "COMMENT"
-    @app.define_task(Rake::Task, "default")
-    out = capture_stdout { @app.run }
-    assert @app.options.show_tasks
-    assert ! ran
-    assert_match(/rake default/, out)
-    assert_match(/# COMMENT/, out)
-  end
-
-  def test_display_prereqs
-    ran = false
-    ARGV.clear
-    ARGV << '-f' << '-s' << '--prereqs' << '--rakelib=""'
-    @app.last_description = "COMMENT"
-    t = @app.define_task(Rake::Task, "default")
-    t.enhance([:a, :b])
-    @app.define_task(Rake::Task, "a")
-    @app.define_task(Rake::Task, "b")
-    out = capture_stdout { @app.run }
-    assert @app.options.show_prereqs
-    assert ! ran
-    assert_match(/rake a$/, out)
-    assert_match(/rake b$/, out)
-    assert_match(/rake default\n( *(a|b)\n){2}/m, out)
-  end
-
-  def test_bad_run
-    @app.intern(Rake::Task, "default").enhance { fail }
-    ARGV.clear
-    ARGV << '-f' << '-s' <<  '--rakelib=""'
-    assert_raise(SystemExit) {
-      err = capture_stderr { @app.run }
-      assert_match(/see full trace/, err)
-    }
-  ensure
-    ARGV.clear
-  end
-
-  def test_bad_run_with_trace
-    @app.intern(Rake::Task, "default").enhance { fail }
-    ARGV.clear
-    ARGV << '-f' << '-s' << '-t'
-    assert_raise(SystemExit) {
-      err = capture_stderr { capture_stdout { @app.run } }
-      assert_no_match(/see full trace/, err)
-    }
-  ensure
-    ARGV.clear
-  end
-
-  def test_run_with_bad_options
-    @app.intern(Rake::Task, "default").enhance { fail }
-    ARGV.clear
-    ARGV << '-f' << '-s' << '--xyzzy'
-    assert_raise(SystemExit) {
-      err = capture_stderr { capture_stdout { @app.run } }
-    }
-  ensure
-    ARGV.clear
-  end
-end
-
-
-######################################################################
-class TestApplicationOptions < Test::Unit::TestCase
-  include CaptureStdout
-
-  def setup
-    clear_argv
-    RakeFileUtils.verbose_flag = false
-    RakeFileUtils.nowrite_flag = false
-    TESTING_REQUIRE.clear
-  end
-
-  def teardown
-    clear_argv
-    RakeFileUtils.verbose_flag = false
-    RakeFileUtils.nowrite_flag = false
-  end
-  
-  def clear_argv
-    while ! ARGV.empty?
-      ARGV.pop
-    end
-  end
-
-  def test_default_options
-    opts = command_line
-    assert_nil opts.classic_namespace
-    assert_nil opts.dryrun
-    assert_nil opts.full_description
-    assert_nil opts.ignore_system
-    assert_nil opts.load_system
-    assert_nil opts.nosearch
-    assert_equal ['rakelib'], opts.rakelib
-    assert_nil opts.show_prereqs
-    assert_nil opts.show_task_pattern
-    assert_nil opts.show_tasks
-    assert_nil opts.silent
-    assert_nil opts.trace
-    assert_equal ['rakelib'], opts.rakelib
-    assert ! RakeFileUtils.verbose_flag
-    assert ! RakeFileUtils.nowrite_flag
-  end
-
-  def test_dry_run
-    flags('--dry-run', '-n') do |opts|
-      assert opts.dryrun
-      assert opts.trace
-      assert RakeFileUtils.verbose_flag
-      assert RakeFileUtils.nowrite_flag
-    end
-  end
-
-  def test_describe
-    flags('--describe') do |opts|
-      assert opts.full_description
-      assert opts.show_tasks
-      assert_equal(//.to_s, opts.show_task_pattern.to_s)
-    end
-  end
-
-  def test_describe_with_pattern
-    flags('--describe=X') do |opts|
-      assert opts.full_description
-      assert opts.show_tasks
-      assert_equal(/X/.to_s, opts.show_task_pattern.to_s)
-    end
-  end
-
-  def test_execute
-    $xyzzy = 0
-    flags('--execute=$xyzzy=1', '-e $xyzzy=1') do |opts|
-      assert_equal 1, $xyzzy
-      assert_equal :exit, @exit
-      $xyzzy = 0
-    end
-  end
-
-  def test_execute_and_continue
-    $xyzzy = 0
-    flags('--execute-continue=$xyzzy=1', '-E $xyzzy=1') do |opts|
-      assert_equal 1, $xyzzy
-      assert_not_equal :exit, @exit
-      $xyzzy = 0
-    end
-  end
-
-  def test_execute_and_print
-    $xyzzy = 0
-    flags('--execute-print=$xyzzy="pugh"', '-p $xyzzy="pugh"') do |opts|
-      assert_equal 'pugh', $xyzzy
-      assert_equal :exit, @exit
-      assert_match(/^pugh$/, @out)
-      $xyzzy = 0
-    end
-  end
-
-  def test_help
-    flags('--help', '-H', '-h') do |opts|
-      assert_match(/\Arake/, @out)
-      assert_match(/\boptions\b/, @out)
-      assert_match(/\btargets\b/, @out)
-      assert_equal :exit, @exit
-      assert_equal :exit, @exit
-    end
-  end
-
-  def test_libdir
-    flags(['--libdir', 'xx'], ['-I', 'xx'], ['-Ixx']) do |opts|
-      $:.include?('xx')
-    end
-  ensure
-    $:.delete('xx')
-  end
-
-  def test_rakefile
-    flags(['--rakefile', 'RF'], ['--rakefile=RF'], ['-f', 'RF'], ['-fRF']) do |opts|
-      assert_equal ['RF'], @app.instance_eval { @rakefiles }
-    end
-  end
-
-  def test_rakelib
-    flags(['--rakelibdir', 'A:B:C'], ['--rakelibdir=A:B:C'], ['-R', 'A:B:C'], ['-RA:B:C']) do |opts|
-      assert_equal ['A', 'B', 'C'], opts.rakelib
-    end
-  end
-
-  def test_require
-    flags(['--require', 'test/reqfile'], '-rtest/reqfile2', '-rtest/reqfile3') do |opts|
-    end
-    assert TESTING_REQUIRE.include?(1)
-    assert TESTING_REQUIRE.include?(2)
-    assert TESTING_REQUIRE.include?(3)
-    assert_equal 3, TESTING_REQUIRE.size
-  end
-
-  def test_missing_require
-    ex = assert_raises(LoadError) do
-      flags(['--require', 'test/missing']) do |opts|
-      end
-    end
-    assert_match(/no such file/, ex.message)
-    assert_match(/test\/missing/, ex.message)
-  end
-
-  def test_prereqs
-    flags('--prereqs', '-P') do |opts|
-      assert opts.show_prereqs
-    end
-  end
-
-  def test_quiet
-    flags('--quiet', '-q') do |opts|
-      assert ! RakeFileUtils.verbose_flag
-      assert ! opts.silent
-    end
-  end
-
-  def test_no_search
-    flags('--nosearch', '--no-search', '-N') do |opts|
-      assert opts.nosearch
-    end
-  end
-
-  def test_silent
-    flags('--silent', '-s') do |opts|
-      assert ! RakeFileUtils.verbose_flag
-      assert opts.silent
-    end
-  end
-
-  def test_system
-    flags('--system', '-g') do |opts|
-      assert opts.load_system
-    end
-  end
-
-  def test_no_system
-    flags('--no-system', '-G') do |opts|
-      assert opts.ignore_system
-    end
-  end
-
-  def test_trace
-    flags('--trace', '-t') do |opts|
-      assert opts.trace
-      assert RakeFileUtils.verbose_flag
-      assert ! RakeFileUtils.nowrite_flag
-    end
-  end
-
-  def test_trace_rules
-    flags('--rules') do |opts|
-      assert opts.trace_rules
-    end
-  end
-
-  def test_tasks
-    flags('--tasks', '-T') do |opts|
-      assert opts.show_tasks
-      assert_equal(//.to_s, opts.show_task_pattern.to_s)
-    end
-    flags(['--tasks', 'xyz'], ['-Txyz']) do |opts|
-      assert opts.show_tasks
-      assert_equal(/xyz/, opts.show_task_pattern)
-    end
-  end
-
-  def test_verbose
-    flags('--verbose', '-V') do |opts|
-      assert RakeFileUtils.verbose_flag
-      assert ! opts.silent
-    end
-  end
-
-  def test_version
-    flags('--version', '-V') do |opts|
-      assert_match(/\bversion\b/, @out)
-      assert_match(/\b#{RAKEVERSION}\b/, @out)
-      assert_equal :exit, @exit
-    end
-  end
-  
-  def test_classic_namespace
-    flags(['--classic-namespace'], ['-C', '-T', '-P', '-n', '-s', '-t']) do |opts|
-      assert opts.classic_namespace
-      assert_equal opts.show_tasks, $show_tasks
-      assert_equal opts.show_prereqs, $show_prereqs
-      assert_equal opts.trace, $trace
-      assert_equal opts.dryrun, $dryrun
-      assert_equal opts.silent, $silent
-    end
-  end
-
-  def test_bad_option
-    capture_stderr do
-      ex = assert_raise(OptionParser::InvalidOption) do
-        flags('--bad-option') 
-      end
-      if ex.message =~ /^While/ # Ruby 1.9 error message
-        assert_match(/while parsing/i, ex.message)
-      else                      # Ruby 1.8 error message
-        assert_match(/(invalid|unrecognized) option/i, ex.message)
-        assert_match(/--bad-option/, ex.message)
-      end
-    end
-  end
-
-  def test_task_collection
-    command_line("a", "b")
-    assert_equal ["a", "b"], @tasks.sort
-  end
-  
-  def test_default_task_collection
-    command_line()
-    assert_equal ["default"], @tasks
-  end
-  
-  def test_environment_definition
-    ENV.delete('TESTKEY')
-    command_line("a", "TESTKEY=12")
-    assert_equal ["a"], @tasks.sort
-    assert '12', ENV['TESTKEY']
-  end
-
-  private 
-
-  def flags(*sets)
-    sets.each do |set|
-      ARGV.clear
-      @out = capture_stdout { 
-        @exit = catch(:system_exit) { opts = command_line(*set) }
-      }
-      yield(@app.options) if block_given?
-    end
-  end
-
-  def command_line(*options)
-    options.each do |opt| ARGV << opt end
-    @app = Rake::Application.new
-    def @app.exit(*args)
-      throw :system_exit, :exit
-    end
-    @app.instance_eval do
-      collect_tasks handle_options
-    end
-    @tasks = @app.top_level_tasks
-    @app.options
-  end
-end
-
-class TestTaskArgumentParsing < Test::Unit::TestCase
-  def setup
-    @app = Rake::Application.new
-  end
-  
-  def test_name_only
-    name, args = @app.parse_task_string("name")
-    assert_equal "name", name
-    assert_equal [], args
-  end
-  
-  def test_empty_args
-    name, args = @app.parse_task_string("name[]")
-    assert_equal "name", name
-    assert_equal [], args
-  end
-  
-  def test_one_argument
-    name, args = @app.parse_task_string("name[one]")
-    assert_equal "name", name
-    assert_equal ["one"], args
-  end
-  
-  def test_two_arguments
-    name, args = @app.parse_task_string("name[one,two]")
-    assert_equal "name", name
-    assert_equal ["one", "two"], args
-  end
-  
-  def test_can_handle_spaces_between_args
-    name, args = @app.parse_task_string("name[one, two,\tthree , \tfour]")
-    assert_equal "name", name
-    assert_equal ["one", "two", "three", "four"], args
-  end
-
-  def test_keeps_embedded_spaces
-    name, args = @app.parse_task_string("name[a one ana, two]")
-    assert_equal "name", name
-    assert_equal ["a one ana", "two"], args
-  end
-
-end
-
-class TestTaskArgumentParsing < Test::Unit::TestCase
-  include InEnvironment
-
-  def test_terminal_width_using_env
-    app = Rake::Application.new
-    in_environment('RAKE_COLUMNS' => '1234') do
-      assert_equal 1234, app.terminal_width
-    end
-  end
-
-  def test_terminal_width_using_stty
-    app = Rake::Application.new
-    flexmock(app,
-      :unix? => true,
-      :dynamic_width_stty => 1235,
-      :dynamic_width_tput => 0)
-    in_environment('RAKE_COLUMNS' => nil) do
-      assert_equal 1235, app.terminal_width
-    end
-  end
-
-  def test_terminal_width_using_tput
-    app = Rake::Application.new
-    flexmock(app,
-      :unix? => true,
-      :dynamic_width_stty => 0,
-      :dynamic_width_tput => 1236)
-    in_environment('RAKE_COLUMNS' => nil) do
-      assert_equal 1236, app.terminal_width
-    end
-  end
-
-  def test_terminal_width_using_hardcoded_80
-    app = Rake::Application.new
-    flexmock(app, :unix? => false)
-    in_environment('RAKE_COLUMNS' => nil) do
-      assert_equal 80, app.terminal_width
-    end
-  end
-
-  def test_terminal_width_with_failure
-    app = Rake::Application.new
-    flexmock(app).should_receive(:unix?).and_throw(RuntimeError)
-    in_environment('RAKE_COLUMNS' => nil) do
-      assert_equal 80, app.terminal_width
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_clean.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_clean.rb
deleted file mode 100644
index da04ad1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_clean.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake/clean'
-
-class TestClean < Test::Unit::TestCase
-  include Rake
-  def test_clean
-    assert Task['clean'], "Should define clean"
-    assert Task['clobber'], "Should define clobber"
-    assert Task['clobber'].prerequisites.include?("clean"),
-      "Clobber should require clean"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_definitions.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_definitions.rb
deleted file mode 100644
index fe6d42c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_definitions.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'fileutils'
-require 'rake'
-require 'test/filecreation'
-
-######################################################################
-class TestDefinitions < Test::Unit::TestCase
-  include Rake
-  EXISTINGFILE = "testdata/existing"
-
-  def setup
-    Task.clear
-  end
-
-  def test_task
-    done = false
-    task :one => [:two] do done = true end
-    task :two
-    task :three => [:one, :two]
-    check_tasks(:one, :two, :three)
-    assert done, "Should be done"
-  end
-
-  def test_file_task
-    done = false
-    file "testdata/one" => "testdata/two" do done = true end
-    file "testdata/two"
-    file "testdata/three" => ["testdata/one", "testdata/two"]
-    check_tasks("testdata/one", "testdata/two", "testdata/three")
-    assert done, "Should be done"
-  end
-
-  def check_tasks(n1, n2, n3)
-    t = Task[n1]
-    assert Task === t, "Should be a Task"
-    assert_equal n1.to_s, t.name
-    assert_equal [n2.to_s], t.prerequisites.collect{|n| n.to_s}
-    t.invoke
-    t2 = Task[n2]
-    assert_equal FileList[], t2.prerequisites
-    t3 = Task[n3]
-    assert_equal [n1.to_s, n2.to_s], t3.prerequisites.collect{|n|n.to_s}
-  end
-
-  def test_incremental_definitions
-    runs = []
-    task :t1 => [:t2] do runs << "A"; 4321 end
-    task :t1 => [:t3] do runs << "B"; 1234 end
-    task :t1 => [:t3]
-    task :t2
-    task :t3
-    Task[:t1].invoke
-    assert_equal ["A", "B"], runs
-    assert_equal ["t2", "t3"], Task[:t1].prerequisites
-  end
-
-  def test_missing_dependencies
-    task :x => ["testdata/missing"]
-    assert_raises(RuntimeError) { Task[:x].invoke }
-  end
-
-  def test_implicit_file_dependencies
-    runs = []
-    create_existing_file
-    task :y => [EXISTINGFILE] do |t| runs << t.name end
-    Task[:y].invoke
-    assert_equal runs, ['y']
-  end
-
-  private # ----------------------------------------------------------
-
-  def create_existing_file
-    Dir.mkdir File.dirname(EXISTINGFILE) unless
-      File.exist?(File.dirname(EXISTINGFILE))
-    open(EXISTINGFILE, "w") do |f| f.puts "HI" end unless
-      File.exist?(EXISTINGFILE)
-  end
-
-end
-  
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_earlytime.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_earlytime.rb
deleted file mode 100644
index e63bd54..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_earlytime.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-class TestEarlyTime < Test::Unit::TestCase
-  def test_create
-    early = Rake::EarlyTime.instance
-    time = Time.mktime(1970, 1, 1, 0, 0, 0)
-    assert early <= Time.now
-    assert early < Time.now
-    assert early != Time.now
-    assert Time.now > early
-    assert Time.now >= early
-    assert Time.now != early
-  end
-
-  def test_equality
-    early = Rake::EarlyTime.instance
-    assert_equal early, early, "two early times should be equal"
-  end
-
-  def test_original_time_compare_is_not_messed_up
-    t1 = Time.mktime(1970, 1, 1, 0, 0, 0)
-    t2 = Time.now
-    assert t1 < t2
-    assert t2 > t1
-    assert t1 == t1
-    assert t2 == t2    
-  end
-
-  def test_to_s
-    assert_equal "<EARLY TIME>", Rake::EARLY.to_s
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_extension.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_extension.rb
deleted file mode 100644
index 4a5784c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_extension.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-require 'stringio'
-
-######################################################################
-class TestExtension < Test::Unit::TestCase
-
-  module Redirect
-    def error_redirect
-      old_err = $stderr
-      result = StringIO.new
-      $stderr = result
-      yield
-      result
-    ensure
-      $stderr = old_err
-    end
-  end
-  
-  class Sample
-    extend Redirect
-
-    def duplicate_method
-      :original
-    end
-    
-    OK_ERRS = error_redirect do
-      rake_extension("a") do
-        def ok_method
-        end
-      end
-    end
-
-
-    DUP_ERRS = error_redirect do
-      rake_extension("duplicate_method") do
-        def duplicate_method
-          :override
-        end
-      end
-    end
-  end
-
-  def test_methods_actually_exist
-    sample = Sample.new
-    sample.ok_method
-    sample.duplicate_method
-  end
-
-  def test_no_warning_when_defining_ok_method
-    assert_equal "", Sample::OK_ERRS.string
-  end
-
-  def test_extension_complains_when_a_method_that_is_present
-    assert_match(/warning:/i, Sample::DUP_ERRS.string)
-    assert_match(/already exists/i, Sample::DUP_ERRS.string)
-    assert_match(/duplicate_method/i, Sample::DUP_ERRS.string)
-    assert_equal :original, Sample.new.duplicate_method
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_file_creation_task.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_file_creation_task.rb
deleted file mode 100644
index 1544e14..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_file_creation_task.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'fileutils'
-require 'rake'
-require 'test/filecreation'
-
-######################################################################
-class TestFileCreationTask < Test::Unit::TestCase
-  include Rake
-  include FileCreation
-
-  DUMMY_DIR = 'testdata/dummy_dir'
-
-  def setup
-    Task.clear
-  end
-
-  def teardown
-    FileUtils.rm_rf DUMMY_DIR
-  end
-
-  def test_file_needed
-    create_dir DUMMY_DIR
-    fc_task = Task[DUMMY_DIR]
-    assert_equal DUMMY_DIR, fc_task.name
-    FileUtils.rm_rf fc_task.name
-    assert fc_task.needed?, "file should be needed"
-    FileUtils.mkdir fc_task.name
-    assert_equal nil, fc_task.prerequisites.collect{|n| Task[n].timestamp}.max
-    assert ! fc_task.needed?, "file should not be needed"
-  end
-
-  def test_directory
-    directory DUMMY_DIR
-    fc_task = Task[DUMMY_DIR]
-    assert_equal DUMMY_DIR, fc_task.name
-    assert FileCreationTask === fc_task
-  end
-
-  def test_no_retriggers_on_filecreate_task
-    create_timed_files(OLDFILE, NEWFILE)
-    t1 = Rake.application.intern(FileCreationTask, OLDFILE).enhance([NEWFILE])
-    t2 = Rake.application.intern(FileCreationTask, NEWFILE)
-    assert ! t2.needed?, "Should not need to build new file"
-    assert ! t1.needed?, "Should not need to rebuild old file because of new"
-  end
-
-  def test_no_retriggers_on_file_task
-    create_timed_files(OLDFILE, NEWFILE)
-    t1 = Rake.application.intern(FileCreationTask, OLDFILE).enhance([NEWFILE])
-    t2 = Rake.application.intern(FileCreationTask, NEWFILE)
-    assert ! t2.needed?, "Should not need to build new file"
-    assert ! t1.needed?, "Should not need to rebuild old file because of new"
-  end
-
-  def test_very_early_timestamp
-    t1 = Rake.application.intern(FileCreationTask, OLDFILE)
-    assert t1.timestamp < Time.now
-    assert t1.timestamp < Time.now - 1000000
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_file_task.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_file_task.rb
deleted file mode 100644
index 383ee0d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_file_task.rb
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'fileutils'
-require 'rake'
-require 'test/filecreation'
-
-######################################################################
-class TestFileTask < Test::Unit::TestCase
-  include Rake
-  include FileCreation
-
-  def setup
-    Task.clear
-    @runs = Array.new
-    FileUtils.rm_f NEWFILE
-    FileUtils.rm_f OLDFILE
-  end
-
-  def test_file_need
-    name = "testdata/dummy"
-    file name
-    ftask = Task[name]
-    assert_equal name.to_s, ftask.name
-    File.delete(ftask.name) rescue nil
-    assert ftask.needed?, "file should be needed"
-    open(ftask.name, "w") { |f| f.puts "HI" }
-    assert_equal nil, ftask.prerequisites.collect{|n| Task[n].timestamp}.max
-    assert ! ftask.needed?, "file should not be needed"
-    File.delete(ftask.name) rescue nil
-  end
-
-  def test_file_times_new_depends_on_old
-    create_timed_files(OLDFILE, NEWFILE)
-
-    t1 = Rake.application.intern(FileTask, NEWFILE).enhance([OLDFILE])
-    t2 = Rake.application.intern(FileTask, OLDFILE)
-    assert ! t2.needed?, "Should not need to build old file"
-    assert ! t1.needed?, "Should not need to rebuild new file because of old"
-  end
-
-  def test_file_times_old_depends_on_new
-    create_timed_files(OLDFILE, NEWFILE)
-
-    t1 = Rake.application.intern(FileTask,OLDFILE).enhance([NEWFILE])
-    t2 = Rake.application.intern(FileTask, NEWFILE)
-    assert ! t2.needed?, "Should not need to build new file"
-    preq_stamp = t1.prerequisites.collect{|t| Task[t].timestamp}.max
-    assert_equal t2.timestamp, preq_stamp
-    assert t1.timestamp < preq_stamp, "T1 should be older"
-    assert t1.needed?, "Should need to rebuild old file because of new"
-  end
-
-  def test_file_depends_on_task_depend_on_file
-    create_timed_files(OLDFILE, NEWFILE)
-
-    file NEWFILE => [:obj] do |t| @runs << t.name end
-    task :obj => [OLDFILE] do |t| @runs << t.name end
-    file OLDFILE           do |t| @runs << t.name end
-
-    Task[:obj].invoke
-    Task[NEWFILE].invoke
-    assert ! @runs.include?(NEWFILE)
-  end
-
-  def test_existing_file_depends_on_non_existing_file
-    create_file(OLDFILE)
-    delete_file(NEWFILE)
-    file NEWFILE
-    file OLDFILE => NEWFILE
-    assert_nothing_raised do Task[OLDFILE].invoke end
-  end
-
-  # I have currently disabled this test.  I'm not convinced that
-  # deleting the file target on failure is always the proper thing to
-  # do.  I'm willing to hear input on this topic.
-  def ztest_file_deletes_on_failure
-    task :obj 
-    file NEWFILE => [:obj] do |t|
-      FileUtils.touch NEWFILE
-      fail "Ooops"
-    end
-    assert Task[NEWFILE]
-    begin
-      Task[NEWFILE].invoke
-    rescue Exception
-    end
-    assert( ! File.exist?(NEWFILE), "NEWFILE should be deleted")
-  end
-
-end
-
-######################################################################
-class TestDirectoryTask < Test::Unit::TestCase
-  include Rake
-
-  def setup
-    rm_rf "testdata", :verbose=>false
-  end
-
-  def teardown
-    rm_rf "testdata", :verbose=>false
-  end
-
-  def test_directory
-    desc "DESC"
-    directory "testdata/a/b/c"
-    assert_equal FileCreationTask, Task["testdata"].class
-    assert_equal FileCreationTask, Task["testdata/a"].class
-    assert_equal FileCreationTask, Task["testdata/a/b/c"].class
-    assert_nil             Task["testdata"].comment
-    assert_equal "DESC",   Task["testdata/a/b/c"].comment
-    assert_nil             Task["testdata/a/b"].comment
-    verbose(false) {
-      Task['testdata/a/b'].invoke
-    }
-    assert File.exist?("testdata/a/b")
-    assert ! File.exist?("testdata/a/b/c")
-  end
-
-  def test_directory_win32
-    desc "WIN32 DESC"
-    FileUtils.mkdir_p("testdata")
-    Dir.chdir("testdata") do
-      directory 'c:/testdata/a/b/c'
-      assert_equal FileCreationTask, Task['c:/testdata'].class
-      assert_equal FileCreationTask, Task['c:/testdata/a'].class
-      assert_equal FileCreationTask, Task['c:/testdata/a/b/c'].class
-      assert_nil             Task['c:/testdata'].comment
-      assert_equal "WIN32 DESC",   Task['c:/testdata/a/b/c'].comment
-      assert_nil             Task['c:/testdata/a/b'].comment
-      verbose(false) {
-        Task['c:/testdata/a/b'].invoke
-      }
-      assert File.exist?('c:/testdata/a/b')
-      assert ! File.exist?('c:/testdata/a/b/c')
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_filelist.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_filelist.rb
deleted file mode 100644
index b6a6265..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_filelist.rb
+++ /dev/null
@@ -1,618 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-require 'test/capture_stdout'
-
-class TestFileList < Test::Unit::TestCase
-  FileList = Rake::FileList
-  include CaptureStdout
-
-  def setup
-    create_test_data
-  end
-
-  def teardown
-#    FileList.select_default_ignore_patterns
-    FileUtils.rm_rf("testdata")
-  end
-
-  def test_delgating_methods_do_not_include_to_a_or_to_ary
-    assert ! FileList::DELEGATING_METHODS.include?("to_a"), "should not include to_a"
-    assert ! FileList::DELEGATING_METHODS.include?(:to_a), "should not include to_a"
-    assert ! FileList::DELEGATING_METHODS.include?("to_ary"), "should not include to_ary"
-    assert ! FileList::DELEGATING_METHODS.include?(:to_ary), "should not include to_ary"
-  end
-
-  def test_create
-    fl = FileList.new
-    assert_equal 0, fl.size
-  end
-
-  def test_create_with_args
-    fl = FileList.new("testdata/*.c", "x")
-    assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
-      fl.sort
-  end
-
-  def test_create_with_block
-    fl = FileList.new { |f| f.include("x") }
-    assert_equal ["x"], fl.resolve
-  end
-
-  def test_create_with_brackets
-    fl = FileList["testdata/*.c", "x"]
-    assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
-      fl.sort
-  end
-
-  def test_create_with_brackets_and_filelist
-    fl = FileList[FileList["testdata/*.c", "x"]]
-    assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
-      fl.sort
-  end
-
-  def test_include_with_another_array
-    fl = FileList.new.include(["x", "y", "z"])
-    assert_equal ["x", "y", "z"].sort, fl.sort
-  end
-
-  def test_include_with_another_filelist
-    fl = FileList.new.include(FileList["testdata/*.c", "x"])
-    assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
-      fl.sort
-  end
-
-  def test_append
-    fl = FileList.new
-    fl << "a.rb" << "b.rb"
-    assert_equal ['a.rb', 'b.rb'], fl
-  end
-
-  def test_add_many
-    fl = FileList.new
-    fl.include %w(a d c)
-    fl.include('x', 'y')
-    assert_equal ['a', 'd', 'c', 'x', 'y'], fl
-    assert_equal ['a', 'd', 'c', 'x', 'y'], fl.resolve
-  end
-
-  def test_add_return
-    f = FileList.new
-    g = f << "x"
-    assert_equal f.object_id, g.object_id
-    h = f.include("y")
-    assert_equal f.object_id, h.object_id
-  end
-  
-  def test_match
-    fl = FileList.new
-    fl.include('test/test*.rb')
-    assert fl.include?("test/test_filelist.rb")
-    assert fl.size > 3
-    fl.each { |fn| assert_match(/\.rb$/, fn) }
-  end
-
-  def test_add_matching
-    fl = FileList.new
-    fl << "a.java"
-    fl.include("test/*.rb")
-    assert_equal "a.java", fl[0]
-    assert fl.size > 2
-    assert fl.include?("test/test_filelist.rb")
-  end
-
-  def test_multiple_patterns
-    create_test_data
-    fl = FileList.new
-    fl.include('*.c', '*xist*')
-    assert_equal [], fl
-    fl.include('testdata/*.c', 'testdata/*xist*')
-    assert_equal [
-      'testdata/x.c', 'testdata/xyz.c', 'testdata/abc.c', 'testdata/existing'
-    ].sort, fl.sort
-  end
-
-  def test_square_bracket_pattern
-    fl = FileList.new
-    fl.include("testdata/abc.[ch]")
-    assert fl.size == 2
-    assert fl.include?("testdata/abc.c")
-    assert fl.include?("testdata/abc.h")
-  end
-
-  def test_curly_bracket_pattern
-    fl = FileList.new
-    fl.include("testdata/abc.{c,h}")
-    assert fl.size == 2
-    assert fl.include?("testdata/abc.c")
-    assert fl.include?("testdata/abc.h")
-  end
-
-  def test_reject
-    fl = FileList.new
-    fl.include %w(testdata/x.c testdata/abc.c testdata/xyz.c testdata/existing)
-    fl.reject! { |fn| fn =~ %r{/x} }
-    assert_equal [
-      'testdata/abc.c', 'testdata/existing'
-    ], fl
-  end
-
-  def test_exclude
-    fl = FileList['testdata/x.c', 'testdata/abc.c', 'testdata/xyz.c', 'testdata/existing']
-    fl.each { |fn| touch fn, :verbose => false }
-    x = fl.exclude(%r{/x.+\.})
-    assert_equal FileList, x.class
-    assert_equal %w(testdata/x.c testdata/abc.c testdata/existing), fl
-    assert_equal fl.object_id, x.object_id
-    fl.exclude('testdata/*.c')
-    assert_equal ['testdata/existing'], fl
-    fl.exclude('testdata/existing')
-    assert_equal [], fl
-  end
-  
-  def test_excluding_via_block
-    fl = FileList['testdata/a.c', 'testdata/b.c', 'testdata/xyz.c']
-    fl.exclude { |fn| fn.pathmap('%n') == 'xyz' }
-    assert fl.exclude?("xyz.c"), "Should exclude xyz.c"
-    assert_equal ['testdata/a.c', 'testdata/b.c'], fl
-  end
-
-  def test_exclude_return_on_create
-    fl = FileList['testdata/*'].exclude(/.*\.[hcx]$/)
-    assert_equal ['testdata/existing', 'testdata/cfiles'].sort, fl.sort
-    assert_equal FileList, fl.class
-  end
-
-  def test_exclude_with_string_return_on_create
-    fl = FileList['testdata/*'].exclude('testdata/abc.c')
-    assert_equal %w(testdata/existing testdata/cfiles testdata/x.c testdata/abc.h testdata/abc.x testdata/xyz.c).sort, fl.sort
-    assert_equal FileList, fl.class
-  end
-
-  def test_default_exclude
-    fl = FileList.new
-    fl.clear_exclude
-    fl.include("**/*~", "**/*.bak", "**/core")
-    assert fl.member?("testdata/core"), "Should include core"
-    assert fl.member?("testdata/x.bak"), "Should include .bak files"
-  end
-
-  def test_unique
-    fl = FileList.new
-    fl << "x.c" << "a.c" << "b.rb" << "a.c"
-    assert_equal ['x.c', 'a.c', 'b.rb', 'a.c'], fl
-    fl.uniq!
-    assert_equal ['x.c', 'a.c', 'b.rb'], fl
-  end
-
-  def test_to_string
-    fl = FileList.new
-    fl << "a.java" << "b.java"
-    assert_equal  "a.java b.java", fl.to_s
-    assert_equal  "a.java b.java", "#{fl}"
-  end
-
-  def test_to_array
-    fl = FileList['a.java', 'b.java']
-    assert_equal  ['a.java', 'b.java'], fl.to_a
-    assert_equal  Array, fl.to_a.class
-    assert_equal  ['a.java', 'b.java'], fl.to_ary
-    assert_equal  Array, fl.to_ary.class
-  end
-
-  def test_to_s_pending
-    fl = FileList['testdata/abc.*']
-    result = fl.to_s
-    assert_match(%r{testdata/abc\.c}, result)
-    assert_match(%r{testdata/abc\.h}, result)
-    assert_match(%r{testdata/abc\.x}, result)
-    assert_match(%r{(testdata/abc\..\b ?){2}}, result)
-  end
-
-  def test_inspect_pending
-    fl = FileList['testdata/abc.*']
-    result = fl.inspect
-    assert_match(%r{"testdata/abc\.c"}, result)
-    assert_match(%r{"testdata/abc\.h"}, result)
-    assert_match(%r{"testdata/abc\.x"}, result)
-    assert_match(%r|^\[("testdata/abc\..", ){2}"testdata/abc\.."\]$|, result)
-  end
-
-  def test_sub
-    fl = FileList["testdata/*.c"]
-    f2 = fl.sub(/\.c$/, ".o")
-    assert_equal FileList, f2.class
-    assert_equal ["testdata/abc.o", "testdata/x.o", "testdata/xyz.o"].sort,
-      f2.sort
-    f3 = fl.gsub(/\.c$/, ".o")
-    assert_equal FileList, f3.class
-    assert_equal ["testdata/abc.o", "testdata/x.o", "testdata/xyz.o"].sort,
-      f3.sort
-  end
-  
-  def test_claim_to_be_a_kind_of_array
-    fl = FileList['testdata/*.c']
-    assert fl.is_a?(Array)
-    assert fl.kind_of?(Array)
-  end
-  
-  def test_claim_to_be_a_kind_of_filelist
-    fl = FileList['testdata/*.c']
-    assert fl.is_a?(FileList)
-    assert fl.kind_of?(FileList)
-  end
-  
-  def test_claim_to_be_a_filelist_instance
-    fl = FileList['testdata/*.c']
-    assert fl.instance_of?(FileList)
-  end
-  
-  def test_dont_claim_to_be_an_array_instance
-    fl = FileList['testdata/*.c']
-    assert ! fl.instance_of?(Array)
-  end
-
-  def test_sub!
-    f = "x/a.c"
-    fl = FileList[f, "x/b.c"]
-    res = fl.sub!(/\.c$/, ".o")
-    assert_equal ["x/a.o", "x/b.o"].sort, fl.sort
-    assert_equal "x/a.c", f
-    assert_equal fl.object_id, res.object_id
-  end
-
-  def test_sub_with_block
-    fl = FileList["src/org/onestepback/a.java", "src/org/onestepback/b.java"]
-# The block version doesn't work the way I want it to ...
-#    f2 = fl.sub(%r{^src/(.*)\.java$}) { |x|  "classes/" + $1 + ".class" }
-    f2 = fl.sub(%r{^src/(.*)\.java$}, "classes/\\1.class")
-    assert_equal [
-      "classes/org/onestepback/a.class",
-      "classes/org/onestepback/b.class"
-    ].sort,
-      f2.sort
-  end
-
-  def test_string_ext
-    assert_equal "one.net", "one.two".ext("net")
-    assert_equal "one.net", "one.two".ext(".net")
-    assert_equal "one.net", "one".ext("net")
-    assert_equal "one.net", "one".ext(".net")
-    assert_equal "one.two.net", "one.two.c".ext(".net")
-    assert_equal "one/two.net", "one/two.c".ext(".net")
-    assert_equal "one.x/two.net", "one.x/two.c".ext(".net")
-    assert_equal "one.x\\two.net", "one.x\\two.c".ext(".net")
-    assert_equal "one.x/two.net", "one.x/two".ext(".net")
-    assert_equal "one.x\\two.net", "one.x\\two".ext(".net")
-    assert_equal ".onerc.net", ".onerc.dot".ext("net")
-    assert_equal ".onerc.net", ".onerc".ext("net")
-    assert_equal ".a/.onerc.net", ".a/.onerc".ext("net")
-    assert_equal "one", "one.two".ext('')
-    assert_equal "one", "one.two".ext
-    assert_equal ".one", ".one.two".ext
-    assert_equal ".one", ".one".ext
-    assert_equal ".", ".".ext("c")
-    assert_equal "..", "..".ext("c")
-  end
-
-  def test_filelist_ext
-    assert_equal FileList['one.c', '.one.c'],
-      FileList['one.net', '.one'].ext('c')
-  end
-
-  def test_gsub
-    create_test_data
-    fl = FileList["testdata/*.c"]
-    f2 = fl.gsub(/a/, "A")
-    assert_equal ["testdAtA/Abc.c", "testdAtA/x.c", "testdAtA/xyz.c"].sort,
-      f2.sort
-  end
-
-  def test_gsub!
-    create_test_data
-    f = FileList["testdata/*.c"]
-    f.gsub!(/a/, "A")
-    assert_equal ["testdAtA/Abc.c", "testdAtA/x.c", "testdAtA/xyz.c"].sort,
-      f.sort
-  end
-
-  def test_egrep_with_output
-    files = FileList['test/test*.rb']
-    the_line_number = __LINE__ + 1
-    out = capture_stdout do files.egrep(/PUGH/) end
-    assert_match(/:#{the_line_number}:/, out)
-  end
-
-  def test_egrep_with_block
-    files = FileList['test/test*.rb']
-    found = false
-    the_line_number = __LINE__ + 1
-    files.egrep(/XYZZY/) do |fn, ln, line |
-      assert_equal 'test/test_filelist.rb', fn
-      assert_equal the_line_number, ln
-      assert_match(/files\.egrep/, line)
-      found = true
-    end
-    assert found, "should have found a matching line"
-  end
-
-  def test_existing
-    fl = FileList['testdata/abc.c', 'testdata/notthere.c']
-    assert_equal ["testdata/abc.c"], fl.existing
-    assert fl.existing.is_a?(FileList)
-  end
-
-  def test_existing!
-    fl = FileList['testdata/abc.c', 'testdata/notthere.c']
-    result = fl.existing!
-    assert_equal ["testdata/abc.c"], fl
-    assert_equal fl.object_id, result.object_id
-  end
-
-  def test_ignore_special
-    f = FileList['testdata/*']
-    assert ! f.include?("testdata/CVS"), "Should not contain CVS"
-    assert ! f.include?("testdata/.svn"), "Should not contain .svn"
-    assert ! f.include?("testdata/.dummy"), "Should not contain dot files"
-    assert ! f.include?("testdata/x.bak"), "Should not contain .bak files"
-    assert ! f.include?("testdata/x~"), "Should not contain ~ files"
-    assert ! f.include?("testdata/core"), "Should not contain core files"
-  end
-
-  def test_clear_ignore_patterns
-    f = FileList['testdata/*', 'testdata/.svn']
-    f.clear_exclude
-    assert f.include?("testdata/abc.c")
-    assert f.include?("testdata/xyz.c")
-    assert f.include?("testdata/CVS")
-    assert f.include?("testdata/.svn")
-    assert f.include?("testdata/x.bak")
-    assert f.include?("testdata/x~")
-  end
-
-  def test_exclude_with_alternate_file_seps
-    fl = FileList.new
-    assert fl.exclude?("x/CVS/y")
-    assert fl.exclude?("x\\CVS\\y")
-    assert fl.exclude?("x/.svn/y")
-    assert fl.exclude?("x\\.svn\\y")
-    assert fl.exclude?("x/core")
-    assert fl.exclude?("x\\core")
-  end
-
-  def test_add_default_exclude_list
-    fl = FileList.new
-    fl.exclude(/~\d+$/)
-    assert fl.exclude?("x/CVS/y")
-    assert fl.exclude?("x\\CVS\\y")
-    assert fl.exclude?("x/.svn/y")
-    assert fl.exclude?("x\\.svn\\y")
-    assert fl.exclude?("x/core")
-    assert fl.exclude?("x\\core")
-    assert fl.exclude?("x/abc~1")
-  end
-
-  def test_basic_array_functions
-    f = FileList['b', 'c', 'a']
-    assert_equal 'b', f.first
-    assert_equal 'b', f[0]
-    assert_equal 'a', f.last
-    assert_equal 'a', f[2]
-    assert_equal 'a', f[-1]
-    assert_equal ['a', 'b', 'c'], f.sort
-    f.sort!
-    assert_equal ['a', 'b', 'c'], f
-  end
-
-  def test_flatten
-    assert_equal ['a', 'testdata/x.c', 'testdata/xyz.c', 'testdata/abc.c'].sort,
-      ['a', FileList['testdata/*.c']].flatten.sort
-  end
-
-  def test_clone_and_dup
-    a = FileList['a', 'b', 'c']
-    c = a.clone
-    d = a.dup
-    a << 'd'
-    assert_equal ['a', 'b', 'c', 'd'], a
-    assert_equal ['a', 'b', 'c'], c
-    assert_equal ['a', 'b', 'c'], d
-  end
-
-  def test_dup_and_clone_replicate_taint
-    a = FileList['a', 'b', 'c']
-    a.taint
-    c = a.clone
-    d = a.dup
-    assert c.tainted?, "Clone should be tainted"
-    assert d.tainted?, "Dup should be tainted"
-  end
-
-  def test_duped_items_will_thaw
-    a = FileList['a', 'b', 'c']
-    a.freeze
-    d = a.dup
-    d << 'more'
-    assert_equal ['a', 'b', 'c', 'more'], d
-  end
-
-  def test_cloned_items_stay_frozen
-    a = FileList['a', 'b', 'c']
-    a.freeze
-    c = a.clone
-    assert_raise(TypeError, RuntimeError) do
-      c << 'more'
-    end
-  end
-
-  def test_array_comparisons
-    fl = FileList['b', 'b']
-    a = ['b', 'a']
-    b = ['b', 'b']
-    c = ['b', 'c']
-    assert_equal( 1,  fl <=> a )
-    assert_equal( 0,  fl <=> b )
-    assert_equal( -1, fl <=> c )
-    assert_equal( -1, a <=> fl )
-    assert_equal( 0,  b <=> fl )
-    assert_equal( 1,  c <=> fl )
-  end
-
-  def test_array_equality
-    a = FileList['a', 'b']
-    b = ['a', 'b']
-    assert a == b
-    assert b == a
-#   assert a.eql?(b)
-#    assert b.eql?(a)
-    assert ! a.equal?(b)
-    assert ! b.equal?(a)
-  end
-
-  def test_enumeration_methods
-    a = FileList['a', 'b']
-    b = a.collect { |it| it.upcase }
-    assert_equal ['A', 'B'], b
-    assert_equal FileList,  b.class
-
-    b = a.map { |it| it.upcase }
-    assert_equal ['A', 'B'], b
-    assert_equal FileList,  b.class
-
-    b = a.sort
-    assert_equal ['a', 'b'], b
-    assert_equal FileList,  b.class
-
-    b = a.sort_by { |it| it }
-    assert_equal ['a', 'b'], b
-    assert_equal FileList,  b.class
-
-    b = a.find_all { |it| it == 'b'}
-    assert_equal ['b'], b
-    assert_equal FileList,  b.class
-
-    b = a.select { |it| it.size == 1 }
-    assert_equal ['a', 'b'], b
-    assert_equal FileList,  b.class
-
-    b = a.reject { |it| it == 'b' }
-    assert_equal ['a'], b
-    assert_equal FileList,  b.class
-
-    b = a.grep(/./)
-    assert_equal ['a', 'b'], b
-    assert_equal FileList,  b.class
-
-    b = a.partition { |it| it == 'b' }
-    assert_equal [['b'], ['a']], b
-    assert_equal Array, b.class
-    assert_equal FileList,  b[0].class
-    assert_equal FileList,  b[1].class
-
-    b = a.zip(['x', 'y']).to_a
-    assert_equal [['a', 'x'], ['b', 'y']], b
-    assert_equal Array, b.class
-    assert_equal Array, b[0].class
-    assert_equal Array, b[1].class
-  end
-
-  def test_array_operators
-    a = ['a', 'b']
-    b = ['c', 'd']
-    f = FileList['x', 'y']
-    g = FileList['w', 'z']
-
-    r = f + g
-    assert_equal ['x', 'y', 'w', 'z'], r
-    assert_equal FileList, r.class
-
-    r = a + g
-    assert_equal ['a', 'b', 'w', 'z'], r
-    assert_equal Array, r.class
-
-    r = f + b
-    assert_equal ['x', 'y', 'c', 'd'], r
-    assert_equal FileList, r.class
-
-    r = FileList['w', 'x', 'y', 'z'] - f
-    assert_equal ['w', 'z'], r
-    assert_equal FileList, r.class
-
-    r = FileList['w', 'x', 'y', 'z'] & f
-    assert_equal ['x', 'y'], r
-    assert_equal FileList, r.class
-
-    r = f * 2
-    assert_equal ['x', 'y', 'x', 'y'], r
-    assert_equal FileList, r.class
-
-    r = f * ','
-    assert_equal 'x,y', r
-    assert_equal String, r.class
-
-    r = f | ['a', 'x']
-    assert_equal ['a', 'x', 'y'].sort, r.sort
-    assert_equal FileList, r.class
-  end
-
-  def test_other_array_returning_methods
-    f = FileList['a', nil, 'b']
-    r = f.compact
-    assert_equal ['a', 'b'], r
-    assert_equal FileList, r.class
-
-    f = FileList['a', 'b']
-    r = f.concat(['x', 'y'])
-    assert_equal ['a', 'b', 'x', 'y'], r
-    assert_equal FileList, r.class
-
-    f = FileList['a', ['b', 'c'], FileList['d', 'e']]
-    r = f.flatten
-    assert_equal ['a', 'b', 'c', 'd', 'e'], r
-    assert_equal FileList, r.class
-
-    f = FileList['a', 'b', 'a']
-    r = f.uniq
-    assert_equal ['a', 'b'], r
-    assert_equal FileList, r.class
-
-    f = FileList['a', 'b', 'c', 'd']
-    r = f.values_at(1,3)
-    assert_equal ['b', 'd'], r
-    assert_equal FileList, r.class
-  end
-  
-  def test_file_utils_can_use_filelists
-    cfiles = FileList['testdata/*.c']
-    
-    cp cfiles, @cdir, :verbose => false
-    
-    assert File.exist?(File.join(@cdir, 'abc.c'))
-    assert File.exist?(File.join(@cdir, 'xyz.c'))
-    assert File.exist?(File.join(@cdir, 'x.c'))
-  end
-
-  def create_test_data
-    verbose(false) do
-      
-      mkdir "testdata" unless File.exist? "testdata"
-      mkdir "testdata/CVS" rescue nil
-      mkdir "testdata/.svn" rescue nil
-      @cdir = "testdata/cfiles"
-      mkdir @cdir rescue nil
-      touch "testdata/.dummy"
-      touch "testdata/x.bak"
-      touch "testdata/x~"
-      touch "testdata/core"
-      touch "testdata/x.c"
-      touch "testdata/xyz.c"
-      touch "testdata/abc.c"
-      touch "testdata/abc.h"
-      touch "testdata/abc.x"
-      touch "testdata/existing"
-    end
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_fileutils.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_fileutils.rb
deleted file mode 100644
index c2ac257..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_fileutils.rb
+++ /dev/null
@@ -1,250 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rake'
-require 'test/unit'
-require 'test/filecreation'
-require 'fileutils'
-require 'stringio'
-
-class TestFileUtils < Test::Unit::TestCase
-  include FileCreation
-
-  def setup
-    File.chmod(0750,"test/shellcommand.rb")
-  end
-  
-  def teardown
-    FileUtils.rm_rf("testdata")
-    FileUtils::LN_SUPPORTED[0] = true
-  end
-  
-  def test_rm_one_file
-    create_file("testdata/a")
-    FileUtils.rm_rf "testdata/a"
-    assert ! File.exist?("testdata/a")
-  end
-
-  def test_rm_two_files
-    create_file("testdata/a")
-    create_file("testdata/b")
-    FileUtils.rm_rf ["testdata/a", "testdata/b"]
-    assert ! File.exist?("testdata/a")
-    assert ! File.exist?("testdata/b")
-  end
-
-  def test_rm_filelist
-    list = Rake::FileList.new << "testdata/a" << "testdata/b"
-    list.each { |fn| create_file(fn) }
-    FileUtils.rm_r list
-    assert ! File.exist?("testdata/a")
-    assert ! File.exist?("testdata/b")
-  end
-
-  def test_ln
-    create_dir("testdata")
-    open("testdata/a", "w") { |f| f.puts "TEST_LN" }
-    RakeFileUtils.safe_ln("testdata/a", "testdata/b", :verbose => false)
-    assert_equal "TEST_LN\n", open("testdata/b") { |f| f.read }
-  end
-
-  class BadLink
-    include RakeFileUtils
-    attr_reader :cp_args
-    def initialize(klass)
-      @failure_class = klass
-    end
-    def cp(*args)
-      @cp_args = args
-    end
-    def ln(*args)
-      fail @failure_class, "ln not supported"
-    end
-    public :safe_ln
-  end
-
-  def test_safe_ln_failover_to_cp_on_standard_error
-    FileUtils::LN_SUPPORTED[0] = true
-    c = BadLink.new(StandardError)
-    c.safe_ln "a", "b"
-    assert_equal ['a', 'b'], c.cp_args
-    c.safe_ln "x", "y"
-    assert_equal ['x', 'y'], c.cp_args
-  end
-
-  def test_safe_ln_failover_to_cp_on_not_implemented_error
-    FileUtils::LN_SUPPORTED[0] = true
-    c = BadLink.new(NotImplementedError)
-    c.safe_ln "a", "b"
-    assert_equal ['a', 'b'], c.cp_args
-  end
-
-  def test_safe_ln_fails_on_script_error
-    FileUtils::LN_SUPPORTED[0] = true
-    c = BadLink.new(ScriptError)
-    assert_raise(ScriptError) do c.safe_ln "a", "b" end
-  end
-
-  def test_verbose
-    verbose true
-    assert_equal true, verbose
-    verbose false
-    assert_equal false, verbose
-    verbose(true) {
-      assert_equal true, verbose
-    }
-    assert_equal false, verbose
-  end
-
-  def test_nowrite
-    nowrite true
-    assert_equal true, nowrite
-    nowrite false
-    assert_equal false, nowrite
-    nowrite(true){
-      assert_equal true, nowrite
-    }
-    assert_equal false, nowrite
-  end
-
-  def test_file_utils_methods_are_available_at_top_level
-    create_file("testdata/a")
-    rm_rf "testdata/a"
-    assert ! File.exist?("testdata/a")
-  end
-
-  def test_fileutils_methods_dont_leak
-    obj = Object.new
-    assert_raise(NoMethodError) { obj.copy } # from FileUtils
-    assert_raise(NoMethodError) { obj.ruby } # from RubyFileUtils
-  end
-
-  def test_sh
-    verbose(false) { sh %{ruby test/shellcommand.rb} }
-    assert true, "should not fail"
-  end
-
-  def test_sh_multiple_arguments
-    ENV['RAKE_TEST_SH'] = 'someval'
-    expanded = windows? ? '%RAKE_TEST_SH%' : '$RAKE_TEST_SH'
-    # This one gets expanded by the shell
-    verbose(false) { sh %{ruby test/check_expansion.rb #{expanded} someval} }
-    assert true, "should not fail"
-    assert_raises(RuntimeError) {
-      # This one does not get expanded
-      verbose(false) { sh 'ruby', 'test/check_expansion.rb', expanded, 'someval' }
-    }
-  end
-
-  def test_sh_failure
-    assert_raises(RuntimeError) { 
-      verbose(false) { sh %{ruby test/shellcommand.rb 1} }
-    }
-  end
-
-  def test_sh_special_handling
-    count = 0
-    verbose(false) {
-      sh(%{ruby test/shellcommand.rb}) do |ok, res|
-        assert(ok)
-        assert_equal 0, res.exitstatus
-        count += 1
-      end
-      sh(%{ruby test/shellcommand.rb 1}) do |ok, res|
-        assert(!ok)
-        assert_equal 1, res.exitstatus
-        count += 1
-      end
-    }
-    assert_equal 2, count, "Block count should be 2"
-  end
-
-  def test_sh_noop
-    verbose(false) { sh %{test/shellcommand.rb 1}, :noop=>true }
-    assert true, "should not fail"
-  end
-
-  def test_sh_bad_option
-    ex = assert_raise(ArgumentError) {
-      verbose(false) { sh %{test/shellcommand.rb}, :bad_option=>true }
-    }
-    assert_match(/bad_option/, ex.message)
-  end
-
-  def test_sh_verbose
-    out = redirect_stderr {
-      verbose(true) {
-        sh %{test/shellcommand.rb}, :noop=>true
-      }
-    }
-    assert_match(/^test\/shellcommand\.rb$/, out)
-  end
-
-  def test_sh_no_verbose
-    out = redirect_stderr {
-      verbose(false) {
-        sh %{test/shellcommand.rb}, :noop=>true
-      }
-    }
-    assert_equal '', out
-  end
-
-  def test_sh_default_is_no_verbose
-    out = redirect_stderr {
-      sh %{test/shellcommand.rb}, :noop=>true
-    }
-    assert_equal '', out
-  end
-
-  def test_ruby
-    verbose(false) do
-      ENV['RAKE_TEST_RUBY'] = "123"
-      block_run = false
-      # This one gets expanded by the shell
-      env_var = windows? ? '%RAKE_TEST_RUBY%' : '$RAKE_TEST_RUBY'
-      ruby %{-e "exit #{env_var}"} do |ok, status| # " (emacs wart)
-        assert(!ok)
-        assert_equal 123, status.exitstatus
-        block_run = true
-      end
-      assert block_run, "The block must be run"
-
-      if windows?
-        puts "SKIPPING test_ruby/part 2 when in windows"
-      else
-        # This one does not get expanded
-        block_run = false
-        ruby '-e', %{exit "#{env_var}".length} do |ok, status| # " (emacs wart)
-          assert(!ok)
-          assert_equal 15, status.exitstatus
-          block_run = true
-        end
-        assert block_run, "The block must be run"
-      end
-    end
-  end
-
-  def test_split_all
-    assert_equal ['a'], RakeFileUtils.split_all('a')
-    assert_equal ['..'], RakeFileUtils.split_all('..')
-    assert_equal ['/'], RakeFileUtils.split_all('/')
-    assert_equal ['a', 'b'], RakeFileUtils.split_all('a/b')
-    assert_equal ['/', 'a', 'b'], RakeFileUtils.split_all('/a/b')
-    assert_equal ['..', 'a', 'b'], RakeFileUtils.split_all('../a/b')
-  end
-
-  private
-  
-  def redirect_stderr
-    old_err = $stderr
-    $stderr = StringIO.new
-    yield
-    $stderr.string
-  ensure
-    $stderr = old_err
-  end
-
-  def windows?
-    ! File::ALT_SEPARATOR.nil?
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_ftp.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_ftp.rb
deleted file mode 100644
index 1576590..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_ftp.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'date'
-require 'time'
-require 'test/unit'
-require 'rake/contrib/ftptools'
-
-class FakeDate
-  def self.today
-    Date.new(2003,10,3)
-  end
-  def self.now
-    Time.local(2003,10,3,12,00,00)
-  end
-end
-
-
-class TestFtpFile < Test::Unit::TestCase
-
-  def setup
-    Rake::FtpFile.class_eval { @date_class = FakeDate; @time_class = FakeDate }
-  end
-
-  def test_general
-    file = Rake::FtpFile.new("here", "-rw-r--r--   1 a279376  develop   121770 Mar  6 14:50 wiki.pl")
-    assert_equal "wiki.pl", file.name
-    assert_equal "here/wiki.pl", file.path
-    assert_equal "a279376", file.owner
-    assert_equal "develop", file.group
-    assert_equal 0644, file.mode
-    assert_equal 121770, file.size
-    assert_equal Time.mktime(2003,3,6,14,50,0,0), file.time
-    assert ! file.directory?
-    assert ! file.symlink?
-  end
-
-  def test_far_date
-    file = Rake::FtpFile.new(".", "drwxr-xr-x   3 a279376  develop     4096 Nov 26  2001 vss")
-    assert_equal Time.mktime(2001,11,26,0,0,0,0), file.time
-  end
-
-  def test_close_date
-    file = Rake::FtpFile.new(".", "drwxr-xr-x   3 a279376  develop     4096 Nov 26 15:35 vss")
-    assert_equal Time.mktime(2002,11,26,15,35,0,0), file.time
-  end
-
-  def test_directory
-    file = Rake::FtpFile.new(".", "drwxrwxr-x   9 a279376  develop     4096 Mar 13 14:32 working")
-    assert file.directory?
-    assert !file.symlink?
-  end
-
-  def test_symlink
-    file = Rake::FtpFile.new(".", "lrwxrwxrwx   1 a279376  develop       64 Mar 26  2002 xtrac -> /home/a279376/working/ics/development/java/com/fmr/fwp/ics/xtrac")
-    assert_equal 'xtrac', file.name
-    assert file.symlink?
-    assert !file.directory?
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_invocation_chain.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_invocation_chain.rb
deleted file mode 100644
index 0558066..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_invocation_chain.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-######################################################################
-class TestAnEmptyInvocationChain < Test::Unit::TestCase
-
-  def setup
-    @empty = Rake::InvocationChain::EMPTY
-  end
-
-  def test_should_be_able_to_add_members
-    assert_nothing_raised do
-      @empty.append("A")
-    end
-  end
-
-  def test_to_s
-    assert_equal "TOP", @empty.to_s
-  end
-end
-
-######################################################################
-class TestAnInvocationChainWithOneMember < Test::Unit::TestCase
-  def setup
-    @empty = Rake::InvocationChain::EMPTY
-    @first_member = "A"
-    @chain = @empty.append(@first_member)
-  end
-
-  def test_should_report_first_member_as_a_member
-    assert @chain.member?(@first_member)
-  end
-
-  def test_should_fail_when_adding_original_member
-    ex = assert_raise RuntimeError do
-      @chain.append(@first_member)
-    end
-    assert_match(/circular +dependency/i, ex.message)
-    assert_match(/A.*=>.*A/, ex.message)
-  end
-
-  def test_to_s
-    assert_equal "TOP => A", @chain.to_s
-  end
-
-end
-
-######################################################################
-class TestAnInvocationChainWithMultipleMember < Test::Unit::TestCase
-  def setup
-    @first_member = "A"
-    @second_member = "B"
-    ch = Rake::InvocationChain::EMPTY.append(@first_member)
-    @chain = ch.append(@second_member)
-  end
-
-  def test_should_report_first_member_as_a_member
-    assert @chain.member?(@first_member)
-  end
-
-  def test_should_report_second_member_as_a_member
-    assert @chain.member?(@second_member)
-  end
-
-  def test_should_fail_when_adding_original_member
-    ex = assert_raise RuntimeError do
-      @chain.append(@first_member)
-    end
-    assert_match(/A.*=>.*B.*=>.*A/, ex.message)
-  end
-end
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_makefile_loader.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_makefile_loader.rb
deleted file mode 100644
index 25e2ee3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_makefile_loader.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-require 'rake/loaders/makefile'
-
-class TestMakefileLoader < Test::Unit::TestCase
-  include Rake
-
-  def test_parse
-    Task.clear
-    loader = Rake::MakefileLoader.new
-    loader.load("test/data/sample.mf")
-    %w(a b c d).each do |t|
-      assert Task.task_defined?(t), "#{t} should be a defined task"
-    end
-    assert_equal %w(a1 a2 a3 a4 a5 a6 a7).sort, Task['a'].prerequisites.sort
-    assert_equal %w(b1 b2 b3 b4 b5 b6 b7).sort, Task['b'].prerequisites.sort
-    assert_equal %w(c1).sort, Task['c'].prerequisites.sort
-    assert_equal %w(d1 d2).sort, Task['d'].prerequisites.sort
-    assert_equal %w(e1 f1).sort, Task['e'].prerequisites.sort
-    assert_equal %w(e1 f1).sort, Task['f'].prerequisites.sort
-    assert_equal 6, Task.tasks.size
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_multitask.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_multitask.rb
deleted file mode 100644
index ee9be77..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_multitask.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-######################################################################
-class TestMultiTask < Test::Unit::TestCase
-  include Rake
-
-  def setup
-    Task.clear
-    @runs = Array.new
-  end
-
-  def test_running_multitasks
-    task :a do 3.times do |i| @runs << "A#{i}"; sleep 0.01; end end
-    task :b do 3.times do |i| @runs << "B#{i}"; sleep 0.01;  end end
-    multitask :both => [:a, :b]
-    Task[:both].invoke
-    assert_equal 6, @runs.size
-    assert @runs.index("A0") < @runs.index("A1")
-    assert @runs.index("A1") < @runs.index("A2")
-    assert @runs.index("B0") < @runs.index("B1")
-    assert @runs.index("B1") < @runs.index("B2")
-  end
-
-  def test_all_multitasks_wait_on_slow_prerequisites
-    task :slow do 3.times do |i| @runs << "S#{i}"; sleep 0.05 end end
-    task :a => [:slow] do 3.times do |i| @runs << "A#{i}"; sleep 0.01 end end
-    task :b => [:slow] do 3.times do |i| @runs << "B#{i}"; sleep 0.01 end end
-    multitask :both => [:a, :b]
-    Task[:both].invoke
-    assert_equal 9, @runs.size
-    assert @runs.index("S0") < @runs.index("S1")
-    assert @runs.index("S1") < @runs.index("S2")
-    assert @runs.index("S2") < @runs.index("A0")
-    assert @runs.index("S2") < @runs.index("B0")
-    assert @runs.index("A0") < @runs.index("A1")
-    assert @runs.index("A1") < @runs.index("A2")
-    assert @runs.index("B0") < @runs.index("B1")
-    assert @runs.index("B1") < @runs.index("B2")
-  end
-end
-
- 
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_namespace.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_namespace.rb
deleted file mode 100644
index 4ad0295..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_namespace.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env ruby
-
-begin
-  require 'rubygems'
-rescue LoadError
-  # got no gems
-end
-
-require 'test/unit'
-require 'flexmock/test_unit'
-require 'rake'
-
-class TestNameSpace < Test::Unit::TestCase
-
-  def test_namespace_creation
-    mgr = flexmock("TaskManager")
-    ns = Rake::NameSpace.new(mgr, [])
-    assert_not_nil ns
-  end
-
-  def test_namespace_lookup
-    mgr = flexmock("TaskManager")
-    mgr.should_receive(:lookup).with(:t, ["a"]).
-      and_return(:dummy).once
-    ns = Rake::NameSpace.new(mgr, ["a"])
-    assert_equal :dummy, ns[:t]
-  end
-
-  def test_namespace_reports_tasks_it_owns
-    mgr = flexmock("TaskManager")
-    mgr.should_receive(:tasks).with().
-      and_return([:x, :y, :z]).once
-    ns = Rake::NameSpace.new(mgr, ["a"])
-    assert_equal [:x, :y, :z], ns.tasks
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_package_task.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_package_task.rb
deleted file mode 100644
index 72aac5f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_package_task.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake/packagetask'
-
-class TestPackageTask < Test::Unit::TestCase
-  include Rake
-
-  def test_create
-    pkg = Rake::PackageTask.new("pkgr", "1.2.3") { |p|
-      p.package_files << "install.rb"
-      p.package_files.include(
-        '[A-Z]*',
-        'bin/**/*',
-        'lib/**/*.rb',
-        'test/**/*.rb',
-        'doc/**/*',
-        'build/rubyapp.rb',
-        '*.blurb')
-      p.package_files.exclude(/\bCVS\b/)
-      p.package_files.exclude(/~$/)
-      p.package_dir = 'pkg'
-      p.need_tar = true
-      p.need_tar_gz = true
-      p.need_tar_bz2 = true
-      p.need_zip = true
-    }
-    assert_equal "pkg", pkg.package_dir
-    assert pkg.package_files.include?("bin/rake")
-    assert "pkgr", pkg.name
-    assert "1.2.3", pkg.version
-    assert Task[:package]
-    assert Task['pkg/pkgr-1.2.3.tgz']
-    assert Task['pkg/pkgr-1.2.3.tar.gz']
-    assert Task['pkg/pkgr-1.2.3.tar.bz2']
-    assert Task['pkg/pkgr-1.2.3.zip']
-    assert Task["pkg/pkgr-1.2.3"]
-    assert Task[:clobber_package]
-    assert Task[:repackage]
-  end
-
-  def test_missing_version
-    assert_raises(RuntimeError) {
-      pkg = Rake::PackageTask.new("pkgr") { |p| }
-    }
-  end
-
-  def test_no_version
-    pkg = Rake::PackageTask.new("pkgr", :noversion) { |p| }
-    assert "pkgr", pkg.send(:package_name)
-  end
-
-  def test_clone
-    pkg = Rake::PackageTask.new("x", :noversion)
-    p2 = pkg.clone
-    pkg.package_files << "y"
-    p2.package_files << "x"
-    assert_equal ["y"], pkg.package_files
-    assert_equal ["x"], p2.package_files
-  end
-end
-
-
-begin
-  require 'rubygems'
-  require 'rake/gempackagetask'
-rescue Exception
-  puts "WARNING: RubyGems not installed"
-end
-
-if ! defined?(Gem)
-  puts "WARNING: Unable to test GemPackaging ... requires RubyGems"
-else
-  class TestGemPackageTask < Test::Unit::TestCase
-    def test_gem_package
-      gem = Gem::Specification.new do |g|
-        g.name = "pkgr"
-        g.version = "1.2.3"
-        g.files = FileList["x"].resolve
-      end
-      pkg = Rake::GemPackageTask.new(gem)  do |p|
-        p.package_files << "y"
-      end
-      assert_equal ["x", "y"], pkg.package_files
-      assert_equal "pkgr-1.2.3.gem", pkg.gem_file
-    end
-
-    def test_gem_package_with_current_platform
-      gem = Gem::Specification.new do |g|
-        g.name = "pkgr"
-        g.version = "1.2.3"
-        g.files = FileList["x"].resolve
-        g.platform = Gem::Platform::CURRENT
-      end
-      pkg = Rake::GemPackageTask.new(gem)  do |p|
-        p.package_files << "y"
-      end
-      assert_equal ["x", "y"], pkg.package_files
-      assert_match(/^pkgr-1\.2\.3-(\S+)\.gem$/, pkg.gem_file)
-    end
-
-    def test_gem_package_with_ruby_platform
-      gem = Gem::Specification.new do |g|
-        g.name = "pkgr"
-        g.version = "1.2.3"
-        g.files = FileList["x"].resolve
-        g.platform = Gem::Platform::RUBY
-      end
-      pkg = Rake::GemPackageTask.new(gem)  do |p|
-        p.package_files << "y"
-      end
-      assert_equal ["x", "y"], pkg.package_files
-      assert_equal "pkgr-1.2.3.gem", pkg.gem_file
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_pathmap.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_pathmap.rb
deleted file mode 100644
index 2231150..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_pathmap.rb
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-# ====================================================================
-class TestPathMap < Test::Unit::TestCase
-
-  def test_returns_self_with_no_args
-    assert_equal "abc.rb", "abc.rb".pathmap
-  end
-
-  def test_s_returns_file_separator
-    sep = File::ALT_SEPARATOR || File::SEPARATOR
-    assert_equal sep, "abc.rb".pathmap("%s")
-    assert_equal sep, "".pathmap("%s")
-    assert_equal "a#{sep}b", "a/b".pathmap("%d%s%f")
-  end
-
-  def test_f_returns_basename
-    assert_equal "abc.rb", "abc.rb".pathmap("%f")
-    assert_equal "abc.rb", "this/is/a/dir/abc.rb".pathmap("%f")
-    assert_equal "abc.rb", "/this/is/a/dir/abc.rb".pathmap("%f")
-  end
-
-  def test_n_returns_basename_without_extension
-    assert_equal "abc", "abc.rb".pathmap("%n")
-    assert_equal "abc", "abc".pathmap("%n") 
-    assert_equal "abc", "this/is/a/dir/abc.rb".pathmap("%n")
-    assert_equal "abc", "/this/is/a/dir/abc.rb".pathmap("%n")
-    assert_equal "abc", "/this/is/a/dir/abc".pathmap("%n")
-  end
-
-  def test_d_returns_dirname
-    assert_equal ".", "abc.rb".pathmap("%d")
-    assert_equal "/", "/abc".pathmap("%d")
-    assert_equal "this/is/a/dir", "this/is/a/dir/abc.rb".pathmap("%d")
-    assert_equal "/this/is/a/dir", "/this/is/a/dir/abc.rb".pathmap("%d")
-  end
-
-  def test_9d_returns_partial_dirname
-    assert_equal "this/is", "this/is/a/dir/abc.rb".pathmap("%2d")
-    assert_equal "this", "this/is/a/dir/abc.rb".pathmap("%1d")
-    assert_equal ".", "this/is/a/dir/abc.rb".pathmap("%0d")
-    assert_equal "dir", "this/is/a/dir/abc.rb".pathmap("%-1d")
-    assert_equal "a/dir", "this/is/a/dir/abc.rb".pathmap("%-2d")
-    assert_equal "this/is/a/dir", "this/is/a/dir/abc.rb".pathmap("%100d")
-    assert_equal "this/is/a/dir", "this/is/a/dir/abc.rb".pathmap("%-100d")
-  end
-
-  def test_x_returns_extension
-    assert_equal "", "abc".pathmap("%x")
-    assert_equal ".rb", "abc.rb".pathmap("%x")
-    assert_equal ".rb", "abc.xyz.rb".pathmap("%x")
-    assert_equal "", ".depends".pathmap("%x")
-    assert_equal "", "dir/.depends".pathmap("%x")
-  end
-
-  def test_X_returns_everything_but_extension
-    assert_equal "abc", "abc".pathmap("%X")
-    assert_equal "abc", "abc.rb".pathmap("%X")
-    assert_equal "abc.xyz", "abc.xyz.rb".pathmap("%X")
-    assert_equal "ab.xyz", "ab.xyz.rb".pathmap("%X")
-    assert_equal "a.xyz", "a.xyz.rb".pathmap("%X")
-    assert_equal "abc", "abc.rb".pathmap("%X")
-    assert_equal "ab", "ab.rb".pathmap("%X")
-    assert_equal "a", "a.rb".pathmap("%X")
-    assert_equal ".depends", ".depends".pathmap("%X")
-    assert_equal "a/dir/.depends", "a/dir/.depends".pathmap("%X")
-    assert_equal "/.depends", "/.depends".pathmap("%X")
-  end
-
-  def test_p_returns_entire_pathname
-    assert_equal "abc.rb", "abc.rb".pathmap("%p")
-    assert_equal "this/is/a/dir/abc.rb", "this/is/a/dir/abc.rb".pathmap("%p")
-    assert_equal "/this/is/a/dir/abc.rb", "/this/is/a/dir/abc.rb".pathmap("%p")
-  end
-
-  def test_dash_returns_empty_string
-    assert_equal "", "abc.rb".pathmap("%-")
-    assert_equal "abc.rb", "abc.rb".pathmap("%X%-%x")
-  end
-
-  def test_percent_percent_returns_percent
-    assert_equal "a%b", "".pathmap("a%%b")
-  end
-
-  def test_undefined_percent_causes_error
-    ex = assert_raise(ArgumentError) {
-      "dir/abc.rb".pathmap("%z")
-    }
-  end
-
-  def test_pattern_returns_substitutions
-    assert_equal "bin/org/osb",
-      "src/org/osb/Xyz.java".pathmap("%{src,bin}d")
-  end
-
-  def test_pattern_can_use_backreferences
-    assert_equal "dir/hi/is", "dir/this/is".pathmap("%{t(hi)s,\\1}p")
-  end
-
-  def test_pattern_with_star_replacement_string_uses_block
-    assert_equal "src/ORG/osb",
-      "src/org/osb/Xyz.java".pathmap("%{/org,*}d") { |d| d.upcase }
-    assert_equal "Xyz.java",
-      "src/org/osb/Xyz.java".pathmap("%{.*,*}f") { |f| f.capitalize }
-  end
-
-  def test_pattern_with_no_replacement_nor_block_substitutes_empty_string
-    assert_equal "bc.rb", "abc.rb".pathmap("%{a}f")
-  end
-
-  def test_pattern_works_with_certain_valid_operators
-    assert_equal "dir/xbc.rb", "dir/abc.rb".pathmap("%{a,x}p")
-    assert_equal "d1r", "dir/abc.rb".pathmap("%{i,1}d")
-    assert_equal "xbc.rb", "dir/abc.rb".pathmap("%{a,x}f")
-    assert_equal ".Rb", "dir/abc.rb".pathmap("%{r,R}x")
-    assert_equal "xbc", "dir/abc.rb".pathmap("%{a,x}n")
-  end
-
-  def test_multiple_patterns
-    assert_equal "this/is/b/directory/abc.rb",
-      "this/is/a/dir/abc.rb".pathmap("%{a,b;dir,\\0ectory}p")
-  end
-
-  def test_partial_directory_selection_works_with_patterns
-    assert_equal "this/is/a/long",
-      "this/is/a/really/long/path/ok.rb".pathmap("%{/really/,/}5d")
-  end
-
-  def test_pattern_with_invalid_operator
-    ex = assert_raise(ArgumentError) do
-      "abc.xyz".pathmap("%{src,bin}z")
-    end
-    assert_match(/unknown.*pathmap.*spec.*z/i, ex.message)
-  end
-
-  def test_works_with_windows_separators
-    if File::ALT_SEPARATOR
-      assert_equal "abc", 'dir\abc.rb'.pathmap("%n")
-      assert_equal 'this\is\a\dir',
-        'this\is\a\dir\abc.rb'.pathmap("%d")
-    end
-  end
-
-  def test_complex_patterns
-    sep = "".pathmap("%s")
-    assert_equal "dir/abc.rb", "dir/abc.rb".pathmap("%d/%n%x")
-    assert_equal "./abc.rb", "abc.rb".pathmap("%d/%n%x")
-    assert_equal "Your file extension is '.rb'",
-      "dir/abc.rb".pathmap("Your file extension is '%x'")
-    assert_equal "bin/org/onstepback/proj/A.class",
-      "src/org/onstepback/proj/A.java".pathmap("%{src,bin}d/%n.class")
-    assert_equal "src_work/bin/org/onstepback/proj/A.class",
-      "src_work/src/org/onstepback/proj/A.java".pathmap('%{\bsrc\b,bin}X.class')
-    assert_equal ".depends.bak", ".depends".pathmap("%X.bak")
-    assert_equal "d#{sep}a/b/c#{sep}file.txt", "a/b/c/d/file.txt".pathmap("%-1d%s%3d%s%f")
-  end
-end
-
-class TestPathMapExplode < Test::Unit::TestCase
-  def setup
-    String.class_eval { public :pathmap_explode }
-  end
-
-  def teardown
-    String.class_eval { protected :pathmap_explode }
-  end
-
-  def test_explode
-    assert_equal ['a'], 'a'.pathmap_explode
-    assert_equal ['a', 'b'], 'a/b'.pathmap_explode
-    assert_equal ['a', 'b', 'c'], 'a/b/c'.pathmap_explode
-    assert_equal ['/', 'a'], '/a'.pathmap_explode
-    assert_equal ['/', 'a', 'b'], '/a/b'.pathmap_explode
-    assert_equal ['/', 'a', 'b', 'c'], '/a/b/c'.pathmap_explode
-    if File::ALT_SEPARATOR
-      assert_equal ['c:.', 'a'], 'c:a'.pathmap_explode
-      assert_equal ['c:.', 'a', 'b'], 'c:a/b'.pathmap_explode
-      assert_equal ['c:.', 'a', 'b', 'c'], 'c:a/b/c'.pathmap_explode
-      assert_equal ['c:/', 'a'], 'c:/a'.pathmap_explode
-      assert_equal ['c:/', 'a', 'b'], 'c:/a/b'.pathmap_explode
-      assert_equal ['c:/', 'a', 'b', 'c'], 'c:/a/b/c'.pathmap_explode
-    end
-  end
-end
-
-class TestPathMapPartial < Test::Unit::TestCase
-  def test_pathmap_partial
-    @path = "1/2/file"
-    def @path.call(n)
-      pathmap_partial(n)
-    end
-    assert_equal("1", @path.call(1))
-    assert_equal("1/2", @path.call(2))
-    assert_equal("1/2", @path.call(3))
-    assert_equal(".", @path.call(0))
-    assert_equal("2", @path.call(-1))
-    assert_equal("1/2", @path.call(-2))
-    assert_equal("1/2", @path.call(-3))
-  end
-end
-
-class TestFileListPathMap < Test::Unit::TestCase
-  def test_file_list_supports_pathmap
-    assert_equal ['a', 'b'], FileList['dir/a.rb', 'dir/b.rb'].pathmap("%n")
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_rake.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_rake.rb
deleted file mode 100644
index c995965..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_rake.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-class TestRake < Test::Unit::TestCase
-  def test_each_dir_parent
-    assert_equal ['a'], alldirs('a')
-    assert_equal ['a/b', 'a'], alldirs('a/b')
-    assert_equal ['/a/b', '/a', '/'], alldirs('/a/b')
-    if File.dirname("c:/foo") == "c:"
-      # Under Unix
-      assert_equal ['c:/a/b', 'c:/a', 'c:'], alldirs('c:/a/b')
-      assert_equal ['c:a/b', 'c:a'], alldirs('c:a/b')
-    else
-      # Under Windows
-      assert_equal ['c:/a/b', 'c:/a', 'c:/'], alldirs('c:/a/b')
-      assert_equal ['c:a/b', 'c:a'], alldirs('c:a/b')
-    end
-  end
-
-  def alldirs(fn)
-    result = []
-    Rake.each_dir_parent(fn) { |d| result << d }
-    result
-  end
-
-  def test_can_override_application
-    old_app = Rake.application
-    fake_app = Object.new
-    Rake.application = fake_app
-    assert_equal fake_app, Rake.application
-  ensure
-    Rake.application = old_app
-  end
-
-  def test_original_dir_reports_current_dir
-    assert_equal Dir.pwd, Rake.original_dir
-  end
-    
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_require.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_require.rb
deleted file mode 100644
index 1931b91..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_require.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-# ====================================================================
-class TestRequire < Test::Unit::TestCase
-
-  def test_can_load_rake_library
-    app = Rake::Application.new
-    assert app.instance_eval {
-      rake_require("test2", ['test/data/rakelib'], [])
-    }
-  end
-
-  def test_wont_reload_rake_library
-    app = Rake::Application.new
-    assert ! app.instance_eval {
-      rake_require("test2", ['test/data/rakelib'], ['test2'])
-    }
-  end
-
-  def test_throws_error_if_library_not_found
-    app = Rake::Application.new
-    ex = assert_raise(LoadError) {
-      assert app.instance_eval {
-        rake_require("testx", ['test/data/rakelib'], [])
-      }
-    }
-    assert_match(/x/, ex.message)
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_rules.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_rules.rb
deleted file mode 100644
index 5ce8e5c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_rules.rb
+++ /dev/null
@@ -1,347 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'fileutils'
-require 'rake'
-require 'test/filecreation'
-
-######################################################################
-class TestRules < Test::Unit::TestCase
-  include Rake
-  include FileCreation
-
-  SRCFILE  = "testdata/abc.c"
-  SRCFILE2 =  "testdata/xyz.c"
-  FTNFILE  = "testdata/abc.f"
-  OBJFILE  = "testdata/abc.o"
-  FOOFILE  = "testdata/foo"
-  DOTFOOFILE = "testdata/.foo"
-
-  def setup
-    Task.clear
-    @runs = []
-  end
-
-  def teardown
-    FileList['testdata/*'].each do |f| rm_r(f, :verbose=>false) end
-  end
-
-  def test_multiple_rules1
-    create_file(FTNFILE)
-    delete_file(SRCFILE)
-    delete_file(OBJFILE)
-    rule(/\.o$/ => ['.c']) do @runs << :C end
-    rule(/\.o$/ => ['.f']) do @runs << :F end
-    t = Task[OBJFILE]
-    t.invoke
-    Task[OBJFILE].invoke
-    assert_equal [:F], @runs
-  end
-
-  def test_multiple_rules2
-    create_file(FTNFILE)
-    delete_file(SRCFILE)
-    delete_file(OBJFILE)
-    rule(/\.o$/ => ['.f']) do @runs << :F end
-    rule(/\.o$/ => ['.c']) do @runs << :C end
-    Task[OBJFILE].invoke
-    assert_equal [:F], @runs
-  end
-
-  def test_create_with_source
-    create_file(SRCFILE)
-    rule(/\.o$/ => ['.c']) do |t|
-      @runs << t.name
-      assert_equal OBJFILE, t.name
-      assert_equal SRCFILE, t.source
-    end
-    Task[OBJFILE].invoke
-    assert_equal [OBJFILE], @runs
-  end
-
-  def test_single_dependent
-    create_file(SRCFILE)
-    rule(/\.o$/ => '.c') do |t|
-      @runs << t.name
-    end
-    Task[OBJFILE].invoke
-    assert_equal [OBJFILE], @runs
-  end
-
-  def test_rule_can_be_created_by_string
-    create_file(SRCFILE)
-    rule '.o' => ['.c'] do |t|
-      @runs << t.name
-    end
-    Task[OBJFILE].invoke
-    assert_equal [OBJFILE], @runs
-  end
-
-  def test_rule_prereqs_can_be_created_by_string
-    create_file(SRCFILE)
-    rule '.o' => '.c' do |t|
-      @runs << t.name
-    end
-    Task[OBJFILE].invoke
-    assert_equal [OBJFILE], @runs
-  end
-
-  def test_plain_strings_as_dependents_refer_to_files
-    create_file(SRCFILE)
-    rule '.o' => SRCFILE do |t|
-      @runs << t.name
-    end
-    Task[OBJFILE].invoke
-    assert_equal [OBJFILE], @runs
-  end
-
-  def test_file_names_beginning_with_dot_can_be_tricked_into_refering_to_file
-    verbose(false) do
-      chdir("testdata") do
-        create_file('.foo')
-        rule '.o' => "./.foo" do |t|
-          @runs << t.name
-        end
-        Task[OBJFILE].invoke
-        assert_equal [OBJFILE], @runs
-      end
-    end
-  end
-
-  def test_file_names_beginning_with_dot_can_be_wrapped_in_lambda
-    verbose(false) do
-      chdir("testdata") do
-        create_file(".foo")
-        rule '.o' => lambda{".foo"} do |t|
-          @runs << "#{t.name} - #{t.source}"
-        end
-        Task[OBJFILE].invoke
-        assert_equal ["#{OBJFILE} - .foo"], @runs
-      end
-    end
-  end
-
-  def test_file_names_containing_percent_can_be_wrapped_in_lambda
-    verbose(false) do
-      chdir("testdata") do
-        create_file("foo%x")
-        rule '.o' => lambda{"foo%x"} do |t|
-          @runs << "#{t.name} - #{t.source}"
-        end
-        Task[OBJFILE].invoke
-        assert_equal ["#{OBJFILE} - foo%x"], @runs
-      end
-    end
-  end
-
-  def test_non_extension_rule_name_refers_to_file
-    verbose(false) do
-      chdir("testdata") do
-        create_file("abc.c")
-        rule "abc" => '.c' do |t|
-          @runs << t.name
-        end
-        Task["abc"].invoke
-        assert_equal ["abc"], @runs
-      end
-    end
-  end
-
-  def test_pathmap_automatically_applies_to_name
-    verbose(false) do
-      chdir("testdata") do
-        create_file("zzabc.c")
-        rule ".o" => 'zz%{x,a}n.c' do |t|
-          @runs << "#{t.name} - #{t.source}"
-        end
-        Task["xbc.o"].invoke
-        assert_equal ["xbc.o - zzabc.c"], @runs
-      end
-    end
-  end
-
-  def test_plain_strings_are_just_filenames
-    verbose(false) do
-      chdir("testdata") do
-        create_file("plainname")
-        rule ".o" => 'plainname' do |t|
-          @runs << "#{t.name} - #{t.source}"
-        end
-        Task["xbc.o"].invoke
-        assert_equal ["xbc.o - plainname"], @runs
-      end
-    end
-  end
-
-  def test_rule_runs_when_explicit_task_has_no_actions
-    create_file(SRCFILE)
-    create_file(SRCFILE2)
-    delete_file(OBJFILE)
-    rule '.o' => '.c' do |t|
-      @runs << t.source
-    end
-    file OBJFILE => [SRCFILE2]
-    Task[OBJFILE].invoke
-    assert_equal [SRCFILE], @runs
-  end
-
-  def test_close_matches_on_name_do_not_trigger_rule
-    create_file("testdata/x.c")
-    rule '.o' => ['.c'] do |t|
-      @runs << t.name
-    end
-    assert_raises(RuntimeError) { Task['testdata/x.obj'].invoke }
-    assert_raises(RuntimeError) { Task['testdata/x.xyo'].invoke }
-  end
-
-  def test_rule_rebuilds_obj_when_source_is_newer
-    create_timed_files(OBJFILE, SRCFILE)
-    rule(/\.o$/ => ['.c']) do
-      @runs << :RULE
-    end
-    Task[OBJFILE].invoke
-    assert_equal [:RULE], @runs
-  end
-
-  def test_rule_with_two_sources_runs_if_both_sources_are_present
-    create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
-    rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
-      @runs << :RULE
-    end
-    Task[OBJFILE].invoke
-    assert_equal [:RULE], @runs
-  end
-
-  def test_rule_with_two_sources_but_one_missing_does_not_run
-    create_timed_files(OBJFILE, SRCFILE)
-    delete_file(SRCFILE2)
-    rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
-      @runs << :RULE
-    end
-    Task[OBJFILE].invoke
-    assert_equal [], @runs
-  end
-
-  def test_rule_with_two_sources_builds_both_sources
-    task 'x.aa'
-    task 'x.bb'
-    rule '.a' => '.aa' do
-      @runs << "A"
-    end
-    rule '.b' => '.bb' do
-      @runs << "B"
-    end
-    rule ".c" => ['.a', '.b'] do
-      @runs << "C"
-    end
-    Task["x.c"].invoke
-    assert_equal ["A", "B", "C"], @runs.sort
-  end
-
-  def test_second_rule_runs_when_first_rule_doesnt
-    create_timed_files(OBJFILE, SRCFILE)
-    delete_file(SRCFILE2)
-    rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
-      @runs << :RULE1
-    end
-    rule OBJFILE => [lambda{SRCFILE}] do
-      @runs << :RULE2
-    end
-    Task[OBJFILE].invoke
-    assert_equal [:RULE2], @runs
-  end
-
-  def test_second_rule_doest_run_if_first_triggers
-    create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
-    rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
-      @runs << :RULE1
-    end
-    rule OBJFILE => [lambda{SRCFILE}] do
-      @runs << :RULE2
-    end
-    Task[OBJFILE].invoke
-    assert_equal [:RULE1], @runs
-  end
-
-  def test_second_rule_doest_run_if_first_triggers_with_reversed_rules
-    create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
-    rule OBJFILE => [lambda{SRCFILE}] do
-      @runs << :RULE1
-    end
-    rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
-      @runs << :RULE2
-    end
-    Task[OBJFILE].invoke
-    assert_equal [:RULE1], @runs
-  end
-
-  def test_rule_with_proc_dependent_will_trigger
-    ran = false
-    mkdir_p("testdata/src/jw")
-    create_file("testdata/src/jw/X.java")
-    rule %r(classes/.*\.class) => [
-      proc { |fn| fn.pathmap("%{classes,testdata/src}d/%n.java") }
-    ] do |task|
-      assert_equal task.name, 'classes/jw/X.class'
-      assert_equal task.source, 'testdata/src/jw/X.java'
-      @runs << :RULE
-    end
-    Task['classes/jw/X.class'].invoke
-    assert_equal [:RULE], @runs
-  ensure
-    rm_r("testdata/src", :verbose=>false) rescue nil
-  end
-
-  def test_proc_returning_lists_are_flattened_into_prereqs
-    ran = false
-    mkdir_p("testdata/flatten")
-    create_file("testdata/flatten/a.txt")
-    task 'testdata/flatten/b.data' do |t|
-      ran = true
-      touch t.name, :verbose => false
-    end
-    rule '.html' =>
-      proc { |fn|
-      [
-        fn.ext("txt"),
-        "testdata/flatten/b.data"
-      ]
-    } do |task|
-    end
-    Task['testdata/flatten/a.html'].invoke
-    assert ran, "Should have triggered flattened dependency"
-  ensure
-    rm_r("testdata/flatten", :verbose=>false) rescue nil
-  end
-
-  def test_recursive_rules_will_work_as_long_as_they_terminate
-    actions = []
-    create_file("testdata/abc.xml")
-    rule '.y' => '.xml' do actions << 'y' end
-    rule '.c' => '.y' do actions << 'c'end
-    rule '.o' => '.c' do actions << 'o'end
-    rule '.exe' => '.o' do actions << 'exe'end
-    Task["testdata/abc.exe"].invoke
-    assert_equal ['y', 'c', 'o', 'exe'], actions
-  end
-
-  def test_recursive_rules_that_dont_terminate_will_overflow
-    create_file("testdata/a.a")
-    prev = 'a'
-    ('b'..'z').each do |letter|
-      rule ".#{letter}" => ".#{prev}" do |t| puts "#{t.name}" end
-      prev = letter
-    end
-    ex = assert_raises(Rake::RuleRecursionOverflowError) {
-      Task["testdata/a.z"].invoke
-    }
-    assert_match(/a\.z => testdata\/a.y/, ex.message)
-  end
-
-  def test_rules_with_bad_dependents_will_fail
-    rule "a" => [ 1 ] do |t| puts t.name end
-    assert_raise(RuntimeError) do Task['a'].invoke end
-  end
-
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_task_arguments.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_task_arguments.rb
deleted file mode 100644
index 520a16f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_task_arguments.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-######################################################################
-class TestTaskArguments < Test::Unit::TestCase
-  def teardown
-    ENV.delete('rev')
-    ENV.delete('VER')
-  end
-
-  def test_empty_arg_list_is_empty
-    ta = Rake::TaskArguments.new([], [])
-    assert_equal({}, ta.to_hash)
-  end
-
-  def test_multiple_values_in_args
-    ta = Rake::TaskArguments.new([:a, :b, :c], [:one, :two, :three])
-    assert_equal({:a => :one, :b => :two, :c => :three}, ta.to_hash)
-  end
-
-  def test_to_s
-    ta = Rake::TaskArguments.new([:a, :b, :c], [1, 2, 3])
-    assert_equal ta.to_hash.inspect, ta.to_s
-    assert_equal ta.to_hash.inspect, ta.inspect
-  end
-
-  def test_enumerable_behavior
-    ta = Rake::TaskArguments.new([:a, :b, :c], [1, 2 ,3])
-    assert_equal [10, 20, 30], ta.collect { |k,v| v * 10 }.sort
-  end
-
-  def test_named_args
-    ta = Rake::TaskArguments.new(["aa", "bb"], [1, 2])
-    assert_equal 1, ta.aa
-    assert_equal 1, ta[:aa]
-    assert_equal 1, ta["aa"]
-    assert_equal 2, ta.bb
-    assert_nil ta.cc
-  end
-
-  def test_args_knows_its_names
-    ta = Rake::TaskArguments.new(["aa", "bb"], [1, 2])
-    assert_equal ["aa", "bb"], ta.names
-  end
-
-  def test_extra_names_are_nil
-    ta = Rake::TaskArguments.new(["aa", "bb", "cc"], [1, 2])
-    assert_nil ta.cc
-  end
-
-  def test_args_can_reference_env_values
-    ta = Rake::TaskArguments.new(["aa"], [1])
-    ENV['rev'] = "1.2"
-    ENV['VER'] = "2.3"
-    assert_equal "1.2", ta.rev
-    assert_equal "2.3", ta.ver
-  end
-
-  def test_creating_new_argument_scopes
-    parent = Rake::TaskArguments.new(['p'], [1])
-    child = parent.new_scope(['c', 'p'])
-    assert_equal({:p=>1}, child.to_hash)
-    assert_equal 1, child.p
-    assert_equal 1, child["p"]
-    assert_equal 1, child[:p]
-    assert_nil child.c
-  end
-
-  def test_child_hides_parent_arg_names
-    parent = Rake::TaskArguments.new(['aa'], [1])
-    child = Rake::TaskArguments.new(['aa'], [2], parent)
-    assert_equal 2, child.aa
-  end
-  
-  def test_default_arguments_values_can_be_merged
-    ta = Rake::TaskArguments.new(["aa", "bb"], [nil, "original_val"])
-    ta.with_defaults({ :aa => 'default_val' })
-    assert_equal 'default_val', ta[:aa]
-    assert_equal 'original_val', ta[:bb]
-  end
-
-  def test_default_arguements_that_dont_match_names_are_ignored
-    ta = Rake::TaskArguments.new(["aa", "bb"], [nil, "original_val"])
-    ta.with_defaults({ "cc" => "default_val" })
-    assert_nil ta[:cc]
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_task_manager.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_task_manager.rb
deleted file mode 100644
index 07e2b7b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_task_manager.rb
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake'
-
-class TaskManager
-  include Rake::TaskManager
-end
-
-class TestTaskManager < Test::Unit::TestCase
-  def setup
-    @tm = TaskManager.new
-  end
-
-  def test_create_task_manager
-    assert_not_nil @tm
-    assert_equal [], @tm.tasks
-  end
-
-  def test_define_task
-    t = @tm.define_task(Rake::Task, :t)
-    assert_equal "t", t.name
-    assert_equal @tm, t.application
-  end
-
-  def test_name_lookup
-    t = @tm.define_task(Rake::Task, :t)
-    assert_equal t, @tm[:t]
-  end
-
-  def test_namespace_task_create
-    @tm.in_namespace("x") do
-      t = @tm.define_task(Rake::Task, :t)
-      assert_equal "x:t", t.name
-    end
-    assert_equal ["x:t"], @tm.tasks.collect { |t| t.name }
-  end
-
-  def test_anonymous_namespace
-    anon_ns = @tm.in_namespace(nil) do
-      t = @tm.define_task(Rake::Task, :t)
-      assert_equal "_anon_1:t", t.name
-    end
-    task = anon_ns[:t]
-    assert_equal "_anon_1:t", task.name
-  end
-
-  def test_create_filetask_in_namespace
-    @tm.in_namespace("x") do
-      t = @tm.define_task(Rake::FileTask, "fn")
-      assert_equal "fn", t.name
-    end
-    assert_equal ["fn"], @tm.tasks.collect { |t| t.name }
-  end
-
-  def test_namespace_yields_same_namespace_as_returned
-    yielded_namespace = nil
-    returned_namespace = @tm.in_namespace("x") do |ns|
-      yielded_namespace = ns
-    end
-    assert_equal returned_namespace, yielded_namespace
-  end
-
-  def test_name_lookup_with_implicit_file_tasks
-    t = @tm["README"]
-    assert_equal "README", t.name
-    assert Rake::FileTask === t
-  end
-
-  def test_name_lookup_with_nonexistent_task
-    assert_raise(RuntimeError) {
-      t = @tm["DOES NOT EXIST"]
-    }
-  end
-
-  def test_name_lookup_in_multiple_scopes
-    aa = nil
-    bb = nil
-    xx = @tm.define_task(Rake::Task, :xx)
-    top_z = @tm.define_task(Rake::Task, :z)
-    @tm.in_namespace("a") do
-      aa = @tm.define_task(Rake::Task, :aa)
-      mid_z = @tm.define_task(Rake::Task, :z)
-      @tm.in_namespace("b") do
-        bb = @tm.define_task(Rake::Task, :bb)
-        bot_z = @tm.define_task(Rake::Task, :z)
-
-        assert_equal ["a", "b"], @tm.current_scope
-
-        assert_equal bb, @tm["a:b:bb"]
-        assert_equal aa, @tm["a:aa"]
-        assert_equal xx, @tm["xx"]
-        assert_equal bot_z, @tm["z"]
-        assert_equal mid_z, @tm["^z"]
-        assert_equal top_z, @tm["^^z"]
-        assert_equal top_z, @tm["rake:z"]
-      end
-
-      assert_equal ["a"], @tm.current_scope
-
-      assert_equal bb, @tm["a:b:bb"]
-      assert_equal aa, @tm["a:aa"]
-      assert_equal xx, @tm["xx"]
-      assert_equal bb, @tm["b:bb"]
-      assert_equal aa, @tm["aa"]
-      assert_equal mid_z, @tm["z"]
-      assert_equal top_z, @tm["^z"]
-      assert_equal top_z, @tm["rake:z"]
-    end
-
-    assert_equal [], @tm.current_scope
-
-    assert_equal [], xx.scope
-    assert_equal ['a'], aa.scope
-    assert_equal ['a', 'b'], bb.scope
-  end
-
-  def test_lookup_with_explicit_scopes
-    t1, t2, t3, s = (0...4).collect { nil }
-    t1 = @tm.define_task(Rake::Task, :t)
-    @tm.in_namespace("a") do
-      t2 = @tm.define_task(Rake::Task, :t)
-      s =  @tm.define_task(Rake::Task, :s)
-      @tm.in_namespace("b") do
-        t3 = @tm.define_task(Rake::Task, :t)
-      end
-    end
-    assert_equal t1, @tm[:t, []]
-    assert_equal t2, @tm[:t, ["a"]]    
-    assert_equal t3, @tm[:t, ["a", "b"]]
-    assert_equal s,  @tm[:s, ["a", "b"]]
-    assert_equal s,  @tm[:s, ["a"]]
-  end
-
-  def test_correctly_scoped_prerequisites_are_invoked
-    values = []
-    @tm = Rake::Application.new
-    @tm.define_task(Rake::Task, :z) do values << "top z" end
-    @tm.in_namespace("a") do
-      @tm.define_task(Rake::Task, :z) do values << "next z" end
-      @tm.define_task(Rake::Task, :x => :z)
-    end
-
-    @tm["a:x"].invoke
-    assert_equal ["next z"], values
-  end
-  
-end
-
-class TestTaskManagerArgumentResolution < Test::Unit::TestCase
-  def test_good_arg_patterns
-    assert_equal [:t, [], []],       task(:t)
-    assert_equal [:t, [], [:x]],     task(:t => :x)
-    assert_equal [:t, [], [:x, :y]], task(:t => [:x, :y])
-
-    assert_equal [:t, [:a, :b], []],       task(:t, :a, :b)
-    assert_equal [:t, [], [:x]],           task(:t, :needs => :x)
-    assert_equal [:t, [:a, :b], [:x]],     task(:t, :a, :b, :needs => :x)
-    assert_equal [:t, [:a, :b], [:x, :y]], task(:t, :a, :b, :needs => [:x, :y])
-
-    assert_equal [:t, [:a, :b], []],       task(:t, [:a, :b])
-    assert_equal [:t, [:a, :b], [:x]],     task(:t, [:a, :b] => :x)
-    assert_equal [:t, [:a, :b], [:x, :y]], task(:t, [:a, :b] => [:x, :y])
-  end
-
-  def task(*args)
-    tm = TaskManager.new
-    tm.resolve_args(args)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_tasklib.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_tasklib.rb
deleted file mode 100644
index c61fa1c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_tasklib.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake/tasklib'
-
-
-class TestTaskLib < Test::Unit::TestCase
-  def test_paste
-    tl = Rake::TaskLib.new
-    assert_equal :ab, tl.paste(:a, :b)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_tasks.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_tasks.rb
deleted file mode 100644
index a673422..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_tasks.rb
+++ /dev/null
@@ -1,371 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'fileutils'
-require 'rake'
-require 'test/filecreation'
-require 'test/capture_stdout'
-
-######################################################################
-class TestTask < Test::Unit::TestCase
-  include CaptureStdout
-  include Rake
-
-  def setup
-    Task.clear
-  end
-
-  def test_create
-    arg = nil
-    t = task(:name) { |task| arg = task; 1234 }
-    assert_equal "name", t.name
-    assert_equal [], t.prerequisites
-    assert t.needed?
-    t.execute(0)
-    assert_equal t, arg
-    assert_nil t.source
-    assert_equal [], t.sources
-  end
-
-  def test_inspect
-    t = task(:foo, :needs => [:bar, :baz])
-    assert_equal "<Rake::Task foo => [bar, baz]>", t.inspect
-  end
-
-  def test_invoke
-    runlist = []
-    t1 = task(:t1 => [:t2, :t3]) { |t| runlist << t.name; 3321 }
-    t2 = task(:t2) { |t| runlist << t.name }
-    t3 = task(:t3) { |t| runlist << t.name }
-    assert_equal ["t2", "t3"], t1.prerequisites
-    t1.invoke
-    assert_equal ["t2", "t3", "t1"], runlist
-  end
-
-  def test_invoke_with_circular_dependencies
-    runlist = []
-    t1 = task(:t1 => [:t2]) { |t| runlist << t.name; 3321 }
-    t2 = task(:t2 => [:t1]) { |t| runlist << t.name }
-    assert_equal ["t2"], t1.prerequisites
-    assert_equal ["t1"], t2.prerequisites
-    ex = assert_raise RuntimeError do
-      t1.invoke
-    end
-    assert_match(/circular dependency/i, ex.message)
-    assert_match(/t1 => t2 => t1/, ex.message)
-  end
-
-  def test_dry_run_prevents_actions
-    Rake.application.options.dryrun = true
-    runlist = []
-    t1 = task(:t1) { |t| runlist << t.name; 3321 }
-    out = capture_stdout { t1.invoke }
-    assert_match(/execute .*t1/i, out)
-    assert_match(/dry run/i, out)
-    assert_no_match(/invoke/i, out)
-    assert_equal [], runlist
-  ensure
-    Rake.application.options.dryrun = false
-  end
-
-  def test_tasks_can_be_traced
-    Rake.application.options.trace = true
-    t1 = task(:t1)
-    out = capture_stdout {
-      t1.invoke
-    }
-    assert_match(/invoke t1/i, out)
-    assert_match(/execute t1/i, out)
-  ensure
-    Rake.application.options.trace = false
-  end
-
-  def test_no_double_invoke
-    runlist = []
-    t1 = task(:t1 => [:t2, :t3]) { |t| runlist << t.name; 3321 }
-    t2 = task(:t2 => [:t3]) { |t| runlist << t.name }
-    t3 = task(:t3) { |t| runlist << t.name }
-    t1.invoke
-    assert_equal ["t3", "t2", "t1"], runlist
-  end
-
-  def test_can_double_invoke_with_reenable
-    runlist = []
-    t1 = task(:t1) { |t| runlist << t.name }
-    t1.invoke
-    t1.reenable
-    t1.invoke
-    assert_equal ["t1", "t1"], runlist
-  end
-
-  def test_clear
-    t = task("t" => "a") { }
-    t.clear
-    assert t.prerequisites.empty?, "prerequisites should be empty"
-    assert t.actions.empty?, "actions should be empty"
-  end
-
-  def test_clear_prerequisites
-    t = task("t" => ["a", "b"])
-    assert_equal ['a', 'b'], t.prerequisites
-    t.clear_prerequisites
-    assert_equal [], t.prerequisites
-  end
-
-  def test_clear_actions
-    t = task("t") { }
-    t.clear_actions
-    assert t.actions.empty?, "actions should be empty"
-  end
-
-  def test_find
-    task :tfind
-    assert_equal "tfind", Task[:tfind].name
-    ex = assert_raises(RuntimeError) { Task[:leaves] }
-    assert_equal "Don't know how to build task 'leaves'", ex.message
-  end
-
-  def test_defined
-    assert ! Task.task_defined?(:a)
-    task :a
-    assert Task.task_defined?(:a)
-  end
-
-  def test_multi_invocations
-    runs = []
-    p = proc do |t| runs << t.name end
-    task({:t1=>[:t2,:t3]}, &p)
-    task({:t2=>[:t3]}, &p)
-    task(:t3, &p)
-    Task[:t1].invoke
-    assert_equal ["t1", "t2", "t3"], runs.sort
-  end
-
-  def test_task_list
-    task :t2
-    task :t1 => [:t2]
-    assert_equal ["t1", "t2"], Task.tasks.collect {|t| t.name}
-  end
-
-  def test_task_gives_name_on_to_s
-    task :abc
-    assert_equal "abc", Task[:abc].to_s
-  end
-
-  def test_symbols_can_be_prerequisites
-    task :a => :b
-    assert_equal ["b"], Task[:a].prerequisites
-  end
-
-  def test_strings_can_be_prerequisites
-    task :a => "b"
-    assert_equal ["b"], Task[:a].prerequisites
-  end
-
-  def test_arrays_can_be_prerequisites
-    task :a => ["b", "c"]
-    assert_equal ["b", "c"], Task[:a].prerequisites
-  end
-
-  def test_filelists_can_be_prerequisites
-    task :a => FileList.new.include("b", "c")
-    assert_equal ["b", "c"], Task[:a].prerequisites
-  end
-
-  def test_investigation_output
-    t1 = task(:t1 => [:t2, :t3]) { |t| runlist << t.name; 3321 }
-    task(:t2)
-    task(:t3)
-    out = t1.investigation
-    assert_match(/class:\s*Rake::Task/, out)
-    assert_match(/needed:\s*true/, out)
-    assert_match(/pre-requisites:\s*--t2/, out)
-  end
-
-
-  def test_extended_comments
-    desc %{
-      This is a comment.
-
-      And this is the extended comment.
-      name -- Name of task to execute.
-      rev  -- Software revision to use.
-    }
-    t = task(:t, :name, :rev)
-    assert_equal "[name,rev]", t.arg_description
-    assert_equal "This is a comment.", t.comment
-    assert_match(/^\s*name -- Name/, t.full_comment)
-    assert_match(/^\s*rev  -- Software/, t.full_comment)
-    assert_match(/\A\s*This is a comment\.$/, t.full_comment)
-  end
-
-  def test_multiple_comments
-    desc "line one"
-    t = task(:t)
-    desc "line two"
-    task(:t)
-    assert_equal "line one / line two", t.comment
-  end
-
-  def test_settable_comments
-    t = task(:t)
-    t.comment = "HI"
-    assert_equal "HI", t.comment
-  end
-end
-
-######################################################################
-class TestTaskWithArguments < Test::Unit::TestCase
-  include CaptureStdout
-  include Rake
-
-  def setup
-    Task.clear
-  end
-
-  def test_no_args_given
-    t = task :t
-    assert_equal [], t.arg_names
-  end
-
-  def test_args_given
-    t = task :t, :a, :b
-    assert_equal [:a, :b], t.arg_names
-  end
-
-  def test_name_and_needs
-    t = task(:t => [:pre])
-    assert_equal "t", t.name
-    assert_equal [], t.arg_names
-    assert_equal ["pre"], t.prerequisites
-  end
-
-  def test_name_and_explicit_needs
-    t = task(:t, :needs => [:pre])
-    assert_equal "t", t.name
-    assert_equal [], t.arg_names
-    assert_equal ["pre"], t.prerequisites
-  end
-
-  def test_name_args_and_explicit_needs
-    t = task(:t, :x, :y, :needs => [:pre])
-    assert_equal "t", t.name
-    assert_equal [:x, :y], t.arg_names
-    assert_equal ["pre"], t.prerequisites
-  end
-
-  def test_illegal_keys_in_task_name_hash
-    assert_raise RuntimeError do
-      t = task(:t, :x, :y => 1, :needs => [:pre])
-    end
-  end
-
-  def test_arg_list_is_empty_if_no_args_given
-    t = task(:t) { |tt, args| assert_equal({}, args.to_hash) }
-    t.invoke(1, 2, 3)
-  end
-
-  def test_tasks_can_access_arguments_as_hash
-    t = task :t, :a, :b, :c do |tt, args|
-      assert_equal({:a => 1, :b => 2, :c => 3}, args.to_hash)
-      assert_equal 1, args[:a]
-      assert_equal 2, args[:b]
-      assert_equal 3, args[:c]
-      assert_equal 1, args.a
-      assert_equal 2, args.b
-      assert_equal 3, args.c
-    end
-    t.invoke(1, 2, 3)
-  end
-
-  def test_actions_of_various_arity_are_ok_with_args
-    notes = []
-    t = task(:t, :x) do
-      notes << :a
-    end
-    t.enhance do | |
-      notes << :b
-    end
-    t.enhance do |task|
-      notes << :c
-      assert_kind_of Task, task
-    end
-    t.enhance do |t2, args|
-      notes << :d
-      assert_equal t, t2
-      assert_equal({:x => 1}, args.to_hash)
-    end
-    assert_nothing_raised do t.invoke(1) end
-    assert_equal [:a, :b, :c, :d], notes
-  end
-
-  def test_arguments_are_passed_to_block
-    t = task(:t, :a, :b) { |tt, args|
-      assert_equal( { :a => 1, :b => 2 }, args.to_hash )
-    }
-    t.invoke(1, 2)
-  end
-
-  def test_extra_parameters_are_ignored
-    t = task(:t, :a) { |tt, args|
-      assert_equal 1, args.a
-      assert_nil args.b
-    }
-    t.invoke(1, 2)
-  end
-
-  def test_arguments_are_passed_to_all_blocks
-    counter = 0
-    t = task :t, :a
-    task :t do |tt, args|
-      assert_equal 1, args.a
-      counter += 1
-    end
-    task :t do |tt, args|
-      assert_equal 1, args.a
-      counter += 1
-    end
-    t.invoke(1)
-    assert_equal 2, counter
-  end
-
-  def test_block_with_no_parameters_is_ok
-    t = task(:t) { }
-    t.invoke(1, 2)
-  end
-
-  def test_name_with_args
-    desc "T"
-    t = task(:tt, :a, :b)
-    assert_equal "tt", t.name
-    assert_equal "T", t.comment
-    assert_equal "[a,b]", t.arg_description
-    assert_equal "tt[a,b]", t.name_with_args
-    assert_equal [:a, :b],t.arg_names
-  end
-
-  def test_named_args_are_passed_to_prereqs
-    value = nil
-    pre = task(:pre, :rev) { |t, args| value = args.rev }
-    t = task(:t, :name, :rev, :needs => [:pre])
-    t.invoke("bill", "1.2")
-    assert_equal "1.2", value
-  end
-
-  def test_args_not_passed_if_no_prereq_names
-    pre = task(:pre) { |t, args|
-      assert_equal({}, args.to_hash)
-      assert_equal "bill", args.name
-    }
-    t = task(:t, :name, :rev, :needs => [:pre])
-    t.invoke("bill", "1.2")
-  end
-
-  def test_args_not_passed_if_no_arg_names
-    pre = task(:pre, :rev) { |t, args|
-      assert_equal({}, args.to_hash)
-    }
-    t = task(:t, :needs => [:pre])
-    t.invoke("bill", "1.2")
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_test_task.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_test_task.rb
deleted file mode 100644
index 23921f7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_test_task.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'rake/testtask'
-
-class TestTestTask < Test::Unit::TestCase
-  include Rake
-  def setup
-    Task.clear
-    ENV.delete('TEST')
-  end
-
-  def teardown
-    FileUtils.rm_rf("testdata")
-  end
-
-  def test_no_task
-    assert ! Task.task_defined?(:test)
-  end
-
-  def test_defaults
-    tt = Rake::TestTask.new do |t| end
-    assert_not_nil tt
-    assert_equal :test, tt.name
-    assert_equal ['lib'], tt.libs
-    assert_equal 'test/test*.rb', tt.pattern
-    assert_equal false, tt.verbose
-    assert Task.task_defined?(:test)
-  end
-
-  def test_non_defaults
-    tt = Rake::TestTask.new(:example) do |t|
-      t.libs = ['src', 'ext']
-      t.pattern = 'test/tc_*.rb'
-      t.verbose = true
-    end
-    assert_not_nil tt
-    assert_equal :example, tt.name
-    assert_equal ['src', 'ext'], tt.libs
-    assert_equal 'test/tc_*.rb', tt.pattern
-    assert_equal true, tt.verbose
-    assert Task.task_defined?(:example)
-  end
-
-  def test_pattern
-    tt = Rake::TestTask.new do |t|
-      t.pattern = '*.rb'
-    end
-    assert_equal ['install.rb'], tt.file_list.to_a
-  end
-
-  def test_env_test
-    ENV['TEST'] = 'testfile.rb'
-    tt = Rake::TestTask.new do |t|
-      t.pattern = '*'
-    end
-    assert_equal ["testfile.rb"], tt.file_list.to_a
-  end
-
-  def test_test_files
-    tt = Rake::TestTask.new do |t|
-      t.test_files = FileList['a.rb', 'b.rb']
-    end
-    assert_equal ["a.rb", 'b.rb'], tt.file_list.to_a
-  end
-
-  def test_both_pattern_and_test_files
-    tt = Rake::TestTask.new do |t|
-      t.test_files = FileList['a.rb', 'b.rb']
-      t.pattern = '*.rb'
-    end
-    assert_equal ['a.rb', 'b.rb', 'install.rb'], tt.file_list.to_a
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_top_level_functions.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_top_level_functions.rb
deleted file mode 100644
index 7ca298c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_top_level_functions.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env ruby
-
-begin
-  require 'rubygems'
-rescue LoadError
-  # got no gems
-end
-
-require 'test/unit'
-require 'test/capture_stdout'
-require 'rake'
-require 'flexmock/test_unit'
-
-class TestTopLevelFunctions < Test::Unit::TestCase
-  include CaptureStdout
-
-  def setup
-    super
-    @app = Rake.application
-    Rake.application = flexmock("app")
-  end
-
-  def teardown
-    Rake.application = @app
-    super
-  end
-
-  def test_namespace
-    Rake.application.should_receive(:in_namespace).with("xyz", any).once
-    namespace "xyz" do end
-  end
-
-  def test_import
-    Rake.application.should_receive(:add_import).with("x").once.ordered
-    Rake.application.should_receive(:add_import).with("y").once.ordered
-    Rake.application.should_receive(:add_import).with("z").once.ordered
-    import('x', 'y', 'z')
-  end
-
-  def test_when_writing
-    out = capture_stdout do
-      when_writing("NOTWRITING") do
-        puts "WRITING"
-      end
-    end
-    assert_equal "WRITING\n", out
-  end
-
-  def test_when_not_writing
-    RakeFileUtils.nowrite_flag = true
-    out = capture_stdout do
-      when_writing("NOTWRITING") do
-        puts "WRITING"
-      end
-    end
-    assert_equal "DRYRUN: NOTWRITING\n", out
-  ensure
-    RakeFileUtils.nowrite_flag = false
-  end
-
-  def test_missing_constants_task
-    Rake.application.should_receive(:const_warning).with(:Task).once
-    Object.const_missing(:Task)
-  end
-
-  def test_missing_constants_file_task
-    Rake.application.should_receive(:const_warning).with(:FileTask).once
-    Object.const_missing(:FileTask)
-  end
-
-  def test_missing_constants_file_creation_task
-    Rake.application.should_receive(:const_warning).with(:FileCreationTask).once
-    Object.const_missing(:FileCreationTask)
-  end
-
-  def test_missing_constants_rake_app
-    Rake.application.should_receive(:const_warning).with(:RakeApp).once
-    Object.const_missing(:RakeApp)
-  end
-
-  def test_missing_other_constant
-    assert_raise(NameError) do Object.const_missing(:Xyz) end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_win32.rb b/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_win32.rb
deleted file mode 100644
index 80dec77..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rake-0.8.3/test/test_win32.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'test/unit'
-require 'test/rake_test_setup'
-require 'test/in_environment'
-
-require 'rake'
-
-class TestWin32 < Test::Unit::TestCase
-  include InEnvironment
-
-  Win32 = Rake::Win32
-  
-  def test_win32_system_dir_uses_appdata_if_defined
-    in_environment('RAKE_SYSTEM' => nil, 'APPDATA' => '\\AD') do
-      assert_equal "/AD/Rake", Win32.win32_system_dir 
-    end
-  end
-
-  def test_win32_system_dir_uses_homedrive_otherwise
-    in_environment(
-      'RAKE_SYSTEM' => nil,
-      'APPDATA' => nil,
-      'HOMEDRIVE' => "C:",
-      "HOMEPATH" => "\\HP"
-      ) do
-      assert_equal "C:/HP/Rake", Win32.win32_system_dir
-    end
-  end
-
-  def test_win32_system_dir_uses_userprofile_otherwise
-    in_environment(
-      'RAKE_SYSTEM' => nil,
-      'APPDATA' => nil,
-      'HOMEDRIVE' => nil,
-      "HOMEPATH" => nil,
-      "USERPROFILE" => '\\UP'
-      ) do
-      assert_equal "/UP/Rake", Win32.win32_system_dir
-    end
-  end
-
-  def test_win32_system_dir_nil_of_no_env_vars
-    in_environment(
-      'RAKE_SYSTEM' => nil,
-      'APPDATA' => nil,
-      'HOMEDRIVE' => nil,
-      "HOMEPATH" => nil,
-      "USERPROFILE" => nil
-      ) do
-      assert_raise(Rake::Win32::Win32HomeError) do
-        Win32.win32_system_dir
-      end
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/History.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/History.txt
deleted file mode 100644
index 77d94c0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/History.txt
+++ /dev/null
@@ -1,1198 +0,0 @@
-=== Version 1.1.11 / 2008-10-24
-
-* 1 major enhancement
-
-  * eliminate ALL gem dependencies (as they were causing trouble for people on different platforms/environments)
-
-=== Version 1.1.10 / 2008-10-24
-
-* 1 minor enhancement
-
-  * hash.should include(:key => 'value') #when you don't care about the whole hash
-
-* 2 bug fixes
-
-  * fix --help output (had inaccurate info about 'nested' formatter)
-  * eliminate spicycode-rcov dev dependency for rubygems < 1.3
-
-=== Version 1.1.9 / 2008-10-20
-
-WARNING: This release removes implicit inclusion of modules in example groups.
-This means that if you have 'describe MyModule do', MyModule will not be
-included in the group.
-
-* 2 major enhancements
-
-  * Add extend to configuration (thanks to advice from Chad Fowler)
-  * Modules are no longer implicitly included in example groups
-
-* 4 minor enhancements
-
-  * mingw indicates windows too (thanks to Luis Lavena for the tip)
-  * improved output for partial mock expecation failures
-  * it_should_behave_like now accepts n names of shared groups
-  * eliminated redundant inclusion/extension of ExampleGroupMethods
-
-* 6 bug fixes
-
-  * spec command with no arguments prints help
-  * fixed typo in help. Fixes #73.
-  * fixed bug where should_receive..and_yield after similar stub added the args_to_yield to the stub's original args_to_yield (Pat Maddox)
-  * fixed bug where rspec-autotest (autospec) was loading non-spec files in spec directory. Fixes #559.
-  * fixed bug where should_not_receive was reporting twice
-  * fixed bug where rspec tries to run examples just because it is required (even if there are no examples loaded). Fixes #575.
-
-=== Version 1.1.8 / 2008-10-03
-
-* 2 bug fixes
-
-  * restore colorized output in linux and windows w/ autotest (Tim Pope). Fixes #413.
-  * autospec no longer hangs on windows. Fixes #554.
-
-=== Version 1.1.7 / 2008-10-02
-
-* no changes since 1.1.6, but releasing rspec-1.1.7 to align versions with rspec-rails-1.1.7
-
-=== Version 1.1.6 / 2008-10-02
-
-* 2 bug fixes
-
-  * fixed bug where negative message expectations following stubs resulted in false (negative) positives (Mathias Meyer). Closes #548.
-  * fixed bug where Not Yet Implemented examples report incorrect caller (Scott Taylor). Closes #547.
-
-* 1 minor enhancement
-
-  * removed deprecated mock argument constraint symbols
-
-=== Version 1.1.5 / 2008-09-28
-
-IMPORTANT: use the new 'autospec' command instead of 'autotest'. We changed
-the way autotest discovers rspec so the autotest executable won't
-automatically load rspec anymore. This allows rspec to live side by side other
-spec frameworks without always co-opting autotest through autotest's discovery
-mechanism.
-
-ALSO IMPORTANT: $rspec_options is gone. If you were using this for anything
-(like your own runners), use Spec::Runner.options instead.
-
-ADDITIONALLY IMPORTANT: If you have any custom formatters, you'll need to
-modify #example_pending to accept three arguments instead of just two. See the
-rdoc for Spec::Runner::Formatter::BaseFormatter#example_pending for more
-information.
-
-* Consider MinGW as valid RUBY_PLATFORM for --colour option. (patch from Luis Lavena). Closes #406.
-* Added additional characters to be escaped in step strings (patch from Jake Cahoon). Closes #417.
-* Disable color codes on STDOUT when STDOUT.tty? is false (patch from Tim Pope). Closes #413.
-* mock(:null_object=>true) plays nice with HTML (patch from Gerrit Kaiser). Closes #230.
-* a step definition with no block is treated as pending
-* make sure consolidate_failures only grabs _spec files. Closes #369
-* Simplifying ExampleGroupMethods#registration_backtrace. (From Wilson Bilkovich - http://metaclass.org/2008/6/7/calling-in-the-dark)
-* Use 127.0.0.1 instead of localhost for drb (thanks Ola Bini)
-* html story formatter correctly colors story/scenario red if step fails (Patch from Joseph Wilk). Closes #300
-* plain text story formatter correctly colors story/scenario red if step fails (Patch from Joseph Wilk). Closes #439
-* quiet deprecation warning on inflector - patch from RSL. Closes #430
-* added autospec executable
-* added configurable messages to simple_matcher
-* should and should_not return true on success
-* use hoe for build/release
-* bye, bye translator
-* autotest/rspec uses ruby command instead of spec command (no need for spec command unless loading directories)
-* Avoid 'invalid option -O' in autotest (patch from Jonathan del Strother). Closes #486.
-* Fix: Unimplemented step with new line throws error (patch from Ben Mabey). Closes #494.
-* Only use color codes on tty; override for autospec (patch from Tim Pope). Closes #413.
-* Warn when setting mock expectations on nil (patch from Ben Mabey). Closes #521.
-* Support argument constraints as values in the hash_including contstraint. Thanks to Pirkka Hartikainen for failing code examples and the fix. Buttons up #501.
-* mock(:null_object=>true) plays nice with HTML (patch from Gerrit Kaiser)
-* Consider MinGW as valid RUBY_PLATFORM for --colour option. (patch from Luis Lavena). Closes #406.
-* Add 2nd arg to respond_to? to align w/ core Ruby rdoc: http://www.ruby-doc.org/core/classes/Object.html#M000604
-* quiet backtrace tweaker filters individual lines out of multiline (ala Rails) error messages (Pat Maddox)
-* added ability to stub multiple methods in one stub! call (Pat Maddox)
-* story progress bar formatter and more colourful summaries from the plain text story formatter (Joseph Wilk)
-* Avoid ruby invocation errors when autotesting (Jonathan del Strother)
-* added mock('foo').as_null_object
-* add file and line number to pending_example for formatters (Scott Taylor)
-* return last stubbed value for mock expectation with no explicit return (Pat Maddox)
-* Fixed bug when should_receive(:foo).any_number_of_times is called after similar stub (Pat Maddox)
-* Warning messages now issued when expectations are set on nil (Ben Mabey)
-
-=== Version 1.1.4
-
-Maintenance release.
-
-Note: we've removed the metaclass method from Object. There were some
-generated specs that used it, and they will now break. Just replace the
-metaclass call with (class << self; self; end) and all will be well.
-
-* added hash_including mock argument matcher. Closes #332 (patch from Rick DeNatale)
-* pending steps print out yellow in stories (patch from Kyle Hargraves)
-* Deprecation warnings for specs that assume auto-inclusion of modules. Closes #326 (patch from Scott Taylor)
-* mock.should_not_receive(:anything) fails fast (once again)
-* Patch from Antti Tarvainen to stop files from being loaded repeatedly when running heckle. Closes #333.
-* Fixed bug in which session object in example was not the same instance used in the controller. Closes #331. 
-* Applied patch from Antti Tarvainen to fix bug where heckle runs rspec runs heckle runs rspec etc. Closes #280.
-* Applied patch from Zach Dennis to merge :steps functionality to :steps_for. Closes #324.
-* Applied patch from Ryan Davis to add eval of block passed to raise_error matcher. Closes #321.
-* alias :context :describe in example_group_methods. Closes #312.
-* Applied patch from Ben Mabey to make the Story runner exit with a non-0 exit code on failing stories. Closes #228.
-* Applied patch from Coda Hale to get the :red hook called in autotest. Closes #279.
-* Applied patch from Patrick Ritchie to support --drb in spec.opts. Closes #274, #293.
-* Moved metaclass method from Object to an internal module which gets included where it is needed.
-* Applied patch from Dayo Esho: and_yield clobbers return value from block. Closes #217.
-* Applied patch from Bob Cotton:  ExampleGroupFactory.default resets previously registered types. Closes #222.
-* Applied patch from Mike Williams to support the lib directory in rails apps with the Textmate Alternate File command. Closes #276.
-* ExampleGroupMethods#xspecify aliases #xit
-* A SharedExampleGroup can be created within another ExampleGroup.
-* Applied patch from Bob Cotton: Nested ExampleGroups do not have a spec_path. Closes #224.
-* Add before_suite and after_suite callbacks to ExampleGroupMethods and Options. Closes #210.
-* The after(:suite) callback lambda is passed a boolean representing whether the suite passed or failed
-* Added NestedTextFormatter. Closes #366.
-* decoupled mock framework from global extensions used by rspec - supports use of flexmock or mocha w/ rails
-* Applied patch from Roman Chernyatchik to allow the user to pass in the ruby version into spectask. Closes #325, #370
-
-=== Version 1.1.3
-
-Maintenance release.
-Notice to autotest users: you must also upgrade to ZenTest-3.9.0.
-
-* Tightened up exceptions list in autotest/rails_spec. Closes #264.
-* Applied patch from Ryan Davis for ZenTest-3.9.0 compatibility
-* Applied patch from Kero to add step_upcoming to story listeners. Closes #253.
-* Fixed bug where the wrong named error was not always caught by "should raise_error"
-* Applied patch from Luis Lavena: No coloured output on Windows due missing RUBYOPT. Closes #244.
-* Applied patch from Craig Demyanovich to add support for "should_not render_template" to rspec_on_rails. Closes #241.
-* Added --pattern (-p for short) option to control what files get loaded. Defaults to '**/*_spec.rb'
-* Exit with non-0 exit code if examples *or tests* (in test/unit interop mode) fail. Closes #203.
-* Moved at_exit hook to a method in Spec::Runner which only runs if specs get loaded. Closes #242.
-* Applied patch from kakutani ensuring that base_view_path gets cleared after each view example. Closes #235.
-* More tweaks to regexp step names
-* Fixed focused specs in nested ExampleGroups. Closes #225.
-
-=== Version 1.1.2
-
-Minor bug fixes/enhancements.
-Notice to autotest users: you must also upgrade to ZenTest-3.8.0.
-
-* RSpec's Autotest subclasses compatible with ZenTest-3.8.0 (thanks to Ryan Davis for making it easier on Autotest subs).
-* Applied patch from idl to add spec/lib to rake stats. Closes #226.
-* calling setup_fixtures and teardown_fixtures for Rails >= r8570. Closes #219.
-* Applied patch from Josh Knowles using ActiveSupport's Inflector (when available) to make 'should have' read a bit better. Closes #197.
-* Fixed regression in 1.1 that caused failing examples to fail to generate their own names. Closes #209.
-* Applied doc patch from Jens Krämer for capturing content_for
-* Applied patch from Alexander Lang to clean up story steps after each story. Closes #198.
-* Applied patch from Josh Knowles to support 'string_or_response.should have_text(...)'. Closes #193.
-* Applied patch from Ian Dees to quiet the Story Runner backtrace. Closes #183.
-* Complete support for defining steps with regexp 'names'.
-
-=== Version 1.1.1
-
-Bug fix release.
-
-* Fix regression in 1.1.0 that caused transactions to not get rolled back between examples.
-* Applied patch from Bob Cotton to reintroduce ExampleGroup.description_options. Closes LH[#186]
-
-=== Version 1.1.0
-
-The "tell me a story and go nest yourself" release.
-
-* Applied patch from Mike Vincent to handle generators rails > 2.0.1. Closes LH[#181]
-* Formatter.pending signature changed so it gets passed an ExampleGroup instance instead of the name ( LH[#180])
-* Fixed LH[#180] Spec::Rails::Example::ModelExampleGroup and friends show up in rspec/rails output
-* Spec::Rails no longer loads ActiveRecord extensions if it's disabled in config/boot.rb
-* Applied LH[#178] small annoyances running specs with warnings enabled (Patch from Mikko Lehtonen)
-* Tighter integration with Rails fixtures. Take advantage of fixture caching to get performance improvements (Thanks to Pat Maddox, Nick Kallen, Jonathan Barnes, and Curtis)
-
-=== Version 1.1.0-RC1
-
-Textmate Bundle users - this release adds a new RSpec bundle that highlights describe, it, before and after and
-provides navigation to descriptions and examples (rather than classes and methods). When you first install this,
-it is going to try to hijack all of your .rb files. All you need to do is open a .rb file that does not end with
-'spec.rb' and change the bundle selection from RSpec to Ruby. TextMate will do the right thing from then on.
-
-Shortcuts for tab-activated snippets all follow the TextMate convention of 2 or 3 letters of the first word, followed by the first letter of each subsequent word. So "should have_at_least" would be triggered by shhal.
-
-We reduced the scope for running spec directories, files, a single file or individual spec in TextMate to source.ruby.rspec. This allowed us to restore the standard Ruby shortcuts:
-
-CMD-R runs all the specs in one file
-CMD-SHIFT-R runs an individual spec
-CMD-OPT-R runs any files or directories selected in the TextMate drawer
-
-rspec_on_rails users - don't forget to run script/generate rspec
-
-* Added shared_examples_for method, which you can (should) use instead of describe Foo, :shared => true
-* Applied LH[#168] Fix describe Object, "description contains a # in it" (Patch from Martin Emde)
-* Applied LH[#15] Reverse loading of ActionView::Base helper modules (Patch from Mark Van Holstyn)
-* Applied LH[#149] Update contribute page to point towards lighthouse (Patch from Josh Knowles)
-* Applied LH[#142] verify_rcov fails with latest rcov (Patch from Kyle Hargraves)
-* Applied LH[#10] Allow stubs to yield and return values (Patch from Pat Maddox)
-* Fixed LH[#139] version.rb in trunk missing svn last changed number
-* Applied LH[#14] Adding support for by_at_least/by_at_most in Change matcher (Patch from Saimon Moore)
-* Applied LH[#12] Fix for TM when switching to alternate file (Patch from Trevor Squires)
-* Applied LH[#133] ExampleMatcher should match against before(:all) (Patch from Bob Cotton)
-* Applied LH[#134] Only load spec inside spec_helper.rb (Patch from Mark Van Holstyn)
-* RSpec now bails immediately if there are examples with identical names.
-* Applied LH[#132]  Plain Text stories should support Given and Given: (Patch from Jarkko Laine)
-* Applied patch from Pat Maddox: Story Mediator - the glue that binds the plain text story parser with the rest of the system
-* Applied LH[#16] Have SimpleMatchers expose their description for specdocs (Patch from Bryan Helmkamp)
-* Stories now support --colour
-* Changed the DSL modules to Example (i.e. Spec::Example instead of Spec::DSL)
-* Applied [#15608] Story problem if parenthesis used in Given, When, Then or And (Patch from Sinclair Bain)
-* Applied [#15659] GivenScenario fails when it is a RailsStory (Patch from Nathan Sutton)
-* Fixed [#15639] rcov exclusion configuration. (Spec::Rails projects can configure rcov with spec/rcov.opts)
-* The rdoc formatter (--format rdoc) is gone. It was buggy and noone was using it.
-* Changed Spec::DSL::Behaviour to Spec::DSL::ExampleGroup
-* Changed Spec::DSL::SharedBehaviour to Spec::DSL::SharedExampleGroup
-* Applied [#14023] Small optimization for heavily proxied objects. (Patch from Ian Leitch)
-* Applied [#13943] ProfileFormatter (Top 10 slowest examples) (Patch from Ian Leitch)
-* Fixed [#15232] heckle is not working correctly in trunk (as of r2801)
-* Applied [#14399] Show pending reasons in HTML report (Patch from Bryan Helmkamp)
-* Discovered fixed: [#10263] mock "leak" when setting an expectation in a block passed to mock#should_receive
-* Fixed [#14671] Spec::DSL::ExampleRunner gives "NO NAME because of --dry-run" for every example for 'rake spec:doc'
-* Fixed [#14543] rspec_scaffold broken with Rails 2.0
-* Removed Patch [#10577] Rails with Oracle breaks 0.9.2 - was no longer necessary since we moved describe to the Main object (instead of Object)
-* Fixed [#14527] specs run twice on rails 1.2.4 and rspec/rspec_on_rails trunk
-* Applied [#14043] Change output ordering to show pending before errors (Patch from Mike Mangino)
-* Applied [#14095] Don't have ./script/generate rspec create previous_failures.txt (Patch from Bryan Helmkamp)
-* Applied [#14254] Improved error handling for Object#should and Object#should_not (Patch from Antti Tarvainen)
-* Applied [#14186] Remove dead code from message_expecation.rb (Patch from Antti Tarvainen)
-* Applied [#14183] Tiny improvement on mock_spec.rb (Patch from Antti Tarvainen)
-* Applied [#14208] Fix to Mock#method_missing raising NameErrors instead of MockExpectationErrors (Patch from Antti Tarvainen)
-* Applied [#14255] Fixed examples in mock_spec.rb and shared_behaviour_spec.rb (Patch from Antti Tarvainen)
-* Applied [#14362] partially mocking objects that define == can blow up (Patch from Pat Maddox)
-* test_ methods with an arity of 0 defined in a describe block or Example object will be run as an Example, providing a seamless transition from Test::Unit
-* Removed BehaviourRunner
-* Fixed [#13969] Spec Failures on Trunk w/ Autotest
-* Applied [#14156] False positives with should_not (Patch from Antti Tarvainen)
-* Applied [#14170] route_for and params_from internal specs fixed (Patch from Antti Tarvainen)
-* Fixed [#14166] Cannot build trunk
-* Applied [#14142] Fix for bug #11602: Nested #have_tag specifications fails on the wrong line number (Patch from Antti Tarvainen)
-* Removed warn_if_no_files argument and feature
-* Steps (Given/When/Then) with no blocks are treated as pending
-* Applied [#13913] Scenario should treat no code block as pending (Patch from Evan Light)
-* Fixed [#13370] Weird mock expectation error (Patch from Mike Mangino)
-* Applied [#13952] Fix for performance regression introduced in r2096 (Patch from Ian Leitch)
-* Applied [#13881] Dynamically include Helpers that are included on ActionView::Base (Patch from Brandon Keepers)
-* Applied [#13833] ActionView::Helpers::JavaScriptMacrosHelper removed after 1.2.3 (Patch from Yurii Rashkovskii)
-* Applied [#13814] RSpec on Rails w/ fixture-scenarios (Patch from Shintaro Kakutani)
-* Add ability to define Example subclass instead of using describe
-* Applied Patch from James Edward Gray II to improve syntax highlighting in TextMate
-* Fixed [#13579] NoMethodError not raised for missing helper methods
-* Fixed [#13713] form helper method 'select' can not be called when calling custom helper methods from specs
-* Example subclasses Test::Unit::TestCase
-* Added stub_everything method to create a stub that will return itself for any message it doesn't understand
-* Added stories directory with stories/all.rb and stories/helper.rb when you script/generate rspec
-* Applied [#13554] Add "And" so you can say Given... And... When... Then... And...
-* Applied [#11254] RSpec syntax coloring and function pop-up integration in TextMate (Patch from Wincent Colaiuta)
-* Applied [#13143] ActionView::Helpers::RecordIdentificationHelper should be included if present (Patch from Jay Levitt)
-* Applied [#13567] patch to allow stubs to yield consecutive values (Patch from Rupert Voelcker)
-* Applied [#13559] reverse version of route_for (Patch from Rupert Voelcker)
-* Added [#13532] /lib specs should get base EvalContext
-* Applied [#13451] Add a null_object option to mock_model (Patch from James Deville)
-* Applied [#11919] Making non-implemented specs easy in textmate (Patch from Scott Taylor)
-* Applied [#13274] ThrowSymbol recognized a NameError triggered by Kernel#method_missing as a thrown Symbol
-* Applied [#12722] the alternate file command does not work in rails views due to scope (Patch from Carl Porth)
-* Behaviour is now a Module that is used by Example class methods and SharedBehaviour
-* Added ExampleDefinition
-* Added story runner framework based on rbehave [#12628]
-* Applied [#13336] Helper directory incorrect for rake stats in statsetup task (Patch from Curtis Miller)
-* Applied [#13339] Add the ability for spec_parser to parse describes with :behaviour_type set (Patch from Will Leinweber and Dav Yaginuma)
-* Fixed [#13271] incorrect behaviour with expect_render and stub_render
-* Applied [#13129] Fix failing specs in spec_distributed (Patch from Bob Cotton)
-* Applied [#13118] Rinda support for Spec::Distributed (Patch from Bob Cotton)
-* Removed BehaviourEval
-* Removed Behaviour#inherit
-* Moved implementation of install_dependencies to example_rails_app
-* Renamed RSPEC_DEPS to VENDOR_DEPS
-* Added Example#not_implemented?
-* You can now stub!(:msg).with(specific args)
-* describe("A", Hash, "with one element") will generate description "A Hash with one element" (Tip from Ola Bini)
-* Applied [#13016] [DOC] Point out that view specs render, well, a view (Patch from Jay Levitt)
-* Applied [#13078] Develop rspec with autotest (Patch from Scott Taylor)
-* Fixed [#13065] Named routes throw a NoMethodError in Helper specs (Patches from James Deville and Mike Mangino)
-* Added (back) the verbose attribute in Spec::Rake::SpecTask
-* Changed documentation to point at the new http svn URL, which is more accessible.
-
-=== Version 1.0.8
-
-Another bugfix release - this time to resolve the version mismatch
-
-=== Version 1.0.7
-
-Quick bugfix release to ensure that you don't have to have the rspec gem installed
-in order to use autotest with rspec_on_rails.
-
-* Fixed [#13015] autotest gives failure in 'spec_command' after upgrade 1.0.5 to 1.0.6
-
-=== Version 1.0.6
-
-The "holy cow, batman, it's been a long time since we released and there are a ton of bug
-fixes, patches and even new features" release.
-
-Warning: Spec::Rails users: In fixing 11508, we've removed the raise_controller_errors method. As long as you
-follow the upgrade instructions and run 'script/generate rspec' you'll be fine, but if you skip this
-step you need to manually go into spec_helper.rb and remove the call to that method (if present - it
-might not be if you haven't upgraded in a while).
-
-Warning: Implementors of custom formatters. Formatters will now be sent an Example object instead of just a 
-String for #example_started, #example_passed and #example_failed. In certain scenarios 
-(Spec::Ui with Spec::Distributed), the formatter must ask the Example for its sequence number instead of
-keeping track of a sequence number internal to the formatter. Most of you shouldn't need to upgrade
-your formatters though - the Example#to_s method returns the example name/description, so you should be
-able to use the passed Example instance as if it were a String.
-
-* Applied [#12986] Autotest Specs + Refactoring (Patch from Scott Tayler)
-* Added a #close method to formatters, which allows them to gracefully close streams.
-* Applied [#12935] Remove requirement that mocha must be installed as a gem when used as mocking framework. (Patch from Ryan Kinderman).
-* Fixed [#12893] RSpec's Autotest should work with rspec's trunk
-* Fixed [#12865] Partial mock error when object has an @options instance var
-* Applied [#12701] Allow checking of content captured with content_for in view specs (Patch from Jens Kr�mer)
-* Applied [#12817] Cannot include same shared behaviour when required with absolute paths (Patch from Ian Leitch)
-* Applied [#12719] rspec_on_rails should not include pagination helper (Patch from Matthijs Langenberg)
-* Fixed [#12714] helper spec not finding rails core helpers
-* Applied [#12611] should_not redirect_to implementation (Patch from Yurii Rashkovskii)
-* Applied [#12682] Not correctly aliasing original 'stub!' and 'should_receive' methods for ApplicationController (Patch from Matthijs Langenberg)
-* Disabled controller.should_receive(:render) and controller.stub!(:render). Use expect_render or stub_render instead.
-* Applied [#12484] Allow a Behaviour's Description to flow through to the Formatter (Patch from Bob Cotton)
-* Fixed [#12448] The spec:plugins rake task from rspec_on_rails should ignore specs from the rspec_on_rails plugin
-* Applied [#12300] rr integration (patch from Kyle Hargraves)
-* Implemented [#12284] mock_with :rr (integration with RR mock framework: http://rubyforge.org/projects/pivotalrb/)
-* Applied [#12237] (tiny) added full path to mate in switch_command (Patch from Carl Porth)
-* Formatters will now be sent an Example object instead of just a String for certain methods
-* All Spec::Rake::SpecTask attributes can now be procs, which allows for lazy evaluation.
-* Changed the Spec::Ui interfaces slightly. See examples.
-* Applied [#12174] mishandling of paths with spaces in spec_mate switch_command (Patch from Carl Porth)
-* Implemented [#8315] File "Go to..." functionality
-* Applied [#11917] Cleaner Spec::Ui error for failed Selenium connection (Patch from Ian Dees)
-* Applied [#11888] rspec_on_rails spews out warnings when assert_select is used with an XML response (Patch from Ian Leitch)
-* Applied [#12010] Nicer failure message formatting (Patch from Wincent Colaiuta)
-* Applied [#12156] smooth open mate patch (Patch from Ienaga Eiji)
-* Applied [#10577] Rails with Oracle breaks 0.9.2. (Patch from Sinclair Bain)
-* Fixed [#12079] auto-generated example name incomplete: should have 1 error on ....]
-* Applied [#12066] Docfix for mocks/mocks.page (Patch from Kyle Hargraves)
-* Fixed [#11891] script/generate rspec_controller fails to create appropriate views (from templates) on edge rails
-* Applied [#11921] Adds the correct controller_name from derived_controller_name() to the ViewExampleGroupController (Patch from Eloy Duran)
-* Fixed [#11903] config.include with behaviour_type 'hash' does not work
-* Examples without blocks and pending is now reported with a P instead of a *
-* Pending blocks that now pass are rendered blue
-* New behaviour for after: If an after block raises an error, the other ones will still run instead of bailing at the first. 
-* Made it possible to run spec from RSpec.tmbundle with --drb against a Rails spec_server.
-* Applied [#11868] Add ability for pending to optionally hold a failing block and to fail when it passes (Patch from Bob Cotton)
-* Fixed [#11843] watir_behaviour missing from spec_ui gem
-* Added 'switch between source and spec file' command in Spec::Mate (based on code from Ruy Asan)
-* Applied [#11509] Documentation - RSpec requires hpricot
-* Applied [#11807] Daemonize spec_server and rake tasks to manage them. (patch from Kyosuke MOROHASHI)
-* Added pending(message) method
-* Fixed [#11777] should render_template doesn't check paths correctly
-* Fixed [#11749] Use of 'rescue => e' does not catch all exceptions
-* Fixed [#11793] should raise_error('with a message') does not work correctly
-* Fixed [#11774] Mocks should respond to :kind_of? in the same way they respond to :is_a?
-* Fixed [#11508] Exceptions are not raised for Controller Specs (removed experimental raise_controller_errors)
-* Applied [#11615] Partial mock methods give ambiguous failures when given a method name as a String (Patch from Jay Phillips)
-* Fixed [#11545] Rspec doesn't handle should_receive on ActiveRecord associations (Patch from Ian White)
-* Fixed [#11514] configuration.use_transactional_fixtures is ALWAYS true, regardless of assignment
-* Improved generated RESTful controller examples to cover both successful and unsuccessful POST and PUT
-* Changed TextMate snippets for controllers to pass controller class names to #describe rather than controller_name.
-* Changed TextMate snippets for mocks to use no_args() and any_args() instead of the deprecated Symbols.
-* Applied [#11500] Documentation: no rails integration specs in 1.0
-* Renamed SpecMate's shortcuts for running all examples and focused examples to avoid conflicts (CMD-d and CMD-i)
-* Added a TextMate snippet for custom matchers, lifted from Geoffrey Grosenbach's RSpec peepcode show.
-* The translator translates mock constraints to the new matchers that were introduced in 1.0.4
-* Documented environment variables for Spec::Rake::SpecTask. Renamed SPECOPTS and RCOVOPTS to SPEC_OPTS and RCOV_OPTS.
-* Fixed [#10534] Windows: undefined method 'controller_name'
-
-=== Version 1.0.5
-Bug fixes. Autotest plugin tweaks.
-
-* Fixed [#11378] fix to 10814 broke drb (re-opened #10814)
-* Fixed [#11223] Unable to access flash from rails helper specs
-* Fixed [#11337] autotest runs specs redundantly
-* Fixed [#11258] windows: autotest won't run
-* Applied [#11253] Tweaks to autotest file mappings (Patch from Wincent Colaiuta)
-* Applied [#11252] Should be able to re-load file containing shared behaviours without raising an exception (Patch from Wincent Colaiuta)
-* Fixed [#11247] standalone autotest doesn't work because of unneeded autotest.rb
-* Applied [#11221] Autotest support does not work w/o Rails Gem installed (Patch from Josh Knowles)
-
-=== Version 1.0.4
-The getting ready for JRuby release.
-
-* Fixed [#11181] behaviour_type scoping of config.before(:each) is not working
-* added mock argument constraint matchers (anything(), boolean(), an_instance_of(Type)) which work with rspec or mocha
-* added mock argument constraint matchers (any_args(), no_args()) which only work with rspec
-* deprecated rspec's symbol mock argument constraint matchers (:any_args, :no_args, :anything, :boolean, :numeric, :string)
-* Added tarball of rspec_on_rails to the release build to support folks working behind a firewall that blocks svn access.
-* Fixed [#11137] rspec incorrectly handles flash after resetting the session
-* Fixed [#11143] Views code for ActionController::Base#render broke between 1.0.0 and 1.0.3 on Rails Edge r6731
-* Added raise_controller_errors for controller examples in Spec::Rails
-
-=== Version 1.0.3
-Bug fixes.
-
-* Fixed [#11104] Website uses old specify notation
-* Applied [#11101] StringHelpers.starts_with?(prefix) assumes a string parameter for _prefix_
-* Removed 'rescue nil' which was hiding errors in controller examples.
-* Fixed [#11075] controller specs fail when using mocha without integrated_views
-* Fixed problem with redirect_to failing incorrectly against edge rails.
-* Fixed [#11082] RspecResourceGenerator should be RspecScaffoldGenerator
-* Fixed [#10959] Focused Examples do not work for Behaviour defined with constant with modules
-
-=== Version 1.0.2
-This is just to align the version numbers in rspec and rspec_on_rails.
-
-=== Version 1.0.1
-This is a maintenance release with mostly cleaning up, and one minor enhancement -
-Modules are automatically included when described directly.
-
-* Renamed Spec::Rails' rspec_resource generator to rspec_scaffold.
-* Removed Spec::Rails' be_feed matcher since it's based on assert_select_feed which is not part of Rails (despite that docs for assert_select_encoded says it is).
-* describe(SomeModule) will include that module in the examples. Like for Spec::Rails helpers, but now also in core.
-* Header in HTML report will be yellow instead of red if there is one failed example
-* Applied [#10951] Odd instance variable name in rspec_model template (patch from Kyle Hargraves)
-* Improved integration with autotest (Patches from Ryan Davis and David Goodland)
-* Some small fixes to make all specs run on JRuby.
-
-=== Version 1.0.0
-The stake in the ground release. This represents a commitment to the API as it is. No significant
-backwards compatibility changes in the API are expected after this release.
-
-* Fixed [#10923] have_text matcher does not support should_not
-* Fixed [#10673] should > and should >= broken
-* Applied [#10921] Allow verify_rcov to accept greater than threshold coverage %'s via configuration
-* Applied [#10920] Added support for not implemented examples (Patch from Chad Humphries and Ken Barker)
-* Patch to allow not implemented examples.  This works by not providing a block to the example. (Patch from Chad Humphries, Ken Barker)
-* Yanked support for Rails 1.1.6 in Spec::Rails
-* RSpec.tmbundle uses CMD-SHIFT-R to run focused examples now.
-* Spec::Rails now bundles a spec:rcov task by default (suggestion from Kurt Schrader)
-* Fixed [#10814] Runner loads shared code, test cases require them again
-* Fixed [#10753] Global before and after
-* Fixed [#10774] Allow before and after to be specified in config II
-* Refactored Spec::Ui examples to use new global before and after blocks.
-* Added instructions about how to get Selenium working with Spec::Ui (spec_ui/examples/selenium/README.txt)
-* Fixed [#10805] selenium.rb missing from gem?
-* Added rdocs explaining how to deal with errors in Rails' controller actions
-* Applied [#10770] Finer grained includes.
-* Fixed [#10747] Helper methods defined in shared specs are not visible when shared spec is used
-* Fixed [#10748] Shared descriptions in separate files causes 'already exists' error
-* Applied [#10698] Running with --drb executes specs twice (patch from Ruy Asan)
-* Fixed [#10871] 0.9.4 - Focussed spec runner fails to run specs in descriptions with type and string when there is no leading space in the string
-
-=== Version 0.9.4
-This release introduces massive improvements to Spec::Ui - the user interface functional testing
-extension to RSpec. There are also some minor bug fixes to the RSpec core.
-
-* Massive improvements to Spec::Ui. Complete support for all Watir's ie.xxx(how, what) methods. Inline screenshots and HTML.
-* Reactivated --timeout, which had mysteriously been deactivated in a recent release.
-* Fixed [#10669] Kernel#describe override does not cover Kernel#context
-* Applied [#10636] Added spec for OptionParser in Runner (Patch from Scott Taylor)
-* Added [#10516] should_include should be able to accept multiple items
-* Applied [#10631] redirect_to matcher doesn't respect request.host (Patch from Tim Lucas)
-* Each formatter now flushes their own IO. This is to avoid buffering of output.
-* Fixed [#10670] IVarProxy#delete raises exception when instance variable does not exist
-
-=== Version 0.9.3
-This is a bugfix release.
-
-* Fixed [#10594] Failing Custom Matcher show NAME NOT GENERATED description
-* describe(SomeType, "#message") will not add a space: "SomeType#message" (likewise for '.')
-* describe(SomeType, "message") will have a decription with a space: "SomeType message"
-* Applied [#10566] prepend_before and prepend_after callbacks
-* Applied [#10567] Call setup and teardown using before and after callbacks
-
-=== Version 0.9.2
-This is a quick maintenance release. 
-
-* Added some website love
-* Fixed [#10542] reverse predicate matcher syntax
-* Added a spec:translate Rake task to make 0.9 translation easier with Spec:Rails
-* Better translation of should_redirect_to
-* Fixed --colour support for Windows. This is a regression that was introduced in 0.9.1
-* Applied [#10460] Make SpecRunner easier to instantiate without using commandline args
-
-=== Version 0.9.1
-
-This release introduces #describe and #it (aliased as #context and #specify for
-backwards compatibility). This allows you to express specs like this:
-
-  describe SomeClass do # Creates a Behaviour
-    it "should do something" do # Creates an Example
-    end
-  end
-
-The command line features four new options that give you more control over what specs
-are being run and in what order. This can be used to verify that your specs are
-independent (by running in opposite order with --reverse). It can also be used to cut 
-down feedback time by running the most recently modified specs first (--loadby mtime --reverse).
-
-Further, --example replaces the old --spec option, and it can now take a file name of
-spec names as an alternative to just a spec name. The --format failing_examples:file.txt 
-option allows you to output an --example compatible file, which makes it possible to only 
-rerun the specs that failed in the last run. Spec::Rails uses all of these four options 
-by default to optimise your RSpec experience.
-
-There is now a simple configuration model. For Spec::Rails, you do something like this:
-
-  Spec::Runner.configure do |config|
-    config.use_transactional_fixtures = true
-    config.use_instantiated_fixtures  = false
-    config.fixture_path = RAILS_ROOT + '/spec/fixtures'
-  end
-
-You can now use mocha or flexmock with RSpec if you prefer either to
-RSpec's own mock framework. Just put this:
-
-  Spec::Runner.configure do |config|
-    config.mock_with :mocha
-  end
-  
-or this:
-
-  Spec::Runner.configure do |config|
-    config.mock_with :flexmock
-  end
-
-in a file that is loaded before your specs. You can also
-configure included modules and predicate_matchers:
-
-  Spec::Runner.configure do |config|
-    config.include SomeModule
-    config.predicate_matchers[:does_something?] = :do_something
-  end
-
-See Spec::DSL::Behaviour for more on predicate_matchers
-
-* Sugar FREE!
-* Added [10434 ] Please Make -s synonymous with -e for autotest compat. This is temporary until autotest uses -e instead of -s.
-* Fixed [#10133] custom predicate matchers
-* Applied [#10473] Add should exist (new matcher) - Patch from Bret Pettichord
-* Added another formatter: failing_behaviours. Writes the names of the failing behaviours for use with --example.
-* Applied [#10315] Patch to fix pre_commit bug 10313 - pre_commit_rails: doesn't always build correctly (Patch from Antii Tarvainen)
-* Applied [#10245] Patch to HTML escape the behavior name when using HTML Formatter (Patch from Josh Knowles)
-* Applied [#10410] redirect_to does not behave consistently with regards to query string parameter ordering (Patch from Nicholas Evans)
-* Applied [#9605] Patch for ER 9472, shared behaviour (Patch by Bob Cotton)
-* The '--format rdoc' option no longer causes a dry-run by default. --dry-run must be used explicitly.
-* It's possible to specify the output file in the --format option (See explanation in --help)
-* Several --format options may be specified to output several formats in one run.
-* The --out option is gone. Use --format html:path/to/my.html instead (or similar).
-* Spec::Runner::Formatter::BaseTextFormatter#initialize only takes one argument - an IO. dry_run and color are setters.
-* Made Spec::Ui *much* easier to install. It will be released separately. Check out trunk/spec_ui/examples
-* HTML reports now include a syntax highlighted snippet of the source code where the spec failed (needs the syntax gem)
-* Added [#10262] Better Helper testing of Erb evaluation block helpers
-* Added [#9735] support flexmock (thanks to Jim Weirich for his modifications to flexmock to support this)
-* Spec::Rails controller specs will no longer let mock exception ripple through to the response.
-* Fixed [#9260] IvarProxy does not act like a hash.
-* Applied [#9458] The rspec_scaffold generator does not take into account class nesting (Patch from Steve Tendon)
-* Applied [#9132] Rakefile spec:doc can fail without preparing database (Patch from Steve Ross)
-* Applied [#9678] Custom runner command line switch, and multi-threaded runner (Patch from Bob Cotton)
-* Applied [#9926] Rakefile - RSPEC_DEPS constant as an Array of Hashes instead of an Array of Arrays (Patch from Scott Taylor)
-* Applied [#9925] Changed ".rhtml" to "template" in REST spec generator (Patch from Scott Taylor)
-* Applied [#9852] Patch for RSpec's Website using Webgen 0.4.2 (Patch from Scott Taylor)
-* Fixed [#6523] Run rspec on rails without a db
-* Fixed [#9295] rake spec should run anything in the spec directory (not just rspec's standard dirs)
-* Added [#9786] infer controller and helper names from the described type
-* Fixed [#7795] form_tag renders action='/view_spec' in view specs
-* Fixed [#9767] rspec_on_rails should not define rescue_action on controllers
-* Fixed [#9421] --line doesn't work with behaviours that use class names
-* Fixed [#9760] rspec generators incompatible with changes to edge rails
-* Added [#9786] infer controller and helper names from the described type
-* Applied a simplified version of [#9282] Change to allow running specs from textmate with rspec installed as a rails plugin (and no rspec gem installed)
-* Applied [#9700] Make Spec::DSL::Example#name public / Add a --timeout switch. A great way to prevent specs from getting slow.
-* In Rails, script/generate rspec will generate a spec.opts file that optimises faster/more efficient running of specs.
-* Added [#9522] support using rspec's expectations with test/unit
-* Moved rspec_on_rails up to the project root, simplifying the download url
-* Fixed [#8103] RSpec not installing spec script correctly.
-* The --spec option is replaced by the --example option.
-* The --loadby option no longer supports a file argument. Use --example file_name instead.
-* The --example option can now take a file name as an argument. The file should contain example names.
-* Internal classes are named Behaviour/Example (rather than Context/Specification).
-* You can now use mocha by saying config.mock_with :mocha in a spec_helper
-* before_context_eval is replaced by before_eval.
-* Applied [#9509] allow spaced options in spec.opts
-* Applied [#9510] Added File for Ruby 1.8.6
-* Applied [#9511] Clarification to README file in spec/
-* Moved all of the Spec::Rails specs down to the plugins directory - now you can run the specs after you install.
-* Updated RSpec.tmbundle to the 0.9 syntax and replaced context/specify with describe/it.
-* Applied [#9232] ActionController::Base#render is sometimes protected (patch from Dan Manges)
-* Added --reverse option, allowing contexts/specs to be run in reverse order. 
-* Added --loadby option, allowing better control over load order for spec files. mtime and file.txt supported.
-* Implemented [#8696] --order option (see --reverse and --loadby)
-* Added describe/it as aliases for context/specify - suggestion from Dan North.
-* Applied [#7637] [PATCH] add skip-migration option to rspec_scaffold generator
-* Added [#9167] string.should have_tag
-* Changed script/rails_spec_server to script/spec_server and added script/spec (w/ path to vendor/plugins/rspec)
-* Fixed [#8897] Error when mixing controller spec with/without integrated views and using template system other than rhtml
-* Updated sample app specs to 0.9 syntax
-* Updated generated specs to 0.9 syntax
-* Applied [#8994] trunk: generated names for be_ specs (Multiple patches from Yurii Rashkovskii)
-* Applied [#9983]: Allow before and after to be called in BehaviourEval. This is useful for shared examples.
-
-=== Version 0.8.2
-
-Replaced assert_select fork with an assert_select wrapper for have_tag. This means that "should have_rjs" no longer supports :hide or :effect, but you can still use should_have_rjs for those.
-
-=== Version 0.8.1
-
-Quick "in house" bug-fix
-
-=== Version 0.8.0
-
-This release introduces a new approach to handling expectations using Expression Matchers.
-
-See Upgrade[http://rspec.rubyforge.org/upgrade.html], Spec::Expectations, Spec::Matchers and RELEASE-PLAN for more info.
-
-This release also improves the spec command line by adding DRb support and making it possible to
-store command line options in a file. This means a more flexible RSpec experience with Rails, 
-Rake and editor plugins like TextMate.
-
-It also sports myriad new features, bug fixes, patches and general goodness:
-
-* Fixed [#8928] rspec_on_rails 0.8.0-RC1 controller tests make double call to setup_with_fixtures
-* Fixed [#8925] Documentation bug in 0.8.0RC1 rspec website
-* Applied [#8132] [PATCH] RSpec breaks "rake db:sessions:create" in a rails project that has the rspec_on_rails plugin (Patch from Erik Kastner)
-* Fixed [#8789] --line and --spec not working when the context has parenhesis in the name
-* Added [#8783] auto generate spec names from last expectation
-* --heckle now fails if the heckled class or module is not found.
-* Fixed [#8771] Spec::Mocks::BaseExpectation#with converts hash params to array of arrays with #collect
-* Fixed [#8750] should[_not]_include backwards compatibility between 0.8.0-RC1 and 0.7.5.1 broken
-* Fixed [#8646] Context Runner does not report on Non standard exceptions and return a 0 return code
-* RSpec on Rails' spec_helper.rb will only force RAILS_ENV to test if it was not specified on the command line.
-* Fixed [#5485] proc#should_raise and proc#should_not_raise output
-* Added [#8484] should_receive with blocks
-* Applied [#8218] heckle_runner.rb doesn't work with heckle >= 1.2.0 (Patch from Michal Kwiatkowski)
-* Fixed [#8240] Cryptic error message when no controller_name
-* Applied [#7461] [PATCH] Contexts don't call Module::included when they include a module
-* Removed unintended block of test/unit assertions in rspec_on_rails - they should all, in theory, now be accessible
-* Added mock_model method to RSpec on Rails, which stubs common methods. Based on http://metaclass.org/2006/12/22/making-a-mockery-of-activerecord
-* Fixed [#8165] Partial Mock Errors when respond_to? is true but the method is not in the object
-* Fixed [#7611] Partial Mocks override Subclass methods
-* Fixed [#8302] Strange side effect when mocking a class method
-* Applied [#8316] to_param should return a stringified key in resource generator's controller spec (Patch from Chris Anderson)
-* Applied [#8216] shortcut for creating object stub
-* Applied [#8008] Correct generated specs for view when calling resource generator (Patch from Jonathan Tron)
-* Fixed [#7754] Command-R fails to run spec in TextMate (added instruction from Luke Redpath to the website)
-* Fixed [#7826] RSpect.tmbundle web page out of date.
-* RSpec on Rails specs are now running against RoR 1.2.1 and 1.2.2
-* rspec_scaffold now generates specs for views
-* In a Rails app, RSpec core is only loaded when RAILS_ENV==test (init.rb)
-* Added support for target.should arbitrary_expectation_handler and target.should_not arbitrary_expectation_handler
-* Fixed [#7533] Spec suite fails and the process exits with a code 0
-* Fixed [#7565] Subsequent stub! calls for method fail to override the first call to method
-* Applied [#7524] Incorrect Documentation for 'pattern' in Rake task (patch from Stephen Duncan)
-* Fixed [#7409] default fixtures do not appear to run.
-* Fixed [#7507] "render..and return" doesn't return
-* Fixed [#7509] rcov/rspec incorrectly includes boot.rb (Patch from Courtenay)
-* Fixed [#7506] unnecessary complex output on failure of response.should be_redirect
-* Applied [#6098] Make scaffold_resource generator. Based on code from Pat Maddox.
-* The drbspec command is gone. Use spec --drb instead.
-* The drb option is gone from the Rake task. Pass --drb to spec_opts instead.
-* New -X/--drb option for running specs against a server like spec/rails' script/rails_spec_server
-* New -O/--options and -G/--generate flags for file-based options (handy for spec/rails)
-* Applied [#7339] Turn off caching in HTML reports
-* Applied [#7419] "c option for colorizing output does not work with rails_spec" (Patch from Shintaro Kakutani)
-* Applied [#7406] [PATCH] 0.7.5 rspec_on_rails loads fixtures into development database (Patch from Wilson Bilkovich)
-* Applied [#7387] Allow stubs to return consecutive values (Patch from Pat Maddox)
-* Applied [#7393] Fix for rake task (Patch from Pat Maddox)
-* Reinstated support for response.should_render (in addition to controller.should_render)
-
-=== Version 0.7.5.1
-
-Bug fix release to allow downloads of rspec gem using rubygems 0.9.1.
-
-=== Version 0.7.5
-This release adds support for Heckle - Seattle'rb's code mutation tool.
-There are also several bug fixes to the RSpec core and the RSpec on Rails plugin.
-
-* Removed svn:externals on rails versions and plugins
-* Applied [#7345] Adding context_setup and context_teardown, with specs and 100% rcov
-* Applied [#7320] [PATCH] Allow XHR requests in controller specs to render RJS templates
-* Applied [#7319] Migration code uses drop_column when it should use remove_column (patch from Pat Maddox)
-* Added support for Heckle
-* Applied [#7282] dump results even if spec is interrupted (patch from Kouhei Sutou)
-* Applied [#7277] model.should_have(n).errors_on(:attribute) (patch from Wilson Bilkovich)
-* Applied [#7270] RSpec render_partial colliding with simply_helpful (patch from David Goodlad)
-* Added [#7250] stubs should support throwing
-* Added [#7249] stubs should support yielding
-* Fixed [#6760] fatal error when accessing nested finders in rspec
-* Fixed [#7179] script/generate rspec_scaffold generates incorrect helper name
-* Added preliminary support for assert_select (response.should_have)
-* Fixed [#6971] and_yield does not work when the arity is -1
-* Fixed [#6898] Can we separate rspec from the plugins?
-* Added [#7025] should_change should accept a block
-* Applied [#6989] partials with locals (patch from Micah Martin)
-* Applied [#7023] Typo in team.page
-
-=== Version 0.7.4
-
-This release features a complete redesign of the reports generated with --format html.
-As usual there are many bug fixes - mostly related to spec/rails.
-
-* Applied [#7010] Fixes :spacer_template does not work w/ view spec (patch from Shintaro Kakutani)
-* Applied [#6798] ensure two ':' in the first backtrace line for Emacs's 'next-error' command (patch from Kouhei Sutou)
-* Added Much nicer reports to generated website
-* Much nicer reports with --format --html (patch from Luke Redpath)
-* Applied [#6959] Calls to render and redirect in controllers should return true
-* Fixed [#6981] helper method is not available in partial template.
-* Added [#6978] mock should tell you the expected and actual args when receiving the right message with the wrong args
-* Added the possibility to tweak the output of the HtmlFormatter (by overriding extra_failure_content).
-* Fixed [#6936] View specs don't include ApplicationHelper by default
-* Fixed [#6903] Rendering a partial in a view makes the view spec blow up
-* Added callback library from Brian Takita
-* Added [#6925] support controller.should_render :action_name
-* Fixed [#6884] intermittent errors related to method binding
-* Fixed [#6870] rspec on edge rails spec:controller fixture loading fails
-* Using obj.inspect for all messages
-* Improved performance by getting rid of instance_exec (instance_eval is good enough because we never need to pass it args)
-
-=== Version 0.7.3
-
-Almost normal bug fix/new feature release.
-
-A couple of things you need to change in your rails specs:
-# spec_helper.rb is a little different (see http://rspec.rubyforge.org/upgrade.html)
-# use controller.should_render before OR after the action (controller.should_have_rendered is deprecated)
-
-* Applied [#6577] messy mock backtrace when frozen to edge rails (patch from Jay Levitt)
-* Fixed [#6674] rspec_on_rails fails on @session deprecation warning
-* Fixed [#6780] routing() was failing...fix included - works for 1.1.6 and edge (1.2)
-* Fixed [#6835] bad message with arbitrary predicate
-* Added [#6731] Partial templates rendered
-* Fixed [#6713] helper methods not rendered in view tests?
-* Fixed [#6707] cannot run controller / helper tests via rails_spec or spec only works with rake
-* Applied [#6417] lambda {...}.should_change(receiver, :message) (patch from Wilson Bilkovich)
-* Eliminated dependency on ZenTest
-* Fixed [#6650] Reserved characters in the TextMate bundle break svn on Win32
-* Fixed [#6643] script/generate rspec_controller: invalid symbol generation for 'controller_name' for *modularized* controllers
-* The script/rails_spec command has been moved to bin/drbspec in RSpec core (installed by the gem)
-
-=== Version 0.7.2
-
-This release introduces a brand new RSpec bundle for TextMate, plus some small bugfixes.
-
-* Packaged RSpec.tmbundle.tgz as part of the distro
-* Fixed [#6593] Add moving progress bar to HtmlFormatter using Javascript
-* Applied [#6265] should_raise should accept an Exception object
-* Fixed [#6616] Can't run Rails specs with RSpec.tmbundle
-* Fixed [#6411] Can't run Rails specs with ruby
-* Added [#6589] New -l --line option. This is useful for IDE/editor runners/extensions.
-* Fixed [#6615] controller.should_render_rjs should support :partial => 'path/to/template'
-
-=== Version 0.7.1
-
-Bug fixes and a couple o' new features.
-
-* Fixed [#6575] Parse error in aliasing the partial mock original method (patch by Brian Takita)
-* Fixed [#6277] debris left by stubbing (trunk) [submitted by dastels] (fixed by fix to [#6575])
-* Fixed [#6575] Parse error in aliasing the partial mock original method
-* Fixed [#6555] should_have_tag does not match documentation
-* Fixed [#6567] SyntaxError should not stop entire run
-* Fixed [#6558] integrated views look for template even when redirected
-* Fixed [#6547] response.should be_redirect broken in 0.7.0
-* Applied [#6471] Easy way to spec routes
-* Applied [#6587] Rspec on Rails displays "Spec::Rails::ContextFactory" as context name
-* Applied [#6514] Document has trivial typos.
-* Added [#6560] controller.session should be available before the action
-* Added support for should_have_rjs :visual_effect
-* Different printing and colours for unmet expectations (red) and other exceptions (magenta)
-* Simplified method_missing on mock_methods to make it less invasive on partial mocks. 
-
-=== Version 0.7.0
-
-This is the "Grow up and eat your own dog food release". RSpec is now used on itself and
-we're no longer using Test::Unit to test it. Although, we are still extending Test::Unit
-for the rails plugin (indirectly - through ZenTest)
-
-IMPORTANT NOTE: THIS RELEASE IS NOT 100% BACKWARDS COMPATIBLE TO 0.6.x
-
-There are a few changes that will require that you change your existing specs.
-
-RSpec now handles equality exactly like ruby does:
-
-# actual.should_equal(expected) will pass if actual.equal?(expected) returns true
-# actual.should eql(expected) will pass if actual.eql?(expected) returns true
-# actual.should == expected will pass if actual == expected) returns true
-
-At the high level, eql? implies equivalence, while equal? implies object identity. For more
-information on how ruby deals w/ equality, you should do this:
-
-ri equal?
-
-or look at this:
-
-http://www.ruby-doc.org/core/classes/Object.html#M001057
-
-Also, we left in should_be as a synonym for should_equal, so the only specs that should break are the
-ones using should_equal (which used to use <code>==</code> instead of <code>.equal?</code>).
-
-Lastly, should_be used to handle true and false differently from any other values. We've removed
-this special handling, so now actual.should_be true will fail for any value other than true (it
-used to pass for any non-nil, non-false value), and actual.should_be false will fail for any
-value other than false (it used to pass for nil or false).
-
-Here's what you'll need to do to update your specs:
-# search for "should_equal" and replace with "should_eql"
-# run specs
-
-If any specs still fail, they are probably related to should be_true or should_be_false using
-non-boolean values. Those you'll just have to inspect manually and adjust appropriately (sorry!).
-
---------------------------------------------------
-Specifying multiple return values in mocks now works like this:
-
-mock.should_receive(:message).and_return(1,2,3)
-
-It used to work like this:
-
-mock.should_receive(:message).and_return([1,2,3])
-
-but we decided that was counter intuitive and otherwise lame.
-
-Here's what you'll need to do to update your specs:
-# search for "and_return(["
-# get rid of the "[" and "]"
-
---------------------------------------------------
-RSpec on Rails now supports the following (thanks to ZenTest upon which it is built):
-
-# Separate specs for models, views, controllers and helpers
-# Controller specs are completely decoupled from the views by default (though you can tell them to couple themselves if you prefer)
-# View specs are completely decoupled from app-specific controllers
-
-See http://rspec.rubyforge.org/documentation/rails/index.html for more information
---------------------------------------------------
-As usual, there are also other new features and bug fixes:
-
-* Added lots of documentation on mocks/stubs and the rails plugin.
-* Added support for assigns[key] syntax for controller specs (to align w/ pre-existing syntax for view specs)
-* Added support for controller.should_redirect_to
-* RSpec on Rails automatically checks whether it's compatible with the installed RSpec
-* Applied [#6393] rspec_on_rails uses deprecated '@response' instead of the accessor
-* RSpec now has 100% spec coverage(!)
-* Added support for stubbing and partial mocking
-* Progress (....F..F.) is now coloured. Tweaked patch from KAKUTANI Shintaro.
-* Backtrace now excludes the rcov runner (/usr/local/bin/rcov)
-* Fixed [#5539] predicates do not work w/ rails
-* Added [#6091] support for Regexp matching messages sent to should_raise
-* Added [#6333] support for Regexp matching in mock arguments
-* Applied [#6283] refactoring of diff support to allow selectable formats and custom differs
-* Fixed [#5564] "ruby spec_file.rb" doesn't work the same way as "spec spec_file.rb"
-* Fixed [#6056] Multiple output of failing-spec notice
-* Fixed [#6233] Colours in specdoc
-* Applied [#6207] Allows --diff option to diff target and expected's #inspect output (Patch by Lachie Cox)
-* Fixed [#6203] Failure messages are misleading - consider using inspect.
-* Added [#6334] subject.should_have_xyz will try to call subject.has_xyz? - use this for hash.should_have_key(key)
-* Fixed [#6017] Rake task should ignore empty or non-existent spec-dirs
-
-=== Version 0.6.4
-
-In addition to a number of bug fixes and patches, this release begins to formalize the support for
-RSpec on Rails.
-
-* Added Christopher Petrilli's TextMate bundle to vendor/textmate/RSpec.tmbundle
-* Fixed [#5909], once again supporting multi_word_predicates
-* Applied [#5873] - response.should_have_rjs (initial patch from Jake Howerton, based on ARTS by Kevin Clark)
-* Added generation of view specs for rspec_on_rails
-* Applied [#5815] active_record_subclass.should_have(3).records
-* Added support in "rake stats" for view specs (in spec/views)
-* Applied [#5801] QuickRef.pdf should say RSpec, not rSpec
-* Applied [#5728] rails_spec_runner fails on Windows (Patch from Lindsay Evans).
-* Applied [#5708] RSpec Rails plugin rspec_controller generator makes specs that do not parse.
-* Cleaned up RSpec on Rails so it doesn't pollute as much during bootstrapping.
-* Added support for response.should_have_tag and response.should_not_have_tag (works just like assert_tag in rails)
-* Added new -c, --colour, --color option for colourful (red/green) output. Inspired from Pat Eyler's Redgreen gem.
-* Added examples for Watir and Selenium under the gem's vendor directory.
-* Renamed rails_spec_runner to rails_spec_server (as referred to in the docs)
-* Added support for trying a plural for arbitrary predicates.  E.g. Album.should_exist(:name => "Hey Jude") will call Album.exists?(:name => "Hey Jude")
-* Added support for should_have to work with methods taking args returning a collection.  E.g. @dave.should_have(3).albums_i_have_that_this_guy_doesnt(@aslak)
-* Added [#5570] should_not_receive(:msg).with(:specific, "args")
-* Applied [#5065] to support using define_method rather than method_missing to capture expected messages on mocks. Thanks to Eero Saynatkari for the tip that made it work.
-* Restructured directories and Modules in order to separate rspec into three distinct Modules: Spec::Expectations, Spec::Runner and Spec::Mocks. This will allow us to more easily integrate other mock frameworks and/or allow test/unit users to take advantage of the expectation API.
-* Applied [#5620] support any boolean method and arbitrary comparisons (5.should_be < 6) (Patch from Mike Williams)
- 
-=== Version 0.6.3
-
-This release fixes some minor bugs related to RSpec on Rails
-Note that if you upgrade a rails app with this version of the rspec_on_rails plugin
-you should remove your lib/tasks/rspec.rake if it exists.
-
-* Backtraces from drb (and other standard ruby libraries) are now stripped from backtraces.
-* Applied [#5557] Put rspec.rake into the task directory of the RSpec on Rails plugin (Patch from Daniel Siemssen)
-* Applied [#5556] rails_spec_server loads environment.rb twice (Patch from Daniel Siemssen)
-
-=== Version 0.6.2
-This release fixes a couple of regressions with the rake task that were introduced in the previous version (0.6.1)
-
-* Fixed [#5518] ruby -w: warnings in 0.6.1
-* Applied [#5525] fix rake task path to spec tool for gem-installed rspec (patch from Riley Lynch)
-* Fixed a teensey regression with the rake task - introduced in 0.6.1. The spec command is now quoted so it works on windows.
-
-=== Version 0.6.1
-This is the "fix the most annoying bugs release" of RSpec. There are 9 bugfixes this time.
-Things that may break backwards compatibility:
-1) Spec::Rake::SpecTask no longer has the options attribute. Use ruby_opts, spec_opts and rcov_opts instead.
-
-* Fixed [#4891] RCOV task failing on windows
-* Fixed [#4896] Shouldn't modify user's $LOAD_PATH (Tip from Gavin Sinclair)
-* Fixed [#5369] ruby -w: warnings in RSpec 0.5.16 (Tip from Suraj Kurapati)
-* Applied [#5141] ExampleMatcher doesn't escape strings before matching (Patch from Nikolai Weibull).
-* Fixed [#5224] Move 'require diff-lcs' from test_helper.rb to diff_test.rb (Tip from Chris Roos)
-* Applied [#5449] Rake stats for specs (Patch from Nick Sieger)
-* Applied [#5468, #5058] Fix spec runner to correctly run controller specs (Patch from Daniel Siemssen)
-* Applied fixes to rails_spec_server to improve its ability to run several times. (Patch from Daniel Siemssen)
-* Changed RCov::VerifyTask to fail if the coverage is above the threshold. This is to ensure it gets bumped when coverage improves.
-
-=== Version 0.6.0
-This release makes an official commitment to underscore_syntax (with no more support for dot.syntax)
-
-* Fixed bug (5292) that caused mock argument matching to fail
-* Converted ALL tests to use underscore syntax
-* Fixed all remaining problems with underscores revealed by converting all the tests to underscores
-* Enhanced sugar to support combinations of methods (i.e. once.and_return) 
-* Simplified helper structure taking advantage of dot/underscore combos (i.e. should.be.an_instance_of, which can be expressed as should be_an_instance_of)
-* Added support for at_most in mocks
-* Added support for should_not_receive(:msg) (will be removing should_receive(:msg).never some time soon)
-* Added support for should_have_exactly(5).items_in_collection
-
-=== Version 0.5.16
-This release improves Rails support and test2spec translation.
-
-* Fixed underscore problems that occurred when RSpec was used in Rails
-* Simplified the Rails support by packaging it as a plugin instead of a generator gem.
-* Fixed [#5063] 'rspec_on_rails' require line in spec_helper.rb
-* Added pre_commit rake task to reduce risk of regressions. Useful for RSpec developers and patchers.
-* Added failure_message to RSpec Rake task
-* test2spec now defines converted helper methods outside of the setup block (bug #5057).
-
-=== Version 0.5.15
-This release removes a prematurely added feature that shouldn't have been added.
-
-* Removed support for differences that was added in 0.5.14. The functionality is not aligned with RSpec's vision.
-
-=== Version 0.5.14
-This release introduces better ways to extend specs, improves some of the core API and
-a experimental support for faster rails specs.
-
-* Added proc methods for specifying differences (increments and decrements). See difference_test.rb
-* Methods can now be defined alongside specs. This obsoletes the need for defining methods in setup. (Patch #5002 from Brian Takita)
-* Sugar (underscores) now works correctly with should be_a_kind_of and should be_an_instance_of
-* Added support for include and inherit in contexts. (Patch #4971 from Brian Takita)
-* Added rails_spec and rails_spec_server for faster specs on rails (still buggy - help needed)
-* Fixed bug that caused should_render to break if given a :symbol (in Rails)
-* Added support for comparing exception message in should_raise and should_not_raise
-
-=== Version 0.5.13
-This release fixes some subtle bugs in the mock API.
-
-* Use fully-qualified class name of Exceptions in failure message. Easier to debug that way.
-* Fixed a bug that caused mocks to yield a one-element array (rather than the element) when one yield arg specified.
-* Mocks not raise AmbiguousReturnError if an explicit return is used at the same time as an expectation block.
-* Blocks passed to yielding mocks can now raise without causing mock verification to fail.
-
-=== Version 0.5.12
-This release adds diff support for failure messages, a HTML formatter plus some other
-minor enhancements.
-
-* Added HTML formatter.
-* Added fail_on_error option to spectask.
-* Added support for diffing, using the diff-lcs Rubygem (#2648).
-* Remove RSpec on Rails files from backtrace (#4694).
-* All of RSpec's own tests run successfully after translation with test2spec.
-* Added --verbose mode for test2spec - useful for debugging when classes fail to translate.
-* Output of various formatters is now flushed - to get more continuous output.
-
-=== Version 0.5.11
-This release makes test2spec usable with Rails (with some manual steps). 
-See http://rspec.rubyforge.org/tools/rails.html for more details
-
-* test2spec now correctly translates bodies of helper methods (non- test_*, setup and teardown ones).
-* Added more documentation about how to get test2spec to work with Rails.
-
-=== Version 0.5.10
-This version features a second rewrite of test2spec - hopefully better than the previous one.
-
-* Improved test2spec's internals. It now transforms the syntax tree before writing out the code.
-
-=== Version 0.5.9
-This release improves test2spec by allowing more control over the output
-
-* Added --template option to test2spec, which allows for custom output driven by ERB
-* Added --quiet option to test2spec
-* Removed unnecessary dependency on RubyToC
-
-=== Version 0.5.8
-This release features a new Test::Unit to RSpec translation tool.
-Also note that the RubyGem of the previous release (0.5.7) was corrupt.
-We're close to being able to translate all of RSpec's own Test::Unit
-tests and have them run successfully!
-
-* Updated test2spec documentation.
-* Replaced old test2rspec with a new test2spec, which is based on ParseTree and RubyInline.
-
-=== Version 0.5.7
-This release changes examples and documentation to recommend underscores rather than dots,
-and addresses some bugfixes and changes to the spec commandline.
-
-* spec DIR now works correctly, recursing down and slurping all *.rb files
-* All documentation and examples are now using '_' instead of '.'
-* Custom external formatters can now be specified via --require and --format.
-
-=== Version 0.5.6
-This release fixes a bug in the Rails controller generator
-
-* The controller generator did not write correct source code (missing 'do'). Fixed.
-
-=== Version 0.5.5
-This release adds initial support for Ruby on Rails in the rspec_generator gem.
-
-* [Rails] Reorganised Lachie's original code to be a generator packaged as a gem rather than a plugin.
-* [Rails] Imported code from http://lachie.info/svn/projects/rails_plugins/rspec_on_rails (Written by Lachie Cox)
-* Remove stack trace lines from TextMate's Ruby bundle
-* Better error message from spectask when no spec files are found.
-
-=== Version 0.5.4
-The "the tutorial is ahead of the gem" release
-
-* Support for running a single spec with --spec
-* Exitcode is now 1 unless all specs pass, in which case it's 0.
-* -v, --version now both mean the same thing
-* For what was verbose output (-v), use --format specdoc or -f s
-* --format rdoc always runs in dry-run mode
-* Removed --doc and added --format and --dry-run
-* Refactored towards more pluggable formatters
-* Use webgen's execute tag when generating website (more accurate)
-* Fixed incorrect quoting of spec_opts in SpecTask
-* Added patch to enable underscored shoulds like 1.should_equal(1) - patch from Rich Kilmer
-* Removed most inherited instance method from Mock, making more methods mockable.
-* Made the RCovVerify task part of the standard toolset.
-* Documented Rake task and how to use it with Rcov
-* Implemented <ruby></ruby> tags for website (hooking into ERB, RedCloth and syntax)
-* RSpec Rake task now takes spec_opts and out params so it can be used for doc generation
-* RCov integration for RSpec Rake task (#4058)
-* Group all results instead of printing them several times (#4057)
-* Mocks can now yield
-* Various improvements to error reporting (including #4191)
-* backtrace excludes rspec code - use -b to include it
-* split examples into examples (passing) and failing_examples
-
-=== Version 0.5.3
-The "hurry up, CoR is in two days" release.
-
-* Don't run rcov by default
-* Make separate task for running tests with RCov
-* Added Rake task to fail build if coverage drops below a certain threshold
-* Even more failure output cleanup (simplification)
-* Added duck_type constraint for mocks
-
-=== Version 0.5.2
-This release has minor improvements to the commandline and fixes some gem warnings
-
-* Readded README to avoid RDoc warnings
-* Added --version switch to commandline
-* More changes to the mock API
-
-=== Version 0.5.1
-This release is the first release of RSpec with a new website. It will look better soon.
-
-* Added initial documentation for API
-* Added website based on webgen
-* Modified test task to use rcov
-* Deleted unused code (thanks, rcov!)
-* Various changes to the mock API,
-* Various improvements to failure reporting
-
-=== Version 0.5.0
-This release introduces a new API and obsolesces previous versions.
-
-* Moved source code to separate subfolders
-* Added new DSL runner based on instance_exec
-* Added spike for testdox/rdoc generation
-* merge Astels' and Chelimsky's work on ShouldHelper
-* this would be 0.5.0 if I updated the documentation
-* it breaks all of your existing specifications.  We're not sorry.
-
-=== Version 0.3.2
-
-The "srbaker is an idiot" release.
-
-* also forgot to update the path to the actual Subversion repository
-* this should be it
-
-=== Version 0.3.1
-
-This is just 0.3.0, but with the TUTORIAL added to the documentation list.
-
-* forgot to include TUTORIAL in the documentation
-
-=== Version 0.3.0
-
-It's been a while since last release, lots of new stuff is available.  For instance:
-
-* improvements to the runners
-* addition of should_raise expectation (thanks to Brian Takita)
-* some documentation improvements
-* RSpec usable as a DSL
-
-=== Version 0.2.0
-
-This release provides a tutorial for new users wishing to get started with
-RSpec, and many improvements.
-
-* improved reporting in the spec runner output
-* update the examples to the new mock api
-* added TUTORIAL, a getting started document for new users of RSpec
-
-=== Version 0.1.7
-
-This release improves installation and documentation, mock integration and error reporting.
-
-* Comparison errors now print the class name too.
-* Mocks now take an optional +options+ parameter to specify behaviour.
-* Removed __expects in favour of should_receive
-* Added line number reporting in mock error messages for unreceived message expectations.
-* Added should_match and should_not_match.
-* Added a +mock+ method to Spec::Context which will create mocks that autoverify (no need to call __verify).
-* Mocks now require names in the constructor to ensure sensible error messages.
-* Made 'spec' executable and updated usage instructions in README accordingly.
-* Made more parts of the Spec::Context API private to avoid accidental usage.
-* Added more RDoc to Spec::Context.
-
-=== Version 0.1.6
-
-More should methods.
-
-* Added should_match and should_not_match.
-
-=== Version 0.1.5
-
-Included examples and tests in gem.
-
-=== Version 0.1.4
-
-More tests on block based Mock expectations.
-
-=== Version 0.1.3
-
-Improved mocking:
-
-* block based Mock expectations.
-
-=== Version 0.1.2
-
-This release adds some improvements to the mock API and minor syntax improvements
-
-* Added Mock.should_expect for a more consistent DSL.
-* Added MockExpectation.and_returns for a better DSL.
-* Made Mock behave as a null object after a call to Mock.ignore_missing
-* Internal syntax improvements.
-* Improved exception trace by adding exception class name to error message.
-* Renamed some tests for better consistency.
-
-=== Version 0.1.1
-
-This release adds some shoulds and improves error reporting
-
-* Added should be_same_as and should_not be_same_as.
-* Improved error reporting for comparison expectations.
-
-=== Version 0.1.0
-
-This is the first preview release of RSpec, a Behaviour-Driven Development library for Ruby 
-
-* Added Rake script with tasks for gems, rdoc etc.
-* Added an XForge task to make release go easier.
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/License.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/License.txt
deleted file mode 100644
index b98ea76..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/License.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2005-2008 The RSpec Development Team
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/Manifest.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/Manifest.txt
deleted file mode 100644
index 3171e0c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/Manifest.txt
+++ /dev/null
@@ -1,403 +0,0 @@
-History.txt
-License.txt
-Manifest.txt
-README.txt
-Rakefile
-TODO.txt
-bin/autospec
-bin/spec
-examples/pure/autogenerated_docstrings_example.rb
-examples/pure/before_and_after_example.rb
-examples/pure/behave_as_example.rb
-examples/pure/custom_expectation_matchers.rb
-examples/pure/custom_formatter.rb
-examples/pure/dynamic_spec.rb
-examples/pure/file_accessor.rb
-examples/pure/file_accessor_spec.rb
-examples/pure/greeter_spec.rb
-examples/pure/helper_method_example.rb
-examples/pure/io_processor.rb
-examples/pure/io_processor_spec.rb
-examples/pure/legacy_spec.rb
-examples/pure/mocking_example.rb
-examples/pure/multi_threaded_behaviour_runner.rb
-examples/pure/nested_classes_example.rb
-examples/pure/partial_mock_example.rb
-examples/pure/pending_example.rb
-examples/pure/predicate_example.rb
-examples/pure/priority.txt
-examples/pure/shared_example_group_example.rb
-examples/pure/shared_stack_examples.rb
-examples/pure/spec_helper.rb
-examples/pure/stack.rb
-examples/pure/stack_spec.rb
-examples/pure/stack_spec_with_nested_example_groups.rb
-examples/pure/stubbing_example.rb
-examples/pure/yielding_example.rb
-examples/stories/adder.rb
-examples/stories/addition
-examples/stories/addition.rb
-examples/stories/calculator.rb
-examples/stories/game-of-life/.loadpath
-examples/stories/game-of-life/README.txt
-examples/stories/game-of-life/behaviour/everything.rb
-examples/stories/game-of-life/behaviour/examples/examples.rb
-examples/stories/game-of-life/behaviour/examples/game_behaviour.rb
-examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb
-examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story
-examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story
-examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story
-examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story
-examples/stories/game-of-life/behaviour/stories/ICanKillACell.story
-examples/stories/game-of-life/behaviour/stories/TheGridWraps.story
-examples/stories/game-of-life/behaviour/stories/create_a_cell.rb
-examples/stories/game-of-life/behaviour/stories/helper.rb
-examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb
-examples/stories/game-of-life/behaviour/stories/steps.rb
-examples/stories/game-of-life/behaviour/stories/stories.rb
-examples/stories/game-of-life/behaviour/stories/stories.txt
-examples/stories/game-of-life/life.rb
-examples/stories/game-of-life/life/game.rb
-examples/stories/game-of-life/life/grid.rb
-examples/stories/helper.rb
-examples/stories/steps/addition_steps.rb
-failing_examples/README.txt
-failing_examples/diffing_spec.rb
-failing_examples/failing_autogenerated_docstrings_example.rb
-failing_examples/failure_in_setup.rb
-failing_examples/failure_in_teardown.rb
-failing_examples/mocking_example.rb
-failing_examples/mocking_with_flexmock.rb
-failing_examples/mocking_with_mocha.rb
-failing_examples/mocking_with_rr.rb
-failing_examples/partial_mock_example.rb
-failing_examples/predicate_example.rb
-failing_examples/raising_example.rb
-failing_examples/spec_helper.rb
-failing_examples/syntax_error_example.rb
-failing_examples/team_spec.rb
-failing_examples/timeout_behaviour.rb
-init.rb
-lib/autotest/discover.rb
-lib/autotest/rspec.rb
-lib/spec.rb
-lib/spec/adapters.rb
-lib/spec/adapters/ruby_engine.rb
-lib/spec/adapters/ruby_engine/mri.rb
-lib/spec/adapters/ruby_engine/rubinius.rb
-lib/spec/example.rb
-lib/spec/example/before_and_after_hooks.rb
-lib/spec/example/configuration.rb
-lib/spec/example/errors.rb
-lib/spec/example/example_group.rb
-lib/spec/example/example_group_factory.rb
-lib/spec/example/example_group_methods.rb
-lib/spec/example/example_matcher.rb
-lib/spec/example/example_methods.rb
-lib/spec/example/module_reopening_fix.rb
-lib/spec/example/pending.rb
-lib/spec/example/shared_example_group.rb
-lib/spec/expectations.rb
-lib/spec/expectations/differs/default.rb
-lib/spec/expectations/errors.rb
-lib/spec/expectations/extensions.rb
-lib/spec/expectations/extensions/object.rb
-lib/spec/expectations/extensions/string_and_symbol.rb
-lib/spec/expectations/handler.rb
-lib/spec/extensions.rb
-lib/spec/extensions/class.rb
-lib/spec/extensions/main.rb
-lib/spec/extensions/metaclass.rb
-lib/spec/extensions/object.rb
-lib/spec/interop/test.rb
-lib/spec/interop/test/unit/autorunner.rb
-lib/spec/interop/test/unit/testcase.rb
-lib/spec/interop/test/unit/testresult.rb
-lib/spec/interop/test/unit/testsuite_adapter.rb
-lib/spec/interop/test/unit/ui/console/testrunner.rb
-lib/spec/matchers.rb
-lib/spec/matchers/be.rb
-lib/spec/matchers/be_close.rb
-lib/spec/matchers/change.rb
-lib/spec/matchers/eql.rb
-lib/spec/matchers/equal.rb
-lib/spec/matchers/exist.rb
-lib/spec/matchers/has.rb
-lib/spec/matchers/have.rb
-lib/spec/matchers/include.rb
-lib/spec/matchers/match.rb
-lib/spec/matchers/operator_matcher.rb
-lib/spec/matchers/raise_error.rb
-lib/spec/matchers/respond_to.rb
-lib/spec/matchers/satisfy.rb
-lib/spec/matchers/simple_matcher.rb
-lib/spec/matchers/throw_symbol.rb
-lib/spec/mocks.rb
-lib/spec/mocks/argument_constraints.rb
-lib/spec/mocks/argument_expectation.rb
-lib/spec/mocks/error_generator.rb
-lib/spec/mocks/errors.rb
-lib/spec/mocks/extensions.rb
-lib/spec/mocks/extensions/object.rb
-lib/spec/mocks/framework.rb
-lib/spec/mocks/message_expectation.rb
-lib/spec/mocks/methods.rb
-lib/spec/mocks/mock.rb
-lib/spec/mocks/order_group.rb
-lib/spec/mocks/proxy.rb
-lib/spec/mocks/space.rb
-lib/spec/mocks/spec_methods.rb
-lib/spec/rake/spectask.rb
-lib/spec/rake/verify_rcov.rb
-lib/spec/runner.rb
-lib/spec/runner/backtrace_tweaker.rb
-lib/spec/runner/class_and_arguments_parser.rb
-lib/spec/runner/command_line.rb
-lib/spec/runner/drb_command_line.rb
-lib/spec/runner/example_group_runner.rb
-lib/spec/runner/formatter/base_formatter.rb
-lib/spec/runner/formatter/base_text_formatter.rb
-lib/spec/runner/formatter/failing_example_groups_formatter.rb
-lib/spec/runner/formatter/failing_examples_formatter.rb
-lib/spec/runner/formatter/html_formatter.rb
-lib/spec/runner/formatter/nested_text_formatter.rb
-lib/spec/runner/formatter/profile_formatter.rb
-lib/spec/runner/formatter/progress_bar_formatter.rb
-lib/spec/runner/formatter/snippet_extractor.rb
-lib/spec/runner/formatter/specdoc_formatter.rb
-lib/spec/runner/formatter/story/html_formatter.rb
-lib/spec/runner/formatter/story/plain_text_formatter.rb
-lib/spec/runner/formatter/story/progress_bar_formatter.rb
-lib/spec/runner/formatter/text_mate_formatter.rb
-lib/spec/runner/heckle_runner.rb
-lib/spec/runner/heckle_runner_unsupported.rb
-lib/spec/runner/option_parser.rb
-lib/spec/runner/options.rb
-lib/spec/runner/reporter.rb
-lib/spec/runner/spec_parser.rb
-lib/spec/story.rb
-lib/spec/story/extensions.rb
-lib/spec/story/extensions/main.rb
-lib/spec/story/extensions/regexp.rb
-lib/spec/story/extensions/string.rb
-lib/spec/story/given_scenario.rb
-lib/spec/story/runner.rb
-lib/spec/story/runner/plain_text_story_runner.rb
-lib/spec/story/runner/scenario_collector.rb
-lib/spec/story/runner/scenario_runner.rb
-lib/spec/story/runner/story_mediator.rb
-lib/spec/story/runner/story_parser.rb
-lib/spec/story/runner/story_runner.rb
-lib/spec/story/scenario.rb
-lib/spec/story/step.rb
-lib/spec/story/step_group.rb
-lib/spec/story/step_mother.rb
-lib/spec/story/story.rb
-lib/spec/story/world.rb
-lib/spec/version.rb
-plugins/mock_frameworks/flexmock.rb
-plugins/mock_frameworks/mocha.rb
-plugins/mock_frameworks/rr.rb
-plugins/mock_frameworks/rspec.rb
-rake_tasks/examples.rake
-rake_tasks/examples_with_rcov.rake
-rake_tasks/failing_examples_with_html.rake
-rake_tasks/verify_rcov.rake
-rspec.gemspec
-spec/README.jruby
-spec/autotest/autotest_helper.rb
-spec/autotest/autotest_matchers.rb
-spec/autotest/discover_spec.rb
-spec/autotest/rspec_spec.rb
-spec/rspec_suite.rb
-spec/ruby_forker.rb
-spec/spec.opts
-spec/spec/adapters/ruby_engine_spec.rb
-spec/spec/example/configuration_spec.rb
-spec/spec/example/example_group_class_definition_spec.rb
-spec/spec/example/example_group_factory_spec.rb
-spec/spec/example/example_group_methods_spec.rb
-spec/spec/example/example_group_spec.rb
-spec/spec/example/example_matcher_spec.rb
-spec/spec/example/example_methods_spec.rb
-spec/spec/example/example_runner_spec.rb
-spec/spec/example/nested_example_group_spec.rb
-spec/spec/example/pending_module_spec.rb
-spec/spec/example/predicate_matcher_spec.rb
-spec/spec/example/shared_example_group_spec.rb
-spec/spec/example/subclassing_example_group_spec.rb
-spec/spec/expectations/differs/default_spec.rb
-spec/spec/expectations/extensions/object_spec.rb
-spec/spec/expectations/fail_with_spec.rb
-spec/spec/extensions/main_spec.rb
-spec/spec/interop/test/unit/resources/spec_that_fails.rb
-spec/spec/interop/test/unit/resources/spec_that_passes.rb
-spec/spec/interop/test/unit/resources/spec_with_errors.rb
-spec/spec/interop/test/unit/resources/spec_with_options_hash.rb
-spec/spec/interop/test/unit/resources/test_case_that_fails.rb
-spec/spec/interop/test/unit/resources/test_case_that_passes.rb
-spec/spec/interop/test/unit/resources/test_case_with_errors.rb
-spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
-spec/spec/interop/test/unit/spec_spec.rb
-spec/spec/interop/test/unit/test_unit_spec_helper.rb
-spec/spec/interop/test/unit/testcase_spec.rb
-spec/spec/interop/test/unit/testsuite_adapter_spec.rb
-spec/spec/matchers/be_close_spec.rb
-spec/spec/matchers/be_spec.rb
-spec/spec/matchers/change_spec.rb
-spec/spec/matchers/description_generation_spec.rb
-spec/spec/matchers/eql_spec.rb
-spec/spec/matchers/equal_spec.rb
-spec/spec/matchers/exist_spec.rb
-spec/spec/matchers/handler_spec.rb
-spec/spec/matchers/has_spec.rb
-spec/spec/matchers/have_spec.rb
-spec/spec/matchers/include_spec.rb
-spec/spec/matchers/match_spec.rb
-spec/spec/matchers/matcher_methods_spec.rb
-spec/spec/matchers/mock_constraint_matchers_spec.rb
-spec/spec/matchers/operator_matcher_spec.rb
-spec/spec/matchers/raise_error_spec.rb
-spec/spec/matchers/respond_to_spec.rb
-spec/spec/matchers/satisfy_spec.rb
-spec/spec/matchers/simple_matcher_spec.rb
-spec/spec/matchers/throw_symbol_spec.rb
-spec/spec/mocks/any_number_of_times_spec.rb
-spec/spec/mocks/argument_expectation_spec.rb
-spec/spec/mocks/at_least_spec.rb
-spec/spec/mocks/at_most_spec.rb
-spec/spec/mocks/bug_report_10260_spec.rb
-spec/spec/mocks/bug_report_10263_spec.rb
-spec/spec/mocks/bug_report_11545_spec.rb
-spec/spec/mocks/bug_report_15719_spec.rb
-spec/spec/mocks/bug_report_496.rb
-spec/spec/mocks/bug_report_7611_spec.rb
-spec/spec/mocks/bug_report_7805_spec.rb
-spec/spec/mocks/bug_report_8165_spec.rb
-spec/spec/mocks/bug_report_8302_spec.rb
-spec/spec/mocks/failing_mock_argument_constraints_spec.rb
-spec/spec/mocks/hash_including_matcher_spec.rb
-spec/spec/mocks/mock_ordering_spec.rb
-spec/spec/mocks/mock_space_spec.rb
-spec/spec/mocks/mock_spec.rb
-spec/spec/mocks/multiple_return_value_spec.rb
-spec/spec/mocks/nil_expectation_warning_spec.rb
-spec/spec/mocks/null_object_mock_spec.rb
-spec/spec/mocks/once_counts_spec.rb
-spec/spec/mocks/options_hash_spec.rb
-spec/spec/mocks/partial_mock_spec.rb
-spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
-spec/spec/mocks/passing_mock_argument_constraints_spec.rb
-spec/spec/mocks/precise_counts_spec.rb
-spec/spec/mocks/record_messages_spec.rb
-spec/spec/mocks/stub_spec.rb
-spec/spec/mocks/twice_counts_spec.rb
-spec/spec/package/bin_spec_spec.rb
-spec/spec/runner/class_and_argument_parser_spec.rb
-spec/spec/runner/command_line_spec.rb
-spec/spec/runner/drb_command_line_spec.rb
-spec/spec/runner/empty_file.txt
-spec/spec/runner/examples.txt
-spec/spec/runner/failed.txt
-spec/spec/runner/formatter/base_formatter_spec.rb
-spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
-spec/spec/runner/formatter/failing_examples_formatter_spec.rb
-spec/spec/runner/formatter/html_formatted-1.8.4.html
-spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html
-spec/spec/runner/formatter/html_formatted-1.8.5.html
-spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
-spec/spec/runner/formatter/html_formatted-1.8.6.html
-spec/spec/runner/formatter/html_formatter_spec.rb
-spec/spec/runner/formatter/nested_text_formatter_spec.rb
-spec/spec/runner/formatter/profile_formatter_spec.rb
-spec/spec/runner/formatter/progress_bar_formatter_spec.rb
-spec/spec/runner/formatter/snippet_extractor_spec.rb
-spec/spec/runner/formatter/spec_mate_formatter_spec.rb
-spec/spec/runner/formatter/specdoc_formatter_spec.rb
-spec/spec/runner/formatter/story/html_formatter_spec.rb
-spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
-spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb
-spec/spec/runner/formatter/text_mate_formatted-1.8.4.html
-spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
-spec/spec/runner/heckle_runner_spec.rb
-spec/spec/runner/heckler_spec.rb
-spec/spec/runner/noisy_backtrace_tweaker_spec.rb
-spec/spec/runner/option_parser_spec.rb
-spec/spec/runner/options_spec.rb
-spec/spec/runner/output_one_time_fixture.rb
-spec/spec/runner/output_one_time_fixture_runner.rb
-spec/spec/runner/output_one_time_spec.rb
-spec/spec/runner/quiet_backtrace_tweaker_spec.rb
-spec/spec/runner/reporter_spec.rb
-spec/spec/runner/resources/a_bar.rb
-spec/spec/runner/resources/a_foo.rb
-spec/spec/runner/resources/a_spec.rb
-spec/spec/runner/spec.opts
-spec/spec/runner/spec_drb.opts
-spec/spec/runner/spec_parser/spec_parser_fixture.rb
-spec/spec/runner/spec_parser_spec.rb
-spec/spec/runner/spec_spaced.opts
-spec/spec/runner_spec.rb
-spec/spec/spec_classes.rb
-spec/spec/story/builders.rb
-spec/spec/story/extensions/main_spec.rb
-spec/spec/story/extensions_spec.rb
-spec/spec/story/given_scenario_spec.rb
-spec/spec/story/runner/plain_text_story_runner_spec.rb
-spec/spec/story/runner/scenario_collector_spec.rb
-spec/spec/story/runner/scenario_runner_spec.rb
-spec/spec/story/runner/story_mediator_spec.rb
-spec/spec/story/runner/story_parser_spec.rb
-spec/spec/story/runner/story_runner_spec.rb
-spec/spec/story/runner_spec.rb
-spec/spec/story/scenario_spec.rb
-spec/spec/story/step_group_spec.rb
-spec/spec/story/step_mother_spec.rb
-spec/spec/story/step_spec.rb
-spec/spec/story/story_helper.rb
-spec/spec/story/story_spec.rb
-spec/spec/story/world_spec.rb
-spec/spec_helper.rb
-stories/all.rb
-stories/configuration/before_blocks.story
-stories/configuration/stories.rb
-stories/example_groups/autogenerated_docstrings
-stories/example_groups/example_group_with_should_methods
-stories/example_groups/nested_groups
-stories/example_groups/output
-stories/example_groups/stories.rb
-stories/helper.rb
-stories/interop/examples_and_tests_together
-stories/interop/stories.rb
-stories/interop/test_case_with_should_methods
-stories/mock_framework_integration/stories.rb
-stories/mock_framework_integration/use_flexmock.story
-stories/pending_stories/README
-stories/resources/helpers/cmdline.rb
-stories/resources/helpers/story_helper.rb
-stories/resources/matchers/smart_match.rb
-stories/resources/spec/before_blocks_example.rb
-stories/resources/spec/example_group_with_should_methods.rb
-stories/resources/spec/simple_spec.rb
-stories/resources/spec/spec_with_flexmock.rb
-stories/resources/steps/running_rspec.rb
-stories/resources/stories/failing_story.rb
-stories/resources/test/spec_and_test_together.rb
-stories/resources/test/test_case_with_should_methods.rb
-stories/stories/multiline_steps.story
-stories/stories/steps/multiline_steps.rb
-stories/stories/stories.rb
-story_server/prototype/javascripts/builder.js
-story_server/prototype/javascripts/controls.js
-story_server/prototype/javascripts/dragdrop.js
-story_server/prototype/javascripts/effects.js
-story_server/prototype/javascripts/prototype.js
-story_server/prototype/javascripts/rspec.js
-story_server/prototype/javascripts/scriptaculous.js
-story_server/prototype/javascripts/slider.js
-story_server/prototype/javascripts/sound.js
-story_server/prototype/javascripts/unittest.js
-story_server/prototype/lib/server.rb
-story_server/prototype/stories.html
-story_server/prototype/stylesheets/rspec.css
-story_server/prototype/stylesheets/test.css
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/README.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/README.txt
deleted file mode 100644
index e959515..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/README.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-= RSpec
-
-* http://rspec.info
-* http://rspec.info/rdoc/
-* http://rubyforge.org/projects/rspec
-* http://github.com/dchelimsky/rspec/wikis
-* mailto:rspec-devel at rubyforge.org
-
-== DESCRIPTION:
-
-RSpec is a Behaviour Driven Development framework with tools to express User
-Stories with Executable Scenarios and Executable Examples at the code level.
-
-== FEATURES:
-
-* Spec::Story provides a framework for expressing User Stories and Scenarios
-* Spec::Example provides a framework for expressing Isolated Examples
-* Spec::Matchers provides Expression Matchers for use with Spec::Expectations and Spec::Mocks.
-
-== SYNOPSIS:
-
-Spec::Expectations supports setting expectations on your objects so you
-can do things like:
-
-  result.should equal(expected_result)
-  
-Spec::Mocks supports creating Mock Objects, Stubs, and adding Mock/Stub
-behaviour to your existing objects.
-
-== INSTALL:
-
-  [sudo] gem install rspec
-
- or
-
-  git clone git://github.com/dchelimsky/rspec.git
-  cd rspec
-  rake gem
-  rake install_gem
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/Rakefile b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/Rakefile
deleted file mode 100644
index 429072a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/Rakefile
+++ /dev/null
@@ -1,89 +0,0 @@
-# -*- ruby -*-
-
-$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
-require 'rubygems'
-require 'hoe'
-require 'spec/version'
-require 'spec/rake/spectask'
-
-class Hoe
-  def extra_deps
-    @extra_deps.reject! { |x| Array(x).first == 'hoe' }
-    @extra_deps
-  end
-end
-
-Hoe.new('rspec', Spec::VERSION::STRING) do |p|
-  p.summary = Spec::VERSION::SUMMARY
-  p.url = 'http://rspec.info/'
-  p.description = "Behaviour Driven Development for Ruby."
-  p.rubyforge_name = 'rspec'
-  p.developer('RSpec Development Team', 'rspec-devel at rubyforge.org')
-  p.remote_rdoc_dir = "rspec/#{Spec::VERSION::STRING}"
-end
-
-['audit','test','test_deps','default','post_blog'].each do |task|
-  Rake.application.instance_variable_get('@tasks').delete(task)
-end
-
-task :verify_rcov => [:spec, :stories]
-task :default => :verify_rcov
-
-# # Some of the tasks are in separate files since they are also part of the website documentation
-load File.dirname(__FILE__) + '/rake_tasks/examples.rake'
-load File.dirname(__FILE__) + '/rake_tasks/examples_with_rcov.rake'
-load File.dirname(__FILE__) + '/rake_tasks/failing_examples_with_html.rake'
-load File.dirname(__FILE__) + '/rake_tasks/verify_rcov.rake'
-
-desc "Run all specs"
-Spec::Rake::SpecTask.new do |t|
-  t.spec_files = FileList['spec/**/*_spec.rb']
-  t.spec_opts = ['--options', 'spec/spec.opts']
-  unless ENV['NO_RCOV']
-    t.rcov = true
-    t.rcov_dir = 'coverage'
-    t.rcov_opts = ['--text-report', '--exclude', "lib/spec.rb,lib/spec/runner.rb,spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest,#{ENV['GEM_HOME']}"]
-  end
-end
-
-desc "Run all stories"
-task :stories do
-  ruby "stories/all.rb --colour --format plain"
-end
-
-desc "Run failing examples (see failure output)"
-Spec::Rake::SpecTask.new('failing_examples') do |t|
-  t.spec_files = FileList['failing_examples/**/*_spec.rb']
-  t.spec_opts = ['--options', 'spec/spec.opts']
-end
-
-def egrep(pattern)
-  Dir['**/*.rb'].each do |fn|
-    count = 0
-    open(fn) do |f|
-      while line = f.gets
-        count += 1
-        if line =~ pattern
-          puts "#{fn}:#{count}:#{line}"
-        end
-      end
-    end
-  end
-end
-
-desc "Look for TODO and FIXME tags in the code"
-task :todo do
-  egrep /(FIXME|TODO|TBD)/
-end
-
-desc "verify_committed, verify_rcov, post_news, release"
-task :complete_release => [:verify_committed, :verify_rcov, :post_news, :release]
-
-desc "Verifies that there is no uncommitted code"
-task :verify_committed do
-  IO.popen('git status') do |io|
-    io.each_line do |line|
-      raise "\n!!! Do a git commit first !!!\n\n" if line =~ /^#\s*modified:/
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/TODO.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/TODO.txt
deleted file mode 100644
index ae5a230..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/TODO.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-== Future
-
-* do SOMETHING with the website
-* extract spec/story to rspec-stories (new gem)
-* remove the ruby engine adapter unless Rubinius team plans to use it
-* rename top level namespace to Rspec and commands to 'rspec' and 'autorspec'
-  * continue to support Spec 'spec' and 'autospec' as aliases for a reasonable time
-* separate the underlying framework from the DSL
-  * be able to do everything with classes and methods
-* tweak raise_error rdoc to show only one arg
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/bin/autospec b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/bin/autospec
deleted file mode 100755
index 82a314f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/bin/autospec
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env ruby
-ENV['RSPEC'] = 'true'     # allows autotest to discover rspec
-ENV['AUTOTEST'] = 'true'  # allows autotest to run w/ color on linux
-system (RUBY_PLATFORM =~ /mswin|mingw/ ? 'autotest.bat' : 'autotest'), *ARGV
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/bin/spec b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/bin/spec
deleted file mode 100755
index a4b6e47..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/bin/spec
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env ruby
-$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
-require 'spec'
-exit ::Spec::Runner::CommandLine.run
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/autogenerated_docstrings_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/autogenerated_docstrings_example.rb
deleted file mode 100644
index a4004f5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/autogenerated_docstrings_example.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-# Run spec w/ -fs to see the output of this file
-
-describe "Examples with no descriptions" do
-  
-  # description is auto-generated as "should equal(5)" based on the last #should
-  specify do
-    3.should equal(3)
-    5.should equal(5)
-  end
-  
-  specify { 3.should be < 5 }
-  
-  specify { ["a"].should include("a") }
-  
-  specify { [1,2,3].should respond_to(:size) }
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/before_and_after_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/before_and_after_example.rb
deleted file mode 100644
index 7db6274..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/before_and_after_example.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-$global = 0
-
-describe "State created in before(:all)" do
-  before :all do
-    @sideeffect = 1
-    $global +=1
-  end
-
-  before :each do
-    @isolated = 1
-  end
-  
-  it "should be accessible from example" do
-    @sideeffect.should == 1
-    $global.should == 1
-    @isolated.should == 1
-
-    @sideeffect += 1
-    @isolated += 1
-  end
-
-  it "should not have sideffects" do
-    @sideeffect.should == 1
-    $global.should == 2
-    @isolated.should == 1
-
-    @sideeffect += 1
-    @isolated += 1
-  end
-
-  after :each do
-    $global += 1
-  end
-  
-  after :all do
-    $global.should == 3
-    $global = 0
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/behave_as_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/behave_as_example.rb
deleted file mode 100755
index e95d146..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/behave_as_example.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-def behave_as_electric_musician
-  respond_to(:read_notes, :turn_down_amp)
-end
-
-def behave_as_musician
-  respond_to(:read_notes)
-end
-
-module BehaveAsExample
-  
-  class BluesGuitarist
-    def read_notes; end
-    def turn_down_amp; end
-  end
-  
-  class RockGuitarist
-    def read_notes; end
-    def turn_down_amp; end
-  end
-  
-  class ClassicGuitarist
-    def read_notes; end
-  end
-  
-  describe BluesGuitarist do
-    it "should behave as guitarist" do
-      BluesGuitarist.new.should behave_as_electric_musician
-    end
-  end
-
-  describe RockGuitarist do
-    it "should behave as guitarist" do
-      RockGuitarist.new.should behave_as_electric_musician
-    end
-  end
-
-  describe ClassicGuitarist do
-    it "should not behave as guitarist" do
-      ClassicGuitarist.new.should behave_as_musician
-    end
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/custom_expectation_matchers.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/custom_expectation_matchers.rb
deleted file mode 100644
index 075bb54..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/custom_expectation_matchers.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-module AnimalSpecHelper
-  class Eat
-    def initialize(food)
-      @food = food
-    end
-    
-    def matches?(animal)
-      @animal = animal
-      @animal.eats?(@food)
-    end
-    
-    def failure_message
-      "expected #{@animal} to eat #{@food}, but it does not"
-    end
-    
-    def negative_failure_message
-      "expected #{@animal} not to eat #{@food}, but it does"
-    end
-  end
-    
-  def eat(food)
-    Eat.new(food)
-  end
-end
-
-module Animals
-  class Animal
-    def eats?(food)
-      return foods_i_eat.include?(food)
-    end
-  end
-  
-  class Mouse < Animal
-    def foods_i_eat
-      [:cheese]
-    end
-  end
-
-  describe Mouse do
-    include AnimalSpecHelper
-    before(:each) do
-      @mouse = Animals::Mouse.new
-    end
-  
-    it "should eat cheese" do
-      @mouse.should eat(:cheese)
-    end
-  
-    it "should not eat cat" do
-      @mouse.should_not eat(:cat)
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/custom_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/custom_formatter.rb
deleted file mode 100644
index c449fdc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/custom_formatter.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require 'spec/runner/formatter/progress_bar_formatter'
-
-# Example of a formatter with custom bactrace printing. Run me with:
-# ruby bin/spec failing_examples -r examples/custom_formatter.rb -f CustomFormatter
-class CustomFormatter < Spec::Runner::Formatter::ProgressBarFormatter
-  def backtrace_line(line)
-    line.gsub(/([^:]*\.rb):(\d*)/) do
-      "<a href=\"file://#{File.expand_path($1)}\">#{$1}:#{$2}</a> "
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/dynamic_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/dynamic_spec.rb
deleted file mode 100644
index 15d473d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/dynamic_spec.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "Some integers" do
-  (1..10).each do |n|
-    it "The root of #{n} square should be #{n}" do
-      Math.sqrt(n*n).should == n
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/file_accessor.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/file_accessor.rb
deleted file mode 100644
index ff6fb74..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/file_accessor.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-class FileAccessor
-  def open_and_handle_with(pathname, processor)
-    pathname.open do |io|
-      processor.process(io)
-    end
-  end
-end
-
-if __FILE__ == $0
-  require File.dirname(__FILE__) + '/io_processor'
-  require 'pathname'
-  
-  accessor = FileAccessor.new
-  io_processor = IoProcessor.new
-  file = Pathname.new ARGV[0]
-
-  accessor.open_and_handle_with(file, io_processor)
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/file_accessor_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/file_accessor_spec.rb
deleted file mode 100644
index 628d4c0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/file_accessor_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + '/file_accessor'
-require 'stringio'
-
-describe "A FileAccessor" do
-  # This sequence diagram illustrates what this spec specifies.
-  #
-  #                  +--------------+     +----------+     +-------------+
-  #                  | FileAccessor |     | Pathname |     | IoProcessor |
-  #                  +--------------+     +----------+     +-------------+
-  #                         |                  |                  |
-  #   open_and_handle_with  |                  |                  |
-  #   -------------------->| |           open  |                  |
-  #                        | |--------------->| |                 |
-  #                        | | io             | |                 |
-  #                        | |<...............| |                 |
-  #                        | |                 |     process(io)  |
-  #                        | |---------------------------------->| |
-  #                        | |                 |                 | |
-  #                        | |<..................................| |
-  #                         |                  |                  |
-  #
-  it "should open a file and pass it to the processor's process method" do
-    # This is the primary actor
-    accessor = FileAccessor.new
-
-    # These are the primary actor's neighbours, which we mock.
-    file = mock "Pathname"
-    io_processor = mock "IoProcessor"
-    
-    io = StringIO.new "whatever"
-    file.should_receive(:open).and_yield io
-    io_processor.should_receive(:process).with(io)
-    
-    accessor.open_and_handle_with(file, io_processor)
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/greeter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/greeter_spec.rb
deleted file mode 100644
index ec7669d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/greeter_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-# greeter.rb
-#
-# Based on http://glu.ttono.us/articles/2006/12/19/tormenting-your-tests-with-heckle
-#
-# Run with:
-#
-#   spec greeter_spec.rb --heckle Greeter
-#
-class Greeter
-  def initialize(person = nil)
-    @person = person
-  end
-
-  def greet
-    @person.nil? ? "Hi there!" : "Hi #{@person}!"
-  end
-end
-
-describe "Greeter" do
-  it "should say Hi to person" do
-    greeter = Greeter.new("Kevin")
-    greeter.greet.should == "Hi Kevin!"
-  end
-
-  it "should say Hi to nobody" do
-    greeter = Greeter.new
-    # Uncomment the next line to make Heckle happy
-    #greeter.greet.should == "Hi there!"
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/helper_method_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/helper_method_example.rb
deleted file mode 100644
index d97f19e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/helper_method_example.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-module HelperMethodExample
-  describe "an example group with helper a method" do
-    def helper_method
-      "received call"
-    end
-  
-    it "should make that method available to specs" do
-      helper_method.should == "received call"
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/io_processor.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/io_processor.rb
deleted file mode 100644
index 6b15147..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/io_processor.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class DataTooShort < StandardError; end
-
-class IoProcessor
-  # Does some fancy stuff unless the length of +io+ is shorter than 32
-  def process(io)
-    raise DataTooShort if io.read.length < 32
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/io_processor_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/io_processor_spec.rb
deleted file mode 100644
index 5cab7bf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/io_processor_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + '/io_processor'
-require 'stringio'
-
-describe "An IoProcessor" do
-  before(:each) do
-    @processor = IoProcessor.new
-  end
-
-  it "should raise nothing when the file is exactly 32 bytes" do
-    lambda {
-      @processor.process(StringIO.new("z"*32))
-    }.should_not raise_error
-  end
-
-  it "should raise an exception when the file length is less than 32 bytes" do
-    lambda {
-      @processor.process(StringIO.new("z"*31))
-    }.should raise_error(DataTooShort)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/legacy_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/legacy_spec.rb
deleted file mode 100644
index c863695..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/legacy_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-context "A legacy spec" do
-  setup do
-  end
-  
-  specify "should work fine" do
-  end
-  
-  teardown do
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/mocking_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/mocking_example.rb
deleted file mode 100644
index 6adbef5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/mocking_example.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "A consumer of a mock" do
-  it "should be able to send messages to the mock" do
-    mock = mock("poke me")
-    mock.should_receive(:poke)
-    mock.poke
-  end
-end
-
-describe "a mock" do
-  it "should be able to mock the same message twice w/ different args" do
-    mock = mock("mock")
-    mock.should_receive(:msg).with(:arg1).and_return(:val1)
-    mock.should_receive(:msg).with(:arg2).and_return(:val2)
-    mock.msg(:arg1).should eql(:val1)
-    mock.msg(:arg2).should eql(:val2)
-  end
-
-  it "should be able to mock the same message twice w/ different args in reverse order" do
-    mock = mock("mock")
-    mock.should_receive(:msg).with(:arg1).and_return(:val1)
-    mock.should_receive(:msg).with(:arg2).and_return(:val2)
-    mock.msg(:arg2).should eql(:val2)
-    mock.msg(:arg1).should eql(:val1)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/multi_threaded_behaviour_runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/multi_threaded_behaviour_runner.rb
deleted file mode 100644
index 36edcd4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/multi_threaded_behaviour_runner.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-class MultiThreadedExampleGroupRunner < Spec::Runner::ExampleGroupRunner
-  def initialize(options, arg)
-    super(options)
-    # configure these
-    @thread_count = 4
-    @thread_wait = 0
-  end
-
-  def run
-    @threads = []
-    q = Queue.new
-    example_groups.each { |b| q << b}
-    success = true
-    @thread_count.times do
-      @threads << Thread.new(q) do |queue|
-        while not queue.empty?
-          example_group = queue.pop
-          success &= example_group.suite.run(nil)
-        end
-      end
-      sleep @thread_wait
-    end
-    @threads.each {|t| t.join}
-    success
-  end
-end
-
-MultiThreadedBehaviourRunner = MultiThreadedExampleGroupRunner
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/nested_classes_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/nested_classes_example.rb
deleted file mode 100644
index abe43b0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/nested_classes_example.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + '/stack'
-
-class StackExamples < Spec::ExampleGroup
-  describe(Stack)
-  before(:each) do
-    @stack = Stack.new
-  end
-end
-
-class EmptyStackExamples < StackExamples
-  describe("when empty")
-  it "should be empty" do
-    @stack.should be_empty
-  end
-end
-
-class AlmostFullStackExamples < StackExamples
-  describe("when almost full")
-  before(:each) do
-    (1..9).each {|n| @stack.push n}
-  end
-  it "should be full" do
-    @stack.should_not be_full
-  end
-end
-
-class FullStackExamples < StackExamples
-  describe("when full")
-  before(:each) do
-    (1..10).each {|n| @stack.push n}
-  end
-  it "should be full" do
-    @stack.should be_full
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/partial_mock_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/partial_mock_example.rb
deleted file mode 100644
index 2af608b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/partial_mock_example.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class MockableClass
-  def self.find id
-    return :original_return
-  end
-end
-
-describe "A partial mock" do
-
-  it "should work at the class level" do
-    MockableClass.should_receive(:find).with(1).and_return {:stub_return}
-    MockableClass.find(1).should equal(:stub_return)
-  end
-
-  it "should revert to the original after each spec" do
-    MockableClass.find(1).should equal(:original_return)
-  end
-
-  it "can be mocked w/ ordering" do
-    MockableClass.should_receive(:msg_1).ordered
-    MockableClass.should_receive(:msg_2).ordered
-    MockableClass.should_receive(:msg_3).ordered
-    MockableClass.msg_1
-    MockableClass.msg_2
-    MockableClass.msg_3
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/pending_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/pending_example.rb
deleted file mode 100644
index 13f3d00..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/pending_example.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "pending example (using pending method)" do
-  it %Q|should be reported as "PENDING: for some reason"| do
-    pending("for some reason")
-  end
-end
-
-describe "pending example (with no block)" do
-  it %Q|should be reported as "PENDING: Not Yet Implemented"|
-end
-
-describe "pending example (with block for pending)" do
-  it %Q|should have a failing block, passed to pending, reported as "PENDING: for some reason"| do
-    pending("for some reason") do
-      raise "some reason"
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/predicate_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/predicate_example.rb
deleted file mode 100644
index 1202bb6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/predicate_example.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class BddFramework
-  def intuitive?
-    true
-  end
-  
-  def adopted_quickly?
-    true
-  end
-end
-
-describe "BDD framework" do
-
-  before(:each) do
-    @bdd_framework = BddFramework.new
-  end
-
-  it "should be adopted quickly" do
-    @bdd_framework.should be_adopted_quickly
-  end
-  
-  it "should be intuitive" do
-    @bdd_framework.should be_intuitive
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/priority.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/priority.txt
deleted file mode 100644
index 5b00064..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/priority.txt
+++ /dev/null
@@ -1 +0,0 @@
-examples/custom_expectation_matchers.rb
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/shared_example_group_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/shared_example_group_example.rb
deleted file mode 100644
index 42a385f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/shared_example_group_example.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-module SharedExampleGroupExample
-  class OneThing
-    def what_things_do
-      "stuff"
-    end
-  end
-  
-  class AnotherThing
-    def what_things_do
-      "stuff"
-    end
-  end
-  
-  class YetAnotherThing
-    def what_things_do
-      "stuff"
-    end
-  end
-  
-  # A SharedExampleGroup is an example group that doesn't get run.
-  # You can create one like this:
-  share_examples_for "most things" do
-    def helper_method
-      "helper method"
-    end
-    
-    it "should do what things do" do
-      @thing.what_things_do.should == "stuff"
-    end
-  end
-
-  # A SharedExampleGroup is also a module. If you create one like this it gets
-  # assigned to the constant MostThings
-  share_as :MostThings do
-    def helper_method
-      "helper method"
-    end
-    
-    it "should do what things do" do
-      @thing.what_things_do.should == "stuff"
-    end
-  end
-  
-  describe OneThing do
-    # Now you can include the shared example group like this, which 
-    # feels more like what you might say ...
-    it_should_behave_like "most things"
-    
-    before(:each) { @thing = OneThing.new }
-    
-    it "should have access to helper methods defined in the shared example group" do
-      helper_method.should == "helper method"
-    end
-  end
-
-  describe AnotherThing do
-    # ... or you can include the example group like this, which
-    # feels more like the programming language we love.
-    it_should_behave_like MostThings
-    
-    before(:each) { @thing = AnotherThing.new }
-
-    it "should have access to helper methods defined in the shared example group" do
-      helper_method.should == "helper method"
-    end
-  end
-
-  describe YetAnotherThing do
-    # ... or you can include the example group like this, which
-    # feels more like the programming language we love.
-    include MostThings
-    
-    before(:each) { @thing = AnotherThing.new }
-
-    it "should have access to helper methods defined in the shared example group" do
-      helper_method.should == "helper method"
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/shared_stack_examples.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/shared_stack_examples.rb
deleted file mode 100644
index 7a08162..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/shared_stack_examples.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[spec_helper])
-
-shared_examples_for "non-empty Stack" do
-
-  it { @stack.should_not be_empty }
-  
-  it "should return the top item when sent #peek" do
-    @stack.peek.should == @last_item_added
-  end
-
-  it "should NOT remove the top item when sent #peek" do
-    @stack.peek.should == @last_item_added
-    @stack.peek.should == @last_item_added
-  end
-  
-  it "should return the top item when sent #pop" do
-    @stack.pop.should == @last_item_added
-  end
-  
-  it "should remove the top item when sent #pop" do
-    @stack.pop.should == @last_item_added
-    unless @stack.empty?
-      @stack.pop.should_not == @last_item_added
-    end
-  end
-  
-end
-
-shared_examples_for "non-full Stack" do
-
-  it { @stack.should_not be_full }
-
-  it "should add to the top when sent #push" do
-    @stack.push "newly added top item"
-    @stack.peek.should == "newly added top item"
-  end
-
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/spec_helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/spec_helper.rb
deleted file mode 100644
index 1e88079..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/spec_helper.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-lib_path = File.expand_path("#{File.dirname(__FILE__)}/../../lib")
-$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
-require 'spec'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack.rb
deleted file mode 100644
index 407173f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-class StackUnderflowError < RuntimeError
-end
-
-class StackOverflowError < RuntimeError
-end
-
-class Stack
-  
-  def initialize
-    @items = []
-  end
-  
-  def push object
-    raise StackOverflowError if @items.length == 10
-    @items.push object
-  end
-  
-  def pop
-    raise StackUnderflowError if @items.empty?
-    @items.delete @items.last
-  end
-  
-  def peek
-    raise StackUnderflowError if @items.empty?
-    @items.last
-  end
-  
-  def empty?
-    @items.empty?
-  end
-
-  def full?
-    @items.length == 10
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack_spec.rb
deleted file mode 100644
index 2a769da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack_spec.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + "/stack"
-require File.dirname(__FILE__) + '/shared_stack_examples'
-
-describe Stack, " (empty)" do
-  before(:each) do
-    @stack = Stack.new
-  end
-  
-  # NOTE that this one auto-generates the description "should be empty"
-  it { @stack.should be_empty }
-  
-  it_should_behave_like "non-full Stack"
-  
-  it "should complain when sent #peek" do
-    lambda { @stack.peek }.should raise_error(StackUnderflowError)
-  end
-  
-  it "should complain when sent #pop" do
-    lambda { @stack.pop }.should raise_error(StackUnderflowError)
-  end
-end
-
-describe Stack, " (with one item)" do
-  before(:each) do
-    @stack = Stack.new
-    @stack.push 3
-    @last_item_added = 3
-  end
-
-  it_should_behave_like "non-empty Stack"
-  it_should_behave_like "non-full Stack"
-
-end
-
-describe Stack, " (with one item less than capacity)" do
-  before(:each) do
-    @stack = Stack.new
-    (1..9).each { |i| @stack.push i }
-    @last_item_added = 9
-  end
-  
-  it_should_behave_like "non-empty Stack"
-  it_should_behave_like "non-full Stack"
-end
-
-describe Stack, " (full)" do
-  before(:each) do
-    @stack = Stack.new
-    (1..10).each { |i| @stack.push i }
-    @last_item_added = 10
-  end
-
-  # NOTE that this one auto-generates the description "should be full"
-  it { @stack.should be_full }  
-
-  it_should_behave_like "non-empty Stack"
-
-  it "should complain on #push" do
-    lambda { @stack.push Object.new }.should raise_error(StackOverflowError)
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack_spec_with_nested_example_groups.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack_spec_with_nested_example_groups.rb
deleted file mode 100644
index 05f6ad4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stack_spec_with_nested_example_groups.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + '/stack'
-require File.dirname(__FILE__) + '/shared_stack_examples'
-
-describe Stack do
-  
-  before(:each) do
-    @stack = Stack.new
-  end
-
-  describe "(empty)" do
-
-    it { @stack.should be_empty }
-  
-    it_should_behave_like "non-full Stack"
-  
-    it "should complain when sent #peek" do
-      lambda { @stack.peek }.should raise_error(StackUnderflowError)
-    end
-  
-    it "should complain when sent #pop" do
-      lambda { @stack.pop }.should raise_error(StackUnderflowError)
-    end
-
-  end
-
-  describe "(with one item)" do
-    
-    before(:each) do
-      @stack.push 3
-      @last_item_added = 3
-    end
-
-    it_should_behave_like "non-empty Stack"
-    it_should_behave_like "non-full Stack"
-
-  end
-
-  describe "(with one item less than capacity)" do
-    
-    before(:each) do
-      (1..9).each { |i| @stack.push i }
-      @last_item_added = 9
-    end
-  
-    it_should_behave_like "non-empty Stack"
-    it_should_behave_like "non-full Stack"
-  end
-
-  describe "(full)" do
-    
-    before(:each) do
-      (1..10).each { |i| @stack.push i }
-      @last_item_added = 10
-    end
-
-    it { @stack.should be_full }  
-
-    it_should_behave_like "non-empty Stack"
-
-    it "should complain on #push" do
-      lambda { @stack.push Object.new }.should raise_error(StackOverflowError)
-    end
-  
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stubbing_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stubbing_example.rb
deleted file mode 100644
index 31354ae..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/stubbing_example.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "A consumer of a stub" do
-  it "should be able to stub methods on any Object" do
-    obj = Object.new
-    obj.stub!(:foobar).and_return {:return_value}
-    obj.foobar.should equal(:return_value)
-  end
-end
-
-class StubbableClass
-  def self.find id
-    return :original_return
-  end
-end
-
-describe "A stubbed method on a class" do
-  it "should return the stubbed value" do
-    StubbableClass.stub!(:find).and_return(:stub_return)
-    StubbableClass.find(1).should equal(:stub_return)
-  end
-  
-  it "should revert to the original method after each spec" do
-    StubbableClass.find(1).should equal(:original_return)
-  end
-
-  it "can stub! and mock the same message" do
-    StubbableClass.stub!(:msg).and_return(:stub_value)
-    StubbableClass.should_receive(:msg).with(:arg).and_return(:mock_value)
-
-    StubbableClass.msg.should equal(:stub_value)
-    StubbableClass.msg(:other_arg).should equal(:stub_value)
-    StubbableClass.msg(:arg).should equal(:mock_value)
-    StubbableClass.msg(:another_arg).should equal(:stub_value)
-    StubbableClass.msg(:yet_another_arg).should equal(:stub_value)
-    StubbableClass.msg.should equal(:stub_value)
-  end
-end
-
-describe "A mock" do
-  it "can stub!" do
-    mock = mock("stubbing mock")
-    mock.stub!(:msg).and_return(:value)
-    (1..10).each {mock.msg.should equal(:value)}
-  end
-  
-  it "can stub! and mock" do
-    mock = mock("stubbing mock")
-    mock.stub!(:stub_message).and_return(:stub_value)
-    mock.should_receive(:mock_message).once.and_return(:mock_value)
-    (1..10).each {mock.stub_message.should equal(:stub_value)}
-    mock.mock_message.should equal(:mock_value)
-    (1..10).each {mock.stub_message.should equal(:stub_value)}
-  end
-  
-  it "can stub! and mock the same message" do
-    mock = mock("stubbing mock")
-    mock.stub!(:msg).and_return(:stub_value)
-    mock.should_receive(:msg).with(:arg).and_return(:mock_value)
-    mock.msg.should equal(:stub_value)
-    mock.msg(:other_arg).should equal(:stub_value)
-    mock.msg(:arg).should equal(:mock_value)
-    mock.msg(:another_arg).should equal(:stub_value)
-    mock.msg(:yet_another_arg).should equal(:stub_value)
-    mock.msg.should equal(:stub_value)
-  end
-end
-
-    
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/yielding_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/yielding_example.rb
deleted file mode 100644
index 4f62718..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/pure/yielding_example.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class MessageAppender
-  
-  def initialize(appendage)
-    @appendage = appendage
-  end
-  
-  def append_to(message)
-    if_told_to_yield do
-      message << @appendage
-    end
-  end
-    
-end
-
-describe "a message expectation yielding to a block" do
-  it "should yield if told to" do
-    appender = MessageAppender.new("appended to")
-    appender.should_receive(:if_told_to_yield).and_yield
-    message = ""
-    appender.append_to(message)
-    message.should == "appended to"
-  end
-
-  it "should not yield if not told to" do
-    appender = MessageAppender.new("appended to")
-    appender.should_receive(:if_told_to_yield)
-    message = ""
-    appender.append_to(message)
-    message.should == ""
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/adder.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/adder.rb
deleted file mode 100644
index 0b027b0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/adder.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-class Adder
-  def initialize
-    @addends = []
-  end
-  
-  def <<(val)
-    @addends << val
-  end
-  
-  def sum
-    @addends.inject(0) { |sum_so_far, val| sum_so_far + val }
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/addition b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/addition
deleted file mode 100644
index 58f0929..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/addition
+++ /dev/null
@@ -1,34 +0,0 @@
-This is a story about a calculator. The text up here above the Story: declaration
-won't be processed, so you can write whatever you wish!
-
-Story: simple addition
-
-  As an accountant
-  I want to add numbers
-  So that I can count beans
-
-  Scenario: add one plus one
-    Given an addend of 1
-    And an addend of 1
-    
-    When the addends are addeds
-    
-    Then the sum should be 3
-    And the corks should be popped
-  
-  Scenario: add two plus five
-    Given an addend of 2
-    And an addend of 5
-    
-    When the addends are added
-    
-    Then the sum should be 7
-    Then it should snow
-    
-  Scenario: add three more
-    GivenScenario add two plus five
-    And an addend of 3
-    
-    When the addends are added
-    
-    Then the sum should be 10
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/addition.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/addition.rb
deleted file mode 100644
index e43f5cf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/addition.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require File.join(File.dirname(__FILE__), "helper")
-require File.join(File.dirname(__FILE__), "adder")
-
-# with_steps_for :addition, :more_addition do
-with_steps_for :addition, :more_addition do
-  # Then("the corks should be popped") { }
-  run File.expand_path(__FILE__).gsub(".rb","")
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/calculator.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/calculator.rb
deleted file mode 100644
index d86fc7e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/calculator.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. lib])
-require 'spec'
-
-class AdditionMatchers < Spec::Story::StepGroup
-  steps do |add|
-    add.given("an addend of $addend") do |addend|
-      @adder ||= Adder.new
-      @adder << addend.to_i
-    end
-  end
-end
-
-steps = AdditionMatchers.new do |add|  
-  add.then("the sum should be $sum") do |sum|
-    @sum.should == sum.to_i
-  end
-end
-
-steps.when("they are added") do
-  @sum = @adder.sum
-end
-
-# This Story uses steps (see above) instead of blocks
-# passed to Given, When and Then
-
-Story "addition", %{
-  As an accountant
-  I want to add numbers
-  So that I can count some beans
-}, :steps_for => steps do
-  Scenario "2 + 3" do
-    Given "an addend of 2"
-    And "an addend of 3"
-    When "they are added"
-    Then "the sum should be 5"
-  end
-  
-  # This scenario uses GivenScenario, which silently runs
-  # all the steps in a previous scenario.
-  
-  Scenario "add 4 more" do
-    GivenScenario "2 + 3"
-    Given "an addend of 4"
-    When "they are added"
-    Then "the sum should be 9"
-  end
-end
-
-# And the class that makes the story pass
-
-class Adder
-  def << addend
-    addends << addend
-  end
-  
-  def sum
-    @addends.inject(0) do |result, addend|
-      result + addend.to_i
-    end
-  end
-  
-  def addends
-    @addends ||= []
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/README.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/README.txt
deleted file mode 100644
index 9624ad4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/README.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-John Conway's Game of Life
-
-The Rules
----------
-The Game of Life was invented by John Conway (as you might have gathered).
-The game is played on a field of cells, each of which has eight neighbors (adjacent cells).
-A cell is either occupied (by an organism) or not.
-The rules for deriving a generation from the previous one are these:
-
-Survival
---------
-If an occupied cell has 2 or 3 neighbors, the organism survives to the next generation.
-
-Death
------
-If an occupied cell has 0, 1, 4, 5, 6, 7, or 8 occupied neighbors, the organism dies
-(0, 1: of loneliness; 4 thru 8: of overcrowding).
-
-Birth
------
-If an unoccupied cell has 3 occupied neighbors, it becomes occupied.
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/everything.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/everything.rb
deleted file mode 100644
index 7be6e8f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/everything.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
-$:.unshift File.join(File.dirname(__FILE__), '..')
-
-require 'spec'
-require 'behaviour/examples/examples'
-require 'behaviour/stories/stories'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/examples.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/examples.rb
deleted file mode 100644
index 1cadfb3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/examples.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'spec'
-require 'behaviour/examples/game_behaviour'
-require 'behaviour/examples/grid_behaviour'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb
deleted file mode 100644
index ff5b357..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'life'
-
-describe Game do
-  it 'should have a grid' do
-    # given
-    game = Game.new(5, 5)
-    
-    # then
-    game.grid.should be_kind_of(Grid)
-  end
-  
-  it 'should create a cell' do
-    # given
-    game = Game.new(2, 2)
-    expected_grid = Grid.from_string( 'X. ..' )
-    
-    # when
-    game.create_at(0, 0)
-    
-    # then
-    game.grid.should == expected_grid
-  end
-  
-  it 'should destroy a cell' do
-    # given
-    game = Game.new(2,2)
-    game.grid = Grid.from_string('X. ..')
-    
-    # when
-    game.destroy_at(0,0)
-    
-    # then
-    game.grid.should == Grid.from_string('.. ..')
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb
deleted file mode 100644
index 5be3af5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-describe Grid do
-  it 'should be empty when created' do
-    # given
-    expected_contents = [
-      [0, 0, 0],
-      [0, 0, 0]
-    ]
-    grid = Grid.new(2, 3)
-    
-    # when
-    contents = grid.contents
-    
-    # then
-    contents.should == expected_contents
-  end
-  
-  it 'should compare equal based on its contents' do
-    # given
-    grid1 = Grid.new(2, 3)
-    grid2 = Grid.new(2, 3)
-    
-    # then
-    grid1.should == grid2
-  end
-  
-  it 'should be able to replace its contents' do
-    # given
-    grid = Grid.new(2,2)
-    new_contents = [[0,1,0], [1,0,1]]
-    
-    # when
-    grid.contents = new_contents
-    
-    # then
-    grid.contents.should == new_contents
-    grid.rows.should == 2
-    grid.columns.should == 3
-  end
-  
-  it 'should add an organism' do
-    # given
-    grid = Grid.new(2, 2)
-    expected = Grid.new(2, 2)
-    expected.contents = [[1,0],[0,0]]
-    
-    # when
-    grid.create_at(0,0)
-    
-    # then
-    grid.should == expected
-  end
-  
-  it 'should create itself from a string' do
-    # given
-    expected = Grid.new 3, 3
-    expected.create_at(0,0)
-    expected.create_at(1,0)
-    expected.create_at(2,2)
-    
-    # when
-    actual = Grid.from_string "X.. X.. ..X"
-    
-    # then
-    actual.should == expected
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story
deleted file mode 100644
index 8374e86..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story
+++ /dev/null
@@ -1,21 +0,0 @@
-Story: cells with less than two neighbours die
-
-As a game producer
-I want cells with less than two neighbours to die
-So that I can illustrate how the game works to people with money
-
-Scenario: cells with zero or one neighbour die
-
-Given the grid looks like
-........
-.XX.XX..
-.XX.....
-....X...
-........
-When the next step occurs
-Then the grid should look like
-........
-.XX.....
-.XX.....
-........
-........
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story
deleted file mode 100644
index 15a455b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story
+++ /dev/null
@@ -1,21 +0,0 @@
-Story: cells with more than three neighbours die
-
-	As a game producer
-	I want cells with more than three neighbours to die
-	So that I can show the people with money how we are getting on
-
-	Scenario: blink
-
-		Given the grid looks like
-			.....
-			...XX
-			...XX
-			.XX..
-			.XX..
-		When the next step occurs
-		Then the grid should look like
-			.....
-			...XX
-			....X
-			.X...
-			.XX..
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story
deleted file mode 100644
index cbc248e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story
+++ /dev/null
@@ -1,42 +0,0 @@
-Story: Empty spaces with three neighbours create a cell
-
-As a game producer
-I want empty cells with three neighbours to die
-So that I have a minimum feature set to ship
-
-Scenario: the glider
-
-Given the grid looks like
-...X..
-..X...
-..XXX.
-......
-......
-When the next step occurs
-Then the grid should look like
-......
-..X.X.
-..XX..
-...X..
-......
-When the next step occurs
-Then the grid should look like
-......
-..X...
-..X.X.
-..XX..
-......
-When the next step occurs
-Then the grid should look like
-......
-...X..
-.XX...
-..XX..
-......
-When the next step occurs
-Then the grid should look like
-......
-..X...
-.X....
-.XXX..
-......
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story
deleted file mode 100644
index 88895cb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story
+++ /dev/null
@@ -1,42 +0,0 @@
-Story: I can create a cell
-
-As a game producer
-I want to create a cell
-So that I can show the grid to people
-
-Scenario: nothing to see here
-
-Given a 3 x 3 game
-Then the grid should look like
-...
-...
-...
-
-Scenario: all on its lonesome
-
-Given a 3 x 3 game
-When I create a cell at 1, 1
-Then the grid should look like
-...
-.X.
-...
-
-Scenario: the grid has three cells
-
-Given a 3 x 3 game
-When I create a cell at 0, 0
-and I create a cell at 0, 1
-and I create a cell at 2, 2
-Then the grid should look like
-XX.
-...
-..X
-
-Scenario: more cells more more
-
-Given the grid has three cells
-When I create a celll at 3, 1
-Then the grid should look like
-XX.
-..X
-..X
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story
deleted file mode 100644
index a9cf1ac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story
+++ /dev/null
@@ -1,17 +0,0 @@
-Story: I can kill a cell
-
-As a game producer
-I want to kill a cell
-So that when I make a mistake I dont have to start again
-
-Scenario: bang youre dead
-
-Given the grid looks like
-XX.
-.X.
-..X
-When I destroy the cell at 0, 1
-Then the grid should look like
-X..
-.X.
-..X
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story
deleted file mode 100644
index aeeede7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story
+++ /dev/null
@@ -1,53 +0,0 @@
-Story: The grid wraps
-
-As a game player
-I want the grid to wrap
-So that untidy stuff at the edges is avoided
-
-Scenario: crowded in the corners
-
-Given the grid looks like
-X.X
-...
-X.X
-When the next step is taken
-Then the grid should look like
-X.X
-...
-X.X
-
-
-Scenario: the glider returns
-
-Given the glider
-......
-..X...
-.X....
-.XXX..
-......
-When the next step is taken
-and the next step is taken
-and the next step is taken
-and the next step is taken
-Then the grid should look like
-......
-......
-.X....
-X.....
-XXX...
-When the next step is taken
-Then the grid should look like
-.X....
-......
-......
-X.X...
-XX....
-When the next step is taken
-Then the grid should look like
-XX....
-......
-......
-X.....
-X.X...
-
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb
deleted file mode 100644
index 81f86ba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-
-Story "I can create a cell",
-  %(As a game producer
-    I want to create a cell
-    So that I can show the grid to people), :steps_for => :life do
-  
-  Scenario "nothing to see here" do
-    Given "a game with dimensions", 3, 3 do |rows,cols|
-      @game = Game.new(rows,cols)
-    end
-    
-    Then "the grid should look like", %(
-      ...
-      ...
-      ...
-    )
-  end
-  
-  Scenario "all on its lonesome" do
-    Given "a game with dimensions", 2, 2
-    When "I create a cell at", 1, 1 do |row,col|
-      @game.create_at(row,col)
-    end
-    Then "the grid should look like", %(
-      ..
-      .X
-    )
-  end
-  
-  Scenario "the grid has three cells" do
-    Given "a game with dimensions", 3, 3
-    When "I create a cell at", 0, 0
-    When "I create a cell at", 0, 1
-    When "I create a cell at", 2, 2
-    Then "the grid should look like", %(
-      XX.
-      ...
-      ..X
-    )
-  end
-  
-  Scenario "more cells more more" do
-    GivenScenario "the grid has three cells"
-    When "I create a cell at", 2, 0
-    Then "the grid should look like", %(
-      XX.
-      ...
-      X.X
-    )
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/helper.rb
deleted file mode 100644
index 70ed21e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-dir = File.dirname(__FILE__)
-$LOAD_PATH.unshift(File.expand_path("#{dir}/../../../../../../rspec/lib"))
-require 'spec'
-$LOAD_PATH.unshift(File.expand_path("#{dir}/../../"))
-require "#{dir}/../../life"
-require File.join(File.dirname(__FILE__), *%w[steps])
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb
deleted file mode 100644
index 7ae2d91..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-
-Story 'I can kill a cell',
-  %(As a game producer
-  I want to kill a cell
-  So that when I make a mistake I don't have to start again), :steps_for => :life do
-  
-  Scenario "bang, you're dead" do
-    
-    Given 'a game that looks like', %(
-      XX.
-      .X.
-      ..X
-    ) do |dots|
-      @game = Game.from_string dots
-    end
-    When 'I destroy the cell at', 0, 1 do |row,col|
-      @game.destroy_at(row,col)
-    end
-    Then 'the grid should look like', %(
-      X..
-      .X.
-      ..X
-    )
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/steps.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/steps.rb
deleted file mode 100644
index 793590d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/steps.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-steps_for :life do
-  Then "the grid should look like" do |dots|
-    @game.grid.should == Grid.from_string(dots)
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/stories.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/stories.rb
deleted file mode 100644
index e60fe01..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/stories.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-require 'behaviour/stories/create_a_cell'
-require 'behaviour/stories/kill_a_cell'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/stories.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/stories.txt
deleted file mode 100644
index d8f809b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/behaviour/stories/stories.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Story: Show the game field
-    As a game player
-    I want to see the field
-    so that I can observe the progress of the organisms
-
-Scenario: an empty field
-  Given a new game starts
-  When the game displays the field
-  Then the field should be empty
-
-
-
-
-
-StoryBuilder story = stories.createStory().called("a story")
-	.asA("person")
-	.iWant("to do something")
-	.soThat("I can rule the world");
-story.addScenario().called("happy path").as()
-	.given("some context")
-	.when("some event happens")
-	.then("expect some outcome");
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life.rb
deleted file mode 100644
index 88263bd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-$: << File.dirname(__FILE__)
-require 'life/game'
-require 'life/grid'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life/game.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life/game.rb
deleted file mode 100644
index 5411b01..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life/game.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-class Game
-  attr_accessor :grid
-  def initialize(rows,cols)
-    @grid = Grid.new(rows, cols)
-  end
-  
-  def create_at(row,col)
-    @grid.create_at(row,col)
-  end
-  
-  def destroy_at(row,col)
-    @grid.destroy_at(row, col)
-  end
-  
-  def self.from_string(dots)
-    grid = Grid.from_string(dots)
-    game = new(grid.rows, grid.columns)
-    game.instance_eval do
-      @grid = grid
-    end
-    return game
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life/grid.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life/grid.rb
deleted file mode 100644
index aca2308..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/game-of-life/life/grid.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-class Grid
-  
-  attr_accessor :contents
-  
-  def initialize(rows, cols)
-    @contents = []
-    rows.times do @contents << [0] * cols end
-  end
-  
-  def rows
-    @contents.size
-  end
-  
-  def columns
-    @contents[0].size
-  end
-  
-  def ==(other)
-    self.contents == other.contents
-  end
-  
-  def create_at(row,col)
-    @contents[row][col] = 1
-  end
-  
-  def destroy_at(row,col)
-    @contents[row][col] = 0
-  end
-  
-  def self.from_string(str)
-    row_strings = str.split(' ')
-    grid = new(row_strings.size, row_strings[0].size)
-    
-    row_strings.each_with_index do |row, row_index|
-      row_chars = row.split(//)
-      row_chars.each_with_index do |col_char, col_index|
-        grid.create_at(row_index, col_index) if col_char == 'X'
-      end
-    end
-    return grid
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/helper.rb
deleted file mode 100644
index 2e825b2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/helper.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
-require 'spec/story'
-
-# won't have to do this once plain_text_story_runner is moved into the library
-# require File.join(File.dirname(__FILE__), "plain_text_story_runner")
-
-Dir[File.join(File.dirname(__FILE__), "steps/*.rb")].each do |file|
-  require file
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/steps/addition_steps.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/steps/addition_steps.rb
deleted file mode 100644
index 3f27095..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/examples/stories/steps/addition_steps.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.expand_path("#{File.dirname(__FILE__)}/../helper")
-
-# This creates steps for :addition
-steps_for(:addition) do
-  Given("an addend of $addend") do |addend|
-    @adder ||= Adder.new
-    @adder << addend.to_i
-  end
-end
-
-# This appends to them
-steps_for(:addition) do
-  When("the addends are added")  { @sum = @adder.sum }
-end
-
-steps_for(:more_addition) do
-  Then("the sum should be $sum") { |sum| @sum.should == sum.to_i }
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/README.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/README.txt
deleted file mode 100644
index 38c667d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-"Why have failing examples?", you might ask.
-
-They allow us to see failure messages. RSpec wants to provide meaningful and helpful failure messages. The failures in this directory not only provide you a way of seeing the failure messages, but they provide RSpec's own specs a way of describing what they should look like and ensuring they stay correct.
-
-To see the types of messages you can expect, stand in this directory and run:
-
-../bin/spec ./*.rb
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/diffing_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/diffing_spec.rb
deleted file mode 100644
index 85e13e8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/diffing_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-describe "Running specs with --diff" do
-  it "should print diff of different strings" do
-    uk = <<-EOF
-RSpec is a
-behaviour driven development
-framework for Ruby
-EOF
-    usa = <<-EOF
-RSpec is a
-behavior driven development
-framework for Ruby
-EOF
-    usa.should == uk
-  end
-
-  class Animal
-    def initialize(name,species)
-      @name, at species = name,species
-    end
-
-    def inspect
-      <<-EOA
-<Animal
-name=#{@name},
-species=#{@species}
->
-      EOA
-    end
-  end
-
-  it "should print diff of different objects' pretty representation" do
-    expected = Animal.new "bob", "giraffe"
-    actual   = Animal.new "bob", "tortoise"
-    expected.should eql(actual)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failing_autogenerated_docstrings_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failing_autogenerated_docstrings_example.rb
deleted file mode 100644
index 8a7d249..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failing_autogenerated_docstrings_example.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-# Run spec w/ -fs to see the output of this file
-
-describe "Failing examples with no descriptions" do
-  
-  # description is auto-generated as "should equal(5)" based on the last #should
-  it do
-    3.should equal(2)
-    5.should equal(5)
-  end
-  
-  it { 3.should be > 5 }
-  
-  it { ["a"].should include("b") }
-  
-  it { [1,2,3].should_not respond_to(:size) }
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failure_in_setup.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failure_in_setup.rb
deleted file mode 100644
index 2a807a9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failure_in_setup.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-describe "This example" do
-  
-  before(:each) do
-    NonExistentClass.new
-  end
-  
-  it "should be listed as failing in setup" do
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failure_in_teardown.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failure_in_teardown.rb
deleted file mode 100644
index 6458ea2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/failure_in_teardown.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-describe "This example" do
-  
-  it "should be listed as failing in teardown" do
-  end
-  
-  after(:each) do
-    NonExistentClass.new
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_example.rb
deleted file mode 100644
index caf2db0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_example.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "Mocker" do
-
-  it "should be able to call mock()" do
-    mock = mock("poke me")
-    mock.should_receive(:poke)
-    mock.poke
-  end
-
-  it "should fail when expected message not received" do
-    mock = mock("poke me")
-    mock.should_receive(:poke)
-  end
-  
-  it "should fail when messages are received out of order" do
-    mock = mock("one two three")
-    mock.should_receive(:one).ordered
-    mock.should_receive(:two).ordered
-    mock.should_receive(:three).ordered
-    mock.one
-    mock.three
-    mock.two
-  end
-
-  it "should get yelled at when sending unexpected messages" do
-    mock = mock("don't talk to me")
-    mock.should_not_receive(:any_message_at_all)
-    mock.any_message_at_all
-  end
-
-  it "has a bug we need to fix" do
-    pending "here is the bug" do
-      # Actually, no. It's fixed. This will fail because it passes :-)
-      mock = mock("Bug")
-      mock.should_receive(:hello)
-      mock.hello
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_flexmock.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_flexmock.rb
deleted file mode 100644
index 6e79ece..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_flexmock.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# stub frameworks like to gum up Object, so this is deliberately
-# set NOT to run so that you don't accidentally run it when you
-# run this dir.
-
-# To run it, stand in this directory and say:
-#
-#   RUN_FLEXMOCK_EXAMPLE=true ruby ../bin/spec mocking_with_flexmock.rb
-
-if ENV['RUN_FLEXMOCK_EXAMPLE']
-  Spec::Runner.configure do |config|
-    config.mock_with :flexmock
-  end
-
-  describe "Flexmocks" do
-    it "should fail when the expected message is received with wrong arguments" do
-      m = flexmock("now flex!")
-      m.should_receive(:msg).with("arg").once
-      m.msg("other arg")
-    end
-
-    it "should fail when the expected message is not received at all" do
-      m = flexmock("now flex!")
-      m.should_receive(:msg).with("arg").once
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_mocha.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_mocha.rb
deleted file mode 100644
index f14a1a3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_mocha.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# stub frameworks like to gum up Object, so this is deliberately
-# set NOT to run so that you don't accidentally run it when you
-# run this dir.
-
-# To run it, stand in this directory and say:
-#
-#   RUN_MOCHA_EXAMPLE=true ruby ../bin/spec mocking_with_mocha.rb
-
-if ENV['RUN_MOCHA_EXAMPLE']
-  Spec::Runner.configure do |config|
-    config.mock_with :mocha
-  end
-  describe "Mocha framework" do
-    it "should should be made available by saying config.mock_with :mocha" do
-      m = mock()
-      m.expects(:msg).with("arg")
-      m.msg
-    end
-    it "should should be made available by saying config.mock_with :mocha" do
-      o = Object.new
-      o.expects(:msg).with("arg")
-      o.msg
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_rr.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_rr.rb
deleted file mode 100644
index 0d2b4fe..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/mocking_with_rr.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# stub frameworks like to gum up Object, so this is deliberately
-# set NOT to run so that you don't accidentally run it when you
-# run this dir.
-
-# To run it, stand in this directory and say:
-#
-#   RUN_RR_EXAMPLE=true ruby ../bin/spec mocking_with_rr.rb
-
-if ENV['RUN_RR_EXAMPLE']
-  Spec::Runner.configure do |config|
-    config.mock_with :rr
-  end
-  describe "RR framework" do
-    it "should should be made available by saying config.mock_with :rr" do
-      o = Object.new
-      mock(o).msg("arg")
-      o.msg
-    end
-    it "should should be made available by saying config.mock_with :rr" do
-      o = Object.new
-      mock(o) do |m|
-        m.msg("arg")
-      end
-      o.msg
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/partial_mock_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/partial_mock_example.rb
deleted file mode 100644
index 6d05540..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/partial_mock_example.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class MockableClass
-  def self.find id
-    return :original_return
-  end
-end
-
-describe "A partial mock" do
-
-  it "should work at the class level (but fail here due to the type mismatch)" do
-    MockableClass.should_receive(:find).with(1).and_return {:stub_return}
-    MockableClass.find("1").should equal(:stub_return)
-  end
-
-  it "should revert to the original after each spec" do
-    MockableClass.find(1).should equal(:original_return)
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/predicate_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/predicate_example.rb
deleted file mode 100644
index 53b6367..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/predicate_example.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class BddFramework
-  def intuitive?
-    true
-  end
-
-  def adopted_quickly?
-    #this will cause failures because it reallly SHOULD be adopted quickly
-    false
-  end
-end
-
-describe "BDD framework" do
-
-  before(:each) do
-    @bdd_framework = BddFramework.new
-  end
-
-  it "should be adopted quickly" do
-    #this will fail because it reallly SHOULD be adopted quickly
-    @bdd_framework.should be_adopted_quickly
-  end
-
-  it "should be intuitive" do
-    @bdd_framework.should be_intuitive
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/raising_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/raising_example.rb
deleted file mode 100644
index e40b51e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/raising_example.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-describe "This example" do
-  
-  it "should show that a NoMethodError is raised but an Exception was expected" do
-    proc { ''.nonexistent_method }.should raise_error
-  end
-  
-  it "should pass" do
-    proc { ''.nonexistent_method }.should raise_error(NoMethodError)
-  end
-  
-  it "should show that a NoMethodError is raised but a SyntaxError was expected" do
-    proc { ''.nonexistent_method }.should raise_error(SyntaxError)
-  end
-  
-  it "should show that nothing is raised when SyntaxError was expected" do
-    proc { }.should raise_error(SyntaxError)
-  end
-
-  it "should show that a NoMethodError is raised but a Exception was expected" do
-    proc { ''.nonexistent_method }.should_not raise_error
-  end
-  
-  it "should show that a NoMethodError is raised" do
-    proc { ''.nonexistent_method }.should_not raise_error(NoMethodError)
-  end
-  
-  it "should also pass" do
-    proc { ''.nonexistent_method }.should_not raise_error(SyntaxError)
-  end
-  
-  it "should show that a NoMethodError is raised when nothing expected" do
-    proc { ''.nonexistent_method }.should_not raise_error(Exception)
-  end
-  
-  it "should show that the wrong message was received" do
-    proc { raise StandardError.new("what is an enterprise?") }.should raise_error(StandardError, "not this")
-  end
-  
-  it "should show that the unexpected error/message was thrown" do
-    proc { raise StandardError.new("abc") }.should_not raise_error(StandardError, "abc")
-  end
-  
-  it "should pass too" do
-    proc { raise StandardError.new("abc") }.should_not raise_error(StandardError, "xyz")
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/spec_helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/spec_helper.rb
deleted file mode 100644
index f8d6575..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/spec_helper.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-lib_path = File.expand_path("#{File.dirname(__FILE__)}/../lib")
-$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
-require "spec"
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/syntax_error_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/syntax_error_example.rb
deleted file mode 100644
index c9bb907..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/syntax_error_example.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-describe "when passing a block to a matcher" do
-  it "you should use {} instead of do/end" do
-    Object.new.should satisfy do
-      "this block is being passed to #should instead of #satisfy - use {} instead"
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/team_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/team_spec.rb
deleted file mode 100644
index 41a44e5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/team_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-
-class Team
-  attr_reader :players
-  def initialize
-    @players = Players.new
-  end
-end
-
-class Players
-  def initialize
-    @players = []
-  end
-  def size
-    @players.size
-  end
-  def include? player
-    raise "player must be a string" unless player.is_a?(String)
-    @players.include? player
-  end
-end
-
-describe "A new team" do
-  
-  before(:each) do
-    @team = Team.new
-  end
-  
-  it "should have 3 players (failing example)" do
-    @team.should have(3).players
-  end
-  
-  it "should include some player (failing example)" do
-    @team.players.should include("Some Player")
-  end
-
-  it "should include 5 (failing example)" do
-    @team.players.should include(5)
-  end
-  
-  it "should have no players"
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/timeout_behaviour.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/timeout_behaviour.rb
deleted file mode 100644
index 1822136..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/failing_examples/timeout_behaviour.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "Something really slow" do
-  it "should be failed by RSpec when it takes longer than --timeout" do
-    sleep(2)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/init.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/init.rb
deleted file mode 100644
index 6262f03..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/init.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# Placeholder to satisfy Rails.
-#
-# Do NOT add any require statements to this file. Doing
-# so will cause Rails to load this plugin all of the time.
-#
-# Running 'ruby script/generate rspec' will
-# generate spec/spec_helper.rb, which includes the necessary
-# require statements and configuration. This file should
-# be required by all of your spec files.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/autotest/discover.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/autotest/discover.rb
deleted file mode 100644
index 3ac51c1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/autotest/discover.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-Autotest.add_discovery do
-  "rspec" if File.directory?('spec') && ENV['RSPEC']
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/autotest/rspec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/autotest/rspec.rb
deleted file mode 100644
index 8baca3f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/autotest/rspec.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-require 'autotest'
-
-Autotest.add_hook :initialize do |at|
-  at.clear_mappings
-  # watch out: Ruby bug (1.8.6):
-  # %r(/) != /\//
-  at.add_mapping(%r%^spec/.*_spec.rb$%) { |filename, _| 
-    filename 
-  }
-  at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m| 
-    ["spec/#{m[1]}_spec.rb"]
-  }
-  at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) { 
-    at.files_matching %r%^spec/.*_spec\.rb$%
-  }
-end
-
-class RspecCommandError < StandardError; end
-
-class Autotest::Rspec < Autotest
-
-  def initialize
-    super
-    self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m
-    self.completed_re = /\n(?:\e\[\d*m)?\d* examples?/m
-  end
-  
-  def consolidate_failures(failed)
-    filters = new_hash_of_arrays
-    failed.each do |spec, trace|
-      if trace =~ /\n(\.\/)?(.*spec\.rb):[\d]+:\Z?/
-        filters[$2] << spec
-      end
-    end
-    return filters
-  end
-
-  def make_test_cmd(files_to_test)
-    return '' if files_to_test.empty?
-    return "#{ruby} -S #{files_to_test.keys.flatten.join(' ')} #{add_options_if_present}"
-  end
-  
-  def add_options_if_present # :nodoc:
-    File.exist?("spec/spec.opts") ? "-O spec/spec.opts " : ""
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec.rb
deleted file mode 100644
index e410666..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require 'spec/matchers'
-require 'spec/expectations'
-require 'spec/example'
-require 'spec/extensions'
-require 'spec/runner'
-require 'spec/adapters'
-require 'spec/version'
-
-if Object.const_defined?(:Test)
-  require 'spec/interop/test'
-end
-
-module Spec
-  class << self
-    def run?
-      Runner.options.examples_run?
-    end
-
-    def run
-      return true if run?
-      Runner.options.run_examples
-    end
-    
-    def exit?
-      !Object.const_defined?(:Test) || Test::Unit.run?
-    end
-
-    def spec_command?
-      $0.split('/').last == 'spec'
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters.rb
deleted file mode 100644
index 9d77cd2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters.rb
+++ /dev/null
@@ -1 +0,0 @@
-require 'spec/adapters/ruby_engine'
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine.rb
deleted file mode 100644
index edec3b6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require 'spec/adapters/ruby_engine/mri'
-require 'spec/adapters/ruby_engine/rubinius'
-
-module Spec
-  module Adapters
-    module RubyEngine
-    
-      ENGINES = {
-        'mri' => MRI.new,
-        'rbx' => Rubinius.new
-      }
-    
-      def self.engine
-        if Object.const_defined?('RUBY_ENGINE')
-          return Object.const_get('RUBY_ENGINE')
-        else
-          return 'mri'
-        end
-      end
-    
-      def self.adapter
-        return ENGINES[engine]
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine/mri.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine/mri.rb
deleted file mode 100644
index c087367..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine/mri.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Spec
-  module Adapters
-    module RubyEngine
-      class MRI
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine/rubinius.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine/rubinius.rb
deleted file mode 100644
index 6ad619b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/adapters/ruby_engine/rubinius.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module Spec
-  module Adapters
-    module RubyEngine
-      class Rubinius
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example.rb
deleted file mode 100644
index d242eb2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require 'timeout'
-require 'spec/example/before_and_after_hooks'
-require 'spec/example/pending'
-require 'spec/example/module_reopening_fix'
-require 'spec/example/example_group_methods'
-require 'spec/example/example_methods'
-require 'spec/example/example_group'
-require 'spec/example/shared_example_group'
-require 'spec/example/example_group_factory'
-require 'spec/example/errors'
-require 'spec/example/configuration'
-require 'spec/example/example_matcher'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/before_and_after_hooks.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/before_and_after_hooks.rb
deleted file mode 100644
index b7d50b9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/before_and_after_hooks.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-module Spec
-  module Example
-    module BeforeAndAfterHooks
-      # Registers a block to be executed before each example.
-      # This method prepends +block+ to existing before blocks.
-      def prepend_before(*args, &block)
-        scope, options = scope_and_options(*args)
-        parts = before_parts_from_scope(scope)
-        parts.unshift(block)
-      end
-
-      # Registers a block to be executed before each example.
-      # This method appends +block+ to existing before blocks.
-      def append_before(*args, &block)
-        scope, options = scope_and_options(*args)
-        parts = before_parts_from_scope(scope)
-        parts << block
-      end
-      alias_method :before, :append_before
-
-      # Registers a block to be executed after each example.
-      # This method prepends +block+ to existing after blocks.
-      def prepend_after(*args, &block)
-        scope, options = scope_and_options(*args)
-        parts = after_parts_from_scope(scope)
-        parts.unshift(block)
-      end
-      alias_method :after, :prepend_after
-
-      # Registers a block to be executed after each example.
-      # This method appends +block+ to existing after blocks.
-      def append_after(*args, &block)
-        scope, options = scope_and_options(*args)
-        parts = after_parts_from_scope(scope)
-        parts << block
-      end
-
-      def remove_after(scope, &block)
-        after_each_parts.delete(block)
-      end
-
-      # Deprecated. Use before(:each)
-      def setup(&block)
-        before(:each, &block)
-      end
-
-      # Deprecated. Use after(:each)
-      def teardown(&block)
-        after(:each, &block)
-      end
-
-      def before_all_parts # :nodoc:
-        @before_all_parts ||= []
-      end
-
-      def after_all_parts # :nodoc:
-        @after_all_parts ||= []
-      end
-
-      def before_each_parts # :nodoc:
-        @before_each_parts ||= []
-      end
-
-      def after_each_parts # :nodoc:
-        @after_each_parts ||= []
-      end
-      
-    private  
-      
-      def scope_and_options(*args)
-        args, options = args_and_options(*args)
-        scope = (args[0] || :each), options
-      end
-
-      def before_parts_from_scope(scope)
-        case scope
-        when :each; before_each_parts
-        when :all; before_all_parts
-        when :suite; Spec::Runner.options.before_suite_parts
-        end
-      end
-
-      def after_parts_from_scope(scope)
-        case scope
-        when :each; after_each_parts
-        when :all; after_all_parts
-        when :suite; Spec::Runner.options.after_suite_parts
-        end
-      end
-
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/configuration.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/configuration.rb
deleted file mode 100755
index aded9d2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/configuration.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-module Spec
-  module Example
-    class Configuration
-      # Chooses what mock framework to use. Example:
-      #
-      #   Spec::Runner.configure do |config|
-      #     config.mock_with :rspec, :mocha, :flexmock, or :rr
-      #   end
-      #
-      # To use any other mock framework, you'll have to provide your own
-      # adapter. This is simply a module that responds to the following
-      # methods:
-      #
-      #   setup_mocks_for_rspec
-      #   verify_mocks_for_rspec
-      #   teardown_mocks_for_rspec.
-      #
-      # These are your hooks into the lifecycle of a given example. RSpec will
-      # call setup_mocks_for_rspec before running anything else in each
-      # Example. After executing the #after methods, RSpec will then call
-      # verify_mocks_for_rspec and teardown_mocks_for_rspec (this is
-      # guaranteed to run even if there are failures in
-      # verify_mocks_for_rspec).
-      #
-      # Once you've defined this module, you can pass that to mock_with:
-      #
-      #   Spec::Runner.configure do |config|
-      #     config.mock_with MyMockFrameworkAdapter
-      #   end
-      #
-      def mock_with(mock_framework)
-        @mock_framework = case mock_framework
-        when Symbol
-          mock_framework_path(mock_framework.to_s)
-        else
-          mock_framework
-        end
-      end
-      
-      def mock_framework # :nodoc:
-        @mock_framework ||= mock_framework_path("rspec")
-      end
-      
-      # :call-seq:
-      #   include(Some::Helpers)
-      #   include(Some::Helpers, More::Helpers)
-      #   include(My::Helpers, :type => :key)
-      #
-      # Declares modules to be included in multiple example groups
-      # (<tt>describe</tt> blocks). With no :type, the modules listed will be
-      # included in all example groups. Use :type to restrict the inclusion to
-      # a subset of example groups. The value assigned to :type should be a
-      # key that maps to a class that is either a subclass of
-      # Spec::Example::ExampleGroup or extends Spec::Example::ExampleGroupMethods
-      # and includes Spec::Example::ExampleMethods
-      #
-      #   config.include(My::Pony, My::Horse, :type => :farm)
-      #
-      # Only example groups that have that type will get the modules included:
-      #
-      #   describe "Downtown", :type => :city do
-      #     # Will *not* get My::Pony and My::Horse included
-      #   end
-      #
-      #   describe "Old Mac Donald", :type => :farm do
-      #     # *Will* get My::Pony and My::Horse included
-      #   end
-      #
-      def include(*args)
-        include_or_extend(:include, *args)
-      end
-      
-      def extend(*args)
-        include_or_extend(:extend, *args)
-      end
-      
-      def include_or_extend(*args)
-        action = args.shift
-        args << {} unless Hash === args.last
-        modules, options = args_and_options(*args)
-        required_example_group = get_type_from_options(options)
-        required_example_group = required_example_group.to_sym if required_example_group
-        modules.each do |mod|
-          ExampleGroupFactory.get(required_example_group).send(action, mod)
-        end
-      end
-
-      # Defines global predicate matchers. Example:
-      #
-      #   config.predicate_matchers[:swim] = :can_swim?
-      #
-      # This makes it possible to say:
-      #
-      #   person.should swim # passes if person.can_swim? returns true
-      #
-      def predicate_matchers
-        @predicate_matchers ||= {}
-      end
-      
-      # Prepends a global <tt>before</tt> block to all example groups.
-      # See #append_before for filtering semantics.
-      def prepend_before(*args, &proc)
-        scope, options = scope_and_options(*args)
-        example_group = ExampleGroupFactory.get(
-          get_type_from_options(options)
-        )
-        example_group.prepend_before(scope, &proc)
-      end
-      
-      # Appends a global <tt>before</tt> block to all example groups.
-      #
-      # If you want to restrict the block to a subset of all the example
-      # groups then specify this in a Hash as the last argument:
-      #
-      #   config.prepend_before(:all, :type => :farm)
-      #
-      # or
-      #
-      #   config.prepend_before(:type => :farm)
-      #
-      def append_before(*args, &proc)
-        scope, options = scope_and_options(*args)
-        example_group = ExampleGroupFactory.get(
-          get_type_from_options(options)
-        )
-        example_group.append_before(scope, &proc)
-      end
-      alias_method :before, :append_before
-
-      # Prepends a global <tt>after</tt> block to all example groups.
-      # See #append_before for filtering semantics.
-      def prepend_after(*args, &proc)
-        scope, options = scope_and_options(*args)
-        example_group = ExampleGroupFactory.get(
-          get_type_from_options(options)
-        )
-        example_group.prepend_after(scope, &proc)
-      end
-      alias_method :after, :prepend_after
-      
-      # Appends a global <tt>after</tt> block to all example groups.
-      # See #append_before for filtering semantics.
-      def append_after(*args, &proc)
-        scope, options = scope_and_options(*args)
-        example_group = ExampleGroupFactory.get(
-          get_type_from_options(options)
-        )
-        example_group.append_after(scope, &proc)
-      end
-
-    private
-
-      def scope_and_options(*args)
-        args, options = args_and_options(*args)
-        scope = (args[0] || :each), options
-      end
-
-      def get_type_from_options(options)
-        options[:type] || options[:behaviour_type]
-      end
-    
-      def mock_framework_path(framework_name)
-        File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "plugins", "mock_frameworks", framework_name))
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/errors.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/errors.rb
deleted file mode 100644
index 5ecdc17..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/errors.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-module Spec
-  module Example
-    class ExamplePendingError < StandardError
-      attr_reader :pending_caller
-
-      def initialize(message=nil)
-        super
-        @pending_caller = caller[2]
-      end
-    end
-    
-    class NotYetImplementedError < ExamplePendingError
-      MESSAGE = "Not Yet Implemented"
-      RSPEC_ROOT_LIB = File.expand_path(File.dirname(__FILE__) + "/../..")
-      
-      def initialize(backtrace)
-        super(MESSAGE)
-        @pending_caller = pending_caller_from(backtrace)
-      end
-      
-    private
-      
-      def pending_caller_from(backtrace)
-        backtrace.detect {|line| !line.include?(RSPEC_ROOT_LIB) }
-      end
-    end
-
-    class PendingExampleFixedError < StandardError; end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group.rb
deleted file mode 100644
index 6f6611c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-module Spec
-  module Example
-    # Base class for customized example groups. Use this if you
-    # want to make a custom example group.
-    class ExampleGroup
-      extend Spec::Example::ExampleGroupMethods
-      include Spec::Example::ExampleMethods
-
-      def initialize(defined_description, options={}, &implementation)
-        @_options = options
-        @_defined_description = defined_description
-        @_implementation = implementation || pending_implementation
-      end
-      
-    private
-      
-      def pending_implementation
-        error = NotYetImplementedError.new(caller)
-        lambda { raise(error) }
-      end
-    end
-  end
-end
-
-Spec::ExampleGroup = Spec::Example::ExampleGroup
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group_factory.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group_factory.rb
deleted file mode 100755
index 220b325..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group_factory.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-module Spec
-  module Example
-    class ExampleGroupFactory
-      class << self
-        def reset
-          @example_group_types = nil
-          default(ExampleGroup)
-        end
-
-        def all_registered?(example_group_classes)
-          example_group_classes.each do |example_group_class|
-            return false unless registered_or_ancestor_of_registered? example_group_class
-          end
-          return true
-        end
-
-        # Registers an example group class +klass+ with the symbol +type+. For
-        # example:
-        #
-        #   Spec::Example::ExampleGroupFactory.register(:farm, FarmExampleGroup)
-        #
-        # With that you can append a hash with :type => :farm to the describe
-        # method and it will load an instance of FarmExampleGroup.
-        #
-        #   describe Pig, :type => :farm do
-        #     ...
-        #
-        # If you don't use the hash explicitly, <tt>describe</tt> will
-        # implicitly use an instance of FarmExampleGroup for any file loaded
-        # from the <tt>./spec/farm</tt> directory.
-        def register(key, example_group_class)
-          @example_group_types[key] = example_group_class
-        end
-        
-        # Sets the default ExampleGroup class
-        def default(example_group_class)
-          old = @example_group_types
-          @example_group_types = Hash.new(example_group_class)
-          @example_group_types.merge!(old) if old
-        end
-
-        def get(key=nil)
-          if @example_group_types.values.include?(key)
-            key
-          else
-            @example_group_types[key]
-          end
-        end
-        
-        def create_example_group(*args, &block)
-          opts = Hash === args.last ? args.last : {}
-          superclass = determine_superclass(opts)
-          superclass.describe(*args, &block)
-        end
-
-      protected
-
-        def determine_superclass(opts)
-          key = if opts[:type]
-            opts[:type]
-          elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.join('|')})/
-            $2 == '' ? nil : $2.to_sym
-          end
-          get(key)
-        end
-        
-      private
-        
-        def registered_or_ancestor_of_registered? example_group_class
-          registered_types.any? {|registered_type| registered_type.ancestors.include? example_group_class}
-        end
-        
-        def registered_types
-          @example_group_types.values
-        end
-
-      end
-      self.reset
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group_methods.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group_methods.rb
deleted file mode 100644
index df72b9c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_group_methods.rb
+++ /dev/null
@@ -1,368 +0,0 @@
-module Spec
-  module Example
-
-    module ExampleGroupMethods
-      include Spec::Example::BeforeAndAfterHooks
-
-      class << self
-        attr_accessor :matcher_class
-
-        def description_text(*args)
-          args.inject("") do |result, arg|
-            result << " " unless (result == "" || arg.to_s =~ /^(\s|\.|#)/)
-            result << arg.to_s
-          end
-        end
-      end
-
-      attr_reader :description_text, :description_options, :spec_path
-      alias :options :description_options
-      
-      def description_args
-        @description_args ||= []
-      end
-
-      def inherited(klass)
-        super
-        klass.register {}
-        Spec::Runner.register_at_exit_hook
-      end
-      
-      # Makes the describe/it syntax available from a class. For example:
-      #
-      #   class StackSpec < Spec::ExampleGroup
-      #     describe Stack, "with no elements"
-      #
-      #     before
-      #       @stack = Stack.new
-      #     end
-      #
-      #     it "should raise on pop" do
-      #       lambda{ @stack.pop }.should raise_error
-      #     end
-      #   end
-      #
-      def describe(*args, &example_group_block)
-        args << {} unless Hash === args.last
-        if example_group_block
-          options = args.last
-          options[:spec_path] = eval("caller(0)[1]", example_group_block) unless options[:spec_path]
-          if options[:shared]
-            create_shared_example_group(args, example_group_block)
-          else
-            create_nested_example_group(args, example_group_block)
-          end
-        else
-          set_description(*args)
-        end
-      end
-      alias :context :describe
-      
-      def create_shared_example_group(args, example_group_block)
-        SharedExampleGroup.new(*args, &example_group_block)
-      end
-      
-      def create_nested_example_group(args, example_group_block)
-        self.subclass("Subclass") do
-          describe(*args)
-          module_eval(&example_group_block)
-        end
-      end
-      
-      # Use this to pull in examples from shared example groups.
-      # See Spec::Runner for information about shared example groups.
-      def it_should_behave_like(*shared_example_groups)
-        shared_example_groups.each do |group|
-          include_shared_example_group(group)
-        end
-      end
-      
-      # :call-seq:
-      #   predicate_matchers[matcher_name] = method_on_object
-      #   predicate_matchers[matcher_name] = [method1_on_object, method2_on_object]
-      #
-      # Dynamically generates a custom matcher that will match
-      # a predicate on your class. RSpec provides a couple of these
-      # out of the box:
-      #
-      #   exist (or state expectations)
-      #     File.should exist("path/to/file")
-      #
-      #   an_instance_of (for mock argument constraints)
-      #     mock.should_receive(:message).with(an_instance_of(String))
-      #
-      # == Examples
-      #
-      #   class Fish
-      #     def can_swim?
-      #       true
-      #     end
-      #   end
-      #
-      #   describe Fish do
-      #     predicate_matchers[:swim] = :can_swim?
-      #     it "should swim" do
-      #       Fish.new.should swim
-      #     end
-      #   end
-      def predicate_matchers
-        @predicate_matchers ||= {:an_instance_of => :is_a?}
-      end
-
-      # Creates an instance of the current example group class and adds it to
-      # a collection of examples of the current example group.
-      def example(description=nil, options={}, &implementation)
-        e = new(description, options, &implementation)
-        example_objects << e
-        e
-      end
-
-      alias_method :it, :example
-      alias_method :specify, :example
-
-      # Use this to temporarily disable an example.
-      def xexample(description=nil, opts={}, &block)
-        Kernel.warn("Example disabled: #{description}")
-      end
-      
-      alias_method :xit, :xexample
-      alias_method :xspecify, :xexample
-
-      def run
-        examples = examples_to_run
-        reporter.add_example_group(self) unless examples_to_run.empty?
-        return true if examples.empty?
-        return dry_run(examples) if dry_run?
-
-        plugin_mock_framework
-        define_methods_from_predicate_matchers
-
-        success, before_all_instance_variables = run_before_all
-        success, after_all_instance_variables  = execute_examples(success, before_all_instance_variables, examples)
-        success                                = run_after_all(success, after_all_instance_variables)
-      end
-
-      def description
-        result = ExampleGroupMethods.description_text(*description_parts)
-        if result.nil? || result == ""
-          return to_s
-        else
-          result
-        end
-      end
-
-      def described_type
-        description_parts.find {|part| part.is_a?(Module)}
-      end
-
-      def description_parts #:nodoc:
-        parts = []
-        each_ancestor_example_group_class do |example_group_class|
-          parts << example_group_class.description_args
-        end
-        parts.flatten.compact
-      end
-
-      def set_description(*args)
-        args, options = args_and_options(*args)
-        @description_args = args
-        @description_options = options
-        @description_text = ExampleGroupMethods.description_text(*args)
-        @spec_path = File.expand_path(options[:spec_path]) if options[:spec_path]
-        self
-      end
-      
-      def examples #:nodoc:
-        examples = example_objects.dup
-        add_method_examples(examples)
-        Spec::Runner.options.reverse ? examples.reverse : examples
-      end
-
-      def number_of_examples #:nodoc:
-        examples.length
-      end
-
-      # Only used from RSpec's own examples
-      def reset # :nodoc:
-        @before_all_parts = nil
-        @after_all_parts = nil
-        @before_each_parts = nil
-        @after_each_parts = nil
-      end
-
-      def register(&registration_binding_block)
-        @registration_binding_block = registration_binding_block
-        Spec::Runner.options.add_example_group self
-      end
-
-      def unregister #:nodoc:
-        Spec::Runner.options.remove_example_group self
-      end
-
-      def registration_backtrace
-        eval("caller", @registration_binding_block)
-      end
-
-      def run_before_each(example)
-        each_ancestor_example_group_class do |example_group_class|
-          example.eval_each_fail_fast(example_group_class.before_each_parts)
-        end
-      end
-
-      def run_after_each(example)
-        each_ancestor_example_group_class(:superclass_first) do |example_group_class|
-          example.eval_each_fail_slow(example_group_class.after_each_parts)
-        end
-      end
-
-    private
-      def dry_run(examples)
-        examples.each do |example|
-          Spec::Runner.options.reporter.example_started(example)
-          Spec::Runner.options.reporter.example_finished(example)
-        end
-        return true
-      end
-
-      def run_before_all
-        before_all = new("before(:all)")
-        begin
-          each_ancestor_example_group_class do |example_group_class|
-            before_all.eval_each_fail_fast(example_group_class.before_all_parts)
-          end
-          return [true, before_all.instance_variable_hash]
-        rescue Exception => e
-          reporter.failure(before_all, e)
-          return [false, before_all.instance_variable_hash]
-        end
-      end
-
-      def execute_examples(success, instance_variables, examples)
-        return [success, instance_variables] unless success
-
-        after_all_instance_variables = instance_variables
-        examples.each do |example_group_instance|
-          success &= example_group_instance.execute(Spec::Runner.options, instance_variables)
-          after_all_instance_variables = example_group_instance.instance_variable_hash
-        end
-        return [success, after_all_instance_variables]
-      end
-
-      def run_after_all(success, instance_variables)
-        after_all = new("after(:all)")
-        after_all.set_instance_variables_from_hash(instance_variables)
-        each_ancestor_example_group_class(:superclass_first) do |example_group_class|
-          after_all.eval_each_fail_slow(example_group_class.after_all_parts)
-        end
-        return success
-      rescue Exception => e
-        reporter.failure(after_all, e)
-        return false
-      end
-
-      def examples_to_run
-        all_examples = examples
-        return all_examples unless specified_examples?
-        all_examples.reject do |example|
-          matcher = ExampleGroupMethods.matcher_class.
-            new(description.to_s, example.description)
-          !matcher.matches?(specified_examples)
-        end
-      end
-
-      def specified_examples?
-        specified_examples && !specified_examples.empty?
-      end
-
-      def specified_examples
-        Spec::Runner.options.examples
-      end
-
-      def reporter
-        Spec::Runner.options.reporter
-      end
-
-      def dry_run?
-        Spec::Runner.options.dry_run
-      end
-
-      def example_objects
-        @example_objects ||= []
-      end
-
-      def each_ancestor_example_group_class(superclass_last=false)
-        classes = []
-        current_class = self
-        while is_example_group_class?(current_class)
-          superclass_last ? classes << current_class : classes.unshift(current_class)
-          current_class = current_class.superclass
-        end
-        
-        classes.each do |example_group|
-          yield example_group
-        end
-      end
-
-      def is_example_group_class?(klass)
-        klass.kind_of?(ExampleGroupMethods) && klass.included_modules.include?(ExampleMethods)
-      end
-
-      def plugin_mock_framework
-        case mock_framework = Spec::Runner.configuration.mock_framework
-        when Module
-          include mock_framework
-        else
-          require Spec::Runner.configuration.mock_framework
-          include Spec::Plugins::MockFramework
-        end
-      end
-
-      def define_methods_from_predicate_matchers # :nodoc:
-        all_predicate_matchers = predicate_matchers.merge(
-          Spec::Runner.configuration.predicate_matchers
-        )
-        all_predicate_matchers.each_pair do |matcher_method, method_on_object|
-          define_method matcher_method do |*args|
-            eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
-          end
-        end
-      end
-
-      def add_method_examples(examples)
-        instance_methods.sort.each do |method_name|
-          if example_method?(method_name)
-            examples << new(method_name) do
-              __send__(method_name)
-            end
-          end
-        end
-      end
-
-      def example_method?(method_name)
-        should_method?(method_name)
-      end
-
-      def should_method?(method_name)
-        !(method_name =~ /^should(_not)?$/) &&
-        method_name =~ /^should/ && (
-          [-1,0].include?(instance_method(method_name).arity)
-        )
-      end
-
-      def include_shared_example_group(shared_example_group)
-        case shared_example_group
-        when SharedExampleGroup
-          include shared_example_group
-        else
-          example_group = SharedExampleGroup.find_shared_example_group(shared_example_group)
-          unless example_group
-            raise RuntimeError.new("Shared Example Group '#{shared_example_group}' can not be found")
-          end
-          include(example_group)
-        end
-      end
-
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_matcher.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_matcher.rb
deleted file mode 100755
index 6e3415a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_matcher.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-module Spec
-  module Example
-    class ExampleMatcher
-      def initialize(example_group_description, example_name)
-        @example_group_description = example_group_description
-        @example_name = example_name
-      end
-      
-      def matches?(specified_examples)
-        specified_examples.each do |specified_example|
-          return true if matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example)
-        end
-        false
-      end
-      
-      protected
-      def matches_literal_example?(specified_example)
-        specified_example =~ /(^#{example_group_regex} #{example_regexp}$|^#{example_group_regex}$|^#{example_group_with_before_all_regexp}$|^#{example_regexp}$)/
-      end
-
-      def matches_example_not_considering_modules?(specified_example)
-        specified_example =~ /(^#{example_group_regex_not_considering_modules} #{example_regexp}$|^#{example_group_regex_not_considering_modules}$|^#{example_regexp}$)/
-      end
-
-      def example_group_regex
-        Regexp.escape(@example_group_description)
-      end
-
-      def example_group_with_before_all_regexp
-        Regexp.escape("#{@example_group_description} before(:all)")
-      end
-
-      def example_group_regex_not_considering_modules
-        Regexp.escape(@example_group_description.split('::').last)
-      end
-
-      def example_regexp
-        Regexp.escape(@example_name)
-      end
-    end
-
-    ExampleGroupMethods.matcher_class = ExampleMatcher
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_methods.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_methods.rb
deleted file mode 100644
index 996e1b4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/example_methods.rb
+++ /dev/null
@@ -1,105 +0,0 @@
-module Spec
-  module Example
-    module ExampleMethods
-      
-      extend ModuleReopeningFix
-      
-      def execute(options, instance_variables)
-        options.reporter.example_started(self)
-        set_instance_variables_from_hash(instance_variables)
-        
-        execution_error = nil
-        Timeout.timeout(options.timeout) do
-          begin
-            before_each_example
-            eval_block
-          rescue Exception => e
-            execution_error ||= e
-          end
-          begin
-            after_each_example
-          rescue Exception => e
-            execution_error ||= e
-          end
-        end
-
-        options.reporter.example_finished(self, execution_error)
-        success = execution_error.nil? || ExamplePendingError === execution_error
-      end
-
-      def instance_variable_hash
-        instance_variables.inject({}) do |variable_hash, variable_name|
-          variable_hash[variable_name] = instance_variable_get(variable_name)
-          variable_hash
-        end
-      end
-
-      def violated(message="")
-        raise Spec::Expectations::ExpectationNotMetError.new(message)
-      end
-
-      def eval_each_fail_fast(procs) #:nodoc:
-        procs.each do |proc|
-          instance_eval(&proc)
-        end
-      end
-
-      def eval_each_fail_slow(procs) #:nodoc:
-        first_exception = nil
-        procs.each do |proc|
-          begin
-            instance_eval(&proc)
-          rescue Exception => e
-            first_exception ||= e
-          end
-        end
-        raise first_exception if first_exception
-      end
-
-      def description
-        @_defined_description || ::Spec::Matchers.generated_description || "NO NAME"
-      end
-      
-      def options
-        @_options
-      end
-
-      def __full_description
-        "#{self.class.description} #{self.description}"
-      end
-      
-      def set_instance_variables_from_hash(ivars)
-        ivars.each do |variable_name, value|
-          # Ruby 1.9 requires variable.to_s on the next line
-          unless ['@_implementation', '@_defined_description', '@_matcher_description', '@method_name'].include?(variable_name.to_s)
-            instance_variable_set variable_name, value
-          end
-        end
-      end
-
-      def eval_block
-        instance_eval(&@_implementation)
-      end
-
-      def implementation_backtrace
-        eval("caller", @_implementation)
-      end
-      
-      protected
-      include Matchers
-      include Pending
-      
-      def before_each_example
-        setup_mocks_for_rspec
-        self.class.run_before_each(self)
-      end
-
-      def after_each_example
-        self.class.run_after_each(self)
-        verify_mocks_for_rspec
-      ensure
-        teardown_mocks_for_rspec
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/module_reopening_fix.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/module_reopening_fix.rb
deleted file mode 100644
index dc01dd6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/module_reopening_fix.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-module Spec
-  module Example
-    # This is a fix for ...Something in Ruby 1.8.6??... (Someone fill in here please - Aslak)
-    module ModuleReopeningFix
-      def child_modules
-        @child_modules ||= []
-      end
-
-      def included(mod)
-        child_modules << mod
-      end
-
-      def include(mod)
-        super
-        child_modules.each do |child_module|
-          child_module.__send__(:include, mod)
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/pending.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/pending.rb
deleted file mode 100644
index b1f27c8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/pending.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Spec
-  module Example      
-    module Pending
-      def pending(message = "TODO")
-        if block_given?
-          begin
-            yield
-          rescue Exception => e
-            raise Spec::Example::ExamplePendingError.new(message)
-          end
-          raise Spec::Example::PendingExampleFixedError.new("Expected pending '#{message}' to fail. No Error was raised.")
-        else
-          raise Spec::Example::ExamplePendingError.new(message)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/shared_example_group.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/shared_example_group.rb
deleted file mode 100644
index d9aef15..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/example/shared_example_group.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-module Spec
-  module Example
-    class SharedExampleGroup < Module
-      module ClassMethods
-        def add_shared_example_group(new_example_group)
-          guard_against_redefining_existing_example_group(new_example_group)
-          shared_example_groups << new_example_group
-        end
-
-        def find_shared_example_group(example_group_description)
-          shared_example_groups.find do |b|
-            b.description == example_group_description
-          end
-        end
-
-        def shared_example_groups
-          @shared_example_groups ||= []
-        end
-
-        private
-        def guard_against_redefining_existing_example_group(new_example_group)
-          existing_example_group = find_shared_example_group(new_example_group.description)
-          return unless existing_example_group
-          return if new_example_group.equal?(existing_example_group)
-          return if spec_path(new_example_group) == spec_path(existing_example_group)
-          raise ArgumentError.new("Shared Example '#{existing_example_group.description}' already exists")
-        end
-
-        def spec_path(example_group)
-          File.expand_path(example_group.spec_path)
-        end
-      end
-
-      extend ClassMethods
-      include ExampleGroupMethods
-
-      def initialize(*args, &example_group_block)
-        describe(*args)
-        @example_group_block = example_group_block
-        self.class.add_shared_example_group(self)
-      end
-
-      def included(mod) # :nodoc:
-        mod.module_eval(&@example_group_block)
-      end
-
-      def each_ancestor_example_group_class(superclass_last=false)
-        yield self
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations.rb
deleted file mode 100644
index 65ea474..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'spec/matchers'
-require 'spec/expectations/errors'
-require 'spec/expectations/extensions'
-require 'spec/expectations/handler'
-
-module Spec
-  
-  # Spec::Expectations lets you set expectations on your objects.
-  #
-  #   result.should == 37
-  #   team.should have(11).players_on_the_field
-  #
-  # == How Expectations work.
-  #
-  # Spec::Expectations adds two methods to Object:
-  #
-  #   should(matcher=nil)
-  #   should_not(matcher=nil)
-  #
-  # Both methods take an optional Expression Matcher (See Spec::Matchers).
-  #
-  # When +should+ receives an Expression Matcher, it calls <tt>matches?(self)</tt>. If
-  # it returns +true+, the spec passes and execution continues. If it returns
-  # +false+, then the spec fails with the message returned by <tt>matcher.failure_message</tt>.
-  #
-  # Similarly, when +should_not+ receives a matcher, it calls <tt>matches?(self)</tt>. If
-  # it returns +false+, the spec passes and execution continues. If it returns
-  # +true+, then the spec fails with the message returned by <tt>matcher.negative_failure_message</tt>.
-  #
-  # RSpec ships with a standard set of useful matchers, and writing your own
-  # matchers is quite simple. See Spec::Matchers for details.
-  module Expectations
-    class << self
-      attr_accessor :differ
-
-      # raises a Spec::Expectations::ExpectationNotMetError with message
-      #
-      # When a differ has been assigned and fail_with is passed
-      # <code>expected</code> and <code>target</code>, passes them
-      # to the differ to append a diff message to the failure message.
-      def fail_with(message, expected=nil, target=nil) # :nodoc:
-        if Array === message && message.length == 3
-          message, expected, target = message[0], message[1], message[2]
-        end
-        unless (differ.nil? || expected.nil? || target.nil?)
-          if expected.is_a?(String)
-            message << "\nDiff:" << self.differ.diff_as_string(target.to_s, expected)
-          elsif !target.is_a?(Proc)
-            message << "\nDiff:" << self.differ.diff_as_object(target, expected)
-          end
-        end
-        Kernel::raise(Spec::Expectations::ExpectationNotMetError.new(message))
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/differs/default.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/differs/default.rb
deleted file mode 100644
index 74b59bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/differs/default.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-begin
-  require 'rubygems'
-  require 'diff/lcs' #necessary due to loading bug on some machines - not sure why - DaC
-  require 'diff/lcs/hunk'
-rescue LoadError ; raise "You must gem install diff-lcs to use diffing" ; end
-
-require 'pp'
-
-module Spec
-  module Expectations
-    module Differs
-
-      # TODO add some rdoc
-      class Default
-        def initialize(options)
-          @options = options
-        end
-
-        # This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
-        def diff_as_string(data_new, data_old)
-          data_old = data_old.split(/\n/).map! { |e| e.chomp }
-          data_new = data_new.split(/\n/).map! { |e| e.chomp }
-          output = ""
-          diffs = Diff::LCS.diff(data_old, data_new)
-          return output if diffs.empty?
-          oldhunk = hunk = nil  
-          file_length_difference = 0
-          diffs.each do |piece|
-            begin
-              hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, context_lines,
-                                         file_length_difference)
-              file_length_difference = hunk.file_length_difference      
-              next unless oldhunk      
-              # Hunks may overlap, which is why we need to be careful when our
-              # diff includes lines of context. Otherwise, we might print
-              # redundant lines.
-              if (context_lines > 0) and hunk.overlaps?(oldhunk)
-                hunk.unshift(oldhunk)
-              else
-                output << oldhunk.diff(format)
-              end
-            ensure
-              oldhunk = hunk
-              output << "\n"
-            end
-          end  
-          #Handle the last remaining hunk
-          output << oldhunk.diff(format) << "\n"
-        end  
-
-        def diff_as_object(target,expected)
-          diff_as_string(PP.pp(target,""), PP.pp(expected,""))
-        end
-
-        protected
-        def format
-          @options.diff_format
-        end
-
-        def context_lines
-          @options.context_lines
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/errors.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/errors.rb
deleted file mode 100644
index 1fabd10..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/errors.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-module Spec
-  module Expectations
-    # If Test::Unit is loaed, we'll use its error as baseclass, so that Test::Unit
-    # will report unmet RSpec expectations as failures rather than errors.
-    superclass = ['Test::Unit::AssertionFailedError', '::StandardError'].map do |c|
-      eval(c) rescue nil
-    end.compact.first
-    
-    class ExpectationNotMetError < superclass
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions.rb
deleted file mode 100644
index 60c9b9e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require 'spec/expectations/extensions/object'
-require 'spec/expectations/extensions/string_and_symbol'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions/object.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions/object.rb
deleted file mode 100644
index 66dc60e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions/object.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-module Spec
-  module Expectations
-    # rspec adds #should and #should_not to every Object (and,
-    # implicitly, every Class).
-    module ObjectExpectations
-      # :call-seq:
-      #   should(matcher)
-      #   should == expected
-      #   should === expected
-      #   should =~ expected
-      #
-      #   receiver.should(matcher)
-      #     => Passes if matcher.matches?(receiver)
-      #
-      #   receiver.should == expected #any value
-      #     => Passes if (receiver == expected)
-      #
-      #   receiver.should === expected #any value
-      #     => Passes if (receiver === expected)
-      #
-      #   receiver.should =~ regexp
-      #     => Passes if (receiver =~ regexp)
-      #
-      # See Spec::Matchers for more information about matchers
-      #
-      # == Warning
-      #
-      # NOTE that this does NOT support receiver.should != expected.
-      # Instead, use receiver.should_not == expected
-      def should(matcher=nil, &block)
-        ExpectationMatcherHandler.handle_matcher(self, matcher, &block)
-      end
-
-      # :call-seq:
-      #   should_not(matcher)
-      #   should_not == expected
-      #   should_not === expected
-      #   should_not =~ expected
-      #
-      #   receiver.should_not(matcher)
-      #     => Passes unless matcher.matches?(receiver)
-      #
-      #   receiver.should_not == expected
-      #     => Passes unless (receiver == expected)
-      #
-      #   receiver.should_not === expected
-      #     => Passes unless (receiver === expected)
-      #
-      #   receiver.should_not =~ regexp
-      #     => Passes unless (receiver =~ regexp)
-      #
-      # See Spec::Matchers for more information about matchers
-      def should_not(matcher=nil, &block)
-        NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block)
-      end
-
-    end
-  end
-end
-
-class Object
-  include Spec::Expectations::ObjectExpectations
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions/string_and_symbol.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions/string_and_symbol.rb
deleted file mode 100644
index 29cfbdd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/extensions/string_and_symbol.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-module Spec
-  module Expectations
-    module StringHelpers
-      def starts_with?(prefix)
-        to_s[0..(prefix.to_s.length - 1)] == prefix.to_s
-      end
-    end
-  end
-end
-
-class String
-  include Spec::Expectations::StringHelpers
-end
-
-class Symbol
-  include Spec::Expectations::StringHelpers
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/handler.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/handler.rb
deleted file mode 100644
index c5f1efc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/expectations/handler.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-module Spec
-  module Expectations
-    class InvalidMatcherError < ArgumentError; end        
-    
-    class ExpectationMatcherHandler        
-      class << self
-        def handle_matcher(actual, matcher, &block)
-          ::Spec::Matchers.last_should = "should"
-          return Spec::Matchers::PositiveOperatorMatcher.new(actual) if matcher.nil?
-
-          unless matcher.respond_to?(:matches?)
-            raise InvalidMatcherError, "Expected a matcher, got #{matcher.inspect}."
-          end
-          
-          match = matcher.matches?(actual, &block)
-          ::Spec::Matchers.last_matcher = matcher
-          Spec::Expectations.fail_with(matcher.failure_message) unless match
-          match
-        end
-      end
-    end
-
-    class NegativeExpectationMatcherHandler
-      class << self
-        def handle_matcher(actual, matcher, &block)
-          ::Spec::Matchers.last_should = "should not"
-          return Spec::Matchers::NegativeOperatorMatcher.new(actual) if matcher.nil?
-          
-          unless matcher.respond_to?(:matches?)
-            raise InvalidMatcherError, "Expected a matcher, got #{matcher.inspect}."
-          end
-
-          unless matcher.respond_to?(:negative_failure_message)
-            Spec::Expectations.fail_with(
-<<-EOF
-Matcher does not support should_not.
-See Spec::Matchers for more information
-about matchers.
-EOF
-)
-          end
-          match = matcher.matches?(actual, &block)
-          ::Spec::Matchers.last_matcher = matcher
-          Spec::Expectations.fail_with(matcher.negative_failure_message) if match
-          match
-        end
-      end
-    end
-
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions.rb
deleted file mode 100755
index 715bb49..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'spec/extensions/object'
-require 'spec/extensions/class'
-require 'spec/extensions/main'
-require 'spec/extensions/metaclass'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/class.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/class.rb
deleted file mode 100644
index 30730f8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/class.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-class Class
-  # Creates a new subclass of self, with a name "under" our own name.
-  # Example:
-  #
-  #   x = Foo::Bar.subclass('Zap'){}
-  #   x.name # => Foo::Bar::Zap_1
-  #   x.superclass.name # => Foo::Bar
-  def subclass(base_name, &body)
-    klass = Class.new(self)
-    class_name = "#{base_name}_#{class_count!}"
-    instance_eval do
-      const_set(class_name, klass)
-    end
-    klass.instance_eval(&body)
-    klass
-  end
-
-  private
-  def class_count!
-    @class_count ||= 0
-    @class_count += 1
-    @class_count
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/main.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/main.rb
deleted file mode 100644
index 0236de4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/main.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-module Spec
-  module Extensions
-    module Main
-      # Creates and returns a class that includes the ExampleGroupMethods
-      # module. Which ExampleGroup type is created depends on the directory of the file
-      # calling this method. For example, Spec::Rails will use different
-      # classes for specs living in <tt>spec/models</tt>,
-      # <tt>spec/helpers</tt>, <tt>spec/views</tt> and
-      # <tt>spec/controllers</tt>.
-      #
-      # It is also possible to override autodiscovery of the example group
-      # type with an options Hash as the last argument:
-      #
-      #   describe "name", :type => :something_special do ...
-      #
-      # The reason for using different behaviour classes is to have different
-      # matcher methods available from within the <tt>describe</tt> block.
-      #
-      # See Spec::Example::ExampleGroupFactory#register for details about how to
-      # register special implementations.
-      #
-      def describe(*args, &block)
-        raise ArgumentError if args.empty?
-        raise ArgumentError unless block
-        args << {} unless Hash === args.last
-        args.last[:spec_path] = File.expand_path(caller(0)[1])
-        Spec::Example::ExampleGroupFactory.create_example_group(*args, &block)
-      end
-      alias :context :describe
-      
-      # Creates an example group that can be shared by other example groups
-      #
-      # == Examples
-      #
-      #  share_examples_for "All Editions" do
-      #    it "all editions behaviour" ...
-      #  end
-      #
-      #  describe SmallEdition do
-      #    it_should_behave_like "All Editions"
-      #  
-      #    it "should do small edition stuff" do
-      #      ...
-      #    end
-      #  end
-      def share_examples_for(name, &block)
-        describe(name, :shared => true, &block)
-      end
-      
-      alias :shared_examples_for :share_examples_for
-      
-      # Creates a Shared Example Group and assigns it to a constant
-      #
-      #  share_as :AllEditions do
-      #    it "should do all editions stuff" ...
-      #  end
-      #
-      #  describe SmallEdition do
-      #    it_should_behave_like AllEditions
-      #  
-      #    it "should do small edition stuff" do
-      #      ...
-      #    end
-      #  end
-      #
-      # And, for those of you who prefer to use something more like Ruby, you
-      # can just include the module directly
-      #
-      #  describe SmallEdition do
-      #    include AllEditions
-      #  
-      #    it "should do small edition stuff" do
-      #      ...
-      #    end
-      #  end
-      def share_as(name, &block)
-        begin
-          Object.const_set(name, share_examples_for(name, &block))
-        rescue NameError => e
-          raise NameError.new(e.message + "\nThe first argument to share_as must be a legal name for a constant\n")
-        end
-      end
-    end
-  end
-end
-
-include Spec::Extensions::Main
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/metaclass.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/metaclass.rb
deleted file mode 100644
index acf9feb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/metaclass.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-module Spec
-  module MetaClass
-    def metaclass
-      class << self; self; end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/object.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/object.rb
deleted file mode 100755
index 0b8c26f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/extensions/object.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-class Object
-  def args_and_options(*args)
-    options = Hash === args.last ? args.pop : {}
-    return args, options
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test.rb
deleted file mode 100644
index afa1613..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require 'test/unit'
-require 'test/unit/testresult'
-
-require 'spec/interop/test/unit/testcase'
-require 'spec/interop/test/unit/testsuite_adapter'
-require 'spec/interop/test/unit/autorunner'
-require 'spec/interop/test/unit/testresult'
-require 'spec/interop/test/unit/ui/console/testrunner'
-
-Spec::Example::ExampleGroupFactory.default(Test::Unit::TestCase)
-
-Test::Unit.run = true
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/autorunner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/autorunner.rb
deleted file mode 100644
index 3944e69..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/autorunner.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-class Test::Unit::AutoRunner
-  remove_method :process_args
-  def process_args(argv)
-    true
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testcase.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testcase.rb
deleted file mode 100644
index db1a681..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testcase.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-require 'test/unit/testcase'
-
-module Test
-  module Unit
-    # This extension of the standard Test::Unit::TestCase makes RSpec
-    # available from within, so that you can do things like:
-    #
-    # require 'test/unit'
-    # require 'spec'
-    #
-    # class MyTest < Test::Unit::TestCase
-    #   it "should work with Test::Unit assertions" do
-    #     assert_equal 4, 2+1
-    #   end
-    #
-    #   def test_should_work_with_rspec_expectations
-    #     (3+1).should == 5
-    #   end
-    # end
-    #
-    # See also Spec::Example::ExampleGroup
-    class TestCase
-      extend Spec::Example::ExampleGroupMethods
-      include Spec::Example::ExampleMethods
-
-      before(:each) {setup}
-      after(:each) {teardown}
-
-      class << self
-        def suite
-          Test::Unit::TestSuiteAdapter.new(self)
-        end
-
-        def example_method?(method_name)
-          should_method?(method_name) || test_method?(method_name)
-        end
-
-        def test_method?(method_name)
-          method_name =~ /^test[_A-Z]./ && (
-            instance_method(method_name).arity == 0 ||
-            instance_method(method_name).arity == -1
-          )
-        end
-      end
-
-      def initialize(defined_description, options={}, &implementation)
-        @_defined_description = defined_description
-        
-        # TODO - examples fail in rspec-rails if we remove "|| pending_implementation"
-        #      - find a way to fail without it in rspec's code examples
-        @_implementation = implementation || pending_implementation
-
-        @_result = ::Test::Unit::TestResult.new
-        # @method_name is important to set here because it "complies" with Test::Unit's interface.
-        # Some Test::Unit extensions depend on @method_name being present.
-        @method_name = @_defined_description
-      end
-
-      def run(ignore_this_argument=nil)
-        super()
-      end
-
-    private
-
-      def pending_implementation
-        error = Spec::Example::NotYetImplementedError.new(caller)
-        lambda { raise(error) }
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testresult.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testresult.rb
deleted file mode 100644
index 1386dc7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testresult.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-class Test::Unit::TestResult
-  alias_method :tu_passed?, :passed?
-  def passed?
-    return tu_passed? & ::Spec.run
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testsuite_adapter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testsuite_adapter.rb
deleted file mode 100644
index 7c0ed09..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/testsuite_adapter.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-module Test
-  module Unit
-    class TestSuiteAdapter < TestSuite
-      attr_reader :example_group, :examples
-      alias_method :tests, :examples
-      def initialize(example_group)
-        @example_group = example_group
-        @examples = example_group.examples
-      end
-
-      def name
-        example_group.description
-      end
-
-      def run(*args)
-        return true unless args.empty?
-        example_group.run
-      end
-
-      def size
-        example_group.number_of_examples
-      end
-
-      def delete(example)
-        examples.delete example
-      end
-
-      def empty?
-        examples.empty?
-      end
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/ui/console/testrunner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/ui/console/testrunner.rb
deleted file mode 100644
index 8e9995e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/interop/test/unit/ui/console/testrunner.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require 'test/unit/ui/console/testrunner'
-
-module Test
-  module Unit
-    module UI
-      module Console
-        class TestRunner
-
-          alias_method :started_without_rspec, :started
-          def started_with_rspec(result)
-            @result = result
-            @need_to_output_started = true
-          end
-          alias_method :started, :started_with_rspec
-
-          alias_method :test_started_without_rspec, :test_started
-          def test_started_with_rspec(name)
-            if @need_to_output_started
-              if @rspec_io
-                @rspec_io.rewind
-                output(@rspec_io.read)
-              end
-              output("Started")
-              @need_to_output_started = false
-            end
-            test_started_without_rspec(name)
-          end
-          alias_method :test_started, :test_started_with_rspec
-
-          alias_method :test_finished_without_rspec, :test_finished
-          def test_finished_with_rspec(name)
-            test_finished_without_rspec(name)
-            @ran_test = true
-          end
-          alias_method :test_finished, :test_finished_with_rspec
-
-          alias_method :finished_without_rspec, :finished
-          def finished_with_rspec(elapsed_time)
-            @ran_test ||= false
-            if @ran_test
-              finished_without_rspec(elapsed_time)
-            end
-          end
-          alias_method :finished, :finished_with_rspec
-          
-          alias_method :setup_mediator_without_rspec, :setup_mediator
-          def setup_mediator_with_rspec
-            orig_io = @io
-            @io = StringIO.new
-            setup_mediator_without_rspec
-          ensure
-            @rspec_io = @io
-            @io = orig_io
-          end
-          alias_method :setup_mediator, :setup_mediator_with_rspec
-          
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers.rb
deleted file mode 100644
index 16e7eee..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers.rb
+++ /dev/null
@@ -1,162 +0,0 @@
-require 'spec/matchers/simple_matcher'
-require 'spec/matchers/be'
-require 'spec/matchers/be_close'
-require 'spec/matchers/change'
-require 'spec/matchers/eql'
-require 'spec/matchers/equal'
-require 'spec/matchers/exist'
-require 'spec/matchers/has'
-require 'spec/matchers/have'
-require 'spec/matchers/include'
-require 'spec/matchers/match'
-require 'spec/matchers/raise_error'
-require 'spec/matchers/respond_to'
-require 'spec/matchers/satisfy'
-require 'spec/matchers/throw_symbol'
-require 'spec/matchers/operator_matcher'
-
-module Spec
-
-  # RSpec ships with a number of useful Expression Matchers. An Expression Matcher
-  # is any object that responds to the following methods:
-  #
-  #   matches?(actual)
-  #   failure_message
-  #   negative_failure_message #optional
-  #   description #optional
-  #
-  # See Spec::Expectations to learn how to use these as Expectation Matchers.
-  # See Spec::Mocks to learn how to use them as Mock Argument Constraints.
-  #
-  # == Predicates
-  #
-  # In addition to those Expression Matchers that are defined explicitly, RSpec will
-  # create custom Matchers on the fly for any arbitrary predicate, giving your specs
-  # a much more natural language feel. 
-  #
-  # A Ruby predicate is a method that ends with a "?" and returns true or false.
-  # Common examples are +empty?+, +nil?+, and +instance_of?+.
-  #
-  # All you need to do is write +should be_+ followed by the predicate without
-  # the question mark, and RSpec will figure it out from there. For example:
-  #
-  #   [].should be_empty => [].empty? #passes
-  #   [].should_not be_empty => [].empty? #fails
-  #
-  # In addtion to prefixing the predicate matchers with "be_", you can also use "be_a_"
-  # and "be_an_", making your specs read much more naturally:
-  #
-  #   "a string".should be_an_instance_of(String) =>"a string".instance_of?(String) #passes
-  #
-  #   3.should be_a_kind_of(Fixnum) => 3.kind_of?(Numeric) #passes
-  #   3.should be_a_kind_of(Numeric) => 3.kind_of?(Numeric) #passes
-  #   3.should be_an_instance_of(Fixnum) => 3.instance_of?(Fixnum) #passes
-  #   3.should_not be_instance_of(Numeric) => 3.instance_of?(Numeric) #fails
-  #
-  # RSpec will also create custom matchers for predicates like +has_key?+. To
-  # use this feature, just state that the object should have_key(:key) and RSpec will
-  # call has_key?(:key) on the target. For example:
-  #
-  #   {:a => "A"}.should have_key(:a) => {:a => "A"}.has_key?(:a) #passes
-  #   {:a => "A"}.should have_key(:b) => {:a => "A"}.has_key?(:b) #fails
-  #
-  # You can use this feature to invoke any predicate that begins with "has_", whether it is
-  # part of the Ruby libraries (like +Hash#has_key?+) or a method you wrote on your own class.
-  #
-  # == Custom Expectation Matchers
-  #
-  # When you find that none of the stock Expectation Matchers provide a natural
-  # feeling expectation, you can very easily write your own.
-  #
-  # For example, imagine that you are writing a game in which players can
-  # be in various zones on a virtual board. To specify that bob should
-  # be in zone 4, you could say:
-  #
-  #   bob.current_zone.should eql(Zone.new("4"))
-  #
-  # But you might find it more expressive to say:
-  #
-  #   bob.should be_in_zone("4")
-  #
-  # and/or
-  #
-  #   bob.should_not be_in_zone("3")
-  #
-  # To do this, you would need to write a class like this:
-  #
-  #   class BeInZone
-  #     def initialize(expected)
-  #       @expected = expected
-  #     end
-  #     def matches?(target)
-  #       @target = target
-  #       @target.current_zone.eql?(Zone.new(@expected))
-  #     end
-  #     def failure_message
-  #       "expected #{@target.inspect} to be in Zone #{@expected}"
-  #     end
-  #     def negative_failure_message
-  #       "expected #{@target.inspect} not to be in Zone #{@expected}"
-  #     end
-  #   end
-  #
-  # ... and a method like this:
-  #
-  #   def be_in_zone(expected)
-  #     BeInZone.new(expected)
-  #   end
-  #
-  # And then expose the method to your specs. This is normally done
-  # by including the method and the class in a module, which is then
-  # included in your spec:
-  #
-  #   module CustomGameMatchers
-  #     class BeInZone
-  #       ...
-  #     end
-  #
-  #     def be_in_zone(expected)
-  #       ...
-  #     end
-  #   end
-  #
-  #   describe "Player behaviour" do
-  #     include CustomGameMatchers
-  #     ...
-  #   end
-  #
-  # or you can include in globally in a spec_helper.rb file <tt>require</tt>d
-  # from your spec file(s):
-  #
-  #   Spec::Runner.configure do |config|
-  #     config.include(CustomGameMatchers)
-  #   end
-  #
-  module Matchers
-    module ModuleMethods
-      attr_accessor :last_matcher, :last_should
-
-      def clear_generated_description
-        self.last_matcher = nil
-        self.last_should = nil
-      end
-      
-      def generated_description
-        last_should.nil? ? nil :
-          "#{last_should} #{last_matcher.respond_to?(:description) ? last_matcher.description : 'NO NAME'}"
-      end
-    end
-
-    extend ModuleMethods
-
-    def method_missing(sym, *args, &block) # :nodoc:
-      return Matchers::Be.new(sym, *args) if sym.starts_with?("be_")
-      return Matchers::Has.new(sym, *args) if sym.starts_with?("have_")
-      super
-    end
-
-    class MatcherError < StandardError
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/be.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/be.rb
deleted file mode 100644
index 0f94677..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/be.rb
+++ /dev/null
@@ -1,221 +0,0 @@
-module Spec
-  module Matchers
-    
-    class Be #:nodoc:
-      def initialize(*args)
-        if args.empty?
-          @expected = :satisfy_if
-        else
-          @expected = parse_expected(args.shift)
-        end
-        @args = args
-        @comparison = ""
-      end
-      
-      def matches?(given)
-        @given = given
-        if handling_predicate?
-          begin
-            return @result = given.__send__(predicate, *@args)
-          rescue => predicate_error
-            # This clause should be empty, but rcov will not report it as covered
-            # unless something (anything) is executed within the clause
-            rcov_error_report = "http://eigenclass.org/hiki.rb?rcov-0.8.0"
-          end
-
-          begin
-            return @result = given.__send__(present_tense_predicate, *@args)
-          rescue
-            raise predicate_error
-          end
-        else
-          return match_or_compare
-        end
-      end
-      
-      def failure_message
-        return "expected #{@comparison}#{expected}, got #{@given.inspect}" unless handling_predicate?
-        return "expected #{predicate}#{args_to_s} to return true, got #{@result.inspect}"
-      end
-      
-      def negative_failure_message
-        return "expected not #{expected}, got #{@given.inspect}" unless handling_predicate?
-        return "expected #{predicate}#{args_to_s} to return false, got #{@result.inspect}"
-      end
-      
-      def expected
-        return "if to be satisfied" if @expected == :satisfy_if
-        return true if @expected == :true
-        return false if @expected == :false
-        return "nil" if @expected == :nil
-        return @expected.inspect
-      end
-      
-      def match_or_compare
-        return @given ? true : false if @expected == :satisfy_if
-        return @given == true if @expected == :true
-        return @given == false if @expected == :false
-        return @given.nil? if @expected == :nil
-        return @given < @expected if @less_than
-        return @given <= @expected if @less_than_or_equal
-        return @given >= @expected if @greater_than_or_equal
-        return @given > @expected if @greater_than
-        return @given == @expected if @double_equal
-        return @given === @expected if @triple_equal
-        return @given.equal?(@expected)
-      end
-      
-      def ==(expected)
-        @prefix = "be "
-        @double_equal = true
-        @comparison = "== "
-        @expected = expected
-        self
-      end
-
-      def ===(expected)
-        @prefix = "be "
-        @triple_equal = true
-        @comparison = "=== "
-        @expected = expected
-        self
-      end
-
-      def <(expected)
-        @prefix = "be "
-        @less_than = true
-        @comparison = "< "
-        @expected = expected
-        self
-      end
-
-      def <=(expected)
-        @prefix = "be "
-        @less_than_or_equal = true
-        @comparison = "<= "
-        @expected = expected
-        self
-      end
-
-      def >=(expected)
-        @prefix = "be "
-        @greater_than_or_equal = true
-        @comparison = ">= "
-        @expected = expected
-        self
-      end
-
-      def >(expected)
-        @prefix = "be "
-        @greater_than = true
-        @comparison = "> "
-        @expected = expected
-        self
-      end
-      
-      def description
-        "#{prefix_to_sentence}#{comparison}#{expected_to_sentence}#{args_to_sentence}"
-      end
-
-      private
-        def parse_expected(expected)
-          if Symbol === expected
-            @handling_predicate = true
-            ["be_an_","be_a_","be_"].each do |prefix|
-              if expected.starts_with?(prefix)
-                @prefix = prefix
-                return "#{expected.to_s.sub(@prefix,"")}".to_sym
-              end
-            end
-          end
-          @prefix = ""
-          return expected
-        end
-        
-        def handling_predicate?
-          return false if [:true, :false, :nil].include?(@expected)
-          return @handling_predicate
-        end
-
-        def predicate
-          "#{@expected.to_s}?".to_sym
-        end
-        
-        def present_tense_predicate
-          "#{@expected.to_s}s?".to_sym
-        end
-        
-        def args_to_s
-          return "" if @args.empty?
-          inspected_args = @args.collect{|a| a.inspect}
-          return "(#{inspected_args.join(', ')})"
-        end
-        
-        def comparison
-          @comparison
-        end
-        
-        def expected_to_sentence
-          split_words(@expected)
-        end
-        
-        def prefix_to_sentence
-          split_words(@prefix)
-        end
-
-        def split_words(sym)
-          sym.to_s.gsub(/_/,' ')
-        end
-
-        def args_to_sentence
-          case @args.length
-            when 0
-              ""
-            when 1
-              " #{@args[0]}"
-            else
-              " #{@args[0...-1].join(', ')} and #{@args[-1]}"
-          end
-        end
-        
-    end
- 
-    # :call-seq:
-    #   should be
-    #   should be_true
-    #   should be_false
-    #   should be_nil
-    #   should be_arbitrary_predicate(*args)
-    #   should_not be_nil
-    #   should_not be_arbitrary_predicate(*args)
-    #
-    # Given true, false, or nil, will pass if given value is
-    # true, false or nil (respectively). Given no args means
-    # the caller should satisfy an if condition (to be or not to be). 
-    #
-    # Predicates are any Ruby method that ends in a "?" and returns true or false.
-    # Given be_ followed by arbitrary_predicate (without the "?"), RSpec will match
-    # convert that into a query against the target object.
-    #
-    # The arbitrary_predicate feature will handle any predicate
-    # prefixed with "be_an_" (e.g. be_an_instance_of), "be_a_" (e.g. be_a_kind_of)
-    # or "be_" (e.g. be_empty), letting you choose the prefix that best suits the predicate.
-    #
-    # == Examples 
-    #
-    #   target.should be
-    #   target.should be_true
-    #   target.should be_false
-    #   target.should be_nil
-    #   target.should_not be_nil
-    #
-    #   collection.should be_empty #passes if target.empty?
-    #   "this string".should be_an_intance_of(String)
-    #
-    #   target.should_not be_empty #passes unless target.empty?
-    #   target.should_not be_old_enough(16) #passes unless target.old_enough?(16)
-    def be(*args)
-      Matchers::Be.new(*args)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/be_close.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/be_close.rb
deleted file mode 100644
index 888df5a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/be_close.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Spec
-  module Matchers
-
-    class BeClose #:nodoc:
-      def initialize(expected, delta)
-        @expected = expected
-        @delta = delta
-      end
-      
-      def matches?(given)
-        @given = given
-        (@given - @expected).abs < @delta
-      end
-      
-      def failure_message
-        "expected #{@expected} +/- (< #{@delta}), got #{@given}"
-      end
-      
-      def description
-        "be close to #{@expected} (within +- #{@delta})"
-      end
-    end
-    
-    # :call-seq:
-    #   should be_close(expected, delta)
-    #   should_not be_close(expected, delta)
-    #
-    # Passes if given == expected +/- delta
-    #
-    # == Example
-    #
-    #   result.should be_close(3.0, 0.5)
-    def be_close(expected, delta)
-      Matchers::BeClose.new(expected, delta)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/change.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/change.rb
deleted file mode 100644
index d3a5f6c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/change.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-module Spec
-  module Matchers
-    
-    #Based on patch from Wilson Bilkovich
-    class Change #:nodoc:
-      def initialize(receiver=nil, message=nil, &block)
-        @message = message || "result"
-        @value_proc = block || lambda {
-          receiver.__send__(message)
-        }
-      end
-      
-      def matches?(event_proc)
-        raise_block_syntax_error if block_given?
-        
-        @before = evaluate_value_proc
-        event_proc.call
-        @after = evaluate_value_proc
-        
-        return false if @from unless @from == @before
-        return false if @to unless @to == @after
-        return (@before + @amount == @after) if @amount
-        return ((@after - @before) >= @minimum) if @minimum
-        return ((@after - @before) <= @maximum) if @maximum        
-        return @before != @after
-      end
-      
-      def raise_block_syntax_error
-        raise MatcherError.new(<<-MESSAGE
-block passed to should or should_not change must use {} instead of do/end
-MESSAGE
-        )
-      end
-      
-      def evaluate_value_proc
-        @value_proc.call
-      end
-      
-      def failure_message
-        if @to
-          "#{@message} should have been changed to #{@to.inspect}, but is now #{@after.inspect}"
-        elsif @from
-          "#{@message} should have initially been #{@from.inspect}, but was #{@before.inspect}"
-        elsif @amount
-          "#{@message} should have been changed by #{@amount.inspect}, but was changed by #{actual_delta.inspect}"
-        elsif @minimum
-          "#{@message} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}"
-        elsif @maximum
-          "#{@message} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}"
-        else
-          "#{@message} should have changed, but is still #{@before.inspect}"
-        end
-      end
-      
-      def actual_delta
-        @after - @before
-      end
-      
-      def negative_failure_message
-        "#{@message} should not have changed, but did change from #{@before.inspect} to #{@after.inspect}"
-      end
-      
-      def by(amount)
-        @amount = amount
-        self
-      end
-      
-      def by_at_least(minimum)
-        @minimum = minimum
-        self
-      end
-      
-      def by_at_most(maximum)
-        @maximum = maximum
-        self
-      end      
-      
-      def to(to)
-        @to = to
-        self
-      end
-      
-      def from (from)
-        @from = from
-        self
-      end
-    end
-    
-    # :call-seq:
-    #   should change(receiver, message, &block)
-    #   should change(receiver, message, &block).by(value)
-    #   should change(receiver, message, &block).from(old).to(new)
-    #   should_not change(receiver, message, &block)
-    #
-    # Allows you to specify that a Proc will cause some value to change.
-    #
-    # == Examples
-    #
-    #   lambda {
-    #     team.add_player(player) 
-    #   }.should change(roster, :count)
-    #
-    #   lambda {
-    #     team.add_player(player) 
-    #   }.should change(roster, :count).by(1)
-    #
-    #   lambda {
-    #     team.add_player(player) 
-    #   }.should change(roster, :count).by_at_least(1)
-    #
-    #   lambda {
-    #     team.add_player(player)
-    #   }.should change(roster, :count).by_at_most(1)    
-    #
-    #   string = "string"
-    #   lambda {
-    #     string.reverse!
-    #   }.should change { string }.from("string").to("gnirts")
-    #
-    #   lambda {
-    #     person.happy_birthday
-    #   }.should change(person, :birthday).from(32).to(33)
-    #       
-    #   lambda {
-    #     employee.develop_great_new_social_networking_app
-    #   }.should change(employee, :title).from("Mail Clerk").to("CEO")
-    #
-    # Evaluates <tt>receiver.message</tt> or <tt>block</tt> before and after
-    # it evaluates the c object (generated by the lambdas in the examples
-    # above).
-    #
-    # Then compares the values before and after the <tt>receiver.message</tt>
-    # and evaluates the difference compared to the expected difference.
-    #
-    # == WARNING
-    # <tt>should_not change</tt> only supports the form with no
-    # subsequent calls to <tt>by</tt>, <tt>by_at_least</tt>,
-    # <tt>by_at_most</tt>, <tt>to</tt> or <tt>from</tt>.
-    #
-    # blocks passed to <tt>should</tt> <tt>change</tt> and <tt>should_not</tt>
-    # <tt>change</tt> must use the <tt>{}</tt> form (<tt>do/end</tt> is not
-    # supported).
-    #
-    def change(receiver=nil, message=nil, &block)
-      Matchers::Change.new(receiver, message, &block)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/eql.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/eql.rb
deleted file mode 100644
index 1985a91..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/eql.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-module Spec
-  module Matchers
-  
-    class Eql #:nodoc:
-      def initialize(expected)
-        @expected = expected
-      end
-  
-      def matches?(given)
-        @given = given
-        @given.eql?(@expected)
-      end
-
-      def failure_message
-        return "expected #{@expected.inspect}, got #{@given.inspect} (using .eql?)", @expected, @given
-      end
-      
-      def negative_failure_message
-        return "expected #{@given.inspect} not to equal #{@expected.inspect} (using .eql?)", @expected, @given
-      end
-
-      def description
-        "eql #{@expected.inspect}"
-      end
-    end
-    
-    # :call-seq:
-    #   should eql(expected)
-    #   should_not eql(expected)
-    #
-    # Passes if given and expected are of equal value, but not necessarily the same object.
-    #
-    # See http://www.ruby-doc.org/core/classes/Object.html#M001057 for more information about equality in Ruby.
-    #
-    # == Examples
-    #
-    #   5.should eql(5)
-    #   5.should_not eql(3)
-    def eql(expected)
-      Matchers::Eql.new(expected)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/equal.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/equal.rb
deleted file mode 100644
index e136173..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/equal.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-module Spec
-  module Matchers
-  
-    class Equal #:nodoc:
-      def initialize(expected)
-        @expected = expected
-      end
-  
-      def matches?(given)
-        @given = given
-        @given.equal?(@expected)
-      end
-
-      def failure_message
-        return "expected #{@expected.inspect}, got #{@given.inspect} (using .equal?)", @expected, @given
-      end
-
-      def negative_failure_message
-        return "expected #{@given.inspect} not to equal #{@expected.inspect} (using .equal?)", @expected, @given
-      end
-      
-      def description
-        "equal #{@expected.inspect}"
-      end
-    end
-    
-    # :call-seq:
-    #   should equal(expected)
-    #   should_not equal(expected)
-    #
-    # Passes if given and expected are the same object (object identity).
-    #
-    # See http://www.ruby-doc.org/core/classes/Object.html#M001057 for more information about equality in Ruby.
-    #
-    # == Examples
-    #
-    #   5.should equal(5) #Fixnums are equal
-    #   "5".should_not equal("5") #Strings that look the same are not the same object
-    def equal(expected)
-      Matchers::Equal.new(expected)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/exist.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/exist.rb
deleted file mode 100644
index b6fc092..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/exist.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-module Spec
-  module Matchers
-    class Exist
-      def matches?(given)
-        @given = given
-        @given.exist?
-      end
-      def failure_message
-        "expected #{@given.inspect} to exist, but it doesn't."
-      end
-      def negative_failure_message
-        "expected #{@given.inspect} to not exist, but it does."
-      end
-    end
-    # :call-seq:
-    #   should exist
-    #   should_not exist
-    #
-    # Passes if given.exist?
-    def exist; Exist.new; end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/has.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/has.rb
deleted file mode 100644
index 6b412bb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/has.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-module Spec
-  module Matchers
-    
-    class Has #:nodoc:
-      def initialize(sym, *args)
-        @sym = sym
-        @args = args
-      end
-      
-      def matches?(given)
-        given.__send__(predicate, *@args)
-      end
-      
-      def failure_message
-        "expected ##{predicate}(#{@args[0].inspect}) to return true, got false"
-      end
-      
-      def negative_failure_message
-        "expected ##{predicate}(#{@args[0].inspect}) to return false, got true"
-      end
-      
-      def description
-        "have key #{@args[0].inspect}"
-      end
-      
-      private
-        def predicate
-          "#{@sym.to_s.sub("have_","has_")}?".to_sym
-        end
-        
-    end
- 
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/have.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/have.rb
deleted file mode 100644
index e33af96..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/have.rb
+++ /dev/null
@@ -1,150 +0,0 @@
-module Spec
-  module Matchers
-    class Have #:nodoc:
-      def initialize(expected, relativity=:exactly)
-        @expected = (expected == :no ? 0 : expected)
-        @relativity = relativity
-      end
-    
-      def relativities
-        @relativities ||= {
-          :exactly => "",
-          :at_least => "at least ",
-          :at_most => "at most "
-        }
-      end
-    
-      def matches?(collection_owner)
-        if collection_owner.respond_to?(@collection_name)
-          collection = collection_owner.__send__(@collection_name, *@args, &@block)
-        elsif (@plural_collection_name && collection_owner.respond_to?(@plural_collection_name))
-          collection = collection_owner.__send__(@plural_collection_name, *@args, &@block)
-        elsif (collection_owner.respond_to?(:length) || collection_owner.respond_to?(:size))
-          collection = collection_owner
-        else
-          collection_owner.__send__(@collection_name, *@args, &@block)
-        end
-        @given = collection.size if collection.respond_to?(:size)
-        @given = collection.length if collection.respond_to?(:length)
-        raise not_a_collection if @given.nil?
-        return @given >= @expected if @relativity == :at_least
-        return @given <= @expected if @relativity == :at_most
-        return @given == @expected
-      end
-      
-      def not_a_collection
-        "expected #{@collection_name} to be a collection but it does not respond to #length or #size"
-      end
-    
-      def failure_message
-        "expected #{relative_expectation} #{@collection_name}, got #{@given}"
-      end
-
-      def negative_failure_message
-        if @relativity == :exactly
-          return "expected target not to have #{@expected} #{@collection_name}, got #{@given}"
-        elsif @relativity == :at_most
-          return <<-EOF
-Isn't life confusing enough?
-Instead of having to figure out the meaning of this:
-  should_not have_at_most(#{@expected}).#{@collection_name}
-We recommend that you use this instead:
-  should have_at_least(#{@expected + 1}).#{@collection_name}
-EOF
-        elsif @relativity == :at_least
-          return <<-EOF
-Isn't life confusing enough?
-Instead of having to figure out the meaning of this:
-  should_not have_at_least(#{@expected}).#{@collection_name}
-We recommend that you use this instead:
-  should have_at_most(#{@expected - 1}).#{@collection_name}
-EOF
-        end
-      end
-      
-      def description
-        "have #{relative_expectation} #{@collection_name}"
-      end
-      
-      def respond_to?(sym)
-        @expected.respond_to?(sym) || super
-      end
-    
-      private
-      
-      def method_missing(sym, *args, &block)
-        @collection_name = sym
-        if inflector = (defined?(ActiveSupport::Inflector) ? ActiveSupport::Inflector : (defined?(Inflector) ? Inflector : nil))
-          @plural_collection_name = inflector.pluralize(sym.to_s)
-        end
-        @args = args
-        @block = block
-        self
-      end
-      
-      def relative_expectation
-        "#{relativities[@relativity]}#{@expected}"
-      end
-    end
-
-    # :call-seq:
-    #   should have(number).named_collection__or__sugar
-    #   should_not have(number).named_collection__or__sugar
-    #
-    # Passes if receiver is a collection with the submitted
-    # number of items OR if the receiver OWNS a collection
-    # with the submitted number of items.
-    #
-    # If the receiver OWNS the collection, you must use the name
-    # of the collection. So if a <tt>Team</tt> instance has a
-    # collection named <tt>#players</tt>, you must use that name
-    # to set the expectation.
-    #
-    # If the receiver IS the collection, you can use any name
-    # you like for <tt>named_collection</tt>. We'd recommend using
-    # either "elements", "members", or "items" as these are all
-    # standard ways of describing the things IN a collection.
-    #
-    # This also works for Strings, letting you set an expectation
-    # about its length
-    #
-    # == Examples
-    #
-    #   # Passes if team.players.size == 11
-    #   team.should have(11).players
-    #
-    #   # Passes if [1,2,3].length == 3
-    #   [1,2,3].should have(3).items #"items" is pure sugar
-    #
-    #   # Passes if "this string".length == 11
-    #   "this string".should have(11).characters #"characters" is pure sugar
-    def have(n)
-      Matchers::Have.new(n)
-    end
-    alias :have_exactly :have
-
-    # :call-seq:
-    #   should have_at_least(number).items
-    #
-    # Exactly like have() with >=.
-    #
-    # == Warning
-    #
-    # +should_not+ +have_at_least+ is not supported
-    def have_at_least(n)
-      Matchers::Have.new(n, :at_least)
-    end
-
-    # :call-seq:
-    #   should have_at_most(number).items
-    #
-    # Exactly like have() with <=.
-    #
-    # == Warning
-    #
-    # +should_not+ +have_at_most+ is not supported
-    def have_at_most(n)
-      Matchers::Have.new(n, :at_most)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/include.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/include.rb
deleted file mode 100644
index 7ae297b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/include.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-module Spec
-  module Matchers
-
-    class Include #:nodoc:
-      
-      def initialize(*expecteds)
-        @expecteds = expecteds
-      end
-      
-      def matches?(given)
-        @given = given
-        @expecteds.each do |expected|
-          case given
-          when Hash
-            expected.each_pair do |k,v|
-              return false unless given[k] == v
-            end
-          else
-            return false unless given.include?(expected)
-          end
-        end
-        true
-      end
-      
-      def failure_message
-        _message
-      end
-      
-      def negative_failure_message
-        _message("not ")
-      end
-      
-      def description
-        "include #{_pretty_print(@expecteds)}"
-      end
-      
-      private
-        def _message(maybe_not="")
-          "expected #{@given.inspect} #{maybe_not}to include #{_pretty_print(@expecteds)}"
-        end
-        
-        def _pretty_print(array)
-          result = ""
-          array.each_with_index do |item, index|
-            if index < (array.length - 2)
-              result << "#{item.inspect}, "
-            elsif index < (array.length - 1)
-              result << "#{item.inspect} and "
-            else
-              result << "#{item.inspect}"
-            end
-          end
-          result
-        end
-    end
-
-    # :call-seq:
-    #   should include(expected)
-    #   should_not include(expected)
-    #
-    # Passes if given includes expected. This works for
-    # collections and Strings. You can also pass in multiple args
-    # and it will only pass if all args are found in collection.
-    #
-    # == Examples
-    #
-    #   [1,2,3].should include(3)
-    #   [1,2,3].should include(2,3) #would pass
-    #   [1,2,3].should include(2,3,4) #would fail
-    #   [1,2,3].should_not include(4)
-    #   "spread".should include("read")
-    #   "spread".should_not include("red")
-    def include(*expected)
-      Matchers::Include.new(*expected)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/match.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/match.rb
deleted file mode 100644
index dc3d582..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/match.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-module Spec
-  module Matchers
-    
-    class Match #:nodoc:
-      def initialize(regexp)
-        @regexp = regexp
-      end
-      
-      def matches?(given)
-        @given = given
-        return true if given =~ @regexp
-        return false
-      end
-      
-      def failure_message
-        return "expected #{@given.inspect} to match #{@regexp.inspect}", @regexp, @given
-      end
-      
-      def negative_failure_message
-        return "expected #{@given.inspect} not to match #{@regexp.inspect}", @regexp, @given
-      end
-      
-      def description
-        "match #{@regexp.inspect}"
-      end
-    end
-    
-    # :call-seq:
-    #   should match(regexp)
-    #   should_not match(regexp)
-    #
-    # Given a Regexp, passes if given =~ regexp
-    #
-    # == Examples
-    #
-    #   email.should match(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)
-    def match(regexp)
-      Matchers::Match.new(regexp)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/operator_matcher.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/operator_matcher.rb
deleted file mode 100755
index b1a3455..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/operator_matcher.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-module Spec
-  module Matchers
-    class BaseOperatorMatcher
-      attr_reader :generated_description
-      
-      def initialize(given)
-        @given = given
-      end
-
-      def ==(expected)
-        @expected = expected
-        __delegate_method_missing_to_given("==", expected)
-      end
-
-      def ===(expected)
-        @expected = expected
-        __delegate_method_missing_to_given("===", expected)
-      end
-
-      def =~(expected)
-        @expected = expected
-        __delegate_method_missing_to_given("=~", expected)
-      end
-
-      def >(expected)
-        @expected = expected
-        __delegate_method_missing_to_given(">", expected)
-      end
-
-      def >=(expected)
-        @expected = expected
-        __delegate_method_missing_to_given(">=", expected)
-      end
-
-      def <(expected)
-        @expected = expected
-        __delegate_method_missing_to_given("<", expected)
-      end
-
-      def <=(expected)
-        @expected = expected
-        __delegate_method_missing_to_given("<=", expected)
-      end
-
-      def fail_with_message(message)
-        Spec::Expectations.fail_with(message, @expected, @given)
-      end
-      
-      def description
-        "#{@operator} #{@expected.inspect}"
-      end
-
-    end
-
-    class PositiveOperatorMatcher < BaseOperatorMatcher #:nodoc:
-
-      def __delegate_method_missing_to_given(operator, expected)
-        @operator = operator
-        ::Spec::Matchers.last_matcher = self
-        return true if @given.__send__(operator, expected)
-        return fail_with_message("expected: #{expected.inspect},\n     got: #{@given.inspect} (using #{operator})") if ['==','===', '=~'].include?(operator)
-        return fail_with_message("expected: #{operator} #{expected.inspect},\n     got: #{operator.gsub(/./, ' ')} #{@given.inspect}")
-      end
-
-    end
-
-    class NegativeOperatorMatcher < BaseOperatorMatcher #:nodoc:
-
-      def __delegate_method_missing_to_given(operator, expected)
-        @operator = operator
-        ::Spec::Matchers.last_matcher = self
-        return true unless @given.__send__(operator, expected)
-        return fail_with_message("expected not: #{operator} #{expected.inspect},\n         got: #{operator.gsub(/./, ' ')} #{@given.inspect}")
-      end
-
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/raise_error.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/raise_error.rb
deleted file mode 100644
index fcd76ca..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/raise_error.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-module Spec
-  module Matchers
-    class RaiseError #:nodoc:
-      def initialize(expected_error_or_message=Exception, expected_message=nil, &block)
-        @block = block
-        case expected_error_or_message
-        when String, Regexp
-          @expected_error, @expected_message = Exception, expected_error_or_message
-        else
-          @expected_error, @expected_message = expected_error_or_message, expected_message
-        end
-      end
-
-      def matches?(given_proc)
-        @raised_expected_error = false
-        @with_expected_message = false
-        @eval_block = false
-        @eval_block_passed = false
-        begin
-          given_proc.call
-        rescue @expected_error => @given_error
-          @raised_expected_error = true
-          @with_expected_message = verify_message
-        rescue Exception => @given_error
-          # This clause should be empty, but rcov will not report it as covered
-          # unless something (anything) is executed within the clause
-          rcov_error_report = "http://eigenclass.org/hiki.rb?rcov-0.8.0"
-        end
-
-        unless negative_expectation?
-          eval_block if @raised_expected_error && @with_expected_message && @block
-        end
-      ensure
-        return (@raised_expected_error && @with_expected_message) ? (@eval_block ? @eval_block_passed : true) : false
-      end
-      
-      def eval_block
-        @eval_block = true
-        begin
-          @block[@given_error]
-          @eval_block_passed = true
-        rescue Exception => err
-          @given_error = err
-        end
-      end
-
-      def verify_message
-        case @expected_message
-        when nil
-          return true
-        when Regexp
-          return @expected_message =~ @given_error.message
-        else
-          return @expected_message == @given_error.message
-        end
-      end
-      
-      def failure_message
-        if @eval_block
-          return @given_error.message
-        else
-          return "expected #{expected_error}#{given_error}"
-        end
-      end
-
-      def negative_failure_message
-        "expected no #{expected_error}#{given_error}"
-      end
-      
-      def description
-        "raise #{expected_error}"
-      end
-      
-      private
-        def expected_error
-          case @expected_message
-          when nil
-            @expected_error
-          when Regexp
-            "#{@expected_error} with message matching #{@expected_message.inspect}"
-          else
-            "#{@expected_error} with #{@expected_message.inspect}"
-          end
-        end
-
-        def given_error
-          @given_error.nil? ? " but nothing was raised" : ", got #{@given_error.inspect}"
-        end
-        
-        def negative_expectation?
-          # YES - I'm a bad person... help me find a better way - ryand
-          caller.first(3).find { |s| s =~ /should_not/ }
-        end
-    end
-    
-    # :call-seq:
-    #   should raise_error()
-    #   should raise_error(NamedError)
-    #   should raise_error(NamedError, String)
-    #   should raise_error(NamedError, Regexp)
-    #   should raise_error() { |error| ... }
-    #   should raise_error(NamedError) { |error| ... }
-    #   should raise_error(NamedError, String) { |error| ... }
-    #   should raise_error(NamedError, Regexp) { |error| ... }
-    #   should_not raise_error()
-    #   should_not raise_error(NamedError)
-    #   should_not raise_error(NamedError, String)
-    #   should_not raise_error(NamedError, Regexp)
-    #
-    # With no args, matches if any error is raised.
-    # With a named error, matches only if that specific error is raised.
-    # With a named error and messsage specified as a String, matches only if both match.
-    # With a named error and messsage specified as a Regexp, matches only if both match.
-    # Pass an optional block to perform extra verifications on the exception matched
-    #
-    # == Examples
-    #
-    #   lambda { do_something_risky }.should raise_error
-    #   lambda { do_something_risky }.should raise_error(PoorRiskDecisionError)
-    #   lambda { do_something_risky }.should raise_error(PoorRiskDecisionError) { |error| error.data.should == 42 }
-    #   lambda { do_something_risky }.should raise_error(PoorRiskDecisionError, "that was too risky")
-    #   lambda { do_something_risky }.should raise_error(PoorRiskDecisionError, /oo ri/)
-    #
-    #   lambda { do_something_risky }.should_not raise_error
-    #   lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError)
-    #   lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError, "that was too risky")
-    #   lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError, /oo ri/)
-    def raise_error(error=Exception, message=nil, &block)
-      Matchers::RaiseError.new(error, message, &block)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/respond_to.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/respond_to.rb
deleted file mode 100644
index 560cdea..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/respond_to.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-module Spec
-  module Matchers
-    
-    class RespondTo #:nodoc:
-      def initialize(*names)
-        @names = names
-        @names_not_responded_to = []
-      end
-      
-      def matches?(given)
-        @given = given
-        @names.each do |name|
-          unless given.respond_to?(name)
-            @names_not_responded_to << name
-          end
-        end
-        return @names_not_responded_to.empty?
-      end
-      
-      def failure_message
-        "expected #{@given.inspect} to respond to #{@names_not_responded_to.collect {|name| name.inspect }.join(', ')}"
-      end
-      
-      def negative_failure_message
-        "expected #{@given.inspect} not to respond to #{@names.collect {|name| name.inspect }.join(', ')}"
-      end
-      
-      def description
-        "respond to ##{@names.to_s}"
-      end
-    end
-    
-    # :call-seq:
-    #   should respond_to(*names)
-    #   should_not respond_to(*names)
-    #
-    # Matches if the target object responds to all of the names
-    # provided. Names can be Strings or Symbols.
-    #
-    # == Examples
-    # 
-    def respond_to(*names)
-      Matchers::RespondTo.new(*names)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/satisfy.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/satisfy.rb
deleted file mode 100644
index 3610453..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/satisfy.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-module Spec
-  module Matchers
-    
-    class Satisfy #:nodoc:
-      def initialize(&block)
-        @block = block
-      end
-      
-      def matches?(given, &block)
-        @block = block if block
-        @given = given
-        @block.call(given)
-      end
-      
-      def failure_message
-        "expected #{@given} to satisfy block"
-      end
-
-      def negative_failure_message
-        "expected #{@given} not to satisfy block"
-      end
-    end
-    
-    # :call-seq:
-    #   should satisfy {}
-    #   should_not satisfy {}
-    #
-    # Passes if the submitted block returns true. Yields target to the
-    # block.
-    #
-    # Generally speaking, this should be thought of as a last resort when
-    # you can't find any other way to specify the behaviour you wish to
-    # specify.
-    #
-    # If you do find yourself in such a situation, you could always write
-    # a custom matcher, which would likely make your specs more expressive.
-    #
-    # == Examples
-    #
-    #   5.should satisfy { |n|
-    #     n > 3
-    #   }
-    def satisfy(&block)
-      Matchers::Satisfy.new(&block)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/simple_matcher.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/simple_matcher.rb
deleted file mode 100644
index 7588ecb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/simple_matcher.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-module Spec
-  module Matchers
-    class SimpleMatcher
-      attr_writer :failure_message, :negative_failure_message, :description
-      
-      def initialize(description, &match_block)
-        @description = description
-        @match_block = match_block
-      end
-
-      def matches?(given)
-        @given = given
-        case @match_block.arity
-        when 2
-          @match_block.call(@given, self)
-        else
-          @match_block.call(@given)
-        end
-      end
-      
-      def description
-        @description || explanation
-      end
-
-      def failure_message
-        @failure_message || (@description.nil? ? explanation : %[expected #{@description.inspect} but got #{@given.inspect}])
-      end
-
-      def negative_failure_message
-        @negative_failure_message || (@description.nil? ? explanation : %[expected not to get #{@description.inspect}, but got #{@given.inspect}])
-      end
-
-      def explanation
-        "No description provided. See RDoc for simple_matcher()"
-      end
-    end
-  
-    # simple_matcher makes it easy for you to create your own custom matchers
-    # in just a few lines of code when you don't need all the power of a
-    # completely custom matcher object.
-    #
-    # The <tt>description</tt> argument will appear as part of any failure
-    # message, and is also the source for auto-generated descriptions.
-    #
-    # The <tt>match_block</tt> can have an arity of 1 or 2. The first block
-    # argument will be the given value. The second, if the block accepts it
-    # will be the matcher itself, giving you access to set custom failure
-    # messages in favor of the defaults.
-    #
-    # The <tt>match_block</tt> should return a boolean: <tt>true</tt>
-    # indicates a match, which will pass if you use <tt>should</tt> and fail
-    # if you use <tt>should_not</tt>. false (or nil) indicates no match,
-    # which will do the reverse: fail if you use <tt>should</tt> and pass if
-    # you use <tt>should_not</tt>.
-    #
-    # An error in the <tt>match_block</tt> will bubble up, resulting in a
-    # failure.
-    #
-    # == Example with default messages
-    #
-    #   def be_even
-    #     simple_matcher("an even number") { |given| given % 2 == 0 }
-    #   end
-    #                    
-    #   describe 2 do
-    #     it "should be even" do
-    #       2.should be_even
-    #     end
-    #   end
-    #
-    # Given an odd number, this example would produce an error message stating:
-    # expected "an even number", got 3.
-    #
-    # Unfortunately, if you're a fan of auto-generated descriptions, this will
-    # produce "should an even number." Not the most desirable result. You can
-    # control that using custom messages:
-    #
-    # == Example with custom messages
-    #
-    #   def rhyme_with(expected)
-    #     simple_matcher("rhyme with #{expected.inspect}") do |given, matcher|
-    #       matcher.failure_message = "expected #{given.inspect} to rhyme with #{expected.inspect}"
-    #       matcher.negative_failure_message = "expected #{given.inspect} not to rhyme with #{expected.inspect}"
-    #       given.rhymes_with? expected
-    #     end
-    #   end
-    #
-    #   # OR
-    #
-    #   def rhyme_with(expected)
-    #     simple_matcher do |given, matcher|
-    #       matcher.description = "rhyme with #{expected.inspect}"
-    #       matcher.failure_message = "expected #{given.inspect} to rhyme with #{expected.inspect}"
-    #       matcher.negative_failure_message = "expected #{given.inspect} not to rhyme with #{expected.inspect}"
-    #       given.rhymes_with? expected
-    #     end
-    #   end
-    #
-    #   describe "pecan" do
-    #     it "should rhyme with 'be gone'" do
-    #       nut = "pecan"
-    #       nut.extend Rhymer
-    #       nut.should rhyme_with("be gone")
-    #     end
-    #   end
-    #
-    # The resulting messages would be:
-    #   description:              rhyme with "be gone"
-    #   failure_message:          expected "pecan" to rhyme with "be gone"
-    #   negative failure_message: expected "pecan" not to rhyme with "be gone"
-    #
-    # == Wrapped Expectations
-    #
-    # Because errors will bubble up, it is possible to wrap other expectations
-    # in a SimpleMatcher.
-    #
-    #   def be_even
-    #     simple_matcher("an even number") { |given| (given % 2).should == 0 }
-    #   end
-    #
-    # BE VERY CAREFUL when you do this. Only use wrapped expectations for
-    # matchers that will always be used in only the positive
-    # (<tt>should</tt>) or negative (<tt>should_not</tt>), but not both.
-    # The reason is that is you wrap a <tt>should</tt> and call the wrapper
-    # with <tt>should_not</tt>, the correct result (the <tt>should</tt>
-    # failing), will fail when you want it to pass.
-    #
-    def simple_matcher(description=nil, &match_block)
-      SimpleMatcher.new(description, &match_block)
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/throw_symbol.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/throw_symbol.rb
deleted file mode 100644
index 12a9c19..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/matchers/throw_symbol.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-module Spec
-  module Matchers
-    
-    class ThrowSymbol #:nodoc:
-      def initialize(expected=nil)
-        @expected = expected
-        @actual = nil
-      end
-      
-      def matches?(given_proc)
-        begin
-          given_proc.call
-        rescue NameError => e
-          raise e unless e.message =~ /uncaught throw/
-          @actual = e.name.to_sym
-        ensure
-          if @expected.nil?
-            return @actual.nil? ? false : true
-          else
-            return @actual == @expected
-          end
-        end
-      end
-
-      def failure_message
-        if @actual
-          "expected #{expected}, got #{@actual.inspect}"
-        else
-          "expected #{expected} but nothing was thrown"
-        end
-      end
-      
-      def negative_failure_message
-        if @expected
-          "expected #{expected} not to be thrown"
-        else
-          "expected no Symbol, got :#{@actual}"
-        end
-      end
-      
-      def description
-        "throw #{expected}"
-      end
-      
-      private
-      
-        def expected
-          @expected.nil? ? "a Symbol" : @expected.inspect
-        end
-      
-    end
- 
-    # :call-seq:
-    #   should throw_symbol()
-    #   should throw_symbol(:sym)
-    #   should_not throw_symbol()
-    #   should_not throw_symbol(:sym)
-    #
-    # Given a Symbol argument, matches if the given proc throws the specified Symbol.
-    #
-    # Given no argument, matches if a proc throws any Symbol.
-    #
-    # == Examples
-    #
-    #   lambda { do_something_risky }.should throw_symbol
-    #   lambda { do_something_risky }.should throw_symbol(:that_was_risky)
-    #
-    #   lambda { do_something_risky }.should_not throw_symbol
-    #   lambda { do_something_risky }.should_not throw_symbol(:that_was_risky)
-    def throw_symbol(sym=nil)
-      Matchers::ThrowSymbol.new(sym)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks.rb
deleted file mode 100644
index df993e6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks.rb
+++ /dev/null
@@ -1,200 +0,0 @@
-require 'spec/mocks/framework'
-require 'spec/mocks/extensions/object'
-
-module Spec
-  # == Mocks and Stubs
-  #
-  # RSpec will create Mock Objects and Stubs for you at runtime, or attach stub/mock behaviour
-  # to any of your real objects (Partial Mock/Stub). Because the underlying implementation
-  # for mocks and stubs is the same, you can intermingle mock and stub
-  # behaviour in either dynamically generated mocks or your pre-existing classes.
-  # There is a semantic difference in how they are created, however,
-  # which can help clarify the role it is playing within a given spec.
-  #
-  # == Mock Objects
-  # 
-  # Mocks are objects that allow you to set and verify expectations that they will
-  # receive specific messages during run time. They are very useful for specifying how the subject of
-  # the spec interacts with its collaborators. This approach is widely known as "interaction
-  # testing".
-  # 
-  # Mocks are also very powerful as a design tool. As you are
-  # driving the implementation of a given class, Mocks provide an anonymous
-  # collaborator that can change in behaviour as quickly as you can write an expectation in your
-  # spec. This flexibility allows you to design the interface of a collaborator that often
-  # does not yet exist. As the shape of the class being specified becomes more clear, so do the
-  # requirements for its collaborators - often leading to the discovery of new types that are
-  # needed in your system.
-  # 
-  # Read Endo-Testing[http://www.mockobjects.com/files/endotesting.pdf] for a much
-  # more in depth description of this process.
-  # 
-  # == Stubs
-  # 
-  # Stubs are objects that allow you to set "stub" responses to
-  # messages. As Martin Fowler points out on his site,
-  # mocks_arent_stubs[http://www.martinfowler.com/articles/mocksArentStubs.html].
-  # Paraphrasing Fowler's paraphrasing
-  # of Gerard Meszaros: Stubs provide canned responses to messages they might receive in a test, while
-  # mocks allow you to specify and, subsquently, verify that certain messages should be received during
-  # the execution of a test.
-  # 
-  # == Partial Mocks/Stubs
-  # 
-  # RSpec also supports partial mocking/stubbing, allowing you to add stub/mock behaviour
-  # to instances of your existing classes. This is generally
-  # something to be avoided, because changes to the class can have ripple effects on
-  # seemingly unrelated specs. When specs fail due to these ripple effects, the fact
-  # that some methods are being mocked can make it difficult to understand why a
-  # failure is occurring.
-  # 
-  # That said, partials do allow you to expect and
-  # verify interactions with class methods such as +#find+ and +#create+
-  # on Ruby on Rails model classes.
-  # 
-  # == Further Reading
-  # 
-  # There are many different viewpoints about the meaning of mocks and stubs. If you are interested
-  # in learning more, here is some recommended reading:
-  # 
-  # * Mock Objects: http://www.mockobjects.com/
-  # * Endo-Testing: http://www.mockobjects.com/files/endotesting.pdf
-  # * Mock Roles, Not Objects: http://www.mockobjects.com/files/mockrolesnotobjects.pdf
-  # * Test Double Patterns: http://xunitpatterns.com/Test%20Double%20Patterns.html
-  # * Mocks aren't stubs: http://www.martinfowler.com/articles/mocksArentStubs.html
-  #
-  # == Creating a Mock
-  #
-  # You can create a mock in any specification (or setup) using:
-  #
-  #   mock(name, options={})
-  #
-  # The optional +options+ argument is a +Hash+. Currently the only supported
-  # option is +:null_object+. Setting this to true instructs the mock to ignore
-  # any messages it hasn’t been told to expect – and quietly return itself. For example:
-  #
-  #   mock("person", :null_object => true)
-  #
-  # == Creating a Stub
-  #
-  # You can create a stub in any specification (or setup) using:
-  #
-  #   stub(name, stub_methods_and_values_hash)
-  #
-  # For example, if you wanted to create an object that always returns
-  # "More?!?!?!" to "please_sir_may_i_have_some_more" you would do this:
-  #
-  #   stub("Mr Sykes", :please_sir_may_i_have_some_more => "More?!?!?!")
-  #
-  # == Creating a Partial Mock
-  #
-  # You don't really "create" a partial mock, you simply add method stubs and/or
-  # mock expectations to existing classes and objects:
-  #
-  #   Factory.should_receive(:find).with(id).and_return(value)
-  #   obj.stub!(:to_i).and_return(3)
-  #   etc ...
-  #
-  # == Expecting Messages
-  #
-  #   my_mock.should_receive(:sym)
-  #   my_mock.should_not_receive(:sym)
-  #   
-  # == Expecting Arguments
-  #
-  #   my_mock.should_receive(:sym).with(*args)
-  #   my_mock.should_not_receive(:sym).with(*args)
-  #
-  # == Argument Constraints using Expression Matchers
-  #
-  # Arguments that are passed to #with are compared with actual arguments received
-  # using == by default. In cases in which you want to specify things about the arguments
-  # rather than the arguments themselves, you can use any of the Expression Matchers.
-  # They don't all make syntactic sense (they were primarily designed for use with
-  # Spec::Expectations), but you are free to create your own custom Spec::Matchers.
-  #
-  # Spec::Mocks does provide one additional Matcher method named #ducktype.
-  #
-  # In addition, Spec::Mocks adds some keyword Symbols that you can use to
-  # specify certain kinds of arguments:
-  #
-  #   my_mock.should_receive(:sym).with(no_args())
-  #   my_mock.should_receive(:sym).with(any_args())
-  #   my_mock.should_receive(:sym).with(1, an_instance_of(Numeric), "b") #2nd argument can any type of Numeric
-  #   my_mock.should_receive(:sym).with(1, boolean(), "b") #2nd argument can true or false
-  #   my_mock.should_receive(:sym).with(1, /abc/, "b") #2nd argument can be any String matching the submitted Regexp
-  #   my_mock.should_receive(:sym).with(1, anything(), "b") #2nd argument can be anything at all
-  #   my_mock.should_receive(:sym).with(1, ducktype(:abs, :div), "b")
-  #                            #2nd argument can be object that responds to #abs and #div
-  #                                                                       
-  # == Receive Counts
-  #
-  #   my_mock.should_receive(:sym).once
-  #   my_mock.should_receive(:sym).twice
-  #   my_mock.should_receive(:sym).exactly(n).times
-  #   my_mock.should_receive(:sym).at_least(:once)
-  #   my_mock.should_receive(:sym).at_least(:twice)
-  #   my_mock.should_receive(:sym).at_least(n).times
-  #   my_mock.should_receive(:sym).at_most(:once)
-  #   my_mock.should_receive(:sym).at_most(:twice)
-  #   my_mock.should_receive(:sym).at_most(n).times
-  #   my_mock.should_receive(:sym).any_number_of_times
-  #
-  # == Ordering
-  #
-  #   my_mock.should_receive(:sym).ordered
-  #   my_mock.should_receive(:other_sym).ordered
-  #     #This will fail if the messages are received out of order
-  #
-  # == Setting Reponses
-  #
-  # Whether you are setting a mock expectation or a simple stub, you can tell the
-  # object precisely how to respond:
-  #
-  #   my_mock.should_receive(:sym).and_return(value)
-  #   my_mock.should_receive(:sym).exactly(3).times.and_return(value1, value2, value3)
-  #     # returns value1 the first time, value2 the second, etc
-  #   my_mock.should_receive(:sym).and_return { ... } #returns value returned by the block
-  #   my_mock.should_receive(:sym).and_raise(error)
-  #     #error can be an instantiated object or a class
-  #     #if it is a class, it must be instantiable with no args
-  #   my_mock.should_receive(:sym).and_throw(:sym)
-  #   my_mock.should_receive(:sym).and_yield(values,to,yield)
-  #   my_mock.should_receive(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time)
-  #     # for methods that yield to a block multiple times
-  #
-  # Any of these responses can be applied to a stub as well, but stubs do
-  # not support any qualifiers about the message received (i.e. you can't specify arguments
-  # or receive counts):
-  #
-  #   my_mock.stub!(:sym).and_return(value)
-  #   my_mock.stub!(:sym).and_return(value1, value2, value3)
-  #   my_mock.stub!(:sym).and_raise(error)
-  #   my_mock.stub!(:sym).and_throw(:sym)
-  #   my_mock.stub!(:sym).and_yield(values,to,yield)
-  #   my_mock.stub!(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time)
-  #
-  # == Arbitrary Handling
-  #
-  # Once in a while you'll find that the available expectations don't solve the
-  # particular problem you are trying to solve. Imagine that you expect the message
-  # to come with an Array argument that has a specific length, but you don't care
-  # what is in it. You could do this:
-  #
-  #   my_mock.should_receive(:sym) do |arg|
-  #     arg.should be_an_istance_of(Array)
-  #     arg.length.should == 7
-  #   end
-  #
-  # Note that this would fail if the number of arguments received was different from
-  # the number of block arguments (in this case 1).
-  #
-  # == Combining Expectation Details
-  #
-  # Combining the message name with specific arguments, receive counts and responses
-  # you can get quite a bit of detail in your expectations:
-  #
-  #   my_mock.should_receive(:<<).with("illegal value").once.and_raise(ArgumentError)
-  module Mocks
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_constraints.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_constraints.rb
deleted file mode 100644
index 6f888b3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_constraints.rb
+++ /dev/null
@@ -1,165 +0,0 @@
-module Spec
-  module Mocks
-
-    # ArgumentConstraints are messages that you can include in message
-    # expectations to match arguments against a broader check than simple
-    # equality.
-    #
-    # With the exception of any_args() and no_args(), the constraints
-    # are all positional - they match against the arg in the given position.
-    module ArgumentConstraints
-
-      class AnyArgsConstraint
-        def description
-          "any args"
-        end
-      end
-
-      class AnyArgConstraint
-        def initialize(ignore)
-        end
-
-        def ==(other)
-          true
-        end
-      end
-
-      class NoArgsConstraint
-        def description
-          "no args"
-        end
-
-        def ==(args)
-          args == []
-        end
-      end
-
-      class RegexpConstraint
-        def initialize(regexp)
-          @regexp = regexp
-        end
-
-        def ==(value)
-          return value =~ @regexp unless value.is_a?(Regexp)
-          value == @regexp
-        end
-      end
-
-      class BooleanConstraint
-        def initialize(ignore)
-        end
-
-        def ==(value)
-          TrueClass === value || FalseClass === value
-        end
-      end
-
-      class HashIncludingConstraint
-        def initialize(expected)
-          @expected = expected
-        end
-
-        def ==(actual)
-          @expected.each do | key, value |
-            return false unless actual.has_key?(key) && value == actual[key]
-          end
-          true
-        rescue NoMethodError => ex
-          return false
-        end
-
-        def description
-          "hash_including(#{@expected.inspect.sub(/^\{/,"").sub(/\}$/,"")})"
-        end
-      end
-      
-      class DuckTypeConstraint
-        def initialize(*methods_to_respond_to)
-          @methods_to_respond_to = methods_to_respond_to
-        end
-
-        def ==(value)
-          @methods_to_respond_to.all? { |sym| value.respond_to?(sym) }
-        end
-      end
-
-      class MatcherConstraint
-        def initialize(matcher)
-          @matcher = matcher
-        end
-
-        def ==(value)
-          @matcher.matches?(value)
-        end
-      end
-
-      class EqualityProxy
-        def initialize(given)
-          @given = given
-        end
-
-        def ==(expected)
-          @given == expected
-        end
-      end
-
-      # :call-seq:
-      #   object.should_receive(:message).with(any_args())
-      #
-      # Passes if object receives :message with any args at all. This is
-      # really a more explicit variation of object.should_receive(:message)
-      def any_args
-        AnyArgsConstraint.new
-      end
-      
-      # :call-seq:
-      #   object.should_receive(:message).with(anything())
-      #
-      # Passes as long as there is an argument.
-      def anything
-        AnyArgConstraint.new(nil)
-      end
-      
-      # :call-seq:
-      #   object.should_receive(:message).with(no_args)
-      #
-      # Passes if no arguments are passed along with the message
-      def no_args
-        NoArgsConstraint.new
-      end
-      
-      # :call-seq:
-      #   object.should_receive(:message).with(duck_type(:hello))
-      #   object.should_receive(:message).with(duck_type(:hello, :goodbye))
-      #
-      # Passes if the argument responds to the specified messages.
-      #
-      # == Examples
-      #
-      #   array = []
-      #   display = mock('display')
-      #   display.should_receive(:present_names).with(duck_type(:length, :each))
-      #   => passes
-      def duck_type(*args)
-        DuckTypeConstraint.new(*args)
-      end
-
-      # :call-seq:
-      #   object.should_receive(:message).with(boolean())
-      #
-      # Passes if the argument is boolean.
-      def boolean
-        BooleanConstraint.new(nil)
-      end
-      
-      # :call-seq:
-      #   object.should_receive(:message).with(hash_including(:this => that))
-      #
-      # Passes if the argument is a hash that includes the specified key/value
-      # pairs. If the hash includes other keys, it will still pass.
-      def hash_including(expected={})
-        HashIncludingConstraint.new(expected)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
deleted file mode 100644
index 096c47a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-module Spec
-  module Mocks
-    
-    class ArgumentExpectation
-      attr_reader :args
-      
-      def initialize(args, &block)
-        @args = args
-        @constraints_block = block
-        
-        if ArgumentConstraints::AnyArgsConstraint === args.first
-          @match_any_args = true
-        elsif ArgumentConstraints::NoArgsConstraint === args.first
-          @constraints = []
-        else
-          @constraints = args.collect {|arg| constraint_for(arg)}
-        end
-      end
-      
-      def constraint_for(arg)
-        return ArgumentConstraints::MatcherConstraint.new(arg)   if is_matcher?(arg)
-        return ArgumentConstraints::RegexpConstraint.new(arg) if arg.is_a?(Regexp)
-        return ArgumentConstraints::EqualityProxy.new(arg)
-      end
-      
-      def is_matcher?(obj)
-        return obj.respond_to?(:matches?) && obj.respond_to?(:description)
-      end
-      
-      def args_match?(given_args)
-        match_any_args? || constraints_block_matches?(given_args) || constraints_match?(given_args)
-      end
-      
-      def constraints_block_matches?(given_args)
-        @constraints_block ? @constraints_block.call(*given_args) : nil
-      end
-      
-      def constraints_match?(given_args)
-        @constraints == given_args
-      end
-      
-      def match_any_args?
-        @match_any_args
-      end
-      
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/error_generator.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/error_generator.rb
deleted file mode 100644
index 4405465..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/error_generator.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-module Spec
-  module Mocks
-    class ErrorGenerator
-      attr_writer :opts
-      
-      def initialize(target, name)
-        @target = target
-        @name = name
-      end
-      
-      def opts
-        @opts ||= {}
-      end
-
-      def raise_unexpected_message_error(sym, *args)
-        __raise "#{intro} received unexpected message :#{sym}#{arg_message(*args)}"
-      end
-      
-      def raise_unexpected_message_args_error(expectation, *args)
-        expected_args = format_args(*expectation.expected_args)
-        actual_args = args.empty? ? "(no args)" : format_args(*args)
-        __raise "#{intro} expected #{expectation.sym.inspect} with #{expected_args} but received it with #{actual_args}"
-      end
-      
-      def raise_expectation_error(sym, expected_received_count, actual_received_count, *args)
-        __raise "#{intro} expected :#{sym}#{arg_message(*args)} #{count_message(expected_received_count)}, but received it #{count_message(actual_received_count)}"
-      end
-      
-      def raise_out_of_order_error(sym)
-        __raise "#{intro} received :#{sym} out of order"
-      end
-      
-      def raise_block_failed_error(sym, detail)
-        __raise "#{intro} received :#{sym} but passed block failed with: #{detail}"
-      end
-      
-      def raise_missing_block_error(args_to_yield)
-        __raise "#{intro} asked to yield |#{arg_list(*args_to_yield)}| but no block was passed"
-      end
-      
-      def raise_wrong_arity_error(args_to_yield, arity)
-        __raise "#{intro} yielded |#{arg_list(*args_to_yield)}| to block with arity of #{arity}"
-      end
-      
-      private
-      def intro
-        @name ? "Mock '#{@name}'" : @target.class == Class ? "<#{@target.inspect} (class)>" : (@target.nil? ? "nil" : @target.to_s)
-      end
-      
-      def __raise(message)
-        message = opts[:message] unless opts[:message].nil?
-        Kernel::raise(Spec::Mocks::MockExpectationError, message)
-      end
-      
-      def arg_message(*args)
-        " with " + format_args(*args)
-      end
-      
-      def format_args(*args)
-        return "(no args)" if args.empty? || args == [:no_args]
-        return "(any args)" if args == [:any_args]
-        "(" + arg_list(*args) + ")"
-      end
-
-      def arg_list(*args)
-        args.collect do |arg|
-          arg.respond_to?(:description) ? arg.description : arg.inspect
-        end.join(", ")
-      end
-      
-      def count_message(count)
-        return "at least #{pretty_print(count.abs)}" if count < 0
-        return pretty_print(count)
-      end
-
-      def pretty_print(count)
-        return "once" if count == 1
-        return "twice" if count == 2
-        return "#{count} times"
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/errors.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/errors.rb
deleted file mode 100644
index 68fdfe0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/errors.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-module Spec
-  module Mocks
-    class MockExpectationError < StandardError
-    end
-    
-    class AmbiguousReturnError < StandardError
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/extensions.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/extensions.rb
deleted file mode 100644
index 6fd51a2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/extensions.rb
+++ /dev/null
@@ -1 +0,0 @@
-require 'spec/mocks/extensions/object'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/extensions/object.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/extensions/object.rb
deleted file mode 100644
index 4b75310..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/extensions/object.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class Object
-  include Spec::Mocks::Methods
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/framework.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/framework.rb
deleted file mode 100644
index 89d24c4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/framework.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# Require everything except the global extensions of class and object. This
-# supports wrapping rspec's mocking functionality without invading every
-# object in the system.
-
-require 'spec/mocks/methods'
-require 'spec/mocks/argument_constraints'
-require 'spec/mocks/spec_methods'
-require 'spec/mocks/proxy'
-require 'spec/mocks/mock'
-require 'spec/mocks/argument_expectation'
-require 'spec/mocks/message_expectation'
-require 'spec/mocks/order_group'
-require 'spec/mocks/errors'
-require 'spec/mocks/error_generator'
-require 'spec/mocks/space'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/message_expectation.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/message_expectation.rb
deleted file mode 100644
index e70adbe..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/message_expectation.rb
+++ /dev/null
@@ -1,331 +0,0 @@
-module Spec
-  module Mocks
-
-    class BaseExpectation
-      attr_reader :sym
-      attr_writer :expected_received_count, :method_block, :expected_from
-      protected :expected_received_count=, :method_block=, :expected_from=
-      attr_accessor :error_generator
-      protected :error_generator, :error_generator=
-      
-      def initialize(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={})
-        @error_generator = error_generator
-        @error_generator.opts = opts
-        @expected_from = expected_from
-        @sym = sym
-        @method_block = method_block
-        @return_block = nil
-        @actual_received_count = 0
-        @expected_received_count = expected_received_count
-        @args_expectation = ArgumentExpectation.new([ArgumentConstraints::AnyArgsConstraint.new])
-        @consecutive = false
-        @exception_to_raise = nil
-        @symbol_to_throw = nil
-        @order_group = expectation_ordering
-        @at_least = nil
-        @at_most = nil
-        @args_to_yield = []
-      end
-      
-      def build_child(expected_from, method_block, expected_received_count, opts={})
-        child = clone
-        child.expected_from = expected_from
-        child.method_block = method_block
-        child.expected_received_count = expected_received_count
-        new_gen = error_generator.clone
-        new_gen.opts = opts
-        child.error_generator = new_gen
-        child.clone_args_to_yield @args_to_yield
-        child
-      end
-      
-      def error_generator_opts=(opts={})
-        @error_generator.opts = opts
-      end
-      protected :error_generator_opts=
-      
-      def expected_args
-        @args_expectation.args
-      end
-
-      def and_return(*values, &return_block)
-        Kernel::raise AmbiguousReturnError unless @method_block.nil?
-        case values.size
-          when 0 then value = nil
-          when 1 then value = values[0]
-        else
-          value = values
-          @consecutive = true
-          @expected_received_count = values.size if !ignoring_args? &&
-                                                    @expected_received_count < values.size
-        end
-        @return_block = block_given? ? return_block : lambda { value }
-        # Ruby 1.9 - see where this is used below
-        @ignore_args = !block_given?
-      end
-      
-      # :call-seq:
-      #   and_raise()
-      #   and_raise(Exception) #any exception class
-      #   and_raise(exception) #any exception object
-      #
-      # == Warning
-      #
-      # When you pass an exception class, the MessageExpectation will
-      # raise an instance of it, creating it with +new+. If the exception
-      # class initializer requires any parameters, you must pass in an
-      # instance and not the class.
-      def and_raise(exception=Exception)
-        @exception_to_raise = exception
-      end
-      
-      def and_throw(symbol)
-        @symbol_to_throw = symbol
-      end
-      
-      def and_yield(*args)
-        if @args_to_yield_were_cloned
-          @args_to_yield.clear
-          @args_to_yield_were_cloned = false
-        end
-        
-        @args_to_yield << args
-        self
-      end
-  
-      def matches(sym, args)
-        @sym == sym and @args_expectation.args_match?(args)
-      end
-      
-      def invoke(args, block)
-        if @expected_received_count == 0
-          @failed_fast = true
-          @actual_received_count += 1
-          @error_generator.raise_expectation_error @sym, @expected_received_count, @actual_received_count, *args
-        end
-        
-        @order_group.handle_order_constraint self
-
-        begin
-          Kernel::raise @exception_to_raise unless @exception_to_raise.nil?
-          Kernel::throw @symbol_to_throw unless @symbol_to_throw.nil?
-          
-          
-          if !@method_block.nil?
-            default_return_val = invoke_method_block(args)
-          elsif @args_to_yield.size > 0
-            default_return_val = invoke_with_yield(block)
-          else
-            default_return_val = nil
-          end
-          
-          if @consecutive
-            return invoke_consecutive_return_block(args, block)
-          elsif @return_block
-            return invoke_return_block(args, block)
-          else
-            return default_return_val
-          end
-        ensure
-          @actual_received_count += 1
-        end
-      end
-
-      def called_max_times?
-        @expected_received_count != :any && @expected_received_count > 0 &&
-          @actual_received_count >= @expected_received_count
-      end
-      
-      protected
-
-      def invoke_method_block(args)
-        begin
-          @method_block.call(*args)
-        rescue => detail
-          @error_generator.raise_block_failed_error @sym, detail.message
-        end
-      end
-      
-      def invoke_with_yield(block)
-        if block.nil?
-          @error_generator.raise_missing_block_error @args_to_yield
-        end
-        value = nil
-        @args_to_yield.each do |args_to_yield_this_time|
-          if block.arity > -1 && args_to_yield_this_time.length != block.arity
-            @error_generator.raise_wrong_arity_error args_to_yield_this_time, block.arity
-          end
-          value = block.call(*args_to_yield_this_time)
-        end
-        value
-      end
-      
-      def invoke_consecutive_return_block(args, block)
-        args << block unless block.nil?
-        value = @return_block.call(*args)
-        
-        index = [@actual_received_count, value.size-1].min
-        value[index]
-      end
-      
-      def invoke_return_block(args, block)
-        args << block unless block.nil?
-        # Ruby 1.9 - when we set @return_block to return values
-        # regardless of arguments, any arguments will result in
-        # a "wrong number of arguments" error
-        if @ignore_args
-          @return_block.call()
-        else
-          @return_block.call(*args)
-        end
-      end
-
-      def clone_args_to_yield(args)
-        @args_to_yield = args.clone
-        @args_to_yield_were_cloned = true
-      end
-      
-      def failed_fast?
-        @failed_fast
-      end
-    end
-    
-    class MessageExpectation < BaseExpectation
-      
-      def matches_name_but_not_args(sym, args)
-        @sym == sym and not @args_expectation.args_match?(args)
-      end
-       
-      def verify_messages_received   
-        return if expected_messages_received? || failed_fast?
-    
-        generate_error
-      rescue Spec::Mocks::MockExpectationError => error
-        error.backtrace.insert(0, @expected_from)
-        Kernel::raise error
-      end
-      
-      def expected_messages_received?
-        ignoring_args? || matches_exact_count? ||
-           matches_at_least_count? || matches_at_most_count?
-      end
-      
-      def ignoring_args?
-        @expected_received_count == :any
-      end
-      
-      def matches_at_least_count?
-        @at_least && @actual_received_count >= @expected_received_count
-      end
-      
-      def matches_at_most_count?
-        @at_most && @actual_received_count <= @expected_received_count
-      end
-      
-      def matches_exact_count?
-        @expected_received_count == @actual_received_count
-      end
-      
-      def similar_messages
-        @similar_messages ||= []
-      end
-
-      def advise(args, block)
-        similar_messages << args
-      end
-      
-      def generate_error
-        if similar_messages.empty?
-          @error_generator.raise_expectation_error(@sym, @expected_received_count, @actual_received_count, *@args_expectation.args)
-        else
-          @error_generator.raise_unexpected_message_args_error(self, *@similar_messages.first)
-        end
-      end
-
-      def with(*args, &block)
-        @args_expectation = ArgumentExpectation.new(args, &block)
-        self
-      end
-      
-      def exactly(n)
-        set_expected_received_count :exactly, n
-        self
-      end
-      
-      def at_least(n)
-        set_expected_received_count :at_least, n
-        self
-      end
-      
-      def at_most(n)
-        set_expected_received_count :at_most, n
-        self
-      end
-
-      def times(&block)
-        @method_block = block if block
-        self
-      end
-  
-      def any_number_of_times(&block)
-        @method_block = block if block
-        @expected_received_count = :any
-        self
-      end
-  
-      def never
-        @expected_received_count = 0
-        self
-      end
-  
-      def once(&block)
-        @method_block = block if block
-        @expected_received_count = 1
-        self
-      end
-  
-      def twice(&block)
-        @method_block = block if block
-        @expected_received_count = 2
-        self
-      end
-  
-      def ordered(&block)
-        @method_block = block if block
-        @order_group.register(self)
-        @ordered = true
-        self
-      end
-      
-      def negative_expectation_for?(sym)
-        return false
-      end
-      
-      protected
-        def set_expected_received_count(relativity, n)
-          @at_least = (relativity == :at_least)
-          @at_most = (relativity == :at_most)
-          @expected_received_count = case n
-            when Numeric
-              n
-            when :once
-              1
-            when :twice
-              2
-          end
-        end
-      
-    end
-    
-    class NegativeMessageExpectation < MessageExpectation
-      def initialize(message, expectation_ordering, expected_from, sym, method_block)
-        super(message, expectation_ordering, expected_from, sym, method_block, 0)
-      end
-      
-      def negative_expectation_for?(sym)
-        return @sym == sym
-      end
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/methods.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/methods.rb
deleted file mode 100644
index 7387e4f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/methods.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-module Spec
-  module Mocks
-    module Methods
-      def should_receive(sym, opts={}, &block)
-        __mock_proxy.add_message_expectation(opts[:expected_from] || caller(1)[0], sym.to_sym, opts, &block)
-      end
-
-      def should_not_receive(sym, &block)
-        __mock_proxy.add_negative_message_expectation(caller(1)[0], sym.to_sym, &block)
-      end
-      
-      def stub!(sym_or_hash, opts={})
-        if Hash === sym_or_hash
-          sym_or_hash.each {|method, value| stub!(method).and_return value }
-        else
-          __mock_proxy.add_stub(caller(1)[0], sym_or_hash.to_sym, opts)
-        end
-      end
-      
-      def received_message?(sym, *args, &block) #:nodoc:
-        __mock_proxy.received_message?(sym.to_sym, *args, &block)
-      end
-      
-      def rspec_verify #:nodoc:
-        __mock_proxy.verify
-      end
-
-      def rspec_reset #:nodoc:
-        __mock_proxy.reset
-      end
-      
-      def as_null_object
-        __mock_proxy.as_null_object
-      end
-      
-      def null_object?
-        __mock_proxy.null_object?
-      end
-
-    private
-
-      def __mock_proxy
-        if Mock === self
-          @mock_proxy ||= Proxy.new(self, @name, @options)
-        else
-          @mock_proxy ||= Proxy.new(self)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/mock.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/mock.rb
deleted file mode 100644
index 33549a4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/mock.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-module Spec
-  module Mocks
-    class Mock
-      include Methods
-
-      # Creates a new mock with a +name+ (that will be used in error messages
-      # only) == Options:
-      # * <tt>:null_object</tt> - if true, the mock object acts as a forgiving
-      #   null object allowing any message to be sent to it.
-      def initialize(name, stubs_and_options={})
-        @name = name
-        @options = parse_options(stubs_and_options)
-        assign_stubs(stubs_and_options)
-      end
-      
-      # This allows for comparing the mock to other objects that proxy such as
-      # ActiveRecords belongs_to proxy objects By making the other object run
-      # the comparison, we're sure the call gets delegated to the proxy target
-      # This is an unfortunate side effect from ActiveRecord, but this should
-      # be safe unless the RHS redefines == in a nonsensical manner
-      def ==(other)
-        other == __mock_proxy
-      end
-
-      def method_missing(sym, *args, &block)
-        __mock_proxy.instance_eval {@messages_received << [sym, args, block]}
-        begin
-          return self if __mock_proxy.null_object?
-          super(sym, *args, &block)
-        rescue NameError
-          __mock_proxy.raise_unexpected_message_error sym, *args
-        end
-      end
-      
-      def inspect
-        "#<#{self.class}:#{sprintf '0x%x', self.object_id} @name=#{@name.inspect}>"
-      end
-      
-      def to_s
-        inspect.gsub('<','[').gsub('>',']')
-      end
-      
-      private
-      
-        def parse_options(options)
-          options.has_key?(:null_object) ? {:null_object => options.delete(:null_object)} : {}
-        end
-        
-        def assign_stubs(stubs)
-          stubs.each_pair do |message, response|
-            stub!(message).and_return(response)
-          end
-        end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/order_group.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/order_group.rb
deleted file mode 100644
index 9983207..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/order_group.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-module Spec
-  module Mocks
-    class OrderGroup
-      def initialize error_generator
-        @error_generator = error_generator
-        @ordering = Array.new
-      end
-      
-      def register(expectation)
-        @ordering << expectation
-      end
-      
-      def ready_for?(expectation)
-        return @ordering.first == expectation
-      end
-      
-      def consume
-        @ordering.shift
-      end
-      
-      def handle_order_constraint expectation
-        return unless @ordering.include? expectation
-        return consume if ready_for?(expectation)
-        @error_generator.raise_out_of_order_error expectation.sym
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/proxy.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/proxy.rb
deleted file mode 100644
index ab51fd5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/proxy.rb
+++ /dev/null
@@ -1,224 +0,0 @@
-module Spec
-  module Mocks
-    class Proxy
-      DEFAULT_OPTIONS = {
-        :null_object => false,
-      }
-      
-      @@warn_about_expectations_on_nil = true
-      
-      def self.allow_message_expectations_on_nil
-        @@warn_about_expectations_on_nil = false
-        
-        # ensure nil.rspec_verify is called even if an expectation is not set in the example
-        # otherwise the allowance would effect subsequent examples
-        $rspec_mocks.add(nil) unless $rspec_mocks.nil?
-      end
-
-      def initialize(target, name=nil, options={})
-        @target = target
-        @name = name
-        @error_generator = ErrorGenerator.new target, name
-        @expectation_ordering = OrderGroup.new @error_generator
-        @expectations = []
-        @messages_received = []
-        @stubs = []
-        @proxied_methods = []
-        @options = options ? DEFAULT_OPTIONS.dup.merge(options) : DEFAULT_OPTIONS
-      end
-
-      def null_object?
-        @options[:null_object]
-      end
-      
-      def as_null_object
-        @options[:null_object] = true
-        @target
-      end
-
-      def add_message_expectation(expected_from, sym, opts={}, &block)        
-        __add sym
-        warn_if_nil_class sym
-        if existing_stub = @stubs.detect {|s| s.sym == sym }
-          expectation = existing_stub.build_child(expected_from, block_given?? block : nil, 1, opts)
-        else
-          expectation = MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
-        end
-        @expectations << expectation
-        @expectations.last
-      end
-
-      def add_negative_message_expectation(expected_from, sym, &block)
-        __add sym
-        warn_if_nil_class sym
-        @expectations << NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil)
-        @expectations.last
-      end
-
-      def add_stub(expected_from, sym, opts={})
-        __add sym
-        @stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts)
-        @stubs.first
-      end
-
-      def verify #:nodoc:
-        verify_expectations
-      ensure
-        reset
-      end
-
-      def reset
-        clear_expectations
-        clear_stubs
-        reset_proxied_methods
-        clear_proxied_methods
-        reset_nil_expectations_warning
-      end
-
-      def received_message?(sym, *args, &block)
-        @messages_received.any? {|array| array == [sym, args, block]}
-      end
-
-      def has_negative_expectation?(sym)
-        @expectations.detect {|expectation| expectation.negative_expectation_for?(sym)}
-      end
-
-      def message_received(sym, *args, &block)
-        expectation = find_matching_expectation(sym, *args)
-        stub = find_matching_method_stub(sym, *args)
-
-        if (stub && expectation && expectation.called_max_times?) || (stub && !expectation)
-          if expectation = find_almost_matching_expectation(sym, *args)
-            expectation.advise(args, block) unless expectation.expected_messages_received?
-          end
-          stub.invoke([], block)
-        elsif expectation
-          expectation.invoke(args, block)
-        elsif expectation = find_almost_matching_expectation(sym, *args)
-          expectation.advise(args, block) if null_object? unless expectation.expected_messages_received?
-          raise_unexpected_message_args_error(expectation, *args) unless (has_negative_expectation?(sym) or null_object?)
-        else
-          @target.send :method_missing, sym, *args, &block
-        end
-      end
-
-      def raise_unexpected_message_args_error(expectation, *args)
-        @error_generator.raise_unexpected_message_args_error expectation, *args
-      end
-
-      def raise_unexpected_message_error(sym, *args)
-        @error_generator.raise_unexpected_message_error sym, *args
-      end
-      
-    private
-
-      def __add(sym)
-        $rspec_mocks.add(@target) unless $rspec_mocks.nil?
-        define_expected_method(sym)
-      end
-      
-      def warn_if_nil_class(sym)
-        if proxy_for_nil_class? && @@warn_about_expectations_on_nil          
-          Kernel.warn("An expectation of :#{sym} was set on nil. Called from #{caller[2]}. Use allow_message_expectations_on_nil to disable warnings.")
-        end
-      end
-      
-      def define_expected_method(sym)
-        visibility_string = "#{visibility(sym)} :#{sym}"
-        if target_responds_to?(sym) && !target_metaclass.method_defined?(munge(sym))
-          munged_sym = munge(sym)
-          target_metaclass.instance_eval do
-            alias_method munged_sym, sym if method_defined?(sym.to_s)
-          end
-          @proxied_methods << sym
-        end
-        
-        target_metaclass.class_eval(<<-EOF, __FILE__, __LINE__)
-          def #{sym}(*args, &block)
-            __mock_proxy.message_received :#{sym}, *args, &block
-          end
-          #{visibility_string}
-        EOF
-      end
-
-      def target_responds_to?(sym)
-        return @target.send(munge(:respond_to?),sym) if @already_proxied_respond_to
-        return @already_proxied_respond_to = true if sym == :respond_to?
-        return @target.respond_to?(sym)
-      end
-
-      def visibility(sym)
-        if Mock === @target
-          'public'
-        elsif target_metaclass.private_method_defined?(sym)
-          'private'
-        elsif target_metaclass.protected_method_defined?(sym)
-          'protected'
-        else
-          'public'
-        end
-      end
-
-      def munge(sym)
-        "proxied_by_rspec__#{sym.to_s}".to_sym
-      end
-
-      def clear_expectations
-        @expectations.clear
-      end
-
-      def clear_stubs
-        @stubs.clear
-      end
-
-      def clear_proxied_methods
-        @proxied_methods.clear
-      end
-
-      def target_metaclass
-        class << @target; self; end
-      end
-
-      def verify_expectations
-        @expectations.each do |expectation|
-          expectation.verify_messages_received
-        end
-      end
-
-      def reset_proxied_methods
-        @proxied_methods.each do |sym|
-          munged_sym = munge(sym)
-          target_metaclass.instance_eval do
-            if method_defined?(munged_sym.to_s)
-              alias_method sym, munged_sym
-              undef_method munged_sym
-            else
-              undef_method sym
-            end
-          end
-        end
-      end
-      
-      def proxy_for_nil_class?
-        @target.nil?
-      end
-      
-      def reset_nil_expectations_warning
-        @@warn_about_expectations_on_nil = true if proxy_for_nil_class?
-      end
-
-      def find_matching_expectation(sym, *args)
-        @expectations.find {|expectation| expectation.matches(sym, args)}
-      end
-
-      def find_almost_matching_expectation(sym, *args)
-        @expectations.find {|expectation| expectation.matches_name_but_not_args(sym, args)}
-      end
-
-      def find_matching_method_stub(sym, *args)
-        @stubs.find {|stub| stub.matches(sym, args)}
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/space.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/space.rb
deleted file mode 100644
index 3e13224..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/space.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-module Spec
-  module Mocks
-    class Space
-      def add(obj)
-        mocks << obj unless mocks.detect {|m| m.equal? obj}
-      end
-
-      def verify_all
-        mocks.each do |mock|
-          mock.rspec_verify
-        end
-      end
-      
-      def reset_all
-        mocks.each do |mock|
-          mock.rspec_reset
-        end
-        mocks.clear
-      end
-      
-    private
-    
-      def mocks
-        @mocks ||= []
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/spec_methods.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/spec_methods.rb
deleted file mode 100644
index aea5fd7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/spec_methods.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-module Spec
-  module Mocks
-    module ExampleMethods
-      include Spec::Mocks::ArgumentConstraints
-
-      # Shortcut for creating an instance of Spec::Mocks::Mock.
-      #
-      # +name+ is used for failure reporting, so you should use the
-      # role that the mock is playing in the example.
-      #
-      # +stubs_and_options+ lets you assign options and stub values
-      # at the same time. The only option available is :null_object.
-      # Anything else is treated as a stub value.
-      #
-      # == Examples
-      #
-      #   stub_thing = mock("thing", :a => "A")
-      #   stub_thing.a == "A" => true
-      #
-      #   stub_person = stub("thing", :name => "Joe", :email => "joe at domain.com")
-      #   stub_person.name => "Joe"
-      #   stub_person.email => "joe at domain.com"
-      def mock(name, stubs_and_options={})
-        Spec::Mocks::Mock.new(name, stubs_and_options)
-      end
-      
-      alias :stub :mock
-
-      # Shortcut for creating a mock object that will return itself in response
-      # to any message it receives that it hasn't been explicitly instructed
-      # to respond to.
-      def stub_everything(name = 'stub')
-        mock(name, :null_object => true)
-      end
-      
-      # Disables warning messages about expectations being set on nil.
-      #
-      # By default warning messages are issued when expectations are set on nil.  This is to 
-      # prevent false-positives and to catch potential bugs early on.
-      def allow_message_expectations_on_nil
-        Proxy.allow_message_expectations_on_nil
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/rake/spectask.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/rake/spectask.rb
deleted file mode 100644
index b69d3a7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/rake/spectask.rb
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/usr/bin/env ruby
-
-# Define a task library for running RSpec contexts.
-
-require 'rake'
-require 'rake/tasklib'
-
-module Spec
-  module Rake
-
-    # A Rake task that runs a set of specs.
-    #
-    # Example:
-    #
-    #   Spec::Rake::SpecTask.new do |t|
-    #     t.warning = true
-    #     t.rcov = true
-    #   end
-    #
-    # This will create a task that can be run with:
-    #
-    #   rake spec
-    #
-    # If rake is invoked with a "SPEC=filename" command line option,
-    # then the list of spec files will be overridden to include only the
-    # filename specified on the command line.  This provides an easy way
-    # to run just one spec.
-    #
-    # If rake is invoked with a "SPEC_OPTS=options" command line option,
-    # then the given options will override the value of the +spec_opts+
-    # attribute.
-    #
-    # If rake is invoked with a "RCOV_OPTS=options" command line option,
-    # then the given options will override the value of the +rcov_opts+
-    # attribute.
-    #
-    # Examples:
-    #
-    #   rake spec                                      # run specs normally
-    #   rake spec SPEC=just_one_file.rb                # run just one spec file.
-    #   rake spec SPEC_OPTS="--diff"                   # enable diffing
-    #   rake spec RCOV_OPTS="--aggregate myfile.txt"   # see rcov --help for details
-    #
-    # Each attribute of this task may be a proc. This allows for lazy evaluation,
-    # which is sometimes handy if you want to defer the evaluation of an attribute value
-    # until the task is run (as opposed to when it is defined).
-    #
-    # This task can also be used to run existing Test::Unit tests and get RSpec
-    # output, for example like this:
-    #
-    #   require 'rubygems'
-    #   require 'spec/rake/spectask'
-    #   Spec::Rake::SpecTask.new do |t|
-    #     t.ruby_opts = ['-rtest/unit']
-    #     t.spec_files = FileList['test/**/*_test.rb']
-    #   end
-    #
-    class SpecTask < ::Rake::TaskLib
-      class << self
-        def attr_accessor(*names)
-          super(*names)
-          names.each do |name|
-            module_eval "def #{name}() evaluate(@#{name}) end" # Allows use of procs
-          end
-        end
-      end
-
-      # Name of spec task. (default is :spec)
-      attr_accessor :name
-
-      # Array of directories to be added to $LOAD_PATH before running the
-      # specs. Defaults to ['<the absolute path to RSpec's lib directory>']
-      attr_accessor :libs
-
-      # If true, requests that the specs be run with the warning flag set.
-      # E.g. warning=true implies "ruby -w" used to run the specs. Defaults to false.
-      attr_accessor :warning
-
-      # Glob pattern to match spec files. (default is 'spec/**/*_spec.rb')
-      # Setting the SPEC environment variable overrides this.
-      attr_accessor :pattern
-
-      # Array of commandline options to pass to RSpec. Defaults to [].
-      # Setting the SPEC_OPTS environment variable overrides this.
-      attr_accessor :spec_opts
-
-      # Whether or not to use RCov (default is false)
-      # See http://eigenclass.org/hiki.rb?rcov
-      attr_accessor :rcov
-
-      # Array of commandline options to pass to RCov. Defaults to ['--exclude', 'lib\/spec,bin\/spec'].
-      # Ignored if rcov=false
-      # Setting the RCOV_OPTS environment variable overrides this.
-      attr_accessor :rcov_opts
-
-      # Directory where the RCov report is written. Defaults to "coverage"
-      # Ignored if rcov=false
-      attr_accessor :rcov_dir
-
-      # Array of commandline options to pass to ruby. Defaults to [].
-      attr_accessor :ruby_opts
-
-      # Whether or not to fail Rake when an error occurs (typically when specs fail).
-      # Defaults to true.
-      attr_accessor :fail_on_error
-
-      # A message to print to stderr when there are failures.
-      attr_accessor :failure_message
-
-      # Where RSpec's output is written. Defaults to $stdout.
-      # DEPRECATED. Use --format FORMAT:WHERE in spec_opts.
-      attr_accessor :out
-
-      # Explicitly define the list of spec files to be included in a
-      # spec.  +spec_files+ is expected to be an array of file names (a
-      # FileList is acceptable).  If both +pattern+ and +spec_files+ are
-      # used, then the list of spec files is the union of the two.
-      # Setting the SPEC environment variable overrides this.
-      attr_accessor :spec_files
-
-      # Use verbose output. If this is set to true, the task will print
-      # the executed spec command to stdout. Defaults to false.
-      attr_accessor :verbose
-
-      # Defines a new task, using the name +name+.
-      def initialize(name=:spec)
-        @name = name
-        @libs = [File.expand_path(File.dirname(__FILE__) + '/../../../lib')]
-        @pattern = nil
-        @spec_files = nil
-        @spec_opts = []
-        @warning = false
-        @ruby_opts = []
-        @fail_on_error = true
-        @rcov = false
-        @rcov_opts = ['--exclude', 'lib\/spec,bin\/spec,config\/boot.rb']
-        @rcov_dir = "coverage"
-
-        yield self if block_given?
-        @pattern = 'spec/**/*_spec.rb' if pattern.nil? && spec_files.nil?
-        define
-      end
-
-      def define # :nodoc:
-        spec_script = File.expand_path(File.dirname(__FILE__) + '/../../../bin/spec')
-
-        lib_path = libs.join(File::PATH_SEPARATOR)
-        actual_name = Hash === name ? name.keys.first : name
-        unless ::Rake.application.last_comment
-          desc "Run specs" + (rcov ? " using RCov" : "")
-        end
-        task name do
-          RakeFileUtils.verbose(verbose) do
-            unless spec_file_list.empty?
-              # ruby [ruby_opts] -Ilib -S rcov [rcov_opts] bin/spec -- examples [spec_opts]
-              # or
-              # ruby [ruby_opts] -Ilib bin/spec examples [spec_opts]
-              cmd_parts = [RUBY]
-              cmd_parts += ruby_opts
-              cmd_parts << %[-I"#{lib_path}"]
-              cmd_parts << "-S rcov" if rcov
-              cmd_parts << "-w" if warning
-              cmd_parts << rcov_option_list
-              cmd_parts << %[-o "#{rcov_dir}"] if rcov
-              cmd_parts << %["#{spec_script}"]
-              cmd_parts << "--" if rcov
-              cmd_parts += spec_file_list.collect { |fn| %["#{fn}"] }
-              cmd_parts << spec_option_list
-              if out
-                cmd_parts << %[> "#{out}"]
-                STDERR.puts "The Spec::Rake::SpecTask#out attribute is DEPRECATED and will be removed in a future version. Use --format FORMAT:WHERE instead."
-              end
-              cmd = cmd_parts.join(" ")
-              puts cmd if verbose
-              unless system(cmd)
-                STDERR.puts failure_message if failure_message
-                raise("Command #{cmd} failed") if fail_on_error
-              end
-            end
-          end
-        end
-
-        if rcov
-          desc "Remove rcov products for #{actual_name}"
-          task paste("clobber_", actual_name) do
-            rm_r rcov_dir rescue nil
-          end
-
-          clobber_task = paste("clobber_", actual_name)
-          task :clobber => [clobber_task]
-
-          task actual_name => clobber_task
-        end
-        self
-      end
-
-      def rcov_option_list # :nodoc:
-        return "" unless rcov
-        ENV['RCOV_OPTS'] || rcov_opts.join(" ") || ""
-      end
-
-      def spec_option_list # :nodoc:
-        STDERR.puts "RSPECOPTS is DEPRECATED and will be removed in a future version. Use SPEC_OPTS instead." if ENV['RSPECOPTS']
-        ENV['SPEC_OPTS'] || ENV['RSPECOPTS'] || spec_opts.join(" ") || ""
-      end
-
-      def evaluate(o) # :nodoc:
-        case o
-          when Proc then o.call
-          else o
-        end
-      end
-
-      def spec_file_list # :nodoc:
-        if ENV['SPEC']
-          FileList[ ENV['SPEC'] ]
-        else
-          result = []
-          result += spec_files.to_a if spec_files
-          result += FileList[ pattern ].to_a if pattern
-          FileList[result]
-        end
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/rake/verify_rcov.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/rake/verify_rcov.rb
deleted file mode 100644
index 199bd85..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/rake/verify_rcov.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-module RCov
-  # A task that can verify that the RCov coverage doesn't
-  # drop below a certain threshold. It should be run after
-  # running Spec::Rake::SpecTask.
-  class VerifyTask < Rake::TaskLib
-    # Name of the task. Defaults to :verify_rcov
-    attr_accessor :name
-    
-    # Path to the index.html file generated by RCov, which
-    # is the file containing the total coverage.
-    # Defaults to 'coverage/index.html'
-    attr_accessor :index_html
-    
-    # Whether or not to output details. Defaults to true.
-    attr_accessor :verbose
-    
-    # The threshold value (in percent) for coverage. If the 
-    # actual coverage is not equal to this value, the task will raise an 
-    # exception. 
-    attr_accessor :threshold
-    
-    # Require the threshold value be met exactly.  This is the default.
-    attr_accessor :require_exact_threshold
-    
-    def initialize(name=:verify_rcov)
-      @name = name
-      @index_html = 'coverage/index.html'
-      @verbose = true
-      @require_exact_threshold = true
-      yield self if block_given?
-      raise "Threshold must be set" if @threshold.nil?
-      define
-    end
-    
-    def define
-      desc "Verify that rcov coverage is at least #{threshold}%"
-      task @name do
-        total_coverage = 0
-
-        File.open(index_html).each_line do |line|
-          if line =~ /<tt class='coverage_total'>\s*(\d+\.\d+)%\s*<\/tt>/
-            total_coverage = $1.to_f
-            break
-          end
-        end
-        puts "Coverage: #{total_coverage}% (threshold: #{threshold}%)" if verbose
-        raise "Coverage must be at least #{threshold}% but was #{total_coverage}%" if total_coverage < threshold
-        raise "Coverage has increased above the threshold of #{threshold}% to #{total_coverage}%. You should update your threshold value." if (total_coverage > threshold) and require_exact_threshold
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner.rb
deleted file mode 100644
index 212ec87..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner.rb
+++ /dev/null
@@ -1,213 +0,0 @@
-require 'spec/runner/options'
-require 'spec/runner/option_parser'
-require 'spec/runner/example_group_runner'
-require 'spec/runner/command_line'
-require 'spec/runner/drb_command_line'
-require 'spec/runner/backtrace_tweaker'
-require 'spec/runner/reporter'
-require 'spec/runner/spec_parser'
-require 'spec/runner/class_and_arguments_parser'
-
-module Spec
-  # == ExampleGroups and Examples
-  # 
-  # Rather than expressing examples in classes, RSpec uses a custom DSLL (DSL light) to 
-  # describe groups of examples.
-  # 
-  # A ExampleGroup is the equivalent of a fixture in xUnit-speak. It is a metaphor for the context
-  # in which you will run your executable example - a set of known objects in a known starting state.
-  # We begin be describing
-  # 
-  #   describe Account do
-  # 
-  #     before do
-  #       @account = Account.new
-  #     end
-  # 
-  #     it "should have a balance of $0" do
-  #       @account.balance.should == Money.new(0, :dollars)
-  #     end
-  # 
-  #   end
-  # 
-  # We use the before block to set up the Example (given), and then the #it method to
-  # hold the example code that expresses the event (when) and the expected outcome (then).
-  # 
-  # == Helper Methods
-  # 
-  # A primary goal of RSpec is to keep the examples clear. We therefore prefer
-  # less indirection than you might see in xUnit examples and in well factored, DRY production code. We feel
-  # that duplication is OK if removing it makes it harder to understand an example without
-  # having to look elsewhere to understand its context.
-  # 
-  # That said, RSpec does support some level of encapsulating common code in helper
-  # methods that can exist within a context or within an included module.
-  # 
-  # == Setup and Teardown
-  # 
-  # You can use before and after within a Example. Both methods take an optional
-  # scope argument so you can run the block before :each example or before :all examples
-  # 
-  #   describe "..." do
-  #     before :all do
-  #       ...
-  #     end
-  # 
-  #     before :each do
-  #       ...
-  #     end
-  # 
-  #     it "should do something" do
-  #       ...
-  #     end
-  # 
-  #     it "should do something else" do
-  #       ...
-  #     end
-  # 
-  #     after :each do
-  #       ...
-  #     end
-  # 
-  #     after :all do
-  #       ...
-  #     end
-  # 
-  #   end
-  # 
-  # The <tt>before :each</tt> block will run before each of the examples, once for each example. Likewise,
-  # the <tt>after :each</tt> block will run after each of the examples.
-  # 
-  # It is also possible to specify a <tt>before :all</tt> and <tt>after :all</tt>
-  # block that will run only once for each behaviour, respectively before the first <code>before :each</code>
-  # and after the last <code>after :each</code>. The use of these is generally discouraged, because it
-  # introduces dependencies between the examples. Still, it might prove useful for very expensive operations
-  # if you know what you are doing.
-  # 
-  # == Local helper methods
-  # 
-  # You can include local helper methods by simply expressing them within a context:
-  # 
-  #   describe "..." do
-  #   
-  #     it "..." do
-  #       helper_method
-  #     end
-  # 
-  #     def helper_method
-  #       ...
-  #     end
-  # 
-  #   end
-  # 
-  # == Included helper methods
-  # 
-  # You can include helper methods in multiple contexts by expressing them within
-  # a module, and then including that module in your context:
-  # 
-  #   module AccountExampleHelperMethods
-  #     def helper_method
-  #       ...
-  #     end
-  #   end
-  # 
-  #   describe "A new account" do
-  #     include AccountExampleHelperMethods
-  #     before do
-  #       @account = Account.new
-  #     end
-  # 
-  #     it "should have a balance of $0" do
-  #       helper_method
-  #       @account.balance.should eql(Money.new(0, :dollars))
-  #     end
-  #   end
-  # 
-  # == Shared Example Groups
-  # 
-  # You can define a shared Example Group, that may be used on other groups
-  #
-  #  share_examples_for "All Editions" do
-  #    it "all editions behaviour" ...
-  #  end
-  #
-  #  describe SmallEdition do
-  #    it_should_behave_like "All Editions"
-  #  
-  #    it "should do small edition stuff" do
-  #      ...
-  #    end
-  #  end
-  #
-  # You can also assign the shared group to a module and include that
-  #
-  #  share_as :AllEditions do
-  #    it "should do all editions stuff" ...
-  #  end
-  #
-  #  describe SmallEdition do
-  #    it_should_behave_like AllEditions
-  #  
-  #    it "should do small edition stuff" do
-  #      ...
-  #    end
-  #  end
-  #
-  # And, for those of you who prefer to use something more like Ruby, you
-  # can just include the module directly
-  #
-  #  describe SmallEdition do
-  #    include AllEditions
-  #  
-  #    it "should do small edition stuff" do
-  #      ...
-  #    end
-  #  end
-  module Runner
-    class << self
-      def configuration # :nodoc:
-        @configuration ||= Spec::Example::Configuration.new
-      end
-      
-      # Use this to configure various configurable aspects of
-      # RSpec:
-      #
-      #   Spec::Runner.configure do |configuration|
-      #     # Configure RSpec here
-      #   end
-      #
-      # The yielded <tt>configuration</tt> object is a
-      # Spec::Example::Configuration instance. See its RDoc
-      # for details about what you can do with it.
-      #
-      def configure
-        yield configuration
-      end
-      
-      def register_at_exit_hook # :nodoc:
-        unless @already_registered_at_exit_hook
-          at_exit do
-            unless $! || Spec.run? || Spec::Example::ExampleGroupFactory.all_registered?(options.example_groups)
-              success = Spec.run
-              exit success if Spec.exit?
-            end
-          end
-          @already_registered_at_exit_hook = true
-        end
-      end
-
-      def options # :nodoc:
-        @options ||= begin
-          parser = ::Spec::Runner::OptionParser.new($stderr, $stdout)
-          parser.order!(ARGV)
-          parser.options
-        end
-      end
-      
-      def use options
-        @options = options
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/backtrace_tweaker.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/backtrace_tweaker.rb
deleted file mode 100644
index b4fae8e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/backtrace_tweaker.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-module Spec
-  module Runner
-    class BacktraceTweaker
-      def clean_up_double_slashes(line)
-        line.gsub!('//','/')
-      end
-    end
-
-    class NoisyBacktraceTweaker < BacktraceTweaker
-      def tweak_backtrace(error)
-        return if error.backtrace.nil?
-        error.backtrace.each do |line|
-          clean_up_double_slashes(line)
-        end
-      end
-    end
-
-    # Tweaks raised Exceptions to mask noisy (unneeded) parts of the backtrace
-    class QuietBacktraceTweaker < BacktraceTweaker
-      unless defined?(IGNORE_PATTERNS)
-        root_dir = File.expand_path(File.join(__FILE__, '..', '..', '..', '..'))
-        spec_files = Dir["#{root_dir}/lib/*"].map do |path| 
-          subpath = path[root_dir.length..-1]
-          /#{subpath}/
-        end
-        IGNORE_PATTERNS = spec_files + [
-          /\/lib\/ruby\//,
-          /bin\/spec:/,
-          /bin\/rcov:/,
-          /lib\/rspec-rails/,
-          /vendor\/rails/,
-          # TextMate's Ruby and RSpec plugins
-          /Ruby\.tmbundle\/Support\/tmruby.rb:/,
-          /RSpec\.tmbundle\/Support\/lib/,
-          /temp_textmate\./,
-          /mock_frameworks\/rspec/,
-          /spec_server/
-        ]
-      end
-      
-      def tweak_backtrace(error)
-        return if error.backtrace.nil?
-        error.backtrace.collect! do |message|
-          clean_up_double_slashes(message)
-          kept_lines = message.split("\n").select do |line|
-            IGNORE_PATTERNS.each do |ignore|
-              break if line =~ ignore
-            end
-          end
-          kept_lines.empty?? nil : kept_lines.join("\n")
-        end
-        error.backtrace.compact!
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/class_and_arguments_parser.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/class_and_arguments_parser.rb
deleted file mode 100644
index 65dc451..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/class_and_arguments_parser.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-module Spec
-  module Runner
-    class ClassAndArgumentsParser
-      class << self
-        def parse(s)
-          if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/
-            arg = $2 == "" ? nil : $2
-            [$1, arg]
-          else
-            raise "Couldn't parse #{s.inspect}"
-          end
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/command_line.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/command_line.rb
deleted file mode 100644
index e7639a6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/command_line.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require 'spec/runner/option_parser'
-
-module Spec
-  module Runner
-    class CommandLine
-      class << self
-        def run(tmp_options=Spec::Runner.options)
-          orig_options = Spec::Runner.options
-          Spec::Runner.use tmp_options
-          tmp_options.run_examples
-        ensure
-          Spec::Runner.use orig_options
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/drb_command_line.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/drb_command_line.rb
deleted file mode 100644
index 911c868..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/drb_command_line.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require "drb/drb"
-
-module Spec
-  module Runner
-    # Facade to run specs by connecting to a DRB server
-    class DrbCommandLine
-      # Runs specs on a DRB server. Note that this API is similar to that of
-      # CommandLine - making it possible for clients to use both interchangeably.
-      def self.run(options)
-        begin
-          DRb.start_service
-          spec_server = DRbObject.new_with_uri("druby://127.0.0.1:8989")
-          spec_server.run(options.argv, options.error_stream, options.output_stream)
-        rescue DRb::DRbConnError => e
-          options.error_stream.puts "No server is running"
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb
deleted file mode 100644
index 7275c6a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-module Spec
-  module Runner
-    class ExampleGroupRunner
-      def initialize(options)
-        @options = options
-      end
-
-      def load_files(files)
-        # It's important that loading files (or choosing not to) stays the
-        # responsibility of the ExampleGroupRunner. Some implementations (like)
-        # the one using DRb may choose *not* to load files, but instead tell
-        # someone else to do it over the wire.
-        files.each do |file|
-          load file
-        end
-      end
-
-      def run
-        prepare
-        success = true
-        example_groups.each do |example_group|
-          success = success & example_group.run
-        end
-        return success
-      ensure
-        finish
-      end
-
-      protected
-      def prepare
-        reporter.start(number_of_examples)
-        example_groups.reverse! if reverse
-      end
-
-      def finish
-        reporter.end
-        reporter.dump
-      end
-
-      def reporter
-        @options.reporter
-      end
-
-      def reverse
-        @options.reverse
-      end
-
-      def example_groups
-        @options.example_groups
-      end
-
-      def number_of_examples
-        @options.number_of_examples
-      end
-    end
-    # TODO: BT - Deprecate BehaviourRunner?
-    BehaviourRunner = ExampleGroupRunner
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/base_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/base_formatter.rb
deleted file mode 100644
index b3501c6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/base_formatter.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-module Spec
-  module Runner
-    module Formatter
-      # Baseclass for formatters that implements all required methods as no-ops. 
-      class BaseFormatter
-        attr_accessor :example_group, :options, :where
-        def initialize(options, where)
-          @options = options
-          @where = where
-        end
-        
-        # This method is invoked before any examples are run, right after
-        # they have all been collected. This can be useful for special
-        # formatters that need to provide progress on feedback (graphical ones)
-        #
-        # This method will only be invoked once, and the next one to be invoked
-        # is #add_example_group
-        def start(example_count)
-        end
-
-        # This method is invoked at the beginning of the execution of each example_group.
-        # +example_group+ is the example_group.
-        #
-        # The next method to be invoked after this is #example_failed or #example_finished
-        def add_example_group(example_group)
-          @example_group = example_group
-        end
-
-        # This method is invoked when an +example+ starts.
-        def example_started(example)
-        end
-
-        # This method is invoked when an +example+ passes.
-        def example_passed(example)
-        end
-
-        # This method is invoked when an +example+ fails, i.e. an exception occurred
-        # inside it (such as a failed should or other exception). +counter+ is the 
-        # sequence number of the failure (starting at 1) and +failure+ is the associated 
-        # Failure object.
-        def example_failed(example, counter, failure)
-        end
-        
-        # This method is invoked when an example is not yet implemented (i.e. has not
-        # been provided a block), or when an ExamplePendingError is raised.
-        # +message+ is the message from the ExamplePendingError, if it exists, or the
-        # default value of "Not Yet Implemented"
-        # +pending_caller+ is the file and line number of the spec which
-        # has called the pending method
-        def example_pending(example, message, pending_caller)
-        end
-
-        # This method is invoked after all of the examples have executed. The next method
-        # to be invoked after this one is #dump_failure (once for each failed example),
-        def start_dump
-        end
-
-        # Dumps detailed information about an example failure.
-        # This method is invoked for each failed example after all examples have run. +counter+ is the sequence number
-        # of the associated example. +failure+ is a Failure object, which contains detailed
-        # information about the failure.
-        def dump_failure(counter, failure)
-        end
-      
-        # This method is invoked after the dumping of examples and failures.
-        def dump_summary(duration, example_count, failure_count, pending_count)
-        end
-        
-        # This gets invoked after the summary if option is set to do so.
-        def dump_pending
-        end
-
-        # This method is invoked at the very end. Allows the formatter to clean up, like closing open streams.
-        def close
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/base_text_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/base_text_formatter.rb
deleted file mode 100644
index 7e8bb84..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/base_text_formatter.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-require 'spec/runner/formatter/base_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      # Baseclass for text-based formatters. Can in fact be used for
-      # non-text based ones too - just ignore the +output+ constructor
-      # argument.
-      class BaseTextFormatter < BaseFormatter
-        attr_reader :output, :pending_examples
-        # Creates a new instance that will write to +where+. If +where+ is a
-        # String, output will be written to the File with that name, otherwise
-        # +where+ is exected to be an IO (or an object that responds to #puts and #write).
-        def initialize(options, where)
-          super
-          if where.is_a?(String)
-            @output = File.open(where, 'w')
-          else
-            @output = where
-          end
-          @pending_examples = []
-        end
-        
-        def example_pending(example, message, pending_caller)
-          @pending_examples << [example.__full_description, message, pending_caller]
-        end
-        
-        def dump_failure(counter, failure)
-          @output.puts
-          @output.puts "#{counter.to_s})"
-          @output.puts colourise("#{failure.header}\n#{failure.exception.message}", failure)
-          @output.puts format_backtrace(failure.exception.backtrace)
-          @output.flush
-        end
-        
-        def colourise(s, failure)
-          if(failure.expectation_not_met?)
-            red(s)
-          elsif(failure.pending_fixed?)
-            blue(s)
-          else
-            magenta(s)
-          end
-        end
-      
-        def dump_summary(duration, example_count, failure_count, pending_count)
-          return if dry_run?
-          @output.puts
-          @output.puts "Finished in #{duration} seconds"
-          @output.puts
-
-          summary = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
-          summary << ", #{pending_count} pending" if pending_count > 0  
-
-          if failure_count == 0
-            if pending_count > 0
-              @output.puts yellow(summary)
-            else
-              @output.puts green(summary)
-            end
-          else
-            @output.puts red(summary)
-          end
-          @output.flush
-        end
-
-        def dump_pending
-          unless @pending_examples.empty?
-            @output.puts
-            @output.puts "Pending:"
-            @pending_examples.each do |pending_example|
-              @output.puts "#{pending_example[0]} (#{pending_example[1]})" 
-              @output.puts "  Called from #{pending_example[2]}"
-            end
-          end
-          @output.flush
-        end
-        
-        def close
-          if IO === @output && @output != $stdout
-            @output.close 
-          end
-        end
-        
-        def format_backtrace(backtrace)
-          return "" if backtrace.nil?
-          backtrace.map { |line| backtrace_line(line) }.join("\n")
-        end
-      
-      protected
-
-        def colour?
-          @options.colour ? true : false
-        end
-
-        def dry_run?
-          @options.dry_run ? true : false
-        end
-        
-        def backtrace_line(line)
-          line.sub(/\A([^:]+:\d+)$/, '\\1:')
-        end
-
-        def colour(text, colour_code)
-          return text unless colour? && output_to_tty?
-          "#{colour_code}#{text}\e[0m"
-        end
-
-        def output_to_tty?
-          begin
-            @output.tty? || ENV.has_key?("AUTOTEST")
-          rescue NoMethodError
-            false
-          end
-        end
-        
-        def green(text); colour(text, "\e[32m"); end
-        def red(text); colour(text, "\e[31m"); end
-        def magenta(text); colour(text, "\e[35m"); end
-        def yellow(text); colour(text, "\e[33m"); end
-        def blue(text); colour(text, "\e[34m"); end
-        
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/failing_example_groups_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/failing_example_groups_formatter.rb
deleted file mode 100644
index 8d39bc5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/failing_example_groups_formatter.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      class FailingExampleGroupsFormatter < BaseTextFormatter
-        def example_failed(example, counter, failure)
-          if @example_group
-            description_parts = @example_group.description_parts.collect do |description|
-              description =~ /(.*) \(druby.*\)$/ ? $1 : description
-            end
-            @output.puts ::Spec::Example::ExampleGroupMethods.description_text(*description_parts)
-
-            @output.flush
-            @example_group = nil
-          end
-        end
-
-        def dump_failure(counter, failure)
-        end
-
-        def dump_summary(duration, example_count, failure_count, pending_count)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/failing_examples_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/failing_examples_formatter.rb
deleted file mode 100644
index e3a271c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/failing_examples_formatter.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      class FailingExamplesFormatter < BaseTextFormatter      
-        def example_failed(example, counter, failure)
-          @output.puts "#{example_group.description} #{example.description}"
-          @output.flush
-        end
-
-        def dump_failure(counter, failure)
-        end
-
-        def dump_summary(duration, example_count, failure_count, pending_count)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/html_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/html_formatter.rb
deleted file mode 100644
index 51eee51..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/html_formatter.rb
+++ /dev/null
@@ -1,337 +0,0 @@
-require 'erb'
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      class HtmlFormatter < BaseTextFormatter
-        include ERB::Util # for the #h method
-        
-        def initialize(options, output)
-          super
-          @example_group_number = 0
-          @example_number = 0
-        end
-        
-        def method_missing(sym, *args)
-          # no-op
-        end
-
-        # The number of the currently running example_group
-        def example_group_number
-          @example_group_number
-        end
-        
-        # The number of the currently running example (a global counter)
-        def example_number
-          @example_number
-        end
-        
-        def start(example_count)
-          @example_count = example_count
-
-          @output.puts html_header
-          @output.puts report_header
-          @output.flush
-        end
-
-        def add_example_group(example_group)
-          super
-          @example_group_red = false
-          @example_group_red = false
-          @example_group_number += 1
-          unless example_group_number == 1
-            @output.puts "  </dl>"
-            @output.puts "</div>"
-          end
-          @output.puts "<div class=\"example_group\">"
-          @output.puts "  <dl>"
-          @output.puts "  <dt id=\"example_group_#{example_group_number}\">#{h(example_group.description)}</dt>"
-          @output.flush
-        end
-
-        def start_dump
-          @output.puts "  </dl>"
-          @output.puts "</div>"
-          @output.flush
-        end
-
-        def example_started(example)
-          @example_number += 1
-        end
-
-        def example_passed(example)
-          move_progress
-          @output.puts "    <dd class=\"spec passed\"><span class=\"passed_spec_name\">#{h(example.description)}</span></dd>"
-          @output.flush
-        end
-
-        def example_failed(example, counter, failure)
-          extra = extra_failure_content(failure)
-          failure_style = failure.pending_fixed? ? 'pending_fixed' : 'failed'
-          @output.puts "    <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
-          @header_red = true
-          @output.puts "    <script type=\"text/javascript\">makeRed('example_group_#{example_group_number}');</script>" unless @example_group_red
-          @example_group_red = true
-          move_progress
-          @output.puts "    <dd class=\"spec #{failure_style}\">"
-          @output.puts "      <span class=\"failed_spec_name\">#{h(example.description)}</span>"
-          @output.puts "      <div class=\"failure\" id=\"failure_#{counter}\">"
-          @output.puts "        <div class=\"message\"><pre>#{h(failure.exception.message)}</pre></div>" unless failure.exception.nil?
-          @output.puts "        <div class=\"backtrace\"><pre>#{format_backtrace(failure.exception.backtrace)}</pre></div>" unless failure.exception.nil?
-          @output.puts extra unless extra == ""
-          @output.puts "      </div>"
-          @output.puts "    </dd>"
-          @output.flush
-        end
-
-        def example_pending(example, message, pending_caller)
-          @output.puts "    <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
-          @output.puts "    <script type=\"text/javascript\">makeYellow('example_group_#{example_group_number}');</script>" unless @example_group_red
-          move_progress
-          @output.puts "    <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example.description)} (PENDING: #{h(message)})</span></dd>"
-          @output.flush
-        end
-
-        # Override this method if you wish to output extra HTML for a failed spec. For example, you
-        # could output links to images or other files produced during the specs.
-        #
-        def extra_failure_content(failure)
-          require 'spec/runner/formatter/snippet_extractor'
-          @snippet_extractor ||= SnippetExtractor.new
-          "    <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(failure.exception)}</code></pre>"
-        end
-        
-        def move_progress
-          @output.puts "    <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>"
-          @output.flush
-        end
-
-        def percent_done
-          result = 100.0
-          if @example_count != 0
-            result = ((example_number).to_f / @example_count.to_f * 1000).to_i / 10.0
-          end
-          result
-        end
-
-        def dump_failure(counter, failure)
-        end
-
-        def dump_summary(duration, example_count, failure_count, pending_count)
-          if dry_run?
-            totals = "This was a dry-run"
-          else
-            totals = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
-            totals << ", #{pending_count} pending" if pending_count > 0  
-          end
-          @output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{duration} seconds</strong>\";</script>"
-          @output.puts "<script type=\"text/javascript\">document.getElementById('totals').innerHTML = \"#{totals}\";</script>"
-          @output.puts "</div>"
-          @output.puts "</div>"
-          @output.puts "</body>"
-          @output.puts "</html>"
-          @output.flush
-        end
-
-        def html_header 
-          <<-EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RSpec results</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Expires" content="-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <style type="text/css">
-  body {
-    margin: 0;
-    padding: 0;
-    background: #fff;
-    font-size: 80%;
-  }
-  </style>
-</head>
-<body>
-EOF
-        end
-
-        def report_header
-          <<-EOF
-<div class="rspec-report">
-  <script type="text/javascript">
-    // <![CDATA[
-#{global_scripts}
-    // ]]>
-  </script>
-  <style type="text/css">
-#{global_styles}
-  </style>
-
-<div id="rspec-header">
-  <h1>RSpec Results</h1>
-
-  <div id="summary">
-    <p id="totals"> </p>
-    <p id="duration"> </p>
-  </div>
-</div>
-
-<div class="results">
-EOF
-        end
-
-        def global_scripts
-          <<-EOF
-function moveProgressBar(percentDone) {
-  document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
-  document.getElementById(element_id).style.background = '#C40D0D';
-  document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
-  if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-  else
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-}
-EOF
-        end
-        
-        def global_styles
-          <<-EOF
-#rspec-header {
-  background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
-  margin: 0px 10px 0px 10px;
-  padding: 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  font-size: 1.8em;
-}
-
-#summary {
-  margin: 0; padding: 5px 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  text-align: right;
-  position: absolute;
-  top: 0px;
-  right: 0px;
-}
-
-#summary p {
-  margin: 0 0 0 2px;
-}
-
-#summary #totals {
-  font-size: 1.2em;
-}
-
-.example_group {
-  margin: 0 10px 5px;
-  background: #fff;
-}
-
-dl {
-  margin: 0; padding: 0 0 5px;
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  padding: 3px;
-  background: #65C400;
-  color: #fff;
-  font-weight: bold;
-}
-
-dd {
-  margin: 5px 0 5px 5px;
-  padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
-  border-left: 5px solid #65C400;
-  border-bottom: 1px solid #65C400;
-  background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
-  border-left: 5px solid #C20000;
-  border-bottom: 1px solid #C20000;
-  color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
-  border-left: 5px solid #FAF834;
-  border-bottom: 1px solid #FAF834;
-  background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
-  border-left: 5px solid #0000C2;
-  border-bottom: 1px solid #0000C2;
-  color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
-  color: #000;
-  font-size: 12px;
-}
-
-a {
-  color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
-  font-size: 12px;
-  font-family: monospace;
-  color: white;
-  background-color: black;
-  padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
-  width: 75px;
-  padding: 0.1em 1em 0.2em 0;
-  color: #000000;
-  background-color: #FFFBD3;
-}
-EOF
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/nested_text_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/nested_text_formatter.rb
deleted file mode 100644
index 955f937..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/nested_text_formatter.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      class NestedTextFormatter < BaseTextFormatter
-        attr_reader :previous_nested_example_groups
-        def initialize(options, where)
-          super
-          @previous_nested_example_groups = []
-        end
-
-        def add_example_group(example_group)
-          super
-
-          current_nested_example_groups = described_example_group_chain
-          current_nested_example_groups.each_with_index do |nested_example_group, i|
-            unless nested_example_group == previous_nested_example_groups[i]
-              output.puts "#{'  ' * i}#{nested_example_group.description_args}"
-            end
-          end
-
-          @previous_nested_example_groups = described_example_group_chain
-        end
-
-        def example_failed(example, counter, failure)
-          message = if failure.expectation_not_met?
-            "#{current_indentation}#{example.description} (FAILED - #{counter})"
-          else
-            "#{current_indentation}#{example.description} (ERROR - #{counter})"
-          end
-
-          output.puts(failure.expectation_not_met? ? red(message) : magenta(message))
-          output.flush
-        end
-
-        def example_passed(example)
-          message = "#{current_indentation}#{example.description}"
-          output.puts green(message)
-          output.flush
-        end
-
-        def example_pending(example, message, pending_caller)
-          super
-          output.puts yellow("#{current_indentation}#{example.description} (PENDING: #{message})")
-          output.flush
-        end
-
-        def current_indentation
-          '  ' * previous_nested_example_groups.length
-        end
-
-        def described_example_group_chain
-          example_group_chain = []
-          example_group.__send__(:each_ancestor_example_group_class) do |example_group_class|
-            unless example_group_class.description_args.empty?
-              example_group_chain << example_group_class
-            end
-          end
-          example_group_chain
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/profile_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/profile_formatter.rb
deleted file mode 100644
index 8671d72..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/profile_formatter.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-require 'spec/runner/formatter/progress_bar_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      class ProfileFormatter < ProgressBarFormatter
-        
-        def initialize(options, where)
-          super
-          @example_times = []
-        end
-        
-        def start(count)
-          @output.puts "Profiling enabled."
-        end
-        
-        def example_started(example)
-          @time = Time.now
-        end
-        
-        def example_passed(example)
-          super
-          @example_times << [
-            example_group.description,
-            example.description,
-            Time.now - @time
-          ]
-        end
-        
-        def start_dump
-          super
-          @output.puts "\n\nTop 10 slowest examples:\n"
-          
-          @example_times = @example_times.sort_by do |description, example, time|
-            time
-          end.reverse
-          
-          @example_times[0..9].each do |description, example, time|
-            @output.print red(sprintf("%.7f", time))
-            @output.puts " #{description} #{example}"
-          end
-          @output.flush
-        end
-        
-        def method_missing(sym, *args)
-          # ignore
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/progress_bar_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/progress_bar_formatter.rb
deleted file mode 100644
index 226bd0a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/progress_bar_formatter.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      class ProgressBarFormatter < BaseTextFormatter
-        def example_failed(example, counter, failure)
-          @output.print colourise('F', failure)
-          @output.flush
-        end
-
-        def example_passed(example)
-          @output.print green('.')
-          @output.flush
-        end
-      
-        def example_pending(example, message, pending_caller)
-          super
-          @output.print yellow('*')
-          @output.flush
-        end
-        
-        def start_dump
-          @output.puts
-          @output.flush
-        end
-        
-        def method_missing(sym, *args)
-          # ignore
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/snippet_extractor.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/snippet_extractor.rb
deleted file mode 100644
index 41119fe..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/snippet_extractor.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-module Spec
-  module Runner
-    module Formatter
-      # This class extracts code snippets by looking at the backtrace of the passed error
-      class SnippetExtractor #:nodoc:
-        class NullConverter; def convert(code, pre); code; end; end #:nodoc:
-        begin; require 'rubygems'; require 'syntax/convertors/html'; @@converter = Syntax::Convertors::HTML.for_syntax "ruby"; rescue LoadError => e; @@converter = NullConverter.new; end
-        
-        def snippet(error)
-          raw_code, line = snippet_for(error.backtrace[0])
-          highlighted = @@converter.convert(raw_code, false)
-          highlighted << "\n<span class=\"comment\"># gem install syntax to get syntax highlighting</span>" if @@converter.is_a?(NullConverter)
-          post_process(highlighted, line)
-        end
-        
-        def snippet_for(error_line)
-          if error_line =~ /(.*):(\d+)/
-            file = $1
-            line = $2.to_i
-            [lines_around(file, line), line]
-          else
-            ["# Couldn't get snippet for #{error_line}", 1]
-          end
-        end
-        
-        def lines_around(file, line)
-          if File.file?(file)
-            lines = File.open(file).read.split("\n")
-            min = [0, line-3].max
-            max = [line+1, lines.length-1].min
-            selected_lines = []
-            selected_lines.join("\n")
-            lines[min..max].join("\n")
-          else
-            "# Couldn't get snippet for #{file}"
-          end
-        end
-        
-        def post_process(highlighted, offending_line)
-          new_lines = []
-          highlighted.split("\n").each_with_index do |line, i|
-            new_line = "<span class=\"linenum\">#{offending_line+i-2}</span>#{line}"
-            new_line = "<span class=\"offending\">#{new_line}</span>" if i == 2
-            new_lines << new_line
-          end
-          new_lines.join("\n")
-        end
-        
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/specdoc_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/specdoc_formatter.rb
deleted file mode 100644
index 486649d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/specdoc_formatter.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      class SpecdocFormatter < BaseTextFormatter
-        def add_example_group(example_group)
-          super
-          output.puts
-          output.puts example_group.description
-          output.flush
-        end
-      
-        def example_failed(example, counter, failure)
-          message = if failure.expectation_not_met?
-            "- #{example.description} (FAILED - #{counter})"
-          else
-            "- #{example.description} (ERROR - #{counter})"
-          end
-          
-          output.puts(failure.expectation_not_met? ? red(message) : magenta(message))
-          output.flush
-        end
-        
-        def example_passed(example)
-          message = "- #{example.description}"
-          output.puts green(message)
-          output.flush
-        end
-        
-        def example_pending(example, message, pending_caller)
-          super
-          output.puts yellow("- #{example.description} (PENDING: #{message})")
-          output.flush
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/html_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/html_formatter.rb
deleted file mode 100644
index 07b433d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/html_formatter.rb
+++ /dev/null
@@ -1,174 +0,0 @@
-require 'erb'
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      module Story
-        class HtmlFormatter < BaseTextFormatter
-          include ERB::Util
-          
-          def initialize(options, where)
-            super
-            @previous_type = nil
-            @scenario_text = ""
-            @story_text = ""
-            @scenario_failed = false
-            @story_failed = false
-          end
-          
-          def run_started(count)
-            @output.puts <<-EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-    <title>Stories</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <meta http-equiv="Expires" content="-1" />
-    <meta http-equiv="Pragma" content="no-cache" />
-    <script src="javascripts/prototype.js" type="text/javascript"></script>
-    <script src="javascripts/scriptaculous.js" type="text/javascript"></script>
-    <script src="javascripts/rspec.js" type="text/javascript"></script>
-    <link href="stylesheets/rspec.css" rel="stylesheet" type="text/css" />
-  </head>
-  <body>
-    <div id="container">
-EOF
-          end
-
-          def collected_steps(steps)
-            unless steps.empty?
-              @output.puts "      <ul id=\"stock_steps\" style=\"display: none;\">"
-              steps.each do |step|
-                @output.puts "        <li>#{step}</li>"
-              end
-              @output.puts "      </ul>"
-            end
-          end
-
-          def run_ended
-            @output.puts <<-EOF
-    </div>
-  </body>
-</head>
-EOF
-          end
-          
-          def story_started(title, narrative)
-            @story_failed = false
-            @story_text = <<-EOF 
-        <dt>Story: #{h title}</dt>
-        <dd>
-          <p>
-            #{h(narrative).split("\n").join("<br />")}
-          </p>
-EOF
-          end
-
-          def story_ended(title, narrative)     
-            if @story_failed
-              @output.puts <<-EOF
-      <dl class="story failed">
-EOF
-            else
-              @output.puts <<-EOF
-      <dl class="story passed">
-EOF
-            end
-              @output.puts <<-EOF
-#{@story_text}
-        </dd>
-      </dl>
-EOF
-          end
-     
-          def scenario_started(story_title, scenario_name)
-            @previous_type = nil
-            @scenario_failed = false
-            @scenario_text = <<-EOF
-              <dt>Scenario: #{h scenario_name}</dt>
-              <dd>
-                <ul class="steps">
-EOF
-          end
-
-          def scenario_ended
-            if @scenario_failed
-              @story_text += <<-EOF
-            <dl class="failed">
-EOF
-            else
-              @story_text += <<-EOF
-            <dl class="passed">
-EOF
-            end
-            
-            @story_text += <<-EOF
-#{@scenario_text}
-                </ul>
-              </dd>
-            </dl>
-EOF
-          end
-          
-          def found_scenario(type, description)
-          end
-
-          def scenario_succeeded(story_title, scenario_name)
-            scenario_ended
-          end
-
-          def scenario_pending(story_title, scenario_name, reason)
-            scenario_ended
-          end
-
-          def scenario_failed(story_title, scenario_name, err)
-            @scenario_failed = true
-            @story_failed = true
-            scenario_ended
-          end
-
-          def step_upcoming(type, description, *args)
-          end
-
-          def step_succeeded(type, description, *args)
-            print_step('passed', type, description, *args) # TODO: uses succeeded CSS class
-          end
-
-          def step_pending(type, description, *args)
-            print_step('pending', type, description, *args)
-          end
-
-          def step_failed(type, description, *args)
-            print_step('failed', type, description, *args)
-          end
-          
-          def print_step(klass, type, description, *args)
-            spans = args.map { |arg| "<span class=\"param\">#{arg}</span>" }
-            desc_string = description.step_name
-            arg_regexp = description.arg_regexp           
-            inner = if(type == @previous_type)
-              "And "
-            else
-              "#{type.to_s.capitalize} "
-            end
-            i = -1
-            inner += desc_string.gsub(arg_regexp) { |param| spans[i+=1] }
-            
-            @scenario_text += "                  <li class=\"#{klass}\">#{inner}</li>\n"
-            
-            if type == :'given scenario'
-              @previous_type = :given
-            else
-              @previous_type = type
-            end
-            
-          end
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/plain_text_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/plain_text_formatter.rb
deleted file mode 100644
index 2cd21e9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/plain_text_formatter.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      module Story
-        class PlainTextFormatter < BaseTextFormatter
-          def initialize(options, where)
-            super
-            @successful_scenario_count = 0
-            @pending_scenario_count = 0
-            
-            @pre_story_pending_count = 0
-            @pre_story_successful_count = 0
-            
-            @failed_scenarios = []
-            @pending_steps = []
-            @previous_type = nil 
-            
-            @scenario_body_text = ""
-            @story_body_text = ""
-            
-            @scenario_head_text = ""
-            @story_head_text = ""
-                  
-            @scenario_failed = false
-            @story_failed = false
-          end
-        
-          def run_started(count)
-            @count = count
-            @output.puts "Running #@count scenarios\n\n"
-          end
-
-          def story_started(title, narrative)
-            @pre_story_pending_count = @pending_scenario_count
-            @pre_story_successful_count = @successful_scenario_count
-            
-            @current_story_title = title
-            @story_failed = false
-            @story_body_text = ""
-            @story_head_text = "Story: #{title}\n\n"
-
-            narrative.each_line do |line|
-              @story_head_text += "  "
-              @story_head_text += line
-            end
-          end
-        
-          def story_ended(title, narrative)
-            if @story_failed
-              @output.print red(@story_head_text)
-            elsif @pre_story_successful_count == @successful_scenario_count && 
-                  @pending_scenario_count >= @pre_story_pending_count
-              @output.print yellow(@story_head_text)
-            else              
-              @output.print green(@story_head_text)
-            end
-            @output.print @story_body_text
-            @output.puts
-            @output.puts
-          end
-
-          def scenario_started(story_title, scenario_name)
-            @current_scenario_name = scenario_name
-            @scenario_already_failed = false
-            @scenario_head_text = "\n\n  Scenario: #{scenario_name}"
-            @scenario_body_text = ""
-            @scenario_ok = true
-            @scenario_pending = false
-            @scenario_failed = false
-          end
-        
-          def scenario_succeeded(story_title, scenario_name)
-            @successful_scenario_count += 1
-            scenario_ended
-          end
-        
-          def scenario_failed(story_title, scenario_name, err)
-            @options.backtrace_tweaker.tweak_backtrace(err)
-            @failed_scenarios << [story_title, scenario_name, err] unless @scenario_already_failed
-            @scenario_already_failed = true
-            @story_failed = true
-            @scenario_failed = true
-            scenario_ended
-          end
-        
-          def scenario_pending(story_title, scenario_name, msg)
-            @pending_scenario_count += 1 unless @scenario_already_failed
-            @scenario_pending = true
-            @scenario_already_failed = true
-            scenario_ended
-          end
-        
-          def scenario_ended
-            if @scenario_failed
-              @story_body_text += red(@scenario_head_text)
-            elsif @scenario_pending
-              @story_body_text += yellow(@scenario_head_text)
-            else
-              @story_body_text += green(@scenario_head_text)
-            end
-            @story_body_text += @scenario_body_text
-          end
-          
-          def run_ended
-            summary_text = "#@count scenarios: #@successful_scenario_count succeeded, #{@failed_scenarios.size} failed, #@pending_scenario_count pending"
-            if !@failed_scenarios.empty?
-              @output.puts red(summary_text)
-            elsif !@pending_steps.empty?
-              @output.puts yellow(summary_text)
-            else
-              @output.puts green(summary_text)
-            end
-            unless @pending_steps.empty?
-              @output.puts "\nPending Steps:"
-              @pending_steps.each_with_index do |pending, i|
-                story_name, scenario_name, msg = pending
-                @output.puts "#{i+1}) #{story_name} (#{scenario_name}): #{msg}"
-              end
-            end
-            unless @failed_scenarios.empty?
-              @output.print "\nFAILURES:"
-              @failed_scenarios.each_with_index do |failure, i|
-                title, scenario_name, err = failure
-                @output.print "\n    #{i+1}) "
-                @output.print red("#{title} (#{scenario_name}) FAILED")
-                @output.print red("\n    #{err.class}: #{err.message}")
-                @output.print "\n    #{err.backtrace.join("\n")}\n"
-              end
-            end            
-          end
-
-          def step_upcoming(type, description, *args)
-          end
-                  
-          def step_succeeded(type, description, *args)
-            found_step(type, description, false, false, *args)
-          end
-        
-          def step_pending(type, description, *args)
-            found_step(type, description, false, true, *args)
-            @pending_steps << [@current_story_title, @current_scenario_name, description]
-            @scenario_body_text +=  yellow(" (PENDING)")
-            @scenario_pending = true
-            @scenario_ok = false
-          end
-        
-          def step_failed(type, description, *args)
-            found_step(type, description, true, @scenario_pending, *args)
-            if @scenario_pending
-              @scenario_body_text +=  yellow(" (SKIPPED)")
-            else
-              @scenario_body_text +=  red(@scenario_ok ? " (FAILED)" : " (SKIPPED)")
-            end
-            @scenario_ok = false
-          end
-          
-          def collected_steps(steps)
-          end
-          
-          def method_missing(sym, *args, &block) #:nodoc:
-            # noop - ignore unknown messages
-          end
-
-        private
-
-          def found_step(type, description, failed, pending, *args)
-            desc_string = description.step_name
-            arg_regexp = description.arg_regexp
-            text = if(type == @previous_type)
-              "\n    And "
-            else
-              "\n\n    #{type.to_s.capitalize} "
-            end
-            i = -1
-            text << desc_string.gsub(arg_regexp) { |param| args[i+=1] }
-            if pending
-              @scenario_body_text += yellow(text)
-            else
-              @scenario_body_text += (failed ? red(text) : green(text))
-            end
-
-            if type == :'given scenario'
-              @previous_type = :given
-            else
-              @previous_type = type
-            end
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/progress_bar_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/progress_bar_formatter.rb
deleted file mode 100644
index 739adbc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/story/progress_bar_formatter.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-require 'spec/runner/formatter/story/plain_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      module Story
-        class ProgressBarFormatter < PlainTextFormatter
-
-          def story_started(title, narrative) end
-          def story_ended(title, narrative) end
-
-          def run_started(count)
-            @start_time = Time.now
-            super
-          end
-          
-          def run_ended
-            @output.puts
-            @output.puts
-            @output.puts "Finished in %f seconds" % (Time.now - @start_time)
-            @output.puts
-            super
-          end
-
-          def scenario_ended
-            if @scenario_failed
-              @output.print red('F')
-              @output.flush
-            elsif @scenario_pending
-              @output.print yellow('P')
-              @output.flush
-            else
-              @output.print green('.')
-              @output.flush
-            end
-          end
-
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/text_mate_formatter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/text_mate_formatter.rb
deleted file mode 100644
index 4c0a9c7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/formatter/text_mate_formatter.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require 'spec/runner/formatter/html_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      # Formats backtraces so they're clickable by TextMate
-      class TextMateFormatter < HtmlFormatter
-        def backtrace_line(line)
-          line.gsub(/([^:]*\.rb):(\d*)/) do
-            "<a href=\"txmt://open?url=file://#{File.expand_path($1)}&line=#{$2}\">#{$1}:#{$2}</a> "
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/heckle_runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/heckle_runner.rb
deleted file mode 100644
index 4b82f7e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/heckle_runner.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-begin
-  require 'rubygems'
-  require 'heckle'
-rescue LoadError ; raise "You must gem install heckle to use --heckle" ; end
-
-module Spec
-  module Runner
-    # Creates a new Heckler configured to heckle all methods in the classes
-    # whose name matches +filter+
-    class HeckleRunner
-      def initialize(filter, heckle_class=Heckler)
-        @filter = filter
-        @heckle_class = heckle_class
-      end
-      
-      # Runs all the example groups held by +rspec_options+ once for each of the
-      # methods in the matched classes.
-      def heckle_with
-        if @filter =~ /(.*)[#\.](.*)/
-          heckle_method($1, $2)
-        else
-          heckle_class_or_module(@filter)
-        end
-      end
-      
-      def heckle_method(class_name, method_name)
-        verify_constant(class_name)
-        heckle = @heckle_class.new(class_name, method_name, Spec::Runner.options)
-        heckle.validate
-      end
-      
-      def heckle_class_or_module(class_or_module_name)
-        verify_constant(class_or_module_name)
-        pattern = /^#{class_or_module_name}/
-        classes = []
-        ObjectSpace.each_object(Class) do |klass|
-          classes << klass if klass.name =~ pattern
-        end
-        
-        classes.each do |klass|
-          klass.instance_methods(false).each do |method_name|
-            heckle = @heckle_class.new(klass.name, method_name, Spec::Runner.options)
-            heckle.validate
-          end
-        end
-      end
-      
-      def verify_constant(name)
-        begin
-          # This is defined in Heckle
-          name.to_class
-        rescue
-          raise "Heckling failed - \"#{name}\" is not a known class or module"
-        end
-      end
-    end
-    
-    #Supports Heckle 1.2 and prior (earlier versions used Heckle::Base)
-    class Heckler < (Heckle.const_defined?(:Base) ? Heckle::Base : Heckle)
-      def initialize(klass_name, method_name, rspec_options)
-        super(klass_name, method_name)
-        @rspec_options = rspec_options
-      end
-
-      def tests_pass?
-        success = @rspec_options.run_examples
-        success
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/heckle_runner_unsupported.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/heckle_runner_unsupported.rb
deleted file mode 100644
index 02aa379..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/heckle_runner_unsupported.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-module Spec
-  module Runner
-    # Dummy implementation for Windows that just fails (Heckle is not supported on Windows)
-    class HeckleRunner
-      def initialize(filter)
-        raise "Heckle not supported on Windows"
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/option_parser.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/option_parser.rb
deleted file mode 100644
index 0d62058..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/option_parser.rb
+++ /dev/null
@@ -1,205 +0,0 @@
-require 'optparse'
-require 'stringio'
-
-module Spec
-  module Runner
-    class OptionParser < ::OptionParser
-      class << self
-        def parse(args, err, out)
-          parser = new(err, out)
-          parser.parse(args)
-          parser.options
-        end
-      end
-
-      attr_reader :options
-
-      OPTIONS = {
-        :pattern => ["-p", "--pattern [PATTERN]","Limit files loaded to those matching this pattern. Defaults to '**/*_spec.rb'",
-                                                 "Separate multiple patterns with commas.",
-                                                 "Applies only to directories named on the command line (files",
-                                                 "named explicitly on the command line will be loaded regardless)."],
-        :diff =>    ["-D", "--diff [FORMAT]","Show diff of objects that are expected to be equal when they are not",
-                                             "Builtin formats: unified|u|context|c",
-                                             "You can also specify a custom differ class",
-                                             "(in which case you should also specify --require)"],
-        :colour =>  ["-c", "--colour", "--color", "Show coloured (red/green) output"],
-        :example => ["-e", "--example [NAME|FILE_NAME]",  "Execute example(s) with matching name(s). If the argument is",
-                                                          "the path to an existing file (typically generated by a previous",
-                                                          "run using --format failing_examples:file.txt), then the examples",
-                                                          "on each line of thatfile will be executed. If the file is empty,",
-                                                          "all examples will be run (as if --example was not specified).",
-                                                          " ",
-                                                          "If the argument is not an existing file, then it is treated as",
-                                                          "an example name directly, causing RSpec to run just the example",
-                                                          "matching that name"],
-        :specification => ["-s", "--specification [NAME]", "DEPRECATED - use -e instead", "(This will be removed when autotest works with -e)"],
-        :line => ["-l", "--line LINE_NUMBER", Integer, "Execute behaviour or specification at given line.",
-                                                       "(does not work for dynamically generated specs)"],
-        :format => ["-f", "--format FORMAT[:WHERE]","Specifies what format to use for output. Specify WHERE to tell",
-                                                    "the formatter where to write the output. All built-in formats",
-                                                    "expect WHERE to be a file name, and will write to $stdout if it's",
-                                                    "not specified. The --format option may be specified several times",
-                                                    "if you want several outputs",
-                                                    " ",
-                                                    "Builtin formats for code examples:",
-                                                    "progress|p               : Text-based progress bar",
-                                                    "profile|o                : Text-based progress bar with profiling of 10 slowest examples",
-                                                    "specdoc|s                : Code example doc strings",
-                                                    "nested|n                 : Code example doc strings with nested groups intented",
-                                                    "html|h                   : A nice HTML report",
-                                                    "failing_examples|e       : Write all failing examples - input for --example",
-                                                    "failing_example_groups|g : Write all failing example groups - input for --example",
-                                                    " ",
-                                                    "Builtin formats for stories:",
-                                                    "plain|p                  : Plain Text",
-                                                    "html|h                   : A nice HTML report",
-                                                    "progress|r               : Text progress",
-                                                    " ",
-                                                    "FORMAT can also be the name of a custom formatter class",
-                                                    "(in which case you should also specify --require to load it)"],
-        :require => ["-r", "--require FILE", "Require FILE before running specs",
-                                             "Useful for loading custom formatters or other extensions.",
-                                             "If this option is used it must come before the others"],
-        :backtrace => ["-b", "--backtrace", "Output full backtrace"],
-        :loadby => ["-L", "--loadby STRATEGY", "Specify the strategy by which spec files should be loaded.",
-                                               "STRATEGY can currently only be 'mtime' (File modification time)",
-                                               "By default, spec files are loaded in alphabetical order if --loadby",
-                                               "is not specified."],
-        :reverse => ["-R", "--reverse", "Run examples in reverse order"],
-        :timeout => ["-t", "--timeout FLOAT", "Interrupt and fail each example that doesn't complete in the",
-                                              "specified time"],
-        :heckle => ["-H", "--heckle CODE", "If all examples pass, this will mutate the classes and methods",
-                                           "identified by CODE little by little and run all the examples again",
-                                           "for each mutation. The intent is that for each mutation, at least",
-                                           "one example *should* fail, and RSpec will tell you if this is not the",
-                                           "case. CODE should be either Some::Module, Some::Class or",
-                                           "Some::Fabulous#method}"],
-        :dry_run => ["-d", "--dry-run", "Invokes formatters without executing the examples."],
-        :options_file => ["-O", "--options PATH", "Read options from a file"],
-        :generate_options => ["-G", "--generate-options PATH", "Generate an options file for --options"],
-        :runner => ["-U", "--runner RUNNER", "Use a custom Runner."],
-        :drb => ["-X", "--drb", "Run examples via DRb. (For example against script/spec_server)"],
-        :version => ["-v", "--version", "Show version"],
-        :help => ["-h", "--help", "You're looking at it"]
-      }
-
-      def initialize(err, out)
-        super()
-        @error_stream = err
-        @out_stream = out
-        @options = Options.new(@error_stream, @out_stream)
-
-        @file_factory = File
-
-        self.banner = "Usage: spec (FILE|DIRECTORY|GLOB)+ [options]"
-        self.separator ""
-        on(*OPTIONS[:pattern])          {|pattern| @options.filename_pattern = pattern}
-        on(*OPTIONS[:diff])             {|diff| @options.parse_diff(diff)}
-        on(*OPTIONS[:colour])           {@options.colour = true}
-        on(*OPTIONS[:example])          {|example| @options.parse_example(example)}
-        on(*OPTIONS[:specification])    {|example| @options.parse_example(example)}
-        on(*OPTIONS[:line])             {|line_number| @options.line_number = line_number.to_i}
-        on(*OPTIONS[:format])           {|format| @options.parse_format(format)}
-        on(*OPTIONS[:require])          {|requires| invoke_requires(requires)}
-        on(*OPTIONS[:backtrace])        {@options.backtrace_tweaker = NoisyBacktraceTweaker.new}
-        on(*OPTIONS[:loadby])           {|loadby| @options.loadby = loadby}
-        on(*OPTIONS[:reverse])          {@options.reverse = true}
-        on(*OPTIONS[:timeout])          {|timeout| @options.timeout = timeout.to_f}
-        on(*OPTIONS[:heckle])           {|heckle| @options.load_heckle_runner(heckle)}
-        on(*OPTIONS[:dry_run])          {@options.dry_run = true}
-        on(*OPTIONS[:options_file])     {|options_file| parse_options_file(options_file)}
-        on(*OPTIONS[:generate_options]) {|options_file|}
-        on(*OPTIONS[:runner])           {|runner|  @options.user_input_for_runner = runner}
-        on(*OPTIONS[:drb])              {}
-        on(*OPTIONS[:version])          {parse_version}
-        on_tail(*OPTIONS[:help])        {parse_help}
-      end
-
-      def order!(argv, &blk)
-        @argv = argv.dup
-        @argv = (@argv.empty? && Spec.spec_command?) ? ['--help'] : @argv 
-        @options.argv = @argv.dup
-        return if parse_generate_options
-        return if parse_drb
-        
-        super(@argv) do |file|
-          @options.files << file
-          blk.call(file) if blk
-        end
-
-        @options
-      end
-      
-      protected
-      def invoke_requires(requires)
-        requires.split(",").each do |file|
-          require file
-        end
-      end
-      
-      def parse_options_file(options_file)
-        option_file_args = IO.readlines(options_file).map {|l| l.chomp.split " "}.flatten
-        @argv.push(*option_file_args)
-        # TODO - this is a brute force solution to http://rspec.lighthouseapp.com/projects/5645/tickets/293.
-        # Let's look for a cleaner way. Might not be one. But let's look. If not, perhaps
-        # this can be moved to a different method to indicate the special handling for drb?
-        parse_drb(@argv)
-      end
-
-      def parse_generate_options
-        # Remove the --generate-options option and the argument before writing to file
-        options_file = nil
-        ['-G', '--generate-options'].each do |option|
-          if index = @argv.index(option)
-            @argv.delete_at(index)
-            options_file = @argv.delete_at(index)
-          end
-        end
-        
-        if options_file
-          write_generated_options(options_file)
-          return true
-        else
-          return false
-        end
-      end
-      
-      def write_generated_options(options_file)
-        File.open(options_file, 'w') do |io|
-          io.puts @argv.join("\n")
-        end
-        @out_stream.puts "\nOptions written to #{options_file}. You can now use these options with:"
-        @out_stream.puts "spec --options #{options_file}"
-        @options.examples_should_not_be_run
-      end
-
-      def parse_drb(argv = nil)
-        argv ||= @options.argv # TODO - see note about about http://rspec.lighthouseapp.com/projects/5645/tickets/293
-        is_drb = false
-        is_drb ||= argv.delete(OPTIONS[:drb][0])
-        is_drb ||= argv.delete(OPTIONS[:drb][1])
-        return false unless is_drb
-        @options.examples_should_not_be_run
-        DrbCommandLine.run(
-          self.class.parse(argv, @error_stream, @out_stream)
-        )
-        true
-      end
-
-      def parse_version
-        @out_stream.puts ::Spec::VERSION::SUMMARY
-        exit if stdout?
-      end
-
-      def parse_help
-        @out_stream.puts self
-        exit if stdout?
-      end      
-
-      def stdout?
-        @out_stream == $stdout
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/options.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/options.rb
deleted file mode 100644
index 65c907a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/options.rb
+++ /dev/null
@@ -1,320 +0,0 @@
-module Spec
-  module Runner
-    class Options
-      FILE_SORTERS = {
-        'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)}
-      }
-
-      EXAMPLE_FORMATTERS = { # Load these lazily for better speed
-               'specdoc' => ['spec/runner/formatter/specdoc_formatter',                'Formatter::SpecdocFormatter'],
-                     's' => ['spec/runner/formatter/specdoc_formatter',                'Formatter::SpecdocFormatter'],
-                'nested' => ['spec/runner/formatter/nested_text_formatter',            'Formatter::NestedTextFormatter'],
-                     'n' => ['spec/runner/formatter/nested_text_formatter',            'Formatter::NestedTextFormatter'],
-                  'html' => ['spec/runner/formatter/html_formatter',                   'Formatter::HtmlFormatter'],
-                     'h' => ['spec/runner/formatter/html_formatter',                   'Formatter::HtmlFormatter'],
-              'progress' => ['spec/runner/formatter/progress_bar_formatter',           'Formatter::ProgressBarFormatter'],
-                     'p' => ['spec/runner/formatter/progress_bar_formatter',           'Formatter::ProgressBarFormatter'],
-      'failing_examples' => ['spec/runner/formatter/failing_examples_formatter',       'Formatter::FailingExamplesFormatter'],
-                     'e' => ['spec/runner/formatter/failing_examples_formatter',       'Formatter::FailingExamplesFormatter'],
-'failing_example_groups' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'],
-                     'g' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'],
-               'profile' => ['spec/runner/formatter/profile_formatter',                'Formatter::ProfileFormatter'],
-                     'o' => ['spec/runner/formatter/profile_formatter',                'Formatter::ProfileFormatter'],
-              'textmate' => ['spec/runner/formatter/text_mate_formatter',              'Formatter::TextMateFormatter']
-      }
-
-      STORY_FORMATTERS = {
-        'plain' => ['spec/runner/formatter/story/plain_text_formatter',   'Formatter::Story::PlainTextFormatter'],
-            'p' => ['spec/runner/formatter/story/plain_text_formatter',   'Formatter::Story::PlainTextFormatter'],
-         'html' => ['spec/runner/formatter/story/html_formatter',         'Formatter::Story::HtmlFormatter'],
-            'h' => ['spec/runner/formatter/story/html_formatter',         'Formatter::Story::HtmlFormatter'],
-     'progress' => ['spec/runner/formatter/story/progress_bar_formatter', 'Formatter::Story::ProgressBarFormatter'],
-            'r' => ['spec/runner/formatter/story/progress_bar_formatter', 'Formatter::Story::ProgressBarFormatter']
-            
-      }
-
-      attr_accessor(
-        :filename_pattern,
-        :backtrace_tweaker,
-        :context_lines,
-        :diff_format,
-        :dry_run,
-        :profile,
-        :examples,
-        :heckle_runner,
-        :line_number,
-        :loadby,
-        :reporter,
-        :reverse,
-        :timeout,
-        :verbose,
-        :user_input_for_runner,
-        :error_stream,
-        :output_stream,
-        :before_suite_parts,
-        :after_suite_parts,
-        # TODO: BT - Figure out a better name
-        :argv
-      )
-      attr_reader :colour, :differ_class, :files, :example_groups
-      
-      def initialize(error_stream, output_stream)
-        @error_stream = error_stream
-        @output_stream = output_stream
-        @filename_pattern = "**/*_spec.rb"
-        @backtrace_tweaker = QuietBacktraceTweaker.new
-        @examples = []
-        @colour = false
-        @profile = false
-        @dry_run = false
-        @reporter = Reporter.new(self)
-        @context_lines = 3
-        @diff_format  = :unified
-        @files = []
-        @example_groups = []
-        @result = nil
-        @examples_run = false
-        @examples_should_be_run = nil
-        @user_input_for_runner = nil
-        @before_suite_parts = []
-        @after_suite_parts = []
-      end
-
-      def add_example_group(example_group)
-        @example_groups << example_group
-      end
-
-      def remove_example_group(example_group)
-        @example_groups.delete(example_group)
-      end
-
-      def run_examples
-        return true unless examples_should_be_run?
-        success = true
-        begin
-          runner = custom_runner || ExampleGroupRunner.new(self)
-
-          unless @files_loaded
-            runner.load_files(files_to_load)
-            @files_loaded = true
-          end
-
-          # TODO - this has to happen after the files get loaded,
-          # otherwise the before_suite_parts are not populated
-          # from the configuration. There is no spec for this
-          # directly, but stories/configuration/before_blocks.story
-          # will fail if this happens before the files are loaded.
-          before_suite_parts.each do |part|
-            part.call
-          end
-
-          if example_groups.empty?
-            true
-          else
-            set_spec_from_line_number if line_number
-            success = runner.run
-            @examples_run = true
-            heckle if heckle_runner
-            success
-          end
-        ensure
-          after_suite_parts.each do |part|
-            part.call(success)
-          end
-        end
-      end
-
-      def examples_run?
-        @examples_run
-      end
-
-      def examples_should_not_be_run
-        @examples_should_be_run = false
-      end      
-
-      def colour=(colour)
-        @colour = colour
-        if @colour && RUBY_PLATFORM =~ /mswin|mingw/ ;\
-          begin ;\
-            replace_output = @output_stream.equal?($stdout) ;\
-            require 'rubygems' ;\
-            require 'Win32/Console/ANSI' ;\
-            @output_stream = $stdout if replace_output ;\
-          rescue LoadError ;\
-            warn "You must 'gem install win32console' to use colour on Windows" ;\
-            @colour = false ;\
-          end
-        end
-      end
-
-      def parse_diff(format)
-        case format
-        when :context, 'context', 'c'
-          @diff_format  = :context
-          default_differ
-        when :unified, 'unified', 'u', '', nil
-          @diff_format  = :unified
-          default_differ
-        else
-          @diff_format  = :custom
-          self.differ_class = load_class(format, 'differ', '--diff')
-        end
-      end
-
-      def parse_example(example)
-        if(File.file?(example))
-          @examples = File.open(example).read.split("\n")
-        else
-          @examples = [example]
-        end
-      end
-
-      def parse_format(format_arg)
-        format, where = ClassAndArgumentsParser.parse(format_arg)
-        unless where
-          raise "When using several --format options only one of them can be without a file" if @out_used
-          where = @output_stream
-          @out_used = true
-        end
-        @format_options ||= []
-        @format_options << [format, where]
-      end
-      
-      def formatters
-        @format_options ||= [['progress', @output_stream]]
-        @formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS)
-      end
-
-      def story_formatters
-        @format_options ||= [['plain', @output_stream]]
-        @formatters ||= load_formatters(@format_options, STORY_FORMATTERS)
-      end
-      
-      def load_formatters(format_options, formatters)
-        format_options.map do |format, where|
-          formatter_type = if formatters[format]
-            require formatters[format][0]
-            eval(formatters[format][1], binding, __FILE__, __LINE__)
-          else
-            load_class(format, 'formatter', '--format')
-          end
-          formatter_type.new(self, where)
-        end
-      end
-
-      def load_heckle_runner(heckle)
-        suffix = [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} ? '_unsupported' : ''
-        require "spec/runner/heckle_runner#{suffix}"
-        @heckle_runner = HeckleRunner.new(heckle)
-      end
-
-      def number_of_examples
-        total = 0
-        @example_groups.each do |example_group|
-          total += example_group.number_of_examples
-        end
-        total
-      end
-
-      def files_to_load
-        result = []
-        sorted_files.each do |file|
-          if File.directory?(file)
-            filename_pattern.split(",").each do |pattern|
-              result += Dir[File.expand_path("#{file}/#{pattern.strip}")]
-            end
-          elsif File.file?(file)
-            result << file
-          else
-            raise "File or directory not found: #{file}"
-          end
-        end
-        result
-      end
-      
-      protected
-      def examples_should_be_run?
-        return @examples_should_be_run unless @examples_should_be_run.nil?
-        @examples_should_be_run = true
-      end
-      
-      def differ_class=(klass)
-        return unless klass
-        @differ_class = klass
-        Spec::Expectations.differ = self.differ_class.new(self)
-      end
-
-      def load_class(name, kind, option)
-        if name =~ /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/
-          arg = $2 == "" ? nil : $2
-          [$1, arg]
-        else
-          m = "#{name.inspect} is not a valid class name"
-          @error_stream.puts m
-          raise m
-        end
-        begin
-          eval(name, binding, __FILE__, __LINE__)
-        rescue NameError => e
-          @error_stream.puts "Couldn't find #{kind} class #{name}"
-          @error_stream.puts "Make sure the --require option is specified *before* #{option}"
-          if $_spec_spec ; raise e ; else exit(1) ; end
-        end
-      end
-      
-      def custom_runner
-        return nil unless custom_runner?
-        klass_name, arg = ClassAndArgumentsParser.parse(user_input_for_runner)
-        runner_type = load_class(klass_name, 'behaviour runner', '--runner')
-        return runner_type.new(self, arg)
-      end
-
-      def custom_runner?
-        return user_input_for_runner ? true : false
-      end
-      
-      def heckle
-        heckle_runner = self.heckle_runner
-        self.heckle_runner = nil
-        heckle_runner.heckle_with
-      end
-      
-      def sorted_files
-        return sorter ? files.sort(&sorter) : files
-      end
-
-      def sorter
-        FILE_SORTERS[loadby]
-      end
-
-      def default_differ
-        require 'spec/expectations/differs/default'
-        self.differ_class = Spec::Expectations::Differs::Default
-      end
-
-      def set_spec_from_line_number
-        if examples.empty?
-          if files.length == 1
-            if File.directory?(files[0])
-              error_stream.puts "You must specify one file, not a directory when using the --line option"
-              exit(1) if stderr?
-            else
-              example = SpecParser.new.spec_name_for(files[0], line_number)
-              @examples = [example]
-            end
-          else
-            error_stream.puts "Only one file can be specified when using the --line option: #{files.inspect}"
-            exit(3) if stderr?
-          end
-        else
-          error_stream.puts "You cannot use both --line and --example"
-          exit(4) if stderr?
-        end
-      end
-
-      def stderr?
-        @error_stream == $stderr
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/reporter.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/reporter.rb
deleted file mode 100644
index ca81b4f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/reporter.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-module Spec
-  module Runner
-    class Reporter
-      attr_reader :options, :example_groups
-      
-      def initialize(options)
-        @options = options
-        @options.reporter = self
-        clear
-      end
-      
-      def add_example_group(example_group)
-        formatters.each do |f|
-          f.add_example_group(example_group)
-        end
-        example_groups << example_group
-      end
-      
-      def example_started(example)
-        formatters.each{|f| f.example_started(example)}
-      end
-      
-      def example_finished(example, error=nil)
-        @examples << example
-        
-        if error.nil?
-          example_passed(example)
-        elsif Spec::Example::ExamplePendingError === error
-          example_pending(example, error.pending_caller, error.message)
-        else
-          example_failed(example, error)
-        end
-      end
-
-      def failure(example, error)
-        backtrace_tweaker.tweak_backtrace(error)
-        failure = Failure.new(example, error)
-        @failures << failure
-        formatters.each do |f|
-          f.example_failed(example, @failures.length, failure)
-        end
-      end
-      alias_method :example_failed, :failure
-
-      def start(number_of_examples)
-        clear
-        @start_time = Time.new
-        formatters.each{|f| f.start(number_of_examples)}
-      end
-  
-      def end
-        @end_time = Time.new
-      end
-  
-      # Dumps the summary and returns the total number of failures
-      def dump
-        formatters.each{|f| f.start_dump}
-        dump_pending
-        dump_failures
-        formatters.each do |f|
-          f.dump_summary(duration, @examples.length, @failures.length, @pending_count)
-          f.close
-        end
-        @failures.length
-      end
-
-    private
-
-      def formatters
-        @options.formatters
-      end
-
-      def backtrace_tweaker
-        @options.backtrace_tweaker
-      end
-  
-      def clear
-        @example_groups = []
-        @failures = []
-        @pending_count = 0
-        @examples = []
-        @start_time = nil
-        @end_time = nil
-      end
-  
-      def dump_failures
-        return if @failures.empty?
-        @failures.inject(1) do |index, failure|
-          formatters.each{|f| f.dump_failure(index, failure)}
-          index + 1
-        end
-      end
-
-      def dump_pending
-        formatters.each{|f| f.dump_pending}
-      end
-
-      def duration
-        return @end_time - @start_time unless (@end_time.nil? or @start_time.nil?)
-        return "0.0"
-      end
-      
-      def example_passed(example)
-        formatters.each{|f| f.example_passed(example)}
-      end
-
-      EXAMPLE_PENDING_DEPRECATION_WARNING = <<-WARNING
-        DEPRECATION NOTICE: RSpec's formatters have changed example_pending
-        to accept three arguments instead of just two. Please see the rdoc
-        for Spec::Runner::Formatter::BaseFormatter#example_pending
-        for more information.
-          
-        Please update any custom formatters to accept the third argument
-        to example_pending. Support for example_pending with two arguments
-        and this warning message will be removed after the RSpec 1.1.5 release.
-      WARNING
-      
-      def example_pending(example, pending_caller, message="Not Yet Implemented")
-        @pending_count += 1
-        formatters.each do |formatter|
-          if formatter_uses_deprecated_example_pending_method?(formatter)
-            Kernel.warn EXAMPLE_PENDING_DEPRECATION_WARNING
-            formatter.example_pending(example, message)
-          else
-            formatter.example_pending(example, message, pending_caller)
-          end
-        end
-      end
-      
-      def formatter_uses_deprecated_example_pending_method?(formatter)
-        formatter.method(:example_pending).arity == 2
-      end
-      
-      class Failure
-        attr_reader :example, :exception
-        
-        def initialize(example, exception)
-          @example = example
-          @exception = exception
-        end
-
-        def header
-          if expectation_not_met?
-            "'#{example_name}' FAILED"
-          elsif pending_fixed?
-            "'#{example_name}' FIXED"
-          else
-            "#{@exception.class.name} in '#{example_name}'"
-          end
-        end
-        
-        def pending_fixed?
-          @exception.is_a?(Spec::Example::PendingExampleFixedError)
-        end
-
-        def expectation_not_met?
-          @exception.is_a?(Spec::Expectations::ExpectationNotMetError)
-        end
-
-        protected
-        def example_name
-          @example.__full_description
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/spec_parser.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/spec_parser.rb
deleted file mode 100644
index 6f13f01..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/runner/spec_parser.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-module Spec
-  module Runner
-    # Parses a spec file and finds the nearest example for a given line number.
-    class SpecParser
-      attr_reader :best_match
-
-      def initialize
-        @best_match = {}
-      end
-
-      def spec_name_for(file, line_number)
-        best_match.clear
-        file = File.expand_path(file)
-        Spec::Runner.options.example_groups.each do |example_group|
-          consider_example_groups_for_best_match example_group, file, line_number
-
-          example_group.examples.each do |example|
-            consider_example_for_best_match example, example_group, file, line_number
-          end
-        end
-        if best_match[:example_group]
-          if best_match[:example]
-            "#{best_match[:example_group].description} #{best_match[:example].description}"
-          else
-            best_match[:example_group].description
-          end
-        else
-          nil
-        end
-      end
-
-    protected
-
-      def consider_example_groups_for_best_match(example_group, file, line_number)
-        parsed_backtrace = parse_backtrace(example_group.registration_backtrace)
-        parsed_backtrace.each do |example_file, example_line|
-          if is_best_match?(file, line_number, example_file, example_line)
-            best_match.clear
-            best_match[:example_group] = example_group
-            best_match[:line] = example_line
-          end
-        end
-      end
-
-      def consider_example_for_best_match(example, example_group, file, line_number)
-        parsed_backtrace = parse_backtrace(example.implementation_backtrace)
-        parsed_backtrace.each do |example_file, example_line|
-          if is_best_match?(file, line_number, example_file, example_line)
-            best_match.clear
-            best_match[:example_group] = example_group
-            best_match[:example] = example
-            best_match[:line] = example_line
-          end
-        end
-      end
-
-      def is_best_match?(file, line_number, example_file, example_line)
-        file == File.expand_path(example_file) &&
-        example_line <= line_number &&
-        example_line > best_match[:line].to_i
-      end
-
-      def parse_backtrace(backtrace)
-        backtrace.collect do |trace_line|
-          split_line = trace_line.split(':')
-          [split_line[0], Integer(split_line[1])]
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story.rb
deleted file mode 100644
index bc6960a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'spec'
-require 'spec/story/extensions'
-require 'spec/story/given_scenario'
-require 'spec/story/runner'
-require 'spec/story/scenario'
-require 'spec/story/step'
-require 'spec/story/step_group'
-require 'spec/story/step_mother'
-require 'spec/story/story'
-require 'spec/story/world'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions.rb
deleted file mode 100644
index dc7dd11..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'spec/story/extensions/main'
-require 'spec/story/extensions/string'
-require 'spec/story/extensions/regexp'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/main.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/main.rb
deleted file mode 100644
index 6336b63..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/main.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-module Spec
-  module Story
-    module Extensions
-      module Main
-        def Story(title, narrative, params = {}, &body)
-          ::Spec::Story::Runner.story_runner.Story(title, narrative, params, &body)
-        end
-      
-        # Calling this deprecated is silly, since it hasn't been released yet. But, for
-        # those who are reading this - this will be deleted before the 1.1 release.
-        def run_story(*args, &block)
-          runner = Spec::Story::Runner::PlainTextStoryRunner.new(*args)
-          runner.instance_eval(&block) if block
-          runner.run
-        end
-      
-        # Creates (or appends to an existing) a namespaced group of steps for use in Stories
-        #
-        # == Examples
-        #
-        #   # Creating a new group
-        #   steps_for :forms do
-        #     When("user enters $value in the $field field") do ... end
-        #     When("user submits the $form form") do ... end
-        #   end
-        def steps_for(tag, &block)
-          steps = rspec_story_steps[tag]
-          steps.instance_eval(&block) if block
-          steps
-        end
-      
-        # Creates a context for running a Plain Text Story with specific groups of Steps. 
-        # Also supports adding arbitrary steps that will only be accessible to
-        # the Story being run.
-        #
-        # == Examples
-        #
-        #   # Run a Story with one group of steps
-        #   with_steps_for :checking_accounts do
-        #     run File.dirname(__FILE__) + "/withdraw_cash"
-        #   end
-        #
-        #   # Run a Story, adding steps that are only available for this Story
-        #   with_steps_for :accounts do
-        #     Given "user is logged in as account administrator"
-        #     run File.dirname(__FILE__) + "/reconcile_accounts"
-        #   end
-        #
-        #   # Run a Story with steps from two groups
-        #   with_steps_for :checking_accounts, :savings_accounts do
-        #     run File.dirname(__FILE__) + "/transfer_money"
-        #   end
-        #
-        #   # Run a Story with a specific Story extension
-        #   with_steps_for :login, :navigation do
-        #     run File.dirname(__FILE__) + "/user_changes_password", :type => RailsStory
-        #   end
-        def with_steps_for(*tags, &block)
-          steps = Spec::Story::StepGroup.new do
-            extend StoryRunnerStepGroupAdapter
-          end
-          tags.each {|tag| steps << rspec_story_steps[tag]}
-          steps.instance_eval(&block) if block
-          steps
-        end
-
-      private
-
-        module StoryRunnerStepGroupAdapter
-          def run(path, options={})
-            runner = Spec::Story::Runner::PlainTextStoryRunner.new(path, options)
-            runner.steps << self
-            runner.run
-          end
-        end
-        
-        def rspec_story_steps  # :nodoc:
-          $rspec_story_steps ||= Spec::Story::StepGroupHash.new
-        end
-                
-      end
-    end
-  end
-end
-
-include Spec::Story::Extensions::Main
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/regexp.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/regexp.rb
deleted file mode 100644
index 8ee3386..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/regexp.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class Regexp
-  def step_name
-    self.source.gsub '\\$', '$$'
-  end
-  
-  def arg_regexp
-    ::Spec::Story::Step::PARAM_OR_GROUP_PATTERN
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/string.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/string.rb
deleted file mode 100644
index 0e4ec1d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/extensions/string.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class String
-  def step_name
-    self
-  end
-  
-  def arg_regexp
-    ::Spec::Story::Step::PARAM_OR_GROUP_PATTERN
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/given_scenario.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/given_scenario.rb
deleted file mode 100644
index 88c51f9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/given_scenario.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-module Spec
-  module Story
-    class GivenScenario
-      def initialize(name)
-        @name = name
-      end
-      
-      def perform(instance, ignore_name)
-        scenario = Runner::StoryRunner.scenario_from_current_story(@name)
-        Runner::ScenarioRunner.new.run(scenario, instance)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner.rb
deleted file mode 100644
index 9891f05..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-require 'spec/story/runner/scenario_collector.rb'
-require 'spec/story/runner/scenario_runner.rb'
-require 'spec/story/runner/story_runner.rb'
-require 'spec/story/runner/story_parser.rb'
-require 'spec/story/runner/story_mediator.rb'
-require 'spec/story/runner/plain_text_story_runner.rb'
-
-module Spec
-  module Story
-    module Runner
-      class << self
-        def run_options # :nodoc:
-          Spec::Runner.options
-        end
-        
-        def story_runner # :nodoc:
-          unless @story_runner
-            @story_runner = create_story_runner
-            run_options.story_formatters.each do |formatter|
-              register_listener(formatter)
-            end
-            self.register_exit_hook
-          end
-          @story_runner
-        end
-        
-        def scenario_runner # :nodoc:
-          @scenario_runner ||= ScenarioRunner.new
-        end
-        
-        def world_creator # :nodoc:
-          @world_creator ||= World
-        end
-        
-        def create_story_runner
-          Runner::StoryRunner.new(scenario_runner, world_creator)
-        end
-        
-        # Use this to register a customer output formatter.
-        def register_listener(listener)
-          story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
-          world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed
-          scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed
-        end
-        
-        def register_exit_hook # :nodoc:
-          at_exit do
-            exit Runner.story_runner.run_stories unless $!
-          end
-        end
-        
-        def dry_run
-          run_options.dry_run
-        end
-        
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/plain_text_story_runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/plain_text_story_runner.rb
deleted file mode 100644
index a1bfbda..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/plain_text_story_runner.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-module Spec
-  module Story
-    module Runner
-      class PlainTextStoryRunner
-        # You can initialize a PlainTextStoryRunner with the path to the
-        # story file or a block, in which you can define the path using load.
-        #
-        # == Examples
-        #   
-        #   PlainTextStoryRunner.new('path/to/file')
-        #
-        #   PlainTextStoryRunner.new do |runner|
-        #     runner.load 'path/to/file'
-        #   end
-        def initialize(*args)
-          @options = Hash === args.last ? args.pop : {}
-          @story_file = args.empty? ? nil : args.shift
-          yield self if block_given?
-        end
-        
-        def []=(key, value)
-          @options[key] = value
-        end
-        
-        def load(path)
-          @story_file = path
-        end
-        
-        def run(story_runner=Spec::Story::Runner.story_runner)
-          raise "You must set a path to the file with the story. See the RDoc." if @story_file.nil?
-          mediator = Spec::Story::Runner::StoryMediator.new(steps, story_runner, @options)
-          parser = Spec::Story::Runner::StoryParser.new(mediator)
-
-          story_text = File.read(@story_file)          
-          parser.parse(story_text.split("\n"))
-
-          mediator.run_stories
-        end
-        
-        def steps
-          @step_group ||= Spec::Story::StepGroup.new
-          yield @step_group if block_given?
-          @step_group
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/scenario_collector.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/scenario_collector.rb
deleted file mode 100644
index 78339fd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/scenario_collector.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Spec
-  module Story
-    module Runner
-      class ScenarioCollector
-        attr_accessor :scenarios
-        
-        def initialize(story)
-          @story = story
-          @scenarios = []
-        end
-        
-        def Scenario(name, &body)
-          @scenarios << Scenario.new(@story, name, &body)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/scenario_runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/scenario_runner.rb
deleted file mode 100644
index 2d7c58d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/scenario_runner.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-module Spec
-  module Story
-    module Runner
-      class ScenarioRunner
-        def initialize
-          @listeners = []
-        end
-        
-        def run(scenario, world)
-          @listeners.each { |l| l.scenario_started(scenario.story.title, scenario.name) }
-          run_story_ignoring_scenarios(scenario.story, world)
-          
-          world.start_collecting_errors
-
-          unless scenario.body
-            @listeners.each { |l| l.scenario_pending(scenario.story.title, scenario.name, '') }
-            return true
-          end
-          
-          world.instance_eval(&scenario.body)
-          if world.errors.empty?
-            @listeners.each { |l| l.scenario_succeeded(scenario.story.title, scenario.name) }
-          else
-            if Spec::Example::ExamplePendingError === (e = world.errors.first)
-              @listeners.each { |l| l.scenario_pending(scenario.story.title, scenario.name, e.message) }
-            else
-              @listeners.each { |l| l.scenario_failed(scenario.story.title, scenario.name, e) }
-              return false
-            end
-          end
-          true
-        end
-        
-        def add_listener(listener)
-          @listeners << listener
-        end
-        
-        private
-        
-        def run_story_ignoring_scenarios(story, world)
-          class << world
-            def Scenario(name, &block)
-              # do nothing
-            end
-          end
-          story.run_in(world)
-          class << world
-            remove_method(:Scenario)
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_mediator.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_mediator.rb
deleted file mode 100644
index 9e3ac0d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_mediator.rb
+++ /dev/null
@@ -1,137 +0,0 @@
- module Spec
-  module Story
-    module Runner
-
-      class StoryMediator
-        def initialize(step_group, runner, options={})
-          @step_group = step_group
-          @stories = []
-          @runner = runner
-          @options = options
-        end
-        
-        def stories
-          @stories.collect { |p| p.to_proc }
-        end
-        
-        def create_story(title, narrative)
-          @stories << Story.new(title, narrative, @step_group, @options)
-        end
-        
-        def create_scenario(title)
-          current_story.add_scenario Scenario.new(title)
-        end
-        
-        def create_given(name)
-          current_scenario.add_step Step.new('Given', name)
-        end
-        
-        def create_given_scenario(name)
-          current_scenario.add_step Step.new('GivenScenario', name)
-        end
-        
-        def create_when(name)
-          current_scenario.add_step Step.new('When', name)
-        end
-        
-        def create_then(name)
-          current_scenario.add_step Step.new('Then', name)
-        end
-        
-        def last_step
-          current_scenario.last_step
-        end
-        
-        def add_to_last(name)
-          last_step.name << name
-        end
-        
-        def run_stories
-          stories.each { |story| @runner.instance_eval(&story) }
-        end
-        
-        private
-        def current_story
-          @stories.last
-        end
-        
-        def current_scenario
-          current_story.current_scenario
-        end
-        
-        class Story
-          def initialize(title, narrative, step_group, options)
-            @title = title
-            @narrative = narrative
-            @scenarios = []
-            @step_group = step_group
-            @options = options
-          end
-          
-          def to_proc
-            title = @title
-            narrative = @narrative
-            scenarios = @scenarios.collect { |scenario| scenario.to_proc }
-            options = @options.merge(:steps_for => @step_group)
-            lambda do
-              Story title, narrative, options do
-                scenarios.each { |scenario| instance_eval(&scenario) }
-              end
-            end
-          end
-          
-          def add_scenario(scenario)
-            @scenarios << scenario
-          end
-          
-          def current_scenario
-            @scenarios.last
-          end
-        end
-        
-        class Scenario
-          def initialize(name)
-            @name = name
-            @steps = []
-          end
-          
-          def to_proc
-            name = @name
-            steps = @steps.collect { |step| step.to_proc }
-            lambda do
-              Scenario name do
-                steps.each { |step| instance_eval(&step) }
-              end
-            end
-          end
-          
-          def add_step(step)
-            @steps << step
-          end
-          
-          def last_step
-            @steps.last
-          end
-        end
-        
-        class Step
-          attr_reader :name
-          
-          def initialize(type, name)
-            @type = type
-            @name = name
-          end
-          
-          def to_proc
-            type = @type
-            name = @name
-            lambda do
-              send(type, name)
-            end
-          end
-        end
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_parser.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_parser.rb
deleted file mode 100644
index f26ed71..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_parser.rb
+++ /dev/null
@@ -1,247 +0,0 @@
-module Spec
-  module Story
-    module Runner
-      
-      class IllegalStepError < StandardError
-        def initialize(state, event)
-          super("Illegal attempt to create a #{event} after a #{state}")
-        end
-      end
-
-      class StoryParser
-        def initialize(story_mediator)
-          @story_mediator = story_mediator
-          @current_story_lines = []
-          transition_to(:starting_state)
-        end
-        
-        def parse(lines)
-          lines.reject! {|line| line == ""}
-          until lines.empty?
-            process_line(lines.shift)
-          end
-          @state.eof
-        end
-        
-        def process_line(line)
-          line.strip!
-          case line
-          when /^#/                 then @state.comment(line)
-          when /^Story: /           then @state.story(line)
-          when /^Scenario: /        then @state.scenario(line)
-          when /^Given:? /          then @state.given(line)
-          when /^GivenScenario:? /  then @state.given_scenario(line)
-          when /^When:? /           then @state.event(line)
-          when /^Then:? /           then @state.outcome(line)
-          when /^And:? /            then @state.one_more_of_the_same(line)
-          else                           @state.other(line)
-          end
-        end
-
-        def init_story(title)
-          @current_story_lines.clear
-          add_story_line(title)
-        end
-        
-        def add_story_line(line)
-          @current_story_lines << line
-        end
-        
-        def create_story()
-          unless @current_story_lines.empty?
-            @story_mediator.create_story(@current_story_lines[0].gsub("Story: ",""), @current_story_lines[1..-1].join("\n"))
-            @current_story_lines.clear
-          end
-        end
-        
-        def create_scenario(title)
-          @story_mediator.create_scenario(title.gsub("Scenario: ",""))
-        end
-        
-        def create_given(name)
-          @story_mediator.create_given(name)
-        end
-        
-        def create_given_scenario(name)
-          @story_mediator.create_given_scenario(name)
-        end
-        
-        def create_when(name)
-          @story_mediator.create_when(name)
-        end
-        
-        def create_then(name)
-          @story_mediator.create_then(name)
-        end
-        
-        def add_to_last(line)
-          @story_mediator.add_to_last("\n#{line}")
-        end
-
-        def transition_to(key)
-          @state = states[key]
-        end
-        
-        def states
-          @states ||= {
-            :starting_state => StartingState.new(self),
-            :story_state => StoryState.new(self),
-            :scenario_state => ScenarioState.new(self),
-            :given_state => GivenState.new(self),
-            :when_state => WhenState.new(self),
-            :then_state => ThenState.new(self)
-          }
-        end
-        
-        class State
-          def initialize(parser)
-            @parser = parser
-          end
-          
-          def story(line)
-            @parser.init_story(line)
-            @parser.transition_to(:story_state)
-          end
-
-          def scenario(line)
-            @parser.create_scenario(line)
-            @parser.transition_to(:scenario_state)
-          end
-
-          def given(line)
-            @parser.create_given(remove_tag_from(:given, line))
-            @parser.transition_to(:given_state)
-          end
-          
-          def given_scenario(line)
-            @parser.create_given_scenario(remove_tag_from(:givenscenario, line))
-            @parser.transition_to(:given_state)
-          end
-          
-          def event(line)
-            @parser.create_when(remove_tag_from(:when, line))
-            @parser.transition_to(:when_state)
-          end
-          
-          def outcome(line)
-            @parser.create_then(remove_tag_from(:then, line))
-            @parser.transition_to(:then_state)
-          end
-
-          def remove_tag_from(tag, line)
-            tokens = line.split
-            # validation of tag can go here
-            tokens[0].downcase.match(/#{tag.to_s}:?/) ? 
-                                (tokens[1..-1].join(' ')) : line
-          end
-
-          def eof
-          end
-          
-          def other(line)
-            # no-op - supports header text before the first story in a file
-          end
-          
-          def comment(line)
-          end
-        end
-        
-        class StartingState < State
-          def initialize(parser)
-            @parser = parser
-          end
-        end
-        
-        class StoryState < State
-          def one_more_of_the_same(line)
-            other(line)
-          end
-
-          def story(line)
-            @parser.create_story
-            @parser.add_story_line(line)
-          end
-          
-          def scenario(line)
-            @parser.create_story
-            @parser.create_scenario(line)
-            @parser.transition_to(:scenario_state)
-          end
-          
-          def given(line)
-            other(line)
-          end
-          
-          def event(line)
-            other(line)
-          end
-          
-          def outcome(line)
-            other(line)
-          end
-          
-          def other(line)
-            @parser.add_story_line(line)
-          end
-          
-          def eof
-            @parser.create_story
-          end
-        end
-
-        class ScenarioState < State
-          def one_more_of_the_same(line)
-            raise IllegalStepError.new("Scenario", "And")
-          end
-
-          def scenario(line)
-            @parser.create_scenario(line)
-          end
-        end
-        
-        class GivenState < State
-          def one_more_of_the_same(line)
-            @parser.create_given(remove_tag_from(:and, line))
-          end
-          
-          def given(line)
-            @parser.create_given(remove_tag_from(:given, line))
-          end
-          
-          def other(line)
-            @parser.add_to_last(line)
-          end
-        end
-        
-        class WhenState < State
-          def one_more_of_the_same(line)
-            @parser.create_when(remove_tag_from(:and ,line))
-          end
-
-          def event(line)
-            @parser.create_when(remove_tag_from(:when ,line))
-          end
-
-          def other(line)
-            @parser.add_to_last(line)
-          end
-        end
-
-        class ThenState < State
-          def one_more_of_the_same(line)
-            @parser.create_then(remove_tag_from(:and ,line))
-          end
-
-          def outcome(line)
-            @parser.create_then(remove_tag_from(:then ,line))
-          end
-
-          def other(line)
-            @parser.add_to_last(line)
-          end
-        end
-
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_runner.rb
deleted file mode 100644
index a634797..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/runner/story_runner.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-module Spec
-  module Story
-    module Runner
-      class StoryRunner
-        class << self
-          attr_accessor :current_story_runner
-          
-          def scenario_from_current_story(scenario_name)
-            current_story_runner.scenario_from_current_story(scenario_name)
-          end
-        end
-        
-        attr_accessor :stories, :scenarios, :current_story
-        
-        def initialize(scenario_runner, world_creator = World)
-          StoryRunner.current_story_runner = self
-          @scenario_runner = scenario_runner
-          @world_creator = world_creator
-          @stories = []
-          @scenarios_by_story = {}
-          @scenarios = []
-          @listeners = []
-        end
-        
-        def Story(title, narrative, params = {}, &body)
-          story = Story.new(title, narrative, params, &body)
-          @stories << story
-          
-          # collect scenarios
-          collector = ScenarioCollector.new(story)
-          story.run_in(collector)
-          @scenarios += collector.scenarios
-          @scenarios_by_story[story.title] = collector.scenarios
-        end
-        
-        def run_stories
-          return if @stories.empty?
-          @listeners.each { |l| l.run_started(scenarios.size) }
-          success = true
-          @stories.each do |story|
-            story.assign_steps_to(World)
-            @current_story = story
-            @listeners.each { |l| l.story_started(story.title, story.narrative) }
-            scenarios = @scenarios_by_story[story.title]
-            scenarios.each do |scenario|
-              type = story[:type] || Object
-              args = story[:args] || []
-              world = @world_creator.create(type, *args)
-              success = success & @scenario_runner.run(scenario, world)
-            end
-            @listeners.each { |l| l.story_ended(story.title, story.narrative) }
-            World.step_mother.clear
-          end
-          unique_steps = (World.step_names.collect {|n| Regexp === n ? n.source : n.to_s}).uniq.sort
-          @listeners.each { |l| l.collected_steps(unique_steps) }
-          @listeners.each { |l| l.run_ended }
-          return success
-        end
-        
-        def add_listener(listener)
-          @listeners << listener
-        end
-        
-        def scenario_from_current_story(scenario_name)
-          @scenarios_by_story[@current_story.title].find {|s| s.name == scenario_name }
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/scenario.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/scenario.rb
deleted file mode 100644
index d83b3ee..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/scenario.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-
-module Spec
-  module Story
-    class Scenario
-      attr_accessor :name, :body, :story
-      
-      def initialize(story, name, &body)
-        @story = story
-        @name = name
-        @body = body
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step.rb
deleted file mode 100644
index a1a6379..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-module Spec
-  module Story
-    class Step
-      PARAM_PATTERN = /([^\\]|^)(\$(?!\$)\w*)/
-      PARAM_OR_GROUP_PATTERN = /(\$(?!\$)\w*)|\(.*?\)/
-      
-      attr_reader :name
-      
-      def initialize(name, &block)
-        init_name(name)
-        init_expression(name)
-        block_given? ? init_module(name, &block) : set_pending
-      end
-
-      def perform(instance, *args)
-        raise Spec::Example::ExamplePendingError.new("Not Yet Implemented") if pending?
-        instance.extend(@mod)
-        instance.__send__(sanitize(@name), *args)
-      end
-
-      def matches?(name)
-        !(name.strip =~ @expression).nil?
-      end
-            
-      def parse_args(name)
-        name.strip.match(@expression)[1..-1]
-      end
-
-      private
-      
-      def sanitize(a_string_or_regexp)
-        return a_string_or_regexp.source if Regexp == a_string_or_regexp
-        a_string_or_regexp.to_s
-      end
-
-      def init_module(name, &block)
-        sanitized_name = sanitize(name)
-        @mod = Module.new do
-          define_method(sanitized_name, &block)
-        end
-      end
-    
-      def set_pending
-        @pending = true
-      end
-      
-      def pending?
-        @pending == true
-      end
-      
-      def init_name(name)
-        @name = name
-      end
-    
-      def init_expression(string_or_regexp)
-        if String === string_or_regexp
-          expression = string_or_regexp.dup
-          %w<? ( ) [ ] { } ^ !>.each {|c| expression.gsub! c, "\\#{c}"}
-        elsif Regexp === string_or_regexp
-          expression = string_or_regexp.source
-        end
-        while expression =~ PARAM_PATTERN
-          expression.sub!($2, "(.*?)")
-        end
-        @expression = Regexp.new("\\A#{expression}\\Z", Regexp::MULTILINE)
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step_group.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step_group.rb
deleted file mode 100644
index cae558c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step_group.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-module Spec
-  module Story
-
-    class StepGroupHash < Hash
-      def initialize
-        super do |h,k|
-          h[k] = Spec::Story::StepGroup.new
-        end
-      end
-    end
-
-    class StepGroup
-      def self.steps(&block)
-        @step_group ||= StepGroup.new(false)
-        @step_group.instance_eval(&block) if block
-        @step_group
-      end
-      
-      def initialize(init_defaults=true, &block)
-        @hash_of_lists_of_steps = Hash.new {|h, k| h[k] = []}
-        if init_defaults
-          self.class.steps.add_to(self)
-        end
-        instance_eval(&block) if block
-      end
-      
-      def find(type, name)
-        @hash_of_lists_of_steps[type].each do |step|
-          return step if step.matches?(name)
-        end
-        return nil
-      end
-
-      def GivenScenario(name, &block)
-        create_matcher(:given_scenario, name, &block)
-      end
-      
-      def Given(name, &block)
-        create_matcher(:given, name, &block)
-      end
-      
-      def When(name, &block)
-        create_matcher(:when, name, &block)
-      end
-      
-      def Then(name, &block)
-        create_matcher(:then, name, &block)
-      end
-
-      alias :given_scenario :GivenScenario
-      alias :given :Given
-      alias :when :When
-      alias :then :Then
-      
-      def add(type, steps)
-        (@hash_of_lists_of_steps[type] << steps).flatten!
-      end
-      
-      def clear
-        @hash_of_lists_of_steps.clear
-      end
-      
-      def empty?
-        [:given_scenario, :given, :when, :then].each do |type|
-          return false unless @hash_of_lists_of_steps[type].empty?
-        end
-        return true
-      end
-      
-      def add_to(other_step_matchers)
-        [:given_scenario, :given, :when, :then].each do |type|
-          other_step_matchers.add(type, @hash_of_lists_of_steps[type])
-        end
-      end
-      
-      def <<(other_step_matchers)
-        other_step_matchers.add_to(self) if other_step_matchers.respond_to?(:add_to)
-      end
-      
-      # TODO - make me private
-      def create_matcher(type, name, &block)
-        matcher = Step.new(name, &block)
-        @hash_of_lists_of_steps[type] << matcher
-        matcher
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step_mother.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step_mother.rb
deleted file mode 100644
index e91c097..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/step_mother.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-module Spec
-  module Story
-    class StepMother
-      def initialize
-        @steps = StepGroup.new
-      end
-      
-      def use(new_step_group)
-        @steps << new_step_group
-      end
-      
-      def store(type, step)
-        @steps.add(type, step)
-      end
-      
-      def find(type, unstripped_name)
-        name = unstripped_name.strip
-        if @steps.find(type, name).nil?
-          @steps.add(type,
-          Step.new(name) do
-            raise Spec::Example::ExamplePendingError.new("Unimplemented step: #{name}")
-          end
-          )
-        end
-        @steps.find(type, name)
-      end
-      
-      def clear
-        @steps.clear
-      end
-      
-      def empty?
-        @steps.empty?
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/story.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/story.rb
deleted file mode 100644
index 9cd1a0f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/story.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-module Spec
-  module Story
-    class Story
-      attr_reader :title, :narrative
-      
-      def initialize(title, narrative, params = {}, &body)
-        @body = body
-        @title = title
-        @narrative = narrative
-        @params = params
-      end
-      
-      def [](key)
-        @params[key]
-      end
-      
-      def run_in(obj)
-        obj.instance_eval(&@body)
-      end
-      
-      def assign_steps_to(assignee)
-        if steps=@params[:steps_for]
-          steps = [steps] unless steps.is_a?(Array)
-          steps.each do |step|
-            if step.is_a?(StepGroup)
-              assignee.use(step)
-            else
-              assignee.use(steps_for(step))
-            end
-          end
-        end
-      end
-      
-      def steps_for(key)
-        $rspec_story_steps[key]
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/world.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/world.rb
deleted file mode 100644
index 1ef0365..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/story/world.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-require 'spec/expectations'
-require 'spec/matchers'
-require 'spec/example/pending'
-
-module Spec
-  module Story
-=begin
-  A World represents the actual instance a scenario will run in.
-  
-  The runner ensures any instance variables and methods defined anywhere
-  in a story block are available to all the scenarios. This includes
-  variables that are created or referenced inside Given, When and Then
-  blocks.
-=end
-    module World
-      include ::Spec::Example::Pending
-      include ::Spec::Matchers
-      # store steps and listeners in the singleton metaclass.
-      # This serves both to keep them out of the way of runtime Worlds
-      # and to make them available to all instances.
-      class << self
-        def create(cls = Object, *args)
-          cls.new(*args).extend(World)
-        end
-        
-        def listeners
-          @listeners ||= []
-        end
-        
-        def add_listener(listener)
-          listeners() << listener
-        end
-        
-        def step_mother
-          @step_mother ||= StepMother.new
-        end
-                
-        def use(steps)
-          step_mother.use(steps)
-        end
-        
-        def step_names
-          @step_names ||= []
-        end
-
-        def run_given_scenario_with_suspended_listeners(world, type, name, scenario)
-          current_listeners = Array.new(listeners)
-          begin
-            listeners.each { |l| l.found_scenario(type, name) }
-            @listeners.clear
-            scenario.perform(world, name) unless dry_run
-          ensure
-            @listeners.replace(current_listeners)
-          end
-        end
-        
-        def store_and_call(world, type, name, *args, &block)
-          if block_given?
-            step_mother.store(type, Step.new(name, &block))
-          end
-          step = step_mother.find(type, name)
-
-          step_name = step.name
-          step_names << step_name
-          
-          # It's important to have access to the parsed args here, so
-          # we can give them to the listeners. The HTML reporter needs
-          # the args so it can style them. See the generated output in
-          # story_server/prototype/rspec_stories.html (generated by rake stories)
-          args = step.parse_args(name) if args.empty?
-          begin
-            listeners.each { |l| l.step_upcoming(type, step_name, *args) }
-            step.perform(world, *args) unless dry_run
-            listeners.each { |l| l.step_succeeded(type, step_name, *args) }
-          rescue Exception => e
-            case e
-            when Spec::Example::ExamplePendingError
-              @listeners.each { |l| l.step_pending(type, step_name, *args) }
-            else
-              @listeners.each { |l| l.step_failed(type, step_name, *args) }
-            end
-            errors << e
-          end
-        end
-        
-        def errors
-          @errors ||= []
-        end
-        
-        def dry_run
-          ::Spec::Story::Runner.dry_run
-        end
-      end # end of class << self
-      
-      def start_collecting_errors
-        errors.clear
-      end
-      
-      def errors
-        World.errors
-      end
-      
-      def GivenScenario(name)
-        World.run_given_scenario_with_suspended_listeners(self, :'given scenario', name, GivenScenario.new(name))
-        @__previous_step = :given
-      end
-      
-      def Given(name, *args, &block)
-        World.store_and_call self, :given, name, *args, &block
-        @__previous_step = :given
-      end
-      
-      def When(name, *args, &block)
-        World.store_and_call self, :when, name, *args, &block
-        @__previous_step = :when
-      end
-      
-      def Then(name, *args, &block)
-        World.store_and_call self, :then, name, *args, &block
-        @__previous_step = :then
-      end
-      
-      def And(name, *args, &block)
-        World.store_and_call self, @__previous_step, name, *args, &block
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/version.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/version.rb
deleted file mode 100644
index 1d6c569..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/version.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module Spec
-  module VERSION
-    unless defined? MAJOR
-      MAJOR  = 1
-      MINOR  = 1
-      TINY   = 11
-
-      STRING = [MAJOR, MINOR, TINY].join('.')
-
-      SUMMARY = "rspec #{STRING}"
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/flexmock.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/flexmock.rb
deleted file mode 100644
index 6875a52..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/flexmock.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env ruby
-#
-#  Created by Jim Weirich on 2007-04-10.
-#  Copyright (c) 2007. All rights reserved.
-
-require 'flexmock/rspec'
-
-module Spec
-  module Plugins
-    module MockFramework
-      include FlexMock::MockContainer
-      def setup_mocks_for_rspec
-        # No setup required
-      end
-      def verify_mocks_for_rspec
-        flexmock_verify
-      end
-      def teardown_mocks_for_rspec
-        flexmock_close
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/mocha.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/mocha.rb
deleted file mode 100644
index 69d1163..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/mocha.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'mocha/standalone'
-require 'mocha/object'
-
-module Spec
-  module Plugins
-    module MockFramework
-      include Mocha::Standalone
-      def setup_mocks_for_rspec
-        mocha_setup
-      end
-      def verify_mocks_for_rspec
-        mocha_verify
-      end
-      def teardown_mocks_for_rspec
-        mocha_teardown
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/rr.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/rr.rb
deleted file mode 100644
index c019c18..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/rr.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'rr'
-
-patterns = ::Spec::Runner::QuietBacktraceTweaker::IGNORE_PATTERNS
-patterns.push(RR::Errors::BACKTRACE_IDENTIFIER)
-
-module Spec
-  module Plugins
-    module MockFramework
-      include RR::Extensions::InstanceMethods
-      def setup_mocks_for_rspec
-        RR::Space.instance.reset
-      end
-      def verify_mocks_for_rspec
-        RR::Space.instance.verify_doubles
-      end
-      def teardown_mocks_for_rspec
-        RR::Space.instance.reset
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/rspec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/rspec.rb
deleted file mode 100644
index f831cb2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/plugins/mock_frameworks/rspec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "spec", "mocks"))
-require 'spec/mocks/framework'
-require 'spec/mocks/extensions'
-
-module Spec
-  module Plugins
-    module MockFramework
-      include Spec::Mocks::ExampleMethods
-      def setup_mocks_for_rspec
-        $rspec_mocks ||= Spec::Mocks::Space.new
-      end
-      def verify_mocks_for_rspec
-        $rspec_mocks.verify_all
-      end
-      def teardown_mocks_for_rspec
-        $rspec_mocks.reset_all
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/examples.rake b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/examples.rake
deleted file mode 100644
index 32d0ad0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/examples.rake
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'rake'
-require 'spec/rake/spectask'
-
-desc "Run all examples"
-Spec::Rake::SpecTask.new('examples') do |t|
-  t.spec_files = FileList['examples/**/*.rb']
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/examples_with_rcov.rake b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/examples_with_rcov.rake
deleted file mode 100644
index 4bf35c6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/examples_with_rcov.rake
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'rake'
-require 'spec/rake/spectask'
-
-desc "Run all examples with RCov"
-Spec::Rake::SpecTask.new('examples_with_rcov') do |t|
-  t.spec_files = FileList['examples/**/*.rb']
-  t.rcov = true
-  t.rcov_opts = ['--exclude', 'examples']
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/failing_examples_with_html.rake b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/failing_examples_with_html.rake
deleted file mode 100644
index 6e53551..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/failing_examples_with_html.rake
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'rake'
-require 'spec/rake/spectask'
-
-desc "Generate HTML report for failing examples"
-Spec::Rake::SpecTask.new('failing_examples_with_html') do |t|
-  t.spec_files = FileList['failing_examples/**/*.rb']
-  t.spec_opts = ["--format", "html:doc/reports/tools/failing_examples.html", "--diff"]
-  t.fail_on_error = false
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/verify_rcov.rake b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/verify_rcov.rake
deleted file mode 100644
index 251d457..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rake_tasks/verify_rcov.rake
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'rake'
-require 'spec/rake/verify_rcov'
-
-RCov::VerifyTask.new(:verify_rcov => :spec) do |t|
-  t.threshold = 100.0
-  t.index_html = 'coverage/index.html'
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rspec.gemspec b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rspec.gemspec
deleted file mode 100644
index e5175ed..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/rspec.gemspec
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{rspec}
-  s.version = "1.1.11"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["RSpec Development Team"]
-  s.date = %q{2008-10-24}
-  s.description = %q{Behaviour Driven Development for Ruby.}
-  s.email = ["rspec-devel at rubyforge.org"]
-  s.executables = ["autospec", "spec"]
-  s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "README.txt", "TODO.txt", "examples/pure/priority.txt", "examples/stories/game-of-life/README.txt", "examples/stories/game-of-life/behaviour/stories/stories.txt", "failing_examples/README.txt", "spec/spec/runner/empty_file.txt", "spec/spec/runner/examples.txt", "spec/spec/runner/failed.txt"]
-  s.files = ["History.txt", "License.txt", "Manifest.txt", "README.txt", "Rakefile", "TODO.txt", "bin/autospec", "bin/spec", "examples/pure/autogenerated_docstrings_example.rb", "examples/pure/before_and_after_example.rb", "examples/pure/behave_as_example.rb", "examples/pure/custom_expectation_matchers.rb", "examples/pure/custom_formatter.rb", "examples/pure/dynamic_spec.rb", "examples/pure/file_accessor.rb", "examples/pure/file_accessor_spec.rb", "examples/pure/greeter_spec.rb", "examples/pure/helper_method_example.rb", "examples/pure/io_processor.rb", "examples/pure/io_processor_spec.rb", "examples/pure/legacy_spec.rb", "examples/pure/mocking_example.rb", "examples/pure/multi_threaded_behaviour_runner.rb", "examples/pure/nested_classes_example.rb", "examples/pure/partial_mock_example.rb", "examples/pure/pending_example.rb", "examples/pure/predicate_example.rb", "examples/pure/priority.txt", "examples/pure/shared_example_group_example.rb", "examples/pure/shared_stack_examples.rb", "examples/pure/spec_helper.rb", "examples/pure/stack.rb", "examples/pure/stack_spec.rb", "examples/pure/stack_spec_with_nested_example_groups.rb", "examples/pure/stubbing_example.rb", "examples/pure/yielding_example.rb", "examples/stories/adder.rb", "examples/stories/addition", "examples/stories/addition.rb", "examples/stories/calculator.rb", "examples/stories/game-of-life/.loadpath", "examples/stories/game-of-life/README.txt", "examples/stories/game-of-life/behaviour/everything.rb", "examples/stories/game-of-life/behaviour/examples/examples.rb", "examples/stories/game-of-life/behaviour/examples/game_behaviour.rb", "examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb", "examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story", "examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story", "examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story", "examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story", "examples/stories/game-of-life/behaviour/stories/ICanKillACell.story", "examples/stories/game-of-life/behaviour/stories/TheGridWraps.story", "examples/stories/game-of-life/behaviour/stories/create_a_cell.rb", "examples/stories/game-of-life/behaviour/stories/helper.rb", "examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb", "examples/stories/game-of-life/behaviour/stories/steps.rb", "examples/stories/game-of-life/behaviour/stories/stories.rb", "examples/stories/game-of-life/behaviour/stories/stories.txt", "examples/stories/game-of-life/life.rb", "examples/stories/game-of-life/life/game.rb", "examples/stories/game-of-life/life/grid.rb", "examples/stories/helper.rb", "examples/stories/steps/addition_steps.rb", "failing_examples/README.txt", "failing_examples/diffing_spec.rb", "failing_examples/failing_autogenerated_docstrings_example.rb", "failing_examples/failure_in_setup.rb", "failing_examples/failure_in_teardown.rb", "failing_examples/mocking_example.rb", "failing_examples/mocking_with_flexmock.rb", "failing_examples/mocking_with_mocha.rb", "failing_examples/mocking_with_rr.rb", "failing_examples/partial_mock_example.rb", "failing_examples/predicate_example.rb", "failing_examples/raising_example.rb", "failing_examples/spec_helper.rb", "failing_examples/syntax_error_example.rb", "failing_examples/team_spec.rb", "failing_examples/timeout_behaviour.rb", "init.rb", "lib/autotest/discover.rb", "lib/autotest/rspec.rb", "lib/spec.rb", "lib/spec/adapters.rb", "lib/spec/adapters/ruby_engine.rb", "lib/spec/adapters/ruby_engine/mri.rb", "lib/spec/adapters/ruby_engine/rubinius.rb", "lib/spec/example.rb", "lib/spec/example/before_and_after_hooks.rb", "lib/spec/example/configuration.rb", "lib/spec/example/errors.rb", "lib/spec/example/example_group.rb", "lib/spec/example/example_group_factory.rb", "lib/spec/example/example_group_methods.rb", "lib/spec/example/example_matcher.rb", "lib/spec/example/example_methods.rb", "lib/spec/example/module_reopening_fix.rb", "lib/spec/example/pending.rb", "lib/spec/example/shared_example_group.rb", "lib/spec/expectations.rb", "lib/spec/expectations/differs/default.rb", "lib/spec/expectations/errors.rb", "lib/spec/expectations/extensions.rb", "lib/spec/expectations/extensions/object.rb", "lib/spec/expectations/extensions/string_and_symbol.rb", "lib/spec/expectations/handler.rb", "lib/spec/extensions.rb", "lib/spec/extensions/class.rb", "lib/spec/extensions/main.rb", "lib/spec/extensions/metaclass.rb", "lib/spec/extensions/object.rb", "lib/spec/interop/test.rb", "lib/spec/interop/test/unit/autorunner.rb", "lib/spec/interop/test/unit/testcase.rb", "lib/spec/interop/test/unit/testresult.rb", "lib/spec/interop/test/unit/testsuite_adapter.rb", "lib/spec/interop/test/unit/ui/console/testrunner.rb", "lib/spec/matchers.rb", "lib/spec/matchers/be.rb", "lib/spec/matchers/be_close.rb", "lib/spec/matchers/change.rb", "lib/spec/matchers/eql.rb", "lib/spec/matchers/equal.rb", "lib/spec/matchers/exist.rb", "lib/spec/matchers/has.rb", "lib/spec/matchers/have.rb", "lib/spec/matchers/include.rb", "lib/spec/matchers/match.rb", "lib/spec/matchers/operator_matcher.rb", "lib/spec/matchers/raise_error.rb", "lib/spec/matchers/respond_to.rb", "lib/spec/matchers/satisfy.rb", "lib/spec/matchers/simple_matcher.rb", "lib/spec/matchers/throw_symbol.rb", "lib/spec/mocks.rb", "lib/spec/mocks/argument_constraints.rb", "lib/spec/mocks/argument_expectation.rb", "lib/spec/mocks/error_generator.rb", "lib/spec/mocks/errors.rb", "lib/spec/mocks/extensions.rb", "lib/spec/mocks/extensions/object.rb", "lib/spec/mocks/framework.rb", "lib/spec/mocks/message_expectation.rb", "lib/spec/mocks/methods.rb", "lib/spec/mocks/mock.rb", "lib/spec/mocks/order_group.rb", "lib/spec/mocks/proxy.rb", "lib/spec/mocks/space.rb", "lib/spec/mocks/spec_methods.rb", "lib/spec/rake/spectask.rb", "lib/spec/rake/verify_rcov.rb", "lib/spec/runner.rb", "lib/spec/runner/backtrace_tweaker.rb", "lib/spec/runner/class_and_arguments_parser.rb", "lib/spec/runner/command_line.rb", "lib/spec/runner/drb_command_line.rb", "lib/spec/runner/example_group_runner.rb", "lib/spec/runner/formatter/base_formatter.rb", "lib/spec/runner/formatter/base_text_formatter.rb", "lib/spec/runner/formatter/failing_example_groups_formatter.rb", "lib/spec/runner/formatter/failing_examples_formatter.rb", "lib/spec/runner/formatter/html_formatter.rb", "lib/spec/runner/formatter/nested_text_formatter.rb", "lib/spec/runner/formatter/profile_formatter.rb", "lib/spec/runner/formatter/progress_bar_formatter.rb", "lib/spec/runner/formatter/snippet_extractor.rb", "lib/spec/runner/formatter/specdoc_formatter.rb", "lib/spec/runner/formatter/story/html_formatter.rb", "lib/spec/runner/formatter/story/plain_text_formatter.rb", "lib/spec/runner/formatter/story/progress_bar_formatter.rb", "lib/spec/runner/formatter/text_mate_formatter.rb", "lib/spec/runner/heckle_runner.rb", "lib/spec/runner/heckle_runner_unsupported.rb", "lib/spec/runner/option_parser.rb", "lib/spec/runner/options.rb", "lib/spec/runner/reporter.rb", "lib/spec/runner/spec_parser.rb", "lib/spec/story.rb", "lib/spec/story/extensions.rb", "lib/spec/story/extensions/main.rb", "lib/spec/story/extensions/regexp.rb", "lib/spec/story/extensions/string.rb", "lib/spec/story/given_scenario.rb", "lib/spec/story/runner.rb", "lib/spec/story/runner/plain_text_story_runner.rb", "lib/spec/story/runner/scenario_collector.rb", "lib/spec/story/runner/scenario_runner.rb", "lib/spec/story/runner/story_mediator.rb", "lib/spec/story/runner/story_parser.rb", "lib/spec/story/runner/story_runner.rb", "lib/spec/story/scenario.rb", "lib/spec/story/step.rb", "lib/spec/story/step_group.rb", "lib/spec/story/step_mother.rb", "lib/spec/story/story.rb", "lib/spec/story/world.rb", "lib/spec/version.rb", "plugins/mock_frameworks/flexmock.rb", "plugins/mock_frameworks/mocha.rb", "plugins/mock_frameworks/rr.rb", "plugins/mock_frameworks/rspec.rb", "rake_tasks/examples.rake", "rake_tasks/examples_with_rcov.rake", "rake_tasks/failing_examples_with_html.rake", "rake_tasks/verify_rcov.rake", "rspec.gemspec", "spec/README.jruby", "spec/autotest/autotest_helper.rb", "spec/autotest/autotest_matchers.rb", "spec/autotest/discover_spec.rb", "spec/autotest/rspec_spec.rb", "spec/rspec_suite.rb", "spec/ruby_forker.rb", "spec/spec.opts", "spec/spec/adapters/ruby_engine_spec.rb", "spec/spec/example/configuration_spec.rb", "spec/spec/example/example_group_class_definition_spec.rb", "spec/spec/example/example_group_factory_spec.rb", "spec/spec/example/example_group_methods_spec.rb", "spec/spec/example/example_group_spec.rb", "spec/spec/example/example_matcher_spec.rb", "spec/spec/example/example_methods_spec.rb", "spec/spec/example/example_runner_spec.rb", "spec/spec/example/nested_example_group_spec.rb", "spec/spec/example/pending_module_spec.rb", "spec/spec/example/predicate_matcher_spec.rb", "spec/spec/example/shared_example_group_spec.rb", "spec/spec/example/subclassing_example_group_spec.rb", "spec/spec/expectations/differs/default_spec.rb", "spec/spec/expectations/extensions/object_spec.rb", "spec/spec/expectations/fail_with_spec.rb", "spec/spec/extensions/main_spec.rb", "spec/spec/interop/test/unit/resources/spec_that_fails.rb", "spec/spec/interop/test/unit/resources/spec_that_passes.rb", "spec/spec/interop/test/unit/resources/spec_with_errors.rb", "spec/spec/interop/test/unit/resources/spec_with_options_hash.rb", "spec/spec/interop/test/unit/resources/test_case_that_fails.rb", "spec/spec/interop/test/unit/resources/test_case_that_passes.rb", "spec/spec/interop/test/unit/resources/test_case_with_errors.rb", "spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb", "spec/spec/interop/test/unit/spec_spec.rb", "spec/spec/interop/test/unit/test_unit_spec_helper.rb", "spec/spec/interop/test/unit/testcase_spec.rb", "spec/spec/interop/test/unit/testsuite_adapter_spec.rb", "spec/spec/matchers/be_close_spec.rb", "spec/spec/matchers/be_spec.rb", "spec/spec/matchers/change_spec.rb", "spec/spec/matchers/description_generation_spec.rb", "spec/spec/matchers/eql_spec.rb", "spec/spec/matchers/equal_spec.rb", "spec/spec/matchers/exist_spec.rb", "spec/spec/matchers/handler_spec.rb", "spec/spec/matchers/has_spec.rb", "spec/spec/matchers/have_spec.rb", "spec/spec/matchers/include_spec.rb", "spec/spec/matchers/match_spec.rb", "spec/spec/matchers/matcher_methods_spec.rb", "spec/spec/matchers/mock_constraint_matchers_spec.rb", "spec/spec/matchers/operator_matcher_spec.rb", "spec/spec/matchers/raise_error_spec.rb", "spec/spec/matchers/respond_to_spec.rb", "spec/spec/matchers/satisfy_spec.rb", "spec/spec/matchers/simple_matcher_spec.rb", "spec/spec/matchers/throw_symbol_spec.rb", "spec/spec/mocks/any_number_of_times_spec.rb", "spec/spec/mocks/argument_expectation_spec.rb", "spec/spec/mocks/at_least_spec.rb", "spec/spec/mocks/at_most_spec.rb", "spec/spec/mocks/bug_report_10260_spec.rb", "spec/spec/mocks/bug_report_10263_spec.rb", "spec/spec/mocks/bug_report_11545_spec.rb", "spec/spec/mocks/bug_report_15719_spec.rb", "spec/spec/mocks/bug_report_496.rb", "spec/spec/mocks/bug_report_7611_spec.rb", "spec/spec/mocks/bug_report_7805_spec.rb", "spec/spec/mocks/bug_report_8165_spec.rb", "spec/spec/mocks/bug_report_8302_spec.rb", "spec/spec/mocks/failing_mock_argument_constraints_spec.rb", "spec/spec/mocks/hash_including_matcher_spec.rb", "spec/spec/mocks/mock_ordering_spec.rb", "spec/spec/mocks/mock_space_spec.rb", "spec/spec/mocks/mock_spec.rb", "spec/spec/mocks/multiple_return_value_spec.rb", "spec/spec/mocks/nil_expectation_warning_spec.rb", "spec/spec/mocks/null_object_mock_spec.rb", "spec/spec/mocks/once_counts_spec.rb", "spec/spec/mocks/options_hash_spec.rb", "spec/spec/mocks/partial_mock_spec.rb", "spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb", "spec/spec/mocks/passing_mock_argument_constraints_spec.rb", "spec/spec/mocks/precise_counts_spec.rb", "spec/spec/mocks/record_messages_spec.rb", "spec/spec/mocks/stub_spec.rb", "spec/spec/mocks/twice_counts_spec.rb", "spec/spec/package/bin_spec_spec.rb", "spec/spec/runner/class_and_argument_parser_spec.rb", "spec/spec/runner/command_line_spec.rb", "spec/spec/runner/drb_command_line_spec.rb", "spec/spec/runner/empty_file.txt", "spec/spec/runner/examples.txt", "spec/spec/runner/failed.txt", "spec/spec/runner/formatter/base_formatter_spec.rb", "spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb", "spec/spec/runner/formatter/failing_examples_formatter_spec.rb", "spec/spec/runner/formatter/html_formatted-1.8.4.html", "spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html", "spec/spec/runner/formatter/html_formatted-1.8.5.html", "spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html", "spec/spec/runner/formatter/html_formatted-1.8.6.html", "spec/spec/runner/formatter/html_formatter_spec.rb", "spec/spec/runner/formatter/nested_text_formatter_spec.rb", "spec/spec/runner/formatter/profile_formatter_spec.rb", "spec/spec/runner/formatter/progress_bar_formatter_spec.rb", "spec/spec/runner/formatter/snippet_extractor_spec.rb", "spec/spec/runner/formatter/spec_mate_formatter_spec.rb", "spec/spec/runner/formatter/specdoc_formatter_spec.rb", "spec/spec/runner/formatter/story/html_formatter_spec.rb", "spec/spec/runner/formatter/story/plain_text_formatter_spec.rb", "spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb", "spec/spec/runner/formatter/text_mate_formatted-1.8.4.html", "spec/spec/runner/formatter/text_mate_formatted-1.8.6.html", "spec/spec/runner/heckle_runner_spec.rb", "spec/spec/runner/heckler_spec.rb", "spec/spec/runner/noisy_backtrace_tweaker_spec.rb", "spec/spec/runner/option_parser_spec.rb", "spec/spec/runner/options_spec.rb", "spec/spec/runner/output_one_time_fixture.rb", "spec/spec/runner/output_one_time_fixture_runner.rb", "spec/spec/runner/output_one_time_spec.rb", "spec/spec/runner/quiet_backtrace_tweaker_spec.rb", "spec/spec/runner/reporter_spec.rb", "spec/spec/runner/resources/a_bar.rb", "spec/spec/runner/resources/a_foo.rb", "spec/spec/runner/resources/a_spec.rb", "spec/spec/runner/spec.opts", "spec/spec/runner/spec_drb.opts", "spec/spec/runner/spec_parser/spec_parser_fixture.rb", "spec/spec/runner/spec_parser_spec.rb", "spec/spec/runner/spec_spaced.opts", "spec/spec/runner_spec.rb", "spec/spec/spec_classes.rb", "spec/spec/story/builders.rb", "spec/spec/story/extensions/main_spec.rb", "spec/spec/story/extensions_spec.rb", "spec/spec/story/given_scenario_spec.rb", "spec/spec/story/runner/plain_text_story_runner_spec.rb", "spec/spec/story/runner/scenario_collector_spec.rb", "spec/spec/story/runner/scenario_runner_spec.rb", "spec/spec/story/runner/story_mediator_spec.rb", "spec/spec/story/runner/story_parser_spec.rb", "spec/spec/story/runner/story_runner_spec.rb", "spec/spec/story/runner_spec.rb", "spec/spec/story/scenario_spec.rb", "spec/spec/story/step_group_spec.rb", "spec/spec/story/step_mother_spec.rb", "spec/spec/story/step_spec.rb", "spec/spec/story/story_helper.rb", "spec/spec/story/story_spec.rb", "spec/spec/story/world_spec.rb", "spec/spec_helper.rb", "stories/all.rb", "stories/configuration/before_blocks.story", "stories/configuration/stories.rb", "stories/example_groups/autogenerated_docstrings", "stories/example_groups/example_group_with_should_methods", "stories/example_groups/nested_groups", "stories/example_groups/output", "stories/example_groups/stories.rb", "stories/helper.rb", "stories/interop/examples_and_tests_together", "stories/interop/stories.rb", "stories/interop/test_case_with_should_methods", "stories/mock_framework_integration/stories.rb", "stories/mock_framework_integration/use_flexmock.story", "stories/pending_stories/README", "stories/resources/helpers/cmdline.rb", "stories/resources/helpers/story_helper.rb", "stories/resources/matchers/smart_match.rb", "stories/resources/spec/before_blocks_example.rb", "stories/resources/spec/example_group_with_should_methods.rb", "stories/resources/spec/simple_spec.rb", "stories/resources/spec/spec_with_flexmock.rb", "stories/resources/steps/running_rspec.rb", "stories/resources/stories/failing_story.rb", "stories/resources/test/spec_and_test_together.rb", "stories/resources/test/test_case_with_should_methods.rb", "stories/stories/multiline_steps.story", "stories/stories/steps/multiline_steps.rb", "stories/stories/stories.rb", "story_server/prototype/javascripts/builder.js", "story_server/prototype/javascripts/controls.js", "story_server/prototype/javascripts/dragdrop.js", "story_server/prototype/javascripts/effects.js", "story_server/prototype/javascripts/prototype.js", "story_server/prototype/javascripts/rspec.js", "story_server/prototype/javascripts/scriptaculous.js", "story_server/prototype/javascripts/slider.js", "story_server/prototype/javascripts/sound.js", "story_server/prototype/javascripts/unittest.js", "story_server/prototype/lib/server.rb", "story_server/prototype/stories.html", "story_server/prototype/stylesheets/rspec.css", "story_server/prototype/stylesheets/test.css"]
-  s.has_rdoc = true
-  s.homepage = %q{http://rspec.info/}
-  s.rdoc_options = ["--main", "README.txt"]
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{rspec}
-  s.rubygems_version = %q{1.3.0}
-  s.summary = %q{rspec 1.1.11}
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/README.jruby b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/README.jruby
deleted file mode 100644
index 7eddb56..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/README.jruby
+++ /dev/null
@@ -1,15 +0,0 @@
-= Running specs on JRuby =
-
-svn co http://svn.codehaus.org/jruby/trunk jruby
-cd jruby/jruby
-ant clean
-ant
-# put JRuby's bin dir on your PATH
-jruby -S gem install rake --no-ri --no-rdoc
-jruby -S gem install diff-lcs
-jruby -S gem install syntax
-cd ../testsuites/rspec
-mkdir target
-jruby -S rake checkout_code
-cd target/rspec
-jruby bin/spec spec -c
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/autotest_helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/autotest_helper.rb
deleted file mode 100644
index 8a8ff34..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/autotest_helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require "rubygems"
-require 'autotest'
-dir = File.dirname(__FILE__)
-require "#{dir}/../spec_helper"
-require File.expand_path("#{dir}/../../lib/autotest/rspec")
-require "#{dir}/autotest_matchers"
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/autotest_matchers.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/autotest_matchers.rb
deleted file mode 100644
index 5e23452..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/autotest_matchers.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-module Spec
-  module Matchers
-    class AutotestMappingMatcher
-      def initialize(specs)
-        @specs = specs
-      end
-  
-      def to(file)
-        @file = file
-        self
-      end
-  
-      def matches?(autotest)
-        @autotest = prepare autotest
-        @actual = autotest.test_files_for(@file)
-        @actual == @specs
-      end
-  
-      def failure_message
-        "expected #{@autotest.class} to map #{@specs.inspect} to #{@file.inspect}\ngot #{@actual.inspect}"
-      end
-  
-      private
-      def prepare autotest
-        stub_found_files autotest
-        stub_find_order autotest
-        autotest
-      end
-  
-      def stub_found_files autotest
-        found_files = @specs.inject({}){|h,f| h[f] = Time.at(0)}
-        autotest.stub!(:find_files).and_return(found_files)
-      end
-
-      def stub_find_order autotest
-        find_order = @specs.dup << @file
-        autotest.instance_eval { @find_order = find_order }
-      end
-
-    end
-    
-    def map_specs(specs)
-      AutotestMappingMatcher.new(specs)
-    end
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/discover_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/discover_spec.rb
deleted file mode 100644
index 881c08a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/discover_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + "/autotest_helper"
-
-module DiscoveryHelper
-  def load_discovery
-    require File.dirname(__FILE__) + "/../../lib/autotest/discover"
-  end
-end
-
-
-class Autotest
-  describe Rspec, "discovery" do
-    include DiscoveryHelper
-    
-    it "should add the rspec autotest plugin" do
-      Autotest.should_receive(:add_discovery).and_yield
-      load_discovery
-    end
-  end  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/rspec_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/rspec_spec.rb
deleted file mode 100644
index 87e6fbf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/autotest/rspec_spec.rb
+++ /dev/null
@@ -1,150 +0,0 @@
-require File.dirname(__FILE__) + "/autotest_helper"
-
-class Autotest
-  
-  module AutotestHelper
-    def rspec_output
-      <<-HERE
-.............PPF
-
-1)
-'false should be false' FAILED
-expected: true,
-     got: false (using ==)
-./spec/autotest/rspec_spec.rb:203:
-
-Finished in 0.158674 seconds
-
-16 examples, 1 failure, 2 pending
-
-Pending:
-Autotest::Rspec handling failed results should return an array of failed examples and errors (TODO)
-Autotest::Rspec tests/specs for a given file should find all the specs for a given file (TODO)
-HERE
-    end
-    
-    def common_setup
-      @proc = mock Proc
-      @kernel = mock Kernel
-      @kernel.stub!(:proc).and_return @proc
-
-      File.stub!(:exists).and_return true
-      @windows_alt_separator = "\\"
-      @posix_separator = '/'
-
-      @rspec_output = rspec_output
-    end
-  end
-
-  describe Rspec do
-    describe "adding spec.opts --options" do 
-      before(:each) do
-        @rspec_autotest = Rspec.new
-      end
-
-      it "should return the command line option to add spec.opts if the options file exists" do
-        File.stub!(:exist?).and_return true
-        @rspec_autotest.add_options_if_present.should == "-O spec/spec.opts "
-      end
-
-      it "should return an empty string if no spec.opts exists" do
-        File.stub!(:exist?).and_return false
-        Rspec.new.add_options_if_present.should == ""
-      end
-    end  
-  
-    describe "commands" do
-      before(:each) do
-        @rspec_autotest = Rspec.new
-        @rspec_autotest.stub!(:ruby).and_return "ruby"
-        @rspec_autotest.stub!(:add_options_if_present).and_return "-O spec/spec.opts"
-      
-        @ruby = @rspec_autotest.ruby
-        @options = @rspec_autotest.add_options_if_present
-        @files_to_test = {
-          :spec => ["file_one", "file_two"]
-        }
-        # this is not the inner representation of Autotest!
-        @rspec_autotest.stub!(:files_to_test).and_return @files_to_test
-        @files_to_test.stub!(:keys).and_return @files_to_test[:spec]
-        @to_test = @files_to_test.keys.flatten.join ' '
-      end
-    
-      it "should make the appropriate test command" do
-        @rspec_autotest.make_test_cmd(@files_to_test).should == "#{@ruby} -S #{@to_test} #{@options}"
-      end
-
-      it "should return a blank command for no files" do
-        @rspec_autotest.make_test_cmd({}).should == ''
-      end
-    end
-  
-    describe "mappings" do
-    
-      before(:each) do
-        @lib_file = "lib/something.rb"
-        @spec_file = "spec/something_spec.rb"
-        @rspec_autotest = Rspec.new
-        @rspec_autotest.hook :initialize
-      end
-    
-      it "should find the spec file for a given lib file" do
-        @rspec_autotest.should map_specs([@spec_file]).to(@lib_file)
-      end
-    
-      it "should find the spec file if given a spec file" do
-        @rspec_autotest.should map_specs([@spec_file]).to(@spec_file)
-      end
-    
-      it "should ignore files in spec dir that aren't specs" do
-        @rspec_autotest.should map_specs([]).to("spec/spec_helper.rb")
-      end
-    
-      it "should ignore untracked files (in @file)"  do
-        @rspec_autotest.should map_specs([]).to("lib/untracked_file")
-      end
-    end
-  
-    describe "consolidating failures" do
-      include AutotestHelper
-    
-      before(:each) do
-        common_setup
-        @rspec_autotest = Rspec.new
-      
-        @spec_file = "spec/autotest/some_spec.rb"
-        @rspec_autotest.instance_variable_set("@files", {@spec_file => Time.now})
-        @rspec_autotest.stub!(:find_files_to_test).and_return true
-      end
-    
-      it "should return no failures if no failures were given in the output" do
-        @rspec_autotest.consolidate_failures([[]]).should == {}
-      end
-    
-      it "should return a hash with the spec filename => spec name for each failure or error" do
-        @rspec_autotest.stub!(:test_files_for).and_return "spec/autotest/some_spec.rb"
-        failures = [
-          [
-            "false should be false", 
-            "expected: true,\n     got: false (using ==)\n#{@spec_file}:203:"
-          ]
-        ]
-        @rspec_autotest.consolidate_failures(failures).should == {
-          @spec_file => ["false should be false"]
-        }
-      end
-    
-      it "should not include the subject file" do
-        subject_file = "lib/autotest/some.rb"
-        @rspec_autotest.stub!(:test_files_for).and_return "spec/autotest/some_spec.rb"
-        failures = [
-          [
-            "false should be false", 
-            "expected: true,\n     got: false (using ==)\n#{subject_file}:143:\n#{@spec_file}:203:"
-          ]
-        ]
-        @rspec_autotest.consolidate_failures(failures).keys.should_not include(subject_file)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/rspec_suite.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/rspec_suite.rb
deleted file mode 100644
index 79133a5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/rspec_suite.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-if __FILE__ == $0
-  dir = File.dirname(__FILE__)
-  Dir["#{dir}/**/*_spec.rb"].reverse.each do |file|
-    require file
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/ruby_forker.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/ruby_forker.rb
deleted file mode 100644
index 6ab0387..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/ruby_forker.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'rbconfig'
-
-module RubyForker
-  # Forks a ruby interpreter with same type as ourself.
-  # juby will fork jruby, ruby will fork ruby etc.
-  def ruby(args, stderr=nil)
-    config       = ::Config::CONFIG
-    interpreter  = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
-    cmd = "#{interpreter} #{args}"
-    cmd << " 2> #{stderr}" unless stderr.nil?
-    `#{cmd}`
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec.opts b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec.opts
deleted file mode 100644
index 48e51f9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec.opts
+++ /dev/null
@@ -1,6 +0,0 @@
---colour
---format
-profile
---timeout
-20
---diff
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/adapters/ruby_engine_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/adapters/ruby_engine_spec.rb
deleted file mode 100644
index 2db79fe..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/adapters/ruby_engine_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-describe Spec::Adapters::RubyEngine do
-  it "should default to MRI" do
-    Spec::Adapters::RubyEngine.adapter.should be_an_instance_of(Spec::Adapters::RubyEngine::MRI)
-  end
-  
-  it "should provide Rubinius for rbx" do
-    Spec::Adapters::RubyEngine.stub!(:engine).and_return('rbx')
-    Spec::Adapters::RubyEngine.adapter.should be_an_instance_of(Spec::Adapters::RubyEngine::Rubinius)
-  end
-  
-  it "should try to find whatever is defined by the RUBY_ENGINE const" do
-    Object.stub!(:const_defined?).with('RUBY_ENGINE').and_return(true)
-    Object.stub!(:const_get).with('RUBY_ENGINE').and_return("xyz")
-    Spec::Adapters::RubyEngine.engine.should == "xyz"
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/configuration_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/configuration_spec.rb
deleted file mode 100755
index 0e16bba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/configuration_spec.rb
+++ /dev/null
@@ -1,296 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Example
-    describe Configuration do
-
-      describe "#mock_with" do
-
-        before(:each) do
-          @config = Configuration.new
-          @example_group = mock("example_group")
-        end
-
-        it "should default mock framework to rspec" do
-          @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/
-        end
-
-        it "should set rspec mocking explicitly" do
-          @config.mock_with(:rspec)
-          @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/
-        end
-
-        it "should set mocha" do
-          @config.mock_with(:mocha)
-          @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/mocha$/
-        end
-
-        it "should set flexmock" do
-          @config.mock_with(:flexmock)
-          @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/flexmock$/
-        end
-
-        it "should set rr" do
-          @config.mock_with(:rr)
-          @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rr$/
-        end
-
-        it "should set an arbitrary adapter module" do
-          adapter = Module.new
-          @config.mock_with(adapter)
-          @config.mock_framework.should == adapter
-        end
-      end
-
-      with_sandboxed_config do
-
-        describe "#include" do
-          
-          before(:each) do
-            @example_group_class = Class.new(ExampleGroup) {}
-            ExampleGroupFactory.register(:foobar, @example_group_class)
-          end
-
-          it "should include the submitted module in ExampleGroup subclasses" do
-            mod = Module.new
-            config.include mod
-            Class.new(@example_group_class).included_modules.should include(mod)
-          end
-
-          it "should scope modules to be included for a specific type" do
-            mod = Module.new
-            config.include mod, :type => :foobar
-            Class.new(@example_group_class).included_modules.should include(mod)
-          end
-
-          it "should not include modules in a type they are not intended for" do
-            mod = Module.new
-            @other_example_group_class = Class.new(ExampleGroup)
-            ExampleGroupFactory.register(:baz, @other_example_group_class)
-
-            config.include mod, :type => :foobar
-
-            Class.new(@other_example_group_class).included_modules.should_not include(mod)
-          end
-
-        end
-      
-        describe "#extend" do
-        
-          before(:each) do
-            @example_group_class = Class.new(ExampleGroup) {}
-            ExampleGroupFactory.register(:foobar, @example_group_class)
-          end
-
-          it "should extend all groups" do
-            mod = Module.new
-            ExampleGroup.should_receive(:extend).with(mod)
-            Spec::Runner.configuration.extend mod
-          end
-      
-          it "should extend specified groups" do
-            mod = Module.new
-            @example_group_class.should_receive(:extend).with(mod)
-            Spec::Runner.configuration.extend mod, :type => :foobar
-          end
-      
-          it "should not extend non-specified groups" do
-            @other_example_group_class = Class.new(ExampleGroup)
-            ExampleGroupFactory.register(:baz, @other_example_group_class)
-
-            mod = Module.new
-            @other_example_group_class.should_not_receive(:extend)          
-
-            Spec::Runner.configuration.extend mod, :type => :foobar
-          end
-        
-        end
-      end
-
-      describe Configuration do
-            
-        before(:each) do
-          @special_example_group = Class.new(ExampleGroup).describe("special_example_group")
-          @special_child_example_group = Class.new(@special_example_group).describe("special_child_example_group")
-          @nonspecial_example_group = Class.new(ExampleGroup).describe("nonspecial_example_group")
-          ExampleGroupFactory.register(:special, @special_example_group)
-          ExampleGroupFactory.register(:special_child, @special_child_example_group)
-          ExampleGroupFactory.register(:non_special, @nonspecial_example_group)
-          @example_group = @special_child_example_group.describe "Special Example Group"
-          @unselected_example_group = Class.new(@nonspecial_example_group).describe "Non Special Example Group"
-        end
-
-        describe "#prepend_before" do
-          it "prepends the before block on all instances of the passed in type" do
-            order = []
-            config.prepend_before(:all) do
-              order << :prepend__before_all
-            end
-            config.prepend_before(:all, :type => :special) do
-              order << :special_prepend__before_all
-            end
-            config.prepend_before(:all, :type => :special_child) do
-              order << :special_child_prepend__before_all
-            end
-            config.prepend_before(:each) do
-              order << :prepend__before_each
-            end
-            config.prepend_before(:each, :type => :special) do
-              order << :special_prepend__before_each
-            end
-            config.prepend_before(:each, :type => :special_child) do
-              order << :special_child_prepend__before_each
-            end
-            config.prepend_before(:all, :type => :non_special) do
-              order << :special_prepend__before_all
-            end
-            config.prepend_before(:each, :type => :non_special) do
-              order << :special_prepend__before_each
-            end
-            @example_group.it "calls prepend_before" do
-            end
-        
-            @example_group.run
-            order.should == [
-              :prepend__before_all,
-              :special_prepend__before_all,
-              :special_child_prepend__before_all,
-              :prepend__before_each,
-              :special_prepend__before_each,
-              :special_child_prepend__before_each
-            ]
-          end
-        end
-
-        describe "#append_before" do
-
-          it "calls append_before on the type" do
-            order = []
-            config.append_before(:all) do
-              order << :append_before_all
-            end
-            config.append_before(:all, :type => :special) do
-              order << :special_append_before_all
-            end
-            config.append_before(:all, :type => :special_child) do
-              order << :special_child_append_before_all
-            end
-            config.append_before(:each) do
-              order << :append_before_each
-            end
-            config.append_before(:each, :type => :special) do
-              order << :special_append_before_each
-            end
-            config.append_before(:each, :type => :special_child) do
-              order << :special_child_append_before_each
-            end
-            config.append_before(:all, :type => :non_special) do
-              order << :special_append_before_all
-            end
-            config.append_before(:each, :type => :non_special) do
-              order << :special_append_before_each
-            end
-            @example_group.it "calls append_before" do
-            end
-
-            @example_group.run
-            order.should == [
-              :append_before_all,
-              :special_append_before_all,
-              :special_child_append_before_all,
-              :append_before_each,
-              :special_append_before_each,
-              :special_child_append_before_each
-            ]
-          end
-        end
-
-        describe "#prepend_after" do
-
-          it "prepends the after block on all instances of the passed in type" do
-            order = []
-            config.prepend_after(:all) do
-              order << :prepend__after_all
-            end
-            config.prepend_after(:all, :type => :special) do
-              order << :special_prepend__after_all
-            end
-            config.prepend_after(:all, :type => :special) do
-              order << :special_child_prepend__after_all
-            end
-            config.prepend_after(:each) do
-              order << :prepend__after_each
-            end
-            config.prepend_after(:each, :type => :special) do
-              order << :special_prepend__after_each
-            end
-            config.prepend_after(:each, :type => :special) do
-              order << :special_child_prepend__after_each
-            end
-            config.prepend_after(:all, :type => :non_special) do
-              order << :special_prepend__after_all
-            end
-            config.prepend_after(:each, :type => :non_special) do
-              order << :special_prepend__after_each
-            end
-            @example_group.it "calls prepend_after" do
-            end
-
-            @example_group.run
-            order.should == [
-              :special_child_prepend__after_each,
-              :special_prepend__after_each,
-              :prepend__after_each,
-              :special_child_prepend__after_all,
-              :special_prepend__after_all,
-              :prepend__after_all
-            ]
-          end
-        end
-
-        describe "#append_after" do
-
-          it "calls append_after on the type" do
-            order = []
-            config.append_after(:all) do
-              order << :append__after_all
-            end
-            config.append_after(:all, :type => :special) do
-              order << :special_append__after_all
-            end
-            config.append_after(:all, :type => :special_child) do
-              order << :special_child_append__after_all
-            end
-            config.append_after(:each) do
-              order << :append__after_each
-            end
-            config.append_after(:each, :type => :special) do
-              order << :special_append__after_each
-            end
-            config.append_after(:each, :type => :special_child) do
-              order << :special_child_append__after_each
-            end
-            config.append_after(:all, :type => :non_special) do
-              order << :non_special_append_after_all
-            end
-            config.append_after(:each, :type => :non_special) do
-              order << :non_special_append_after_each
-            end
-            @example_group.it "calls append_after" do
-            end
-
-            @example_group.run
-            order.should == [
-              :special_child_append__after_each,
-              :special_append__after_each,
-              :append__after_each,
-              :special_child_append__after_all,
-              :special_append__after_all,
-              :append__after_all
-            ]
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_class_definition_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_class_definition_spec.rb
deleted file mode 100644
index 96ffdaa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_class_definition_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Example
-    class ExampleGroupSubclass < ExampleGroup
-      class << self
-        attr_accessor :examples_ran
-      end
-
-      @@class_variable = :class_variable
-      CONSTANT = :constant
-
-      before do
-        @instance_variable = :instance_variable
-      end
-      
-      after(:all) do
-        self.class.examples_ran = true
-      end
-
-      it "should have access to instance variables" do
-        @instance_variable.should == :instance_variable
-      end
-
-      it "should have access to class variables" do
-        @@class_variable.should == :class_variable
-      end
-
-      it "should have access to constants" do
-        CONSTANT.should == :constant
-      end
-
-      it "should have access to methods defined in the Example Group" do
-        a_method.should == 22
-      end
-      
-      def a_method
-        22
-      end
-    end
-
-    describe ExampleGroupSubclass do
-      it "should run" do
-        ExampleGroupSubclass.examples_ran.should be_true
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_factory_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_factory_spec.rb
deleted file mode 100644
index ca1831e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_factory_spec.rb
+++ /dev/null
@@ -1,165 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
-
-module Spec
-  module Example
-    describe ExampleGroupFactory do
-      describe "#get" do
-        attr_reader :example_group
-        before do
-          @example_group_class = Class.new(ExampleGroup)
-          ExampleGroupFactory.register(:registered_type, @example_group_class)
-        end
-
-        after do
-          ExampleGroupFactory.reset
-        end
-
-        it "should return the default ExampleGroup type for nil" do
-          ExampleGroupFactory.get(nil).should == ExampleGroup
-        end
-
-        it "should return the default ExampleGroup for an unregistered non-nil value" do
-          ExampleGroupFactory.get(:does_not_exist).should == ExampleGroup
-        end
-
-        it "should return custom type if registered" do
-          ExampleGroupFactory.get(:registered_type).should == @example_group_class
-        end
-
-        it "should return the actual type when that is what is submitted" do
-          ExampleGroupFactory.get(@example_group_class).should == @example_group_class
-        end
-
-        it "should get the custom type after setting the default" do
-          @alternate_example_group_class = Class.new(ExampleGroup)
-          ExampleGroupFactory.default(@alternate_example_group_class)
-          ExampleGroupFactory.get(:registered_type).should == @example_group_class
-        end
-      end
-
-      describe "#create_example_group" do
-        attr_reader :parent_example_group
-        before do
-          @parent_example_group = Class.new(ExampleGroup) do
-            def initialize(*args, &block)
-              ;
-            end
-          end
-        end
-
-        it "should create a uniquely named class" do
-          example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
-          example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/
-        end
-
-        it "should create a Spec::Example::Example subclass by default" do
-          example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
-          example_group.superclass.should == Spec::Example::ExampleGroup
-        end
-
-        describe "with :type => :default" do
-          it "should create a Spec::Example::ExampleGroup" do
-            example_group = Spec::Example::ExampleGroupFactory.create_example_group(
-            "example_group", :type => :default
-            ) {}
-            example_group.superclass.should == Spec::Example::ExampleGroup
-          end
-        end
-
-        describe "with :type => :something_other_than_default" do
-          it "should create the specified type" do
-            Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
-            non_default_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
-              "example_group", :type => :something_other_than_default
-            ) {}
-            non_default_example_group.superclass.should == parent_example_group
-          end
-        end
-
-        it "should create a type indicated by :spec_path" do
-          Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
-          custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
-            "example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb"
-          ) {}
-          custom_example_group.superclass.should == parent_example_group
-        end
-
-        it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do
-          Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
-          custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
-            "example_group",
-            :spec_path => "./spec\\something_other_than_default\\some_spec.rb"
-          ) {}
-          custom_example_group.superclass.should == parent_example_group
-        end
-
-        describe "with :shared => true" do
-          def shared_example_group
-            @shared_example_group ||= Spec::Example::ExampleGroupFactory.create_example_group(
-              "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
-            ) {}
-          end
-
-          it "should create and register a Spec::Example::SharedExampleGroup" do
-            shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
-            SharedExampleGroup.shared_example_groups.should include(shared_example_group)
-          end
-        end
-
-        it "should favor the :type over the :spec_path" do
-          Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
-          custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
-            "name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default
-          ) {}
-          custom_example_group.superclass.should == parent_example_group
-        end
-
-        it "should register ExampleGroup by default" do
-          example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
-          end
-          Spec::Runner.options.example_groups.should include(example_group)
-        end
-
-        it "should enable unregistering of ExampleGroups" do
-          example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
-            unregister
-          end
-          Spec::Runner.options.example_groups.should_not include(example_group)
-        end
-
-        after(:each) do
-          Spec::Example::ExampleGroupFactory.reset
-        end
-      end
-
-      describe "#all_registered?" do
-        before(:each) do
-          @unregistered_parent = Class.new(ExampleGroup)
-          @registered_child = Class.new(@unregistered_parent)
-          @unregistered_grandchild = Class.new(@registered_child)
-          Spec::Example::ExampleGroupFactory.register :registered_child, @registered_child
-        end
-        
-        it "should return true for empty list" do
-          Spec::Example::ExampleGroupFactory.all_registered?([]).should be_true
-        end
-        
-        it "should return true for a registered example group class" do
-          Spec::Example::ExampleGroupFactory.all_registered?([@registered_child]).should be_true
-        end
-
-        it "should return true for an ancestor of a registered example_group_classes" do
-          Spec::Example::ExampleGroupFactory.all_registered?([@unregistered_parent]).should be_true
-        end
-
-        it "should return false for a subclass of a registered example_group_class" do
-          Spec::Example::ExampleGroupFactory.all_registered?([@unregistered_grandchild]).should be_false
-        end
-
-        after(:each) do
-          Spec::Example::ExampleGroupFactory.reset
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_methods_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_methods_spec.rb
deleted file mode 100644
index c07d1ed..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_methods_spec.rb
+++ /dev/null
@@ -1,584 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Example
-    describe 'ExampleGroupMethods' do
-      with_sandboxed_options do
-        attr_reader :example_group, :result, :reporter
-        before(:each) do
-          # See http://rspec.lighthouseapp.com/projects/5645-rspec/tickets/525-arity-changed-on-partial-mocks#ticket-525-2
-          method_with_three_args = lambda { |arg1, arg2, arg3| }
-          options.formatters << mock("formatter", :null_object => true, :example_pending => method_with_three_args)
-          options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
-          @reporter = FakeReporter.new(@options)
-          options.reporter = reporter
-          @example_group = Class.new(ExampleGroup) do
-            describe("ExampleGroup")
-            it "does nothing"
-          end
-          class << example_group
-            public :include
-          end
-          @result = nil
-        end
-
-        after(:each) do
-          ExampleGroup.reset
-        end
-
-        ["describe","context"].each do |method|
-          describe "##{method}" do
-            describe "when creating an ExampleGroup" do
-              attr_reader :child_example_group
-              before do
-                @child_example_group = @example_group.send method, "Another ExampleGroup" do
-                  it "should pass" do
-                    true.should be_true
-                  end
-                end
-              end
-
-              it "should create a subclass of the ExampleGroup when passed a block" do
-                child_example_group.superclass.should == @example_group
-                @options.example_groups.should include(child_example_group)
-              end
-
-              it "should not inherit examples" do
-                child_example_group.examples.length.should == 1
-              end
-            end
-
-            describe "when creating a SharedExampleGroup" do
-              attr_reader :name, :shared_example_group
-              before do
-                @name = "A Shared ExampleGroup"
-                @shared_example_group = @example_group.send method, name, :shared => true do
-                  it "should pass" do
-                    true.should be_true
-                  end
-                end
-              end
-
-              after do
-                SharedExampleGroup.shared_example_groups.delete_if do |registered_shared_example_group|
-                  registered_shared_example_group == shared_example_group
-                end
-              end
-
-              it "should create a SharedExampleGroup" do
-                SharedExampleGroup.find_shared_example_group(name).should == shared_example_group
-              end
-            end
-
-          end
-        end
-    
-        describe "#it" do
-          it "should should create an example instance" do
-            lambda {
-              @example_group.it("")
-            }.should change { @example_group.examples.length }.by(1)
-          end
-        end
-
-        describe "#xit and #xspecify" do
-          before(:each) do
-            Kernel.stub!(:warn)
-          end
-
-          it "should NOT create an example instance" do
-            lambda {
-              @example_group.xit("")
-            }.should_not change(@example_group.examples, :length)
-
-            lambda {
-              @example_group.xspecify("")
-            }.should_not change(@example_group.examples, :length)
-          end
-
-          it "should warn that it is disabled" do
-            Kernel.should_receive(:warn).with("Example disabled: foo").twice
-            @example_group.xit("foo")
-            @example_group.xspecify("foo")
-          end
-        end
-
-        describe "#examples" do
-          it "should have Examples" do
-            example_group = Class.new(ExampleGroup) do
-              describe('example')
-              it "should pass" do
-                1.should == 1
-              end
-            end
-            example_group.examples.length.should == 1
-            example_group.examples.first.description.should == "should pass"
-          end
-
-          it "should not include methods that begin with test (only when TU interop is loaded)" do
-            example_group = Class.new(ExampleGroup) do
-              describe('example')
-              def test_any_args(*args)
-                true.should be_true
-              end
-              def test_something
-                1.should == 1
-              end
-              def test
-                raise "This is not a real test"
-              end
-              def testify
-                raise "This is not a real test"
-              end
-              def should_something
-                # forces the run
-              end
-            end
-            example_group.examples.length.should == 1
-            example_group.run.should be_true
-          end
-
-          it "should include methods that begin with should and has an arity of 0 in suite" do
-            example_group = Class.new(ExampleGroup) do
-              describe('example')
-              def shouldCamelCase
-                true.should be_true
-              end
-              def should_any_args(*args)
-                true.should be_true
-              end
-              def should_something
-                1.should == 1
-              end
-              def should_not_something
-                1.should_not == 2
-              end
-              def should
-                raise "This is not a real example"
-              end
-              def should_not
-                raise "This is not a real example"
-              end
-            end
-            example_group = example_group.dup
-            example_group.examples.length.should == 4
-            descriptions = example_group.examples.collect {|example| example.description}.sort
-            descriptions.should include("shouldCamelCase")
-            descriptions.should include("should_any_args")
-            descriptions.should include("should_something")
-            descriptions.should include("should_not_something")
-            descriptions.should_not include("should")
-            descriptions.should_not include("should_not")
-          end
-
-          it "should not include methods that begin with test_ and has an arity > 0 in suite" do
-            example_group = Class.new(ExampleGroup) do
-              describe('example')
-              def test_invalid(foo)
-                1.should == 1
-              end
-              def testInvalidCamelCase(foo)
-                1.should == 1
-              end
-            end
-            example_group.examples.length.should == 0
-          end
-
-          it "should not include methods that begin with should_ and has an arity > 0 in suite" do
-            example_group = Class.new(ExampleGroup) do
-              describe('example')
-              def should_invalid(foo)
-                1.should == 2
-              end
-              def shouldInvalidCamelCase(foo)
-                1.should == 3
-              end
-              def should_not_invalid(foo)
-                1.should == 4
-              end
-              def should_valid
-                1.should == 1
-              end
-            end
-            example_group.examples.length.should == 1
-            example_group.run.should be_true
-          end
-
-          it "should run should_methods" do
-            example_group = Class.new(ExampleGroup) do
-              def should_valid
-                1.should == 2
-              end
-            end
-            example_group.examples.length.should == 1
-            example_group.run.should be_false
-          end
-        end
-
-        describe "#set_description" do
-          attr_reader :example_group
-          before do
-            class << example_group
-              public :set_description
-            end
-          end
-
-          describe "#set_description(String)" do
-            before(:each) do
-              example_group.set_description("abc")
-            end
-
-            specify ".description should return the String passed into .set_description" do
-              example_group.description.should == "abc"
-            end
-
-            specify ".described_type should provide nil as its type" do
-              example_group.described_type.should be_nil
-            end
-          end
-
-          describe "#set_description(Type)" do
-            before(:each) do
-              example_group.set_description(ExampleGroup)
-            end
-
-            specify ".description should return a String representation of that type (fully qualified) as its name" do
-              example_group.description.should == "Spec::Example::ExampleGroup"
-            end
-
-            specify ".described_type should return the passed in type" do
-              example_group.described_type.should == Spec::Example::ExampleGroup
-            end
-          end
-
-          describe "#set_description(String, Type)" do
-            before(:each) do
-              example_group.set_description("behaving", ExampleGroup)
-            end
-
-            specify ".description should return String then space then Type" do
-              example_group.description.should == "behaving Spec::Example::ExampleGroup"
-            end
-
-            specify ".described_type should return the passed in type" do
-              example_group.described_type.should == Spec::Example::ExampleGroup
-            end
-          end
-
-          describe "#set_description(Type, String not starting with a space)" do
-            before(:each) do
-              example_group.set_description(ExampleGroup, "behaving")
-            end
-
-            specify ".description should return the Type then space then String" do
-              example_group.description.should == "Spec::Example::ExampleGroup behaving"
-            end
-          end
-
-          describe "#set_description(Type, String starting with .)" do
-            before(:each) do
-              example_group.set_description(ExampleGroup, ".behaving")
-            end
-
-            specify ".description should return the Type then String" do
-              example_group.description.should == "Spec::Example::ExampleGroup.behaving"
-            end
-          end
-
-          describe "#set_description(Type, String containing .)" do
-            before(:each) do
-              example_group.set_description(ExampleGroup, "calling a.b")
-            end
-
-            specify ".description should return the Type then space then String" do
-              example_group.description.should == "Spec::Example::ExampleGroup calling a.b"
-            end
-          end
-
-          describe "#set_description(Type, String starting with .)" do
-            before(:each) do
-              example_group.set_description(ExampleGroup, ".behaving")
-            end
-
-            specify "should return the Type then String" do
-              example_group.description.should == "Spec::Example::ExampleGroup.behaving"
-            end
-          end
-
-          describe "#set_description(Type, String containing .)" do
-            before(:each) do
-              example_group.set_description(ExampleGroup, "is #1")
-            end
-
-            specify ".description should return the Type then space then String" do
-              example_group.description.should == "Spec::Example::ExampleGroup is #1"
-            end
-          end
-
-          describe "#set_description(String, Type, String)" do
-            before(:each) do
-              example_group.set_description("A", Hash, "with one entry")
-            end
-
-            specify ".description should return the first String then space then Type then second String" do
-              example_group.description.should == "A Hash with one entry"
-            end
-          end
-
-          describe "#set_description(Hash representing options)" do
-            before(:each) do
-              example_group.set_description(:a => "b", :spec_path => "blah")
-            end
-
-            it ".spec_path should expand the passed in :spec_path option passed into the constructor" do
-              example_group.spec_path.should == File.expand_path("blah")
-            end
-
-            it ".description_options should return all the options passed in" do
-              example_group.description_options.should == {:a => "b", :spec_path => "blah"}
-            end
-
-          end
-        end
-
-        describe "#description" do
-          it "should return the same description instance for each call" do
-            example_group.description.should eql(example_group.description)
-          end
-
-          it "should not add a space when description_text begins with #" do
-            child_example_group = Class.new(example_group) do
-              describe("#foobar", "Does something")
-            end
-            child_example_group.description.should == "ExampleGroup#foobar Does something"
-          end
-
-          it "should not add a space when description_text begins with ." do
-            child_example_group = Class.new(example_group) do
-              describe(".foobar", "Does something")
-            end
-            child_example_group.description.should == "ExampleGroup.foobar Does something"
-          end
-        
-          it "should return the class name if nil" do
-            example_group.set_description(nil)
-            example_group.description.should =~ /Class:/
-          end
-        
-          it "should return the class name if nil" do
-            example_group.set_description("")
-            example_group.description.should =~ /Class:/
-          end
-        end
-
-        describe "#description_parts" do
-          it "should return an Array of the current class description args" do
-            example_group.description_parts.should == [example_group.description]
-          end
-
-          it "should return an Array of the description args from each class in the hierarchy" do
-            child_example_group = Class.new(example_group)
-            child_example_group.describe("Child", ExampleGroup)
-            child_example_group.description.should_not be_empty
-
-            grand_child_example_group = Class.new(child_example_group)
-            grand_child_example_group.describe("GrandChild", ExampleGroup)
-            grand_child_example_group.description.should_not be_empty
-
-            grand_child_example_group.description_parts.should == [
-              "ExampleGroup",
-              "Child",
-              Spec::Example::ExampleGroup,
-              "GrandChild",
-              Spec::Example::ExampleGroup
-            ]
-          end
-        end
-
-        describe "#described_type" do
-          it "should return passed in type" do
-            child_example_group = Class.new(example_group) do
-              describe Object
-            end
-            child_example_group.described_type.should == Object
-          end
-
-          it "should return #described_type of superclass when no passed in type" do
-            parent_example_group = Class.new(ExampleGroup) do
-              describe Object, "#foobar"
-            end
-            child_example_group = Class.new(parent_example_group) do
-              describe "not a type"
-            end
-            child_example_group.described_type.should == Object
-          end
-        end
-
-        describe "#remove_after" do
-          it "should unregister a given after(:each) block" do
-            after_all_ran = false
-            @example_group.it("example") {}
-            proc = Proc.new { after_all_ran = true }
-            ExampleGroup.after(:each, &proc)
-            @example_group.run
-            after_all_ran.should be_true
-
-            after_all_ran = false
-            ExampleGroup.remove_after(:each, &proc)
-            @example_group.run
-            after_all_ran.should be_false
-          end
-        end
-
-        describe "#include" do
-          it "should have accessible class methods from included module" do
-            mod1_method_called = false
-            mod1 = Module.new do
-              extend Spec::MetaClass
-              class_methods = Module.new do
-                define_method :mod1_method do
-                  mod1_method_called = true
-                end
-              end
-
-              metaclass.class_eval do
-                define_method(:included) do |receiver|
-                  receiver.extend class_methods
-                end
-              end
-            end
-
-            mod2_method_called = false
-            mod2 = Module.new do
-              extend Spec::MetaClass
-              class_methods = Module.new do
-                define_method :mod2_method do
-                  mod2_method_called = true
-                end
-              end
-
-              metaclass.class_eval do
-                define_method(:included) do |receiver|
-                  receiver.extend class_methods
-                end
-              end
-            end
-
-            @example_group.include mod1, mod2
-
-            @example_group.mod1_method
-            @example_group.mod2_method
-            mod1_method_called.should be_true
-            mod2_method_called.should be_true
-          end
-        end
-
-        describe "#number_of_examples" do
-          it "should count number of specs" do
-            proc do
-              @example_group.it("one") {}
-              @example_group.it("two") {}
-              @example_group.it("three") {}
-              @example_group.it("four") {}
-            end.should change {@example_group.number_of_examples}.by(4)
-          end
-        end
-
-        describe "#class_eval" do
-          it "should allow constants to be defined" do
-            example_group = Class.new(ExampleGroup) do
-              describe('example')
-              FOO = 1
-              it "should reference FOO" do
-                FOO.should == 1
-              end
-            end
-            example_group.run
-            Object.const_defined?(:FOO).should == false
-          end
-        end
-
-        describe '#register' do
-          it "should add ExampleGroup to set of ExampleGroups to be run" do
-            options.example_groups.delete(example_group)
-            options.example_groups.should_not include(example_group)
-          
-            example_group.register {}
-            options.example_groups.should include(example_group)
-          end
-        end
-
-        describe '#unregister' do
-          before do
-            options.example_groups.should include(example_group)
-          end
-
-          it "should remove ExampleGroup from set of ExampleGroups to be run" do
-            example_group.unregister
-            options.example_groups.should_not include(example_group)
-          end
-        end
-
-        describe "#registration_backtrace" do
-          it "returns the backtrace of where the ExampleGroup was registered" do
-            example_group = Class.new(ExampleGroup)
-            example_group.registration_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
-          end
-        end
-      
-        describe "#run" do
-          it "should add_example_group if there are any examples to run" do
-            example_group = Class.new(ExampleGroup) do
-              it "should do something" do end
-            end
-            reporter.should_receive(:add_example_group)
-            example_group.run
-          end
-
-          it "should NOT add_example_group if there are no examples to run" do
-            example_group = Class.new(ExampleGroup) do end
-            reporter.should_not_receive(:add_example_group)
-            example_group.run
-          end
-        end
-
-        describe "#matcher_class=" do 
-          it "should call new and matches? on the class used for matching examples" do 
-            example_group = Class.new(ExampleGroup) do
-              it "should do something" do end
-              class << self
-                def specified_examples
-                  ["something"]
-                end
-                def to_s
-                  "TestMatcher"
-                end
-              end
-            end
-
-            matcher = mock("matcher")
-            matcher.should_receive(:matches?).with(["something"]).any_number_of_times
-          
-            matcher_class = Class.new
-            matcher_class.should_receive(:new).with("TestMatcher", "should do something").twice.and_return(matcher)
-
-            begin 
-              ExampleGroupMethods.matcher_class = matcher_class
-
-              example_group.run
-            ensure 
-              ExampleGroupMethods.matcher_class = ExampleMatcher
-            end
-          end
-        end
-
-        describe "#options" do
-          it "should expose the options hash" do
-            group = describe("group", :this => 'hash') {}
-            group.options[:this].should == 'hash'
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_spec.rb
deleted file mode 100644
index e8b7800..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_group_spec.rb
+++ /dev/null
@@ -1,683 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Example
-    class ExampleModuleScopingSpec < ExampleGroup
-      describe ExampleGroup, "via a class definition"
-
-      module Foo
-        module Bar
-          def self.loaded?
-            true
-          end
-        end
-      end
-      include Foo
-
-      it "should understand module scoping" do
-        Bar.should be_loaded
-      end
-
-      @@foo = 1
-
-      it "should allow class variables to be defined" do
-        @@foo.should == 1
-      end
-    end
-
-    class ExampleClassVariablePollutionSpec < ExampleGroup
-      describe ExampleGroup, "via a class definition without a class variable"
-
-      it "should not retain class variables from other Example classes" do
-        proc do
-          @@foo
-        end.should raise_error
-      end
-    end
-
-    describe ExampleGroup, "#pending" do
-      it "should raise a Pending error when its block fails" do
-        block_ran = false
-        lambda {
-          pending("something") do
-            block_ran = true
-            raise "something wrong with my example"
-          end
-        }.should raise_error(Spec::Example::ExamplePendingError, "something")
-        block_ran.should == true
-      end
-
-      it "should raise Spec::Example::PendingExampleFixedError when its block does not fail" do
-        block_ran = false
-        lambda {
-          pending("something") do
-            block_ran = true
-          end
-        }.should raise_error(Spec::Example::PendingExampleFixedError, "Expected pending 'something' to fail. No Error was raised.")
-        block_ran.should == true
-      end
-    end
-
-    describe ExampleGroup, "#run with failure in example", :shared => true do
-      it "should add an example failure to the TestResult" do
-        example_group.run.should be_false
-      end
-    end
-
-    describe ExampleGroup, "#run" do
-      with_sandboxed_options do
-        attr_reader :example_group, :formatter, :reporter
-        before :each do
-          method_with_three_args = lambda { |arg1, arg2, arg3| }
-          @formatter = mock("formatter", :null_object => true, :example_pending => method_with_three_args)
-          options.formatters << formatter
-          options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
-          @reporter = FakeReporter.new(options)
-          options.reporter = reporter
-          @example_group = Class.new(ExampleGroup) do
-            describe("example")
-            it "does nothing" do
-            end
-          end
-          class << example_group
-            public :include
-          end
-        end
-
-        after :each do
-          ExampleGroup.reset
-        end
-
-        it "should not run when there are no examples" do
-          example_group = Class.new(ExampleGroup) do
-            describe("Foobar")
-          end
-          example_group.examples.should be_empty
-
-          reporter = mock("Reporter")
-          reporter.should_not_receive(:add_example_group)
-          example_group.run
-        end
-      
-        describe "when before_each fails" do
-          before(:each) do
-            $example_ran = $after_each_ran = false
-            @example_group = describe("Foobar") do
-              before(:each) {raise}
-              it "should not be run" do
-                $example_ran = true
-              end
-              after(:each) do
-                $after_each_ran = true
-              end
-            end
-          end
-
-          it "should not run example block" do
-            example_group.run
-            $example_ran.should be_false
-          end
-        
-          it "should run after_each" do
-            example_group.run
-            $after_each_ran.should be_true
-          end
-
-          it "should report failure location when in before_each" do
-            reporter.should_receive(:example_finished) do |example_group, error|
-              error.message.should eql("in before_each")
-            end
-            example_group.run
-          end
-        end
-
-        describe ExampleGroup, "#run on dry run" do
-          before do
-            @options.dry_run = true
-          end
-
-          it "should not run before(:all) or after(:all)" do
-            before_all_ran = false
-            after_all_ran = false
-            ExampleGroup.before(:all) { before_all_ran = true }
-            ExampleGroup.after(:all) { after_all_ran = true }
-            example_group.it("should") {}
-            example_group.run
-            before_all_ran.should be_false
-            after_all_ran.should be_false
-          end
-
-          it "should not run example" do
-            example_ran = false
-            example_group.it("should") {example_ran = true}
-            example_group.run
-            example_ran.should be_false
-          end
-        end
-
-        describe ExampleGroup, "#run with specified examples" do
-          attr_reader :examples_that_were_run
-          before do
-            @examples_that_were_run = []
-          end
-
-          describe "when specified_examples matches entire ExampleGroup" do
-            before do
-              examples_that_were_run = @examples_that_were_run
-              @example_group = Class.new(ExampleGroup) do
-                describe("the ExampleGroup")
-                it("should be run") do
-                  examples_that_were_run << 'should be run'
-                end
-
-                it("should also be run") do
-                  examples_that_were_run << 'should also be run'
-                end
-              end
-              options.examples = ["the ExampleGroup"]
-            end
-
-            it "should not run the Examples in the ExampleGroup" do
-              example_group.run
-              examples_that_were_run.should == ['should be run', 'should also be run']
-            end
-          end
-
-          describe ExampleGroup, "#run when specified_examples matches only Example description" do
-            before do
-              examples_that_were_run = @examples_that_were_run
-              @example_group = Class.new(ExampleGroup) do
-                describe("example")
-                it("should be run") do
-                  examples_that_were_run << 'should be run'
-                end
-              end
-              options.examples = ["should be run"]
-            end
-
-            it "should not run the example" do
-              example_group.run
-              examples_that_were_run.should == ['should be run']
-            end
-          end
-
-          describe ExampleGroup, "#run when specified_examples does not match an Example description" do
-            before do
-              examples_that_were_run = @examples_that_were_run
-              @example_group = Class.new(ExampleGroup) do
-                describe("example")
-                it("should be something else") do
-                  examples_that_were_run << 'should be something else'
-                end
-              end
-              options.examples = ["does not match anything"]
-            end
-
-            it "should not run the example" do
-              example_group.run
-              examples_that_were_run.should == []
-            end
-          end
-
-          describe ExampleGroup, "#run when specified_examples matches an Example description" do
-            before do
-              examples_that_were_run = @examples_that_were_run
-              @example_group = Class.new(ExampleGroup) do
-                describe("example")
-                it("should be run") do
-                  examples_that_were_run << 'should be run'
-                end
-                it("should not be run") do
-                  examples_that_were_run << 'should not be run'
-                end
-              end
-              options.examples = ["should be run"]
-            end
-
-            it "should run only the example, when there is only one" do
-              example_group.run
-              examples_that_were_run.should == ["should be run"]
-            end
-
-            it "should run only the one example" do
-              example_group.run
-              examples_that_were_run.should == ["should be run"]          end
-          end
-        end
-
-        describe ExampleGroup, "#run with success" do
-          before do
-            @special_example_group = Class.new(ExampleGroup)
-            ExampleGroupFactory.register(:special, @special_example_group)
-            @not_special_example_group = Class.new(ExampleGroup)
-            ExampleGroupFactory.register(:not_special, @not_special_example_group)
-          end
-
-          after do
-            ExampleGroupFactory.reset
-          end
-
-          it "should send reporter add_example_group" do
-            example_group.run
-            reporter.example_groups.should == [example_group]
-          end
-
-          it "should run example on run" do
-            example_ran = false
-            example_group.it("should") {example_ran = true}
-            example_group.run
-            example_ran.should be_true
-          end
-
-          it "should run before(:all) block only once" do
-            before_all_run_count_run_count = 0
-            example_group.before(:all) {before_all_run_count_run_count += 1}
-            example_group.it("test") {true}
-            example_group.it("test2") {true}
-            example_group.run
-            before_all_run_count_run_count.should == 1
-          end
-
-          it "should run after(:all) block only once" do
-            after_all_run_count = 0
-            example_group.after(:all) {after_all_run_count += 1}
-            example_group.it("test") {true}
-            example_group.it("test2") {true}
-            example_group.run
-            after_all_run_count.should == 1
-            @reporter.rspec_verify
-          end
-
-          it "after(:all) should have access to all instance variables defined in before(:all)" do
-            context_instance_value_in = "Hello there"
-            context_instance_value_out = ""
-            example_group.before(:all) { @instance_var = context_instance_value_in }
-            example_group.after(:all) { context_instance_value_out = @instance_var }
-            example_group.it("test") {true}
-            example_group.run
-            context_instance_value_in.should == context_instance_value_out
-          end
-
-          it "should copy instance variables from before(:all)'s execution context into spec's execution context" do
-            context_instance_value_in = "Hello there"
-            context_instance_value_out = ""
-            example_group.before(:all) { @instance_var = context_instance_value_in }
-            example_group.it("test") {context_instance_value_out = @instance_var}
-            example_group.run
-            context_instance_value_in.should == context_instance_value_out
-          end
-
-          it "should not add global before callbacks for untargetted example_group" do
-            fiddle = []
-
-            ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
-            ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
-            @special_example_group.before(:each) { fiddle << "Example.before(:each, :type => :special)" }
-            @special_example_group.prepend_before(:each) { fiddle << "Example.prepend_before(:each, :type => :special)" }
-            @special_example_group.before(:all) { fiddle << "Example.before(:all, :type => :special)" }
-            @special_example_group.prepend_before(:all) { fiddle << "Example.prepend_before(:all, :type => :special)" }
-
-            example_group = Class.new(ExampleGroup) do
-              describe("I'm not special", :type => :not_special)
-              it "does nothing"
-            end
-            example_group.run
-            fiddle.should == [
-              'Example.prepend_before(:all)',
-              'Example.before(:all)',
-            ]
-          end
-
-          it "should add global before callbacks for targetted example_groups" do
-            fiddle = []
-
-            ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
-            ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
-            @special_example_group.before(:each) { fiddle << "special.before(:each, :type => :special)" }
-            @special_example_group.prepend_before(:each) { fiddle << "special.prepend_before(:each, :type => :special)" }
-            @special_example_group.before(:all) { fiddle << "special.before(:all, :type => :special)" }
-            @special_example_group.prepend_before(:all) { fiddle << "special.prepend_before(:all, :type => :special)" }
-            @special_example_group.append_before(:each) { fiddle << "special.append_before(:each, :type => :special)" }
-
-            example_group = Class.new(@special_example_group).describe("I'm a special example_group") {}
-            example_group.it("test") {true}
-            example_group.run
-            fiddle.should == [
-              'Example.prepend_before(:all)',
-              'Example.before(:all)',
-              'special.prepend_before(:all, :type => :special)',
-              'special.before(:all, :type => :special)',
-              'special.prepend_before(:each, :type => :special)',
-              'special.before(:each, :type => :special)',
-              'special.append_before(:each, :type => :special)',
-            ]
-          end
-
-          it "should order before callbacks from global to local" do
-            fiddle = []
-            ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
-            ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
-            example_group.prepend_before(:all) { fiddle << "prepend_before(:all)" }
-            example_group.before(:all) { fiddle << "before(:all)" }
-            example_group.prepend_before(:each) { fiddle << "prepend_before(:each)" }
-            example_group.before(:each) { fiddle << "before(:each)" }
-            example_group.run
-            fiddle.should == [
-              'Example.prepend_before(:all)',
-              'Example.before(:all)',
-              'prepend_before(:all)',
-              'before(:all)',
-              'prepend_before(:each)',
-              'before(:each)'
-            ]
-          end
-
-          it "should order after callbacks from local to global" do
-            fiddle = []
-            example_group.after(:each) { fiddle << "after(:each)" }
-            example_group.append_after(:each) { fiddle << "append_after(:each)" }
-            example_group.after(:all) { fiddle << "after(:all)" }
-            example_group.append_after(:all) { fiddle << "append_after(:all)" }
-            ExampleGroup.after(:all) { fiddle << "Example.after(:all)" }
-            ExampleGroup.append_after(:all) { fiddle << "Example.append_after(:all)" }
-            example_group.run
-            fiddle.should == [
-              'after(:each)',
-              'append_after(:each)',
-              'after(:all)',
-              'append_after(:all)',
-              'Example.after(:all)',
-              'Example.append_after(:all)'
-            ]
-          end
-
-          it "should have accessible instance methods from included module" do
-            mod1_method_called = false
-            mod1 = Module.new do
-              define_method :mod1_method do
-                mod1_method_called = true
-              end
-            end
-
-            mod2_method_called = false
-            mod2 = Module.new do
-              define_method :mod2_method do
-                mod2_method_called = true
-              end
-            end
-
-            example_group.include mod1, mod2
-
-            example_group.it("test") do
-              mod1_method
-              mod2_method
-            end
-            example_group.run
-            mod1_method_called.should be_true
-            mod2_method_called.should be_true
-          end
-
-          it "should include targetted modules included using configuration" do
-            mod1 = Module.new
-            mod2 = Module.new
-            mod3 = Module.new
-            Spec::Runner.configuration.include(mod1, mod2)
-            Spec::Runner.configuration.include(mod3, :type => :not_special)
-
-            example_group = Class.new(@special_example_group).describe("I'm special", :type => :special) do
-              it "does nothing"
-            end
-            example_group.run
-
-            example_group.included_modules.should include(mod1)
-            example_group.included_modules.should include(mod2)
-            example_group.included_modules.should_not include(mod3)
-          end
-
-          it "should include any predicate_matchers included using configuration" do
-            $included_predicate_matcher_found = false
-            Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something?
-            example_group = Class.new(ExampleGroup) do
-              describe('example')
-              it "should respond to do_something" do
-                $included_predicate_matcher_found = respond_to?(:do_something)
-              end
-            end
-            example_group.run
-            $included_predicate_matcher_found.should be(true)
-          end
-
-          it "should use a mock framework set up in config" do
-            mod = Module.new do
-              class << self
-                def included(mod)
-                  $included_module = mod
-                end
-              end
-
-              def teardown_mocks_for_rspec
-                $torn_down = true
-              end
-            end
-
-            begin
-              $included_module = nil
-              $torn_down = true
-              Spec::Runner.configuration.mock_with mod
-
-              example_group = Class.new(ExampleGroup) do
-                describe('example')
-                it "does nothing"
-              end
-              example_group.run
-
-              $included_module.should_not be_nil
-              $torn_down.should == true
-            ensure
-              Spec::Runner.configuration.mock_with :rspec
-            end
-          end
-        end
-
-        describe ExampleGroup, "#run with pending example that has a failing assertion" do
-          before do
-            example_group.it("should be pending") do
-              pending("Example fails") {false.should be_true}
-            end
-          end
-
-          it "should send example_pending to formatter" do
-            @formatter.should_receive(:example_pending).with("example", "should be pending", "Example fails")
-            example_group.run
-          end
-        end
-
-        describe ExampleGroup, "#run with pending example that does not have a failing assertion" do
-          it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
-
-          before do
-            example_group.it("should be pending") do
-              pending("Example passes") {true.should be_true}
-            end
-          end
-
-          it "should send example_pending to formatter" do
-            @formatter.should_receive(:example_pending).with("example", "should be pending", "Example passes")
-            example_group.run
-          end
-        end
-
-        describe ExampleGroup, "#run when before(:all) fails" do
-          it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
-
-          before do
-            ExampleGroup.before(:all) { raise NonStandardError, "before(:all) failure" }
-          end
-
-          it "should not run any example" do
-            spec_ran = false
-            example_group.it("test") {spec_ran = true}
-            example_group.run
-            spec_ran.should be_false
-          end
-
-          it "should run ExampleGroup after(:all)" do
-            after_all_ran = false
-            ExampleGroup.after(:all) { after_all_ran = true }
-            example_group.run
-            after_all_ran.should be_true
-          end
-
-          it "should run example_group after(:all)" do
-            after_all_ran = false
-            example_group.after(:all) { after_all_ran = true }
-            example_group.run
-            after_all_ran.should be_true
-          end
-
-          it "should supply before(:all) as description" do
-            @reporter.should_receive(:failure) do |example, error|
-              example.description.should eql("before(:all)")
-              error.message.should eql("before(:all) failure")
-            end
-
-            example_group.it("test") {true}
-            example_group.run
-          end
-        end
-
-        describe ExampleGroup, "#run when before(:each) fails" do
-          it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
-
-          before do
-            ExampleGroup.before(:each) { raise NonStandardError }
-          end
-
-          it "should run after(:all)" do
-            after_all_ran = false
-            ExampleGroup.after(:all) { after_all_ran = true }
-            example_group.run
-            after_all_ran.should be_true
-          end
-        end
-
-        describe ExampleGroup, "#run when any example fails" do
-          it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
-
-          before do
-            example_group.it("should") { raise NonStandardError }
-          end
-
-          it "should run after(:all)" do
-            after_all_ran = false
-            ExampleGroup.after(:all) { after_all_ran = true }
-            example_group.run
-            after_all_ran.should be_true
-          end
-        end
-
-        describe ExampleGroup, "#run when first after(:each) block fails" do
-          it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
-
-          before do
-            class << example_group
-              attr_accessor :first_after_ran, :second_after_ran
-            end
-            example_group.first_after_ran = false
-            example_group.second_after_ran = false
-
-            example_group.after(:each) do
-              self.class.second_after_ran = true
-            end
-            example_group.after(:each) do
-              self.class.first_after_ran = true
-              raise "first"
-            end
-          end
-
-          it "should run second after(:each) block" do
-            reporter.should_receive(:example_finished) do |example, error|
-              example.should equal(example)
-              error.message.should eql("first")
-            end
-            example_group.run
-            example_group.first_after_ran.should be_true
-            example_group.second_after_ran.should be_true
-          end
-        end
-
-        describe ExampleGroup, "#run when first before(:each) block fails" do
-          it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
-
-          before do
-            class << example_group
-              attr_accessor :first_before_ran, :second_before_ran
-            end
-            example_group.first_before_ran = false
-            example_group.second_before_ran = false
-
-            example_group.before(:each) do
-              self.class.first_before_ran = true
-              raise "first"
-            end
-            example_group.before(:each) do
-              self.class.second_before_ran = true
-            end
-          end
-
-          it "should not run second before(:each)" do
-            reporter.should_receive(:example_finished) do |name, error|
-              error.message.should eql("first")
-            end
-            example_group.run
-            example_group.first_before_ran.should be_true
-            example_group.second_before_ran.should be_false
-          end
-        end
-
-        describe ExampleGroup, "#run when failure in after(:all)" do
-          it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
-
-          before do
-            ExampleGroup.after(:all) { raise NonStandardError, "in after(:all)" }
-          end
-
-          it "should return false" do
-            example_group.run.should be_false
-          end
-        end
-      end
-    end
-
-    class ExampleSubclass < ExampleGroup
-    end
-
-    describe ExampleGroup, "subclasses" do
-      after do
-        ExampleGroupFactory.reset
-      end
-
-      it "should have access to the described_type" do
-        example_group = Class.new(ExampleSubclass) do
-          describe(Array)
-        end
-        example_group.send(:described_type).should == Array
-      end
-
-      it "should concat descriptions when nested" do
-        example_group = Class.new(ExampleSubclass) do
-          describe(Array)
-          $nested_group = describe("when empty") do
-          end
-        end
-        $nested_group.description.to_s.should == "Array when empty"
-      end
-    end
-
-    describe String do
-      it "should not be included in examples because it is not a module" do
-        lambda{self.map}.should raise_error(NoMethodError, /undefined method `map' for/)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_matcher_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_matcher_spec.rb
deleted file mode 100644
index ea0dfe0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_matcher_spec.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Example
-    module ExampleMatcherSpecHelper
-      class MatchDescription
-        def initialize(description)
-          @description = description
-        end
-        
-        def matches?(matcher)
-          matcher.matches?(@description)
-        end
-        
-        def failure_message
-          "expected matcher.matches?(#{@description.inspect}) to return true, got false"
-        end
-        
-        def negative_failure_message
-          "expected matcher.matches?(#{@description.inspect}) to return false, got true"
-        end
-      end
-      def match_description(description)
-        MatchDescription.new(description)
-      end
-    end
-
-    describe ExampleMatcher, "#matches?" do
-      include ExampleMatcherSpecHelper
-      
-      it "should match correct example_group and example" do
-        matcher = ExampleMatcher.new("example_group", "example")
-        matcher.should match_description("example_group example")
-      end
-      
-      it "should not match wrong example" do
-        matcher = ExampleMatcher.new("example_group", "other example")
-        matcher.should_not match_description("example_group example")
-      end
-      
-      it "should not match wrong example_group" do
-        matcher = ExampleMatcher.new("other example_group", "example")
-        matcher.should_not match_description("example_group example")
-      end
-      
-      it "should match example only" do
-        matcher = ExampleMatcher.new("example_group", "example")
-        matcher.should match_description("example")
-      end
-
-      it "should match example_group only" do
-        matcher = ExampleMatcher.new("example_group", "example")
-        matcher.should match_description("example_group")
-      end
-
-      it "should match example_group ending with before(:all)" do
-        matcher = ExampleMatcher.new("example_group", "example")
-        matcher.should match_description("example_group before(:all)")
-      end
-      
-      it "should escape regexp chars" do
-        matcher = ExampleMatcher.new("(con|text)", "[example]")
-        matcher.should_not match_description("con p")
-      end
-      
-      it "should match when example_group is modularized" do
-        matcher = ExampleMatcher.new("MyModule::MyClass", "example")
-        matcher.should match_description("MyClass example")
-      end      
-    end
-
-    describe ExampleMatcher, "#matches? normal case" do
-      it "matches when passed in example matches" do
-        matcher = ExampleMatcher.new("Foo", "bar")
-        matcher.matches?(["no match", "Foo bar"]).should == true
-      end
-
-      it "does not match when no passed in examples match" do
-        matcher = ExampleMatcher.new("Foo", "bar")
-        matcher.matches?(["no match1", "no match2"]).should == false
-      end
-    end
-
-    describe ExampleMatcher, "#matches? where description has '::' in it" do
-      it "matches when passed in example matches" do
-        matcher = ExampleMatcher.new("Foo::Bar", "baz")
-        matcher.matches?(["no match", "Foo::Bar baz"]).should == true
-      end
-
-      it "does not match when no passed in examples match" do
-        matcher = ExampleMatcher.new("Foo::Bar", "baz")
-        matcher.matches?(["no match1", "no match2"]).should == false
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_methods_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_methods_spec.rb
deleted file mode 100644
index a63afc7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_methods_spec.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Example
-    module ModuleThatIsReopened
-    end
-
-    module ExampleMethods
-      include ModuleThatIsReopened
-    end
-
-    module ModuleThatIsReopened
-      def module_that_is_reopened_method
-      end
-    end
-
-    describe ExampleMethods do
-      describe "with an included module that is reopened" do
-        it "should have repoened methods" do
-          method(:module_that_is_reopened_method).should_not be_nil
-        end
-      end
-
-      describe "lifecycle" do
-        with_sandboxed_options do
-          before do
-            @options.formatters << mock("formatter", :null_object => true)
-            @options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
-            @reporter = FakeReporter.new(@options)
-            @options.reporter = @reporter
-            
-            ExampleGroup.before_all_parts.should == []
-            ExampleGroup.before_each_parts.should == []
-            ExampleGroup.after_each_parts.should == []
-            ExampleGroup.after_all_parts.should == []
-            def ExampleGroup.count
-              @count ||= 0
-              @count = @count + 1
-              @count
-            end
-          end
-
-          after do
-            ExampleGroup.instance_variable_set("@before_all_parts", [])
-            ExampleGroup.instance_variable_set("@before_each_parts", [])
-            ExampleGroup.instance_variable_set("@after_each_parts", [])
-            ExampleGroup.instance_variable_set("@after_all_parts", [])
-          end
-
-          it "should pass before and after callbacks to all ExampleGroup subclasses" do
-            ExampleGroup.before(:suite) do
-              ExampleGroup.count.should == 1
-            end
-
-            ExampleGroup.before(:all) do
-              ExampleGroup.count.should == 2
-            end
-
-            ExampleGroup.before(:each) do
-              ExampleGroup.count.should == 3
-            end
-
-            ExampleGroup.after(:each) do
-              ExampleGroup.count.should == 4
-            end
-
-            ExampleGroup.after(:all) do
-              ExampleGroup.count.should == 5
-            end
-
-            ExampleGroup.after(:suite) do
-              ExampleGroup.count.should == 6
-            end
-
-            Class.new(ExampleGroup) do
-              it "should use ExampleMethods callbacks" do end
-            end
-            @options.run_examples
-            ExampleGroup.count.should == 7
-          end
-
-          describe "eval_block" do
-            before(:each) do
-              @example_group = Class.new(ExampleGroup)
-            end
-          
-            describe "with a given description" do
-              it "should provide the given description" do
-                @example = @example_group.it("given description") { 2.should == 2 }
-                @example.eval_block
-                @example.description.should == "given description"
-              end
-            end
-
-            describe "with no given description" do
-              it "should provide the generated description" do
-                @example = @example_group.it { 2.should == 2 }
-                @example.eval_block
-                @example.description.should == "should == 2"
-              end
-            end
-          
-            describe "with no implementation" do
-              it "should raise an NotYetImplementedError" do
-                lambda {
-                  @example = @example_group.it
-                  @example.eval_block
-                }.should raise_error(Spec::Example::NotYetImplementedError, "Not Yet Implemented")
-              end
-            
-              def extract_error(&blk)
-                begin
-                  blk.call
-                rescue Exception => e
-                  return e
-                end
-              
-                nil
-              end
-            
-              it "should use the proper file and line number for the NotYetImplementedError" do
-                file = __FILE__
-                line_number = __LINE__ + 3
-              
-                error = extract_error do
-                  @example = @example_group.it
-                  @example.eval_block
-                end
-              
-                error.pending_caller.should == "#{file}:#{line_number}"
-              end
-            end
-          end
-        end
-      end
-
-      describe "#implementation_backtrace" do
-        it "returns the backtrace of where the implementation was defined" do
-          example_group = Class.new(ExampleGroup) do
-            it "should use ExampleMethods callbacks" do
-            end
-          end
-          example = example_group.examples.first
-          example.implementation_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-4}")
-        end
-      end
-
-      describe "#__full_description" do
-        it "should return the full description of the ExampleGroup and Example" do
-          example_group = Class.new(ExampleGroup).describe("An ExampleGroup") do
-            it "should do something" do
-            end
-          end
-          example = example_group.examples.first
-          example.__full_description.should == "An ExampleGroup should do something"
-        end
-      end
-    end
-
-    describe "#options" do
-      it "should expose the options hash" do
-        example_group = Class.new(ExampleGroup)
-        example = example_group.example "name", :this => 'that' do; end
-        example.options[:this].should == 'that'
-      end
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_runner_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_runner_spec.rb
deleted file mode 100644
index 1b5abdf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/example_runner_spec.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Example
-    # describe "Spec::Example::ExampleRunner", "#run", :shared => true do
-    #   before(:each) do
-    #     @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
-    #     @reporter = ::Spec::Runner::Reporter.new(@options)
-    #     @options.reporter = @reporter
-    #     @example_group_class = Class.new(ExampleGroup) do
-    #       plugin_mock_framework
-    #       describe("Some Examples")
-    #     end
-    #   end
-    # 
-    #   def create_runner(example_definition)
-    #     example = @example_group_class.new(example_definition)
-    #     runner = ExampleGroup.new(@options, example)
-    #     runner.stub!(:verify_mocks)
-    #     runner.stub!(:teardown_mocks)
-    #     runner
-    #   end
-    # end
-    # 
-    # describe ExampleRunner, "#run with blank passing example" do
-    #   it_should_behave_like "Spec::Example::ExampleRunner#run"
-    # 
-    #   before do
-    #     @e = @example_group_class.it("example") {}
-    #     @runner = create_runner(@e)
-    #   end
-    #   
-    #   it "should send reporter example_started" do
-    #     @reporter.should_receive(:example_started).with(equal(@e))
-    #     @runner.run
-    #   end
-    # 
-    #   it "should report its name for dry run" do
-    #     @options.dry_run = true
-    #     @reporter.should_receive(:example_finished).with(equal(@e), nil)
-    #     @runner.run
-    #   end
-    # 
-    #   it "should report success" do
-    #     @reporter.should_receive(:example_finished).with(equal(@e), nil)
-    #     @runner.run
-    #   end
-    # end
-    # 
-    # describe ExampleRunner, "#run with a failing example" do
-    #   predicate_matchers[:is_a] = [:is_a?]
-    #   it_should_behave_like "Spec::Example::ExampleRunner#run"
-    # 
-    #   before do
-    #     @e = @example_group_class.it("example") do
-    #       (2+2).should == 5
-    #     end
-    #     @runner = create_runner(@e)
-    #   end
-    # 
-    #   it "should report failure due to failure" do
-    #     @reporter.should_receive(:example_finished).with(
-    #       equal(@e),
-    #       is_a(Spec::Expectations::ExpectationNotMetError)
-    #     )
-    #     @runner.run
-    #   end
-    # end
-    # 
-    # describe ExampleRunner, "#run with a erroring example" do
-    #   it_should_behave_like "Spec::Example::ExampleRunner#run"
-    # 
-    #   before do
-    #     @error = error = NonStandardError.new("in body")
-    #     @example_definition = @example_group_class.it("example") do
-    #       raise(error)
-    #     end
-    #     @runner = create_runner(@example_definition)
-    #   end
-    # 
-    #   it "should report failure due to error" do
-    #     @reporter.should_receive(:example_finished).with(
-    #       equal(@example_definition),
-    #       @error
-    #     )
-    #     @runner.run
-    #   end
-    # 
-    #   it "should run after_each block" do
-    #     @example_group_class.after(:each) do
-    #       raise("in after_each")
-    #     end
-    #     @reporter.should_receive(:example_finished) do |example_definition, error|
-    #       example_definition.should equal(@example_definition)
-    #       error.message.should eql("in body")
-    #     end
-    #     @runner.run
-    #   end      
-    # end
-    # 
-    # describe ExampleRunner, "#run where after_each fails" do
-    #   it_should_behave_like "Spec::Example::ExampleRunner#run"
-    # 
-    #   before do
-    #     @example_ran = example_ran = false
-    #     @example_definition = @example_group_class.it("should not run") do
-    #       example_ran = true
-    #     end
-    #     @runner = create_runner(@example_definition)
-    #     @example_group_class.after(:each) { raise(NonStandardError.new("in after_each")) }
-    #   end
-    # 
-    #   it "should report failure location when in after_each" do
-    #     @reporter.should_receive(:example_finished) do |example_definition, error|
-    #       example_definition.should equal(@example_definition)
-    #       error.message.should eql("in after_each")
-    #     end
-    #     @runner.run
-    #   end
-    # end
-    # 
-    # describe ExampleRunner, "#run with use cases" do
-    #   predicate_matchers[:is_a] = [:is_a?]
-    #   it_should_behave_like "Spec::Example::ExampleRunner#run"
-    # 
-    #   it "should report NO NAME when told to use generated description with --dry-run" do
-    #     @options.dry_run = true
-    #     example_definition = @example_group_class.it() do
-    #       5.should == 5
-    #     end
-    #     runner = create_runner(example_definition)
-    # 
-    #     @reporter.should_receive(:example_finished) do |example_definition, error|
-    #       example_definition.description.should == "NO NAME (Because of --dry-run)"
-    #      end
-    #     runner.run
-    #   end
-    # 
-    #   it "should report given name if present with --dry-run" do
-    #     @options.dry_run = true
-    #     example_definition = @example_group_class.it("example name") do
-    #       5.should == 5
-    #     end
-    #     runner = create_runner(example_definition)
-    # 
-    #     @reporter.should_receive(:example_finished) do |example_definition, error|
-    #       example_definition.description.should == "example name"
-    #      end
-    #     runner.run
-    #   end
-    # 
-    #   it "should report NO NAME when told to use generated description with no expectations" do
-    #     example_definition = @example_group_class.it() {}
-    #     runner = create_runner(example_definition)
-    #     @reporter.should_receive(:example_finished) do |example, error|
-    #       example.description.should == "NO NAME (Because there were no expectations)"
-    #     end
-    #     runner.run
-    #   end
-    # 
-    #   it "should report NO NAME when told to use generated description and matcher fails" do
-    #     example_definition = @example_group_class.it() do
-    #       5.should "" # Has no matches? method..
-    #     end
-    #     runner = create_runner(example_definition)
-    # 
-    #     @reporter.should_receive(:example_finished) do |example, error|
-    #       example_definition.description.should == "NO NAME (Because of Error raised in matcher)"
-    #     end
-    #     runner.run
-    #   end
-    # 
-    #   it "should report generated description when told to and it is available" do
-    #     example_definition = @example_group_class.it() {
-    #       5.should == 5
-    #     }
-    #     runner = create_runner(example_definition)
-    #     
-    #     @reporter.should_receive(:example_finished) do |example_definition, error|
-    #       example_definition.description.should == "should == 5"
-    #     end
-    #     runner.run
-    #   end
-    # 
-    #   it "should unregister description_generated callback (lest a memory leak should build up)" do
-    #     example_definition = @example_group_class.it("something")
-    #     runner = create_runner(example_definition)
-    # 
-    #     Spec::Matchers.should_receive(:example_finished)
-    #     runner.run
-    #   end
-    # end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/nested_example_group_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/nested_example_group_spec.rb
deleted file mode 100644
index 559467d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/nested_example_group_spec.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Example
-    describe 'Nested Example Groups' do
-      parent = self
-      
-      def count
-        @count ||= 0
-        @count = @count + 1
-        @count
-      end
-
-      before(:all) do
-        count.should == 1
-      end
-
-      before(:all) do
-        count.should == 2
-      end
-
-      before(:each) do
-        count.should == 3
-      end
-
-      before(:each) do
-        count.should == 4
-      end
-
-      it "should run before(:all), before(:each), example, after(:each), after(:all) in order" do
-        count.should == 5
-      end
-
-      after(:each) do
-        count.should == 7
-      end
-
-      after(:each) do
-        count.should == 6
-      end
-
-      after(:all) do
-        count.should == 9
-      end
-
-      after(:all) do
-        count.should == 8
-      end
-
-      describe 'nested example group' do
-        self.superclass.should == parent
-        
-        it "should run all before and after callbacks" do
-          count.should == 5
-        end
-      end
-    end
-
-    describe "Nested Example Groups" do
-      describe "description options", :other_options => "other options" do
-        it "should have a spec_path" do
-          self.class.description_options[:spec_path].should match(/#{__FILE__}/)
-        end
-
-        it "should pass other options" do
-          self.class.description_options[:other_options].should == "other options"
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/pending_module_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/pending_module_spec.rb
deleted file mode 100644
index 3d5fac0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/pending_module_spec.rb
+++ /dev/null
@@ -1,145 +0,0 @@
-module Spec
-  module Example
-    describe Pending do
-      
-      it 'should raise an ExamplePendingError if no block is supplied' do
-        lambda {
-          include Pending
-          pending "TODO"
-        }.should raise_error(ExamplePendingError, /TODO/)
-      end
-      
-      it 'should raise an ExamplePendingError if a supplied block fails as expected' do
-        lambda {
-          include Pending
-          pending "TODO" do
-            raise "oops"
-          end
-        }.should raise_error(ExamplePendingError, /TODO/)
-      end
-      
-      it 'should raise an ExamplePendingError if a supplied block fails as expected with a mock' do
-        lambda {
-          include Pending
-          pending "TODO" do
-            m = mock('thing')
-            m.should_receive(:foo)
-            m.rspec_verify
-          end
-        }.should raise_error(ExamplePendingError, /TODO/)
-      end
-      
-      it 'should raise a PendingExampleFixedError if a supplied block starts working' do
-        lambda {
-          include Pending
-          pending "TODO" do
-            # success!
-          end
-        }.should raise_error(PendingExampleFixedError, /TODO/)
-      end
-      
-      it "should have the correct file and line number for pending given with a block which fails" do
-        file = __FILE__
-        line_number = __LINE__ + 3
-        begin
-          include Pending
-          pending do
-            raise
-          end
-        rescue => error
-          error.pending_caller.should == "#{file}:#{line_number}"
-        end
-      end
-      
-      it "should have the correct file and line number for pending given with no block" do
-        file = __FILE__
-        line_number = __LINE__ + 3
-        begin
-          include Pending
-          pending("TODO")
-        rescue => error
-          error.pending_caller.should == "#{file}:#{line_number}"
-        end
-      end
-    end
-    
-    describe ExamplePendingError do
-      it "should have the caller (from two calls from initialization)" do
-        two_calls_ago = caller[0]
-        ExamplePendingError.new("a message").pending_caller.should == two_calls_ago
-      end
-      
-      it "should keep the trace information from initialization" do
-        two_calls_ago = caller[0]
-        obj = ExamplePendingError.new("a message")
-        obj.pending_caller
-        def another_caller(obj)
-          obj.pending_caller
-        end
-        
-        another_caller(obj).should == two_calls_ago
-      end
-      
-      it "should have the message provided" do
-        ExamplePendingError.new("a message").message.should == "a message"
-      end
-
-      it "should use a 'ExamplePendingError' as it's default message" do
-        ExamplePendingError.new.message.should == "Spec::Example::ExamplePendingError"
-      end
-    end
-    
-    describe NotYetImplementedError do
-      def rspec_root
-        File.expand_path(__FILE__.gsub("/spec/spec/example/pending_module_spec.rb", "/lib"))
-      end
-      
-      it "should have the root rspec path" do
-        NotYetImplementedError::RSPEC_ROOT_LIB.should == rspec_root
-      end
-      
-      it "should always have the error 'Not Yet Implemented'" do
-        NotYetImplementedError.new([]).message.should == "Not Yet Implemented"
-      end
-      
-      describe "pending_caller" do
-        it "should select an element out of the backtrace" do
-          error = NotYetImplementedError.new(["foo/bar.rb:18"])
-          
-          error.pending_caller.should == "foo/bar.rb:18"
-        end
-        
-        it "should actually report the element from the backtrace" do
-          error = NotYetImplementedError.new(["bar.rb:18"])
-          
-          error.pending_caller.should == "bar.rb:18"
-        end
-        
-        it "should not use an element with the rspec root path" do
-          error = NotYetImplementedError.new(["#{rspec_root}:8"])
-          
-          error.pending_caller.should be_nil
-        end
-        
-        it "should select the first line in the backtrace which isn't in the rspec root" do
-          error = NotYetImplementedError.new([
-            "#{rspec_root}/foo.rb:2",
-            "#{rspec_root}/foo/bar.rb:18",
-            "path1.rb:22",
-            "path2.rb:33"
-          ])
-          
-          error.pending_caller.should == "path1.rb:22"
-        end
-        
-        it "should cache the caller" do
-          backtrace = mock('backtrace')
-          backtrace.should_receive(:detect).once
-          
-          error = NotYetImplementedError.new(backtrace)
-          error.pending_caller.should == error.pending_caller
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/predicate_matcher_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/predicate_matcher_spec.rb
deleted file mode 100755
index 7c4638b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/predicate_matcher_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Example
-    class Fish
-      def can_swim?(distance_in_yards)
-        distance_in_yards < 1000
-      end
-    end
-    
-    describe "predicate_matcher[method_on_object] = matcher_method" do
-      predicate_matchers[:swim] = :can_swim?
-      it "should match matcher_method if method_on_object returns true" do
-        swim(100).matches?(Fish.new).should be_true
-      end
-      it "should not match matcher_method if method_on_object returns false" do
-        swim(10000).matches?(Fish.new).should be_false
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/shared_example_group_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/shared_example_group_spec.rb
deleted file mode 100644
index 67af69c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/shared_example_group_spec.rb
+++ /dev/null
@@ -1,281 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Example
-    describe ExampleGroup, "with :shared => true" do
-      with_sandboxed_options do
-        attr_reader :formatter, :example_group
-        before(:each) do
-          @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
-          options.formatters << formatter
-          @example_group = Class.new(ExampleGroup).describe("example_group")
-          class << example_group
-            public :include
-          end
-        end
-
-        after(:each) do
-          @formatter.rspec_verify
-          @example_group = nil
-          Spec::Example::SharedExampleGroup.shared_example_groups.clear
-        end
-
-        def make_shared_example_group(name, opts=nil, &block)
-          example_group = SharedExampleGroup.new(name, :shared => true, &block)
-          SharedExampleGroup.add_shared_example_group(example_group)
-          example_group
-        end
-
-        def non_shared_example_group()
-          @non_shared_example_group ||= Class.new(ExampleGroup).describe("example_group")
-        end
-
-        it "should accept an optional options hash" do
-          lambda { Class.new(ExampleGroup).describe("context") }.should_not raise_error(Exception)
-          lambda { Class.new(ExampleGroup).describe("context", :shared => true) }.should_not raise_error(Exception)
-        end
-
-        it "should return all shared example_groups" do
-          b1 = make_shared_example_group("b1", :shared => true) {}
-          b2 = make_shared_example_group("b2", :shared => true) {}
-
-          b1.should_not be(nil)
-          b2.should_not be(nil)
-
-          SharedExampleGroup.find_shared_example_group("b1").should equal(b1)
-          SharedExampleGroup.find_shared_example_group("b2").should equal(b2)
-        end
-
-        it "should register as shared example_group" do
-          example_group = make_shared_example_group("example_group") {}
-          SharedExampleGroup.shared_example_groups.should include(example_group)
-        end
-
-        it "should not be shared when not configured as shared" do
-          example_group = non_shared_example_group
-          SharedExampleGroup.shared_example_groups.should_not include(example_group)
-        end
-
-        it "should complain when adding a second shared example_group with the same description" do
-          describe "shared example_group", :shared => true do
-          end
-          lambda do
-            describe "shared example_group", :shared => true do
-            end
-          end.should raise_error(ArgumentError)
-        end
-
-        it "should NOT complain when adding the same shared example_group instance again" do
-          shared_example_group = Class.new(ExampleGroup).describe("shared example_group", :shared => true)
-          SharedExampleGroup.add_shared_example_group(shared_example_group)
-          SharedExampleGroup.add_shared_example_group(shared_example_group)
-        end
-
-        it "should NOT complain when adding the same shared example_group again (i.e. file gets reloaded)" do
-          lambda do
-            2.times do
-              describe "shared example_group which gets loaded twice", :shared => true do
-              end
-            end
-          end.should_not raise_error(ArgumentError)
-        end
-
-        it "should NOT complain when adding the same shared example_group in same file with different absolute path" do
-          shared_example_group_1 = Class.new(ExampleGroup).describe(
-            "shared example_group",
-            :shared => true,
-            :spec_path => "/my/spec/a/../shared.rb"
-          )
-          shared_example_group_2 = Class.new(ExampleGroup).describe(
-            "shared example_group",
-            :shared => true,
-            :spec_path => "/my/spec/b/../shared.rb"
-          )
-
-          SharedExampleGroup.add_shared_example_group(shared_example_group_1)
-          SharedExampleGroup.add_shared_example_group(shared_example_group_2)
-        end
-
-        it "should complain when adding a different shared example_group with the same name in a different file with the same basename" do
-          shared_example_group_1 = Class.new(ExampleGroup).describe(
-            "shared example_group",
-            :shared => true,
-            :spec_path => "/my/spec/a/shared.rb"
-          )
-          shared_example_group_2 = Class.new(ExampleGroup).describe(
-            "shared example_group",
-            :shared => true,
-            :spec_path => "/my/spec/b/shared.rb"
-          )
-
-          SharedExampleGroup.add_shared_example_group(shared_example_group_1)
-          lambda do
-            SharedExampleGroup.add_shared_example_group(shared_example_group_2)
-          end.should raise_error(ArgumentError, /already exists/)
-        end
-
-        it "should add examples to current example_group using it_should_behave_like" do
-          shared_example_group = make_shared_example_group("shared example_group") do
-            it("shared example") {}
-            it("shared example 2") {}
-          end
-
-          example_group.it("example") {}
-          example_group.number_of_examples.should == 1
-          example_group.it_should_behave_like("shared example_group")
-          example_group.number_of_examples.should == 3
-        end
-
-        it "should add examples to from two shared groups" do
-          shared_example_group_1 = make_shared_example_group("shared example_group 1") do
-            it("shared example 1") {}
-          end
-
-          shared_example_group_1 = make_shared_example_group("shared example_group 2") do
-            it("shared example 2") {}
-          end
-
-          example_group.it("example") {}
-          example_group.number_of_examples.should == 1
-          example_group.it_should_behave_like("shared example_group 1", "shared example_group 2")
-          example_group.number_of_examples.should == 3
-        end
-
-        it "should add examples to current example_group using include" do
-          shared_example_group = describe "all things", :shared => true do
-            it "should do stuff" do end
-          end
-        
-          example_group = describe "one thing" do
-            include shared_example_group
-          end
-        
-          example_group.number_of_examples.should == 1
-        end
-
-        it "should add examples to current example_group using it_should_behave_like with a module" do
-          AllThings = describe "all things", :shared => true do
-            it "should do stuff" do end
-          end
-        
-          example_group = describe "one thing" do
-            it_should_behave_like AllThings
-          end
-        
-          example_group.number_of_examples.should == 1
-        end
-
-        it "should run shared examples" do
-          shared_example_ran = false
-          shared_example_group = make_shared_example_group("shared example_group") do
-            it("shared example") { shared_example_ran = true }
-          end
-
-          example_ran = false
-
-          example_group.it_should_behave_like("shared example_group")
-          example_group.it("example") {example_ran = true}
-          example_group.run
-          example_ran.should be_true
-          shared_example_ran.should be_true
-        end
-
-        it "should run setup and teardown from shared example_group" do
-          shared_setup_ran = false
-          shared_teardown_ran = false
-          shared_example_group = make_shared_example_group("shared example_group") do
-            before { shared_setup_ran = true }
-            after { shared_teardown_ran = true }
-            it("shared example") { shared_example_ran = true }
-          end
-
-          example_ran = false
-
-          example_group.it_should_behave_like("shared example_group")
-          example_group.it("example") {example_ran = true}
-          example_group.run
-          example_ran.should be_true
-          shared_setup_ran.should be_true
-          shared_teardown_ran.should be_true
-        end
-
-        it "should run before(:all) and after(:all) only once from shared example_group" do
-          shared_before_all_run_count = 0
-          shared_after_all_run_count = 0
-          shared_example_group = make_shared_example_group("shared example_group") do
-            before(:all) { shared_before_all_run_count += 1}
-            after(:all) { shared_after_all_run_count += 1}
-            it("shared example") { shared_example_ran = true }
-          end
-
-          example_ran = false
-
-          example_group.it_should_behave_like("shared example_group")
-          example_group.it("example") {example_ran = true}
-          example_group.run
-          example_ran.should be_true
-          shared_before_all_run_count.should == 1
-          shared_after_all_run_count.should == 1
-        end
-
-        it "should include modules, included into shared example_group, into current example_group" do
-          @formatter.should_receive(:add_example_group).with(any_args)
-
-          shared_example_group = make_shared_example_group("shared example_group") do
-            it("shared example") { shared_example_ran = true }
-          end
-
-          mod1_method_called = false
-          mod1 = Module.new do
-            define_method :mod1_method do
-              mod1_method_called = true
-            end
-          end
-
-          mod2_method_called = false
-          mod2 = Module.new do
-            define_method :mod2_method do
-              mod2_method_called = true
-            end
-          end
-
-          shared_example_group.__send__ :include, mod2
-
-          example_group.it_should_behave_like("shared example_group")
-          example_group.include mod1
-
-          example_group.it("test") do
-            mod1_method
-            mod2_method
-          end
-          example_group.run
-          mod1_method_called.should be_true
-          mod2_method_called.should be_true
-        end
-
-        it "should make methods defined in the shared example_group available in consuming example_group" do
-          shared_example_group = make_shared_example_group("shared example_group xyz") do
-            def a_shared_helper_method
-              "this got defined in a shared example_group"
-            end
-          end
-          example_group.it_should_behave_like("shared example_group xyz")
-          success = false
-          example_group.it("should access a_shared_helper_method") do
-            a_shared_helper_method
-            success = true
-          end
-          example_group.run
-          success.should be_true
-        end
-
-        it "should raise when named shared example_group can not be found" do
-          lambda {
-            example_group.it_should_behave_like("non-existent shared example group")
-            violated
-          }.should raise_error("Shared Example Group 'non-existent shared example group' can not be found")
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/subclassing_example_group_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/subclassing_example_group_spec.rb
deleted file mode 100644
index 888f2ce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/example/subclassing_example_group_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Example
-    class GrandParentExampleGroup < Spec::Example::ExampleGroup
-      describe "Grandparent ExampleGroup"
-    end
-
-    class ParentExampleGroup < GrandParentExampleGroup
-      describe "Parent ExampleGroup"
-      it "should bar" do
-      end
-    end
-
-    class ChildExampleGroup < ParentExampleGroup
-      describe "Child ExampleGroup"
-      it "should bam" do
-      end
-    end
-
-    describe ChildExampleGroup do
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/differs/default_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/differs/default_spec.rb
deleted file mode 100644
index ba76cbd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/differs/default_spec.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-module Spec
-  module Fixtures
-    class Animal
-      def initialize(name,species)
-        @name, at species = name,species
-      end
-
-      def inspect
-        <<-EOA
-<Animal
-  name=#{@name},
-  species=#{@species}
->
-        EOA
-      end
-    end
-  end
-end
-
-describe "Diff" do
-  before(:each) do
-    @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
-    @differ = Spec::Expectations::Differs::Default.new(@options)
-  end
-
-  it "should output unified diff of two strings" do
-    expected="foo\nbar\nzap\nthis\nis\nsoo\nvery\nvery\nequal\ninsert\na\nline\n"
-    actual="foo\nzap\nbar\nthis\nis\nsoo\nvery\nvery\nequal\ninsert\na\nanother\nline\n"
-    expected_diff= <<'EOD'
-
-
-@@ -1,6 +1,6 @@
- foo
--zap
- bar
-+zap
- this
- is
- soo
-@@ -9,6 +9,5 @@
- equal
- insert
- a
--another
- line
-EOD
-
-    diff = @differ.diff_as_string(expected, actual)
-    diff.should eql(expected_diff)
-  end
-
-  it "should output unified diff message of two arrays" do
-    expected = [ :foo, 'bar', :baz, 'quux', :metasyntactic, 'variable', :delta, 'charlie', :width, 'quite wide' ]
-    actual   = [ :foo, 'bar', :baz, 'quux', :metasyntactic, 'variable', :delta, 'tango'  , :width, 'very wide'  ]
-
-    expected_diff = <<'EOD'
-
-
-@@ -5,7 +5,7 @@
-  :metasyntactic,
-  "variable",
-  :delta,
-- "tango",
-+ "charlie",
-  :width,
-- "very wide"]
-+ "quite wide"]
-EOD
-
-
-    diff = @differ.diff_as_object(expected,actual)
-    diff.should == expected_diff
-  end
-
-  it "should output unified diff message of two objects" do
-    expected = Spec::Fixtures::Animal.new "bob", "giraffe"
-    actual   = Spec::Fixtures::Animal.new "bob", "tortoise"
-
-    expected_diff = <<'EOD'
-
-@@ -1,5 +1,5 @@
- <Animal
-   name=bob,
--  species=tortoise
-+  species=giraffe
- >
-EOD
-
-    diff = @differ.diff_as_object(expected,actual)
-    diff.should == expected_diff
-  end
-
-end
-
-
-describe "Diff in context format" do
-  before(:each) do
-    @options = Spec::Runner::Options.new(StringIO.new, StringIO.new)
-    @options.diff_format = :context
-    @differ = Spec::Expectations::Differs::Default.new(@options)
-  end
-
-  it "should output unified diff message of two objects" do
-    expected = Spec::Fixtures::Animal.new "bob", "giraffe"
-    actual   = Spec::Fixtures::Animal.new "bob", "tortoise"
-
-    expected_diff = <<'EOD'
-
-***************
-*** 1,5 ****
-  <Animal
-    name=bob,
-!   species=tortoise
-  >
---- 1,5 ----
-  <Animal
-    name=bob,
-!   species=giraffe
-  >
-EOD
-
-    diff = @differ.diff_as_object(expected,actual)
-    diff.should == expected_diff
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/extensions/object_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/extensions/object_spec.rb
deleted file mode 100644
index bd75255..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/extensions/object_spec.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-describe Object, "#should" do
-  before(:each) do
-    @target = "target"
-    @matcher = mock("matcher")
-    @matcher.stub!(:matches?).and_return(true)
-    @matcher.stub!(:failure_message)
-  end
-  
-  it "should accept and interact with a matcher" do
-    @matcher.should_receive(:matches?).with(@target).and_return(true)    
-    @target.should @matcher
-  end
-  
-  it "should ask for a failure_message when matches? returns false" do
-    @matcher.should_receive(:matches?).with(@target).and_return(false)
-    @matcher.should_receive(:failure_message).and_return("the failure message")
-    lambda {
-      @target.should @matcher
-    }.should fail_with("the failure message")
-  end
-  
-  it "should raise error if it receives false directly" do
-    lambda {
-      @target.should false
-    }.should raise_error(Spec::Expectations::InvalidMatcherError)
-  end
-  
-  it "should raise error if it receives false (evaluated)" do
-    lambda {
-      @target.should eql?("foo")
-    }.should raise_error(Spec::Expectations::InvalidMatcherError)
-  end
-  
-  it "should raise error if it receives true" do
-    lambda {
-      @target.should true
-    }.should raise_error(Spec::Expectations::InvalidMatcherError)
-  end
-  
-  it "should raise error if it receives no argument and it is not used as a left side of an operator" do
-    pending "Is it even possible to catch this?"
-    lambda {
-      @target.should
-    }.should raise_error(Spec::Expectations::InvalidMatcherError)
-  end
-end
-
-describe Object, "#should_not" do
-  before(:each) do
-    @target = "target"
-    @matcher = mock("matcher")
-  end
-  
-  it "should accept and interact with a matcher" do
-    @matcher.should_receive(:matches?).with(@target).and_return(false)
-    @matcher.stub!(:negative_failure_message)
-    
-    @target.should_not @matcher
-  end
-  
-  it "should ask for a negative_failure_message when matches? returns true" do
-    @matcher.should_receive(:matches?).with(@target).and_return(true)
-    @matcher.should_receive(:negative_failure_message).and_return("the negative failure message")
-    lambda {
-      @target.should_not @matcher
-    }.should fail_with("the negative failure message")
-  end
-
-  it "should raise error if it receives false directly" do
-    lambda {
-      @target.should_not false
-    }.should raise_error(Spec::Expectations::InvalidMatcherError)
-  end
-  
-  it "should raise error if it receives false (evaluated)" do
-    lambda {
-      @target.should_not eql?("foo")
-    }.should raise_error(Spec::Expectations::InvalidMatcherError)
-  end
-  
-  it "should raise error if it receives true" do
-    lambda {
-      @target.should_not true
-    }.should raise_error(Spec::Expectations::InvalidMatcherError)
-  end
-
-  it "should raise error if it receives no argument and it is not used as a left side of an operator" do
-    pending "Is it even possible to catch this?"
-    lambda {
-      @target.should_not
-    }.should raise_error(Spec::Expectations::InvalidMatcherError)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/fail_with_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/fail_with_spec.rb
deleted file mode 100644
index 4c369ce..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/expectations/fail_with_spec.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe Spec::Expectations, "#fail_with with no diff" do
-  before(:each) do
-    @old_differ = Spec::Expectations.differ
-    Spec::Expectations.differ = nil
-  end
-  
-  it "should handle just a message" do
-    lambda {
-      Spec::Expectations.fail_with "the message"
-    }.should fail_with("the message")
-  end
-  
-  it "should handle an Array" do
-    lambda {
-      Spec::Expectations.fail_with ["the message","expected","actual"]
-    }.should fail_with("the message")
-  end
-
-  after(:each) do
-    Spec::Expectations.differ = @old_differ
-  end
-end
-
-describe Spec::Expectations, "#fail_with with diff" do
-  before(:each) do
-    @old_differ = Spec::Expectations.differ
-    @differ = mock("differ")
-    Spec::Expectations.differ = @differ
-  end
-  
-  it "should not call differ if no expected/actual" do
-    lambda {
-      Spec::Expectations.fail_with "the message"
-    }.should fail_with("the message")
-  end
-  
-  it "should call differ if expected/actual are presented separately" do
-    @differ.should_receive(:diff_as_string).and_return("diff")
-    lambda {
-      Spec::Expectations.fail_with "the message", "expected", "actual"
-    }.should fail_with("the message\nDiff:diff")
-  end
-  
-  it "should call differ if expected/actual are not strings" do
-    @differ.should_receive(:diff_as_object).and_return("diff")
-    lambda {
-      Spec::Expectations.fail_with "the message", :expected, :actual
-    }.should fail_with("the message\nDiff:diff")
-  end
-  
-  it "should not call differ if expected or actual are procs" do
-    @differ.should_not_receive(:diff_as_string)
-    @differ.should_not_receive(:diff_as_object)
-    lambda {
-      Spec::Expectations.fail_with "the message", lambda {}, lambda {}
-    }.should fail_with("the message")
-  end
-  
-  it "should call differ if expected/actual are presented in an Array with message" do
-    @differ.should_receive(:diff_as_string).with("actual","expected").and_return("diff")
-    lambda {
-      Spec::Expectations.fail_with(["the message", "expected", "actual"])
-    }.should fail_with(/the message\nDiff:diff/)
-  end
-  
-  after(:each) do
-    Spec::Expectations.differ = @old_differ
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/extensions/main_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/extensions/main_spec.rb
deleted file mode 100644
index e923af6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/extensions/main_spec.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Extensions
-    describe Main do
-      before(:each) do
-        @main = Class.new do; include Main; end
-      end
-
-      after(:each) do
-        $rspec_story_steps = @original_rspec_story_steps
-      end
-      
-      [:describe, :context].each do |method|
-        describe "##{method}" do
-          specify {@main.should respond_to(method)}
-
-          it "should raise when no block is given to #{method}" do
-            lambda { @main.__send__ method, "foo" }.should raise_error(ArgumentError)
-          end
-
-          it "should raise when no description is given to #{method}" do
-            lambda { @main.__send__ method do; end }.should raise_error(ArgumentError)
-          end
-
-          it "should run registered ExampleGroups" do
-            example_group = @main.__send__ method, "The ExampleGroup" do end
-            Spec::Runner.options.example_groups.should include(example_group)
-          end
-
-          it "should not run unregistered ExampleGroups" do
-            example_group = @main.__send__ method, "The ExampleGroup" do unregister; end
-            Spec::Runner.options.example_groups.should_not include(example_group)
-          end
-        end
-      end
-      
-      describe "#share_examples_for" do
-        it "should create a shared ExampleGroup" do
-          group = @main.share_examples_for "all things" do end
-          group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
-        end
-      end
-      
-      describe "#share_as" do
-        before(:each) do
-          $share_as_examples_example_module_number ||= 1
-          $share_as_examples_example_module_number += 1
-          @group_name = "Group#{$share_as_examples_example_module_number}"
-        end
-
-        it "should create a shared ExampleGroup" do
-          group = @main.share_as @group_name do end
-          group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
-        end
-        
-        it "should create a constant that points to a Module" do
-          group = @main.share_as @group_name do end
-          Object.const_get(@group_name).should equal(group)
-        end
-        
-        it "should bark if you pass it something not-constantizable" do
-          lambda do
-            @group = @main.share_as "Non Constant" do end
-          end.should raise_error(NameError, /The first argument to share_as must be a legal name for a constant/)
-        end
-        
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_that_fails.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_that_fails.rb
deleted file mode 100644
index d6f5564..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_that_fails.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
-$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
-
-describe "example group with failures" do
-  it "should fail" do
-    false.should be_true
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_that_passes.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_that_passes.rb
deleted file mode 100644
index ccd2488..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_that_passes.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
-$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
-
-describe "example group with passing examples" do
-  it "should pass" do
-    true.should be_true
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_with_errors.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_with_errors.rb
deleted file mode 100644
index 71427db..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_with_errors.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
-$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
-
-describe "example group with errors" do
-  it "should raise errors" do
-    raise "error raised in example group with errors"
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb
deleted file mode 100644
index 759adbb..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
-$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
-
-describe "options hash" do
-  describe "#options" do
-    it "should expose the options hash" do
-      group = describe("group", :this => 'hash') {}
-      group.options[:this].should == 'hash'
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_that_fails.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_that_fails.rb
deleted file mode 100644
index 3fb6515..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_that_fails.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
-$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
-
-class TestCaseThatFails < Test::Unit::TestCase
-  def test_that_fails
-    false.should be_true
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_that_passes.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_that_passes.rb
deleted file mode 100644
index 69239c0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_that_passes.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
-$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
-
-class TestCaseThatPasses < Test::Unit::TestCase
-  def test_that_passes
-    true.should be_true
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_with_errors.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_with_errors.rb
deleted file mode 100644
index 35dcb6b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/test_case_with_errors.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
-$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
-
-class TestCaseWithErrors < Test::Unit::TestCase
-  def test_with_error
-    raise "error raised in TestCaseWithErrors"
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
deleted file mode 100644
index 0c2167a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
-$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require "test/unit"
-require "spec"
-
-module Test
-  module Unit
-    describe TestSuiteAdapter do
-      def create_adapter(group)
-        TestSuiteAdapter.new(group)
-      end
-
-      describe "#size" do
-        it "should return the number of examples in the example group" do
-          group = Class.new(Spec::ExampleGroup) do
-            describe("some examples")
-            it("bar") {}
-            it("baz") {}
-          end
-          adapter = create_adapter(group)
-          adapter.size.should == 2
-        end
-      end
-
-      describe "#delete" do
-        it "should do nothing" do
-          group = Class.new(Spec::ExampleGroup) do
-            describe("Some Examples")
-            it("does something") {}
-          end
-          adapter = create_adapter(group)
-          adapter.delete(adapter.examples.first)
-          adapter.should be_empty
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/spec_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/spec_spec.rb
deleted file mode 100644
index f28f95c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/spec_spec.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-require File.dirname(__FILE__) + '/test_unit_spec_helper'
-
-describe "ExampleGroup with test/unit/interop" do
-  include TestUnitSpecHelper
-  
-  def resources
-    File.dirname(__FILE__) + "/resources"
-  end
-  
-  describe "with passing examples" do
-    it "should output 0 failures" do
-      output = ruby("#{resources}/spec_that_passes.rb")
-      output.should include("1 example, 0 failures")
-    end
-
-    it "should return an exit code of 0" do
-      ruby("#{resources}/spec_that_passes.rb")
-      $?.should == 0
-    end
-  end
-
-  describe "with failing examples" do
-    it "should output 1 failure" do
-      output = ruby("#{resources}/spec_that_fails.rb")
-      output.should include("1 example, 1 failure")
-    end
-
-    it "should return an exit code of 256" do
-      ruby("#{resources}/spec_that_fails.rb")
-      $?.should == 256
-    end
-  end
-
-  describe "with example that raises an error" do
-    it "should output 1 failure" do
-      output = ruby("#{resources}/spec_with_errors.rb")
-      output.should include("1 example, 1 failure")
-    end
-
-    it "should return an exit code of 256" do
-      ruby("#{resources}/spec_with_errors.rb")
-      $?.should == 256
-    end
-  end
-  
-  describe "options hash" do
-    it "should be exposed" do
-      output = ruby("#{resources}/spec_with_options_hash.rb")
-      output.should include("1 example, 0 failures")
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/test_unit_spec_helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/test_unit_spec_helper.rb
deleted file mode 100644
index 04d5d27..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/test_unit_spec_helper.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.dirname(__FILE__) + '/../../../../spec_helper'
-require File.dirname(__FILE__) + '/../../../../ruby_forker'
-
-module TestUnitSpecHelper
-  include RubyForker
-  
-  def run_script(file_name)
-    output = ruby(file_name)
-    if !$?.success? || output.include?("FAILED") || output.include?("Error")
-      raise output
-    end
-    output
-  end  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/testcase_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/testcase_spec.rb
deleted file mode 100644
index e67bfa4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/testcase_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require File.dirname(__FILE__) + '/test_unit_spec_helper'
-
-describe "Test::Unit::TestCase" do
-  include TestUnitSpecHelper
-  
-  before(:each) do
-    @dir = File.dirname(__FILE__) + "/resources"
-  end
-  
-  describe "with passing test case" do
-    it "should output 0 failures" do
-      output = ruby("#{@dir}/test_case_that_passes.rb")
-      output.should include("1 example, 0 failures")
-    end
-
-    it "should return an exit code of 0" do
-      ruby("#{@dir}/test_case_that_passes.rb")
-      $?.should == 0
-    end
-  end
-
-  describe "with failing test case" do
-    it "should output 1 failure" do
-      output = ruby("#{@dir}/test_case_that_fails.rb")
-      output.should include("1 example, 1 failure")
-    end
-
-    it "should return an exit code of 256" do
-      ruby("#{@dir}/test_case_that_fails.rb")
-      $?.should == 256
-    end
-  end
-
-  describe "with test case that raises an error" do
-    it "should output 1 failure" do
-      output = ruby("#{@dir}/test_case_with_errors.rb")
-      output.should include("1 example, 1 failure")
-    end
-
-    it "should return an exit code of 256" do
-      ruby("#{@dir}/test_case_with_errors.rb")
-      $?.should == 256
-    end
-  end
-  
-  describe "not yet implemented examples:" do
-    it "this example should be reported as pending (not an error)"
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/testsuite_adapter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
deleted file mode 100644
index 722126b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require File.dirname(__FILE__) + '/test_unit_spec_helper'
-
-describe "TestSuiteAdapter" do
-  include TestUnitSpecHelper
-  it "should pass" do
-    dir = File.dirname(__FILE__)
-    run_script "#{dir}/resources/testsuite_adapter_spec_with_test_unit.rb"
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/be_close_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/be_close_spec.rb
deleted file mode 100644
index d8452d4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/be_close_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-module Spec
-  module Matchers
-    describe BeClose do
-      it "should match when value == target" do
-        BeClose.new(5.0, 0.5).matches?(5.0).should be_true
-      end
-      it "should match when value < (target + delta)" do
-        BeClose.new(5.0, 0.5).matches?(5.49).should be_true
-      end
-      it "should match when value > (target - delta)" do
-        BeClose.new(5.0, 0.5).matches?(4.51).should be_true
-      end
-      it "should not match when value == (target - delta)" do
-        BeClose.new(5.0, 0.5).matches?(4.5).should be_false
-      end
-      it "should not match when value < (target - delta)" do
-        BeClose.new(5.0, 0.5).matches?(4.49).should be_false
-      end
-      it "should not match when value == (target + delta)" do
-        BeClose.new(5.0, 0.5).matches?(5.5).should be_false
-      end
-      it "should not match when value > (target + delta)" do
-        BeClose.new(5.0, 0.5).matches?(5.51).should be_false
-      end
-      it "should provide a useful failure message" do
-        #given
-          matcher = BeClose.new(5.0, 0.5)
-        #when
-          matcher.matches?(5.51)
-        #then
-          matcher.failure_message.should == "expected 5.0 +/- (< 0.5), got 5.51"
-      end
-      it "should describe itself" do
-        BeClose.new(5.0, 0.5).description.should == "be close to 5.0 (within +- 0.5)"
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/be_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/be_spec.rb
deleted file mode 100644
index ba2a0f1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/be_spec.rb
+++ /dev/null
@@ -1,248 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "should be_predicate" do  
-  it "should pass when actual returns true for :predicate?" do
-    actual = stub("actual", :happy? => true)
-    actual.should be_happy
-  end
-
-  it "should pass when actual returns true for :predicates? (present tense)" do
-    actual = stub("actual", :exists? => true)
-    actual.should be_exist
-  end
-
-  it "should fail when actual returns false for :predicate?" do
-    actual = stub("actual", :happy? => false)
-    lambda {
-      actual.should be_happy
-    }.should fail_with("expected happy? to return true, got false")
-  end
-  
-  it "should fail when actual does not respond to :predicate?" do
-    lambda {
-      Object.new.should be_happy
-    }.should raise_error(NameError)
-  end
-end
-
-describe "should_not be_predicate" do
-  it "should pass when actual returns false for :sym?" do
-    actual = stub("actual", :happy? => false)
-    actual.should_not be_happy
-  end
-  
-  it "should fail when actual returns true for :sym?" do
-    actual = stub("actual", :happy? => true)
-    lambda {
-      actual.should_not be_happy
-    }.should fail_with("expected happy? to return false, got true")
-  end
-
-  it "should fail when actual does not respond to :sym?" do
-    lambda {
-      Object.new.should_not be_happy
-    }.should raise_error(NameError)
-  end
-end
-
-describe "should be_predicate(*args)" do
-  it "should pass when actual returns true for :predicate?(*args)" do
-    actual = mock("actual")
-    actual.should_receive(:older_than?).with(3).and_return(true)
-    actual.should be_older_than(3)
-  end
-
-  it "should fail when actual returns false for :predicate?(*args)" do
-    actual = mock("actual")
-    actual.should_receive(:older_than?).with(3).and_return(false)
-    lambda {
-      actual.should be_older_than(3)
-    }.should fail_with("expected older_than?(3) to return true, got false")
-  end
-  
-  it "should fail when actual does not respond to :predicate?" do
-    lambda {
-      Object.new.should be_older_than(3)
-    }.should raise_error(NameError)
-  end
-end
-
-describe "should_not be_predicate(*args)" do
-  it "should pass when actual returns false for :predicate?(*args)" do
-    actual = mock("actual")
-    actual.should_receive(:older_than?).with(3).and_return(false)
-    actual.should_not be_older_than(3)
-  end
-  
-  it "should fail when actual returns true for :predicate?(*args)" do
-    actual = mock("actual")
-    actual.should_receive(:older_than?).with(3).and_return(true)
-    lambda {
-      actual.should_not be_older_than(3)
-    }.should fail_with("expected older_than?(3) to return false, got true")
-  end
-
-  it "should fail when actual does not respond to :predicate?" do
-    lambda {
-      Object.new.should_not be_older_than(3)
-    }.should raise_error(NameError)
-  end
-end
-
-describe "should be_true" do
-  it "should pass when actual equal(true)" do
-    true.should be_true
-  end
-
-  it "should fail when actual equal(false)" do
-    lambda {
-      false.should be_true
-    }.should fail_with("expected true, got false")
-  end
-end
-
-describe "should be_false" do
-  it "should pass when actual equal(false)" do
-    false.should be_false
-  end
-
-  it "should fail when actual equal(true)" do
-    lambda {
-      true.should be_false
-    }.should fail_with("expected false, got true")
-  end
-end
-
-describe "should be_nil" do
-  it "should pass when actual is nil" do
-    nil.should be_nil
-  end
-
-  it "should fail when actual is not nil" do
-    lambda {
-      :not_nil.should be_nil
-    }.should fail_with("expected nil, got :not_nil")
-  end
-end
-
-describe "should_not be_nil" do
-  it "should pass when actual is not nil" do
-    :not_nil.should_not be_nil
-  end
-
-  it "should fail when actual is nil" do
-    lambda {
-      nil.should_not be_nil
-    }.should fail_with("expected not nil, got nil")
-  end
-end
-
-describe "should be <" do
-  it "should pass when < operator returns true" do
-    3.should be < 4
-  end
-
-  it "should fail when < operator returns false" do
-    lambda { 3.should be < 3 }.should fail_with("expected < 3, got 3")
-  end
-end
-
-describe "should be <=" do
-  it "should pass when <= operator returns true" do
-    3.should be <= 4
-    4.should be <= 4
-  end
-
-  it "should fail when <= operator returns false" do
-    lambda { 3.should be <= 2 }.should fail_with("expected <= 2, got 3")
-  end
-end
-
-describe "should be >=" do
-  it "should pass when >= operator returns true" do
-    4.should be >= 4
-    5.should be >= 4
-  end
-
-  it "should fail when >= operator returns false" do
-    lambda { 3.should be >= 4 }.should fail_with("expected >= 4, got 3")
-  end
-end
-
-describe "should be >" do
-  it "should pass when > operator returns true" do
-    5.should be > 4
-  end
-
-  it "should fail when > operator returns false" do
-    lambda { 3.should be > 4 }.should fail_with("expected > 4, got 3")
-  end
-end
-
-describe "should be ==" do
-  it "should pass when == operator returns true" do
-    5.should be == 5
-  end
-
-  it "should fail when == operator returns false" do
-    lambda { 3.should be == 4 }.should fail_with("expected == 4, got 3")
-  end
-end
-
-describe "should be ===" do
-  it "should pass when === operator returns true" do
-    Hash.should be === Hash.new
-  end
-
-  it "should fail when === operator returns false" do
-    lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === "not a hash", got Hash])
-  end
-end
-
-describe "should be" do
-  it "should pass if actual is true or a set value" do
-    true.should be
-    1.should be
-  end
-
-  it "should fail if actual is false" do
-    lambda {false.should be}.should fail_with("expected if to be satisfied, got false")
-  end
-
-  it "should fail if actual is nil" do
-    lambda {nil.should be}.should fail_with("expected if to be satisfied, got nil")
-  end
-end
-
-describe "should be(value)" do
-  it "should pass if actual.equal?(value)" do
-    5.should be(5)
-  end
-  it "should fail if !actual.equal?(value)" do
-    lambda { 5.should be(6) }.should fail_with("expected 6, got 5")
-  end
-end
-
-
-describe "arbitrary predicate with DelegateClass" do
-  it "should access methods defined in the delegating class (LH[#48])" do
-    pending(%{
-      Looks like DelegateClass is delegating #should to the
-      delegate. Not sure how to fix this one. Or if we even should."
-    })
-    require 'delegate'
-    class ArrayDelegate < DelegateClass(Array)
-      def initialize(array)
-        @internal_array = array
-        super(@internal_array)
-      end
-
-      def large?
-        @internal_array.size >= 5
-      end
-    end
-
-    delegate = ArrayDelegate.new([1,2,3,4,5,6])
-    delegate.should be_large
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/change_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/change_spec.rb
deleted file mode 100644
index 28c2a0b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/change_spec.rb
+++ /dev/null
@@ -1,329 +0,0 @@
-#Based on patch from Wilson Bilkovich
-
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-class SomethingExpected
-  attr_accessor :some_value
-end
-
-describe "should change(actual, message)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when actual is modified by the block" do
-    lambda {@instance.some_value = 6}.should change(@instance, :some_value)
-  end
-
-  it "should fail when actual is not modified by the block" do
-    lambda do
-      lambda {}.should change(@instance, :some_value)
-    end.should fail_with("some_value should have changed, but is still 5")
-  end
-end
-
-describe "should_not change(actual, message)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when actual is not modified by the block" do
-    lambda { }.should_not change(@instance, :some_value)
-  end
-
-  it "should fail when actual is not modified by the block" do
-    lambda do
-      lambda {@instance.some_value = 6}.should_not change(@instance, :some_value)
-    end.should fail_with("some_value should not have changed, but did change from 5 to 6")
-  end
-end
-
-describe "should change { block }" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when actual is modified by the block" do
-    lambda {@instance.some_value = 6}.should change { @instance.some_value }
-  end
-
-  it "should fail when actual is not modified by the block" do
-    lambda do
-      lambda {}.should change{ @instance.some_value }
-    end.should fail_with("result should have changed, but is still 5")
-  end
-  
-  it "should warn if passed a block using do/end instead of {}" do
-    lambda do
-      lambda {}.should change do; end
-    end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
-  end
-end
-
-describe "should_not change { block }" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when actual is modified by the block" do
-    lambda {}.should_not change{ @instance.some_value }
-  end
-
-  it "should fail when actual is not modified by the block" do
-    lambda do
-      lambda {@instance.some_value = 6}.should_not change { @instance.some_value }
-    end.should fail_with("result should not have changed, but did change from 5 to 6")
-  end
-  
-  it "should warn if passed a block using do/end instead of {}" do
-    lambda do
-      lambda {}.should_not change do; end
-    end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
-  end
-end
-
-describe "should change(actual, message).by(expected)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when attribute is changed by expected amount" do
-    lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by(1)
-  end
-
-  it "should fail when the attribute is changed by unexpected amount" do
-    lambda do
-      lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by(1)
-    end.should fail_with("some_value should have been changed by 1, but was changed by 2")
-  end
-
-  it "should fail when the attribute is changed by unexpected amount in the opposite direction" do
-    lambda do
-      lambda { @instance.some_value -= 1 }.should change(@instance, :some_value).by(1)
-    end.should fail_with("some_value should have been changed by 1, but was changed by -1")
-  end
-end
-
-describe "should change{ block }.by(expected)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when attribute is changed by expected amount" do
-    lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by(1)
-  end
-
-  it "should fail when the attribute is changed by unexpected amount" do
-    lambda do
-      lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by(1)
-    end.should fail_with("result should have been changed by 1, but was changed by 2")
-  end
-
-  it "should fail when the attribute is changed by unexpected amount in the opposite direction" do
-    lambda do
-      lambda { @instance.some_value -= 1 }.should change{@instance.some_value}.by(1)
-    end.should fail_with("result should have been changed by 1, but was changed by -1")
-  end
-end
-
-describe "should change(actual, message).by_at_least(expected)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when attribute is changed by greater than the expected amount" do
-    lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(1)
-  end
-  
-  it "should pass when attribute is changed by the expected amount" do
-    lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(2)
-  end  
-
-  it "should fail when the attribute is changed by less than the expected amount" do
-    lambda do
-      lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by_at_least(2)
-    end.should fail_with("some_value should have been changed by at least 2, but was changed by 1")
-  end
-
-end
-
-describe "should change{ block }.by_at_least(expected)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when attribute is changed by greater than expected amount" do
-    lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(1)
-  end
-  
-  it "should pass when attribute is changed by the expected amount" do
-    lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(2)
-  end  
-
-  it "should fail when the attribute is changed by less than the unexpected amount" do
-    lambda do
-      lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by_at_least(2)
-    end.should fail_with("result should have been changed by at least 2, but was changed by 1")
-  end
-end
-
-
-describe "should change(actual, message).by_at_most(expected)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when attribute is changed by less than the expected amount" do
-    lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(3)
-  end
-  
-  it "should pass when attribute is changed by the expected amount" do
-    lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(2)
-  end  
-
-  it "should fail when the attribute is changed by greater than the expected amount" do
-    lambda do
-      lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(1)
-    end.should fail_with("some_value should have been changed by at most 1, but was changed by 2")
-  end
-
-end
-
-describe "should change{ block }.by_at_most(expected)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 5
-  end
-
-  it "should pass when attribute is changed by less than expected amount" do
-    lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(3)
-  end
-  
-  it "should pass when attribute is changed by the expected amount" do
-    lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(2)
-  end  
-
-  it "should fail when the attribute is changed by greater than the unexpected amount" do
-    lambda do
-      lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(1)
-    end.should fail_with("result should have been changed by at most 1, but was changed by 2")
-  end
-end
-
-describe "should change(actual, message).from(old)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 'string'
-  end
-
-  it "should pass when attribute is == to expected value before executing block" do
-    lambda { @instance.some_value = "astring" }.should change(@instance, :some_value).from("string")
-  end
-
-  it "should fail when attribute is not == to expected value before executing block" do
-    lambda do
-      lambda { @instance.some_value = "knot" }.should change(@instance, :some_value).from("cat")
-    end.should fail_with("some_value should have initially been \"cat\", but was \"string\"")
-  end
-end
-
-describe "should change{ block }.from(old)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 'string'
-  end
-
-  it "should pass when attribute is == to expected value before executing block" do
-    lambda { @instance.some_value = "astring" }.should change{@instance.some_value}.from("string")
-  end
-
-  it "should fail when attribute is not == to expected value before executing block" do
-    lambda do
-      lambda { @instance.some_value = "knot" }.should change{@instance.some_value}.from("cat")
-    end.should fail_with("result should have initially been \"cat\", but was \"string\"")
-  end
-end
-
-describe "should change(actual, message).to(new)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 'string'
-  end
-  
-  it "should pass when attribute is == to expected value after executing block" do
-    lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat")
-  end
-
-  it "should fail when attribute is not == to expected value after executing block" do
-    lambda do
-      lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("dog")
-    end.should fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
-  end
-end
-
-describe "should change{ block }.to(new)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 'string'
-  end
-  
-  it "should pass when attribute is == to expected value after executing block" do
-    lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat")
-  end
-
-  it "should fail when attribute is not == to expected value after executing block" do
-    lambda do
-      lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("dog")
-    end.should fail_with("result should have been changed to \"dog\", but is now \"cat\"")
-  end
-end
-
-describe "should change(actual, message).from(old).to(new)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 'string'
-  end
-  
-  it "should pass when #to comes before #from" do
-    lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat").from("string")
-  end
-
-  it "should pass when #from comes before #to" do
-    lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("cat")
-  end
-end
-
-describe "should change{ block }.from(old).to(new)" do
-  before(:each) do
-    @instance = SomethingExpected.new
-    @instance.some_value = 'string'
-  end
-  
-  it "should pass when #to comes before #from" do
-    lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat").from("string")
-  end
-
-  it "should pass when #from comes before #to" do
-    lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("cat")
-  end
-end
-
-describe Spec::Matchers::Change do
-  it "should work when the receiver has implemented #send" do
-    @instance = SomethingExpected.new
-    @instance.some_value = "string"
-    def @instance.send(*args); raise "DOH! Library developers shouldn't use #send!" end
-    
-    lambda {
-      lambda { @instance.some_value = "cat" }.should change(@instance, :some_value)
-    }.should_not raise_error
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/description_generation_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/description_generation_spec.rb
deleted file mode 100644
index c494e21..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/description_generation_spec.rb
+++ /dev/null
@@ -1,153 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "Matchers should be able to generate their own descriptions" do
-  after(:each) do
-    Spec::Matchers.clear_generated_description
-  end
-
-  it "should == expected" do
-    "this".should == "this"
-    Spec::Matchers.generated_description.should == "should == \"this\""
-  end
-  
-  it "should not == expected" do
-    "this".should_not == "that"
-    Spec::Matchers.generated_description.should == "should not == \"that\""
-  end
-  
-  it "should be empty (arbitrary predicate)" do
-    [].should be_empty
-    Spec::Matchers.generated_description.should == "should be empty"
-  end
-  
-  it "should not be empty (arbitrary predicate)" do
-    [1].should_not be_empty
-    Spec::Matchers.generated_description.should == "should not be empty"
-  end
-  
-  it "should be true" do
-    true.should be_true
-    Spec::Matchers.generated_description.should == "should be true"
-  end
-  
-  it "should be false" do
-    false.should be_false
-    Spec::Matchers.generated_description.should == "should be false"
-  end
-  
-  it "should be nil" do
-    nil.should be_nil
-    Spec::Matchers.generated_description.should == "should be nil"
-  end
-  
-  it "should be > n" do
-    5.should be > 3
-    Spec::Matchers.generated_description.should == "should be > 3"
-  end
-  
-  it "should be predicate arg1, arg2 and arg3" do
-    5.0.should be_between(0,10)
-    Spec::Matchers.generated_description.should == "should be between 0 and 10"
-  end
-
-  it "should be_few_words predicate should be transformed to 'be few words'" do
-    5.should be_kind_of(Fixnum)
-    Spec::Matchers.generated_description.should == "should be kind of Fixnum"
-  end
-
-  it "should preserve a proper prefix for be predicate" do
-    5.should be_a_kind_of(Fixnum)
-    Spec::Matchers.generated_description.should == "should be a kind of Fixnum"
-    5.should be_an_instance_of(Fixnum)
-    Spec::Matchers.generated_description.should == "should be an instance of Fixnum"
-  end
-  
-  it "should equal" do
-    expected = "expected"
-    expected.should equal(expected)
-    Spec::Matchers.generated_description.should == "should equal \"expected\""
-  end
-  
-  it "should_not equal" do
-    5.should_not equal(37)
-    Spec::Matchers.generated_description.should == "should not equal 37"
-  end
-  
-  it "should eql" do
-    "string".should eql("string")
-    Spec::Matchers.generated_description.should == "should eql \"string\""
-  end
-  
-  it "should not eql" do
-    "a".should_not eql(:a)
-    Spec::Matchers.generated_description.should == "should not eql :a"
-  end
-  
-  it "should have_key" do
-    {:a => "a"}.should have_key(:a)
-    Spec::Matchers.generated_description.should == "should have key :a"
-  end
-  
-  it "should have n items" do
-    team.should have(3).players
-    Spec::Matchers.generated_description.should == "should have 3 players"
-  end
-  
-  it "should have at least n items" do
-    team.should have_at_least(2).players
-    Spec::Matchers.generated_description.should == "should have at least 2 players"
-  end
-  
-  it "should have at most n items" do
-    team.should have_at_most(4).players
-    Spec::Matchers.generated_description.should == "should have at most 4 players"
-  end
-  
-  it "should include" do
-    [1,2,3].should include(3)
-    Spec::Matchers.generated_description.should == "should include 3"
-  end
-  
-  it "should match" do
-    "this string".should match(/this string/)
-    Spec::Matchers.generated_description.should == "should match /this string/"
-  end
-  
-  it "should raise_error" do
-    lambda { raise }.should raise_error
-    Spec::Matchers.generated_description.should == "should raise Exception"
-  end
-  
-  it "should raise_error with type" do
-    lambda { raise }.should raise_error(RuntimeError)
-    Spec::Matchers.generated_description.should == "should raise RuntimeError"
-  end
-  
-  it "should raise_error with type and message" do
-    lambda { raise "there was an error" }.should raise_error(RuntimeError, "there was an error")
-    Spec::Matchers.generated_description.should == "should raise RuntimeError with \"there was an error\""
-  end
-  
-  it "should respond_to" do
-    [].should respond_to(:insert)
-    Spec::Matchers.generated_description.should == "should respond to #insert"
-  end
-  
-  it "should throw symbol" do
-    lambda { throw :what_a_mess }.should throw_symbol
-    Spec::Matchers.generated_description.should == "should throw a Symbol"
-  end
-  
-  it "should throw symbol (with named symbol)" do
-    lambda { throw :what_a_mess }.should throw_symbol(:what_a_mess)
-    Spec::Matchers.generated_description.should == "should throw :what_a_mess"
-  end
-  
-  def team
-    Class.new do
-      def players
-        [1,2,3]
-      end
-    end.new
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/eql_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/eql_spec.rb
deleted file mode 100644
index 3f265d7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/eql_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Matchers
-    describe Eql do
-      it "should match when actual.eql?(expected)" do
-        Eql.new(1).matches?(1).should be_true
-      end
-      it "should not match when !actual.eql?(expected)" do
-        Eql.new(1).matches?(2).should be_false
-      end
-      it "should describe itself" do
-        matcher = Eql.new(1)
-        matcher.description.should == "eql 1"
-      end
-      it "should provide message, expected and actual on #failure_message" do
-        matcher = Eql.new("1")
-        matcher.matches?(1)
-        matcher.failure_message.should == ["expected \"1\", got 1 (using .eql?)", "1", 1]
-      end
-      it "should provide message, expected and actual on #negative_failure_message" do
-        matcher = Eql.new(1)
-        matcher.matches?(1)
-        matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .eql?)", 1, 1]
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/equal_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/equal_spec.rb
deleted file mode 100644
index 7667bdc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/equal_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Matchers
-    describe Equal do
-      it "should match when actual.equal?(expected)" do
-        Equal.new(1).matches?(1).should be_true
-      end
-      it "should not match when !actual.equal?(expected)" do
-        Equal.new("1").matches?("1").should be_false
-      end
-      it "should describe itself" do
-        matcher = Equal.new(1)
-        matcher.description.should == "equal 1"
-      end
-      it "should provide message, expected and actual on #failure_message" do
-        matcher = Equal.new("1")
-        matcher.matches?(1)
-        matcher.failure_message.should == ["expected \"1\", got 1 (using .equal?)", "1", 1]
-      end
-      it "should provide message, expected and actual on #negative_failure_message" do
-        matcher = Equal.new(1)
-        matcher.matches?(1)
-        matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .equal?)", 1, 1]
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/exist_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/exist_spec.rb
deleted file mode 100644
index 0a50972..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/exist_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-class Substance
-  def initialize exists, description
-    @exists = exists
-    @description = description
-  end
-  def exist?
-    @exists
-  end
-  def inspect
-    @description
-  end
-end
-  
-class SubstanceTester
-  include Spec::Matchers
-  def initialize substance
-    @substance = substance
-  end
-  def should_exist
-    @substance.should exist
-  end
-end
-
-describe "should exist," do
-  
-  before(:each) do
-    @real = Substance.new true, 'something real'
-    @imaginary = Substance.new false, 'something imaginary'
-  end
-
-  describe "within an example group" do
-  
-    it "should pass if target exists" do
-      @real.should exist
-    end
-  
-    it "should fail if target does not exist" do
-      lambda { @imaginary.should exist }.should fail
-    end
-    
-    it "should pass if target doesn't exist" do
-      lambda { @real.should_not exist }.should fail
-    end
-  end
-
-  describe "outside of an example group" do
-
-    it "should pass if target exists" do
-      real_tester = SubstanceTester.new @real
-      real_tester.should_exist
-    end
-
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/handler_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/handler_spec.rb
deleted file mode 100644
index 74c1f01..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/handler_spec.rb
+++ /dev/null
@@ -1,150 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module ExampleExpectations
-  
-  class ArbitraryMatcher
-    def initialize(*args, &block)
-      if args.last.is_a? Hash
-        @expected = args.last[:expected]
-      end
-      if block_given?
-        @expected = block.call
-      end
-      @block = block
-    end
-    
-    def matches?(target)
-      @target = target
-      return @expected == target
-    end
-    
-    def with(new_value)
-      @expected = new_value
-      self
-    end
-    
-    def failure_message
-      "expected #{@expected}, got #{@target}"
-    end
-    
-    def negative_failure_message
-      "expected not #{@expected}, got #{@target}"
-    end
-  end
-  
-  class PositiveOnlyMatcher < ArbitraryMatcher
-    undef negative_failure_message rescue nil
-  end
-  
-  def arbitrary_matcher(*args, &block)
-    ArbitraryMatcher.new(*args, &block)
-  end
-  
-  def positive_only_matcher(*args, &block)
-    PositiveOnlyMatcher.new(*args, &block)
-  end
-  
-end
-
-module Spec
-  module Expectations
-    describe ExpectationMatcherHandler do
-      describe "#handle_matcher" do
-        it "should ask the matcher if it matches" do
-          matcher = mock("matcher")
-          actual = Object.new
-          matcher.should_receive(:matches?).with(actual).and_return(true)
-          ExpectationMatcherHandler.handle_matcher(actual, matcher)
-        end
-      
-        it "should explain when the matcher parameter is not a matcher" do
-          begin
-            nonmatcher = mock("nonmatcher")
-            actual = Object.new
-            ExpectationMatcherHandler.handle_matcher(actual, nonmatcher)
-          rescue Spec::Expectations::InvalidMatcherError => e
-          end
-
-          e.message.should =~ /^Expected a matcher, got /
-        end
-        
-        it "should return the match value" do
-          matcher = mock("matcher")
-          actual = Object.new
-          matcher.should_receive(:matches?).with(actual).and_return(:this_value)
-          ExpectationMatcherHandler.handle_matcher(actual, matcher).should == :this_value
-        end
-      end
-    end
-
-    describe NegativeExpectationMatcherHandler do
-      describe "#handle_matcher" do
-        it "should explain when matcher does not support should_not" do
-          matcher = mock("matcher")
-          matcher.stub!(:matches?)
-          actual = Object.new
-          lambda {
-            NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
-          }.should fail_with(/Matcher does not support should_not.\n/)
-        end      
-      
-        it "should ask the matcher if it matches" do
-          matcher = mock("matcher")
-          actual = Object.new
-          matcher.stub!(:negative_failure_message)
-          matcher.should_receive(:matches?).with(actual).and_return(false)
-          NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
-        end
-      
-        it "should explain when the matcher parameter is not a matcher" do
-          begin
-            nonmatcher = mock("nonmatcher")
-            actual = Object.new
-            NegativeExpectationMatcherHandler.handle_matcher(actual, nonmatcher)
-          rescue Spec::Expectations::InvalidMatcherError => e
-          end
-
-          e.message.should =~ /^Expected a matcher, got /
-        end
-
-        
-        it "should return the match value" do
-          matcher = mock("matcher")
-          actual = Object.new
-          matcher.should_receive(:matches?).with(actual).and_return(false)
-          matcher.stub!(:negative_failure_message).and_return("ignore")
-          NegativeExpectationMatcherHandler.handle_matcher(actual, matcher).should be_false
-        end
-      end
-    end
-    
-    describe ExpectationMatcherHandler do
-      include ExampleExpectations
-      
-      it "should handle submitted args" do
-        5.should arbitrary_matcher(:expected => 5)
-        5.should arbitrary_matcher(:expected => "wrong").with(5)
-        lambda { 5.should arbitrary_matcher(:expected => 4) }.should fail_with("expected 4, got 5")
-        lambda { 5.should arbitrary_matcher(:expected => 5).with(4) }.should fail_with("expected 4, got 5")
-        5.should_not arbitrary_matcher(:expected => 4)
-        5.should_not arbitrary_matcher(:expected => 5).with(4)
-        lambda { 5.should_not arbitrary_matcher(:expected => 5) }.should fail_with("expected not 5, got 5")
-        lambda { 5.should_not arbitrary_matcher(:expected => 4).with(5) }.should fail_with("expected not 5, got 5")
-      end
-
-      it "should handle the submitted block" do
-        5.should arbitrary_matcher { 5 }
-        5.should arbitrary_matcher(:expected => 4) { 5 }
-        5.should arbitrary_matcher(:expected => 4).with(5) { 3 }
-      end
-  
-      it "should explain when matcher does not support should_not" do
-        lambda {
-          5.should_not positive_only_matcher(:expected => 5)
-        }.should fail_with(/Matcher does not support should_not.\n/)
-      end
-
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/has_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/has_spec.rb
deleted file mode 100644
index db7a121..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/has_spec.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "should have_sym(*args)" do
-  it "should pass if #has_sym?(*args) returns true" do
-    {:a => "A"}.should have_key(:a)
-  end
-
-  it "should fail if #has_sym?(*args) returns false" do
-    lambda {
-      {:b => "B"}.should have_key(:a)
-    }.should fail_with("expected #has_key?(:a) to return true, got false")
-  end
-
-  it "should fail if target does not respond to #has_sym?" do
-    lambda {
-      Object.new.should have_key(:a)
-    }.should raise_error(NoMethodError)
-  end
-  
-  it "should reraise an exception thrown in #has_sym?(*args)" do
-    o = Object.new
-    def o.has_sym?(*args)
-      raise "Funky exception"
-    end
-    lambda { o.should have_sym(:foo) }.should raise_error("Funky exception")
-  end
-end
-
-describe "should_not have_sym(*args)" do
-  it "should pass if #has_sym?(*args) returns false" do
-    {:a => "A"}.should_not have_key(:b)
-  end
-
-  it "should fail if #has_sym?(*args) returns true" do
-    lambda {
-      {:a => "A"}.should_not have_key(:a)
-    }.should fail_with("expected #has_key?(:a) to return false, got true")
-  end
-
-  it "should fail if target does not respond to #has_sym?" do
-    lambda {
-      Object.new.should have_key(:a)
-    }.should raise_error(NoMethodError)
-  end
-  
-  it "should reraise an exception thrown in #has_sym?(*args)" do
-    o = Object.new
-    def o.has_sym?(*args)
-      raise "Funky exception"
-    end
-    lambda { o.should_not have_sym(:foo) }.should raise_error("Funky exception")
-  end
-end
-
-describe Spec::Matchers::Has do
-  it "should work when the target implements #send" do
-    o = {:a => "A"}
-    def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
-    lambda {
-      o.should have_key(:a)
-    }.should_not raise_error
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/have_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/have_spec.rb
deleted file mode 100644
index 7b178d1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/have_spec.rb
+++ /dev/null
@@ -1,394 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module HaveSpecHelper
-  def create_collection_owner_with(n)
-    owner = Spec::Expectations::Helper::CollectionOwner.new
-    (1..n).each do |n|
-      owner.add_to_collection_with_length_method(n)
-      owner.add_to_collection_with_size_method(n)
-    end
-    owner
-  end
-end
-
-describe "should have(n).items" do
-  include HaveSpecHelper
-
-  it "should pass if target has a collection of items with n members" do
-    owner = create_collection_owner_with(3)
-    owner.should have(3).items_in_collection_with_length_method
-    owner.should have(3).items_in_collection_with_size_method
-  end
-
-  it "should convert :no to 0" do
-    owner = create_collection_owner_with(0)
-    owner.should have(:no).items_in_collection_with_length_method
-    owner.should have(:no).items_in_collection_with_size_method
-  end
-
-  it "should fail if target has a collection of items with < n members" do
-    owner = create_collection_owner_with(3)
-    lambda {
-      owner.should have(4).items_in_collection_with_length_method
-    }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
-    lambda {
-      owner.should have(4).items_in_collection_with_size_method
-    }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
-  end
-  
-  it "should fail if target has a collection of items with > n members" do
-    owner = create_collection_owner_with(3)
-    lambda {
-      owner.should have(2).items_in_collection_with_length_method
-    }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
-    lambda {
-      owner.should have(2).items_in_collection_with_size_method
-    }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
-  end
-end
-
-describe 'should have(1).item when ActiveSupport::Inflector is defined' do
-  include HaveSpecHelper
-  
-  before(:each) do
-    unless defined?(ActiveSupport::Inflector)
-      @active_support_was_not_defined
-      module ActiveSupport
-        class Inflector
-          def self.pluralize(string)
-            string.to_s + 's'
-          end
-        end
-      end
-    end
-  end
-  
-  it 'should pluralize the collection name' do
-    owner = create_collection_owner_with(1)
-    owner.should have(1).item
-  end
-  
-  after(:each) do
-    if @active_support_was_not_defined
-      Object.send :remove_const, :ActiveSupport
-    end
-  end
-end
-
-describe 'should have(1).item when Inflector is defined' do
-  include HaveSpecHelper
-  
-  before(:each) do
-    unless defined?(Inflector)
-      @inflector_was_not_defined
-      class Inflector
-        def self.pluralize(string)
-          string.to_s + 's'
-        end
-      end
-    end
-  end
-  
-  it 'should pluralize the collection name' do
-    owner = create_collection_owner_with(1)
-    owner.should have(1).item
-  end
-
-  after(:each) do
-    if @inflector_was_not_defined
-      Object.send :remove_const, :Inflector
-    end
-  end
-end
-
-describe "should have(n).items where result responds to items but returns something other than a collection" do
-  it "should provide a meaningful error" do
-    owner = Class.new do
-      def items
-        Object.new
-      end
-    end.new
-    lambda do
-      owner.should have(3).items
-    end.should raise_error("expected items to be a collection but it does not respond to #length or #size")
-  end
-end
-
-describe "should_not have(n).items" do
-  include HaveSpecHelper
-
-  it "should pass if target has a collection of items with < n members" do
-    owner = create_collection_owner_with(3)
-    owner.should_not have(4).items_in_collection_with_length_method
-    owner.should_not have(4).items_in_collection_with_size_method
-  end
-  
-  it "should pass if target has a collection of items with > n members" do
-    owner = create_collection_owner_with(3)
-    owner.should_not have(2).items_in_collection_with_length_method
-    owner.should_not have(2).items_in_collection_with_size_method
-  end
-
-  it "should fail if target has a collection of items with n members" do
-    owner = create_collection_owner_with(3)
-    lambda {
-      owner.should_not have(3).items_in_collection_with_length_method
-    }.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
-    lambda {
-      owner.should_not have(3).items_in_collection_with_size_method
-      }.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
-  end
-end
-
-describe "should have_exactly(n).items" do
-  include HaveSpecHelper
-
-  it "should pass if target has a collection of items with n members" do
-    owner = create_collection_owner_with(3)
-    owner.should have_exactly(3).items_in_collection_with_length_method
-    owner.should have_exactly(3).items_in_collection_with_size_method
-  end
-
-  it "should convert :no to 0" do
-    owner = create_collection_owner_with(0)
-    owner.should have_exactly(:no).items_in_collection_with_length_method
-    owner.should have_exactly(:no).items_in_collection_with_size_method
-  end
-
-  it "should fail if target has a collection of items with < n members" do
-    owner = create_collection_owner_with(3)
-    lambda {
-      owner.should have_exactly(4).items_in_collection_with_length_method
-    }.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
-    lambda {
-      owner.should have_exactly(4).items_in_collection_with_size_method
-    }.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
-  end
-  
-  it "should fail if target has a collection of items with > n members" do
-    owner = create_collection_owner_with(3)
-    lambda {
-      owner.should have_exactly(2).items_in_collection_with_length_method
-    }.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
-    lambda {
-      owner.should have_exactly(2).items_in_collection_with_size_method
-    }.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
-  end
-end
-
-describe "should have_at_least(n).items" do
-  include HaveSpecHelper
-
-  it "should pass if target has a collection of items with n members" do
-    owner = create_collection_owner_with(3)
-    owner.should have_at_least(3).items_in_collection_with_length_method
-    owner.should have_at_least(3).items_in_collection_with_size_method
-  end
-  
-  it "should pass if target has a collection of items with > n members" do
-    owner = create_collection_owner_with(3)
-    owner.should have_at_least(2).items_in_collection_with_length_method
-    owner.should have_at_least(2).items_in_collection_with_size_method
-  end
-
-  it "should fail if target has a collection of items with < n members" do
-    owner = create_collection_owner_with(3)
-    lambda {
-      owner.should have_at_least(4).items_in_collection_with_length_method
-    }.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3")
-    lambda {
-      owner.should have_at_least(4).items_in_collection_with_size_method
-    }.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
-  end
-  
-  it "should provide educational negative failure messages" do
-    #given
-    owner = create_collection_owner_with(3)
-    length_matcher = have_at_least(3).items_in_collection_with_length_method
-    size_matcher = have_at_least(3).items_in_collection_with_size_method
-    
-    #when
-    length_matcher.matches?(owner)
-    size_matcher.matches?(owner)
-    
-    #then
-    length_matcher.negative_failure_message.should == <<-EOF
-Isn't life confusing enough?
-Instead of having to figure out the meaning of this:
-  should_not have_at_least(3).items_in_collection_with_length_method
-We recommend that you use this instead:
-  should have_at_most(2).items_in_collection_with_length_method
-EOF
-
-    size_matcher.negative_failure_message.should == <<-EOF
-Isn't life confusing enough?
-Instead of having to figure out the meaning of this:
-  should_not have_at_least(3).items_in_collection_with_size_method
-We recommend that you use this instead:
-  should have_at_most(2).items_in_collection_with_size_method
-EOF
-  end
-end
-
-describe "should have_at_most(n).items" do
-  include HaveSpecHelper
-
-  it "should pass if target has a collection of items with n members" do
-    owner = create_collection_owner_with(3)
-    owner.should have_at_most(3).items_in_collection_with_length_method
-    owner.should have_at_most(3).items_in_collection_with_size_method
-  end
-
-  it "should fail if target has a collection of items with > n members" do
-    owner = create_collection_owner_with(3)
-    lambda {
-      owner.should have_at_most(2).items_in_collection_with_length_method
-    }.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3")
-    lambda {
-      owner.should have_at_most(2).items_in_collection_with_size_method
-    }.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
-  end
-  
-  it "should pass if target has a collection of items with < n members" do
-    owner = create_collection_owner_with(3)
-    owner.should have_at_most(4).items_in_collection_with_length_method
-    owner.should have_at_most(4).items_in_collection_with_size_method
-  end
-
-  it "should provide educational negative failure messages" do
-    #given
-    owner = create_collection_owner_with(3)
-    length_matcher = have_at_most(3).items_in_collection_with_length_method
-    size_matcher = have_at_most(3).items_in_collection_with_size_method
-    
-    #when
-    length_matcher.matches?(owner)
-    size_matcher.matches?(owner)
-    
-    #then
-    length_matcher.negative_failure_message.should == <<-EOF
-Isn't life confusing enough?
-Instead of having to figure out the meaning of this:
-  should_not have_at_most(3).items_in_collection_with_length_method
-We recommend that you use this instead:
-  should have_at_least(4).items_in_collection_with_length_method
-EOF
-    
-    size_matcher.negative_failure_message.should == <<-EOF
-Isn't life confusing enough?
-Instead of having to figure out the meaning of this:
-  should_not have_at_most(3).items_in_collection_with_size_method
-We recommend that you use this instead:
-  should have_at_least(4).items_in_collection_with_size_method
-EOF
-  end
-end
-
-describe "have(n).items(args, block)" do
-  it "should pass args to target" do
-    target = mock("target")
-    target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
-    target.should have(3).items("arg1","arg2")
-  end
-
-  it "should pass block to target" do
-    target = mock("target")
-    block = lambda { 5 }
-    target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
-    target.should have(3).items("arg1","arg2", block)
-  end
-end
-
-describe "have(n).items where target IS a collection" do
-  it "should reference the number of items IN the collection" do
-    [1,2,3].should have(3).items
-  end
-
-  it "should fail when the number of items IN the collection is not as expected" do
-    lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
-  end
-end
-
-describe "have(n).characters where target IS a String" do
-  it "should pass if the length is correct" do
-    "this string".should have(11).characters
-  end
-
-  it "should fail if the length is incorrect" do
-    lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
-  end
-end
-
-describe "have(n).things on an object which is not a collection nor contains one" do
-  it "should fail" do
-    lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
-  end
-end
-
-describe Spec::Matchers::Have, "for a collection owner that implements #send" do
-  include HaveSpecHelper
-
-  before(:each) do
-    @collection = Object.new
-    def @collection.floozles; [1,2] end
-    def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
-  end
-  
-  it "should work in the straightforward case" do
-    lambda {
-      @collection.should have(2).floozles
-    }.should_not raise_error
-  end
-
-  it "should work when doing automatic pluralization" do
-    lambda {
-      @collection.should have_at_least(1).floozle
-    }.should_not raise_error
-  end
-
-  it "should blow up when the owner doesn't respond to that method" do
-    lambda {
-      @collection.should have(99).problems
-    }.should raise_error(NoMethodError, /problems/)
-  end
-end
-
-module Spec
-  module Matchers
-    describe Have do
-      it "should have method_missing as private" do
-        Have.private_instance_methods.should include("method_missing")
-      end
-      
-      describe "respond_to?" do
-        before :each do
-          @have = Have.new(:foo)
-          @a_method_which_have_defines = Have.instance_methods.first
-          @a_method_which_object_defines = Object.instance_methods.first
-        end
-        
-        it "should be true for a method which Have defines" do
-          @have.should respond_to(@a_method_which_have_defines)
-        end
-        
-        it "should be true for a method that it's superclass (Object) defines" do
-          @have.should respond_to(@a_method_which_object_defines)
-        end
-        
-        it "should be false for a method which neither Object nor nor Have defines" do
-          @have.should_not respond_to(:foo_bar_baz)
-        end
-        
-        it "should be false if the owner doesn't respond to the method" do
-          have = Have.new(99)
-          have.should_not respond_to(:problems)
-        end
-        
-        it "should be true if the owner responds to the method" do
-          have = Have.new(:a_symbol)
-          have.should respond_to(:to_sym)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/include_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/include_spec.rb
deleted file mode 100644
index 47ecb1d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/include_spec.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "should include(expected)" do
-  it "should pass if target includes expected" do
-    [1,2,3].should include(3)
-    "abc".should include("a")
-  end
-
-  it "should fail if target does not include expected" do
-    lambda {
-      [1,2,3].should include(4)
-    }.should fail_with("expected [1, 2, 3] to include 4")
-    lambda {
-      "abc".should include("d")
-    }.should fail_with("expected \"abc\" to include \"d\"")
-  end
-end
-
-describe "should include(with, multiple, args)" do
-  it "should pass if target includes all items" do
-    [1,2,3].should include(1,2,3)
-  end
-
-  it "should fail if target does not include any one of the items" do
-    lambda {
-      [1,2,3].should include(1,2,4)
-    }.should fail_with("expected [1, 2, 3] to include 1, 2 and 4")
-  end
-end
-
-describe "should_not include(expected)" do
-  it "should pass if target does not include expected" do
-    [1,2,3].should_not include(4)
-    "abc".should_not include("d")
-  end
-
-  it "should fail if target includes expected" do
-    lambda {
-      [1,2,3].should_not include(3)
-    }.should fail_with("expected [1, 2, 3] not to include 3")
-    lambda {
-      "abc".should_not include("c")
-    }.should fail_with("expected \"abc\" not to include \"c\"")
-  end
-end
-
-describe "should include(:key => value)" do
-  it "should pass if target is a Hash and includes the key/value pair" do
-    {:key => 'value'}.should include(:key => 'value')
-  end
-  it "should pass if target is a Hash and includes the key/value pair among others" do
-    {:key => 'value', :other => 'different'}.should include(:key => 'value')
-  end
-  it "should fail if target is a Hash and has a different value for key" do
-    lambda {
-      {:key => 'different'}.should include(:key => 'value')
-    }.should fail_with(%Q|expected {:key=>"different"} to include {:key=>"value"}|)
-  end
-  it "should fail if target is a Hash and has a different key" do
-    lambda {
-      {:other => 'value'}.should include(:key => 'value')
-    }.should fail_with(%Q|expected {:other=>"value"} to include {:key=>"value"}|)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/match_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/match_spec.rb
deleted file mode 100644
index f69f7ef..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/match_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "should match(expected)" do
-  it "should pass when target (String) matches expected (Regexp)" do
-    "string".should match(/tri/)
-  end
-
-  it "should fail when target (String) does not match expected (Regexp)" do
-    lambda {
-      "string".should match(/rings/)
-    }.should fail
-  end
-  
-  it "should provide message, expected and actual on failure" do
-    matcher = match(/rings/)
-    matcher.matches?("string")
-    matcher.failure_message.should == ["expected \"string\" to match /rings/", /rings/, "string"]
-  end
-end
-
-describe "should_not match(expected)" do
-  it "should pass when target (String) matches does not match (Regexp)" do
-    "string".should_not match(/rings/)
-  end
-
-  it "should fail when target (String) matches expected (Regexp)" do
-    lambda {
-      "string".should_not match(/tri/)
-    }.should fail
-  end
-
-  it "should provide message, expected and actual on failure" do
-    matcher = match(/tri/)
-    matcher.matches?("string")
-    matcher.negative_failure_message.should == ["expected \"string\" not to match /tri/", /tri/, "string"]
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/matcher_methods_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/matcher_methods_spec.rb
deleted file mode 100644
index 80cc985..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/matcher_methods_spec.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Matchers
-    context %Q{The Spec::Matchers module gets included in the execution context of every spec.
-This module should provide the following methods, each of which returns a Matcher object.} do
-      it "be_true" do
-        be_true.should be_an_instance_of(Be)
-      end
-      it "be_false" do
-        be_false.should be_an_instance_of(Be)
-      end
-      it "be_nil" do
-        be_nil.should be_an_instance_of(Be)
-      end
-      it "be_arbitrary_predicate" do
-        be_arbitrary_predicate.should be_an_instance_of(Be)
-      end
-      it "be_close" do
-        be_close(1,2).should be_an_instance_of(BeClose)
-      end
-      it "change" do
-        change("target", :message).should be_an_instance_of(Change)
-      end
-      it "eql" do
-        eql(:expected).should be_an_instance_of(Eql)
-      end
-      it "equal" do
-        equal(:expected).should be_an_instance_of(Equal)
-      end
-      it "have" do
-        have(0).should be_an_instance_of(Have)
-      end
-      it "have_exactly" do
-        have_exactly(0).should be_an_instance_of(Have)
-      end
-      it "have_at_least" do
-        have_at_least(0).should be_an_instance_of(Have)
-      end
-      it "have_at_most" do
-        have_at_most(0).should be_an_instance_of(Have)
-      end
-      it "include" do
-        include(:value).should be_an_instance_of(Include)
-      end
-      it "match" do
-        match(:value).should be_an_instance_of(Match)
-      end
-      it "raise_error" do
-        raise_error.should be_an_instance_of(RaiseError)
-        raise_error(NoMethodError).should be_an_instance_of(RaiseError)
-        raise_error(NoMethodError, "message").should be_an_instance_of(RaiseError)
-      end
-      it "satisfy" do
-        satisfy{}.should be_an_instance_of(Satisfy)
-      end
-      it "throw_symbol" do
-        throw_symbol.should be_an_instance_of(ThrowSymbol)
-        throw_symbol(:sym).should be_an_instance_of(ThrowSymbol)
-      end
-      it "respond_to" do
-        respond_to(:sym).should be_an_instance_of(RespondTo)
-      end
-    end
-    
-    describe "Spec::Matchers#method_missing" do
-      it "should convert be_xyz to Be(:be_xyz)" do
-        Be.should_receive(:new).with(:be_whatever)
-        be_whatever
-      end
-
-      it "should convert have_xyz to Has(:have_xyz)" do
-        Has.should_receive(:new).with(:have_whatever)
-        have_whatever
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/mock_constraint_matchers_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/mock_constraint_matchers_spec.rb
deleted file mode 100644
index 1292918..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/mock_constraint_matchers_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "The anything() mock argument constraint matcher" do
-  specify { anything.should == Object.new }
-  specify { anything.should == Class }
-  specify { anything.should == 1 }
-  specify { anything.should == "a string" }
-  specify { anything.should == :a_symbol }
-end
-
-describe "The boolean() mock argument constraint matcher" do
-  specify { boolean.should == true }
-  specify { boolean.should == false }
-  specify { boolean.should_not == Object.new }
-  specify { boolean.should_not == Class }
-  specify { boolean.should_not == 1 }
-  specify { boolean.should_not == "a string" }
-  specify { boolean.should_not == :a_symbol }
-end
-
-describe "The an_instance_of() mock argument constraint matcher" do
-  # NOTE - this is implemented as a predicate_matcher - see example_group_methods.rb
-  specify { an_instance_of(String).should == "string"  }
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/operator_matcher_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/operator_matcher_spec.rb
deleted file mode 100644
index ac2d360..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/operator_matcher_spec.rb
+++ /dev/null
@@ -1,191 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-require 'spec/expectations/differs/default'
-
-describe "should ==" do
-  
-  it "should delegate message to target" do
-    subject = "apple"
-    subject.should_receive(:==).with("apple").and_return(true)
-    subject.should == "apple"
-  end
-  
-  it "should return true on success" do
-    subject = "apple"
-    (subject.should == "apple").should be_true
-  end
-  
-  it "should fail when target.==(actual) returns false" do
-    subject = "apple"
-    Spec::Expectations.should_receive(:fail_with).with(%[expected: "orange",\n     got: "apple" (using ==)], "orange", "apple")
-    subject.should == "orange"
-  end
-  
-end
-
-describe "should_not ==" do
-  
-  it "should delegate message to target" do
-    subject = "orange"
-    subject.should_receive(:==).with("apple").and_return(false)
-    subject.should_not == "apple"
-  end
-  
-  it "should return true on success" do
-    subject = "apple"
-    (subject.should_not == "orange").should be_true
-  end
-
-  it "should fail when target.==(actual) returns false" do
-    subject = "apple"
-    Spec::Expectations.should_receive(:fail_with).with(%[expected not: == "apple",\n         got:    "apple"], "apple", "apple")
-    subject.should_not == "apple"
-  end
-  
-end
-
-describe "should ===" do
-  
-  it "should delegate message to target" do
-    subject = "apple"
-    subject.should_receive(:===).with("apple").and_return(true)
-    subject.should === "apple"
-  end
-  
-  it "should fail when target.===(actual) returns false" do
-    subject = "apple"
-    subject.should_receive(:===).with("orange").and_return(false)
-    Spec::Expectations.should_receive(:fail_with).with(%[expected: "orange",\n     got: "apple" (using ===)], "orange", "apple")
-    subject.should === "orange"
-  end
-  
-end
-
-describe "should_not ===" do
-  
-  it "should delegate message to target" do
-    subject = "orange"
-    subject.should_receive(:===).with("apple").and_return(false)
-    subject.should_not === "apple"
-  end
-  
-  it "should fail when target.===(actual) returns false" do
-    subject = "apple"
-    subject.should_receive(:===).with("apple").and_return(true)
-    Spec::Expectations.should_receive(:fail_with).with(%[expected not: === "apple",\n         got:     "apple"], "apple", "apple")
-    subject.should_not === "apple"
-  end
-
-end
-
-describe "should =~" do
-  
-  it "should delegate message to target" do
-    subject = "foo"
-    subject.should_receive(:=~).with(/oo/).and_return(true)
-    subject.should =~ /oo/
-  end
-  
-  it "should fail when target.=~(actual) returns false" do
-    subject = "fu"
-    subject.should_receive(:=~).with(/oo/).and_return(false)
-    Spec::Expectations.should_receive(:fail_with).with(%[expected: /oo/,\n     got: "fu" (using =~)], /oo/, "fu")
-    subject.should =~ /oo/
-  end
-
-end
-
-describe "should_not =~" do
-  
-  it "should delegate message to target" do
-    subject = "fu"
-    subject.should_receive(:=~).with(/oo/).and_return(false)
-    subject.should_not =~ /oo/
-  end
-  
-  it "should fail when target.=~(actual) returns false" do
-    subject = "foo"
-    subject.should_receive(:=~).with(/oo/).and_return(true)
-    Spec::Expectations.should_receive(:fail_with).with(%[expected not: =~ /oo/,\n         got:    "foo"], /oo/, "foo")
-    subject.should_not =~ /oo/
-  end
-
-end
-
-describe "should >" do
-  
-  it "should pass if > passes" do
-    4.should > 3
-  end
-
-  it "should fail if > fails" do
-    Spec::Expectations.should_receive(:fail_with).with(%[expected: > 5,\n     got:   4], 5, 4)
-    4.should > 5
-  end
-
-end
-
-describe "should >=" do
-  
-  it "should pass if >= passes" do
-    4.should > 3
-    4.should >= 4
-  end
-
-  it "should fail if > fails" do
-    Spec::Expectations.should_receive(:fail_with).with(%[expected: >= 5,\n     got:    4], 5, 4)
-    4.should >= 5
-  end
-
-end
-
-describe "should <" do
-  
-  it "should pass if < passes" do
-    4.should < 5
-  end
-
-  it "should fail if > fails" do
-    Spec::Expectations.should_receive(:fail_with).with(%[expected: < 3,\n     got:   4], 3, 4)
-    4.should < 3
-  end
-
-end
-
-describe "should <=" do
-  
-  it "should pass if <= passes" do
-    4.should <= 5
-    4.should <= 4
-  end
-
-  it "should fail if > fails" do
-    Spec::Expectations.should_receive(:fail_with).with(%[expected: <= 3,\n     got:    4], 3, 4)
-    4.should <= 3
-  end
-
-end
-
-describe Spec::Matchers::PositiveOperatorMatcher do
-
-  it "should work when the target has implemented #send" do
-    o = Object.new
-    def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
-    lambda {
-      o.should == o
-    }.should_not raise_error
-  end
-
-end
-
-describe Spec::Matchers::NegativeOperatorMatcher do
-
-  it "should work when the target has implemented #send" do
-    o = Object.new
-    def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
-    lambda {
-      o.should_not == :foo
-    }.should_not raise_error
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/raise_error_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/raise_error_spec.rb
deleted file mode 100644
index a500d3b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/raise_error_spec.rb
+++ /dev/null
@@ -1,315 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "should raise_error" do
-  it "should pass if anything is raised" do
-    lambda {raise}.should raise_error
-  end
-  
-  it "should fail if nothing is raised" do
-    lambda {
-      lambda {}.should raise_error
-    }.should fail_with("expected Exception but nothing was raised")
-  end
-end
-
-describe "should_not raise_error" do
-  it "should pass if nothing is raised" do
-    lambda {}.should_not raise_error
-  end
-  
-  it "should fail if anything is raised" do
-    lambda {
-      lambda {raise}.should_not raise_error
-    }.should fail_with("expected no Exception, got RuntimeError")
-  end
-end
-
-describe "should raise_error(message)" do
-  it "should pass if RuntimeError is raised with the right message" do
-    lambda {raise 'blah'}.should raise_error('blah')
-  end
-  it "should pass if RuntimeError is raised with a matching message" do
-    lambda {raise 'blah'}.should raise_error(/blah/)
-  end
-  it "should pass if any other error is raised with the right message" do
-    lambda {raise NameError.new('blah')}.should raise_error('blah')
-  end
-  it "should fail if RuntimeError error is raised with the wrong message" do
-    lambda do
-      lambda {raise 'blarg'}.should raise_error('blah')
-    end.should fail_with("expected Exception with \"blah\", got #<RuntimeError: blarg>")
-  end
-  it "should fail if any other error is raised with the wrong message" do
-    lambda do
-      lambda {raise NameError.new('blarg')}.should raise_error('blah')
-    end.should fail_with("expected Exception with \"blah\", got #<NameError: blarg>")
-  end
-end
-
-describe "should_not raise_error(message)" do
-  it "should pass if RuntimeError error is raised with the different message" do
-    lambda {raise 'blarg'}.should_not raise_error('blah')
-  end
-  it "should pass if any other error is raised with the wrong message" do
-    lambda {raise NameError.new('blarg')}.should_not raise_error('blah')
-  end
-  it "should fail if RuntimeError is raised with message" do
-    lambda do
-      lambda {raise 'blah'}.should_not raise_error('blah')
-    end.should fail_with(%Q|expected no Exception with "blah", got #<RuntimeError: blah>|)
-  end
-  it "should fail if any other error is raised with message" do
-    lambda do
-      lambda {raise NameError.new('blah')}.should_not raise_error('blah')
-    end.should fail_with(%Q|expected no Exception with "blah", got #<NameError: blah>|)
-  end
-end
-
-describe "should raise_error(NamedError)" do
-  it "should pass if named error is raised" do
-    lambda { non_existent_method }.should raise_error(NameError)
-  end
-  
-  it "should fail if nothing is raised" do
-    lambda {
-      lambda { }.should raise_error(NameError)
-    }.should fail_with("expected NameError but nothing was raised")
-  end
-  
-  it "should fail if another error is raised (NameError)" do
-    lambda {
-      lambda { raise }.should raise_error(NameError)
-    }.should fail_with("expected NameError, got RuntimeError")
-  end
-  
-  it "should fail if another error is raised (NameError)" do
-    lambda {
-      lambda { load "non/existent/file" }.should raise_error(NameError)
-    }.should fail_with(/expected NameError, got #<LoadError/)
-  end
-end
-
-describe "should_not raise_error(NamedError)" do
-  it "should pass if nothing is raised" do
-    lambda { }.should_not raise_error(NameError)
-  end
-  
-  it "should pass if another error is raised" do
-    lambda { raise }.should_not raise_error(NameError)
-  end
-  
-  it "should fail if named error is raised" do
-    lambda {
-      lambda { non_existent_method }.should_not raise_error(NameError)
-    }.should fail_with(/expected no NameError, got #<NameError: undefined/)
-  end  
-end
-
-describe "should raise_error(NamedError, error_message) with String" do
-  it "should pass if named error is raised with same message" do
-    lambda { raise "example message" }.should raise_error(RuntimeError, "example message")
-  end
-  
-  it "should fail if nothing is raised" do
-    lambda {
-      lambda {}.should raise_error(RuntimeError, "example message")
-    }.should fail_with("expected RuntimeError with \"example message\" but nothing was raised")
-  end
-  
-  it "should fail if incorrect error is raised" do
-    lambda {
-      lambda { raise }.should raise_error(NameError, "example message")
-    }.should fail_with("expected NameError with \"example message\", got RuntimeError")
-  end
-  
-  it "should fail if correct error is raised with incorrect message" do
-    lambda {
-      lambda { raise RuntimeError.new("not the example message") }.should raise_error(RuntimeError, "example message")
-    }.should fail_with(/expected RuntimeError with \"example message\", got #<RuntimeError: not the example message/)
-  end
-end
-
-describe "should raise_error(NamedError, error_message) { |err| ... }" do
-  it "should yield exception if named error is raised with same message" do
-    ran = false
-
-    lambda {
-      raise "example message"
-    }.should raise_error(RuntimeError, "example message") { |err|
-      ran = true
-      err.class.should == RuntimeError
-      err.message.should == "example message"
-    }
-
-    ran.should == true
-  end
-
-  it "yielded block should be able to fail on it's own right" do
-    ran, passed = false, false
-
-    lambda {
-      lambda {
-        raise "example message"
-      }.should raise_error(RuntimeError, "example message") { |err|
-        ran = true
-        5.should == 4
-        passed = true
-      }
-    }.should fail_with(/expected: 4/m)
-
-    ran.should == true
-    passed.should == false
-  end
-
-  it "should NOT yield exception if no error was thrown" do
-    ran = false
-
-    lambda {
-      lambda {}.should raise_error(RuntimeError, "example message") { |err|
-        ran = true
-      }
-    }.should fail_with("expected RuntimeError with \"example message\" but nothing was raised")
-
-    ran.should == false
-  end
-
-  it "should not yield exception if error class is not matched" do
-    ran = false
-
-    lambda {
-      lambda {
-        raise "example message"
-      }.should raise_error(SyntaxError, "example message") { |err|
-        ran = true
-      }
-    }.should fail_with("expected SyntaxError with \"example message\", got #<RuntimeError: example message>")
-
-    ran.should == false
-  end
-
-  it "should NOT yield exception if error message is not matched" do
-    ran = false
-
-    lambda {
-      lambda {
-        raise "example message"
-      }.should raise_error(RuntimeError, "different message") { |err|
-        ran = true
-      }
-    }.should fail_with("expected RuntimeError with \"different message\", got #<RuntimeError: example message>")
-
-    ran.should == false
-  end
-end
-
-describe "should_not raise_error(NamedError, error_message) { |err| ... }" do
-  it "should pass if nothing is raised" do
-    ran = false
-
-    lambda {}.should_not raise_error(RuntimeError, "example message") { |err|
-      ran = true
-    }
-
-    ran.should == false
-  end
-
-  it "should pass if a different error is raised" do
-    ran = false
-
-    lambda { raise }.should_not raise_error(NameError, "example message") { |err|
-      ran = true
-    }
-
-    ran.should == false
-  end
-
-  it "should pass if same error is raised with different message" do
-    ran = false
-
-    lambda {
-      raise RuntimeError.new("not the example message")
-    }.should_not raise_error(RuntimeError, "example message") { |err|
-      ran = true
-    }
-
-    ran.should == false
-  end
-
-  it "should fail if named error is raised with same message" do
-    ran = false
-
-    lambda {
-      lambda {
-        raise "example message"
-      }.should_not raise_error(RuntimeError, "example message") { |err|
-        ran = true
-      }
-    }.should fail_with("expected no RuntimeError with \"example message\", got #<RuntimeError: example message>")
-
-    ran.should == false
-  end
-end
-
-describe "should_not raise_error(NamedError, error_message) with String" do
-  it "should pass if nothing is raised" do
-    lambda {}.should_not raise_error(RuntimeError, "example message")
-  end
-  
-  it "should pass if a different error is raised" do
-    lambda { raise }.should_not raise_error(NameError, "example message")
-  end
-  
-  it "should pass if same error is raised with different message" do
-    lambda { raise RuntimeError.new("not the example message") }.should_not raise_error(RuntimeError, "example message")
-  end
-  
-  it "should fail if named error is raised with same message" do
-    lambda {
-      lambda { raise "example message" }.should_not raise_error(RuntimeError, "example message")
-    }.should fail_with("expected no RuntimeError with \"example message\", got #<RuntimeError: example message>")
-  end
-end
-
-describe "should raise_error(NamedError, error_message) with Regexp" do
-  it "should pass if named error is raised with matching message" do
-    lambda { raise "example message" }.should raise_error(RuntimeError, /ample mess/)
-  end
-  
-  it "should fail if nothing is raised" do
-    lambda {
-      lambda {}.should raise_error(RuntimeError, /ample mess/)
-    }.should fail_with("expected RuntimeError with message matching /ample mess/ but nothing was raised")
-  end
-  
-  it "should fail if incorrect error is raised" do
-    lambda {
-      lambda { raise }.should raise_error(NameError, /ample mess/)
-    }.should fail_with("expected NameError with message matching /ample mess/, got RuntimeError")
-  end
-  
-  it "should fail if correct error is raised with incorrect message" do
-    lambda {
-      lambda { raise RuntimeError.new("not the example message") }.should raise_error(RuntimeError, /less than ample mess/)
-    }.should fail_with("expected RuntimeError with message matching /less than ample mess/, got #<RuntimeError: not the example message>")
-  end
-end
-
-describe "should_not raise_error(NamedError, error_message) with Regexp" do
-  it "should pass if nothing is raised" do
-    lambda {}.should_not raise_error(RuntimeError, /ample mess/)
-  end
-  
-  it "should pass if a different error is raised" do
-    lambda { raise }.should_not raise_error(NameError, /ample mess/)
-  end
-  
-  it "should pass if same error is raised with non-matching message" do
-    lambda { raise RuntimeError.new("non matching message") }.should_not raise_error(RuntimeError, /ample mess/)
-  end
-  
-  it "should fail if named error is raised with matching message" do
-    lambda {
-      lambda { raise "example message" }.should_not raise_error(RuntimeError, /ample mess/)
-    }.should fail_with("expected no RuntimeError with message matching /ample mess/, got #<RuntimeError: example message>")
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/respond_to_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/respond_to_spec.rb
deleted file mode 100644
index f5c7953..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/respond_to_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "should respond_to(:sym)" do
-  
-  it "should pass if target responds to :sym" do
-    Object.new.should respond_to(:methods)
-  end
-  
-  it "should fail target does not respond to :sym" do
-    lambda {
-      "this string".should respond_to(:some_method)
-    }.should fail_with("expected \"this string\" to respond to :some_method")
-  end
-  
-end
-
-describe "should respond_to(message1, message2)" do
-  
-  it "should pass if target responds to both messages" do
-    Object.new.should respond_to('methods', 'inspect')
-  end
-  
-  it "should fail target does not respond to first message" do
-    lambda {
-      Object.new.should respond_to('method_one', 'inspect')
-    }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
-  end
-  
-  it "should fail target does not respond to second message" do
-    lambda {
-      Object.new.should respond_to('inspect', 'method_one')
-    }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
-  end
-  
-  it "should fail target does not respond to either message" do
-    lambda {
-      Object.new.should respond_to('method_one', 'method_two')
-    }.should fail_with(/expected #<Object:.*> to respond to "method_one", "method_two"/)
-  end
-end
-
-describe "should_not respond_to(:sym)" do
-  
-  it "should pass if target does not respond to :sym" do
-    Object.new.should_not respond_to(:some_method)
-  end
-  
-  it "should fail target responds to :sym" do
-    lambda {
-      Object.new.should_not respond_to(:methods)
-    }.should fail_with(/expected #<Object:.*> not to respond to :methods/)
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/satisfy_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/satisfy_spec.rb
deleted file mode 100644
index 7e8d6f9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/satisfy_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "should satisfy { block }" do
-  it "should pass if block returns true" do
-    true.should satisfy { |val| val }
-    true.should satisfy do |val|
-      val
-    end
-  end
-
-  it "should fail if block returns false" do
-    lambda {
-      false.should satisfy { |val| val }
-    }.should fail_with("expected false to satisfy block")
-    lambda do
-      false.should satisfy do |val|
-        val
-      end
-    end.should fail_with("expected false to satisfy block")
-  end
-end
-
-describe "should_not satisfy { block }" do
-  it "should pass if block returns false" do
-    false.should_not satisfy { |val| val }
-    false.should_not satisfy do |val|
-      val
-    end
-  end
-
-  it "should fail if block returns true" do
-    lambda {
-      true.should_not satisfy { |val| val }
-    }.should fail_with("expected true not to satisfy block")
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/simple_matcher_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/simple_matcher_spec.rb
deleted file mode 100644
index 9841c53..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/simple_matcher_spec.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Matchers
-    describe SimpleMatcher do
-      it "should pass match arg to block" do
-        actual = nil
-        matcher = simple_matcher("message") do |given| actual = given end
-        matcher.matches?("foo")
-        actual.should == "foo"
-      end
-      
-      it "should provide a stock failure message" do
-        matcher = simple_matcher("thing") do end
-        matcher.matches?("other")
-        matcher.failure_message.should =~ /expected \"thing\" but got \"other\"/
-      end
-      
-      it "should provide a stock negative failure message" do
-        matcher = simple_matcher("thing") do end
-        matcher.matches?("other")
-        matcher.negative_failure_message.should =~ /expected not to get \"thing\", but got \"other\"/
-      end
-      
-      it "should provide the given description" do
-        matcher = simple_matcher("thing") do end
-        matcher.description.should =="thing"
-      end
-      
-      it "should fail if a wrapped 'should' fails" do
-        matcher = simple_matcher("should fail") do
-          2.should == 3
-        end
-        lambda do
-          matcher.matches?("anything").should be_true
-        end.should fail_with(/expected: 3/)
-      end
-    end
-    
-    describe "with arity of 2" do
-      it "should provide the matcher so you can access its messages" do
-        provided_matcher = nil
-        matcher = simple_matcher("thing") do |given, matcher|
-          provided_matcher = matcher
-        end
-        matcher.matches?("anything")
-        provided_matcher.should equal(matcher)
-      end
-      
-      it "should support a custom failure message" do
-        matcher = simple_matcher("thing") do |given, matcher|
-          matcher.failure_message = "custom message"
-        end
-        matcher.matches?("other")
-        matcher.failure_message.should == "custom message"
-      end
-
-      it "should complain when asked for a failure message if you don't give it a description or a message" do
-        matcher = simple_matcher do |given, matcher| end
-        matcher.matches?("other")
-        matcher.failure_message.should =~ /No description provided/
-      end
-
-      it "should support a custom negative failure message" do
-        matcher = simple_matcher("thing") do |given, matcher|
-          matcher.negative_failure_message = "custom message"
-        end
-        matcher.matches?("other")
-        matcher.negative_failure_message.should == "custom message"
-      end
-      
-      it "should complain when asked for a negative failure message if you don't give it a description or a message" do
-        matcher = simple_matcher do |given, matcher| end
-        matcher.matches?("other")
-        matcher.negative_failure_message.should =~ /No description provided/
-      end
-
-      it "should support a custom description" do
-        matcher = simple_matcher("thing") do |given, matcher|
-          matcher.description = "custom message"
-        end
-        matcher.matches?("description")
-        matcher.description.should == "custom message"
-      end
-
-      it "should tell you no description was provided when it doesn't receive one" do
-        matcher = simple_matcher do end
-        matcher.description.should =~ /No description provided/
-      end
-    end
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/throw_symbol_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/throw_symbol_spec.rb
deleted file mode 100644
index 7459565..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/matchers/throw_symbol_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Matchers
-    describe ThrowSymbol, "(constructed with no Symbol)" do
-      before(:each) { @matcher = ThrowSymbol.new }
-
-      it "should match if any Symbol is thrown" do
-        @matcher.matches?(lambda{ throw :sym }).should be_true
-      end
-      it "should not match if no Symbol is thrown" do
-        @matcher.matches?(lambda{ }).should be_false
-      end
-      it "should provide a failure message" do
-        @matcher.matches?(lambda{})
-        @matcher.failure_message.should == "expected a Symbol but nothing was thrown"
-      end
-      it "should provide a negative failure message" do
-        @matcher.matches?(lambda{ throw :sym})
-        @matcher.negative_failure_message.should == "expected no Symbol, got :sym"
-      end
-    end
-    
-    describe ThrowSymbol, "(constructed with a Symbol)" do
-      before(:each) { @matcher = ThrowSymbol.new(:sym) }
-      
-      it "should match if correct Symbol is thrown" do
-        @matcher.matches?(lambda{ throw :sym }).should be_true
-      end
-      it "should not match if no Symbol is thrown" do
-        @matcher.matches?(lambda{ }).should be_false
-      end
-      it "should not match if correct Symbol is thrown" do
-        @matcher.matches?(lambda{ throw :other_sym }).should be_false
-        @matcher.failure_message.should == "expected :sym, got :other_sym"
-      end
-      it "should provide a failure message when no Symbol is thrown" do
-        @matcher.matches?(lambda{})
-        @matcher.failure_message.should == "expected :sym but nothing was thrown"
-      end
-      it "should provide a failure message when wrong Symbol is thrown" do
-        @matcher.matches?(lambda{ throw :other_sym })
-        @matcher.failure_message.should == "expected :sym, got :other_sym"
-      end
-      it "should provide a negative failure message" do
-        @matcher.matches?(lambda{ throw :sym })
-        @matcher.negative_failure_message.should == "expected :sym not to be thrown"
-      end
-      it "should only match NameErrors raised by uncaught throws" do
-        @matcher.matches?(lambda{ sym }).should be_false
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/any_number_of_times_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/any_number_of_times_spec.rb
deleted file mode 100644
index fa6061b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/any_number_of_times_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    
-    describe "AnyNumberOfTimes" do
-      before(:each) do
-        @mock = Mock.new("test mock")
-      end
-
-      it "should pass if any number of times method is called many times" do
-        @mock.should_receive(:random_call).any_number_of_times
-        (1..10).each do
-          @mock.random_call
-        end
-      end
-
-      it "should pass if any number of times method is called once" do
-        @mock.should_receive(:random_call).any_number_of_times
-        @mock.random_call
-      end
-      
-      it "should pass if any number of times method is not called" do
-        @mock.should_receive(:random_call).any_number_of_times
-      end
-
-      it "should return the mocked value when called after a similar stub" do
-        @mock.stub!(:message).and_return :stub_value
-        @mock.should_receive(:message).any_number_of_times.and_return(:mock_value)
-        @mock.message.should == :mock_value
-        @mock.message.should == :mock_value
-      end
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/argument_expectation_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/argument_expectation_spec.rb
deleted file mode 100644
index 2bebbdd..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/argument_expectation_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe ArgumentExpectation do
-      it "should consider an object that responds to #matches? and #description to be a matcher" do
-        argument_expecatation = Spec::Mocks::ArgumentExpectation.new([])
-        obj = mock("matcher")
-        obj.should_receive(:respond_to?).with(:matches?).and_return(true)
-        obj.should_receive(:respond_to?).with(:description).and_return(true)
-        argument_expecatation.is_matcher?(obj).should be_true
-      end
-
-      it "should NOT consider an object that only responds to #matches? to be a matcher" do
-        argument_expecatation = Spec::Mocks::ArgumentExpectation.new([])
-        obj = mock("matcher")
-        obj.should_receive(:respond_to?).with(:matches?).and_return(true)
-        obj.should_receive(:respond_to?).with(:description).and_return(false)
-        argument_expecatation.is_matcher?(obj).should be_false
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/at_least_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/at_least_spec.rb
deleted file mode 100644
index 01b133d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/at_least_spec.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "at_least" do
-      before(:each) do
-        @mock = Mock.new("test mock")
-      end
-
-      it "should fail if method is never called" do
-        @mock.should_receive(:random_call).at_least(4).times
-          lambda do
-        @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should fail when called less than n times" do
-        @mock.should_receive(:random_call).at_least(4).times
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should fail when at least once method is never called" do
-        @mock.should_receive(:random_call).at_least(:once)
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should fail when at least twice method is called once" do
-        @mock.should_receive(:random_call).at_least(:twice)
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should fail when at least twice method is never called" do
-        @mock.should_receive(:random_call).at_least(:twice)
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should pass when at least n times method is called exactly n times" do
-        @mock.should_receive(:random_call).at_least(4).times
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at least n times method is called n plus 1 times" do
-        @mock.should_receive(:random_call).at_least(4).times
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at least once method is called once" do
-        @mock.should_receive(:random_call).at_least(:once)
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at least once method is called twice" do
-        @mock.should_receive(:random_call).at_least(:once)
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at least twice method is called three times" do
-        @mock.should_receive(:random_call).at_least(:twice)
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at least twice method is called twice" do
-        @mock.should_receive(:random_call).at_least(:twice)
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/at_most_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/at_most_spec.rb
deleted file mode 100644
index f3c5e21..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/at_most_spec.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "at_most" do
-      before(:each) do
-        @mock = Mock.new("test mock")
-      end
-
-      it "should fail when at most n times method is called n plus 1 times" do
-        @mock.should_receive(:random_call).at_most(4).times
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should fail when at most once method is called twice" do
-        @mock.should_receive(:random_call).at_most(:once)
-        @mock.random_call
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should fail when at most twice method is called three times" do
-        @mock.should_receive(:random_call).at_most(:twice)
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should pass when at most n times method is called exactly n times" do
-        @mock.should_receive(:random_call).at_most(4).times
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at most n times method is called less than n times" do
-        @mock.should_receive(:random_call).at_most(4).times
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at most n times method is never called" do
-        @mock.should_receive(:random_call).at_most(4).times
-        @mock.rspec_verify
-      end
-
-      it "should pass when at most once method is called once" do
-        @mock.should_receive(:random_call).at_most(:once)
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at most once method is never called" do
-        @mock.should_receive(:random_call).at_most(:once)
-        @mock.rspec_verify
-      end
-
-      it "should pass when at most twice method is called once" do
-        @mock.should_receive(:random_call).at_most(:twice)
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at most twice method is called twice" do
-        @mock.should_receive(:random_call).at_most(:twice)
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass when at most twice method is never called" do
-        @mock.should_receive(:random_call).at_most(:twice)
-        @mock.rspec_verify
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_10260_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_10260_spec.rb
deleted file mode 100644
index 2f7b580..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_10260_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "An RSpec Mock" do
-  it "should hide internals in its inspect representation" do
-    m = mock('cup')
-    m.inspect.should =~ /#<Spec::Mocks::Mock:0x[a-f0-9.]+ @name="cup">/
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_10263_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_10263_spec.rb
deleted file mode 100644
index e321922..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_10263_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-describe "Mock" do
-  before do
-    @mock = mock("test mock")
-  end
-  
-  specify "when one example has an expectation (non-mock) inside the block passed to the mock" do
-    @mock.should_receive(:msg) do |b|
-      b.should be_true #this call exposes the problem
-    end
-    @mock.msg(false) rescue nil
-  end
-  
-  specify "then the next example should behave as expected instead of saying" do
-    @mock.should_receive(:foobar)
-    @mock.foobar
-    @mock.rspec_verify
-    begin
-      @mock.foobar
-    rescue Exception => e
-      e.message.should == "Mock 'test mock' received unexpected message :foobar with (no args)"
-    end
-  end 
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_11545_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_11545_spec.rb
deleted file mode 100644
index 212a50e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_11545_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-class LiarLiarPantsOnFire
-  include Spec::MetaClass
-  extend Spec::MetaClass
-  def respond_to?(sym)
-    true
-  end
-  
-  def self.respond_to?(sym)
-    true
-  end
-end
-  
-describe 'should_receive' do
-  before(:each) do
-    @liar = LiarLiarPantsOnFire.new
-  end
-  
-  it "should work when object lies about responding to a method" do
-    @liar.should_receive(:something)
-    @liar.something
-  end
-
-  it 'should work when class lies about responding to a method' do
-    LiarLiarPantsOnFire.should_receive(:something)
-    LiarLiarPantsOnFire.something
-  end
-  
-  it 'should cleanup after itself' do
-    LiarLiarPantsOnFire.metaclass.instance_methods.should_not include("something")
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_15719_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_15719_spec.rb
deleted file mode 100644
index 82d49ea..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_15719_spec.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "mock failure" do
-      
-      it "should tell you when it receives the right message with the wrong args" do
-        m = mock("foo")
-        m.should_receive(:bar).with("message")
-        lambda {
-          m.bar("different message")
-        }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock 'foo' expected :bar with ("message") but received it with ("different message")})
-        m.bar("message") # allows the spec to pass
-      end
-
-      it "should tell you when it receives the right message with the wrong args if you stub the method" do
-        pending("fix bug 15719")
-        # NOTE - for whatever reason, if you use a the block style of pending here,
-        # rcov gets unhappy. Don't know why yet.
-        m = mock("foo")
-        m.stub!(:bar)
-        m.should_receive(:bar).with("message")
-        lambda {
-          m.bar("different message")
-        }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock 'foo' expected :bar with ("message") but received it with ("different message")})
-        m.bar("message") # allows the spec to pass
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_496.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_496.rb
deleted file mode 100644
index a911f3d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_496.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-class BaseClass
-end
-
-class SubClass < BaseClass
-end
-
-describe "a message expectation on a base class object" do
-  it "should correctly pick up message sent to it subclass" do
-    pending("fix for http://rspec.lighthouseapp.com/projects/5645-rspec/tickets/496") do
-      BaseClass.should_receive(:new).once
-      SubClass.new
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_7611_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_7611_spec.rb
deleted file mode 100644
index 6c9705b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_7611_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Bug7611
-  class Foo
-  end
-
-  class Bar < Foo
-  end
-
-  describe "A Partial Mock" do
-    it "should respect subclasses" do
-      Foo.stub!(:new).and_return(Object.new)
-    end
-
-    it "should" do
-      Bar.new.class.should == Bar
-    end 
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_7805_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_7805_spec.rb
deleted file mode 100644
index f7edfac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_7805_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Bug7805
-  #This is really a duplicate of 8302
-
-  describe "Stubs should correctly restore module methods" do
-    it "1 - stub the open method" do
-      File.stub!(:open).and_return("something")
-      File.open.should == "something"
-    end
-    it "2 - use File.open to create example.txt" do
-      filename = "#{File.dirname(__FILE__)}/example-#{Time.new.to_i}.txt"
-      File.exist?(filename).should be_false
-      file = File.open(filename,'w')
-      file.close
-      File.exist?(filename).should be_true
-      File.delete(filename)
-      File.exist?(filename).should be_false
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_8165_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_8165_spec.rb
deleted file mode 100644
index 7edc3c0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_8165_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "An object where respond_to? is true and does not have method" do
-  # When should_receive(:sym) is sent to any object, the Proxy sends
-  # respond_to?(:sym) to that object to see if the method should be proxied.
-  #
-  # If respond_to? itself is proxied, then when the Proxy sends respond_to?
-  # to the object, the proxy is invoked and responds yes (if so set in the spec).
-  # When the object does NOT actually respond to :sym, an exception is thrown
-  # when trying to proxy it.
-  #
-  # The fix was to keep track of whether :respond_to? had been proxied and, if
-  # so, call the munged copy of :respond_to? on the object.
-
-  it "should not raise an exception for Object" do
-    obj = Object.new
-    obj.should_receive(:respond_to?).with(:foobar).and_return(true)
-    obj.should_receive(:foobar).and_return(:baz)
-    obj.respond_to?(:foobar).should be_true
-    obj.foobar.should == :baz
-  end
-
-  it "should not raise an exception for mock" do
-    obj = mock("obj")
-    obj.should_receive(:respond_to?).with(:foobar).and_return(true)
-    obj.should_receive(:foobar).and_return(:baz)
-    obj.respond_to?(:foobar).should be_true
-    obj.foobar.should == :baz
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_8302_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_8302_spec.rb
deleted file mode 100644
index a41df43..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/bug_report_8302_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Bug8302
-  class Foo
-    def Foo.class_method(arg)
-    end
-  
-    def instance_bar(arg)
-    end
-  end
-
-  describe "Bug report 8302:" do
-    it "class method is not restored correctly when proxied" do
-      Foo.should_not_receive(:class_method).with(Array.new)
-      Foo.rspec_verify
-      Foo.class_method(Array.new)
-    end
-
-    it "instance method is not restored correctly when proxied" do
-      foo = Foo.new
-      foo.should_not_receive(:instance_bar).with(Array.new)
-      foo.rspec_verify
-      foo.instance_bar(Array.new)
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/failing_mock_argument_constraints_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/failing_mock_argument_constraints_spec.rb
deleted file mode 100644
index 0b24e00..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/failing_mock_argument_constraints_spec.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "failing MockArgumentConstraints" do
-      before(:each) do
-        @mock = mock("test mock")
-        @reporter = Mock.new("reporter", :null_object => true)
-      end
-      
-      after(:each) do
-        @mock.rspec_reset
-      end
-
-      it "should reject non boolean" do
-        @mock.should_receive(:random_call).with(boolean())
-        lambda do
-          @mock.random_call("false")
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should reject non numeric" do
-        @mock.should_receive(:random_call).with(an_instance_of(Numeric))
-        lambda do
-          @mock.random_call("1")
-        end.should raise_error(MockExpectationError)
-      end
-      
-      it "should reject non string" do
-        @mock.should_receive(:random_call).with(an_instance_of(String))
-        lambda do
-          @mock.random_call(123)
-        end.should raise_error(MockExpectationError)
-      end
-      
-      it "should reject goose when expecting a duck" do
-        @mock.should_receive(:random_call).with(duck_type(:abs, :div))
-        lambda { @mock.random_call("I don't respond to :abs or :div") }.should raise_error(MockExpectationError)
-      end
-
-      it "should fail if regexp does not match submitted string" do
-        @mock.should_receive(:random_call).with(/bcd/)
-        lambda { @mock.random_call("abc") }.should raise_error(MockExpectationError)
-      end
-      
-      it "should fail if regexp does not match submitted regexp" do
-        @mock.should_receive(:random_call).with(/bcd/)
-        lambda { @mock.random_call(/bcde/) }.should raise_error(MockExpectationError)
-      end
-      
-      it "should fail for a hash w/ wrong values" do
-        @mock.should_receive(:random_call).with(:a => "b", :c => "d")
-        lambda do
-          @mock.random_call(:a => "b", :c => "e")
-        end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(:a=>\"b\", :c=>\"e\"|:c=>\"e\", :a=>\"b\")\}\)/)
-      end
-      
-      it "should fail for a hash w/ wrong keys" do
-        @mock.should_receive(:random_call).with(:a => "b", :c => "d")
-        lambda do
-          @mock.random_call("a" => "b", "c" => "d")
-        end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(\"a\"=>\"b\", \"c\"=>\"d\"|\"c\"=>\"d\", \"a\"=>\"b\")\}\)/)
-      end
-      
-      it "should match against a Matcher" do
-        lambda do
-          @mock.should_receive(:msg).with(equal(3))
-          @mock.msg(37)
-        end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (equal 3) but received it with (37)")
-      end
-      
-      it "should fail no_args with one arg" do
-        lambda do
-          @mock.should_receive(:msg).with(no_args)
-          @mock.msg(37)
-        end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (no args) but received it with (37)")
-      end
-      
-      it "should fail hash_including with missing key" do
-         lambda do
-           @mock.should_receive(:msg).with(hash_including(:a => 1))
-           @mock.msg({})
-         end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (hash_including(:a=>1)) but received it with ({})")
-      end
-
-      it "should fail with block constraints" do
-        lambda do
-          @mock.should_receive(:msg).with {|arg| arg.should == :received }
-          @mock.msg :no_msg_for_you
-        end.should raise_error(Spec::Expectations::ExpectationNotMetError, /expected: :received.*\s*.*got: :no_msg_for_you/)
-      end
-            
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/hash_including_matcher_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/hash_including_matcher_spec.rb
deleted file mode 100644
index 17f174e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/hash_including_matcher_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    module ArgumentConstraints
-      describe HashIncludingConstraint do
-        
-        it "should describe itself properly" do
-          HashIncludingConstraint.new(:a => 1).description.should == "hash_including(:a=>1)"
-        end      
-
-        describe "passing" do
-          it "should match the same hash" do
-            hash_including(:a => 1).should == {:a => 1}
-          end
-
-          it "should match a hash with extra stuff" do
-            hash_including(:a => 1).should == {:a => 1, :b => 2}
-          end
-          
-          describe "when matching against other constraints" do
-            it "should match an int against anything()" do
-              hash_including(:a => anything, :b => 2).should == {:a => 1, :b => 2}
-            end
-
-            it "should match a string against anything()" do
-              hash_including(:a => anything, :b => 2).should == {:a => "1", :b => 2}
-            end
-          end
-        end
-        
-        describe "failing" do
-          it "should not match a non-hash" do
-            hash_including(:a => 1).should_not == 1
-          end
-
-
-          it "should not match a hash with a missing key" do
-            hash_including(:a => 1).should_not == {:b => 2}
-          end
-
-          it "should not match a hash with an incorrect value" do
-            hash_including(:a => 1, :b => 2).should_not == {:a => 1, :b => 3}
-          end
-
-          it "should not match when values are nil but keys are different" do
-            hash_including(:a => nil).should_not == {:b => nil}
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_ordering_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_ordering_spec.rb
deleted file mode 100644
index 919da29..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_ordering_spec.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Mocks
-
-    describe "Mock ordering" do
-
-      before do
-        @mock = mock("test mock")
-      end
-      
-      after do
-        @mock.rspec_reset
-      end
-
-      it "should pass two calls in order" do
-        @mock.should_receive(:one).ordered
-        @mock.should_receive(:two).ordered
-        @mock.one
-        @mock.two
-        @mock.rspec_verify
-      end
-
-      it "should pass three calls in order" do
-        @mock.should_receive(:one).ordered
-        @mock.should_receive(:two).ordered
-        @mock.should_receive(:three).ordered
-        @mock.one
-        @mock.two
-        @mock.three
-        @mock.rspec_verify
-      end
-
-      it "should fail if second call comes first" do
-        @mock.should_receive(:one).ordered
-        @mock.should_receive(:two).ordered
-        lambda do
-          @mock.two
-        end.should raise_error(MockExpectationError, "Mock 'test mock' received :two out of order")
-      end
-
-      it "should fail if third call comes first" do
-        @mock.should_receive(:one).ordered
-        @mock.should_receive(:two).ordered
-        @mock.should_receive(:three).ordered
-        @mock.one
-        lambda do
-          @mock.three
-        end.should raise_error(MockExpectationError, "Mock 'test mock' received :three out of order")
-      end
-      
-      it "should fail if third call comes second" do
-        @mock.should_receive(:one).ordered
-        @mock.should_receive(:two).ordered
-        @mock.should_receive(:three).ordered
-        @mock.one
-        lambda do
-          @mock.three
-        end.should raise_error(MockExpectationError, "Mock 'test mock' received :three out of order")
-      end
-
-      it "should ignore order of non ordered calls" do
-        @mock.should_receive(:ignored_0)
-        @mock.should_receive(:ordered_1).ordered
-        @mock.should_receive(:ignored_1)
-        @mock.should_receive(:ordered_2).ordered
-        @mock.should_receive(:ignored_2)
-        @mock.should_receive(:ignored_3)
-        @mock.should_receive(:ordered_3).ordered
-        @mock.should_receive(:ignored_4)
-        @mock.ignored_3
-        @mock.ordered_1
-        @mock.ignored_0
-        @mock.ordered_2
-        @mock.ignored_4
-        @mock.ignored_2
-        @mock.ordered_3
-        @mock.ignored_1
-        @mock.rspec_verify
-      end
-            
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_space_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_space_spec.rb
deleted file mode 100644
index 23ffd01..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_space_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-require 'spec/mocks'
-
-module Spec
-  module Mocks
-    describe Space do
-      before :each do
-        @space = Space.new
-        klazz = Class.new do
-          def rspec_verify
-            @verified = true
-          end
-          def verified?
-            @verified
-          end
-          def rspec_reset
-            @reset = true
-          end
-          def reset?
-            @reset
-          end
-        end
-        @m1 = klazz.new
-        @m2 = klazz.new
-      end
-      it "should verify all mocks within" do
-        @space.add(@m1)
-        @space.add(@m2)
-        @space.verify_all
-        @m1.should be_verified
-        @m2.should be_verified
-      end
-      it "should reset all mocks within" do
-        @space.add(m1 = mock("mock1"))
-        @space.add(m2 = mock("mock2"))
-        m1.should_receive(:rspec_reset)
-        m2.should_receive(:rspec_reset)
-        @space.reset_all
-      end
-      it "should clear internal mocks on reset_all" do
-        @space.add(m = mock("mock"))
-        @space.reset_all
-        @space.instance_eval { mocks.empty? }.should be_true
-      end
-      it "should only add an instance once" do
-        @space.add(m1 = mock("mock1"))
-        @space.add(m1)
-        m1.should_receive(:rspec_verify)
-        @space.verify_all
-      end
-    end
-  end
-end
-    
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_spec.rb
deleted file mode 100644
index 3a55d36..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/mock_spec.rb
+++ /dev/null
@@ -1,555 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Mocks
-    describe Mock do
-
-      before(:each) do
-        @mock = mock("test mock")
-      end
-      
-      after(:each) do
-        @mock.rspec_reset
-      end
-      
-      it "should report line number of expectation of unreceived message" do
-        expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
-        begin
-          @mock.rspec_verify
-          violated
-        rescue MockExpectationError => e
-          # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
-          e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
-        end
-      end
-      
-      it "should report line number of expectation of unreceived message after #should_receive after similar stub" do
-        @mock.stub!(:wont_happen)
-        expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
-        begin
-          @mock.rspec_verify
-          violated
-        rescue MockExpectationError => e
-          # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
-          e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
-        end
-      end
-      
-      it "should pass when not receiving message specified as not to be received" do
-        @mock.should_not_receive(:not_expected)
-        @mock.rspec_verify
-      end
-      
-      it "should pass when receiving message specified as not to be received with different args" do
-        @mock.should_not_receive(:message).with("unwanted text")
-        @mock.should_receive(:message).with("other text")
-        @mock.message "other text"
-        @mock.rspec_verify
-      end
-      
-      it "should fail when receiving message specified as not to be received" do
-        @mock.should_not_receive(:not_expected)
-        lambda {
-          @mock.not_expected
-          violated
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
-      end
-      
-      it "should fail when receiving message specified as not to be received with args" do
-        @mock.should_not_receive(:not_expected).with("unexpected text")
-        lambda {
-          @mock.not_expected("unexpected text")
-          violated
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once")
-      end
-      
-      it "should pass when receiving message specified as not to be received with wrong args" do
-        @mock.should_not_receive(:not_expected).with("unexpected text")
-        @mock.not_expected "really unexpected text"
-        @mock.rspec_verify
-      end
-      
-      it "should allow block to calculate return values" do
-        @mock.should_receive(:something).with("a","b","c").and_return { |a,b,c| c+b+a }
-        @mock.something("a","b","c").should == "cba"
-        @mock.rspec_verify
-      end
-      
-      it "should allow parameter as return value" do
-        @mock.should_receive(:something).with("a","b","c").and_return("booh")
-        @mock.something("a","b","c").should == "booh"
-        @mock.rspec_verify
-      end
-      
-      it "should return nil if no return value set" do
-        @mock.should_receive(:something).with("a","b","c")
-        @mock.something("a","b","c").should be_nil
-        @mock.rspec_verify
-      end
-      
-      it "should raise exception if args don't match when method called" do
-        @mock.should_receive(:something).with("a","b","c").and_return("booh")
-        lambda {
-          @mock.something("a","d","c")
-          violated
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
-      end
-           
-      it "should raise exception if args don't match when method called even when the method is stubbed" do
-        @mock.stub!(:something)
-        @mock.should_receive(:something).with("a","b","c")
-        lambda {
-          @mock.something("a","d","c")
-          @mock.rspec_verify
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
-      end
-           
-      it "should raise exception if args don't match when method called even when using null_object" do
-        @mock = mock("test mock", :null_object => true)
-        @mock.should_receive(:something).with("a","b","c")
-        lambda {
-          @mock.something("a","d","c")
-          @mock.rspec_verify
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
-      end
-           
-      it "should fail if unexpected method called" do
-        lambda {
-          @mock.something("a","b","c")
-          violated
-        }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")")
-      end
-        
-      it "should use block for expectation if provided" do
-        @mock.should_receive(:something) do | a, b |
-          a.should == "a"
-          b.should == "b"
-          "booh"
-        end
-        @mock.something("a", "b").should == "booh"
-        @mock.rspec_verify
-      end
-        
-      it "should fail if expectation block fails" do
-        @mock.should_receive(:something) {| bool | bool.should be_true}
-        lambda {
-          @mock.something false
-        }.should raise_error(MockExpectationError, /Mock 'test mock' received :something but passed block failed with: expected true, got false/)
-      end
-        
-      it "should fail right away when method defined as never is received" do
-        @mock.should_receive(:not_expected).never
-        lambda {
-          @mock.not_expected
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
-      end
-      
-      it "should eventually fail when method defined as never is received" do
-        @mock.should_receive(:not_expected).never
-        lambda {
-          @mock.not_expected
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
-      end
-    
-      it "should raise when told to" do
-        @mock.should_receive(:something).and_raise(RuntimeError)
-        lambda do
-          @mock.something
-        end.should raise_error(RuntimeError)
-      end
-       
-      it "should raise passed an Exception instance" do
-        error = RuntimeError.new("error message")
-        @mock.should_receive(:something).and_raise(error)
-        lambda {
-          @mock.something
-        }.should raise_error(RuntimeError, "error message")
-      end
-      
-      it "should raise RuntimeError with passed message" do
-        @mock.should_receive(:something).and_raise("error message")
-        lambda {
-          @mock.something
-        }.should raise_error(RuntimeError, "error message")
-      end
-       
-      it "should not raise when told to if args dont match" do
-        @mock.should_receive(:something).with(2).and_raise(RuntimeError)
-        lambda {
-          @mock.something 1
-        }.should raise_error(MockExpectationError)
-      end
-       
-      it "should throw when told to" do
-        @mock.should_receive(:something).and_throw(:blech)
-        lambda {
-          @mock.something
-        }.should throw_symbol(:blech)
-      end
-      
-      it "should raise when explicit return and block constrained" do
-        lambda {
-          @mock.should_receive(:fruit) do |colour|
-            :strawberry
-          end.and_return :apple
-        }.should raise_error(AmbiguousReturnError)
-      end
-      
-      it "should ignore args on any args" do
-        @mock.should_receive(:something).at_least(:once).with(any_args)
-        @mock.something
-        @mock.something 1
-        @mock.something "a", 2
-        @mock.something [], {}, "joe", 7
-        @mock.rspec_verify
-      end
-      
-      it "should fail on no args if any args received" do
-        @mock.should_receive(:something).with(no_args())
-        lambda {
-          @mock.something 1
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (no args) but received it with (1)")
-      end
-    
-      it "should fail when args are expected but none are received" do
-        @mock.should_receive(:something).with(1)
-        lambda {
-          @mock.something
-        }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (1) but received it with (no args)")
-      end
-    
-      it "should return value from block by default" do
-        @mock.stub!(:method_that_yields).and_yield
-        @mock.method_that_yields { :returned_obj }.should == :returned_obj
-        @mock.rspec_verify
-      end
-    
-      it "should yield 0 args to blocks that take a variable number of arguments" do
-        @mock.should_receive(:yield_back).with(no_args()).once.and_yield
-        a = nil
-        @mock.yield_back {|*a|}
-        a.should == []
-        @mock.rspec_verify
-      end
-      
-      it "should yield 0 args multiple times to blocks that take a variable number of arguments" do
-        @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield.
-                                                                    and_yield
-        a = nil
-        b = []
-        @mock.yield_back {|*a| b << a}
-        b.should == [ [], [] ]
-        @mock.rspec_verify
-      end
-      
-      it "should yield one arg to blocks that take a variable number of arguments" do
-        @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
-        a = nil
-        @mock.yield_back {|*a|}
-        a.should == [99]
-        @mock.rspec_verify
-      end
-      
-      it "should yield one arg 3 times consecutively to blocks that take a variable number of arguments" do
-        @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
-                                                                    and_yield(43).
-                                                                    and_yield("something fruity")
-        a = nil
-        b = []
-        @mock.yield_back {|*a| b << a}
-        b.should == [[99], [43], ["something fruity"]]
-        @mock.rspec_verify
-      end
-      
-      it "should yield many args to blocks that take a variable number of arguments" do
-        @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go")
-        a = nil
-        @mock.yield_back {|*a|}
-        a.should == [99, 27, "go"]
-        @mock.rspec_verify
-      end
-    
-      it "should yield many args 3 times consecutively to blocks that take a variable number of arguments" do
-        @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go").
-                                                                    and_yield("wait", :amber).
-                                                                    and_yield("stop", 12, :red)
-        a = nil
-        b = []
-        @mock.yield_back {|*a| b << a}
-        b.should == [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]]
-        @mock.rspec_verify
-      end
-      
-      it "should yield single value" do
-        @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
-        a = nil
-        @mock.yield_back {|a|}
-        a.should == 99
-        @mock.rspec_verify
-      end
-      
-      it "should yield single value 3 times consecutively" do
-        @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
-                                                                    and_yield(43).
-                                                                    and_yield("something fruity")
-        a = nil
-        b = []
-        @mock.yield_back {|a| b << a}
-        b.should == [99, 43, "something fruity"]
-        @mock.rspec_verify
-      end
-      
-      it "should yield two values" do
-        @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
-        a, b = nil
-        @mock.yield_back {|a,b|}
-        a.should == 'wha'
-        b.should == 'zup'
-        @mock.rspec_verify
-      end
-      
-      it "should yield two values 3 times consecutively" do
-        @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
-                                                                    and_yield('not', 'down').
-                                                                    and_yield(14, 65)
-        a, b = nil
-        c = []
-        @mock.yield_back {|a,b| c << [a, b]}
-        c.should == [['wha', 'zup'], ['not', 'down'], [14, 65]]
-        @mock.rspec_verify
-      end
-      
-      it "should fail when calling yielding method with wrong arity" do
-        @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
-        lambda {
-          @mock.yield_back {|a|}
-        }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1")
-      end
-      
-      it "should fail when calling yielding method consecutively with wrong arity" do
-        @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
-                                                                    and_yield('down').
-                                                                    and_yield(14, 65)
-        lambda {
-          a, b = nil
-          c = []
-          @mock.yield_back {|a,b| c << [a, b]}
-        }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"down\"| to block with arity of 2")
-      end
-      
-      it "should fail when calling yielding method without block" do
-        @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
-        lambda {
-          @mock.yield_back
-        }.should raise_error(MockExpectationError, "Mock 'test mock' asked to yield |[\"wha\", \"zup\"]| but no block was passed")
-      end
-      
-      it "should be able to mock send" do
-        @mock.should_receive(:send).with(any_args)
-        @mock.send 'hi'
-        @mock.rspec_verify
-      end
-      
-      it "should be able to raise from method calling yielding mock" do
-        @mock.should_receive(:yield_me).and_yield 44
-        
-        lambda {
-          @mock.yield_me do |x|
-            raise "Bang"
-          end
-        }.should raise_error(StandardError, "Bang")
-      
-        @mock.rspec_verify
-      end
-      
-      it "should clear expectations after verify" do
-        @mock.should_receive(:foobar)
-        @mock.foobar
-        @mock.rspec_verify
-        lambda {
-          @mock.foobar
-        }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :foobar with (no args)")
-      end
-      
-      it "should restore objects to their original state on rspec_reset" do
-        mock = mock("this is a mock")
-        mock.should_receive(:blah)
-        mock.rspec_reset
-        mock.rspec_verify #should throw if reset didn't work
-      end
-    
-      it "should work even after method_missing starts raising NameErrors instead of NoMethodErrors" do
-        # Object#method_missing throws either NameErrors or NoMethodErrors.
-        #
-        # On a fresh ruby program Object#method_missing: 
-        #  * raises a NoMethodError when called directly
-        #  * raises a NameError when called indirectly
-        #
-        # Once Object#method_missing has been called at least once (on any object)
-        # it starts behaving differently: 
-        #  * raises a NameError when called directly
-        #  * raises a NameError when called indirectly
-        #
-        # There was a bug in Mock#method_missing that relied on the fact
-        # that calling Object#method_missing directly raises a NoMethodError.
-        # This example tests that the bug doesn't exist anymore.
-        
-        
-        # Ensures that method_missing always raises NameErrors.
-        a_method_that_doesnt_exist rescue
-        
-        
-        @mock.should_receive(:foobar)
-        @mock.foobar
-        @mock.rspec_verify
-                
-        lambda { @mock.foobar }.should_not raise_error(NameError)
-        lambda { @mock.foobar }.should raise_error(MockExpectationError)
-      end
-    
-      it "should temporarily replace a method stub on a mock" do
-        @mock.stub!(:msg).and_return(:stub_value)
-        @mock.should_receive(:msg).with(:arg).and_return(:mock_value)
-        @mock.msg(:arg).should equal(:mock_value)
-        @mock.msg.should equal(:stub_value)
-        @mock.msg.should equal(:stub_value)
-        @mock.rspec_verify
-      end
-
-      it "should not require a different signature to replace a method stub" do
-        @mock.stub!(:msg).and_return(:stub_value)
-        @mock.should_receive(:msg).and_return(:mock_value)
-        @mock.msg(:arg).should equal(:mock_value)
-        @mock.msg.should equal(:stub_value)
-        @mock.msg.should equal(:stub_value)
-        @mock.rspec_verify
-      end
-
-      it "should raise an error when a previously stubbed method has a negative expectation" do
-        @mock.stub!(:msg).and_return(:stub_value)
-        @mock.should_not_receive(:msg).and_return(:mock_value)
-        lambda {@mock.msg(:arg)}.should raise_error(MockExpectationError)
-      end
-
-      it "should temporarily replace a method stub on a non-mock" do
-        non_mock = Object.new
-        non_mock.stub!(:msg).and_return(:stub_value)
-        non_mock.should_receive(:msg).with(:arg).and_return(:mock_value)
-        non_mock.msg(:arg).should equal(:mock_value)
-        non_mock.msg.should equal(:stub_value)
-        non_mock.msg.should equal(:stub_value)
-        non_mock.rspec_verify
-      end
-
-      it "should return the stubbed value when no new value specified" do
-        @mock.stub!(:msg).and_return(:stub_value)
-        @mock.should_receive(:msg)
-        @mock.msg.should equal(:stub_value)
-        @mock.rspec_verify
-      end
-
-      it "should not mess with the stub's yielded values when also mocked" do
-        @mock.stub!(:yield_back).and_yield(:stub_value)
-        @mock.should_receive(:yield_back).and_yield(:mock_value)
-        @mock.yield_back{|v| v.should == :mock_value }
-        @mock.yield_back{|v| v.should == :stub_value }
-        @mock.rspec_verify
-      end
-
-      it "should yield multiple values after a similar stub" do
-        File.stub!(:open).and_yield(:stub_value)
-        File.should_receive(:open).and_yield(:first_call).and_yield(:second_call)
-        yielded_args = []
-        File.open {|v| yielded_args << v }
-        yielded_args.should == [:first_call, :second_call]
-        File.open {|v| v.should == :stub_value }
-        File.rspec_verify
-      end
-
-      it "should assign stub return values" do
-        mock = Mock.new('name', :message => :response)
-        mock.message.should == :response
-      end
-      
-    end
-    
-    describe "a mock message receiving a block" do
-      before(:each) do
-        @mock = mock("mock")
-        @calls = 0
-      end
-      
-      def add_call
-        @calls = @calls + 1
-      end
-      
-      it "should call the block after #should_receive" do
-        @mock.should_receive(:foo) { add_call }
-    
-        @mock.foo
-    
-        @calls.should == 1
-      end
-    
-      it "should call the block after #should_receive after a similar stub" do
-        @mock.stub!(:foo).and_return(:bar)
-        @mock.should_receive(:foo) { add_call }
-    
-        @mock.foo
-    
-        @calls.should == 1
-      end
-    
-      it "should call the block after #once" do
-        @mock.should_receive(:foo).once { add_call }
-    
-        @mock.foo
-    
-        @calls.should == 1
-      end
-    
-      it "should call the block after #twice" do
-        @mock.should_receive(:foo).twice { add_call }
-    
-        @mock.foo
-        @mock.foo
-    
-        @calls.should == 2
-      end
-    
-      it "should call the block after #times" do
-        @mock.should_receive(:foo).exactly(10).times { add_call }
-        
-        (1..10).each { @mock.foo }
-    
-        @calls.should == 10
-      end
-    
-      it "should call the block after #any_number_of_times" do
-        @mock.should_receive(:foo).any_number_of_times { add_call }
-        
-        (1..7).each { @mock.foo }
-    
-        @calls.should == 7
-      end
-    
-      it "should call the block after #ordered" do
-        @mock.should_receive(:foo).ordered { add_call }
-        @mock.should_receive(:bar).ordered { add_call }
-        
-        @mock.foo
-        @mock.bar
-    
-        @calls.should == 2
-      end
-    end
-    
-    describe 'string representation generated by #to_s' do
-      it 'should not contain < because that might lead to invalid HTML in some situations' do
-        mock = mock("Dog")
-        valid_html_str = "#{mock}"
-        valid_html_str.should_not include('<')
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/multiple_return_value_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/multiple_return_value_spec.rb
deleted file mode 100644
index 3e26b73..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/multiple_return_value_spec.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Mocks
-    describe "a Mock expectation with multiple return values and no specified count" do
-      before(:each) do
-        @mock = Mock.new("mock")
-        @return_values = ["1",2,Object.new]
-        @mock.should_receive(:message).and_return(@return_values[0], at return_values[1], at return_values[2])
-      end
-      
-      it "should return values in order to consecutive calls" do
-        @mock.message.should == @return_values[0]
-        @mock.message.should == @return_values[1]
-        @mock.message.should == @return_values[2]
-        @mock.rspec_verify
-      end
-
-      it "should complain when there are too few calls" do
-        third = Object.new
-        @mock.message.should == @return_values[0]
-        @mock.message.should == @return_values[1]
-        lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it twice")
-      end
-
-      it "should complain when there are too many calls" do
-        third = Object.new
-        @mock.message.should == @return_values[0]
-        @mock.message.should == @return_values[1]
-        @mock.message.should == @return_values[2]
-        @mock.message.should == @return_values[2]
-        lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times")
-      end
-    end
-
-    describe "a Mock expectation with multiple return values with a specified count equal to the number of values" do
-      before(:each) do
-        @mock = Mock.new("mock")
-        @return_values = ["1",2,Object.new]
-        @mock.should_receive(:message).exactly(3).times.and_return(@return_values[0], at return_values[1], at return_values[2])
-      end
-
-      it "should return values in order to consecutive calls" do
-        @mock.message.should == @return_values[0]
-        @mock.message.should == @return_values[1]
-        @mock.message.should == @return_values[2]
-        @mock.rspec_verify
-      end
-
-      it "should complain when there are too few calls" do
-        third = Object.new
-        @mock.message.should == @return_values[0]
-        @mock.message.should == @return_values[1]
-        lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it twice")
-      end
-
-      it "should complain when there are too many calls" do
-        third = Object.new
-        @mock.message.should == @return_values[0]
-        @mock.message.should == @return_values[1]
-        @mock.message.should == @return_values[2]
-        @mock.message.should == @return_values[2]
-        lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times")
-      end
-    end
-
-    describe "a Mock expectation with multiple return values specifying at_least less than the number of values" do
-      before(:each) do
-        @mock = Mock.new("mock")
-        @mock.should_receive(:message).at_least(:twice).with(no_args).and_return(11, 22)
-      end
-      
-      it "should use last return value for subsequent calls" do
-        @mock.message.should equal(11)
-        @mock.message.should equal(22)
-        @mock.message.should equal(22)
-        @mock.rspec_verify
-      end
-
-      it "should fail when called less than the specified number" do
-        @mock.message.should equal(11)
-        lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (no args) twice, but received it once")
-      end
-    end
-    describe "a Mock expectation with multiple return values with a specified count larger than the number of values" do
-      before(:each) do
-        @mock = Mock.new("mock")
-        @mock.should_receive(:message).exactly(3).times.and_return(11, 22)
-      end
-      
-      it "should use last return value for subsequent calls" do
-        @mock.message.should equal(11)
-        @mock.message.should equal(22)
-        @mock.message.should equal(22)
-        @mock.rspec_verify
-      end
-
-      it "should fail when called less than the specified number" do
-        @mock.message.should equal(11)
-        lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it once")
-      end
-
-      it "should fail when called greater than the specified number" do
-        @mock.message.should equal(11)
-        @mock.message.should equal(22)
-        @mock.message.should equal(22)
-        @mock.message.should equal(22)
-        lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times")
-      end
-    end
-  end
-end
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/nil_expectation_warning_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/nil_expectation_warning_spec.rb
deleted file mode 100644
index 606a14f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/nil_expectation_warning_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-
-    describe "an expectation set on nil" do
-      
-      it "should issue a warning with file and line number information" do
-        expected_warning = "An expectation of :foo was set on nil. Called from #{__FILE__}:#{__LINE__+3}. Use allow_message_expectations_on_nil to disable warnings."
-        Kernel.should_receive(:warn).with(expected_warning)
-
-        nil.should_receive(:foo)
-        nil.foo
-      end
-      
-      it "should issue a warning when the expectation is negative" do
-        Kernel.should_receive(:warn)
-
-        nil.should_not_receive(:foo)
-      end
-      
-      it "should not issue a warning when expectations are set to be allowed" do
-        allow_message_expectations_on_nil
-        Kernel.should_not_receive(:warn)
-        
-        nil.should_receive(:foo)
-        nil.should_not_receive(:bar)
-        nil.foo
-      end
-
-    end
-    
-    describe "#allow_message_expectations_on_nil" do
-      
-      it "should not effect subsequent examples" do
-        example_group = Class.new(ExampleGroup)
-        example_group.it("when called in one example that doesn't end up setting an expectation on nil") do
-                        allow_message_expectations_on_nil
-                      end
-        example_group.it("should not effect the next exapmle ran") do
-                        Kernel.should_receive(:warn)
-                        nil.should_receive(:foo)
-                        nil.foo
-                      end
-                              
-        example_group.run.should be_true
-                  
-      end
-
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/null_object_mock_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/null_object_mock_spec.rb
deleted file mode 100644
index e8e4d86..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/null_object_mock_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "a mock acting as a NullObject" do
-      before(:each) do
-        @mock = Mock.new("null_object", :null_object => true)
-      end
-
-      it "should allow explicit expectation" do
-        @mock.should_receive(:something)
-        @mock.something
-      end
-
-      it "should fail verification when explicit exception not met" do
-        lambda do
-          @mock.should_receive(:something)
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should ignore unexpected methods" do
-        @mock.random_call("a", "d", "c")
-        @mock.rspec_verify
-      end
-
-      it "should expected message with different args first" do
-        @mock.should_receive(:message).with(:expected_arg)
-        @mock.message(:unexpected_arg)
-        @mock.message(:expected_arg)
-      end
-
-      it "should expected message with different args second" do
-        @mock.should_receive(:message).with(:expected_arg)
-        @mock.message(:expected_arg)
-        @mock.message(:unexpected_arg)
-      end
-    end
-
-    describe "#null_object?" do
-      it "should default to false" do
-        obj = mock('anything')
-        obj.should_not be_null_object
-      end
-    end
-    
-    describe "#as_null_object" do
-      it "should set the object to null_object" do
-        obj = mock('anything').as_null_object
-        obj.should be_null_object
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/once_counts_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/once_counts_spec.rb
deleted file mode 100644
index 2c15d5c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/once_counts_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "OnceCounts" do
-      before(:each) do
-        @mock = mock("test mock")
-      end
-
-      it "once should fail when called once with wrong args" do
-        @mock.should_receive(:random_call).once.with("a", "b", "c")
-        lambda do
-          @mock.random_call("d", "e", "f")
-        end.should raise_error(MockExpectationError)
-        @mock.rspec_reset
-      end
-
-      it "once should fail when called twice" do
-        @mock.should_receive(:random_call).once
-        @mock.random_call
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-      
-      it "once should fail when not called" do
-        @mock.should_receive(:random_call).once
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "once should pass when called once" do
-        @mock.should_receive(:random_call).once
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "once should pass when called once with specified args" do
-        @mock.should_receive(:random_call).once.with("a", "b", "c")
-        @mock.random_call("a", "b", "c")
-        @mock.rspec_verify
-      end
-
-      it "once should pass when called once with unspecified args" do
-        @mock.should_receive(:random_call).once
-        @mock.random_call("a", "b", "c")
-        @mock.rspec_verify
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/options_hash_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/options_hash_spec.rb
deleted file mode 100644
index 81d3f25..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/options_hash_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "calling :should_receive with an options hash" do
-      it "should report the file and line submitted with :expected_from" do
-        begin
-          mock = Spec::Mocks::Mock.new("a mock")
-          mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37")
-          mock.rspec_verify
-        rescue => e
-        ensure
-          e.backtrace.to_s.should =~ /\/path\/to\/blah.ext:37/m
-        end
-      end
-
-      it "should use the message supplied with :message" do
-        lambda {
-          m = Spec::Mocks::Mock.new("a mock")
-          m.should_receive(:message, :message => "recebi nada")
-          m.rspec_verify
-        }.should raise_error("recebi nada")
-      end
-      
-      it "should use the message supplied with :message after a similar stub" do
-        lambda {
-          m = Spec::Mocks::Mock.new("a mock")
-          m.stub!(:message)
-          m.should_receive(:message, :message => "from mock")
-          m.rspec_verify
-        }.should raise_error("from mock")
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/partial_mock_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/partial_mock_spec.rb
deleted file mode 100644
index 30b7b03..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/partial_mock_spec.rb
+++ /dev/null
@@ -1,149 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "using a Partial Mock," do
-      before(:each) do
-        @object = Object.new
-      end
-    
-      it "should name the class in the failure message" do
-        @object.should_receive(:foo)
-        lambda do
-          @object.rspec_verify
-        end.should raise_error(Spec::Mocks::MockExpectationError, /<Object:.*> expected/)
-      end
-    
-      it "should name the class in the failure message when expectation is on class" do
-        Object.should_receive(:foo)
-        lambda do
-          Object.rspec_verify
-        end.should raise_error(Spec::Mocks::MockExpectationError, /<Object \(class\)>/)
-      end
-    
-      it "should not conflict with @options in the object" do
-        @object.instance_eval { @options = Object.new }
-        @object.should_receive(:blah)
-        @object.blah
-      end
-            
-      it "should_not_receive should mock out the method" do
-        @object.should_not_receive(:fuhbar)
-        lambda do
-          @object.fuhbar
-        end.should raise_error(MockExpectationError, /<Object:.*> expected :fuhbar with \(no args\) 0 times/)
-      end
-    
-      it "should_not_receive should return a negative message expectation" do
-        @object.should_not_receive(:foobar).should be_kind_of(NegativeMessageExpectation)
-      end
-    
-      it "should_receive should mock out the method" do
-        @object.should_receive(:foobar).with(:test_param).and_return(1)
-        @object.foobar(:test_param).should equal(1)
-      end
-    
-      it "should_receive should handle a hash" do
-        @object.should_receive(:foobar).with(:key => "value").and_return(1)
-        @object.foobar(:key => "value").should equal(1)
-      end
-    
-      it "should_receive should handle an inner hash" do
-        hash = {:a => {:key => "value"}}
-        @object.should_receive(:foobar).with(:key => "value").and_return(1)
-        @object.foobar(hash[:a]).should equal(1)
-      end
-    
-      it "should_receive should return a message expectation" do
-        @object.should_receive(:foobar).should be_kind_of(MessageExpectation)
-        @object.foobar
-      end
-    
-      it "should_receive should verify method was called" do
-        @object.should_receive(:foobar).with(:test_param).and_return(1)
-        lambda do
-          @object.rspec_verify
-        end.should raise_error(Spec::Mocks::MockExpectationError)
-      end
-    
-      it "should_receive should also take a String argument" do
-        @object.should_receive('foobar')
-        @object.foobar
-      end
-      
-      it "should_not_receive should also take a String argument" do
-        @object.should_not_receive('foobar')
-        lambda do
-          @object.foobar   
-        end.should raise_error(Spec::Mocks::MockExpectationError)
-      end
-      
-      it "should use report nil in the error message" do
-        allow_message_expectations_on_nil
-        
-        @this_will_resolve_to_nil.should_receive(:foobar)
-        lambda do
-          @this_will_resolve_to_nil.rspec_verify
-        end.should raise_error(Spec::Mocks::MockExpectationError, /nil expected :foobar with/)
-      end
-    end
-    
-    describe "Partially mocking an object that defines ==, after another mock has been defined" do
-      before(:each) do
-        stub("existing mock", :foo => :foo)
-      end
-      
-      class PartiallyMockedEquals
-        attr_reader :val
-        def initialize(val)
-          @val = val
-        end
-        
-        def ==(other)
-          @val == other.val
-        end
-      end
-      
-      it "should not raise an error when stubbing the object" do
-        o = PartiallyMockedEquals.new :foo
-        lambda { o.stub!(:bar) }.should_not raise_error(NoMethodError)
-      end
-    end
-
-    describe "Method visibility when using partial mocks" do
-      class MockableClass
-        def public_method
-          private_method
-          protected_method
-        end
-        protected
-        def protected_method; end
-        private
-        def private_method; end
-      end
-
-      before(:each) do
-        @object = MockableClass.new
-      end
-
-      it 'should keep public methods public' do
-        @object.should_receive(:public_method)
-        @object.public_methods.should include('public_method')
-        @object.public_method
-      end
-
-      it 'should keep private methods private' do
-        @object.should_receive(:private_method)
-        @object.private_methods.should include('private_method')
-        @object.public_method
-      end
-
-      it 'should keep protected methods protected' do
-        @object.should_receive(:protected_method)
-        @object.protected_methods.should include('protected_method')
-        @object.public_method
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
deleted file mode 100644
index c857d83..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-module Mocks
-describe "PartialMockUsingMocksDirectly" do
-    before(:each) do
-      
-        klass=Class.new
-        klass.class_eval do
-          def existing_method
-            :original_value
-          end
-        end
-        @obj = klass.new
-      
-    end
-    
-    # See http://rubyforge.org/tracker/index.php?func=detail&aid=10263&group_id=797&atid=3149
-    # specify "should clear expectations on verify" do
-    #     @obj.should_receive(:msg)
-    #     @obj.msg
-    #     @obj.rspec_verify
-    #     lambda do
-    #       @obj.msg
-    #     end.should raise_error(NoMethodError)
-    #   
-    # end
-    it "should fail when expected message is not received" do
-        @obj.should_receive(:msg)
-        lambda do
-          @obj.rspec_verify
-        end.should raise_error(MockExpectationError)
-      
-    end
-    it "should fail when message is received with incorrect args" do
-        @obj.should_receive(:msg).with(:correct_arg)
-        lambda do
-          @obj.msg(:incorrect_arg)
-        end.should raise_error(MockExpectationError)
-        @obj.msg(:correct_arg)
-      
-    end
-    it "should pass when expected message is received" do
-        @obj.should_receive(:msg)
-        @obj.msg
-        @obj.rspec_verify
-      
-    end
-    it "should pass when message is received with correct args" do
-        @obj.should_receive(:msg).with(:correct_arg)
-        @obj.msg(:correct_arg)
-        @obj.rspec_verify
-      
-    end
-    it "should revert to original method if existed" do
-        @obj.existing_method.should equal(:original_value)
-        @obj.should_receive(:existing_method).and_return(:mock_value)
-        @obj.existing_method.should equal(:mock_value)
-        @obj.rspec_verify
-        @obj.existing_method.should equal(:original_value)
-      
-    end
-  
-end
-end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/passing_mock_argument_constraints_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/passing_mock_argument_constraints_spec.rb
deleted file mode 100644
index cbfb7e0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/passing_mock_argument_constraints_spec.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "mock argument constraints", :shared => true do
-      before(:each) do
-        @mock = Mock.new("test mock")
-        Kernel.stub!(:warn)
-      end
-      
-      after(:each) do
-        @mock.rspec_verify
-      end
-    end
-    
-    describe Methods, "handling argument constraints" do
-      it_should_behave_like "mock argument constraints"
-
-      it "should accept true as boolean()" do
-        @mock.should_receive(:random_call).with(boolean())
-        @mock.random_call(true)
-      end
-
-      it "should accept false as boolean()" do
-        @mock.should_receive(:random_call).with(boolean())
-        @mock.random_call(false)
-      end
-
-      it "should accept fixnum as an_instance_of(Numeric)" do
-        @mock.should_receive(:random_call).with(an_instance_of(Numeric))
-        @mock.random_call(1)
-      end
-
-      it "should accept float as an_instance_of(Numeric)" do
-        @mock.should_receive(:random_call).with(an_instance_of(Numeric))
-        @mock.random_call(1.5)
-      end
-
-      it "should accept string as anything()" do
-        @mock.should_receive(:random_call).with("a", anything(), "c")
-        @mock.random_call("a", "whatever", "c")
-      end
-
-      it "should match duck type with one method" do
-        @mock.should_receive(:random_call).with(duck_type(:length))
-        @mock.random_call([])
-      end
-
-      it "should match duck type with two methods" do
-        @mock.should_receive(:random_call).with(duck_type(:abs, :div))
-        @mock.random_call(1)
-      end
-      
-      it "should match no args against any_args()" do
-        @mock.should_receive(:random_call).with(any_args)
-        @mock.random_call()
-      end
-      
-      it "should match one arg against any_args()" do
-        @mock.should_receive(:random_call).with(any_args)
-        @mock.random_call("a string")
-      end
-      
-      it "should match no args against no_args()" do
-        @mock.should_receive(:random_call).with(no_args)
-        @mock.random_call()
-      end
-      
-      it "should match hash with hash_including same hash" do
-        @mock.should_receive(:random_call).with(hash_including(:a => 1))
-        @mock.random_call(:a => 1)
-      end
-        
-    end
-
-    describe Methods, "handling block constraints" do
-      it_should_behave_like "mock argument constraints"
-      
-      it "should match arguments against RSpec expectations" do
-        @mock.should_receive(:random_call).with {|arg1, arg2, arr, *rest|
-          arg1.should == 5
-          arg2.should have_at_least(3).characters
-          arg2.should have_at_most(10).characters
-          arr.map {|i| i * 2}.should == [2,4,6]
-          rest.should == [:fee, "fi", 4]
-        }
-        @mock.random_call 5, "hello", [1,2,3], :fee, "fi", 4
-      end
-    end
-    
-    describe Methods, "handling non-constraint arguments" do
-      
-      before(:each) do
-        @mock = Mock.new("test mock")
-      end
-      
-      it "should match non special symbol (can be removed when deprecated symbols are removed)" do
-        @mock.should_receive(:random_call).with(:some_symbol)
-        @mock.random_call(:some_symbol)
-      end
-
-      it "should match string against regexp" do
-        @mock.should_receive(:random_call).with(/bcd/)
-        @mock.random_call("abcde")
-      end
-
-      it "should match regexp against regexp" do
-        @mock.should_receive(:random_call).with(/bcd/)
-        @mock.random_call(/bcd/)
-      end
-      
-      it "should match against a hash submitted and received by value" do
-        @mock.should_receive(:random_call).with(:a => "a", :b => "b")
-        @mock.random_call(:a => "a", :b => "b")
-      end
-      
-      it "should match against a hash submitted by reference and received by value" do
-        opts = {:a => "a", :b => "b"}
-        @mock.should_receive(:random_call).with(opts)
-        @mock.random_call(:a => "a", :b => "b")
-      end
-      
-      it "should match against a hash submitted by value and received by reference" do
-        opts = {:a => "a", :b => "b"}
-        @mock.should_receive(:random_call).with(:a => "a", :b => "b")
-        @mock.random_call(opts)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/precise_counts_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/precise_counts_spec.rb
deleted file mode 100644
index ba38989..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/precise_counts_spec.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "PreciseCounts" do
-      before(:each) do
-        @mock = mock("test mock")
-      end
-
-      it "should fail when exactly n times method is called less than n times" do
-        @mock.should_receive(:random_call).exactly(3).times
-        @mock.random_call
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should fail when exactly n times method is never called" do
-        @mock.should_receive(:random_call).exactly(3).times
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-
-      it "should pass if exactly n times method is called exactly n times" do
-        @mock.should_receive(:random_call).exactly(3).times
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-
-      it "should pass multiple calls with different args and counts" do
-        @mock.should_receive(:random_call).twice.with(1)
-        @mock.should_receive(:random_call).once.with(2)
-        @mock.random_call(1)
-        @mock.random_call(2)
-        @mock.random_call(1)
-        @mock.rspec_verify
-      end
-
-      it "should pass mutiple calls with different args" do
-        @mock.should_receive(:random_call).once.with(1)
-        @mock.should_receive(:random_call).once.with(2)
-        @mock.random_call(1)
-        @mock.random_call(2)
-        @mock.rspec_verify
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/record_messages_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/record_messages_spec.rb
deleted file mode 100644
index ec24772..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/record_messages_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
-  module Mocks
-    describe "a mock" do
-      before(:each) do
-        @mock = mock("mock", :null_object => true)
-      end
-      it "should answer false for received_message? when no messages received" do
-        @mock.received_message?(:message).should be_false
-      end
-      it "should answer true for received_message? when message received" do
-        @mock.message
-        @mock.received_message?(:message).should be_true
-      end
-      it "should answer true for received_message? when message received with correct args" do
-        @mock.message 1,2,3
-        @mock.received_message?(:message, 1,2,3).should be_true
-      end
-      it "should answer false for received_message? when message received with incorrect args" do
-        @mock.message 1,2,3
-        @mock.received_message?(:message, 1,2).should be_false
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/stub_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/stub_spec.rb
deleted file mode 100644
index 8eb9c49..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/stub_spec.rb
+++ /dev/null
@@ -1,188 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "A method stub" do
-      before(:each) do
-        @class = Class.new do
-          def self.existing_class_method
-            :original_value
-          end
-
-          def existing_instance_method
-            :original_value
-          end
-        end
-        @instance = @class.new
-        @stub = Object.new
-      end
-
-      it "should return expected value when expected message is received" do
-        @instance.stub!(:msg).and_return(:return_value)
-        @instance.msg.should equal(:return_value)
-        @instance.rspec_verify
-      end
-
-      it "should ignore when expected message is received" do
-        @instance.stub!(:msg)
-        @instance.msg
-        lambda do
-          @instance.rspec_verify
-        end.should_not raise_error
-      end
-
-      it "should ignore when message is received with args" do
-        @instance.stub!(:msg)
-        @instance.msg(:an_arg)
-        lambda do
-          @instance.rspec_verify
-        end.should_not raise_error
-      end
-
-      it "should ignore when expected message is not received" do
-        @instance.stub!(:msg)
-        lambda do
-          @instance.rspec_verify
-        end.should_not raise_error
-      end
-
-      it "should handle multiple stubbed methods" do
-        @instance.stub!(:msg1 => 1, :msg2 => 2)
-        @instance.msg1.should == 1
-        @instance.msg2.should == 2
-      end
-      
-      it "should clear itself when verified" do
-        @instance.stub!(:this_should_go).and_return(:blah)
-        @instance.this_should_go.should == :blah
-        @instance.rspec_verify
-        lambda do
-          @instance.this_should_go
-        end.should raise_error(NameError)
-      end
-
-      it "should return values in order to consecutive calls" do
-        return_values = ["1",2,Object.new]
-        @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
-        @instance.msg.should == return_values[0]
-        @instance.msg.should == return_values[1]
-        @instance.msg.should == return_values[2]
-      end
-
-      it "should keep returning last value in consecutive calls" do
-        return_values = ["1",2,Object.new]
-        @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
-        @instance.msg.should == return_values[0]
-        @instance.msg.should == return_values[1]
-        @instance.msg.should == return_values[2]
-        @instance.msg.should == return_values[2]
-        @instance.msg.should == return_values[2]
-      end
-
-      it "should revert to original instance method if there is one" do
-        @instance.existing_instance_method.should equal(:original_value)
-        @instance.stub!(:existing_instance_method).and_return(:mock_value)
-        @instance.existing_instance_method.should equal(:mock_value)
-        @instance.rspec_verify
-        @instance.existing_instance_method.should equal(:original_value)
-      end
-      
-      it "should revert to original class method if there is one" do
-        @class.existing_class_method.should equal(:original_value)
-        @class.stub!(:existing_class_method).and_return(:mock_value)
-        @class.existing_class_method.should equal(:mock_value)
-        @class.rspec_verify
-        @class.existing_class_method.should equal(:original_value)
-      end
-
-      it "should yield a specified object" do
-        @instance.stub!(:method_that_yields).and_yield(:yielded_obj)
-        current_value = :value_before
-        @instance.method_that_yields {|val| current_value = val}
-        current_value.should == :yielded_obj
-        @instance.rspec_verify
-      end
-
-      it "should yield multiple times with multiple calls to and_yield" do
-        @instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value).
-                                                       and_yield(:another_value)
-        current_value = []
-        @instance.method_that_yields_multiple_times {|val| current_value << val}
-        current_value.should == [:yielded_value, :another_value]
-        @instance.rspec_verify
-      end
-      
-      it "should yield a specified object and return another specified object" do
-        yielded_obj = mock("my mock")
-        yielded_obj.should_receive(:foo).with(:bar)
-        @instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz)
-        @instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz
-      end
-
-      it "should throw when told to" do
-        @mock.stub!(:something).and_throw(:up)
-        lambda do
-          @mock.something
-        end.should throw_symbol(:up)
-      end
-      
-      it "should override a pre-existing stub" do
-        @stub.stub!(:existing_instance_method).and_return(:updated_stub_value)
-        @stub.existing_instance_method.should == :updated_stub_value
-      end
-      
-      it "should limit " do
-        @stub.stub!(:foo).with("bar")
-        @stub.should_receive(:foo).with("baz")
-        @stub.foo("bar")
-        @stub.foo("baz")
-      end
-    end
-    
-    describe "A method stub with args" do
-      before(:each) do
-        @stub = Object.new
-        @stub.stub!(:foo).with("bar")
-      end
-
-      it "should not complain if not called" do
-      end
-
-      it "should not complain if called with arg" do
-        @stub.foo("bar")
-      end
-
-      it "should complain if called with no arg" do
-        lambda do
-          @stub.foo
-        end.should raise_error
-      end
-
-      it "should complain if called with other arg" do
-        lambda do
-          @stub.foo("other")
-        end.should raise_error
-      end
-
-      it "should not complain if also mocked w/ different args" do
-        @stub.should_receive(:foo).with("baz")
-        @stub.foo("bar")
-        @stub.foo("baz")
-      end
-
-      it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do
-        @stub.should_receive(:foo).with("baz")
-        @stub.foo("bar")
-        @stub.foo("baz")
-        lambda do
-          @stub.foo("other")
-        end.should raise_error
-      end
-      
-      it "should support options" do
-        @stub.stub!(:foo, :expected_from => "bar")
-      end
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/twice_counts_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/twice_counts_spec.rb
deleted file mode 100644
index d07e457..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/mocks/twice_counts_spec.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Mocks
-    describe "TwiceCounts" do
-      before(:each) do
-        @mock = mock("test mock")
-      end
-
-      it "twice should fail when call count is higher than expected" do
-        @mock.should_receive(:random_call).twice
-        @mock.random_call
-        @mock.random_call
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-      
-      it "twice should fail when call count is lower than expected" do
-        @mock.should_receive(:random_call).twice
-        @mock.random_call
-        lambda do
-          @mock.rspec_verify
-        end.should raise_error(MockExpectationError)
-      end
-      
-      it "twice should fail when called twice with wrong args on the first call" do
-        @mock.should_receive(:random_call).twice.with("1", 1)
-        lambda do
-          @mock.random_call(1, "1")
-        end.should raise_error(MockExpectationError)
-        @mock.rspec_reset
-      end
-      
-      it "twice should fail when called twice with wrong args on the second call" do
-        @mock.should_receive(:random_call).twice.with("1", 1)
-        @mock.random_call("1", 1)
-        lambda do
-          @mock.random_call(1, "1")
-        end.should raise_error(MockExpectationError)
-        @mock.rspec_reset
-      end
-      
-      it "twice should pass when called twice" do
-        @mock.should_receive(:random_call).twice
-        @mock.random_call
-        @mock.random_call
-        @mock.rspec_verify
-      end
-      
-      it "twice should pass when called twice with specified args" do
-        @mock.should_receive(:random_call).twice.with("1", 1)
-        @mock.random_call("1", 1)
-        @mock.random_call("1", 1)
-        @mock.rspec_verify
-      end
-      
-      it "twice should pass when called twice with unspecified args" do
-        @mock.should_receive(:random_call).twice
-        @mock.random_call("1")
-        @mock.random_call(1)
-        @mock.rspec_verify
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/package/bin_spec_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/package/bin_spec_spec.rb
deleted file mode 100644
index 5bbdf6c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/package/bin_spec_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require File.dirname(__FILE__) + '/../../ruby_forker'
-
-describe "The bin/spec script" do
-  include RubyForker
-  
-  it "should have no warnings" do
-    pending "Hangs on JRuby" if PLATFORM =~ /java/
-    spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec"
-
-    output = ruby "-w #{spec_path} --help 2>&1"
-    output.should_not =~ /warning/n
-  end
-  
-  it "should show the help w/ no args" do
-    pending "Hangs on JRuby" if PLATFORM =~ /java/
-    spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec"
-
-    output = ruby "-w #{spec_path} 2>&1"
-    output.should =~ /^Usage: spec/
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/class_and_argument_parser_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/class_and_argument_parser_spec.rb
deleted file mode 100644
index b4e9e7f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/class_and_argument_parser_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Runner
-    describe ClassAndArgumentsParser, ".parse" do
-      
-      it "should use a single : to separate class names from arguments" do
-        ClassAndArgumentsParser.parse('Foo').should == ['Foo', nil]
-        ClassAndArgumentsParser.parse('Foo:arg').should == ['Foo', 'arg']
-        ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg').should == ['Foo::Bar::Zap', 'arg']
-        ClassAndArgumentsParser.parse('Foo:arg1,arg2').should == ['Foo', 'arg1,arg2']
-        ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg1,arg2').should == ['Foo::Bar::Zap', 'arg1,arg2']
-        ClassAndArgumentsParser.parse('Foo::Bar::Zap:drb://foo,drb://bar').should == ['Foo::Bar::Zap', 'drb://foo,drb://bar']
-      end
-
-      it "should raise an error when passed an empty string" do
-        lambda do
-          ClassAndArgumentsParser.parse('')
-        end.should raise_error("Couldn't parse \"\"")
-      end      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/command_line_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/command_line_spec.rb
deleted file mode 100644
index dfad3b1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/command_line_spec.rb
+++ /dev/null
@@ -1,141 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Runner
-    describe CommandLine, ".run" do
-      with_sandboxed_options do
-        attr_reader :err, :out
-        before do
-          @err = options.error_stream
-          @out = options.output_stream
-        end
-      
-        it "should run directory" do
-          file = File.dirname(__FILE__) + '/../../../examples/pure'
-          run_with(OptionParser.parse([file,"-p","**/*.rb"], @err, @out))
-
-          @out.rewind
-          @out.read.should =~ /\d+ examples, 0 failures, 3 pending/n
-        end
-
-        it "should run file" do
-          file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb'
-          run_with(OptionParser.parse([file], @err, @out))
-
-          @out.rewind
-          @out.read.should =~ /2 examples, 1 failure/n
-        end
-
-        it "should raise when file does not exist" do
-          file = File.dirname(__FILE__) + '/doesntexist'
-
-          lambda {
-            Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out))
-          }.should raise_error
-        end
-
-        it "should return true when in --generate-options mode" do
-          # NOTE - this used to say /dev/null but jruby hangs on that for some reason
-          Spec::Runner::CommandLine.run(
-            OptionParser.parse(['--generate-options', '/tmp/foo'], @err, @out)
-          ).should be_true
-        end
-
-        it "should dump even if Interrupt exception is occurred" do
-          example_group = Class.new(::Spec::Example::ExampleGroup) do
-            describe("example_group")
-            it "no error" do
-            end
-
-            it "should interrupt" do
-              raise Interrupt, "I'm interrupting"
-            end
-          end
-
-          options = ::Spec::Runner::Options.new(@err, @out)
-          ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
-          options.reporter.should_receive(:dump)
-          options.add_example_group(example_group)
-
-          Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
-        end
-
-        it "should heckle when options have heckle_runner" do
-          example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
-            it "no error" do
-            end
-          end
-          options = ::Spec::Runner::Options.new(@err, @out)
-          ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
-          options.add_example_group example_group
-
-          heckle_runner = mock("heckle_runner")
-          heckle_runner.should_receive(:heckle_with)
-          $rspec_mocks.__send__(:mocks).delete(heckle_runner)
-
-          options.heckle_runner = heckle_runner
-          options.add_example_group(example_group)
-
-          Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
-          heckle_runner.rspec_verify
-        end
-
-        it "should run examples backwards if options.reverse is true" do
-          options = ::Spec::Runner::Options.new(@err, @out)
-          ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
-          options.reverse = true
-
-          b1 = Class.new(Spec::Example::ExampleGroup)
-          b2 = Class.new(Spec::Example::ExampleGroup)
-
-          b2.should_receive(:run).ordered
-          b1.should_receive(:run).ordered
-
-          options.add_example_group(b1)
-          options.add_example_group(b2)
-
-          Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
-        end
-
-        it "should pass its ExampleGroup to the reporter" do
-          example_group = describe("example_group") do
-            it "should" do
-            end
-          end
-          options = ::Spec::Runner::Options.new(@err, @out)
-          options.add_example_group(example_group)
-
-          ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
-          options.reporter.should_receive(:add_example_group).with(example_group)
-        
-          Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
-        end
-
-        it "runs only selected Examples when options.examples is set" do
-          options = ::Spec::Runner::Options.new(@err, @out)
-          ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
-
-          options.examples << "example group expected example"
-          expected_example_was_run = false
-          unexpected_example_was_run = false
-          example_group = describe("example group") do
-            it "expected example" do
-              expected_example_was_run = true
-            end
-            it "unexpected example" do
-              unexpected_example_was_run = true
-            end
-          end
-
-          options.reporter.should_receive(:add_example_group).with(example_group)
-
-          options.add_example_group example_group
-          run_with(options)
-
-          expected_example_was_run.should be_true
-          unexpected_example_was_run.should be_false
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/drb_command_line_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/drb_command_line_spec.rb
deleted file mode 100644
index b370be9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/drb_command_line_spec.rb
+++ /dev/null
@@ -1,97 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Runner
-    describe DrbCommandLine, "without running local server" do
-      unless Config::CONFIG['ruby_install_name'] == 'jruby'
-        it "should print error when there is no running local server" do
-          err = StringIO.new
-          out = StringIO.new
-          DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
-
-          err.rewind
-          err.read.should =~ /No server is running/
-        end
-      end    
-    end
-
-    describe "with local server" do
-
-      class CommandLineForSpec
-        def self.run(argv, stderr, stdout)
-          orig_options = Spec::Runner.options
-          tmp_options = OptionParser.parse(argv, stderr, stdout)
-          Spec::Runner.use tmp_options
-          Spec::Runner::CommandLine.run(tmp_options)
-        ensure
-          Spec::Runner.use orig_options
-        end
-      end
-      
-      unless Config::CONFIG['ruby_install_name'] == 'jruby'
-        before(:all) do
-          DRb.start_service("druby://127.0.0.1:8989", CommandLineForSpec)
-          @@drb_example_file_counter = 0
-        end
-
-        before(:each) do
-          create_dummy_spec_file
-          @@drb_example_file_counter = @@drb_example_file_counter + 1
-        end
-
-        after(:each) do
-          File.delete(@dummy_spec_filename)
-        end
-
-        after(:all) do
-          DRb.stop_service
-        end
-
-        it "should run against local server" do
-          out = run_spec_via_druby(['--version'])
-          out.should =~ /rspec \d+\.\d+\.\d+.*/n
-        end
-
-        it "should output green colorized text when running with --colour option" do
-          out = run_spec_via_druby(["--colour", @dummy_spec_filename])
-          out.should =~ /\e\[32m/n
-        end
-
-        it "should output red colorized text when running with -c option" do
-          out = run_spec_via_druby(["-c", @dummy_spec_filename])
-          out.should =~ /\e\[31m/n
-        end
-
-        def create_dummy_spec_file
-          @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{@@drb_example_file_counter}.rb"
-          File.open(@dummy_spec_filename, 'w') do |f|
-            f.write %{
-              describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do
-                it "should be output with green bar" do
-                  true.should be_true
-                end
-
-                it "should be output with red bar" do
-                  violated("I want to see a red bar!")
-                end
-              end
-            }
-          end
-        end
-
-        def run_spec_via_druby(argv)
-          err, out = StringIO.new, StringIO.new
-          out.instance_eval do
-            def tty?; true end
-          end
-          options = ::Spec::Runner::Options.new(err, out)
-          options.argv = argv
-          Spec::Runner::DrbCommandLine.run(options)
-          out.rewind; out.read
-        end
-      end
-      
-    end
-
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/empty_file.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/empty_file.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/examples.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/examples.txt
deleted file mode 100644
index 2fcbd35..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/examples.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Sir, if you were my husband, I would poison your drink.
-Madam, if you were my wife, I would drink it.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/failed.txt b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/failed.txt
deleted file mode 100644
index 07c5442..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/failed.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-heckler_spec.rb
-command_line_spec.rb
-reporter_spec.rb
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/base_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/base_formatter_spec.rb
deleted file mode 100644
index 268b78b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/base_formatter_spec.rb
+++ /dev/null
@@ -1,112 +0,0 @@
-require File.dirname(__FILE__) + "/../../../spec_helper"
-
-module Spec
-  module Runner
-    module Formatter
-      describe BaseFormatter do
-        before :each do
-          @options, @where = nil, nil
-          @formatter = BaseFormatter.new(@options, @where)
-        end
-        
-        class HaveInterfaceMatcher
-          def initialize(method)
-            @method = method
-          end
-          
-          attr_reader :object
-          attr_reader :method
-          
-          def matches?(object)
-            @object = object
-            object.respond_to?(@method)
-          end
-          
-          def with(arity)
-            WithArity.new(self, @method, arity)
-          end
-          
-          class WithArity
-            def initialize(matcher, method, arity)
-              @have_matcher = matcher
-              @method = method
-              @arity  = arity
-            end
-            
-            def matches?(an_object)
-              @have_matcher.matches?(an_object) && real_arity == @arity
-            end
-            
-            def failure_message
-              "#{@have_matcher} should have method :#{@method} with #{argument_arity}, but it had #{real_arity}"
-            end
-            
-            def arguments
-              self
-            end
-            
-            alias_method :argument, :arguments
-            
-          private
-            
-            def real_arity
-              @have_matcher.object.method(@method).arity
-            end
-            
-            def argument_arity
-              if @arity == 1
-                "1 argument"
-              else
-                "#{@arity} arguments"
-              end
-            end
-          end
-        end
-        
-        def have_interface_for(method)
-          HaveInterfaceMatcher.new(method)
-        end
-        
-        it "should have start as an interface with one argument"do
-          @formatter.should have_interface_for(:start).with(1).argument
-        end
-        
-        it "should have add_example_group as an interface with one argument" do
-          @formatter.should have_interface_for(:add_example_group).with(1).argument
-        end
-        
-        it "should have example_started as an interface with one argument" do
-          @formatter.should have_interface_for(:example_started).with(1).argument
-        end
-        
-        it "should have example_failed as an interface with three arguments" do
-          @formatter.should have_interface_for(:example_failed).with(3).arguments
-        end
-        
-        it "should have example_pending as an interface with three arguments" do
-          @formatter.should have_interface_for(:example_pending).with(3).arguments
-        end
-        
-        it "should have start_dump as an interface with zero arguments" do
-          @formatter.should have_interface_for(:start_dump).with(0).arguments
-        end
-        
-        it "should have dump_failure as an interface with two arguments" do
-          @formatter.should have_interface_for(:dump_failure).with(2).arguments
-        end
-        
-        it "should have dump_summary as an interface with two arguments" do
-          @formatter.should have_interface_for(:dump_failure).with(2).arguments
-        end
-
-        it "should have dump_pending as an interface with zero arguments" do
-          @formatter.should have_interface_for(:dump_pending).with(0).arguments
-        end
-
-        it "should have close  as an interface with zero arguments" do
-          @formatter.should have_interface_for(:close).with(0).arguments
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
deleted file mode 100644
index e54cdb0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
-require 'spec/runner/formatter/failing_example_groups_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      describe FailingExampleGroupsFormatter do
-        attr_reader :example_group, :formatter, :io
-
-        before(:each) do
-          @io = StringIO.new
-          options = mock('options')
-          @formatter = FailingExampleGroupsFormatter.new(options, io)
-          @example_group = Class.new(::Spec::Example::ExampleGroup)
-        end
-        
-        it "should add example name for each failure" do
-          formatter.add_example_group(Class.new(ExampleGroup).describe("b 1"))
-          formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new))
-          formatter.add_example_group(Class.new(ExampleGroup).describe("b 2"))
-          formatter.example_failed("e 2", nil, Reporter::Failure.new(nil, RuntimeError.new))
-          formatter.example_failed("e 3", nil, Reporter::Failure.new(nil, RuntimeError.new))
-          io.string.should include("b 1")
-          io.string.should include("b 2")
-        end
-
-        it "should delimit ExampleGroup superclass descriptions with :" do
-          parent_example_group = Class.new(example_group).describe("Parent")
-          child_example_group = Class.new(parent_example_group).describe("#child_method")
-          grand_child_example_group = Class.new(child_example_group).describe("GrandChild")
-
-          formatter.add_example_group(grand_child_example_group)
-          formatter.example_failed("failure", nil, Reporter::Failure.new(nil, RuntimeError.new))
-          io.string.should == "Parent#child_method GrandChild\n"
-        end
-
-        it "should remove druby url, which is used by Spec::Distributed" do
-          @formatter.add_example_group(Class.new(ExampleGroup).describe("something something (druby://99.99.99.99:99)"))
-          @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new))
-          io.string.should == "something something\n"
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/failing_examples_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
deleted file mode 100644
index fda64f9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
-require 'spec/runner/formatter/failing_examples_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      describe FailingExamplesFormatter do
-        before(:each) do
-          @io = StringIO.new
-          options = mock('options')
-          @formatter = FailingExamplesFormatter.new(options, @io)
-        end
-
-        it "should add example name for each failure" do
-          example_group_1 = Class.new(ExampleGroup).describe("A")
-          example_group_2 = Class.new(example_group_1).describe("B")
-
-          @formatter.add_example_group(example_group_1)
-          @formatter.example_failed(example_group_1.it("a1"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
-          @formatter.add_example_group(example_group_2)
-          @formatter.example_failed(example_group_2.it("b2"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
-          @formatter.example_failed(example_group_2.it("b3"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
-          @io.string.should eql(<<-EOF
-A a1
-A B b2
-A B b3
-EOF
-)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.4.html b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.4.html
deleted file mode 100644
index 9cc458f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.4.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RSpec results</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Expires" content="-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <style type="text/css">
-  body {
-    margin: 0;
-    padding: 0;
-    background: #fff;
-    font-size: 80%;
-  }
-  </style>
-</head>
-<body>
-<div class="rspec-report">
-  <script type="text/javascript">
-    // <![CDATA[
-function moveProgressBar(percentDone) {
-  document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
-  document.getElementById(element_id).style.background = '#C40D0D';
-  document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
-  if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-  else
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-}
-
-    // ]]>
-  </script>
-  <style type="text/css">
-#rspec-header {
-  background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
-  margin: 0px 10px 0px 10px;
-  padding: 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  font-size: 1.8em;
-}
-
-#summary {
-  margin: 0; padding: 5px 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  text-align: right;
-  position: absolute;
-  top: 0px;
-  right: 0px;
-}
-
-#summary p {
-  margin: 0 0 0 2px;
-}
-
-#summary #totals {
-  font-size: 1.2em;
-}
-
-.example_group {
-  margin: 0 10px 5px;
-  background: #fff;
-}
-
-dl {
-  margin: 0; padding: 0 0 5px;
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  padding: 3px;
-  background: #65C400;
-  color: #fff;
-  font-weight: bold;
-}
-
-dd {
-  margin: 5px 0 5px 5px;
-  padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
-  border-left: 5px solid #65C400;
-  border-bottom: 1px solid #65C400;
-  background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
-  border-left: 5px solid #C20000;
-  border-bottom: 1px solid #C20000;
-  color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
-  border-left: 5px solid #FAF834;
-  border-bottom: 1px solid #FAF834;
-  background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
-  border-left: 5px solid #0000C2;
-  border-bottom: 1px solid #0000C2;
-  color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
-  color: #000;
-  font-size: 12px;
-}
-
-a {
-  color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
-  font-size: 12px;
-  font-family: monospace;
-  color: white;
-  background-color: black;
-  padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
-  width: 75px;
-  padding: 0.1em 1em 0.2em 0;
-  color: #000000;
-  background-color: #FFFBD3;
-}
-
-  </style>
-
-<div id="rspec-header">
-  <h1>RSpec Results</h1>
-
-  <div id="summary">
-    <p id="totals"> </p>
-    <p id="duration"> </p>
-  </div>
-</div>
-
-<div class="results">
-<div class="example_group">
-  <dl>
-  <dt id="example_group_1">Mocker</dt>
-    <script type="text/javascript">moveProgressBar('5.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
-    <script type="text/javascript">makeRed('rspec-header');</script>
-    <script type="text/javascript">makeRed('example_group_1');</script>
-    <script type="text/javascript">moveProgressBar('11.7');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when expected message not received</span>
-      <div class="failure" id="failure_1">
-        <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">12</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span>
-<span class="linenum">15</span>  </code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('17.6');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when messages are received out of order</span>
-      <div class="failure" id="failure_2">
-        <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
-    <pre class="ruby"><code><span class="linenum">20</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('23.5');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
-      <div class="failure" id="failure_3">
-        <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
-    <pre class="ruby"><code><span class="linenum">26</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">27</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">28</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span>
-<span class="linenum">29</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span>
-<span class="linenum">30</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('29.4');</script>
-    <dd class="spec pending_fixed">
-      <span class="failed_spec_name">has a bug we need to fix</span>
-      <div class="failure" id="failure_4">
-        <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
-    <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span>    <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span>      <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span>      <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_2">Running specs with --diff</dt>
-    <script type="text/javascript">makeRed('example_group_2');</script>
-    <script type="text/javascript">moveProgressBar('35.2');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different strings</span>
-      <div class="failure" id="failure_5">
-        <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n",
-     got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
-        <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('41.1');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
-      <div class="failure" id="failure_6">
-        <div class="message"><pre>expected <Animal
-name=bob,
-species=tortoise
->
-, got <Animal
-name=bob,
-species=giraffe
->
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- <Animal
- name=bob,
--species=giraffe
-+species=tortoise
- >
-</pre></div>
-        <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
-    <pre class="ruby"><code><span class="linenum">32</span>    <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span>
-<span class="linenum">33</span>    <span class="ident">actual</span>   <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span>
-<span class="offending"><span class="linenum">34</span>    <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span>  <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_3">A consumer of a stub</dt>
-    <script type="text/javascript">moveProgressBar('47.0');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_4">A stubbed method on a class</dt>
-    <script type="text/javascript">moveProgressBar('52.9');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
-    <script type="text/javascript">moveProgressBar('58.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
-    <script type="text/javascript">moveProgressBar('64.7');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_5">A mock</dt>
-    <script type="text/javascript">moveProgressBar('70.5');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
-    <script type="text/javascript">moveProgressBar('76.4');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
-    <script type="text/javascript">moveProgressBar('82.3');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_6">pending example (using pending method)</dt>
-    <script type="text/javascript">makeYellow('example_group_6');</script>
-    <script type="text/javascript">moveProgressBar('88.2');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_7">pending example (with no block)</dt>
-    <script type="text/javascript">makeYellow('example_group_7');</script>
-    <script type="text/javascript">moveProgressBar('94.1');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_8">pending example (with block for pending)</dt>
-    <script type="text/javascript">makeYellow('example_group_8');</script>
-    <script type="text/javascript">moveProgressBar('100.0');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html
deleted file mode 100644
index 8bf1ed9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html
+++ /dev/null
@@ -1,387 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RSpec results</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Expires" content="-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <style type="text/css">
-  body {
-    margin: 0;
-    padding: 0;
-    background: #fff;
-    font-size: 80%;
-  }
-  </style>
-</head>
-<body>
-<div class="rspec-report">
-  <script type="text/javascript">
-    // <![CDATA[
-function moveProgressBar(percentDone) {
-  document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
-  document.getElementById(element_id).style.background = '#C40D0D';
-  document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
-  if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-  else
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-}
-
-    // ]]>
-  </script>
-  <style type="text/css">
-#rspec-header {
-  background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
-  margin: 0px 10px 0px 10px;
-  padding: 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  font-size: 1.8em;
-}
-
-#summary {
-  margin: 0; padding: 5px 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  text-align: right;
-  position: absolute;
-  top: 0px;
-  right: 0px;
-}
-
-#summary p {
-  margin: 0 0 0 2px;
-}
-
-#summary #totals {
-  font-size: 1.2em;
-}
-
-.example_group {
-  margin: 0 10px 5px;
-  background: #fff;
-}
-
-dl {
-  margin: 0; padding: 0 0 5px;
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  padding: 3px;
-  background: #65C400;
-  color: #fff;
-  font-weight: bold;
-}
-
-dd {
-  margin: 5px 0 5px 5px;
-  padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
-  border-left: 5px solid #65C400;
-  border-bottom: 1px solid #65C400;
-  background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
-  border-left: 5px solid #C20000;
-  border-bottom: 1px solid #C20000;
-  color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
-  border-left: 5px solid #FAF834;
-  border-bottom: 1px solid #FAF834;
-  background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
-  border-left: 5px solid #0000C2;
-  border-bottom: 1px solid #0000C2;
-  color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
-  color: #000;
-  font-size: 12px;
-}
-
-a {
-  color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
-  font-size: 12px;
-  font-family: monospace;
-  color: white;
-  background-color: black;
-  padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
-  width: 75px;
-  padding: 0.1em 1em 0.2em 0;
-  color: #000000;
-  background-color: #FFFBD3;
-}
-
-  </style>
-
-<div id="rspec-header">
-  <h1>RSpec Results</h1>
-
-  <div id="summary">
-    <p id="totals"> </p>
-    <p id="duration"> </p>
-  </div>
-</div>
-
-<div class="results">
-<div class="example_group">
-  <dl>
-  <dt id="example_group_1">Mocker</dt>
-    <script type="text/javascript">moveProgressBar('5.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
-    <script type="text/javascript">makeRed('rspec-header');</script>
-    <script type="text/javascript">makeRed('example_group_1');</script>
-    <script type="text/javascript">moveProgressBar('11.7');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when expected message not received</span>
-      <div class="failure" id="failure_1">
-        <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:13:in `should_receive'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span>  it "should fail when expected message not received" do
-<span class="linenum">12</span>    mock = mock("poke me")
-<span class="offending"><span class="linenum">13</span>    mock.should_receive(:poke)</span>
-<span class="linenum">14</span>  end
-<span class="linenum">15</span>  
-<span class="linenum">16</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('17.6');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when messages are received out of order</span>
-      <div class="failure" id="failure_2">
-        <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:22:in `three'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:16:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">20</span>    mock.should_receive(:three).ordered
-<span class="linenum">21</span>    mock.one
-<span class="offending"><span class="linenum">22</span>    mock.three</span>
-<span class="linenum">23</span>    mock.two
-<span class="linenum">24</span>  end
-<span class="linenum">25</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('23.5');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
-      <div class="failure" id="failure_3">
-        <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:28:in `should_not_receive'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">26</span>  it "should get yelled at when sending unexpected messages" do
-<span class="linenum">27</span>    mock = mock("don't talk to me")
-<span class="offending"><span class="linenum">28</span>    mock.should_not_receive(:any_message_at_all)</span>
-<span class="linenum">29</span>    mock.any_message_at_all
-<span class="linenum">30</span>  end
-<span class="linenum">31</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('29.4');</script>
-    <dd class="spec pending_fixed">
-      <span class="failed_spec_name">has a bug we need to fix</span>
-      <div class="failure" id="failure_4">
-        <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `pending'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span>  it "has a bug we need to fix" do
-<span class="offending"><span class="linenum">33</span>    pending "here is the bug" do</span>
-<span class="linenum">34</span>      # Actually, no. It's fixed. This will fail because it passes :-)
-<span class="linenum">35</span>      mock = mock("Bug")
-<span class="linenum">36</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_2">Running specs with --diff</dt>
-    <script type="text/javascript">makeRed('example_group_2');</script>
-    <script type="text/javascript">moveProgressBar('35.2');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different strings</span>
-      <div class="failure" id="failure_5">
-        <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n",
-     got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:13:in `=='
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span>framework for Ruby
-<span class="linenum">12</span>EOF
-<span class="offending"><span class="linenum">13</span>    usa.should == uk</span>
-<span class="linenum">14</span>  end
-<span class="linenum">15</span>
-<span class="linenum">16</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('41.1');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
-      <div class="failure" id="failure_6">
-        <div class="message"><pre>expected <Animal
-name=bob,
-species=tortoise
->
-, got <Animal
-name=bob,
-species=giraffe
->
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- <Animal
- name=bob,
--species=giraffe
-+species=tortoise
- >
-</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:34:in `should'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:31:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">32</span>    expected = Animal.new "bob", "giraffe"
-<span class="linenum">33</span>    actual   = Animal.new "bob", "tortoise"
-<span class="offending"><span class="linenum">34</span>    expected.should eql(actual)</span>
-<span class="linenum">35</span>  end
-<span class="linenum">36</span>end
-<span class="linenum">37</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_3">A consumer of a stub</dt>
-    <script type="text/javascript">moveProgressBar('47.0');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_4">A stubbed method on a class</dt>
-    <script type="text/javascript">moveProgressBar('52.9');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
-    <script type="text/javascript">moveProgressBar('58.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
-    <script type="text/javascript">moveProgressBar('64.7');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_5">A mock</dt>
-    <script type="text/javascript">moveProgressBar('70.5');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
-    <script type="text/javascript">moveProgressBar('76.4');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
-    <script type="text/javascript">moveProgressBar('82.3');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_6">pending example (using pending method)</dt>
-    <script type="text/javascript">makeYellow('example_group_6');</script>
-    <script type="text/javascript">moveProgressBar('88.2');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_7">pending example (with no block)</dt>
-    <script type="text/javascript">makeYellow('example_group_7');</script>
-    <script type="text/javascript">moveProgressBar('94.1');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_8">pending example (with block for pending)</dt>
-    <script type="text/javascript">makeYellow('example_group_8');</script>
-    <script type="text/javascript">moveProgressBar('100.0');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.5.html b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.5.html
deleted file mode 100644
index cda7226..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.5.html
+++ /dev/null
@@ -1,371 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RSpec results</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Expires" content="-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <style type="text/css">
-  body {
-    margin: 0;
-    padding: 0;
-    background: #fff;
-    font-size: 80%;
-  }
-  </style>
-</head>
-<body>
-<div class="rspec-report">
-  <script type="text/javascript">
-    // <![CDATA[
-function moveProgressBar(percentDone) {
-  document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
-  document.getElementById(element_id).style.background = '#C40D0D';
-  document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
-  if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-  else
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-}
-
-    // ]]>
-  </script>
-  <style type="text/css">
-#rspec-header {
-  background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
-  margin: 0px 10px 0px 10px;
-  padding: 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  font-size: 1.8em;
-}
-
-#summary {
-  margin: 0; padding: 5px 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  text-align: right;
-  position: absolute;
-  top: 0px;
-  right: 0px;
-}
-
-#summary p {
-  margin: 0 0 0 2px;
-}
-
-#summary #totals {
-  font-size: 1.2em;
-}
-
-.example_group {
-  margin: 0 10px 5px;
-  background: #fff;
-}
-
-dl {
-  margin: 0; padding: 0 0 5px;
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  padding: 3px;
-  background: #65C400;
-  color: #fff;
-  font-weight: bold;
-}
-
-dd {
-  margin: 5px 0 5px 5px;
-  padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
-  border-left: 5px solid #65C400;
-  border-bottom: 1px solid #65C400;
-  background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
-  border-left: 5px solid #C20000;
-  border-bottom: 1px solid #C20000;
-  color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
-  border-left: 5px solid #FAF834;
-  border-bottom: 1px solid #FAF834;
-  background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
-  border-left: 5px solid #0000C2;
-  border-bottom: 1px solid #0000C2;
-  color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
-  color: #000;
-  font-size: 12px;
-}
-
-a {
-  color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
-  font-size: 12px;
-  font-family: monospace;
-  color: white;
-  background-color: black;
-  padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
-  width: 75px;
-  padding: 0.1em 1em 0.2em 0;
-  color: #000000;
-  background-color: #FFFBD3;
-}
-
-  </style>
-
-<div id="rspec-header">
-  <h1>RSpec Results</h1>
-
-  <div id="summary">
-    <p id="totals"> </p>
-    <p id="duration"> </p>
-  </div>
-</div>
-
-<div class="results">
-<div class="example_group">
-  <dl>
-  <dt id="example_group_1">Mocker</dt>
-    <script type="text/javascript">moveProgressBar('5.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
-    <script type="text/javascript">makeRed('rspec-header');</script>
-    <script type="text/javascript">makeRed('example_group_1');</script>
-    <script type="text/javascript">moveProgressBar('11.7');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when expected message not received</span>
-      <div class="failure" id="failure_1">
-        <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">12</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span>
-<span class="linenum">15</span>  </code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('17.6');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when messages are received out of order</span>
-      <div class="failure" id="failure_2">
-        <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
-    <pre class="ruby"><code><span class="linenum">20</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('23.5');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
-      <div class="failure" id="failure_3">
-        <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
-    <pre class="ruby"><code><span class="linenum">26</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">27</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">28</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span>
-<span class="linenum">29</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span>
-<span class="linenum">30</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('29.4');</script>
-    <dd class="spec pending_fixed">
-      <span class="failed_spec_name">has a bug we need to fix</span>
-      <div class="failure" id="failure_4">
-        <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
-    <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span>    <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span>      <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span>      <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_2">Running specs with --diff</dt>
-    <script type="text/javascript">makeRed('example_group_2');</script>
-    <script type="text/javascript">moveProgressBar('35.2');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different strings</span>
-      <div class="failure" id="failure_5">
-        <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n",
-     got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
-        <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('41.1');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
-      <div class="failure" id="failure_6">
-        <div class="message"><pre>expected <Animal
-name=bob,
-species=tortoise
->
-, got <Animal
-name=bob,
-species=giraffe
->
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- <Animal
- name=bob,
--species=giraffe
-+species=tortoise
- >
-</pre></div>
-        <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
-    <pre class="ruby"><code><span class="linenum">32</span>    <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span>
-<span class="linenum">33</span>    <span class="ident">actual</span>   <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span>
-<span class="offending"><span class="linenum">34</span>    <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span>  <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_3">A consumer of a stub</dt>
-    <script type="text/javascript">moveProgressBar('47.0');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_4">A stubbed method on a class</dt>
-    <script type="text/javascript">moveProgressBar('52.9');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
-    <script type="text/javascript">moveProgressBar('58.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
-    <script type="text/javascript">moveProgressBar('64.7');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_5">A mock</dt>
-    <script type="text/javascript">moveProgressBar('70.5');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
-    <script type="text/javascript">moveProgressBar('76.4');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
-    <script type="text/javascript">moveProgressBar('82.3');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_6">pending example (using pending method)</dt>
-    <script type="text/javascript">makeYellow('example_group_6');</script>
-    <script type="text/javascript">moveProgressBar('88.2');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_7">pending example (with no block)</dt>
-    <script type="text/javascript">makeYellow('example_group_7');</script>
-    <script type="text/javascript">moveProgressBar('94.1');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_8">pending example (with block for pending)</dt>
-    <script type="text/javascript">makeYellow('example_group_8');</script>
-    <script type="text/javascript">moveProgressBar('100.0');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
deleted file mode 100644
index 4666218..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
+++ /dev/null
@@ -1,381 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RSpec results</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Expires" content="-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <style type="text/css">
-  body {
-    margin: 0;
-    padding: 0;
-    background: #fff;
-    font-size: 80%;
-  }
-  </style>
-</head>
-<body>
-<div class="rspec-report">
-  <script type="text/javascript">
-    // <![CDATA[
-function moveProgressBar(percentDone) {
-  document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
-  document.getElementById(element_id).style.background = '#C40D0D';
-  document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
-  if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-  else
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-}
-
-    // ]]>
-  </script>
-  <style type="text/css">
-#rspec-header {
-  background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
-  margin: 0px 10px 0px 10px;
-  padding: 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  font-size: 1.8em;
-}
-
-#summary {
-  margin: 0; padding: 5px 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  text-align: right;
-  position: absolute;
-  top: 0px;
-  right: 0px;
-}
-
-#summary p {
-  margin: 0 0 0 2px;
-}
-
-#summary #totals {
-  font-size: 1.2em;
-}
-
-.example_group {
-  margin: 0 10px 5px;
-  background: #fff;
-}
-
-dl {
-  margin: 0; padding: 0 0 5px;
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  padding: 3px;
-  background: #65C400;
-  color: #fff;
-  font-weight: bold;
-}
-
-dd {
-  margin: 5px 0 5px 5px;
-  padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
-  border-left: 5px solid #65C400;
-  border-bottom: 1px solid #65C400;
-  background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
-  border-left: 5px solid #C20000;
-  border-bottom: 1px solid #C20000;
-  color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
-  border-left: 5px solid #FAF834;
-  border-bottom: 1px solid #FAF834;
-  background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
-  border-left: 5px solid #0000C2;
-  border-bottom: 1px solid #0000C2;
-  color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
-  color: #000;
-  font-size: 12px;
-}
-
-a {
-  color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
-  font-size: 12px;
-  font-family: monospace;
-  color: white;
-  background-color: black;
-  padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
-  width: 75px;
-  padding: 0.1em 1em 0.2em 0;
-  color: #000000;
-  background-color: #FFFBD3;
-}
-
-  </style>
-
-<div id="rspec-header">
-  <h1>RSpec Results</h1>
-
-  <div id="summary">
-    <p id="totals"> </p>
-    <p id="duration"> </p>
-  </div>
-</div>
-
-<div class="results">
-<div class="example_group">
-  <dl>
-  <dt id="example_group_1">Mocker</dt>
-    <script type="text/javascript">moveProgressBar('5.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
-    <script type="text/javascript">makeRed('rspec-header');</script>
-    <script type="text/javascript">makeRed('example_group_1');</script>
-    <script type="text/javascript">moveProgressBar('11.7');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when expected message not received</span>
-      <div class="failure" id="failure_1">
-        <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:13:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">12</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span>
-<span class="linenum">15</span>  </code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('17.6');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when messages are received out of order</span>
-      <div class="failure" id="failure_2">
-        <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:22:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:16:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">20</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('23.5');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
-      <div class="failure" id="failure_3">
-        <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">26</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">27</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">28</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span>
-<span class="linenum">29</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span>
-<span class="linenum">30</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('29.4');</script>
-    <dd class="spec pending_fixed">
-      <span class="failed_spec_name">has a bug we need to fix</span>
-      <div class="failure" id="failure_4">
-        <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span>    <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span>      <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span>      <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_2">Running specs with --diff</dt>
-    <script type="text/javascript">makeRed('example_group_2');</script>
-    <script type="text/javascript">moveProgressBar('35.2');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different strings</span>
-      <div class="failure" id="failure_5">
-        <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n",
-     got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:13:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:2:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('41.1');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
-      <div class="failure" id="failure_6">
-        <div class="message"><pre>expected <Animal
-name=bob,
-species=tortoise
->
-, got <Animal
-name=bob,
-species=giraffe
->
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- <Animal
- name=bob,
--species=giraffe
-+species=tortoise
- >
-</pre></div>
-        <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:34:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:31:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
-    <pre class="ruby"><code><span class="linenum">32</span>    <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span>
-<span class="linenum">33</span>    <span class="ident">actual</span>   <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span>
-<span class="offending"><span class="linenum">34</span>    <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span>  <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_3">A consumer of a stub</dt>
-    <script type="text/javascript">moveProgressBar('47.0');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_4">A stubbed method on a class</dt>
-    <script type="text/javascript">moveProgressBar('52.9');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
-    <script type="text/javascript">moveProgressBar('58.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
-    <script type="text/javascript">moveProgressBar('64.7');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_5">A mock</dt>
-    <script type="text/javascript">moveProgressBar('70.5');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
-    <script type="text/javascript">moveProgressBar('76.4');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
-    <script type="text/javascript">moveProgressBar('82.3');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_6">pending example (using pending method)</dt>
-    <script type="text/javascript">makeYellow('example_group_6');</script>
-    <script type="text/javascript">moveProgressBar('88.2');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_7">pending example (with no block)</dt>
-    <script type="text/javascript">makeYellow('example_group_7');</script>
-    <script type="text/javascript">moveProgressBar('94.1');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_8">pending example (with block for pending)</dt>
-    <script type="text/javascript">makeYellow('example_group_8');</script>
-    <script type="text/javascript">moveProgressBar('100.0');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.6.html b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.6.html
deleted file mode 100644
index bc66375..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatted-1.8.6.html
+++ /dev/null
@@ -1,370 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RSpec results</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Expires" content="-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <style type="text/css">
-  body {
-    margin: 0;
-    padding: 0;
-    background: #fff;
-    font-size: 80%;
-  }
-  </style>
-</head>
-<body>
-<div class="rspec-report">
-  <script type="text/javascript">
-    // <![CDATA[
-function moveProgressBar(percentDone) {
-  document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
-  document.getElementById(element_id).style.background = '#C40D0D';
-  document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
-  if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-  else
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-}
-
-    // ]]>
-  </script>
-  <style type="text/css">
-#rspec-header {
-  background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
-  margin: 0px 10px 0px 10px;
-  padding: 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  font-size: 1.8em;
-}
-
-#summary {
-  margin: 0; padding: 5px 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  text-align: right;
-  position: absolute;
-  top: 0px;
-  right: 0px;
-}
-
-#summary p {
-  margin: 0 0 0 2px;
-}
-
-#summary #totals {
-  font-size: 1.2em;
-}
-
-.example_group {
-  margin: 0 10px 5px;
-  background: #fff;
-}
-
-dl {
-  margin: 0; padding: 0 0 5px;
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  padding: 3px;
-  background: #65C400;
-  color: #fff;
-  font-weight: bold;
-}
-
-dd {
-  margin: 5px 0 5px 5px;
-  padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
-  border-left: 5px solid #65C400;
-  border-bottom: 1px solid #65C400;
-  background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
-  border-left: 5px solid #C20000;
-  border-bottom: 1px solid #C20000;
-  color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
-  border-left: 5px solid #FAF834;
-  border-bottom: 1px solid #FAF834;
-  background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
-  border-left: 5px solid #0000C2;
-  border-bottom: 1px solid #0000C2;
-  color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
-  color: #000;
-  font-size: 12px;
-}
-
-a {
-  color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
-  font-size: 12px;
-  font-family: monospace;
-  color: white;
-  background-color: black;
-  padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
-  width: 75px;
-  padding: 0.1em 1em 0.2em 0;
-  color: #000000;
-  background-color: #FFFBD3;
-}
-
-  </style>
-
-<div id="rspec-header">
-  <h1>RSpec Results</h1>
-
-  <div id="summary">
-    <p id="totals"> </p>
-    <p id="duration"> </p>
-  </div>
-</div>
-
-<div class="results">
-<div class="example_group">
-  <dl>
-  <dt id="example_group_1">Mocker</dt>
-    <script type="text/javascript">moveProgressBar('5.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
-    <script type="text/javascript">makeRed('rspec-header');</script>
-    <script type="text/javascript">makeRed('example_group_1');</script>
-    <script type="text/javascript">moveProgressBar('11.7');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when expected message not received</span>
-      <div class="failure" id="failure_1">
-        <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">12</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span>
-<span class="linenum">15</span>  </code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('17.6');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when messages are received out of order</span>
-      <div class="failure" id="failure_2">
-        <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
-    <pre class="ruby"><code><span class="linenum">20</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('23.5');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
-      <div class="failure" id="failure_3">
-        <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:29:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
-    <pre class="ruby"><code><span class="linenum">27</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span>
-<span class="linenum">28</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span>
-<span class="offending"><span class="linenum">29</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
-<span class="linenum">30</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('29.4');</script>
-    <dd class="spec pending_fixed">
-      <span class="failed_spec_name">has a bug we need to fix</span>
-      <div class="failure" id="failure_4">
-        <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
-        <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
-    <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span>    <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span>      <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span>      <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_2">Running specs with --diff</dt>
-    <script type="text/javascript">makeRed('example_group_2');</script>
-    <script type="text/javascript">moveProgressBar('35.2');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different strings</span>
-      <div class="failure" id="failure_5">
-        <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n",
-     got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behaviour driven development
-+behavior driven development
- framework for Ruby
-</pre></div>
-        <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('41.1');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
-      <div class="failure" id="failure_6">
-        <div class="message"><pre>expected <Animal
-name=bob,
-species=tortoise
->
-, got <Animal
-name=bob,
-species=giraffe
->
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- <Animal
- name=bob,
--species=tortoise
-+species=giraffe
- >
-</pre></div>
-        <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
-    <pre class="ruby"><code><span class="linenum">32</span>    <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span>
-<span class="linenum">33</span>    <span class="ident">actual</span>   <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span>
-<span class="offending"><span class="linenum">34</span>    <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span>  <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_3">A consumer of a stub</dt>
-    <script type="text/javascript">moveProgressBar('47.0');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_4">A stubbed method on a class</dt>
-    <script type="text/javascript">moveProgressBar('52.9');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
-    <script type="text/javascript">moveProgressBar('58.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
-    <script type="text/javascript">moveProgressBar('64.7');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_5">A mock</dt>
-    <script type="text/javascript">moveProgressBar('70.5');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
-    <script type="text/javascript">moveProgressBar('76.4');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
-    <script type="text/javascript">moveProgressBar('82.3');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_6">pending example (using pending method)</dt>
-    <script type="text/javascript">makeYellow('example_group_6');</script>
-    <script type="text/javascript">moveProgressBar('88.2');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_7">pending example (with no block)</dt>
-    <script type="text/javascript">makeYellow('example_group_7');</script>
-    <script type="text/javascript">moveProgressBar('94.1');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_8">pending example (with block for pending)</dt>
-    <script type="text/javascript">makeYellow('example_group_8');</script>
-    <script type="text/javascript">moveProgressBar('100.0');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatter_spec.rb
deleted file mode 100644
index abf2283..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/html_formatter_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
-require 'hpricot' # Needed to compare generated with wanted HTML
-require 'spec/runner/formatter/html_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      describe HtmlFormatter do
-        ['--diff', '--dry-run'].each do |opt|
-          def jruby?
-            PLATFORM == 'java'
-          end
-    
-          it "should produce HTML identical to the one we designed manually with #{opt}" do
-            root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
-            suffix = jruby? ? '-jruby' : ''
-            expected_file = File.dirname(__FILE__) + "/html_formatted-#{::VERSION}#{suffix}.html"
-            raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file)
-            expected_html = File.read(expected_file)
-
-            Dir.chdir(root) do
-              args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb',  'examples/pure/pending_example.rb', '--format', 'html', opt]
-              err = StringIO.new
-              out = StringIO.new
-              run_with OptionParser.parse(args, err, out)
-
-              seconds = /\d+\.\d+ seconds/
-              html = out.string.gsub seconds, 'x seconds'
-              expected_html.gsub! seconds, 'x seconds'
-
-              if opt == '--diff'
-                # Uncomment this line temporarily in order to overwrite the expected with actual.
-                # Use with care!!!
-                # File.open(expected_file, 'w') {|io| io.write(html)}
-
-                doc = Hpricot(html)
-                backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
-                doc.search("div.backtrace").remove
-
-                expected_doc = Hpricot(expected_html)
-                expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
-                expected_doc.search("div.backtrace").remove
-
-                doc.inner_html.should == expected_doc.inner_html
-
-                expected_backtraces.each_with_index do |expected_line, i|
-                  expected_path, expected_line_number, expected_suffix = expected_line.split(':')
-                  actual_path, actual_line_number, actual_suffix = backtraces[i].split(':')
-                  File.expand_path(actual_path).should == File.expand_path(expected_path)
-                  actual_line_number.should == expected_line_number
-                end
-              else
-                html.should =~ /This was a dry-run/m
-              end
-            end
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/nested_text_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/nested_text_formatter_spec.rb
deleted file mode 100644
index 48db494..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/nested_text_formatter_spec.rb
+++ /dev/null
@@ -1,318 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-require 'spec/runner/formatter/nested_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      describe NestedTextFormatter do
-        with_sandboxed_options do
-          attr_reader :io, :options, :formatter, :example_group
-          before(:each) do
-            @io = StringIO.new
-            options.stub!(:dry_run).and_return(false)
-            options.stub!(:colour).and_return(false)
-            @formatter = NestedTextFormatter.new(options, io)
-            @example_group = ::Spec::Example::ExampleGroup.describe("ExampleGroup") do
-              specify "example" do
-              end
-            end
-          end
-
-          describe "where ExampleGroup has no superclasss with a description" do
-            before do
-              add_example_group
-            end
-
-            def add_example_group
-              formatter.add_example_group(example_group)
-            end
-
-            describe "#dump_summary" do
-              it "should produce standard summary without pending when pending has a 0 count" do
-                formatter.dump_summary(3, 2, 1, 0)
-                io.string.should == <<-OUT
-ExampleGroup
-
-Finished in 3 seconds
-
-2 examples, 1 failure
-OUT
-              end
-
-              it "should produce standard summary" do
-                formatter.dump_summary(3, 2, 1, 4)
-                io.string.should == <<-OUT
-ExampleGroup
-
-Finished in 3 seconds
-
-2 examples, 1 failure, 4 pending
-OUT
-              end
-            end
-
-            describe "#add_example_group" do
-              describe "when ExampleGroup has description_args" do
-                before do
-                  example_group.description_args.should_not be_nil
-                end
-
-                describe "when ExampleGroup has no parents with description args" do
-                  before do
-                    example_group.superclass.description_args.should be_empty
-                  end
-
-                  it "should push ExampleGroup name" do
-                    io.string.should eql("ExampleGroup\n")
-                  end
-                end
-
-                describe "when ExampleGroup has one parent with description args" do
-                  attr_reader :child_example_group
-                  def add_example_group
-                    example_group.description_args.should_not be_nil
-                    @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
-                  end
-
-                  describe "and parent ExampleGroups have not been printed" do
-                    before do
-                      formatter.add_example_group(child_example_group)
-                    end
-
-                    it "should push ExampleGroup name with two spaces of indentation" do
-                      io.string.should == <<-OUT
-ExampleGroup
-  Child ExampleGroup
-OUT
-                    end
-                  end
-
-                  describe "and parent ExampleGroups have been printed" do
-                    before do
-                      formatter.add_example_group(example_group)
-                      io.string = ""
-                      formatter.add_example_group(child_example_group)
-                    end
-
-                    it "should print only the indented ExampleGroup" do
-                      io.string.should == <<-OUT
-  Child ExampleGroup
-OUT
-                    end
-                  end
-                end
-
-                describe "when ExampleGroup has two parents with description args" do
-                  attr_reader :child_example_group, :grand_child_example_group
-                  def add_example_group
-                    example_group.description_args.should_not be_nil
-                    @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
-                    @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
-                  end
-
-                  describe "and parent ExampleGroups have not been printed" do
-                    before do
-                      formatter.add_example_group(grand_child_example_group)
-                    end
-
-                    it "should print the entire nested ExampleGroup heirarchy" do
-                      io.string.should == <<-OUT
-ExampleGroup
-  Child ExampleGroup
-    GrandChild ExampleGroup
-OUT
-                    end
-                  end
-
-                  describe "and parent ExampleGroups have been printed" do
-                    before do
-                      formatter.add_example_group(child_example_group)
-                      io.string = ""
-                      formatter.add_example_group(grand_child_example_group)
-                    end
-
-                    it "should print only the indented ExampleGroup" do
-                      io.string.should == <<-OUT
-    GrandChild ExampleGroup
-OUT
-                    end
-                  end
-                end
-              end
-
-              describe "when ExampleGroup description_args is nil" do
-                attr_reader :child_example_group
-
-                describe "and parent ExampleGroups have not been printed" do
-                  def add_example_group
-                    @child_example_group = Class.new(example_group)
-                    child_example_group.description_args.should be_empty
-                    formatter.add_example_group(child_example_group)
-                  end
-
-                  it "should render only the parent ExampleGroup" do
-                    io.string.should == <<-OUT
-ExampleGroup
-OUT
-                  end
-                end
-
-                describe "and parent ExampleGroups have been printed" do
-                  def add_example_group
-                    @child_example_group = Class.new(example_group)
-                    child_example_group.description_args.should be_empty
-                    formatter.add_example_group(example_group)
-                    io.string = ""
-                    formatter.add_example_group(child_example_group)
-                  end
-
-                  it "should not render anything" do
-                    io.string.should == ""
-                  end
-                end
-              end
-
-              describe "when ExampleGroup description_args is empty" do
-                def add_example_group
-                  example_group.set_description
-                  example_group.description_args.should be_empty
-                  super
-                end
-
-                it "should not render anything" do
-                  io.string.should == ""
-                end
-              end
-            end
-
-            describe "#example_failed" do
-              describe "where ExampleGroup has no superclasss with a description" do
-                describe "when having an error" do
-                  it "should push failing spec name and failure number" do
-                    formatter.example_failed(
-                      example_group.it("spec"),
-                      98,
-                      Reporter::Failure.new("c s", RuntimeError.new)
-                    )
-                    io.string.should == <<-OUT
-ExampleGroup
-  spec (ERROR - 98)
-OUT
-                  end
-                end
-
-                describe "when having an expectation failure" do
-                  it "should push failing spec name and failure number" do
-                    formatter.example_failed(
-                      example_group.it("spec"),
-                      98,
-                      Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
-                    )
-                    io.string.should == <<-OUT
-ExampleGroup
-  spec (FAILED - 98)
-OUT
-                  end
-                end
-              end
-
-              describe "where ExampleGroup has two superclasses with a description" do
-                attr_reader :child_example_group, :grand_child_example_group
-
-                def add_example_group
-                  @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
-                  @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
-                  formatter.add_example_group(grand_child_example_group)
-                end
-
-                describe "when having an error" do
-                  it "should push failing spec name and failure number" do
-                    formatter.example_failed(
-                      grand_child_example_group.it("spec"),
-                      98,
-                      Reporter::Failure.new("c s", RuntimeError.new)
-                    )
-                    io.string.should == <<-OUT
-ExampleGroup
-  Child ExampleGroup
-    GrandChild ExampleGroup
-      spec (ERROR - 98)
-OUT
-                  end
-                end
-
-                describe "when having an expectation" do
-                  it "should push failing spec name and failure number" do
-                    formatter.example_failed(
-                      grand_child_example_group.it("spec"),
-                      98,
-                      Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
-                    )
-                    io.string.should == <<-OUT
-ExampleGroup
-  Child ExampleGroup
-    GrandChild ExampleGroup
-      spec (FAILED - 98)
-OUT
-                  end
-                end
-              end
-            end
-
-            describe "#start" do
-              it "should push nothing on start" do
-                formatter.start(5)
-                io.string.should == <<-OUT
-ExampleGroup
-OUT
-              end
-            end
-
-            describe "#start_dump" do
-              it "should push nothing on start dump" do
-                formatter.start_dump
-                io.string.should == <<-OUT
-ExampleGroup
-OUT
-              end
-            end
-
-            describe "#example_passed" do
-              it "should push passing spec name" do
-                formatter.example_passed(example_group.it("spec"))
-                io.string.should == <<-OUT
-ExampleGroup
-  spec
-OUT
-              end
-            end
-
-            describe "#example_pending" do
-              it "should push pending example name and message" do
-                formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
-                io.string.should == <<-OUT
-ExampleGroup
-  example (PENDING: reason)
-OUT
-              end
-
-              it "should dump pending" do
-                formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
-                io.rewind
-                formatter.dump_pending
-                io.string.should =~ /Pending\:\nExampleGroup example \(reason\)\n/
-              end
-            end
-
-            def have_single_level_example_group_output(expected_output)
-              expected = "ExampleGroup\n  #{expected_output}"
-              ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
-                actual == expected
-              end
-            end
-          end
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/profile_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/profile_formatter_spec.rb
deleted file mode 100644
index 9818054..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/profile_formatter_spec.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-require 'spec/runner/formatter/profile_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      describe ProfileFormatter do
-        attr_reader :io, :formatter
-        before(:each) do
-          @io = StringIO.new
-          options = mock('options')
-          options.stub!(:colour).and_return(true)
-          @formatter = ProfileFormatter.new(options, io)
-        end
-        
-        it "should print a heading" do
-          formatter.start(0)
-          io.string.should eql("Profiling enabled.\n")
-        end
-        
-        it "should record the current time when starting a new example" do
-          now = Time.now
-          Time.stub!(:now).and_return(now)
-          formatter.example_started('should foo')
-          formatter.instance_variable_get("@time").should == now
-        end
-        
-        it "should correctly record a passed example" do
-          now = Time.now
-          Time.stub!(:now).and_return(now)
-          parent_example_group = Class.new(ExampleGroup).describe('Parent')
-          child_example_group = Class.new(parent_example_group).describe('Child')
-
-          formatter.add_example_group(child_example_group)
-          
-          formatter.example_started('when foo')
-          Time.stub!(:now).and_return(now+1)
-          formatter.example_passed(stub('foo', :description => 'i like ice cream'))
-
-          formatter.start_dump
-          io.string.should include('Parent Child')
-        end
-        
-        it "should sort the results in descending order" do
-          formatter.instance_variable_set("@example_times", [['a', 'a', 0.1], ['b', 'b', 0.3], ['c', 'c', 0.2]])
-          formatter.start_dump
-          formatter.instance_variable_get("@example_times").should == [ ['b', 'b', 0.3], ['c', 'c', 0.2], ['a', 'a', 0.1]]
-        end
-        
-        it "should print the top 10 results" do
-          example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup")
-          formatter.add_example_group(example_group)
-          formatter.instance_variable_set("@time", Time.now)
-          
-          15.times do 
-            formatter.example_passed(stub('foo', :description => 'i like ice cream'))
-          end
-          
-          io.should_receive(:print).exactly(10)
-          formatter.start_dump
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/progress_bar_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
deleted file mode 100644
index b03d687..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
+++ /dev/null
@@ -1,155 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-require 'spec/runner/formatter/progress_bar_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      describe ProgressBarFormatter do
-        before(:each) do
-          @io = StringIO.new
-          @options = mock('options')
-          @options.stub!(:dry_run).and_return(false)
-          @options.stub!(:colour).and_return(false)
-          @formatter = ProgressBarFormatter.new(@options, @io)
-        end
-
-        it "should produce line break on start dump" do
-          @formatter.start_dump
-          @io.string.should eql("\n")
-        end
-
-        it "should produce standard summary without pending when pending has a 0 count" do
-          @formatter.dump_summary(3, 2, 1, 0)
-          @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure\n")
-        end
-        
-        it "should produce standard summary" do
-          example_group = ExampleGroup.describe("example_group") do
-            specify "example" do
-            end
-          end
-          example = example_group.examples.first
-          @formatter.example_pending(example, "message", "#{__FILE__}:#{__LINE__}")
-          @io.rewind
-          @formatter.dump_summary(3, 2, 1, 1)
-          @io.string.should eql(%Q|
-Finished in 3 seconds
-
-2 examples, 1 failure, 1 pending
-|)
-        end
-
-        it "should push green dot for passing spec" do
-          @io.should_receive(:tty?).and_return(true)
-          @options.should_receive(:colour).and_return(true)
-          @formatter.example_passed("spec")
-          @io.string.should == "\e[32m.\e[0m"
-        end
-
-        it "should push red F for failure spec" do
-          @io.should_receive(:tty?).and_return(true)
-          @options.should_receive(:colour).and_return(true)
-          @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new))
-          @io.string.should eql("\e[31mF\e[0m")
-        end
-
-        it "should push magenta F for error spec" do
-          @io.should_receive(:tty?).and_return(true)
-          @options.should_receive(:colour).and_return(true)
-          @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", RuntimeError.new))
-          @io.string.should eql("\e[35mF\e[0m")
-        end
-
-        it "should push blue F for fixed pending spec" do
-          @io.should_receive(:tty?).and_return(true)
-          @options.should_receive(:colour).and_return(true)
-          @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Example::PendingExampleFixedError.new))
-          @io.string.should eql("\e[34mF\e[0m")
-        end
-
-        it "should push nothing on start" do
-          @formatter.start(4)
-          @io.string.should eql("")
-        end
-
-        it "should ensure two ':' in the first backtrace" do
-          backtrace = ["/tmp/x.rb:1", "/tmp/x.rb:2", "/tmp/x.rb:3"]
-          @formatter.format_backtrace(backtrace).should eql(<<-EOE.rstrip)
-/tmp/x.rb:1:
-/tmp/x.rb:2:
-/tmp/x.rb:3:
-EOE
-
-          backtrace = ["/tmp/x.rb:1: message", "/tmp/x.rb:2", "/tmp/x.rb:3"]
-          @formatter.format_backtrace(backtrace).should eql(<<-EOE.rstrip)
-/tmp/x.rb:1: message
-/tmp/x.rb:2:
-/tmp/x.rb:3:
-EOE
-        end
-        
-        it "should dump pending" do
-          example_group = ExampleGroup.describe("example_group") do
-            specify "example" do
-            end
-          end
-          example = example_group.examples.first
-          @formatter.example_pending(example, "message", "#{__FILE__}:#{__LINE__}")
-          @formatter.dump_pending
-          @io.string.should =~ /Pending\:\nexample_group example \(message\)\n/
-        end
-        
-        it "should dump pending with file and line number" do
-          example_group = ExampleGroup.describe("example_group") do
-            specify "example" do
-            end
-          end
-          example = example_group.examples.first
-          file = __FILE__
-          line = __LINE__ + 1
-          @formatter.example_pending(example, "message", "#{__FILE__}:#{__LINE__}")
-          @formatter.dump_pending
-          @io.string.should ==(<<-HERE)
-*
-Pending:
-example_group example (message)
-  Called from #{file}:#{line}
-HERE
-        end
-      end
-      
-      describe "ProgressBarFormatter outputting to custom out" do
-        before(:each) do
-          @out = mock("out")
-          @options = mock('options')
-          @out.stub!(:puts)
-          @formatter = ProgressBarFormatter.new(@options, @out)
-          @formatter.class.send :public, :output_to_tty?
-        end
-
-        after(:each) do
-          @formatter.class.send :protected, :output_to_tty?
-        end
-
-        it "should not throw NoMethodError on output_to_tty?" do
-          @out.should_receive(:tty?).and_raise(NoMethodError)
-          @formatter.output_to_tty?.should be_false
-        end
-      end
-
-      describe ProgressBarFormatter, "dry run" do
-        before(:each) do
-          @io = StringIO.new
-          options = mock('options')
-          options.stub!(:dry_run).and_return(true)
-          @formatter = ProgressBarFormatter.new(options, @io)
-        end
-      
-        it "should not produce summary on dry run" do
-          @formatter.dump_summary(3, 2, 1, 0)
-          @io.string.should eql("")
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/snippet_extractor_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/snippet_extractor_spec.rb
deleted file mode 100644
index 4bb2f15..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/snippet_extractor_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-require 'spec/runner/formatter/snippet_extractor'
-
-module Spec
-  module Runner
-    module Formatter
-      describe SnippetExtractor do
-        it "should fall back on a default message when it doesn't understand a line" do
-          SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1]
-        end
-
-        it "should fall back on a default message when it doesn't find the file" do
-          SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech"
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/spec_mate_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/spec_mate_formatter_spec.rb
deleted file mode 100644
index 6a91aab..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/spec_mate_formatter_spec.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
-require 'hpricot' # Needed to compare generated with wanted HTML
-require 'spec/runner/formatter/text_mate_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      describe TextMateFormatter do
-        attr_reader :root, :suffix, :expected_file
-        before do
-          @root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
-          @suffix = jruby? ? '-jruby' : ''
-          @expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html"
-        end
-
-        def jruby?
-          PLATFORM == 'java'
-        end
-
-        def produces_html_identical_to_manually_designed_document(opt)
-          root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
-
-          Dir.chdir(root) do
-            args = [
-              'failing_examples/mocking_example.rb',
-                'failing_examples/diffing_spec.rb',
-                'examples/pure/stubbing_example.rb',
-                'examples/pure/pending_example.rb',
-                '--format',
-                'textmate',
-                opt
-            ]
-            err = StringIO.new
-            out = StringIO.new
-
-            run_with ::Spec::Runner::OptionParser.parse(args, err, out)
-              
-            yield(out.string)
-          end          
-        end
-
-        # # Uncomment this spec temporarily in order to overwrite the expected with actual.
-        # # Use with care!!!
-        # describe TextMateFormatter, "functional spec file generator" do
-        #   it "generates a new comparison file" do
-        #     Dir.chdir(root) do
-        #       args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb',  'examples/pure/pending_example.rb', '--format', 'textmate', '--diff']
-        #       err = StringIO.new
-        #       out = StringIO.new
-        #       Spec::Runner::CommandLine.run(
-        #         ::Spec::Runner::OptionParser.parse(args, err, out)
-        #       )
-        # 
-        #       seconds = /\d+\.\d+ seconds/
-        #       html = out.string.gsub seconds, 'x seconds'
-        # 
-        #       File.open(expected_file, 'w') {|io| io.write(html)}
-        #     end
-        #   end
-        # end
-
-         describe "functional spec using --diff" do
-           it "should produce HTML identical to the one we designed manually with --diff" do
-             produces_html_identical_to_manually_designed_document("--diff") do |html|
-               suffix = jruby? ? '-jruby' : ''
-               expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html"
-               unless File.file?(expected_file)
-                 raise "There is no HTML file with expected content for this platform: #{expected_file}"
-               end
-               expected_html = File.read(expected_file)
-
-               seconds = /\d+\.\d+ seconds/
-               html.gsub! seconds, 'x seconds'
-               expected_html.gsub! seconds, 'x seconds'
-
-               doc = Hpricot(html)
-               backtraces = doc.search("div.backtrace/a")
-               doc.search("div.backtrace").remove
-
-               expected_doc = Hpricot(expected_html)
-               expected_doc.search("div.backtrace").remove
-
-               doc.inner_html.should == expected_doc.inner_html
-
-               backtraces.each do |backtrace_link|
-                 backtrace_link[:href].should include("txmt://open?url=")
-               end
-             end
-           end
-
-         end
-
-         describe "functional spec using --dry-run" do
-           it "should produce HTML identical to the one we designed manually with --dry-run" do
-             produces_html_identical_to_manually_designed_document("--dry-run") do |html, expected_html|
-               html.should =~ /This was a dry-run/m
-             end
-           end
-         end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/specdoc_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/specdoc_formatter_spec.rb
deleted file mode 100644
index 1427c47..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/specdoc_formatter_spec.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-require 'spec/runner/formatter/specdoc_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      describe SpecdocFormatter do
-        with_sandboxed_options do
-          attr_reader :io, :formatter, :example_group
-          before(:each) do
-            @io = StringIO.new
-            options.stub!(:dry_run).and_return(false)
-            options.stub!(:colour).and_return(false)
-            @formatter = SpecdocFormatter.new(options, io)
-            @example_group = ::Spec::Example::ExampleGroup.describe("ExampleGroup") do
-              specify "example" do
-              end
-            end
-          end
-
-          describe "where ExampleGroup has no superclasss with a description" do
-            before do
-              add_example_group
-            end
-
-            def add_example_group
-              formatter.add_example_group(example_group)
-            end
-
-            describe "#dump_summary" do
-              it "should produce standard summary without pending when pending has a 0 count" do
-                formatter.dump_summary(3, 2, 1, 0)
-                io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure\n")
-              end
-
-              it "should produce standard summary" do
-                formatter.dump_summary(3, 2, 1, 4)
-                io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n")
-              end
-            end
-
-            describe "#add_example_group" do
-              it "should push ExampleGroup name" do
-                io.string.should eql("\nExampleGroup\n")
-              end
-            end
-
-            describe "#example_failed" do
-              describe "where ExampleGroup has no superclasss with a description" do
-                describe "when having an error" do
-                  it "should push failing spec name and failure number" do
-                    formatter.example_failed(
-                      example_group.it("spec"),
-                      98,
-                      Reporter::Failure.new("c s", RuntimeError.new)
-                    )
-                    io.string.should have_example_group_output("- spec (ERROR - 98)\n")
-                  end
-                end
-
-                describe "when having an expectation failure" do
-                  it "should push failing spec name and failure number" do
-                    formatter.example_failed(
-                      example_group.it("spec"),
-                      98,
-                      Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
-                    )
-                    io.string.should have_example_group_output("- spec (FAILED - 98)\n")
-                  end
-                end
-              end
-
-              describe "where ExampleGroup has two superclasses with a description" do
-                attr_reader :child_example_group, :grand_child_example_group
-              
-                def add_example_group
-                  @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
-                  @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
-                  formatter.add_example_group(grand_child_example_group)
-                end
-
-                describe "when having an error" do
-                  it "should push failing spec name and failure number" do
-                    formatter.example_failed(
-                    example_group.it("spec"),
-                    98,
-                    Reporter::Failure.new("c s", RuntimeError.new)
-                    )
-                    io.string.should have_nested_example_group_output("- spec (ERROR - 98)\n")
-                  end
-                end
-
-                describe "when having an expectation" do
-                  it "should push failing spec name and failure number" do
-                    formatter.example_failed(
-                      example_group.it("spec"),
-                      98,
-                      Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
-                    )
-                    io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n")
-                  end
-                end
-
-                def have_nested_example_group_output(expected_output)
-                  expected_full_output = "\nExampleGroup Child ExampleGroup GrandChild ExampleGroup\n#{expected_output}"
-                  ::Spec::Matchers::SimpleMatcher.new(expected_full_output) do |actual|
-                    actual == expected_full_output
-                  end
-                end
-              end
-            end
-
-            describe "#start" do
-              it "should push nothing on start" do
-                formatter.start(5)
-                io.string.should have_example_group_output("")
-              end
-            end
-          
-            describe "#start_dump" do
-              it "should push nothing on start dump" do
-                formatter.start_dump
-                io.string.should have_example_group_output("")
-              end
-            end
-
-            describe "#example_passed" do
-              it "should push passing spec name" do
-                formatter.example_passed(example_group.it("spec"))
-                io.string.should have_example_group_output("- spec\n")
-              end
-            end
-
-            describe "#example_pending" do
-              it "should push pending example name and message" do
-                formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
-                io.string.should have_example_group_output("- example (PENDING: reason)\n")
-              end
-
-              it "should dump pending" do
-                formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
-                io.rewind
-                formatter.dump_pending
-                io.string.should =~ /Pending\:\nExampleGroup example \(reason\)\n/
-              end
-            end
-
-            def have_example_group_output(expected_output)
-              expected = "\nExampleGroup\n#{expected_output}"
-              ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
-                actual == expected
-              end
-            end
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/html_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/html_formatter_spec.rb
deleted file mode 100644
index ee777a5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/html_formatter_spec.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
-require 'spec/runner/formatter/story/html_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      module Story
-        describe HtmlFormatter do
-          before :each do
-            @out = StringIO.new
-            @options = mock('options')
-            @reporter = HtmlFormatter.new(@options, @out)
-          end
-          
-          it "should just be poked at" do
-            @reporter.run_started(1)
-            @reporter.story_started('story_title', 'narrative')
-
-            @reporter.scenario_started('story_title', 'succeeded_scenario_name')
-            @reporter.step_succeeded('given', 'succeded_step', 'one', 'two')
-            @reporter.scenario_succeeded('story_title', 'succeeded_scenario_name')
-
-            @reporter.scenario_started('story_title', 'pending_scenario_name')
-            @reporter.step_pending('when', 'pending_step', 'un', 'deux')
-            @reporter.scenario_pending('story_title', 'pending_scenario_name', 'not done')
-
-            @reporter.scenario_started('story_title', 'failed_scenario_name')
-            @reporter.step_failed('then', 'failed_step', 'en', 'to')
-            @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup'))
-            
-            @reporter.scenario_started('story_title', 'scenario_with_given_scenario_name')
-            @reporter.found_scenario('given scenario', 'succeeded_scenario_name')
-            
-            @reporter.story_ended('story_title', 'narrative')
-            @reporter.run_ended
-          end
-          
-          it "should create spans for params" do
-            @reporter.step_succeeded('given', 'a $coloured $animal', 'brown', 'dog')
-            @reporter.scenario_ended
-            @reporter.story_ended('story_title', 'narrative')
-
-            @out.string.should include("                <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n")
-          end
-          
-          it 'should create spanes for params in regexp steps' do
-            @reporter.step_succeeded :given, /a (pink|blue) (.*)/, 'brown', 'dog'
-            @reporter.scenario_ended
-            @reporter.story_ended('story_title', 'narrative')
-            
-            @out.string.should include("                <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n")
-          end
-
-          it "should create a ul for collected_steps" do
-            @reporter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
-            @out.string.should == (<<-EOF)
-      <ul id="stock_steps" style="display: none;">
-        <li>Given a $coloured $animal</li>
-        <li>Given a $n legged eel</li>
-      </ul>
-EOF
-          end
-          
-          it 'should document additional givens using And' do
-            # when
-            @reporter.step_succeeded :given, 'step 1'
-            @reporter.step_succeeded :given, 'step 2'
-            @reporter.scenario_ended
-            @reporter.story_ended '', ''
-
-            # then
-            @out.string.should include("Given step 1")
-            @out.string.should include("And step 2")
-          end
-
-          it 'should document additional events using And' do
-            # when
-            @reporter.step_succeeded :when, 'step 1'
-            @reporter.step_succeeded :when, 'step 2'
-            @reporter.scenario_ended
-            @reporter.story_ended '', ''
-
-            # then
-            @out.string.should include("When step 1")
-            @out.string.should include("And step 2")
-          end
-
-          it 'should document additional outcomes using And' do
-            # when
-            @reporter.step_succeeded :then, 'step 1'
-            @reporter.step_succeeded :then, 'step 2'
-            @reporter.scenario_ended
-            @reporter.story_ended '', ''
-
-            # then
-            @out.string.should include("Then step 1")
-            @out.string.should include("And step 2")
-          end
-
-          it 'should document a GivenScenario followed by a Given using And' do
-            # when
-            @reporter.step_succeeded :'given scenario', 'a scenario'
-            @reporter.step_succeeded :given, 'a context'
-            @reporter.scenario_ended
-            @reporter.story_ended '', ''
-
-            # then
-            @out.string.should include("Given scenario a scenario")
-            @out.string.should include("And a context")
-          end
-          
-          it "should create a failed story if one of its scenarios fails" do
-              @reporter.story_started('story_title', 'narrative')
-              @reporter.scenario_started('story_title', 'succeeded_scenario_name')
-              @reporter.step_failed('then', 'failed_step', 'en', 'to')
-              @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup'))
-              @reporter.story_ended('story_title', 'narrative')
-            
-              @out.string.should include("      <dl class=\"story failed\">\n        <dt>Story: story_title</dt>\n")
-          end
-          
-          it "should create a failed scenario if one of its steps fails" do
-            @reporter.scenario_started('story_title', 'failed_scenario_name')
-            @reporter.step_failed('then', 'failed_step', 'en', 'to')
-            @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup'))
-            @reporter.story_ended('story_title', 'narrative')
-          
-            @out.string.should include("<dl class=\"failed\">\n              <dt>Scenario: failed_scenario_name</dt>\n")
-          end
-          
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
deleted file mode 100644
index 26b699c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
+++ /dev/null
@@ -1,600 +0,0 @@
-require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
-require 'spec/runner/formatter/story/plain_text_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      module Story
-        describe PlainTextFormatter do
-          before :each do
-            # given
-            @out = StringIO.new
-            @tweaker = mock('tweaker')
-            @tweaker.stub!(:tweak_backtrace)
-            @options = mock('options')
-            @options.stub!(:colour).and_return(false)
-            @options.stub!(:backtrace_tweaker).and_return(@tweaker)
-            @formatter = PlainTextFormatter.new(@options, @out)
-          end
-
-          it 'should summarize the number of scenarios when the run ends' do
-            # when
-            @formatter.run_started(3)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario2')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario3')
-            @formatter.run_ended
-
-            # then
-            @out.string.should include('3 scenarios')
-          end
-
-          it 'should summarize the number of successful scenarios when the run ends' do
-            # when
-            @formatter.run_started(3)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario2')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario3')
-            @formatter.run_ended
-
-            # then
-            @out.string.should include('3 scenarios: 3 succeeded')
-          end
-
-          it 'should summarize the number of failed scenarios when the run ends' do
-            # when
-            @formatter.run_started(3)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
-          end
-
-          it 'should end cleanly (no characters on the last line) with successes' do
-            # when
-            @formatter.run_started(1)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario')
-            @formatter.run_ended
-
-            # then
-            @out.string.should =~ /\n\z/
-          end
-
-          it 'should end cleanly (no characters on the last line) with failures' do
-            # when
-            @formatter.run_started(1)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
-            @formatter.run_ended
-
-            # then
-            @out.string.should =~ /\n\z/
-          end
-
-          it 'should end cleanly (no characters on the last line) with pending steps' do
-            # when
-            @formatter.run_started(1)
-            @formatter.scenario_started(nil, nil)
-            @formatter.step_pending(:then, 'do pend')
-            @formatter.scenario_pending('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
-            @formatter.run_ended
-
-            # then
-            @out.string.should =~ /\n\z/
-          end
-
-          it 'should summarize the number of pending scenarios when the run ends' do
-            # when
-            @formatter.run_started(3)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_pending('story', 'scenario2', 'message')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_pending('story', 'scenario3', 'message')
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
-          end
-
-          it "should only count the first failure in one scenario" do
-            # when
-            @formatter.run_started(3)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
-            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
-          end
-
-          it "should only count the first pending in one scenario" do
-            # when
-            @formatter.run_started(3)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_pending('story', 'scenario2', 'because ...')
-            @formatter.scenario_pending('story', 'scenario2', 'because ...')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_pending('story', 'scenario3', 'because ...')
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
-          end
-
-          it "should only count a failure before the first pending in one scenario" do
-            # when
-            @formatter.run_started(3)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_pending('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
-            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("3 scenarios: 1 succeeded, 1 failed, 1 pending")
-          end
-
-          it 'should show test summary in red if there were failed scenarios' do
-            # when
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("\e[31m scenarios: 0 succeeded, 1 failed, 0 pending\e[0m")
-          end
-
-          it 'should show test summary in yellow if there are pending scenarios' do
-            # when
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_pending('story', 'scenario', '')
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("\e[32m scenarios: 0 succeeded, 0 failed, 1 pending\e[0m")
-          end
-
-          it 'should show test summary in green if all scenarios pass' do
-            # when
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario')
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("\e[32m scenarios: 1 succeeded, 0 failed, 0 pending\e[0m")
-          end
-        
-          it 'should produce details of the first failure each failed scenario when the run ends' do
-            # when
-            @formatter.run_started(3)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2' })
-            @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2 - this one should not appear' })
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops3' })
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("FAILURES:\n")
-            @out.string.should include("1) story (scenario2) FAILED")
-            @out.string.should include("RuntimeError: oops2")
-            @out.string.should_not include("RuntimeError: oops2 - this one should not appear")
-            @out.string.should include("2) story (scenario3) FAILED")
-            @out.string.should include("RuntimeError: oops3")
-          end
-
-          it 'should produce details of the failures in red when the run ends' do
-            # when
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-            @formatter.scenario_started(nil, nil)
-            @formatter.scenario_failed('story', 'scenario1', exception_from { raise RuntimeError, 'oops1' })
-            @formatter.run_ended
-
-            # then
-            @out.string.should =~ /\e\[31m[\n\s]*story \(scenario1\) FAILED\e\[0m/m
-            @out.string.should =~ /\e\[31m[\n\s]*RuntimeError: oops1\e\[0m/m
-          end
-
-          it 'should produce details of each pending step when the run ends' do
-            # when
-            @formatter.run_started(2)
-            @formatter.story_started('story 1', 'narrative')
-            @formatter.scenario_started('story 1', 'scenario 1')
-            @formatter.step_pending(:given, 'todo 1', [])
-            @formatter.story_started('story 2', 'narrative')
-            @formatter.scenario_started('story 2', 'scenario 2')
-            @formatter.step_pending(:given, 'todo 2', [])
-            @formatter.run_ended
-
-            # then
-            @out.string.should include("Pending Steps:\n")
-            @out.string.should include("1) story 1 (scenario 1): todo 1")
-            @out.string.should include("2) story 2 (scenario 2): todo 2")
-          end
-
-          it 'should document a story title and narrative' do
-            # when
-            @formatter.story_started 'story', 'narrative'
-            @formatter.story_ended 'story', 'narrative'
-
-            # then
-            @out.string.should include("Story: story\n\n  narrative")
-          end
-
-          it 'should document a scenario name' do
-            # when
-            @formatter.scenario_started 'story', 'scenario'
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            # then
-            @out.string.should include("\n\n  Scenario: scenario")
-          end
-
-          it 'should document a step by sentence-casing its name' do
-            # when
-            @formatter.step_succeeded :given, 'a context'
-            @formatter.step_succeeded :when, 'an event'
-            @formatter.step_succeeded :then, 'an outcome'
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            # then
-            @out.string.should include("\n\n    Given a context\n\n    When an event\n\n    Then an outcome")
-          end
-
-          it 'should document additional givens using And' do
-            # when
-            @formatter.step_succeeded :given, 'step 1'
-            @formatter.step_succeeded :given, 'step 2'
-            @formatter.step_succeeded :given, 'step 3'
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            # then
-            @out.string.should include("    Given step 1\n    And step 2\n    And step 3")
-          end
-
-          it 'should document additional events using And' do
-            # when
-            @formatter.step_succeeded :when, 'step 1'
-            @formatter.step_succeeded :when, 'step 2'
-            @formatter.step_succeeded :when, 'step 3'
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            # then
-            @out.string.should include("    When step 1\n    And step 2\n    And step 3")
-          end
-
-          it 'should document additional outcomes using And' do
-            # when
-            @formatter.step_succeeded :then, 'step 1'
-            @formatter.step_succeeded :then, 'step 2'
-            @formatter.step_succeeded :then, 'step 3'
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            # then
-            @out.string.should include("    Then step 1\n    And step 2\n    And step 3")
-          end
-
-          it 'should document a GivenScenario followed by a Given using And' do
-            # when
-            @formatter.step_succeeded :'given scenario', 'a scenario'
-            @formatter.step_succeeded :given, 'a context'
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            # then
-            @out.string.should include("    Given scenario a scenario\n    And a context")
-          end
-
-          it 'should document steps with replaced params' do
-            @formatter.step_succeeded :given, 'a $coloured dog with $n legs', 'pink', 21
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-            @out.string.should include("  Given a pink dog with 21 legs")
-          end
-
-          it 'should document steps that include dollar signs ($)' do
-            @formatter.step_succeeded :given, 'kicks that cost $$amount', 50
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-            @out.string.should include("Given kicks that cost $50")
-          end
-
-          it 'should document regexp steps with replaced params' do
-            @formatter.step_succeeded :given, /a (pink|blue) dog with (.*) legs/, 'pink', 21
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-            @out.string.should include("  Given a pink dog with 21 legs")
-          end
-
-          it 'should document regex steps that include dollar signs ($)' do
-            @formatter.step_succeeded :given, /kicks that cost \$(\d+)/, 50
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-            @out.string.should include("Given kicks that cost $50")
-          end
-
-          it "should append PENDING for the first pending step" do
-            @formatter.scenario_started('','')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-            @formatter.step_pending(:given, 'a context')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should include('Given a context (PENDING)')
-          end
-
-          it "should append PENDING for pending after already pending" do
-            @formatter.scenario_started('','')
-            @formatter.step_pending(:given, 'a context')
-            @formatter.step_pending(:when, 'I say hey')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should include('When I say hey (PENDING)')
-          end
-
-          it "should append FAILED for the first failiure" do
-            @formatter.scenario_started('','')
-            @formatter.step_failed(:given, 'a context')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should include('Given a context (FAILED)')
-          end
-
-          it "should append SKIPPED for the second failiure" do
-            @formatter.scenario_started('','')
-            @formatter.step_failed(:given, 'a context')
-            @formatter.step_failed(:when, 'I say hey')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should include('When I say hey (SKIPPED)')
-          end
-
-          it "should append SKIPPED for a failure after PENDING" do
-            @formatter.scenario_started('','')
-            @formatter.step_pending(:given, 'a context')
-            @formatter.step_failed(:when, 'I say hey')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should include('When I say hey (SKIPPED)')
-          end
-
-          it "should print steps which succeeded in green" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_succeeded(:given, 'a context')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should =~ /\e\[32m[\n\s]+Given a context\e\[0m/m
-          end
-
-          it "should print failed steps in red" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_failed(:given, 'a context')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should =~ /\e\[31m[\n\s]+Given a context\e\[0m/m
-          end
-
-          it "should print ' (FAILED)' in red" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_failed(:given, 'a context')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should =~ /\e\[31m \(FAILED\)\e\[0m/
-          end
-
-          it "should print pending steps in yellow" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_pending(:given, 'a context')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should =~ /\e\[33m[\n\s]+Given a context\e\[0m/m
-          end
-
-          it "should print ' (PENDING)' in yellow" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_pending(:given, 'a context')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should =~ /\e\[33m \(PENDING\)\e\[0m/
-          end
-
-          it "should print a scenario in red if any of its steps fail" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('title','narrative')
-            @formatter.step_failed(:given, 'a context')
-            @formatter.scenario_failed('story', 'scenario1', exception_from { raise RuntimeError, 'oops1' })
-            @formatter.story_ended('title','narrative')
-            @out.string.should include("\e[31m\n\n  Scenario: narrative\e[0m")
-          end
-          
-          it "should print a scenario in yellow if its steps are pending" do
-             @out.stub!(:tty?).and_return(true)
-             @options.stub!(:colour).and_return(true)
-
-             @formatter.scenario_started('title','narrative')
-             @formatter.step_pending(:given, 'a context')
-             @formatter.scenario_ended
-             @formatter.story_ended('','')
-             @out.string.should include("\e[33m\n\n  Scenario: narrative\e[0m")
-          end
-   
-          it "should print a story in red if any of its scenarios fail" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-            
-            @formatter.story_started('story', 'narrative')
-            @formatter.scenario_started('','')
-            @formatter.step_failed(:given, 'a context')
-            @formatter.scenario_failed('story', 'scenario1', exception_from { raise RuntimeError, 'oops1' })
-            @formatter.story_ended('story', 'narrative')
-            @out.string.should include("\e[31mStory: story\n\n  narrative\e[0m")
-          end
-
-          it "should print a story in green if all its scenarios succeed" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-            
-            @formatter.story_started('story', 'narrative')
-            @formatter.scenario_started('','')
-            @formatter.step_succeeded(:given, 'a context')
-            @formatter.scenario_succeeded('story', 'scenario1')
-            @formatter.story_ended('story', 'narrative')
-            @out.string.should include("\e[32mStory: story\n\n  narrative\e[0m")
-          end
-
-          it "should print a story in yellow if all its scenarios are pending" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-            
-            @formatter.story_started('story', 'narrative')
-            @formatter.scenario_started('','')
-            @formatter.step_pending(:given, 'a context')
-            @formatter.scenario_pending('story', 'scenario1','pending')
-            @formatter.story_ended('story', 'narrative')
-            @out.string.should include("\e[33mStory: story\n\n  narrative\e[0m")
-          end
-          
-          it "should print skipped steps in yellow if the scenario is already pending" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_pending(:given, 'a context')
-            @formatter.step_failed(:when, 'I say hey')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should =~ /\e\[33m[\n\s]+When I say hey\e\[0m/m
-          end
-
-          it "should print ' (SKIPPED)' in yellow if the scenario is already pending" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_pending(:given, 'a context')
-            @formatter.step_failed(:when, 'I say hey')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should =~ /\e\[33m \(SKIPPED\)\e\[0m/
-          end
-
-          it "should print skipped steps in red if the scenario has already failed" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_failed(:given, 'a context')
-            @formatter.step_failed(:when, 'I say hey')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            @out.string.should =~ /\e\[31m[\n\s]+When I say hey\e\[0m/m
-          end
-
-          it "should print ' (SKIPPED)' in red if the scenario has already failed" do
-            @out.stub!(:tty?).and_return(true)
-            @options.stub!(:colour).and_return(true)
-
-            @formatter.scenario_started('','')
-            @formatter.step_failed(:given, 'a context')
-            @formatter.step_failed(:when, 'I say hey')
-            @formatter.scenario_failed('story', 'scenario1', exception_from { raise RuntimeError, 'oops1' })         
-            @formatter.story_ended('','')
-
-            @out.string.should =~ /\e\[31m \(SKIPPED\)\e\[0m/m
-          end
-
-          it 'should print some white space after each story' do
-            # when
-            @formatter.story_ended 'title', 'narrative'
-
-            # then
-            @out.string.should include("\n\n")
-          end
-
-          it "should print nothing for collected_steps" do
-            @formatter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
-            @out.string.should == ("")
-          end
-
-          it "should ignore messages it doesn't care about" do
-            lambda {
-              @formatter.this_method_does_not_exist
-            }.should_not raise_error
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb
deleted file mode 100644
index 7558948..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-require File.dirname(__FILE__) + '/../../../../spec_helper'
-require 'spec/runner/formatter/story/progress_bar_formatter'
-
-module Spec
-  module Runner
-    module Formatter
-      module Story
-        describe ProgressBarFormatter do
-          before :each do
-            # given
-            @out = StringIO.new
-            @out.stub!(:tty?).and_return(true)
-            @tweaker = mock('tweaker')
-            @tweaker.stub!(:tweak_backtrace)
-            @options = mock('options')
-            @options.stub!(:colour).and_return(true)
-            @options.stub!(:backtrace_tweaker).and_return(@tweaker)
-
-            @formatter = ProgressBarFormatter.new(@options, @out)
-          end
-
-          it 'should print some white space before test summary' do
-            #when
-            @formatter.run_started(1)
-            @formatter.run_ended
-
-            #then
-            @out.string.should =~ /^\n{2}/
-          end
-
-          it "should print how long tests took to complete" do
-            #when
-            now = Time.now
-            future = now+1
-            Time.stub!(:now).and_return(now)
-            @formatter.run_started(1)
-            Time.stub!(:now).and_return(future)
-            @formatter.run_ended
-
-            #then
-            @out.string.should include("Finished in %f seconds" % (future-now))
-          end
-
-
-          it "should push green dot for passing scenario" do
-            #when
-            @formatter.scenario_started('','')
-            @formatter.step_succeeded('', '')
-            @formatter.scenario_ended
-            @formatter.story_ended '', ''
-
-            #then
-            @out.string.should eql("\e[32m.\e[0m")
-          end
-
-          it "should push red F for failure scenario" do
-            #when
-            @formatter.scenario_started('','')
-            @formatter.step_failed('', '')
-            @formatter.scenario_failed('', '', '')
-            @formatter.story_ended '', ''
-
-            #then
-            @out.string.should eql("\e[31mF\e[0m")
-          end
-
-          it "should push yellow P for pending scenario" do
-            #when
-            @formatter.scenario_started('','')
-            @formatter.step_pending('', '')
-            @formatter.scenario_pending('story', '', '')
-            @formatter.story_ended '', ''
-
-            #then
-            @out.string.should eql("\e[33mP\e[0m")
-          end
-
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html
deleted file mode 100644
index 3f26374..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RSpec results</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Expires" content="-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <style type="text/css">
-  body {
-    margin: 0;
-    padding: 0;
-    background: #fff;
-    font-size: 80%;
-  }
-  </style>
-</head>
-<body>
-<div class="rspec-report">
-  <script type="text/javascript">
-    // <![CDATA[
-function moveProgressBar(percentDone) {
-  document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
-  document.getElementById(element_id).style.background = '#C40D0D';
-  document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
-  if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-  else
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-}
-
-    // ]]>
-  </script>
-  <style type="text/css">
-#rspec-header {
-  background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
-  margin: 0px 10px 0px 10px;
-  padding: 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  font-size: 1.8em;
-}
-
-#summary {
-  margin: 0; padding: 5px 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  text-align: right;
-  position: absolute;
-  top: 0px;
-  right: 0px;
-}
-
-#summary p {
-  margin: 0 0 0 2px;
-}
-
-#summary #totals {
-  font-size: 1.2em;
-}
-
-.example_group {
-  margin: 0 10px 5px;
-  background: #fff;
-}
-
-dl {
-  margin: 0; padding: 0 0 5px;
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  padding: 3px;
-  background: #65C400;
-  color: #fff;
-  font-weight: bold;
-}
-
-dd {
-  margin: 5px 0 5px 5px;
-  padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
-  border-left: 5px solid #65C400;
-  border-bottom: 1px solid #65C400;
-  background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
-  border-left: 5px solid #C20000;
-  border-bottom: 1px solid #C20000;
-  color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
-  border-left: 5px solid #FAF834;
-  border-bottom: 1px solid #FAF834;
-  background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
-  border-left: 5px solid #0000C2;
-  border-bottom: 1px solid #0000C2;
-  color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
-  color: #000;
-  font-size: 12px;
-}
-
-a {
-  color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
-  font-size: 12px;
-  font-family: monospace;
-  color: white;
-  background-color: black;
-  padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
-  width: 75px;
-  padding: 0.1em 1em 0.2em 0;
-  color: #000000;
-  background-color: #FFFBD3;
-}
-
-  </style>
-
-<div id="rspec-header">
-  <h1>RSpec Results</h1>
-
-  <div id="summary">
-    <p id="totals"> </p>
-    <p id="duration"> </p>
-  </div>
-</div>
-
-<div class="results">
-<div class="example_group">
-  <dl>
-  <dt id="example_group_1">Mocker</dt>
-    <script type="text/javascript">moveProgressBar('5.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
-    <script type="text/javascript">makeRed('rspec-header');</script>
-    <script type="text/javascript">makeRed('example_group_1');</script>
-    <script type="text/javascript">moveProgressBar('11.7');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when expected message not received</span>
-      <div class="failure" id="failure_1">
-        <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=13">./failing_examples/mocking_example.rb:13</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">12</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span>
-<span class="linenum">15</span>  </code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('17.6');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when messages are received out of order</span>
-      <div class="failure" id="failure_2">
-        <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=22">./failing_examples/mocking_example.rb:22</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">20</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('23.5');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
-      <div class="failure" id="failure_3">
-        <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=28">./failing_examples/mocking_example.rb:28</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">26</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">27</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">28</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span>
-<span class="linenum">29</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span>
-<span class="linenum">30</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('29.4');</script>
-    <dd class="spec pending_fixed">
-      <span class="failed_spec_name">has a bug we need to fix</span>
-      <div class="failure" id="failure_4">
-        <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=33">./failing_examples/mocking_example.rb:33</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span>    <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span>      <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span>      <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_2">Running specs with --diff</dt>
-    <script type="text/javascript">makeRed('example_group_2');</script>
-    <script type="text/javascript">moveProgressBar('35.2');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different strings</span>
-      <div class="failure" id="failure_5">
-        <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n",
-     got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/diffing_spec.rb&line=13">./failing_examples/diffing_spec.rb:13</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('41.1');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
-      <div class="failure" id="failure_6">
-        <div class="message"><pre>expected <Animal
-name=bob,
-species=tortoise
->
-, got <Animal
-name=bob,
-species=giraffe
->
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- <Animal
- name=bob,
--species=giraffe
-+species=tortoise
- >
-</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/diffing_spec.rb&line=34">./failing_examples/diffing_spec.rb:34</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> 
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">32</span>    <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span>
-<span class="linenum">33</span>    <span class="ident">actual</span>   <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span>
-<span class="offending"><span class="linenum">34</span>    <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span>  <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_3">A consumer of a stub</dt>
-    <script type="text/javascript">moveProgressBar('47.0');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_4">A stubbed method on a class</dt>
-    <script type="text/javascript">moveProgressBar('52.9');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
-    <script type="text/javascript">moveProgressBar('58.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
-    <script type="text/javascript">moveProgressBar('64.7');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_5">A mock</dt>
-    <script type="text/javascript">moveProgressBar('70.5');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
-    <script type="text/javascript">moveProgressBar('76.4');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
-    <script type="text/javascript">moveProgressBar('82.3');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_6">pending example (using pending method)</dt>
-    <script type="text/javascript">makeYellow('example_group_6');</script>
-    <script type="text/javascript">moveProgressBar('88.2');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_7">pending example (with no block)</dt>
-    <script type="text/javascript">makeYellow('example_group_7');</script>
-    <script type="text/javascript">moveProgressBar('94.1');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_8">pending example (with block for pending)</dt>
-    <script type="text/javascript">makeYellow('example_group_8');</script>
-    <script type="text/javascript">moveProgressBar('100.0');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
deleted file mode 100644
index 60f8d1e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
+++ /dev/null
@@ -1,370 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>RSpec results</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <meta http-equiv="Expires" content="-1" />
-  <meta http-equiv="Pragma" content="no-cache" />
-  <style type="text/css">
-  body {
-    margin: 0;
-    padding: 0;
-    background: #fff;
-    font-size: 80%;
-  }
-  </style>
-</head>
-<body>
-<div class="rspec-report">
-  <script type="text/javascript">
-    // <![CDATA[
-function moveProgressBar(percentDone) {
-  document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
-  document.getElementById(element_id).style.background = '#C40D0D';
-  document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
-  if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-  else
-  {
-    document.getElementById(element_id).style.background = '#FAF834';
-    document.getElementById(element_id).style.color = '#000000';
-  }
-}
-
-    // ]]>
-  </script>
-  <style type="text/css">
-#rspec-header {
-  background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
-  margin: 0px 10px 0px 10px;
-  padding: 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  font-size: 1.8em;
-}
-
-#summary {
-  margin: 0; padding: 5px 10px;
-  font-family: "Lucida Grande", Helvetica, sans-serif;
-  text-align: right;
-  position: absolute;
-  top: 0px;
-  right: 0px;
-}
-
-#summary p {
-  margin: 0 0 0 2px;
-}
-
-#summary #totals {
-  font-size: 1.2em;
-}
-
-.example_group {
-  margin: 0 10px 5px;
-  background: #fff;
-}
-
-dl {
-  margin: 0; padding: 0 0 5px;
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  padding: 3px;
-  background: #65C400;
-  color: #fff;
-  font-weight: bold;
-}
-
-dd {
-  margin: 5px 0 5px 5px;
-  padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
-  border-left: 5px solid #65C400;
-  border-bottom: 1px solid #65C400;
-  background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
-  border-left: 5px solid #C20000;
-  border-bottom: 1px solid #C20000;
-  color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
-  border-left: 5px solid #FAF834;
-  border-bottom: 1px solid #FAF834;
-  background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
-  border-left: 5px solid #0000C2;
-  border-bottom: 1px solid #0000C2;
-  color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
-  color: #000;
-  font-size: 12px;
-}
-
-a {
-  color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
-  font-size: 12px;
-  font-family: monospace;
-  color: white;
-  background-color: black;
-  padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
-  width: 75px;
-  padding: 0.1em 1em 0.2em 0;
-  color: #000000;
-  background-color: #FFFBD3;
-}
-
-  </style>
-
-<div id="rspec-header">
-  <h1>RSpec Results</h1>
-
-  <div id="summary">
-    <p id="totals"> </p>
-    <p id="duration"> </p>
-  </div>
-</div>
-
-<div class="results">
-<div class="example_group">
-  <dl>
-  <dt id="example_group_1">Mocker</dt>
-    <script type="text/javascript">moveProgressBar('5.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
-    <script type="text/javascript">makeRed('rspec-header');</script>
-    <script type="text/javascript">makeRed('example_group_1');</script>
-    <script type="text/javascript">moveProgressBar('11.7');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when expected message not received</span>
-      <div class="failure" id="failure_1">
-        <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/mocking_example.rb&line=13">./failing_examples/mocking_example.rb:13</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="linenum">12</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span>
-<span class="linenum">15</span>  </code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('17.6');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should fail when messages are received out of order</span>
-      <div class="failure" id="failure_2">
-        <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/mocking_example.rb&line=22">./failing_examples/mocking_example.rb:22</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">20</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('23.5');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
-      <div class="failure" id="failure_3">
-        <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/mocking_example.rb&line=29">./failing_examples/mocking_example.rb:29</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">27</span>    <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span>
-<span class="linenum">28</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span>
-<span class="offending"><span class="linenum">29</span>    <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
-<span class="linenum">30</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('29.4');</script>
-    <dd class="spec pending_fixed">
-      <span class="failed_spec_name">has a bug we need to fix</span>
-      <div class="failure" id="failure_4">
-        <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/mocking_example.rb&line=33">./failing_examples/mocking_example.rb:33</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span>  <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span>    <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span>      <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span>      <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_2">Running specs with --diff</dt>
-    <script type="text/javascript">makeRed('example_group_2');</script>
-    <script type="text/javascript">moveProgressBar('35.2');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different strings</span>
-      <div class="failure" id="failure_5">
-        <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n",
-     got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behaviour driven development
-+behavior driven development
- framework for Ruby
-</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/diffing_spec.rb&line=13">./failing_examples/diffing_spec.rb:13</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span>    <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span>  <span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-    <script type="text/javascript">moveProgressBar('41.1');</script>
-    <dd class="spec failed">
-      <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
-      <div class="failure" id="failure_6">
-        <div class="message"><pre>expected <Animal
-name=bob,
-species=tortoise
->
-, got <Animal
-name=bob,
-species=giraffe
->
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- <Animal
- name=bob,
--species=tortoise
-+species=giraffe
- >
-</pre></div>
-        <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/diffing_spec.rb&line=34">./failing_examples/diffing_spec.rb:34</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a> 
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
-    <pre class="ruby"><code><span class="linenum">32</span>    <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span>
-<span class="linenum">33</span>    <span class="ident">actual</span>   <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span>
-<span class="offending"><span class="linenum">34</span>    <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span>  <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
-      </div>
-    </dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_3">A consumer of a stub</dt>
-    <script type="text/javascript">moveProgressBar('47.0');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_4">A stubbed method on a class</dt>
-    <script type="text/javascript">moveProgressBar('52.9');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
-    <script type="text/javascript">moveProgressBar('58.8');</script>
-    <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
-    <script type="text/javascript">moveProgressBar('64.7');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_5">A mock</dt>
-    <script type="text/javascript">moveProgressBar('70.5');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
-    <script type="text/javascript">moveProgressBar('76.4');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
-    <script type="text/javascript">moveProgressBar('82.3');</script>
-    <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_6">pending example (using pending method)</dt>
-    <script type="text/javascript">makeYellow('example_group_6');</script>
-    <script type="text/javascript">moveProgressBar('88.2');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_7">pending example (with no block)</dt>
-    <script type="text/javascript">makeYellow('example_group_7');</script>
-    <script type="text/javascript">moveProgressBar('94.1');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd>
-  </dl>
-</div>
-<div class="example_group">
-  <dl>
-  <dt id="example_group_8">pending example (with block for pending)</dt>
-    <script type="text/javascript">makeYellow('example_group_8');</script>
-    <script type="text/javascript">moveProgressBar('100.0');</script>
-    <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd>
-  </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/heckle_runner_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/heckle_runner_spec.rb
deleted file mode 100644
index 428909d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/heckle_runner_spec.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
-  require 'spec/runner/heckle_runner'
-
-  module Foo
-    class Bar
-      def one; end
-      def two; end
-    end
-
-    class Zap
-      def three; end
-      def four; end
-    end
-  end
-
-  describe "HeckleRunner" do
-    before(:each) do
-      @heckle = mock("heckle", :null_object => true)
-      @heckle_class = mock("heckle_class")
-    end
-
-    it "should heckle all methods in all classes in a module" do
-      @heckle_class.should_receive(:new).with("Foo::Bar", "one", Spec::Runner.options).and_return(@heckle)
-      @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
-      @heckle_class.should_receive(:new).with("Foo::Zap", "three", Spec::Runner.options).and_return(@heckle)
-      @heckle_class.should_receive(:new).with("Foo::Zap", "four", Spec::Runner.options).and_return(@heckle)
-
-      heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class)
-      heckle_runner.heckle_with
-    end
-
-    it "should heckle all methods in a class" do
-      @heckle_class.should_receive(:new).with("Foo::Bar", "one", Spec::Runner.options).and_return(@heckle)
-      @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
-
-      heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class)
-      heckle_runner.heckle_with
-    end
-
-    it "should fail heckling when the class is not found" do
-      lambda do
-        heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bob", @heckle_class)
-        heckle_runner.heckle_with
-      end.should raise_error(StandardError, "Heckling failed - \"Foo::Bob\" is not a known class or module")
-    end
-
-    it "should heckle specific method in a class (with #)" do
-      @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
-
-      heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class)
-      heckle_runner.heckle_with
-    end
-
-    it "should heckle specific method in a class (with .)" do
-      @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
-
-      heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class)
-      heckle_runner.heckle_with
-    end
-  end
-  
-  describe "Heckler" do
-    it "should say yes to tests_pass? if specs pass" do
-      options = mock("options", :null_object => true)
-      options.should_receive(:run_examples).and_return(true)
-      heckler = Spec::Runner::Heckler.new("Foo", nil, options)
-      heckler.tests_pass?.should be_true
-    end
-
-    it "should say no to tests_pass? if specs fail" do
-      options = mock("options", :null_object => true)
-      options.should_receive(:run_examples).and_return(false)
-      heckler = Spec::Runner::Heckler.new("Foo", nil, options)
-      heckler.tests_pass?.should be_false
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/heckler_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/heckler_spec.rb
deleted file mode 100644
index 7cf6606..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/heckler_spec.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
-  require 'spec/runner/heckle_runner'
-
-  describe "Heckler" do
-    it "should run examples on tests_pass?" do
-      options = Spec::Runner::Options.new(StringIO.new, StringIO.new)
-      options.should_receive(:run_examples).with().and_return(&options.method(:run_examples))
-      heckler = Spec::Runner::Heckler.new('Array', 'push', options)
-      heckler.tests_pass?
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/noisy_backtrace_tweaker_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
deleted file mode 100644
index e097f2e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Runner
-    describe "NoisyBacktraceTweaker" do
-      before(:each) do
-        @error = RuntimeError.new
-        @tweaker = NoisyBacktraceTweaker.new
-      end
-        
-      it "should leave anything in lib spec dir" do
-        ["expectations", "mocks", "runner", "stubs"].each do |child|
-          @error.set_backtrace(["/lib/spec/#{child}/anything.rb"])
-          @tweaker.tweak_backtrace(@error)
-          @error.backtrace.should_not be_empty
-        end
-      end
-
-      it "should leave anything in spec dir" do
-        @error.set_backtrace(["/lib/spec/expectations/anything.rb"])
-        @tweaker.tweak_backtrace(@error)
-        @error.backtrace.should_not be_empty
-      end
-
-      it "should leave bin spec" do
-        @error.set_backtrace(["bin/spec:"])
-        @tweaker.tweak_backtrace(@error)
-        @error.backtrace.should_not be_empty
-      end
-
-      it "should not barf on nil backtrace" do
-        lambda do
-          @tweaker.tweak_backtrace(@error)
-        end.should_not raise_error
-      end
-      
-      it "should clean up double slashes" do
-        @error.set_backtrace(["/a//b/c//d.rb"])
-        @tweaker.tweak_backtrace(@error)
-        @error.backtrace.should include("/a/b/c/d.rb")
-      end
-      
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/option_parser_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/option_parser_spec.rb
deleted file mode 100644
index 9e729b7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/option_parser_spec.rb
+++ /dev/null
@@ -1,421 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-require 'fileutils'
-
-module Custom
-  class ExampleGroupRunner
-    attr_reader :options, :arg
-    def initialize(options, arg)
-      @options, @arg = options, arg
-    end
-
-    def load_files(files)
-    end
-
-    def run
-    end
-  end  
-end
-
-describe "OptionParser" do
-  before(:each) do
-    @out = StringIO.new
-    @err = StringIO.new
-    @parser = Spec::Runner::OptionParser.new(@err, @out)
-  end
-
-  def parse(args)
-    @parser.parse(args)
-    @parser.options
-  end
-  
-  it "should leave the submitted argv alone" do
-    args = ["--pattern", "foo"]
-    @parser.order!(args)
-    args.should == ["--pattern", "foo"]
-  end
-  
-  it "should accept files to include" do
-    options = parse(["--pattern", "foo"])
-    options.filename_pattern.should == "foo"
-  end
-  
-  it "should accept dry run option" do
-    options = parse(["--dry-run"])
-    options.dry_run.should be_true
-  end
-  
-  it "should eval and use custom formatter when none of the builtins" do
-    options = parse(["--format", "Custom::Formatter"])
-    options.formatters[0].class.should be(Custom::Formatter)
-  end
-  
-  it "should support formatters with relative and absolute paths, even on windows" do
-    options = parse([
-      "--format", "Custom::Formatter:C:\\foo\\bar",
-      "--format", "Custom::Formatter:foo/bar",
-      "--format", "Custom::Formatter:foo\\bar",
-      "--format", "Custom::Formatter:/foo/bar"
-    ])
-    options.formatters[0].where.should eql("C:\\foo\\bar")
-    options.formatters[1].where.should eql("foo/bar")
-    options.formatters[2].where.should eql("foo\\bar")
-    options.formatters[3].where.should eql("/foo/bar")
-  end
-  
-  it "should not be verbose by default" do
-    options = parse([])
-    options.verbose.should be_nil
-  end
-  
-  it "should not use colour by default" do
-    options = parse([])
-    options.colour.should == false
-  end
-  
-  it "should print help to stdout if no args and spec_comand?" do
-    Spec.stub!(:spec_command?).and_return(true)
-    options = parse([])
-    @out.rewind
-    @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
-  end
-    
-  it "should not print help to stdout if no args and NOT spec_command?" do
-    Spec.stub!(:spec_command?).and_return(false)
-    options = parse([])
-    @out.rewind
-    @out.read.should == ""
-  end
-  
-  it "should print help to stdout" do
-    options = parse(["--help"])
-    @out.rewind
-    @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
-  end
-  
-  it "should print instructions about how to require missing formatter" do
-    lambda do 
-      options = parse(["--format", "Custom::MissingFormatter"]) 
-      options.formatters
-    end.should raise_error(NameError)
-    @err.string.should match(/Couldn't find formatter class Custom::MissingFormatter/n)
-  end
-  
-  it "should print version to stdout" do
-    options = parse(["--version"])
-    @out.rewind
-    @out.read.should match(/rspec \d+\.\d+\.\d+/n)
-  end
-  
-  it "should require file when require specified" do
-    lambda do
-      parse(["--require", "whatever"])
-    end.should raise_error(LoadError)
-  end
-  
-  it "should support c option" do
-    options = parse(["-c"])
-    options.colour.should be_true
-  end
-  
-  it "should support queens colour option" do
-    options = parse(["--colour"])
-    options.colour.should be_true
-  end
-  
-  it "should support us color option" do
-    options = parse(["--color"])
-    options.colour.should be_true
-  end
-  
-  it "should support single example with -e option" do
-    options = parse(["-e", "something or other"])
-    options.examples.should eql(["something or other"])
-  end
-  
-  it "should support single example with -s option (will be removed when autotest supports -e)" do
-    options = parse(["-s", "something or other"])
-    options.examples.should eql(["something or other"])
-  end
-  
-  it "should support single example with --example option" do
-    options = parse(["--example", "something or other"])
-    options.examples.should eql(["something or other"])
-  end
-  
-  it "should read several example names from file if --example is given an existing file name" do
-    options = parse(["--example", File.dirname(__FILE__) + '/examples.txt'])
-    options.examples.should eql([
-      "Sir, if you were my husband, I would poison your drink.", 
-      "Madam, if you were my wife, I would drink it."])
-  end
-  
-  it "should read no examples if given an empty file" do
-    options = parse(["--example", File.dirname(__FILE__) + '/empty_file.txt'])
-    options.examples.should eql([])
-  end
-  
-  it "should use html formatter when format is h" do
-    options = parse(["--format", "h"])
-    options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
-  end
-  
-  it "should use html story formatter when format is h" do
-    options = parse(["--format", "h"])
-    options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter)
-  end
-  
-  it "should use html formatter when format is html" do
-    options = parse(["--format", "html"])
-    options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
-  end
-  
-  it "should use html story formatter when format is html" do
-    options = parse(["--format", "html"])
-    options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter)
-  end
-  
-  it "should use html formatter with explicit output when format is html:test.html" do
-    FileUtils.rm 'test.html' if File.exist?('test.html')
-    options = parse(["--format", "html:test.html"])
-    options.formatters # creates the file
-    File.should be_exist('test.html')
-    options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
-    options.formatters[0].close
-    FileUtils.rm 'test.html'
-  end
-  
-  it "should use noisy backtrace tweaker with b option" do
-    options = parse(["-b"])
-    options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
-  end
-  
-  it "should use noisy backtrace tweaker with backtrace option" do
-    options = parse(["--backtrace"])
-    options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker)
-  end
-  
-  it "should use quiet backtrace tweaker by default" do
-    options = parse([])
-    options.backtrace_tweaker.should be_instance_of(Spec::Runner::QuietBacktraceTweaker)
-  end
-  
-  it "should use progress bar formatter by default" do
-    options = parse([])
-    options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
-  end
-  
-  it "should use specdoc formatter when format is s" do
-    options = parse(["--format", "s"])
-    options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
-  end
-  
-  it "should use specdoc formatter when format is specdoc" do
-    options = parse(["--format", "specdoc"])
-    options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
-  end
-
-  it "should use nested text formatter when format is s" do
-    options = parse(["--format", "n"])
-    options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
-  end
-
-  it "should use nested text formatter when format is nested" do
-    options = parse(["--format", "nested"])
-    options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
-  end
-  
-  it "should support diff option when format is not specified" do
-    options = parse(["--diff"])
-    options.diff_format.should == :unified
-  end
-  
-  it "should use unified diff format option when format is unified" do
-    options = parse(["--diff", "unified"])
-    options.diff_format.should == :unified
-    options.differ_class.should equal(Spec::Expectations::Differs::Default)
-  end
-  
-  it "should use context diff format option when format is context" do
-    options = parse(["--diff", "context"])
-    options.diff_format.should == :context
-    options.differ_class.should == Spec::Expectations::Differs::Default
-  end
-  
-  it "should use custom diff format option when format is a custom format" do
-    Spec::Expectations.differ.should_not be_instance_of(Custom::Differ)
-  
-    options = parse(["--diff", "Custom::Differ"])
-    options.parse_diff "Custom::Differ"
-    options.diff_format.should == :custom
-    options.differ_class.should == Custom::Differ
-    Spec::Expectations.differ.should be_instance_of(Custom::Differ)
-  end
-  
-  it "should print instructions about how to fix missing differ" do
-    lambda { parse(["--diff", "Custom::MissingFormatter"]) }.should raise_error(NameError)
-    @err.string.should match(/Couldn't find differ class Custom::MissingFormatter/n)
-  end
-  
-  describe "when attempting a focussed spec" do
-    attr_reader :file, :dir
-    before(:each) do
-      @original_rspec_options = Spec::Runner.options
-      @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
-      @dir = File.dirname(file)
-    end
-  
-    after(:each) do
-      Spec::Runner.use @original_rspec_options
-    end
-  
-    def parse(args)
-      options = super
-      Spec::Runner.use options
-      options.filename_pattern = "*_fixture.rb"
-      options
-    end
-  
-    it "should support --line to identify spec" do
-      options = parse([file, "--line", "13"])
-      options.line_number.should == 13
-      options.examples.should be_empty
-      options.run_examples
-      options.examples.should eql(["d"])
-    end
-  
-    it "should fail with error message if file is dir along with --line" do
-      options = parse([dir, "--line", "169"])
-      options.line_number.should == 169
-      options.run_examples
-      @err.string.should match(/You must specify one file, not a directory when using the --line option/n)
-    end
-  
-    it "should fail with error message if file does not exist along with --line" do
-      options = parse(["some file", "--line", "169"])
-      proc do
-        options.run_examples
-      end.should raise_error
-    end
-  
-    it "should fail with error message if more than one files are specified along with --line" do
-      options = parse([file, file, "--line", "169"])
-      options.run_examples
-      @err.string.should match(/Only one file can be specified when using the --line option/n)
-    end
-  
-    it "should fail with error message if --example and --line are used simultaneously" do
-      options = parse([file, "--example", "some example", "--line", "169"])
-      options.run_examples
-      @err.string.should match(/You cannot use both --line and --example/n)
-    end
-  end
-  
-  if [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
-    it "should barf when --heckle is specified (and platform is windows)" do
-      lambda do
-        options = parse(["--heckle", "Spec"])
-      end.should raise_error(StandardError, "Heckle not supported on Windows")
-    end
-  else
-    it "should heckle when --heckle is specified (and platform is not windows)" do
-      options = parse(["--heckle", "Spec"])
-      options.heckle_runner.should be_instance_of(Spec::Runner::HeckleRunner)
-    end
-  end
-  
-  it "should read options from file when --options is specified" do
-    options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
-    options.diff_format.should_not be_nil
-    options.colour.should be_true
-  end
-  
-  it "should default the formatter to ProgressBarFormatter when using options file" do
-    options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
-    options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::ProgressBarFormatter)
-  end
-
-  it "should run parse drb after parsing options" do
-    @parser.stub!(:parse_drb)
-    @parser.should_receive(:parse_drb).with(["--drb"]).and_return(true)
-    options = parse(["--options", File.dirname(__FILE__) + "/spec_drb.opts"])    
-  end
-
-  it "should read spaced and multi-line options from file when --options is specified" do
-    options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"])
-    options.diff_format.should_not be_nil
-    options.colour.should be_true
-    options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::SpecdocFormatter)
-  end
-   
-  it "should save config to file when --generate-options is specified" do
-    FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
-    options = parse(["--colour", "--generate-options", "test.spec.opts", "--diff"])
-    IO.read('test.spec.opts').should == "--colour\n--diff\n"
-    FileUtils.rm 'test.spec.opts'
-  end
-  
-  it "should save config to file when -G is specified" do
-    FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
-    options = parse(["--colour", "-G", "test.spec.opts", "--diff"])
-    IO.read('test.spec.opts').should == "--colour\n--diff\n"
-    FileUtils.rm 'test.spec.opts'
-  end
-  
-  it "when --drb is specified, calls DrbCommandLine all of the other ARGV arguments" do
-    options = Spec::Runner::OptionParser.parse([
-      "some/spec.rb", "--diff", "--colour"
-    ], @err, @out)
-    Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options|
-      options.argv.should == ["some/spec.rb", "--diff", "--colour"]
-    end
-    parse(["some/spec.rb", "--diff", "--drb", "--colour"])
-  end
-  
-  it "should reverse spec order when --reverse is specified" do
-    options = parse(["some/spec.rb", "--reverse"])
-  end
-  
-  it "should set an mtime comparator when --loadby mtime" do
-    options = parse(["--loadby", 'mtime'])
-    runner = Spec::Runner::ExampleGroupRunner.new(options)
-    Spec::Runner::ExampleGroupRunner.should_receive(:new).
-      with(options).
-      and_return(runner)
-    runner.should_receive(:load_files).with(["most_recent_spec.rb", "command_line_spec.rb"])
-  
-    Dir.chdir(File.dirname(__FILE__)) do
-      options.files << 'command_line_spec.rb'
-      options.files << 'most_recent_spec.rb'
-      FileUtils.touch "most_recent_spec.rb"
-      options.run_examples
-      FileUtils.rm "most_recent_spec.rb"
-    end
-  end
-  
-  it "should use the standard runner by default" do
-    runner = ::Spec::Runner::ExampleGroupRunner.new(@parser.options)
-    ::Spec::Runner::ExampleGroupRunner.should_receive(:new).
-      with(@parser.options).
-      and_return(runner)
-    options = parse([])
-    options.run_examples
-  end
-  
-  it "should use a custom runner when given" do
-    runner = Custom::ExampleGroupRunner.new(@parser.options, nil)
-    Custom::ExampleGroupRunner.should_receive(:new).
-      with(@parser.options, nil).
-      and_return(runner)
-    options = parse(["--runner", "Custom::ExampleGroupRunner"])
-    options.run_examples
-  end
-  
-  it "should use a custom runner with extra options" do
-    runner = Custom::ExampleGroupRunner.new(@parser.options, 'something')
-    Custom::ExampleGroupRunner.should_receive(:new).
-      with(@parser.options, 'something').
-      and_return(runner)
-    options = parse(["--runner", "Custom::ExampleGroupRunner:something"])
-    options.run_examples
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/options_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/options_spec.rb
deleted file mode 100644
index a64356b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/options_spec.rb
+++ /dev/null
@@ -1,450 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Runner
-    describe Options do
-      before(:each) do
-        @err = StringIO.new('')
-        @out = StringIO.new('')
-        @options = Options.new(@err, @out)
-      end
-
-      after(:each) do
-        Spec::Expectations.differ = nil
-      end
-
-      describe "#examples" do
-        it "should default to empty array" do
-          @options.examples.should == []
-        end
-      end
-      
-      describe "#include_pattern" do
-        it "should default to '**/*_spec.rb'" do
-          @options.filename_pattern.should == "**/*_spec.rb"
-        end
-      end
-      
-      describe "#files_to_load" do
-        
-        it "should load files not following pattern if named explicitly" do
-          file = File.expand_path(File.dirname(__FILE__) + "/resources/a_bar.rb")
-          @options.files << file
-          @options.files_to_load.should include(file)
-        end
-        
-        describe "with default --pattern" do
-          it "should load files named _spec.rb" do
-            dir = File.expand_path(File.dirname(__FILE__) + "/resources/")
-            @options.files << dir
-            @options.files_to_load.should == ["#{dir}/a_spec.rb"]
-          end
-        end
-        
-        describe "with explicit pattern (single)" do
-          before(:each) do
-            @options.filename_pattern = "**/*_foo.rb"
-          end
-        
-          it "should load files following pattern" do
-            file = File.expand_path(File.dirname(__FILE__) + "/resources/a_foo.rb")
-            @options.files << file
-            @options.files_to_load.should include(file)
-          end
-        
-          it "should load files in directories following pattern" do
-            dir = File.expand_path(File.dirname(__FILE__) + "/resources")
-            @options.files << dir
-            @options.files_to_load.should include("#{dir}/a_foo.rb")
-          end
-        
-          it "should not load files in directories not following pattern" do
-            dir = File.expand_path(File.dirname(__FILE__) + "/resources")
-            @options.files << dir
-            @options.files_to_load.should_not include("#{dir}/a_bar.rb")
-          end
-        end
-        
-        describe "with explicit pattern (comma,separated,values)" do
-          
-          before(:each) do
-            @options.filename_pattern = "**/*_foo.rb,**/*_bar.rb"
-          end
-
-          it "should support comma separated values" do
-            dir = File.expand_path(File.dirname(__FILE__) + "/resources")
-            @options.files << dir
-            @options.files_to_load.should include("#{dir}/a_foo.rb")
-            @options.files_to_load.should include("#{dir}/a_bar.rb")
-          end
-        
-          it "should support comma separated values with spaces" do
-            dir = File.expand_path(File.dirname(__FILE__) + "/resources")
-            @options.files << dir
-            @options.files_to_load.should include("#{dir}/a_foo.rb")
-            @options.files_to_load.should include("#{dir}/a_bar.rb")
-          end
-        
-        end
-      
-      end
-
-      describe "#backtrace_tweaker" do
-        it "should default to QuietBacktraceTweaker" do
-          @options.backtrace_tweaker.class.should == QuietBacktraceTweaker
-        end
-      end
-
-      describe "#dry_run" do
-        it "should default to false" do
-          @options.dry_run.should == false
-        end
-      end
-
-      describe "#context_lines" do
-        it "should default to 3" do
-          @options.context_lines.should == 3
-        end
-      end
-
-      describe "#parse_diff with nil" do
-        before(:each) do
-          @options.parse_diff nil
-        end
-
-        it "should make diff_format unified" do
-          @options.diff_format.should == :unified
-        end
-
-        it "should set Spec::Expectations.differ to be a default differ" do
-          Spec::Expectations.differ.class.should ==
-            ::Spec::Expectations::Differs::Default
-        end
-      end
-
-      describe "#parse_diff with 'unified'" do
-        before(:each) do
-          @options.parse_diff 'unified'
-        end
-
-        it "should make diff_format unified and uses default differ_class" do
-          @options.diff_format.should == :unified
-          @options.differ_class.should equal(Spec::Expectations::Differs::Default)
-        end
-
-        it "should set Spec::Expectations.differ to be a default differ" do
-          Spec::Expectations.differ.class.should ==
-            ::Spec::Expectations::Differs::Default
-        end
-      end
-
-      describe "#parse_diff with 'context'" do
-        before(:each) do
-          @options.parse_diff 'context'
-        end
-
-        it "should make diff_format context and uses default differ_class" do
-          @options.diff_format.should == :context
-          @options.differ_class.should == Spec::Expectations::Differs::Default
-        end
-
-        it "should set Spec::Expectations.differ to be a default differ" do
-          Spec::Expectations.differ.class.should ==
-            ::Spec::Expectations::Differs::Default
-        end
-      end
-
-      describe "#parse_diff with Custom::Differ" do
-        before(:each) do
-          @options.parse_diff 'Custom::Differ'
-        end
-
-        it "should use custom differ_class" do
-          @options.diff_format.should == :custom
-          @options.differ_class.should == Custom::Differ
-          Spec::Expectations.differ.should be_instance_of(Custom::Differ)
-        end
-
-        it "should set Spec::Expectations.differ to be a default differ" do
-          Spec::Expectations.differ.class.should ==
-            ::Custom::Differ
-        end
-      end
-
-      describe "#parse_diff with missing class name" do
-        it "should raise error" do
-          lambda { @options.parse_diff "Custom::MissingDiffer" }.should raise_error(NameError)
-          @err.string.should match(/Couldn't find differ class Custom::MissingDiffer/n)
-        end
-      end
-
-      describe "#parse_example" do
-        it "with argument thats not a file path, sets argument as the example" do
-          example = "something or other"
-          File.file?(example).should == false
-          @options.parse_example example
-          @options.examples.should eql(["something or other"])
-        end
-
-        it "with argument that is a file path, sets examples to contents of the file" do
-          example = "#{File.dirname(__FILE__)}/examples.txt"
-          File.should_receive(:file?).with(example).and_return(true)
-          file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.")
-          File.should_receive(:open).with(example).and_return(file)
-
-          @options.parse_example example
-          @options.examples.should eql([
-            "Sir, if you were my husband, I would poison your drink.",
-              "Madam, if you were my wife, I would drink it."
-          ])
-        end
-      end
-
-      describe "#examples_should_not_be_run" do
-        it "should cause #run_examples to return true and do nothing" do
-          @options.examples_should_not_be_run
-          ExampleGroupRunner.should_not_receive(:new)
-
-          @options.run_examples.should be_true
-        end
-      end
-
-      describe "#load_class" do
-        it "should raise error when not class name" do
-          lambda do
-            @options.send(:load_class, 'foo', 'fruit', '--food')
-          end.should raise_error('"foo" is not a valid class name')
-        end
-      end
-
-      describe "#reporter" do
-        it "returns a Reporter" do
-          @options.reporter.should be_instance_of(Reporter)
-          @options.reporter.options.should === @options
-        end
-      end
-
-      describe "#add_example_group affecting passed in example_group" do
-        it "runs all examples when options.examples is nil" do
-          example_1_has_run = false
-          example_2_has_run = false
-          @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
-            it "runs 1" do
-              example_1_has_run = true
-            end
-            it "runs 2" do
-              example_2_has_run = true
-            end
-          end
-
-          @options.examples = nil
-
-          @options.add_example_group @example_group
-          @options.run_examples
-          example_1_has_run.should be_true
-          example_2_has_run.should be_true
-        end
-
-        it "keeps all example_definitions when options.examples is empty" do
-          example_1_has_run = false
-          example_2_has_run = false
-          @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
-            it "runs 1" do
-              example_1_has_run = true
-            end
-            it "runs 2" do
-              example_2_has_run = true
-            end
-          end
-
-          @options.examples = []
-
-          @options.add_example_group @example_group
-          @options.run_examples
-          example_1_has_run.should be_true
-          example_2_has_run.should be_true
-        end
-      end
-
-      describe "#add_example_group affecting example_group" do
-        it "adds example_group when example_group has example_definitions and is not shared" do
-          @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
-            it "uses this example_group" do
-            end
-          end
-
-          @options.number_of_examples.should == 0
-          @options.add_example_group @example_group
-          @options.number_of_examples.should == 1
-          @options.example_groups.length.should == 1
-        end
-      end
-
-      describe "#remove_example_group" do
-        it "should remove the ExampleGroup from the list of ExampleGroups" do
-          @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
-          end
-          @options.add_example_group @example_group
-          @options.example_groups.should include(@example_group)
-
-          @options.remove_example_group @example_group
-          @options.example_groups.should_not include(@example_group)
-        end
-      end
-
-      describe "#run_examples" do
-        describe "when not given a custom runner" do
-          it "should use the standard" do
-            runner = ::Spec::Runner::ExampleGroupRunner.new(@options)
-            ::Spec::Runner::ExampleGroupRunner.should_receive(:new).
-            with(@options).
-            and_return(runner)
-            @options.user_input_for_runner = nil
-
-            @options.run_examples
-          end
-        end
-
-        describe "when given a custom runner" do
-          it "should use the custom runner" do
-            runner = Custom::ExampleGroupRunner.new(@options, nil)
-            Custom::ExampleGroupRunner.should_receive(:new).
-            with(@options, nil).
-            and_return(runner)
-            @options.user_input_for_runner = "Custom::ExampleGroupRunner"
-
-            @options.run_examples
-          end
-
-          it "should use the custom runner with extra options" do
-            runner = Custom::ExampleGroupRunner.new(@options, 'something')
-            Custom::ExampleGroupRunner.should_receive(:new).
-            with(@options, 'something').
-            and_return(runner)
-            @options.user_input_for_runner = "Custom::ExampleGroupRunner:something"
-
-            @options.run_examples
-          end
-        end
-
-        describe "when there are examples" do
-          before(:each) do
-            @example_group = Class.new(::Spec::Example::ExampleGroup)
-            @options.add_example_group @example_group
-            @options.formatters << Formatter::BaseTextFormatter.new(@options, @out)
-          end
-
-          it "runs the Examples and outputs the result" do
-            @options.run_examples
-            @out.string.should include("0 examples, 0 failures")
-          end
-
-          it "sets #examples_run? to true" do
-            @options.examples_run?.should be_false
-            @options.run_examples
-            @options.examples_run?.should be_true
-          end
-
-          describe "and the suite passes" do
-            before do
-              @example_group.should_receive(:run).and_return(true)
-            end
-
-            it "invokes after_suite_parts with true" do
-              success_result = nil
-              @options.after_suite_parts << lambda do |success|
-                success_result = success
-              end
-              
-              @options.run_examples
-              success_result.should be_true
-            end
-          end
-
-          describe "and the suite fails" do
-            before do
-              @example_group.should_receive(:run).and_return(false)
-            end
-
-            it "invokes after_suite_parts with false" do
-              success_result = nil
-              @options.after_suite_parts << lambda do |success|
-                success_result = success
-              end
-
-              @options.run_examples
-              success_result.should be_false
-            end
-          end
-
-          describe "when using heckle runner" do
-            before(:each) do
-              @heckle_runner_mock = mock("HeckleRunner")
-              @options.heckle_runner = @heckle_runner_mock
-            end
-            
-            it "should heckle" do
-              @heckle_runner_mock.should_receive(:heckle_with)
-              @options.run_examples
-            end
-            
-            it "shouldn't heckle recursively" do
-              heckled = false
-              @heckle_runner_mock.should_receive(:heckle_with) {
-                heckled.should == false
-                heckled = true
-                @options.run_examples
-              }
-              @options.run_examples
-            end
-
-            it "shouldn't load spec files twice" do
-              example_runner = mock("ExampleGroupRunner")
-              example_runner_inside_heckle = mock("ExampleGroupRunner inside Heckle")
-
-              ExampleGroupRunner.should_receive(:new).twice.and_return(
-                example_runner, example_runner_inside_heckle
-              )
-
-              example_runner.stub!(:run)
-              example_runner.should_receive(:load_files)
-              @heckle_runner_mock.stub!(:heckle_with).and_return { @options.run_examples }
-              example_runner_inside_heckle.stub!(:run)
-              example_runner_inside_heckle.should_not_receive(:load_files)
-
-              @options.run_examples
-            end
-          end
-        end
-
-        describe "when there are no examples" do
-          before(:each) do
-            @options.formatters << Formatter::BaseTextFormatter.new(@options, @out)
-          end
-
-          it "does not run Examples and does not output a result" do
-            @options.run_examples
-            @out.string.should_not include("examples")
-            @out.string.should_not include("failures")
-          end
-
-          it "sets #examples_run? to false" do
-            @options.examples_run?.should be_false
-            @options.run_examples
-            @options.examples_run?.should be_false
-          end
-
-          it "invokes after_suite_parts with true" do
-            success_result = nil
-            @options.after_suite_parts << lambda do |success|
-              success_result = success
-            end
-
-            @options.run_examples
-            success_result.should be_true
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_fixture.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_fixture.rb
deleted file mode 100644
index 444730d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_fixture.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "Running an Example" do
-  it "should not output twice" do
-    true.should be_true
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_fixture_runner.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_fixture_runner.rb
deleted file mode 100644
index 40b8fc8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_fixture_runner.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-dir = File.dirname(__FILE__)
-require "#{dir}/../../spec_helper"
-
-triggering_double_output = Spec::Runner.options
-options = Spec::Runner::OptionParser.parse(
-  ["#{dir}/output_one_time_fixture.rb"], $stderr, $stdout
-)
-Spec::Runner::CommandLine.run(options)
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_spec.rb
deleted file mode 100644
index 8f67a38..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/output_one_time_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Runner
-    describe CommandLine do
-      it "should not output twice" do
-        dir = File.dirname(__FILE__)
-        Dir.chdir("#{dir}/../../..") do
-          output =`ruby #{dir}/output_one_time_fixture_runner.rb`
-          output.should include("1 example, 0 failures")
-          output.should_not include("0 examples, 0 failures")
-        end
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/quiet_backtrace_tweaker_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
deleted file mode 100644
index cc63823..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Runner
-    describe "QuietBacktraceTweaker" do
-      before(:each) do
-        @error = RuntimeError.new
-        @tweaker = QuietBacktraceTweaker.new
-      end
-
-      it "should not barf on nil backtrace" do
-        lambda do
-          @tweaker.tweak_backtrace(@error)
-        end.should_not raise_error
-      end
-
-      it "should remove anything from textmate ruby bundle" do
-        @error.set_backtrace(["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"])
-        @tweaker.tweak_backtrace(@error)
-        @error.backtrace.should be_empty
-      end
-
-      it "should remove anything in lib spec dir" do
-        ["expectations", "mocks", "runner"].each do |child|
-          element="/lib/spec/#{child}/anything.rb"
-          @error.set_backtrace([element])
-          @tweaker.tweak_backtrace(@error)
-          unless (@error.backtrace.empty?)
-            raise("Should have tweaked away '#{element}'")
-          end
-        end
-      end
-
-      it "should remove mock_frameworks/rspec" do
-        element = "mock_frameworks/rspec"
-        @error.set_backtrace([element])
-        @tweaker.tweak_backtrace(@error)
-        unless (@error.backtrace.empty?)
-          raise("Should have tweaked away '#{element}'")
-        end
-      end
-
-      it "should remove bin spec" do
-        @error.set_backtrace(["bin/spec:"])
-        @tweaker.tweak_backtrace(@error)
-        @error.backtrace.should be_empty
-      end
-      
-      it "should clean up double slashes" do
-        @error.set_backtrace(["/a//b/c//d.rb"])
-        @tweaker.tweak_backtrace(@error)
-        @error.backtrace.should include("/a/b/c/d.rb")
-      end
-
-      it "should gracefully handle backtraces with newlines" do
-        @error.set_backtrace(["we like\nbin/spec:\nnewlines"])
-        @tweaker.tweak_backtrace(@error)
-        @error.backtrace.should include("we like\nnewlines")
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/reporter_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/reporter_spec.rb
deleted file mode 100644
index ee1b4bf..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/reporter_spec.rb
+++ /dev/null
@@ -1,238 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
-  module Runner
-    describe Reporter do
-      attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group
-      before(:each) do
-        @formatter_output = StringIO.new
-        @options = Options.new(StringIO.new, StringIO.new)
-        @backtrace_tweaker = stub("backtrace tweaker", :tweak_backtrace => nil)
-        options.backtrace_tweaker = backtrace_tweaker
-        @formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(options, formatter_output)
-        options.formatters << formatter
-        @reporter = Reporter.new(options)
-        @example_group = create_example_group("example_group")
-        reporter.add_example_group example_group
-      end
-
-      def failure
-        Mocks::ArgumentConstraints::DuckTypeConstraint.new(:header, :exception)
-      end
-
-      def create_example_group(description_text)
-        example_group = Spec::Example::ExampleGroup.describe(description_text) do
-          it "should do something" do
-          end
-        end
-        example_group
-      end
-
-      it "should assign itself as the reporter to options" do
-        options.reporter.should equal(@reporter)
-      end
-
-      it "should tell formatter when example_group is added" do
-        formatter.should_receive(:add_example_group).with(example_group)
-        reporter.add_example_group(example_group)
-      end
-
-      it "should handle multiple example_groups with same name" do
-        formatter.should_receive(:add_example_group).exactly(3).times
-        formatter.should_receive(:example_started).exactly(3).times
-        formatter.should_receive(:example_passed).exactly(3).times
-        formatter.should_receive(:start_dump)
-        formatter.should_receive(:dump_pending)
-        formatter.should_receive(:close).with(no_args)
-        formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0)
-        reporter.add_example_group(create_example_group("example_group"))
-        reporter.example_started("spec 1")
-        reporter.example_finished("spec 1")
-        reporter.add_example_group(create_example_group("example_group"))
-        reporter.example_started("spec 2")
-        reporter.example_finished("spec 2")
-        reporter.add_example_group(create_example_group("example_group"))
-        reporter.example_started("spec 3")
-        reporter.example_finished("spec 3")
-        reporter.dump
-      end
-
-      it "should handle multiple examples with the same name" do
-        error=RuntimeError.new
-        passing = ExampleGroup.new("example")
-        failing = ExampleGroup.new("example")
-
-        formatter.should_receive(:add_example_group).exactly(2).times
-        formatter.should_receive(:example_passed).with(passing).exactly(2).times
-        formatter.should_receive(:example_failed).with(failing, 1, failure)
-        formatter.should_receive(:example_failed).with(failing, 2, failure)
-        formatter.should_receive(:dump_failure).exactly(2).times
-        formatter.should_receive(:start_dump)
-        formatter.should_receive(:dump_pending)
-        formatter.should_receive(:close).with(no_args)
-        formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0)
-        backtrace_tweaker.should_receive(:tweak_backtrace).twice
-
-        reporter.add_example_group(create_example_group("example_group"))
-        reporter.example_finished(passing)
-        reporter.example_finished(failing, error)
-
-        reporter.add_example_group(create_example_group("example_group"))
-        reporter.example_finished(passing)
-        reporter.example_finished(failing, error)
-        reporter.dump
-      end
-
-      it "should push stats to formatter even with no data" do
-        formatter.should_receive(:start_dump)
-        formatter.should_receive(:dump_pending)
-        formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0)
-        formatter.should_receive(:close).with(no_args)
-        reporter.dump
-      end
-
-      it "should push time to formatter" do
-        formatter.should_receive(:start).with(5)
-        formatter.should_receive(:start_dump)
-        formatter.should_receive(:dump_pending)
-        formatter.should_receive(:close).with(no_args)
-        formatter.should_receive(:dump_summary) do |time, a, b|
-          time.to_s.should match(/[0-9].[0-9|e|-]+/)
-        end
-        reporter.start(5)
-        reporter.end
-        reporter.dump
-      end
-
-      describe Reporter, "reporting one passing example" do
-        it "should tell formatter example passed" do
-          formatter.should_receive(:example_passed)
-          reporter.example_finished("example")
-        end
-
-        it "should not delegate to backtrace tweaker" do
-          formatter.should_receive(:example_passed)
-          backtrace_tweaker.should_not_receive(:tweak_backtrace)
-          reporter.example_finished("example")
-        end
-
-        it "should account for passing example in stats" do
-          formatter.should_receive(:example_passed)
-          formatter.should_receive(:start_dump)
-          formatter.should_receive(:dump_pending)
-          formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0)
-          formatter.should_receive(:close).with(no_args)
-          reporter.example_finished("example")
-          reporter.dump
-        end
-      end
-
-      describe Reporter, "reporting one failing example" do
-        it "should tell formatter that example failed" do
-          example = example_group.it("should do something") {}
-          formatter.should_receive(:example_failed)
-          reporter.example_finished(example, RuntimeError.new)
-        end
-
-        it "should delegate to backtrace tweaker" do
-          formatter.should_receive(:example_failed)
-          backtrace_tweaker.should_receive(:tweak_backtrace)
-          reporter.example_finished(ExampleGroup.new("example"), RuntimeError.new)
-        end
-
-        it "should account for failing example in stats" do
-          example = ExampleGroup.new("example")
-          formatter.should_receive(:example_failed).with(example, 1, failure)
-          formatter.should_receive(:start_dump)
-          formatter.should_receive(:dump_pending)
-          formatter.should_receive(:dump_failure).with(1, anything())
-          formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0)
-          formatter.should_receive(:close).with(no_args)
-          reporter.example_finished(example, RuntimeError.new)
-          reporter.dump
-        end
-
-      end
-
-      describe Reporter, "reporting one pending example (ExamplePendingError)" do
-        before :each do
-          @pending_error = Spec::Example::ExamplePendingError.new("reason")
-          @pending_caller = @pending_error.pending_caller
-        end
-        
-        it "should tell formatter example is pending" do
-          example = ExampleGroup.new("example")
-          formatter.should_receive(:example_pending).with(example, "reason", @pending_caller)
-          formatter.should_receive(:add_example_group).with(example_group)
-          reporter.add_example_group(example_group)
-          reporter.example_finished(example, @pending_error)
-        end
-
-        it "should account for pending example in stats" do
-          example = ExampleGroup.new("example")
-          formatter.should_receive(:example_pending).with(example, "reason", @pending_caller)
-          formatter.should_receive(:start_dump)
-          formatter.should_receive(:dump_pending)
-          formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
-          formatter.should_receive(:close).with(no_args)
-          formatter.should_receive(:add_example_group).with(example_group)
-          reporter.add_example_group(example_group)
-          reporter.example_finished(example, @pending_error)
-          reporter.dump
-        end
-        
-        describe "to formatters which have example_pending's arity of 2 (which is now deprecated)" do
-          before :each do
-            Kernel.stub!(:warn).with(Spec::Runner::Reporter::EXAMPLE_PENDING_DEPRECATION_WARNING)
-          
-            @deprecated_formatter = Class.new(@formatter.class) do
-              attr_reader :example_passed_to_method, :message_passed_to_method
-
-              def example_pending(example_passed_to_method, message_passed_to_method)
-                @example_passed_to_method = example_passed_to_method
-                @message_passed_to_method = message_passed_to_method
-              end
-            end.new(options, formatter_output)
-            
-            options.formatters << @deprecated_formatter
-          end
-          
-          it "should pass the correct example to the formatter" do
-            example = ExampleGroup.new("example")
-            reporter.add_example_group(example_group)
-            reporter.example_finished(example, @pending_error)
-            
-            @deprecated_formatter.example_passed_to_method.should == example
-          end
-          
-          it "should pass the correct pending error message to the formatter" do
-            example = ExampleGroup.new("example")
-            reporter.add_example_group(example_group)
-            reporter.example_finished(example, @pending_error)
-            
-            @deprecated_formatter.message_passed_to_method.should ==  @pending_error.message
-          end
-          
-          it "should raise a deprecation warning" do
-            Kernel.should_receive(:warn).with(Spec::Runner::Reporter::EXAMPLE_PENDING_DEPRECATION_WARNING)
-            
-            example = ExampleGroup.new("example")
-            reporter.add_example_group(example_group)
-            reporter.example_finished(example, @pending_error)
-          end
-        end
-      end
-
-      describe Reporter, "reporting one pending example (PendingExampleFixedError)" do
-        it "should tell formatter pending example is fixed" do
-          formatter.should_receive(:example_failed) do |name, counter, failure|
-            failure.header.should == "'example_group should do something' FIXED"
-          end
-          formatter.should_receive(:add_example_group).with(example_group)
-          reporter.add_example_group(example_group)
-          reporter.example_finished(example_group.examples.first, Spec::Example::PendingExampleFixedError.new("reason"))
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/resources/a_bar.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/resources/a_bar.rb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/resources/a_foo.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/resources/a_foo.rb
deleted file mode 100644
index e69de29..0000000
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/resources/a_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/resources/a_spec.rb
deleted file mode 100644
index d9b67cc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/resources/a_spec.rb
+++ /dev/null
@@ -1 +0,0 @@
-# Empty - used by ../options_spec.rb
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec.opts b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec.opts
deleted file mode 100644
index fd816a4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec.opts
+++ /dev/null
@@ -1,2 +0,0 @@
---diff
---colour
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_drb.opts b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_drb.opts
deleted file mode 100644
index 091e4c2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_drb.opts
+++ /dev/null
@@ -1 +0,0 @@
---drb
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_parser/spec_parser_fixture.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_parser/spec_parser_fixture.rb
deleted file mode 100644
index 14602d9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_parser/spec_parser_fixture.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-describe "c" do
-
-  it "1" do
-  end
-
-  it "2" do
-  end
-
-end
-
-describe "d" do
-
-  it "3" do
-  end
-
-  it "4" do
-  end
-
-end
-
-class SpecParserSubject
-end
-
-describe SpecParserSubject do
-
-  it "5" do
-  end
-
-end
-
-describe SpecParserSubject, "described" do
-
-  it "6" do
-  end
-
-end
-
-describe SpecParserSubject, "described", :something => :something_else do
-
-   it "7" do
-   end
-
-end
-
-describe "described", :something => :something_else do
-
-  it "8" do
-  end
-
-end
-
-describe "e" do
-
-  it "9" do
-  end
-
-  it "10" do
-  end
-
-  describe "f" do
-    it "11" do
-    end
-
-    it "12" do
-    end
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_parser_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_parser_spec.rb
deleted file mode 100644
index 18cf915..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_parser_spec.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "SpecParser" do
-  attr_reader :parser, :file
-  before(:each) do
-    @original_rspec_options = Spec::Runner.options
-    Spec::Runner.use ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
-    @parser = Spec::Runner::SpecParser.new
-    @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
-    load file
-  end
-
-  after(:each) do
-    Spec::Runner.use @original_rspec_options
-  end
-
-  it "should find spec name for 'specify' at same line" do
-    parser.spec_name_for(file, 5).should == "c 1"
-  end
-
-  it "should find spec name for 'specify' at end of spec line" do
-    parser.spec_name_for(file, 6).should == "c 1"
-  end
-
-  it "should find context for 'context' above all specs" do
-    parser.spec_name_for(file, 4).should == "c"
-  end
-
-  it "should find spec name for 'it' at same line" do
-    parser.spec_name_for(file, 15).should == "d 3"
-  end
-
-  it "should find spec name for 'it' at end of spec line" do
-    parser.spec_name_for(file, 16).should == "d 3"
-  end
-
-  it "should find context for 'describe' above all specs" do
-    parser.spec_name_for(file, 14).should == "d"
-  end
-
-  it "should find nearest example name between examples" do
-    parser.spec_name_for(file, 7).should == "c 1"
-  end
-
-  it "should find nothing outside a context" do
-    parser.spec_name_for(file, 2).should be_nil
-  end
-
-  it "should find context name for type" do
-    parser.spec_name_for(file, 26).should == "SpecParserSubject"
-  end
-
-  it "should find context and spec name for type" do
-    parser.spec_name_for(file, 28).should == "SpecParserSubject 5"
-  end
-
-  it "should find context and description for type" do
-    parser.spec_name_for(file, 33).should == "SpecParserSubject described"
-  end
-
-  it "should find context and description and example for type" do
-    parser.spec_name_for(file, 36).should == "SpecParserSubject described 6"
-  end
-
-  it "should find context and description for type with modifications" do
-    parser.spec_name_for(file, 40).should == "SpecParserSubject described"
-  end
-
-  it "should find context and described and example for type with modifications" do
-    parser.spec_name_for(file, 43).should == "SpecParserSubject described 7"
-  end
-
-  it "should find example group" do
-    parser.spec_name_for(file, 47).should == "described"
-  end
-
-  it "should find example" do
-    parser.spec_name_for(file, 50).should == "described 8"
-  end
-
-  it "should find nested example" do
-    parser.spec_name_for(file, 63).should == "e f 11"
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_spaced.opts b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_spaced.opts
deleted file mode 100644
index 6b3efd2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner/spec_spaced.opts
+++ /dev/null
@@ -1,2 +0,0 @@
---diff --colour
---format s
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner_spec.rb
deleted file mode 100644
index d75e661..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/runner_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.dirname(__FILE__) + '/../spec_helper.rb'
-
-module Spec
-  describe Runner, ".configure" do
-    it "should yield global configuration" do
-      Spec::Runner.configure do |config|
-        config.should equal(Spec::Runner.configuration)
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/spec_classes.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/spec_classes.rb
deleted file mode 100644
index c8900a7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/spec_classes.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-# This file contains various classes used by the specs.
-module Spec
-  module Expectations
-    class Person
-      attr_reader :name
-      def initialize name
-        @name = name
-      end
-      def == other
-        return @name == other.name
-      end
-    end
-    
-    class ClassWithMultiWordPredicate
-      def multi_word_predicate?
-        true 
-      end
-    end
-
-    module Helper
-      class CollectionWithSizeMethod
-        def initialize; @list = []; end
-        def size; @list.size; end
-        def push(item); @list.push(item); end
-      end
-
-      class CollectionWithLengthMethod
-        def initialize; @list = []; end
-        def length; @list.size; end
-        def push(item); @list.push(item); end
-      end
-
-      class CollectionOwner
-        attr_reader :items_in_collection_with_size_method, :items_in_collection_with_length_method
-
-        def initialize
-          @items_in_collection_with_size_method = CollectionWithSizeMethod.new
-          @items_in_collection_with_length_method = CollectionWithLengthMethod.new
-        end
-
-        def add_to_collection_with_size_method(item)
-          @items_in_collection_with_size_method.push(item)
-        end
-
-        def add_to_collection_with_length_method(item)
-          @items_in_collection_with_length_method.push(item)
-        end
-        
-        def items_for(arg)
-          return [1, 2, 3] if arg == 'a'
-          [1]
-        end
-        
-        def items
-          @items_in_collection_with_size_method
-        end
-      end
-
-      class HandCodedMock
-        include Spec::Matchers
-        def initialize(return_val)
-          @return_val = return_val
-          @funny_called = false
-        end
-
-        def funny?
-          @funny_called = true
-          @return_val
-        end
-
-        def hungry?(a, b, c)
-          a.should equal(1)
-          b.should equal(2)
-          c.should equal(3)
-          @funny_called = true
-          @return_val
-        end
-        
-        def exists?
-          @return_val
-        end
-        
-        def multi_word_predicate?
-          @return_val
-        end
-
-        def rspec_verify
-          @funny_called.should be_true
-        end
-      end
-      class ClassWithUnqueriedPredicate
-        attr_accessor :foo
-        def initialize(foo)
-          @foo = foo
-        end
-      end
-    end
-  end
-end
-
-module Custom
-  require 'spec/runner/formatter/base_text_formatter'
-  class Formatter < Spec::Runner::Formatter::BaseTextFormatter
-    attr_reader :options, :where
-    
-    def initialize(options, where)
-      @options = options
-      @where = where
-    end
-  end
-
-  class BadFormatter < Spec::Runner::Formatter::BaseTextFormatter
-    attr_reader :where
-    
-    def initialize(options, where)
-      bad_method
-    end
-  end
-
-  class Differ
-    attr_reader :options
-    def initialize(options)
-      @options = options
-    end
-
-    def diff_as_object(target, expected)
-      ""
-    end
-  end
-end
-
-class FakeReporter < Spec::Runner::Reporter
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/builders.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/builders.rb
deleted file mode 100644
index 77d50d5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/builders.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-module Spec
-  module Story
-    class StoryBuilder
-      def initialize
-        @title = 'a story'
-        @narrative = 'narrative'
-      end
-      
-      def title(value)
-        @title = value
-        self
-      end
-      
-      def narrative(value)
-        @narrative = value
-        self
-      end
-      
-      def to_story(&block)
-        block = lambda {} unless block_given?
-        Story.new @title, @narrative, &block
-      end
-    end
-    
-    class ScenarioBuilder
-      def initialize
-        @name = 'a scenario'
-        @story = StoryBuilder.new.to_story
-      end
-      
-      def name(value)
-        @name = value
-        self
-      end
-      
-      def story(value)
-        @story = value
-        self
-      end
-      
-      def to_scenario(&block)
-        Scenario.new @story, @name, &block
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/extensions/main_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/extensions/main_spec.rb
deleted file mode 100644
index acdc341..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/extensions/main_spec.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
-
-module Spec
-  module Story
-    module Extensions
-      describe "the main object extended with Main", :shared => true do
-        before(:each) do
-          @main = Class.new do; include Main; end
-          @original_rspec_story_steps, $rspec_story_steps = $rspec_story_steps, nil
-        end
-
-        after(:each) do
-          $rspec_story_steps = @original_rspec_story_steps
-        end
-
-        def have_step(type, name)
-          return simple_matcher(%[step group containing a #{type} named #{name.inspect}]) do |actual|
-            Spec::Story::Step === actual.find(type, name)
-          end
-        end
-      end
-
-      describe Main, "#run_story" do
-        it_should_behave_like "the main object extended with Main"
-
-        it "should create a PlainTextStoryRunner with run_story" do
-          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(mock("runner", :null_object => true))
-          @main.run_story
-        end
-
-        it "should yield the runner if arity == 1" do
-          File.should_receive(:read).with("some/path").and_return("Story: foo")
-          $main_spec_runner = nil
-          @main.run_story("some/path") do |runner|
-            $main_spec_runner = runner
-          end
-          $main_spec_runner.should be_an_instance_of(Spec::Story::Runner::PlainTextStoryRunner)
-        end
-
-        it "should run in the runner if arity == 0" do
-          File.should_receive(:read).with("some/path").and_return("Story: foo")
-          $main_spec_runner = nil
-          @main.run_story("some/path") do
-            $main_spec_runner = self
-          end
-          $main_spec_runner.should be_an_instance_of(Spec::Story::Runner::PlainTextStoryRunner)
-        end
-
-        it "should tell the PlainTextStoryRunner to run with run_story" do
-          runner = mock("runner")
-          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(runner)
-          runner.should_receive(:run)
-          @main.run_story
-        end  
-      end
-
-      describe Main, "#steps_for" do
-        it_should_behave_like "the main object extended with Main"
-
-        it "should have no steps for a non existent key" do
-          @main.steps_for(:key).find(:given, "foo").should be_nil
-        end
-
-        it "should create steps for a key" do
-          $main_spec_invoked = false
-          @main.steps_for(:key) do
-            Given("foo") {
-              $main_spec_invoked = true
-            }
-          end
-          @main.steps_for(:key).find(:given, "foo").perform(Object.new, "foo")
-          $main_spec_invoked.should be_true
-        end
-
-        it "should append steps to steps_for a given key" do
-          @main.steps_for(:key) do
-            Given("first") {}
-          end
-          @main.steps_for(:key) do
-            Given("second") {}
-          end
-          @main.steps_for(:key).should have_step(:given, "first")
-          @main.steps_for(:key).should have_step(:given, "second")
-        end
-      end
-
-      describe Main, "#with_steps_for adding new steps" do
-        it_should_behave_like "the main object extended with Main"
-
-        it "should result in a group containing pre-existing steps and newly defined steps" do
-          first_group = @main.steps_for(:key) do
-            Given("first") {}
-          end
-          second_group = @main.with_steps_for(:key) do
-            Given("second") {}
-          end
-
-          second_group.should have_step(:given, "first")
-          second_group.should have_step(:given, "second")
-        end
-
-        it "should not add its steps to the existing group" do
-          first_group = @main.steps_for(:key) do
-            Given("first") {}
-          end
-          second_group = @main.with_steps_for(:key) do
-            Given("second") {}
-          end
-
-          first_group.should have_step(:given, "first")
-          first_group.should_not have_step(:given, "second")
-        end
-      end
-
-      describe Main, "#with_steps_for running a story" do
-        it_should_behave_like "the main object extended with Main"
-        
-        before(:each) do
-          @runner = mock("runner")
-          @runner_step_group = StepGroup.new
-          @runner.stub!(:steps).and_return(@runner_step_group)
-          @runner.stub!(:run)
-          Spec::Story::Runner::PlainTextStoryRunner.stub!(:new).and_return(@runner)
-        end
-        
-        it "should create a PlainTextStoryRunner with a path" do
-          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).with('path/to/file',{}).and_return(@runner)
-          @main.with_steps_for(:foo) do
-            run 'path/to/file'
-          end
-        end
-        
-        it "should create a PlainTextStoryRunner with a path and options" do
-          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).with(anything,{:bar => :baz}).and_return(@runner)
-          @main.with_steps_for(:foo) do
-            run 'path/to/file', :bar => :baz
-          end
-        end
-        
-        it "should pass the group it creates to the runner's steps" do
-          steps = @main.steps_for(:ice_cream) do
-            Given("vanilla") {}
-          end
-          @main.with_steps_for(:ice_cream) do
-            run 'foo'
-          end
-          @runner_step_group.should have_step(:given, "vanilla")
-        end
-        
-        it "should run a story" do
-          @runner.should_receive(:run)
-          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(@runner)
-          @main.with_steps_for(:foo) do
-            run 'path/to/file'
-          end
-        end
-
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/extensions_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/extensions_spec.rb
deleted file mode 100644
index 612ddc7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/extensions_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-require 'spec/story'
-
-describe Kernel, "#Story" do
-  before(:each) do
-    Kernel.stub!(:at_exit)
-  end
-
-  it "should delegate to ::Spec::Story::Runner.story_runner" do
-    ::Spec::Story::Runner.story_runner.should_receive(:Story)
-    story = Story("title","narrative"){}
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/given_scenario_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/given_scenario_spec.rb
deleted file mode 100644
index a688f88..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/given_scenario_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
-  module Story
-    describe GivenScenario do
-      it 'should execute a scenario from the current story in its world' do
-        # given
-        class MyWorld
-          attr :scenario_ran
-        end
-        instance = World.create(MyWorld)
-        scenario = ScenarioBuilder.new.to_scenario do
-          @scenario_ran = true
-        end
-        Runner::StoryRunner.should_receive(:scenario_from_current_story).with('scenario name').and_return(scenario)
-        
-        step = GivenScenario.new 'scenario name'
-        
-        # when
-        step.perform(instance, nil)
-        
-        # then
-        instance.scenario_ran.should be_true
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/plain_text_story_runner_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/plain_text_story_runner_spec.rb
deleted file mode 100644
index 8afd666..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/plain_text_story_runner_spec.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
-  module Story
-    module Runner
-      describe PlainTextStoryRunner do
-        before(:each) do
-          StoryParser.stub!(:new).and_return(@parser = mock("parser"))
-          @parser.stub!(:parse).and_return([])
-          File.stub!(:read).with("path").and_return("this\nand that")
-        end
-
-        it "should provide access to steps" do
-          runner = PlainTextStoryRunner.new("path")
-          
-          runner.steps do |add|
-            add.given("baz") {}
-          end
-          
-          runner.steps.find(:given, "baz").should_not be_nil
-        end
-        
-        it "should parse a story file" do
-          runner = PlainTextStoryRunner.new("path")
-          @parser.should_receive(:parse).with(["this", "and that"])
-          runner.run(mock('runner'))
-        end
-        
-        it "should build up a mediator with its own steps and the singleton story_runner" do
-          @story_runner = mock('story runner', :null_object => true)
-
-          runner = PlainTextStoryRunner.new("path")
-          
-          Spec::Story::Runner::StoryMediator.should_receive(:new).with(
-            runner.steps, @story_runner, {}
-          ).and_return(mediator = stub("mediator", :run_stories => nil))
-          runner.run(@story_runner)
-        end
-        
-        it "should build up a parser with the mediator" do
-          runner = PlainTextStoryRunner.new("path")
-          Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator = stub("mediator", :run_stories => nil))
-          Spec::Story::Runner::StoryParser.should_receive(:new).with(mediator).and_return(@parser)
-          runner.run(stub("story_runner"))
-        end
-        
-        it "should tell the mediator to run the stories" do
-          runner = PlainTextStoryRunner.new("path")
-          mediator = mock("mediator")
-          Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator)
-          mediator.should_receive(:run_stories)
-          runner.run(mock('runner'))
-        end
-        
-        it "should accept a block instead of a path" do
-          runner = PlainTextStoryRunner.new do |runner|
-            runner.load("path/to/story")
-          end
-          File.should_receive(:read).with("path/to/story").and_return("this\nand that")
-          runner.run(mock('runner'))
-        end
-        
-        it "should tell you if you try to run with no path set" do
-          runner = PlainTextStoryRunner.new
-          lambda {
-            runner.run(mock('runner'))
-          }.should raise_error(RuntimeError, "You must set a path to the file with the story. See the RDoc.")
-        end
-        
-        it "should pass options to the mediator" do
-          runner = PlainTextStoryRunner.new("path", :foo => :bar)
-          Spec::Story::Runner::StoryMediator.should_receive(:new).
-            with(anything, anything, :foo => :bar).
-            and_return(mediator = stub("mediator", :run_stories => nil))
-          runner.run(mock('runner'))
-        end
-        
-        it "should provide access to its options" do
-          runner = PlainTextStoryRunner.new("path")
-          runner[:foo] = :bar
-          Spec::Story::Runner::StoryMediator.should_receive(:new).
-            with(anything, anything, :foo => :bar).
-            and_return(mediator = stub("mediator", :run_stories => nil))
-          runner.run mock('runner')
-        end
-        
-      end
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/scenario_collector_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/scenario_collector_spec.rb
deleted file mode 100644
index 042c41e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/scenario_collector_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
-  module Story
-    module Runner
-      describe ScenarioCollector do
-        it 'should construct scenarios with the supplied story' do
-          # given
-          story = stub_everything('story')
-          scenario_collector = ScenarioCollector.new(story)
-          
-          # when
-          scenario_collector.Scenario 'scenario1' do end
-          scenario_collector.Scenario 'scenario2' do end
-          scenarios = scenario_collector.scenarios
-          
-          # then
-          scenario_collector.should have(2).scenarios
-          scenarios.first.name.should == 'scenario1'
-          scenarios.first.story.should equal(story)
-          scenarios.last.name.should == 'scenario2'
-          scenarios.last.story.should equal(story)
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/scenario_runner_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/scenario_runner_spec.rb
deleted file mode 100644
index c13c3d7..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/scenario_runner_spec.rb
+++ /dev/null
@@ -1,214 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
-  module Story
-    module Runner
-      describe ScenarioRunner do
-        it 'should run a scenario in its story' do
-          # given
-          world = stub_everything
-          scenario_runner = ScenarioRunner.new
-          $answer = nil
-          story = Story.new 'story', 'narrative' do
-            @answer = 42 # this should be available to the scenario
-          end
-          scenario = Scenario.new story, 'scenario' do
-            $answer = @answer
-          end
-          
-          # when
-          scenario_runner.run(scenario, world)
-          
-          # then
-          $answer.should == 42
-        end
-        
-        it 'should allow scenarios to share methods' do
-          # given
-          world = stub_everything
-          $shared_invoked = 0
-          story = Story.new 'story', 'narrative' do
-            def shared
-              $shared_invoked += 1
-            end
-          end
-          scenario1 = Scenario.new story, 'scenario1' do
-            shared()
-          end
-          scenario2 = Scenario.new story, 'scenario2' do
-            shared()
-          end
-          scenario_runner = ScenarioRunner.new
-          
-          # when
-          scenario_runner.run(scenario1, world)
-          scenario_runner.run(scenario2, world)
-          
-          # then
-          $shared_invoked.should == 2
-        end
-        
-        it 'should notify listeners when a scenario starts' do
-          # given
-          world = stub_everything
-          story = Story.new 'story', 'narrative' do end
-          scenario = Scenario.new story, 'scenario1' do
-            # succeeds
-          end
-          scenario_runner = ScenarioRunner.new
-          mock_listener1 = stub_everything('listener1')
-          mock_listener2 = stub_everything('listener2')
-          scenario_runner.add_listener(mock_listener1)
-          scenario_runner.add_listener(mock_listener2)
-          
-          # expect
-          mock_listener1.should_receive(:scenario_started).with('story', 'scenario1')
-          mock_listener2.should_receive(:scenario_started).with('story', 'scenario1')
-          
-          # when
-          scenario_runner.run(scenario, world)
-          
-          # then
-        end
-        describe "when a scenario succeeds" do
-          before(:each) do
-            # given
-            @world = stub_everything('world')
-            @story = Story.new 'story', 'narrative' do end
-            @scenario = Scenario.new @story, 'scenario1' do
-              # succeeds
-            end
-            @scenario_runner = ScenarioRunner.new            
-          end
-          
-          it 'should notify listeners' do
-            #given
-            mock_listener1 = stub_everything('listener1')
-            mock_listener2 = stub_everything('listener2')
-            @scenario_runner.add_listener(mock_listener1)
-            @scenario_runner.add_listener(mock_listener2)
-            
-            # expect
-            mock_listener1.should_receive(:scenario_succeeded).with('story', 'scenario1')
-            mock_listener2.should_receive(:scenario_succeeded).with('story', 'scenario1')
-            
-            # when
-            @scenario_runner.run(@scenario, @world)
-
-            # then
-          end
-          
-          it "should return true" do
-            #when
-            success = @scenario_runner.run(@scenario, @world)
-            
-            #then
-            success.should == true
-          end
-        end
-
-        describe "when a scenario raises an error (other than a pending error)" do
-          before(:each) do
-            # given
-            @error = RuntimeError.new('oops')
-            @story = Story.new 'title', 'narrative' do end
-            @scenario = Scenario.new @story, 'scenario1' do
-            end
-            @scenario_runner = ScenarioRunner.new
-            @world = stub_everything
-
-            # expect
-            @world.should_receive(:errors).twice.and_return([@error, @error])
-          end
-          
-          it 'should notify listeners ONCE' do
-            #given
-            mock_listener = stub_everything('listener')
-            @scenario_runner.add_listener(mock_listener)
-            
-            #expect
-            mock_listener.should_receive(:scenario_failed).with('title', 'scenario1', @error).once
-
-            # when
-            @scenario_runner.run @scenario, @world
-
-            # then
-          end
-          
-          it "should return false" do
-            # when
-            success = @scenario_runner.run @scenario, @world
-
-            # then
-            success.should == false
-          end
-          
-          
-        end
-        
-        describe "when a scenario is pending" do
-          before(:each) do
-            # given
-            @pending_error = Spec::Example::ExamplePendingError.new('todo')
-            @story = Story.new 'title', 'narrative' do end
-            @scenario = Scenario.new @story, 'scenario1' do
-            end
-            @scenario_runner = ScenarioRunner.new
-            @world = stub_everything
-            
-            # expect
-            @world.should_receive(:errors).twice.and_return([@pending_error, @pending_error])
-          end
-          
-          it 'should notify listeners' do
-            #given 
-            mock_listener = mock('listener')
-            @scenario_runner.add_listener(mock_listener)
-            
-            # expect
-            mock_listener.should_receive(:scenario_started).with('title', 'scenario1')
-            mock_listener.should_receive(:scenario_pending).with('title', 'scenario1', 'todo').once
-
-            # when
-            @scenario_runner.run @scenario, @world
-
-            # then
-          end
-          
-          it "should return true" do
-            # when
-            success = @scenario_runner.run @scenario, @world
-
-            # then
-            success.should == true
-          end
-        end
-
-        describe "when a scenario has an empty body" do
-          before(:each) do
-            @story = Story.new 'title', 'narrative' do end
-            @scenario = Scenario.new @story, 'scenario'
-            @scenario_runner = ScenarioRunner.new
-            @world = stub_everything
-          end
-
-          it "should mark the scenario as pending" do
-            mock_listener = stub('listener', :scenario_started => true)
-            @scenario_runner.add_listener mock_listener
-
-            mock_listener.should_receive(:scenario_pending).with('title', 'scenario', '')
-            @scenario_runner.run @scenario, @world
-          end
-
-          it "should return true" do
-            # when
-            success = @scenario_runner.run @scenario, @world
-
-            # then
-            success.should == true
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_mediator_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_mediator_spec.rb
deleted file mode 100644
index 13deb26..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_mediator_spec.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
-  module Story
-    module Runner
-      
-      describe StoryMediator do
-        before(:each) do
-          $story_mediator_spec_value = nil
-          @step_group = StepGroup.new
-          @step_group.create_matcher(:given, "given") { $story_mediator_spec_value = "given matched" }
-          @step_group.create_matcher(:when, "when") { $story_mediator_spec_value = "when matched" }
-          @step_group.create_matcher(:then, "then") { $story_mediator_spec_value = "then matched" }
-          
-          @scenario_runner = ScenarioRunner.new
-          @runner = StoryRunner.new @scenario_runner
-          @mediator = StoryMediator.new @step_group, @runner
-        end
-        
-        def run_stories
-          @mediator.run_stories
-          @runner.run_stories
-        end
-        
-        it "should have no stories" do
-          @mediator.stories.should be_empty
-        end
-        
-        it "should create two stories" do
-          @mediator.create_story "story title", "story narrative"
-          @mediator.create_story "story title 2", "story narrative 2"
-          run_stories
-          
-          @runner.should have(2).stories
-          @runner.stories.first.title.should == "story title"
-          @runner.stories.first.narrative.should == "story narrative"
-          @runner.stories.last.title.should == "story title 2"
-          @runner.stories.last.narrative.should == "story narrative 2"
-        end
-        
-        it "should create a scenario" do
-          @mediator.create_story "title", "narrative"
-          @mediator.create_scenario "scenario name"
-          run_stories
-          
-          @runner.should have(1).scenarios
-          @runner.scenarios.first.name.should == "scenario name"
-          @runner.scenarios.first.story.should == @runner.stories.first
-        end
-        
-        it "should create a given scenario step if one matches" do
-          pending("need to untangle the dark mysteries of the story runner - something needs to get stubbed here") do
-            story = @mediator.create_story "title", "narrative"
-            @mediator.create_scenario "previous scenario"
-            @mediator.create_scenario "current scenario"
-            @mediator.create_given_scenario "previous scenario"
-            run_stories
-          
-            $story_mediator_spec_value.should == "previous scenario matched"
-          end
-        end
-                
-        it "should create a given step if one matches" do
-          @mediator.create_story "title", "narrative"
-          @mediator.create_scenario "scenario"
-          @mediator.create_given "given"
-          run_stories
-          
-          $story_mediator_spec_value.should == "given matched"
-        end
-        
-        it "should create a pending step if no given step matches" do
-          @mediator.create_story "title", "narrative"
-          @mediator.create_scenario "scenario"
-          @mediator.create_given "no match"
-          mock_listener = stub_everything("listener")
-          mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match")
-          @scenario_runner.add_listener mock_listener
-          run_stories
-        end
-        
-        it "should create a when step if one matches" do
-          @mediator.create_story "title", "narrative"
-          @mediator.create_scenario "scenario"
-          @mediator.create_when "when"
-          run_stories
-          
-          $story_mediator_spec_value.should == "when matched"
-        end
-        
-        it "should create a pending step if no when step matches" do
-          @mediator.create_story "title", "narrative"
-          @mediator.create_scenario "scenario"
-          @mediator.create_when "no match"
-          mock_listener = stub_everything("listener")
-          mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match")
-          @scenario_runner.add_listener mock_listener
-          run_stories
-        end
-        
-        it "should create a then step if one matches" do
-          @mediator.create_story "title", "narrative"
-          @mediator.create_scenario "scenario"
-          @mediator.create_then "then"
-          run_stories
-          
-          $story_mediator_spec_value.should == "then matched"
-        end
-        
-        it "should create a pending step if no 'then' step matches" do
-          @mediator.create_story "title", "narrative"
-          @mediator.create_scenario "scenario"
-          @mediator.create_then "no match"
-          mock_listener = stub_everything("listener")
-          mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match")
-          @scenario_runner.add_listener mock_listener
-          run_stories
-        end
-        
-        it "should pass options to the stories it creates" do
-          @mediator = StoryMediator.new @step_group, @runner, :foo => :bar
-          @mediator.create_story "story title", "story narrative"
-        
-          run_stories
-          
-          @runner.stories.first[:foo].should == :bar
-        end
-        
-        it "should description" do
-          @mediator = StoryMediator.new @step_group, @runner, :foo => :bar
-          @mediator.create_story "title", "narrative"
-          @mediator.create_scenario "scenario"
-          @mediator.create_given "something"
-          given = @mediator.last_step
-          @mediator.add_to_last " else"
-          given.name.should == "something else"
-        end
-        
-      end
-      
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_parser_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_parser_spec.rb
deleted file mode 100644
index e056147..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_parser_spec.rb
+++ /dev/null
@@ -1,401 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
-	module Story
-		module Runner
-		  
-			describe StoryParser do
-			  before(:each) do
-			    @story_mediator = mock("story_mediator")
-		    	@parser = StoryParser.new(@story_mediator)
-			  end
-
-			  it "should parse no lines" do
-					@parser.parse([])
-			  end
-			  
-			  it "should ignore text before the first Story: begins" do
-			    @story_mediator.should_not_receive(:create_scenario)
-			    @story_mediator.should_not_receive(:create_given)
-			    @story_mediator.should_not_receive(:create_when)
-			    @story_mediator.should_not_receive(:create_then)
-			    @story_mediator.should_receive(:create_story).with("simple addition", "")
-					@parser.parse(["Here is a bunch of text", "about a calculator and all the things", "that it will do", "Story: simple addition"])
-		    end
-			  
-			  it "should create a story" do
-			    @story_mediator.should_receive(:create_story).with("simple addition", "")
-					@parser.parse(["Story: simple addition"])
-			  end
-			  
-			  it "should create a story when line has leading spaces" do
-			    @story_mediator.should_receive(:create_story).with("simple addition", "")
-					@parser.parse(["    Story: simple addition"])
-			  end
-			  
-			  it "should add a one line narrative to the story" do
-			    @story_mediator.should_receive(:create_story).with("simple addition","narrative")
-					@parser.parse(["Story: simple addition","narrative"])
-			  end
-			  
-			  it "should add a multi line narrative to the story" do
-			    @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2\nline 3")
-					@parser.parse(["Story: simple addition","narrative line 1", "line 2", "line 3"])
-			  end
-			  
-			  it "should exclude blank lines from the narrative" do
-			    @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2")
-					@parser.parse(["Story: simple addition","narrative line 1", "", "line 2"])
-			  end
-			  
-			  it "should exclude Scenario from the narrative" do
-			    @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2")
-			    @story_mediator.should_receive(:create_scenario)
-					@parser.parse(["Story: simple addition","narrative line 1", "line 2", "Scenario: add one plus one"])
-			  end
-			  
-			end
-
-			describe StoryParser, "in Story state" do
-			  before(:each) do
-			    @story_mediator = mock("story_mediator")
-		    	@parser = StoryParser.new(@story_mediator)
-			    @story_mediator.stub!(:create_story)
-			  end
-			  
-			  it "should create a second Story for Story" do
-          @story_mediator.should_receive(:create_story).with("number two","")
-					@parser.parse(["Story: s", "Story: number two"])
-			  end
-			  
-			  it "should include And in the narrative" do
-          @story_mediator.should_receive(:create_story).with("s","And foo")
-          @story_mediator.should_receive(:create_scenario).with("bar")
-					@parser.parse(["Story: s", "And foo", "Scenario: bar"])
-			  end
-			  
-			  it "should create a Scenario for Scenario" do
-          @story_mediator.should_receive(:create_scenario).with("number two")
-					@parser.parse(["Story: s", "Scenario: number two"])
-			  end
-
-			  it "should include Given in the narrative" do
-          @story_mediator.should_receive(:create_story).with("s","Given foo")
-          @story_mediator.should_receive(:create_scenario).with("bar")
-					@parser.parse(["Story: s", "Given foo", "Scenario: bar"])
-			  end
-			  
-			  it "should include Given: in the narrative" do
-          @story_mediator.should_receive(:create_story).with("s","Given: foo")
-          @story_mediator.should_receive(:create_scenario).with("bar")
-					@parser.parse(["Story: s", "Given: foo", "Scenario: bar"])
-			  end
-			  			  
-			  it "should include When in the narrative" do
-          @story_mediator.should_receive(:create_story).with("s","When foo")
-          @story_mediator.should_receive(:create_scenario).with("bar")
-					@parser.parse(["Story: s", "When foo", "Scenario: bar"])
-			  end
-			  			  
-			  it "should include Then in the narrative" do
-          @story_mediator.should_receive(:create_story).with("s","Then foo")
-          @story_mediator.should_receive(:create_scenario).with("bar")
-					@parser.parse(["Story: s", "Then foo", "Scenario: bar"])
-			  end
-			  			  
-			  it "should include other in the story" do
-          @story_mediator.should_receive(:create_story).with("s","narrative")
-					@parser.parse(["Story: s", "narrative"])
-			  end
-			end
-			
-			describe StoryParser, "in Scenario state" do
-			  before(:each) do
-			    @story_mediator = mock("story_mediator")
-		    	@parser = StoryParser.new(@story_mediator)
-			    @story_mediator.stub!(:create_story)
-			    @story_mediator.stub!(:create_scenario)
-			  end
-			  
-			  it "should create a Story for Story" do
-          @story_mediator.should_receive(:create_story).with("number two","")
-					@parser.parse(["Story: s", "Scenario: s", "Story: number two"])
-			  end
-			  
-			  it "should create a Scenario for Scenario" do
-          @story_mediator.should_receive(:create_scenario).with("number two")
-					@parser.parse(["Story: s", "Scenario: s", "Scenario: number two"])
-			  end
-
-			  it "should raise for And" do
-			    lambda {
-  					@parser.parse(["Story: s", "Scenario: s", "And second"])
-			    }.should raise_error(IllegalStepError, /^Illegal attempt to create a And after a Scenario/)
-			  end
-			  
-			  it "should create a Given for Given" do
-          @story_mediator.should_receive(:create_given).with("gift")
-					@parser.parse(["Story: s", "Scenario: s", "Given gift"])
-			  end
-			  
-			  it "should create a Given for Given:" do
-          @story_mediator.should_receive(:create_given).with("gift")
-					@parser.parse(["Story: s", "Scenario: s", "Given: gift"])
-			  end
-			  
-			  it "should create a GivenScenario for GivenScenario" do
-          @story_mediator.should_receive(:create_given_scenario).with("previous")
-					@parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"])
-			  end
-			  
-			  it "should create a GivenScenario for GivenScenario:" do
-          @story_mediator.should_receive(:create_given_scenario).with("previous")
-					@parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"])
-			  end
-			  
-			  it "should transition to Given state after GivenScenario" do
-          @story_mediator.stub!(:create_given_scenario)
-					@parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"])
-					@parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState)
-			  end
-			  
-			  it "should transition to Given state after GivenScenario:" do
-          @story_mediator.stub!(:create_given_scenario)
-					@parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"])
-					@parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState)
-			  end
-			  
-			  it "should create a When for When" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "When ever"])
-			  end
-			  
-			  it "should create a When for When:" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "When: ever"])
-			  end
-			  
-			  it "should create a Then for Then" do
-          @story_mediator.should_receive(:create_then).with("and there")
-					@parser.parse(["Story: s", "Scenario: s", "Then and there"])
-			  end
-			  
-			  it "should create a Then for Then:" do
-          @story_mediator.should_receive(:create_then).with("and there")
-					@parser.parse(["Story: s", "Scenario: s", "Then: and there"])
-			  end
-			  
-			  it "should ignore other" do
-					@parser.parse(["Story: s", "Scenario: s", "this is ignored"])
-			  end
-			end
-						
-			describe StoryParser, "in Given state" do
-			  before(:each) do
-			    @story_mediator = mock("story_mediator")
-		    	@parser = StoryParser.new(@story_mediator)
-			    @story_mediator.stub!(:create_story)
-			    @story_mediator.stub!(:create_scenario)
-			    @story_mediator.should_receive(:create_given).with("first")
-			  end
-			  
-			  it "should create a Story for Story" do
-          @story_mediator.should_receive(:create_story).with("number two","")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "Story: number two"])
-			  end
-			  
-			  it "should create a Scenario for Scenario" do
-          @story_mediator.should_receive(:create_scenario).with("number two")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "Scenario: number two"])
-			  end
-
-			  it "should create a second Given for Given" do
-          @story_mediator.should_receive(:create_given).with("second")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "Given second"])
-			  end
-			  
-			  it "should create a second Given for And" do
-          @story_mediator.should_receive(:create_given).with("second")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "And second"])
-			  end
-			  
-			  it "should create a second Given for And:" do
-          @story_mediator.should_receive(:create_given).with("second")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "And: second"])
-			  end
-			  
-			  it "should create a When for When" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When ever"])
-			  end
-			  
-			  it "should create a When for When:" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When: ever"])
-			  end
-			  
-			  it "should create a Then for Then" do
-          @story_mediator.should_receive(:create_then).with("and there")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "Then and there"])
-			  end
-			  
-			  it "should create a Then for Then:" do
-          @story_mediator.should_receive(:create_then).with("and there")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "Then: and there"])
-			  end
-			  
-			  it "should ignore lines beginning with '#'" do
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "#this is ignored"])
-			  end
-
-			  it "should not ignore lines beginning with non-keywords" do
-          @story_mediator.should_receive(:add_to_last).with("\nthis is not ignored")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "this is not ignored"])
-			  end
-			  
-			end
-
-			describe StoryParser, "in When state" do
-			  before(:each) do
-			    @story_mediator = mock("story_mediator")
-		    	@parser = StoryParser.new(@story_mediator)
-			    @story_mediator.stub!(:create_story)
-			    @story_mediator.stub!(:create_scenario)
-			    @story_mediator.should_receive(:create_given).with("first")
-			    @story_mediator.should_receive(:create_when).with("else")
-			  end
-			  
-			  it "should create a Story for Story" do
-          @story_mediator.should_receive(:create_story).with("number two","")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When: else", "Story: number two"])
-			  end
-			  
-			  it "should create a Scenario for Scenario" do
-          @story_mediator.should_receive(:create_scenario).with("number two")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Scenario: number two"])
-			  end
-
-			  it "should create Given for Given" do
-          @story_mediator.should_receive(:create_given).with("second")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given second"])
-			  end
-			  
-			  it "should create Given for Given:" do
-          @story_mediator.should_receive(:create_given).with("second")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given: second"])
-			  end
-			  
-			  it "should create a second When for When" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "When ever"])
-			  end
-			  
-			  it "should create a second When for When:" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "When: ever"])
-			  end
-			  
-			  it "should create a second When for And" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "And ever"])
-			  end
-			  
-			  it "should create a second When for And:" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "And: ever"])
-			  end
-			  
-			  it "should create a Then for Then" do
-          @story_mediator.should_receive(:create_then).with("and there")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then and there"])
-			  end
-			  
-			  it "should create a Then for Then:" do
-          @story_mediator.should_receive(:create_then).with("and there")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: and there"])
-			  end
-			  
-			  it "should ignore lines beginning with '#'" do
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "#this is ignored"])
-			  end
-
-			  it "should not ignore lines beginning with non-keywords" do
-          @story_mediator.should_receive(:add_to_last).with("\nthis is not ignored")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When else", "this is not ignored"])
-			  end
-			end
-
-			describe StoryParser, "in Then state" do
-			  before(:each) do
-			    @story_mediator = mock("story_mediator")
-		    	@parser = StoryParser.new(@story_mediator)
-			    @story_mediator.stub!(:create_story)
-			    @story_mediator.stub!(:create_scenario)
-			    @story_mediator.should_receive(:create_given).with("first")
-			    @story_mediator.should_receive(:create_when).with("else")
-			    @story_mediator.should_receive(:create_then).with("what")
-			  end
-			  
-			  it "should create a Story for Story" do
-          @story_mediator.should_receive(:create_story).with("number two","")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Story: number two"])
-			  end
-			  
-			  it "should create a Scenario for Scenario" do
-          @story_mediator.should_receive(:create_scenario).with("number two")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Scenario: number two"])
-			  end
-
-			  it "should create Given for Given" do
-          @story_mediator.should_receive(:create_given).with("second")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Given second"])
-			  end
-			  
-			  it "should create Given for Given:" do
-          @story_mediator.should_receive(:create_given).with("second")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Given: second"])
-			  end
-			  
-			  it "should create When for When" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "When ever"])
-			  end
-			  
-			  it "should create When for When:" do
-          @story_mediator.should_receive(:create_when).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "When: ever"])
-			  end
-
-			  it "should create a Then for Then" do
-          @story_mediator.should_receive(:create_then).with("and there")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Then and there"])
-			  end
-			  
-			  it "should create a Then for Then:" do
-          @story_mediator.should_receive(:create_then).with("and there")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Then: and there"])
-			  end
-
-			  it "should create a second Then for And" do
-          @story_mediator.should_receive(:create_then).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "And ever"])
-			  end
-			  
-			  it "should create a second Then for And:" do
-          @story_mediator.should_receive(:create_then).with("ever")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "And: ever"])
-			  end
-
-			  
-			  it "should ignore lines beginning with '#'" do
-					@parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "#this is ignored"])
-			  end
-
-			  it "should not ignore lines beginning with non-keywords" do
-          @story_mediator.should_receive(:add_to_last).with("\nthis is not ignored")
-					@parser.parse(["Story: s", "Scenario: s", "Given: first", "When else", "Then what", "this is not ignored"])
-			  end
-			end
-		end
-	end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_runner_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_runner_spec.rb
deleted file mode 100644
index bddf919..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner/story_runner_spec.rb
+++ /dev/null
@@ -1,294 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
-  module Story
-    module Runner
-      describe StoryRunner do
-        it 'should collect all the stories' do
-          # given
-          story_runner = StoryRunner.new(stub('scenario_runner'))
-          
-          # when
-          story_runner.Story 'title1', 'narrative1' do end
-          story_runner.Story 'title2', 'narrative2' do end
-          stories = story_runner.stories
-          
-          # then
-          story_runner.should have(2).stories
-          stories.first.title.should == 'title1'
-          stories.first.narrative.should == 'narrative1'
-          stories.last.title.should == 'title2'
-          stories.last.narrative.should == 'narrative2'
-        end
-        
-        it 'should gather all the scenarios in the stories' do
-          # given
-          story_runner = StoryRunner.new(stub('scenario_runner'))
-          
-          # when
-          story_runner.Story "story1", "narrative1" do
-            Scenario "scenario1" do end
-            Scenario "scenario2" do end
-          end
-          story_runner.Story "story2", "narrative2" do
-            Scenario "scenario3" do end
-          end
-          scenarios = story_runner.scenarios
-          
-          # then
-          story_runner.should have(3).scenarios
-          scenarios[0].name.should == 'scenario1'
-          scenarios[1].name.should == 'scenario2'
-          scenarios[2].name.should == 'scenario3'
-        end
-        
-        # captures worlds passed into a ScenarioRunner
-        class ScenarioWorldCatcher
-          attr_accessor :worlds
-          def run(scenario, world)
-           (@worlds ||= [])  << world
-          end
-        end
-        
-        it 'should run each scenario in a separate object' do
-          # given
-          scenario_world_catcher = ScenarioWorldCatcher.new
-          story_runner = StoryRunner.new(scenario_world_catcher)
-          story_runner.Story 'story', 'narrative' do
-            Scenario 'scenario1' do end
-            Scenario 'scenario2' do end
-          end
-          
-          # when
-          story_runner.run_stories
-          
-          # then
-          worlds = scenario_world_catcher.worlds
-          scenario_world_catcher.should have(2).worlds
-          worlds[0].should_not == worlds[1]
-        end
-        
-        it "should return false if the scenario runner returns false ever" do
-          #given
-          stub_scenario_runner = stub_everything
-          story_runner = StoryRunner.new(stub_scenario_runner)
-          story_runner.Story 'story', 'narrative' do
-            Scenario 'scenario1' do end
-            Scenario 'scenario2' do end
-          end
-          
-          # expect
-          stub_scenario_runner.should_receive(:run).once.and_return(false,true)
-          
-          # when
-          success = story_runner.run_stories
-          
-          #then
-          success.should == false
-        end
-        
-        it "should return true if the scenario runner returns true for all scenarios" do
-          #given
-          stub_scenario_runner = stub_everything
-          story_runner = StoryRunner.new(stub_scenario_runner)
-          story_runner.Story 'story', 'narrative' do
-            Scenario 'scenario1' do end
-            Scenario 'scenario2' do end
-          end
-          
-          # expect
-          stub_scenario_runner.should_receive(:run).once.and_return(true,true)
-          
-          # when
-          success = story_runner.run_stories
-          
-          #then
-          success.should == true
-        end
-        
-        it 'should use the provided world creator to create worlds' do
-          # given
-          stub_scenario_runner = stub_everything
-          mock_world_creator = mock('world creator')
-          story_runner = StoryRunner.new(stub_scenario_runner, mock_world_creator)
-          story_runner.Story 'story', 'narrative' do
-            Scenario 'scenario1' do end
-            Scenario 'scenario2' do end
-          end
-          
-          # expect
-          mock_world_creator.should_receive(:create).twice
-          
-          # when
-          story_runner.run_stories
-          
-          # then
-        end
-        
-        it 'should notify listeners of the scenario count when the run starts' do
-          # given
-          story_runner = StoryRunner.new(stub_everything)
-          mock_listener1 = stub_everything('listener1')
-          mock_listener2 = stub_everything('listener2')
-          story_runner.add_listener(mock_listener1)
-          story_runner.add_listener(mock_listener2)
-          
-          story_runner.Story 'story1', 'narrative1' do
-            Scenario 'scenario1' do end
-          end
-          story_runner.Story 'story2', 'narrative2' do
-            Scenario 'scenario2' do end
-            Scenario 'scenario3' do end
-          end
-          
-          # expect
-          mock_listener1.should_receive(:run_started).with(3)
-          mock_listener2.should_receive(:run_started).with(3)
-          
-          # when
-          story_runner.run_stories
-          
-          # then
-        end
-        
-        it 'should notify listeners when a story starts' do
-          # given
-          story_runner = StoryRunner.new(stub_everything)
-          mock_listener1 = stub_everything('listener1')
-          mock_listener2 = stub_everything('listener2')
-          story_runner.add_listener(mock_listener1)
-          story_runner.add_listener(mock_listener2)
-          
-          story_runner.Story 'story1', 'narrative1' do
-            Scenario 'scenario1' do end
-          end
-          story_runner.Story 'story2', 'narrative2' do
-            Scenario 'scenario2' do end
-            Scenario 'scenario3' do end
-          end
-          
-          # expect
-          mock_listener1.should_receive(:story_started).with('story1', 'narrative1')
-          mock_listener1.should_receive(:story_ended).with('story1', 'narrative1')
-          mock_listener2.should_receive(:story_started).with('story2', 'narrative2')
-          mock_listener2.should_receive(:story_ended).with('story2', 'narrative2')
-          
-          # when
-          story_runner.run_stories
-          
-          # then
-        end
-        
-        it 'should notify listeners when the run ends' do
-          # given
-          story_runner = StoryRunner.new(stub_everything)
-          mock_listener1 = stub_everything('listener1')
-          mock_listener2 = stub_everything('listener2')
-          story_runner.add_listener mock_listener1
-          story_runner.add_listener mock_listener2
-          story_runner.Story 'story1', 'narrative1' do
-            Scenario 'scenario1' do end
-          end
-          
-          # expect
-          mock_listener1.should_receive(:run_ended)
-          mock_listener2.should_receive(:run_ended)
-          
-          # when
-          story_runner.run_stories
-          
-          # then
-        end
-        
-        it 'should run a story in an instance of a specified class' do
-          # given
-          scenario_world_catcher = ScenarioWorldCatcher.new
-          story_runner = StoryRunner.new(scenario_world_catcher)
-          story_runner.Story 'title', 'narrative', :type => String do
-            Scenario 'scenario' do end
-          end
-          
-          # when
-          story_runner.run_stories
-          
-          # then
-          scenario_world_catcher.worlds[0].should be_kind_of(String)
-          scenario_world_catcher.worlds[0].should be_kind_of(World)
-        end
-        
-        it 'should pass initialization params through to the constructed instance' do
-          # given
-          scenario_world_catcher = ScenarioWorldCatcher.new
-          story_runner = StoryRunner.new(scenario_world_catcher)
-          story_runner.Story 'title', 'narrative', :type => Array, :args => [3]  do
-            Scenario 'scenario' do end
-          end
-          
-          # when
-          story_runner.run_stories
-          
-          # then
-          scenario_world_catcher.worlds[0].should be_kind_of(Array)
-          scenario_world_catcher.worlds[0].size.should == 3
-        end
-        
-        it 'should find a scenario in the current story by name' do
-          # given
-          story_runner = StoryRunner.new(ScenarioRunner.new)
-          scenario = nil
-          
-          story_runner.Story 'title', 'narrative' do
-            Scenario 'first scenario' do
-            end
-            Scenario 'second scenario' do
-              scenario = StoryRunner.scenario_from_current_story 'first scenario'
-            end
-          end
-          
-          # when
-          story_runner.run_stories
-          
-          # then
-          scenario.name.should == 'first scenario'
-        end
-        
-        it "should clean the steps between stories" do
-          #given
-          story_runner = StoryRunner.new(ScenarioRunner.new)
-          result = mock 'result'
-          
-          step1 = Step.new('step') do
-            result.one
-          end
-          steps1 = StepGroup.new
-          steps1.add :when, step1
-          
-          story_runner.Story 'title', 'narrative', :steps_for => steps1 do
-            Scenario 'first scenario' do
-              When 'step'
-            end
-          end
-          
-          step2 = Step.new('step') do
-            result.two
-          end
-          steps2 = StepGroup.new
-          steps2.add :when, step2
-          
-          story_runner.Story 'title2', 'narrative', :steps_for => steps2 do
-            Scenario 'second scenario' do
-              When 'step'
-            end
-          end
-          
-          #then
-          result.should_receive(:one)
-          result.should_receive(:two)
-          
-          #when
-          story_runner.run_stories
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner_spec.rb
deleted file mode 100644
index db1c40d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/runner_spec.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-require 'spec/runner/formatter/story/plain_text_formatter'
-require 'spec/runner/formatter/story/html_formatter'
-
-module Spec
-  module Story
-    describe Runner, "module" do
-      before(:each) do
-        @world_creator = World.dup
-        @runner_module = Runner.dup
-        @runner_module.instance_eval {@story_runner = nil}
-        @runner_module.stub!(:register_exit_hook)
-      end
-      
-      def create_options(args=[])
-        Spec::Runner::OptionParser.parse(args, StringIO.new, StringIO.new)
-      end
-      
-      it 'should wire up a singleton StoryRunner' do
-        @runner_module.story_runner.should_not be_nil
-      end
-      
-      it 'should set its options based on ARGV' do
-        # given
-        @runner_module.should_receive(:run_options).and_return(
-          create_options(['--dry-run'])
-        )
-
-        # when
-        options = @runner_module.run_options
-        
-        # then
-        options.dry_run.should be_true
-      end
-      
-      describe "initialization" do
-        
-        before(:each) do
-          # given
-          @story_runner = mock('story runner', :null_object => true)
-          @scenario_runner = mock('scenario runner', :null_object => true)
-          @world_creator = mock('world', :null_object => true)
-        
-          @runner_module.stub!(:world_creator).and_return(@world_creator)
-          @runner_module.stub!(:create_story_runner).and_return(@story_runner)
-          @runner_module.stub!(:scenario_runner).and_return(@scenario_runner)
-        end
-
-        it 'should add a reporter to the runner classes' do
-          @runner_module.should_receive(:run_options).and_return(
-            create_options
-          )
-        
-          # expect
-          @world_creator.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter))
-          @story_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter))
-          @scenario_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter))
-        
-          # when
-          @runner_module.story_runner
-        end
-      
-        it 'should add a documenter to the runner classes if one is specified' do
-        
-          @runner_module.should_receive(:run_options).and_return(
-            create_options(["--format","html"])
-          )
-
-          # expect
-          @world_creator.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter))
-          @story_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter))
-          @scenario_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter))
-        
-          # when
-          @runner_module.story_runner
-        end
-      
-        it 'should add any registered listener to the runner classes' do
-          # given
-          listener = Object.new
-        
-          # expect
-          @world_creator.should_receive(:add_listener).with(listener)
-          @story_runner.should_receive(:add_listener).with(listener)
-          @scenario_runner.should_receive(:add_listener).with(listener)
-        
-          # when
-          @runner_module.register_listener listener
-        end
-      end
-      end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/scenario_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/scenario_spec.rb
deleted file mode 100644
index 81acda6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/scenario_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
-  module Story
-    describe Scenario do
-      it 'should not raise an error if no body is supplied' do
-        # given
-        story = StoryBuilder.new.to_story
-        
-        # when
-        error = exception_from { Scenario.new story, 'name' }
-        
-        # then
-        error.should be_nil
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_group_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_group_spec.rb
deleted file mode 100644
index dd28bfa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_group_spec.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
-  module Story
-    describe StepGroup do
-      before(:each) do
-        @step_group = StepGroup.new
-      end
-      
-      it "should not find a matcher if empty" do
-        @step_group.find(:given, "this and that").should be_nil
-      end
-      
-      it "should create a given_scenario matcher" do
-        step = @step_group.given_scenario("this and that") {}
-        @step_group.find(:given_scenario, "this and that").should_not be_nil
-        @step_group.find(:given_scenario, "this and that").should equal(step)
-      end
-      
-      it "should create a given matcher" do
-        step = @step_group.given("this and that") {}
-        @step_group.find(:given, "this and that").should equal(step)
-      end
-      
-      it "should create a when matcher" do
-        step = @step_group.when("this and that") {}
-        @step_group.find(:when, "this and that").should equal(step)
-      end
-      
-      it "should create a them matcher" do
-        step = @step_group.then("this and that") {}
-        @step_group.find(:then, "this and that").should equal(step)
-      end
-      
-      it "should add a matcher object" do
-        step = Step.new("this and that") {}
-        @step_group.add(:given, step)
-        @step_group.find(:given, "this and that").should equal(step)
-      end
-      
-      it "should add it matchers to another StepGroup (with one given)" do
-        source = StepGroup.new
-        target = StepGroup.new
-        step = source.given("this and that") {}
-        source.add_to target
-        target.find(:given, "this and that").should equal(step)
-      end
-      
-      it "should add it matchers to another StepGroup (with some of each type)" do
-        source = StepGroup.new
-        target = StepGroup.new
-        given_scenario = source.given_scenario("1") {}
-        given = source.given("1") {}
-        when1 = source.when("1") {}
-        when2 = source.when("2") {}
-        then1 = source.then("1") {}
-        then2 = source.then("2") {}
-        then3 = source.then("3") {}
-        source.add_to target
-        target.find(:given_scenario, "1").should equal(given_scenario)
-        target.find(:given, "1").should equal(given)
-        target.find(:when, "1").should equal(when1)
-        target.find(:when, "2").should equal(when2)
-        target.find(:then, "1").should equal(then1)
-        target.find(:then, "2").should equal(then2)
-        target.find(:then, "3").should equal(then3)
-      end
-      
-      it "should append another collection" do
-        matchers_to_append = StepGroup.new
-        step = matchers_to_append.given("this and that") {}
-        @step_group << matchers_to_append
-        @step_group.find(:given, "this and that").should equal(step)
-      end
-      
-      it "should append several other collections" do
-        matchers_to_append = StepGroup.new
-        more_matchers_to_append = StepGroup.new
-        first_matcher = matchers_to_append.given("this and that") {}
-        second_matcher = more_matchers_to_append.given("and the other") {}
-        @step_group << matchers_to_append
-        @step_group << more_matchers_to_append
-        @step_group.find(:given, "this and that").should equal(first_matcher)
-        @step_group.find(:given, "and the other").should equal(second_matcher)
-      end
-      
-      it "should yield itself on initialization" do
-        begin
-          $step_group_spec_step = nil
-          matchers = StepGroup.new do |matchers|
-            $step_group_spec_step = matchers.given("foo") {}
-          end
-          $step_group_spec_step.matches?("foo").should be_true
-        ensure
-          $step_group_spec_step = nil
-        end
-      end
-      
-      it "should support defaults" do
-        class StepGroupSubclass < StepGroup
-          steps do |add|
-            add.given("foo") {}
-          end
-        end
-        StepGroupSubclass.new.find(:given, "foo").should_not be_nil
-      end
-      
-      it "should create a Given" do
-        sub = Class.new(StepGroup).new
-        step = sub.Given("foo") {}
-        sub.find(:given, "foo").should == step
-      end
-      
-      it "should create a When" do
-        sub = Class.new(StepGroup).new
-        step = sub.When("foo") {}
-        sub.find(:when, "foo").should == step
-      end
-      
-      it "should create a Then" do
-        sub = Class.new(StepGroup).new
-        step = sub.Then("foo") {}
-        sub.find(:then, "foo").should == step
-      end
-      
-      it "should create steps in a block" do
-        sub = Class.new(StepGroup).new do
-          Given("a given") {}
-          When("a when") {}
-          Then("a then") {}
-        end
-        sub.find(:given, "a given").should_not be_nil
-        sub.find(:when, "a when").should_not be_nil
-        sub.find(:then, "a then").should_not be_nil
-      end
-      
-      it "should clear itself" do
-        step = @step_group.given("this and that") {}
-        @step_group.clear
-        @step_group.find(:given, "this and that").should be_nil
-      end
-      
-      it "should tell you when it is empty" do
-        @step_group.should be_empty
-      end
-      
-      it "should tell you when it is not empty" do
-        @step_group.given("this and that") {}
-        @step_group.should_not be_empty
-      end
-      
-      it "should handle << nil" do
-        @step_group << nil
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_mother_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_mother_spec.rb
deleted file mode 100644
index 4663017..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_mother_spec.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
-  module Story
-    describe StepMother do
-      it 'should store a step by name and type' do
-        # given
-        step_mother = StepMother.new
-        step = Step.new("a given", &lambda {})
-        step_mother.store(:given, step)
-        
-        # when
-        found = step_mother.find(:given, "a given")
-        
-        # then
-        found.should == step
-      end
-      
-      it 'should NOT raise an error if a step is missing' do
-        # given
-        step_mother = StepMother.new
-        
-        # then
-        lambda do
-          # when
-          step_mother.find(:given, "doesn't exist")
-        end.should_not raise_error
-      end
-      
-      it "should create a default step which raises a pending error" do
-        # given
-        step_mother = StepMother.new
-        
-        # when
-        step = step_mother.find(:given, "doesn't exist")
-        
-        # then
-        step.should be_an_instance_of(Step)
-        
-        lambda do
-          step.perform(Object.new, "doesn't exist")
-        end.should raise_error(Spec::Example::ExamplePendingError, /Unimplemented/)
-      end
-      
-      it "should create a default step with it's name stripped" do
-        # given
-        step_mother = StepMother.new
-        
-        # when
-        step = step_mother.find(:given, "doesn't exist\n\n")
-        
-        # then
-        step.should be_an_instance_of(Step)
-        step.name.should == "doesn't exist"
-      end
-      
-      it 'should clear itself' do
-        # given
-        step_mother = StepMother.new
-        step = Step.new("a given") do end
-        step_mother.store(:given, step)
-
-        # when
-        step_mother.clear
-        
-        # then
-        step_mother.should be_empty
-      end
-      
-      it "should use assigned steps" do
-        step_mother = StepMother.new
-        
-        step = Step.new('step') {}
-        step_group = StepGroup.new
-        step_group.add(:given, step)
-        
-        step_mother.use(step_group)
-                
-        step_mother.find(:given, "step").should equal(step)
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_spec.rb
deleted file mode 100644
index cc54a1f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/step_spec.rb
+++ /dev/null
@@ -1,272 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
-  module Story
-    describe Step, "#matching" do
-      it "should match a text string" do
-        step = Step.new("this text") {}
-        step.matches?("this text").should be_true
-      end
-      
-      it "should match a text string that has additional line returns" do
-        step = Step.new("this text") {}
-        step.matches?("this text\n\n").should be_true
-      end
-      
-      it "should not match a text string that does not start the same" do
-        step = Step.new("this text") {}
-        step.matches?("Xthis text").should be_false
-      end
-      
-      it "should not match a text string that does not end the same" do
-        step = Step.new("this text") {}
-        step.matches?("this textX").should be_false
-      end
-      
-      it "should match a text string with a param" do
-        step = Step.new("this $param text") {}
-        step.matches?("this anything text").should be_true
-      end
-      
-      it "should not be greedy" do
-        step = Step.new("enter $value for $key") {}
-        step.parse_args("enter 3 for keys for a piano").should == ['3','keys for a piano']
-      end
-      
-      it "should match a text string with 3 params" do
-        step = Step.new("1 $one 2 $two 3 $three 4") {}
-        step.matches?("1 a 2 b 3 c 4").should be_true
-      end
-
-      it "should match a text string with two params sharing a prefix" do
-        step = Step.new("I am cool $n times out of $n_total")
-        step.matches?("I am cool 3 times out of 7").should be_true
-      end
-      
-      it "should match a text string with a param at the beginning" do
-        step = Step.new("$one 2 3") {}
-        step.matches?("a 2 3").should be_true
-      end
-      
-      it "should match a text string with a param at the end" do
-        step = Step.new("1 2 $three") {}
-        step.matches?("1 2 c").should be_true
-      end
-
-      it "should match a text string with a dollar sign ($)" do
-        step = Step.new("show me the $$money") {}
-        step.matches?("show me the $kwan").should be_true
-      end
-
-      it "should match a string with an escaped dollar sign" do
-        step = Step.new("show me the \$money") {}
-        step.matches?("show me the $kwan").should be_true
-      end
-      
-      it "should not match a different string" do
-        step = Step.new("this text") {}
-        step.matches?("other text").should be_false
-      end
-
-      it "should match a regexp" do
-        step = Step.new(/this text/) {}
-        step.matches?("this text").should be_true
-      end
-      
-      it "should match a regexp with a match group" do
-        step = Step.new(/this (.*) text/) {}
-        step.matches?("this anything text").should be_true
-      end
-      
-      it "should match a regexp with a named variable" do
-        step = Step.new(/this $variable text/) {}
-        step.matches?("this anything text").should be_true
-      end
-      
-      it "should not match a non matching regexp" do
-        step = Step.new(/this (.*) text/) {}
-        step.matches?("other anything text").should be_false
-      end
-      
-      it "should not match a non matching regexp with a named variable" do
-        step = Step.new(/this $variable text/) {}
-        step.matches?("other anything text").should be_false
-      end
-      
-      it "should not get bogged down by parens in strings" do
-        step = Step.new("before () after") {}
-        step.matches?("before () after").should be_true
-      end
-      
-      it "should not get bogged down by regular expression special characters in strings" do
-        step = Step.new("These characters should work ? ( ) [ ] { } ^ !") {}
-        step.matches?("These characters should work ? ( ) [ ] { } ^ !").should be_true
-      end
-      
-      it "should match any option of an alteration" do
-        step = Step.new(/(he|she) is cool/) {}
-        step.matches?("he is cool").should be_true
-        step.matches?("she is cool").should be_true
-      end
-      
-      it "should match alteration as well as a variable" do
-        step = Step.new(/(he|she) is (.*)/) {}
-        step.matches?("he is cool").should be_true
-        step.parse_args("he is cool").should == ['he', 'cool']
-      end
-      
-      it "should match alteration as well as a named variable" do
-        step = Step.new(/(he|she) is $adjective/) {}
-        step.matches?("he is cool").should be_true
-        step.parse_args("he is cool").should == ['he', 'cool']
-      end
-      
-      it "should match alteration as well as a anonymous and named variable" do
-        step = Step.new(/(he|she) is (.*?) $adjective/) {}
-        step.matches?("he is very cool").should be_true
-        step.parse_args("he is very cool").should == ['he', 'very', 'cool']
-      end
-
-      it "should match a regex with a dollar sign ($)" do
-        step = Step.new(/show me the \$\d+/) {}
-        step.matches?("show me the $123").should be_true
-      end
-
-      it "should match a regex with a dollar sign and named variable" do
-        step = Step.new(/show me the \$$money/) {}
-        step.matches?("show me the $123").should be_true
-      end
-      
-      it "should match a multiline regex" do
-        step = Step.new(/.*should have text.$text/) {}
-        step.matches?(<<TEXT).should be_true
-          should have text
-          this is the text
-          and so is this
-TEXT
-      end
-      
-      it "should match the beginning of the string, not the line" do
-        step = Step.new(/should have text/) {}
-        step.matches?(<<TEXT).should be_false
-whatever
-should have text
-TEXT
-      end
-
-      it "should match the end of the string, not the line" do
-        step = Step.new(/should have text/) {}
-        step.matches?(<<TEXT).should be_false
-should have text
-whatever
-TEXT
-      end
-    end
-    
-    describe Step, "#parse_args" do
-      it "should return an empty array for a text string with no parameters" do
-        step = Step.new("this text") {}
-        step.parse_args("this text").should == []
-      end
-      
-      it "should return an empty array for a text string with additional line returns and no parameters" do
-        step = Step.new("this text") {}
-        step.parse_args("this text\n\n").should == []
-      end
-    end
-    
-    describe Step do
-      it "should be pending with no block" do
-        step = Step.new("foo")
-        lambda {
-          step.perform(Object.new)
-        }.should raise_error(Spec::Example::ExamplePendingError, "Not Yet Implemented")
-      end
-      
-      it "should perform itself on an object" do
-        # given
-        $instance = nil
-        step = Step.new 'step' do
-          $instance = self
-        end
-        instance = Object.new
-        
-        # when
-        step.perform(instance, "step")
-        
-        # then
-        $instance.should == instance
-      end
-      
-      it "should perform itself with one parameter with match expression" do
-        # given
-        $result = nil
-        step = Step.new 'an account with $count dollars' do |count|
-          $result = count
-        end
-        instance = Object.new
-        
-        # when
-        args = step.parse_args("an account with 3 dollars")
-        step.perform(instance, *args)
-        
-        # then
-        $result.should == "3"
-      end
-      
-      it "should perform itself with one parameter without a match expression" do
-        # given
-        $result = nil
-        step = Step.new 'an account with a balance of' do |amount|
-          $result = amount
-        end
-        instance = Object.new
-        
-        # when
-        step.perform(instance, 20)
-        
-        # then
-        $result.should == 20
-      end
-      
-      it "should perform itself with 2 parameters" do
-        # given
-        $account_type = nil
-        $amount = nil
-        step = Step.new 'a $account_type account with $amount dollars' do |account_type, amount|
-          $account_type = account_type
-          $amount = amount
-        end
-        instance = Object.new
-        
-        # when
-        args = step.parse_args("a savings account with 3 dollars")
-        step.perform(instance, *args)
-        
-        # then
-        $account_type.should == "savings"
-        $amount.should == "3"
-      end
-
-      it "should perform itself when defined with a regexp with 2 parameters" do
-        # given
-        $pronoun = nil
-        $adjective = nil
-        step = Step.new /(he|she) is (.*)/ do |pronoun, adjective|
-          $pronoun = pronoun
-          $adjective = adjective
-        end
-        instance = Object.new
-        
-        # when
-        args = step.parse_args("he is cool")
-        step.perform(instance, *args)
-        
-        # then
-        $pronoun.should == "he"
-        $adjective.should == "cool"
-      end
-
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/story_helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/story_helper.rb
deleted file mode 100644
index bb906f2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/story_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require File.dirname(__FILE__) + '/builders'
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/story_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/story_spec.rb
deleted file mode 100644
index cab76e5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/story_spec.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
-  module Story
-    describe Story do
-      it 'should run itself in a given object' do
-        # given
-        $instance = nil
-        story = Story.new 'title', 'narrative' do
-          $instance = self
-        end
-        object = Object.new
-        
-        # when
-        story.run_in(object)
-        
-        # then
-        $instance.should be(object)
-      end
-      
-      it 'should not raise an error if no block is supplied' do
-        # when
-        error = exception_from { Story.new 'title', 'narrative' }
-        
-        # then
-        error.should be_nil
-      end
-      
-      it "should raise an error when an error is raised running in another object" do
-        #given
-        story = Story.new 'title', 'narrative' do
-          raise "this is raised in the story"
-        end
-        object = Object.new
-        
-        # when/then
-        lambda do
-          story.run_in(object)
-        end.should raise_error
-      end
-      
-      it "should use the steps it is told to using a StepGroup" do
-        story = Story.new("title", "narrative", :steps_for => steps = StepGroup.new) do end
-        assignee = mock("assignee")
-        assignee.should_receive(:use).with(steps)
-        story.assign_steps_to(assignee)
-      end
-
-      it "should use the steps it is told to using a key" do
-        begin
-          orig_rspec_story_steps = $rspec_story_steps
-          $rspec_story_steps = StepGroupHash.new
-          $rspec_story_steps[:foo] = steps = Object.new
-        
-          story = Story.new("title", "narrative", :steps_for => :foo) do end
-          assignee = mock("assignee")
-        
-          assignee.should_receive(:use).with(steps)
-          story.assign_steps_to(assignee)
-        ensure
-          $rspec_story_steps = orig_rspec_story_steps
-        end
-      end
-      
-      it "should use the steps it is told to using multiple keys" do
-        begin
-          orig_rspec_story_steps = $rspec_story_steps
-          $rspec_story_steps = StepGroupHash.new
-          $rspec_story_steps[:foo] = foo_steps = Object.new
-          $rspec_story_steps[:bar] = bar_steps = Object.new
-        
-          story = Story.new("title", "narrative", :steps_for => [:foo, :bar]) do end
-          assignee = mock("assignee")
-        
-          assignee.should_receive(:use).with(foo_steps)
-          assignee.should_receive(:use).with(bar_steps)
-          story.assign_steps_to(assignee)
-        ensure
-          $rspec_story_steps = orig_rspec_story_steps
-        end
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/world_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/world_spec.rb
deleted file mode 100644
index cec5a3f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec/story/world_spec.rb
+++ /dev/null
@@ -1,423 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-require 'spec/story'
-
-module Spec
-  module Story
-    describe World do
-      before :each do
-        World.listeners.clear
-      end
-
-      after :each do
-        World.listeners.clear
-        World.step_mother.clear
-      end
-
-      it 'should create an object that mixes in a World' do
-        # when
-        obj = World::create
-
-        # then
-        obj.should be_kind_of(World)
-      end
-
-      it 'should create a World from any object type' do
-        # when
-        obj = World::create String
-
-        # then
-        obj.should be_kind_of(String)
-        obj.should be_kind_of(World)
-      end
-
-      it 'should pass arguments to #new when creating an object of a specified type that mixes in a world' do
-        # given
-        Thing = Struct.new(:name, :age)
-
-        # when
-        obj = World::create Thing, "David", "I'm not telling"
-
-        # then
-        obj.should be_an_instance_of(Thing)
-        obj.name.should == "David"
-        obj.age.should == "I'm not telling"
-        obj.should be_kind_of(World)
-      end
-
-      def ensure_world_executes_step(&block)
-        # given
-        obj = World::create
-        $step_ran = false
-
-        # when
-        obj.instance_eval(&block)
-
-        # then
-        $step_ran.should be_true
-      end
-
-      it 'should execute a Given, When or Then step' do
-        ensure_world_executes_step do
-          Given 'a given' do
-            $step_ran = true
-          end
-        end
-
-        ensure_world_executes_step do
-          When 'an event' do
-            $step_ran = true
-          end
-        end
-
-        ensure_world_executes_step do
-          Then 'an outcome' do
-            $step_ran = true
-          end
-        end
-      end
-
-      it 'should interpret Given... And... as multiple givens' do
-        # given
-        world = World.create
-        $steps = []
-
-        # when
-        world.instance_eval do
-          Given 'step 1' do
-            $steps << 1
-          end
-          And 'step 2' do
-            $steps << 2
-          end
-        end
-
-        # then
-        $steps.should == [1,2]
-        World.step_mother.find(:given, 'step 1').should_not be_nil
-        World.step_mother.find(:given, 'step 2').should_not be_nil
-      end
-
-      it 'should interpret When... And... as multiple events' do
-        # given
-        world = World.create
-        $steps = []
-
-        # when
-        world.instance_eval do
-          When 'step 1' do
-            $steps << 1
-          end
-          And 'step 2' do
-            $steps << 2
-          end
-        end
-
-        # then
-        $steps.should == [1,2]
-        World.step_mother.find(:when, 'step 1').should_not be_nil
-        World.step_mother.find(:when, 'step 2').should_not be_nil
-      end
-
-      it 'should interpret Then... And... as multiple outcomes' do
-        # given
-        world = World.create
-        $steps = []
-
-        # when
-        world.instance_eval do
-          Then 'step 1' do
-            $steps << 1
-          end
-          And 'step 2' do
-            $steps << 2
-          end
-        end
-
-        # then
-        $steps.should == [1,2]
-        World.step_mother.find(:then, 'step 1').should_not be_nil
-        World.step_mother.find(:then, 'step 2').should_not be_nil
-      end
-
-      it 'should reuse a given across scenarios' do
-        # given
-        $num_invoked = 0
-        a_world = World::create
-        a_world.instance_eval do
-          Given 'a given' do
-            $num_invoked += 1
-          end
-        end
-        another_world = World::create
-
-        # when
-        another_world.instance_eval do
-          Given 'a given' # without a body
-        end
-
-        # then
-        $num_invoked.should == 2
-      end
-
-      it 'should reuse an event across scenarios' do
-        # given
-        $num_invoked = 0
-        a_world = World::create
-        a_world.instance_eval do
-          When 'an event' do
-            $num_invoked += 1
-          end
-        end
-
-        another_world = World::create
-
-        # when
-        another_world.instance_eval do
-          When 'an event' # without a body
-        end
-
-        # then
-        $num_invoked.should == 2
-      end
-
-      it 'should reuse an outcome across scenarios' do
-        # given
-        $num_invoked = 0
-        a_world = World::create
-        a_world.instance_eval do
-          Then 'an outcome' do
-            $num_invoked += 1
-          end
-        end
-
-        another_world = World::create
-
-        # when
-        another_world.instance_eval do
-          Then 'an outcome' # without a body
-        end
-
-        # then
-        $num_invoked.should == 2
-      end
-
-      it 'should preserve instance variables between steps within a scenario' do
-        # given
-        world = World::create
-        $first = nil
-        $second = nil
-
-        # when
-        world.instance_eval do
-          Given 'given' do
-            @first = 'first'
-          end
-          When 'event' do
-            @second = @first # from given
-          end
-          Then 'outcome' do
-            $first = @first # from given
-            $second = @second # from event
-          end
-        end
-
-        # then
-        $first.should == 'first'
-        $second.should == 'first'
-      end
-
-      it 'should invoke a reused step in the new object instance' do
-        # given
-        $instances = []
-        $debug = true
-        world1 = World.create
-        world1.instance_eval do
-          Given 'a given' do
-            $instances << self.__id__
-          end
-        end
-        world2 = World.create
-
-        # when
-        world2.instance_eval do
-          Given 'a given' # reused
-          Then 'an outcome' do
-            $instances << __id__
-          end
-        end
-        $debug = false
-        # then
-        $instances.should == [ world1.__id__, world2.__id__, world2.__id__ ]
-      end
-
-      def ensure_world_collects_error(expected_error, &block)
-        # given
-        world = World.create
-        # $error = nil
-
-        # when
-        world.start_collecting_errors
-        world.instance_eval(&block)
-
-        # then
-        world.should have(1).errors
-        world.errors[0].should be_kind_of(expected_error)
-      end
-
-      it 'should collect a failure from a Given step' do
-        ensure_world_collects_error RuntimeError do
-          Given 'a given' do
-            raise RuntimeError, "oops"
-          end
-        end
-      end
-
-      it 'should collect a failure from a When step' do
-        ensure_world_collects_error RuntimeError do
-          When 'an event' do
-            raise RuntimeError, "oops"
-          end
-        end
-      end
-
-      it 'should collect a failure from a Then step' do
-        ensure_world_collects_error RuntimeError do
-          Then 'an outcome' do
-            raise RuntimeError, "oops"
-          end
-        end
-      end
-
-      it 'should inform listeners when it runs a Given, When or Then step' do
-        # given
-        world = World.create
-        mock_listener1 = mock('listener1')
-        mock_listener2 = mock('listener2')
-        World.add_listener(mock_listener1)
-        World.add_listener(mock_listener2)
-
-        # expect
-        mock_listener1.should_receive(:step_upcoming).with(:given, 'a context')
-        mock_listener1.should_receive(:step_succeeded).with(:given, 'a context')
-        mock_listener1.should_receive(:step_upcoming).with(:when, 'an event')
-        mock_listener1.should_receive(:step_succeeded).with(:when, 'an event')
-        mock_listener1.should_receive(:step_upcoming).with(:then, 'an outcome')
-        mock_listener1.should_receive(:step_succeeded).with(:then, 'an outcome')
-
-        mock_listener2.should_receive(:step_upcoming).with(:given, 'a context')
-        mock_listener2.should_receive(:step_succeeded).with(:given, 'a context')
-        mock_listener2.should_receive(:step_upcoming).with(:when, 'an event')
-        mock_listener2.should_receive(:step_succeeded).with(:when, 'an event')
-        mock_listener2.should_receive(:step_upcoming).with(:then, 'an outcome')
-        mock_listener2.should_receive(:step_succeeded).with(:then, 'an outcome')
-
-        # when
-        world.instance_eval do
-          Given 'a context' do end
-          When 'an event' do end
-          Then 'an outcome' do end
-        end
-
-        # then
-      end
-
-      it 'should tell listeners but not execute the step in dry-run mode' do
-        # given
-        World.stub!(:dry_run).and_return(true)
-        mock_listener = mock('listener')
-        World.add_listener(mock_listener)
-        $step_invoked = false
-        world = World.create
-
-        # expect
-        mock_listener.should_receive(:step_upcoming).with(:given, 'a context')
-        mock_listener.should_receive(:step_succeeded).with(:given, 'a context')
-
-        # when
-        world.instance_eval do
-          Given 'a context' do
-            $step_invoked = true
-          end
-        end
-
-        # then
-        $step_invoked.should be(false)
-      end
-
-      it 'should suppress listeners while it runs a GivenScenario' do
-        # given
-        scenario_ran = false
-
-        scenario = ScenarioBuilder.new.name('a scenario').to_scenario do
-          scenario_ran = true
-          Given 'given' do end
-          When 'event' do end
-          Then 'outcome' do end
-        end
-
-        given_scenario = GivenScenario.new('a scenario')
-        Runner::StoryRunner.should_receive(:scenario_from_current_story).
-          with('a scenario').and_return(scenario)
-
-        world = World.create
-        listener = mock('listener')
-        World.add_listener(listener)
-
-        # expect
-        listener.should_receive(:found_scenario).with(:'given scenario', 'a scenario')
-        listener.should_receive(:step_succeeded).never.with(:given, 'given')
-        listener.should_receive(:step_succeeded).never.with(:when, 'event')
-        listener.should_receive(:step_succeeded).never.with(:then, 'outcome')
-
-        # when
-        world.GivenScenario 'a scenario'
-
-        # then
-        scenario_ran.should be_true
-      end
-
-      it 'should interpret GivenScenario... And... as multiple givens' do
-        # given
-        world = World.create
-        steps = []
-
-        scenario = ScenarioBuilder.new.name('a scenario').to_scenario do
-          steps << 1
-        end
-        Runner::StoryRunner.should_receive(:scenario_from_current_story).
-          with('a scenario').and_return(scenario)
-
-        # when
-        world.instance_eval do
-          GivenScenario 'a scenario'
-          And 'step 2' do
-            steps << 2
-          end
-        end
-
-        # then
-        steps.should == [1,2]
-        World.step_mother.find(:given, 'step 2').should_not be_nil
-      end
-
-      it 'should provide rspec matchers' do
-        # given
-        world = World.create
-
-        # then
-        world.instance_eval do
-          'hello'.should match(/^hello$/)
-        end
-      end
-
-      it "should use assigned matchers" do
-        world = World.create
-
-        World.should_receive(:use).with(steps = Object.new)
-
-        World.use(steps)
-      end
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec_helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec_helper.rb
deleted file mode 100644
index 8e240a8..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/spec/spec_helper.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-require 'stringio'
-
-dir = File.dirname(__FILE__)
-lib_path = File.expand_path("#{dir}/../lib")
-$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
-$_spec_spec = true # Prevents Kernel.exit in various places
-
-require 'spec'
-require 'spec/mocks'
-require 'spec/story'
-spec_classes_path = File.expand_path("#{dir}/../spec/spec/spec_classes")
-require spec_classes_path unless $LOAD_PATH.include?(spec_classes_path)
-require File.dirname(__FILE__) + '/../lib/spec/expectations/differs/default'
-
-module Spec  
-  module Example
-    class NonStandardError < Exception; end
-  end
-
-  module Matchers
-    def fail
-      raise_error(Spec::Expectations::ExpectationNotMetError)
-    end
-
-    def fail_with(message)
-      raise_error(Spec::Expectations::ExpectationNotMetError, message)
-    end
-
-    def exception_from(&block)
-      exception = nil
-      begin
-        yield
-      rescue StandardError => e
-        exception = e
-      end
-      exception
-    end
-    
-    def run_with(options)
-      ::Spec::Runner::CommandLine.run(options)
-    end
-  end
-end
-
-def with_sandboxed_options
-  attr_reader :options
-  
-  before(:each) do
-    @original_rspec_options = ::Spec::Runner.options
-    ::Spec::Runner.use(@options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new))
-  end
-
-  after(:each) do
-    ::Spec::Runner.use(@original_rspec_options)
-  end
-  
-  yield
-end
-
-def with_sandboxed_config
-  attr_reader :config
-  
-  before(:each) do
-    @config = ::Spec::Example::Configuration.new
-    @original_configuration = ::Spec::Runner.configuration
-    spec_configuration = @config
-    ::Spec::Runner.instance_eval {@configuration = spec_configuration}
-  end
-  
-  after(:each) do
-    original_configuration = @original_configuration
-    ::Spec::Runner.instance_eval {@configuration = original_configuration}
-    ::Spec::Example::ExampleGroupFactory.reset
-  end
-  
-  yield
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/all.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/all.rb
deleted file mode 100644
index db79a1f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/all.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-
-%w[configuration example_groups interop mock_framework_integration stories].each do |dir|
-  require File.join(File.dirname(__FILE__), "#{dir}/stories")
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/configuration/before_blocks.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/configuration/before_blocks.story
deleted file mode 100644
index 5412a39..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/configuration/before_blocks.story
+++ /dev/null
@@ -1,21 +0,0 @@
-Story: before suite
-	As a developer using rspec
-	I want to define before blocks in the global configuration
-	So that I can define global things globally
-	
-	Scenario: running with ruby
-	
-		Given the file ../resources/spec/before_blocks_example.rb
-		
-    When I run it with the ruby interpreter
-
-		Then the stdout should match "3 examples, 0 failures"
-		
-	Scenario: running with spec
-
-		Given the file ../resources/spec/before_blocks_example.rb
-
-    When I run it with the spec script
-
-		Then the stdout should match "3 examples, 0 failures"
-					
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/configuration/stories.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/configuration/stories.rb
deleted file mode 100644
index e45882a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/configuration/stories.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[.. helper])
-
-with_steps_for :running_rspec do
-  Dir["#{File.dirname(__FILE__)}/*"].each do |file|
-    run file if File.file?(file) && !(file =~ /\.rb$/)
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/autogenerated_docstrings b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/autogenerated_docstrings
deleted file mode 100644
index b3ff689..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/autogenerated_docstrings
+++ /dev/null
@@ -1,45 +0,0 @@
-Story: autogenerated docstrings
-
-  As an RSpec user
-  I want examples to generate their own names
-  So that I can reduce duplication between example names and example code
-
-  Scenario: run passing examples with ruby
-    Given the file ../../examples/pure/autogenerated_docstrings_example.rb
-
-    When I run it with the ruby interpreter -fs
-
-    Then the stdout should match /should equal 5/
-    And the stdout should match /should be < 5/
-    And the stdout should match /should include "a"/
-    And the stdout should match /should respond to #size/
-
-  Scenario: run failing examples with ruby
-    Given the file ../../failing_examples/failing_autogenerated_docstrings_example.rb
-
-    When I run it with the ruby interpreter -fs
-
-    Then the stdout should match /should equal 2/
-    And the stdout should match /should be > 5/
-    And the stdout should match /should include "b"/
-    And the stdout should match /should not respond to #size/
-
-  Scenario: run passing examples with spec
-    Given the file ../../examples/pure/autogenerated_docstrings_example.rb
-
-    When I run it with the spec script -fs
-
-    Then the stdout should match /should equal 5/
-    And the stdout should match /should be < 5/
-    And the stdout should match /should include "a"/
-    And the stdout should match /should respond to #size/
-
-  Scenario: run failing examples with spec
-    Given the file ../../failing_examples/failing_autogenerated_docstrings_example.rb
-
-    When I run it with the spec script -fs
-
-    Then the stdout should match /should equal 2/
-    And the stdout should match /should be > 5/
-    And the stdout should match /should include "b"/
-    And the stdout should match /should not respond to #size/
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/example_group_with_should_methods b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/example_group_with_should_methods
deleted file mode 100644
index 3d2bc61..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/example_group_with_should_methods
+++ /dev/null
@@ -1,17 +0,0 @@
-Story: Spec::ExampleGroup with should methods
-
-  As an RSpec adopter accustomed to classes and methods
-  I want to use should_* methods in an ExampleGroup
-  So that I use RSpec with classes and methods that look more like RSpec examples
-
-  Scenario: Run with ruby
-    Given the file spec/example_group_with_should_methods.rb
-    When I run it with the ruby interpreter
-    Then the exit code should be 256
-    And the stdout should match "2 examples, 1 failure"
-
-  Scenario: Run with spec
-  Given the file spec/example_group_with_should_methods.rb
-    When I run it with the spec script
-    Then the exit code should be 256
-    And the stdout should match "2 examples, 1 failure"
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/nested_groups b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/nested_groups
deleted file mode 100644
index ede9785..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/nested_groups
+++ /dev/null
@@ -1,17 +0,0 @@
-Story: Nested example groups
-
-  As an RSpec user
-  I want to nest examples groups
-  So that I can better organize my examples
-
-  Scenario: Run with ruby
-    Given the file ../../examples/pure/stack_spec_with_nested_example_groups.rb
-    When I run it with the ruby interpreter -fs
-    Then the stdout should match /Stack \(empty\)/
-    And the stdout should match /Stack \(full\)/
-
-  Scenario: Run with ruby
-    Given the file ../../examples/pure/stack_spec_with_nested_example_groups.rb
-    When I run it with the spec script -fs
-    Then the stdout should match /Stack \(empty\)/
-    And the stdout should match /Stack \(full\)/
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/output b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/output
deleted file mode 100644
index 4947bdc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/output
+++ /dev/null
@@ -1,25 +0,0 @@
-Story: Getting correct output
-
-  As an RSpec user
-  I want to see output only once
-  So that I don't get confused
-
-  Scenario: Run with ruby
-    Given the file spec/simple_spec.rb
-    When I run it with the ruby interpreter
-    Then the exit code should be 0
-    And the stdout should not match /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/m
-    And the stdout should match "1 example, 0 failures"
-
-  Scenario: Run with CommandLine object
-    Given the file spec/simple_spec.rb
-    When I run it with the CommandLine object
-    Then the exit code should be 0
-    And the stdout should not match "Loaded suite"
-    And the stdout should not match /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/m
-    And the stdout should match "1 example, 0 failures"
-
-  Scenario: Tweak backtrace
-    Given the file stories/failing_story.rb
-    When I run it with the ruby interpreter
-    Then the stdout should not match /\/lib\/spec\//
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/stories.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/stories.rb
deleted file mode 100644
index e45882a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/example_groups/stories.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[.. helper])
-
-with_steps_for :running_rspec do
-  Dir["#{File.dirname(__FILE__)}/*"].each do |file|
-    run file if File.file?(file) && !(file =~ /\.rb$/)
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/helper.rb
deleted file mode 100644
index d9a105e..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-$LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../lib")
-require 'spec'
-require 'tempfile'
-require File.join(File.dirname(__FILE__), *%w[resources matchers smart_match])
-require File.join(File.dirname(__FILE__), *%w[resources helpers story_helper])
-require File.join(File.dirname(__FILE__), *%w[resources steps running_rspec])
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/examples_and_tests_together b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/examples_and_tests_together
deleted file mode 100644
index 6583f89..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/examples_and_tests_together
+++ /dev/null
@@ -1,30 +0,0 @@
-Story: Spec and test together
-
-  As an RSpec adopter with existing Test::Unit tests
-  I want to run a few specs alongside my existing Test::Unit tests
-  So that I can experience a smooth, gradual migration path
-
-  Scenario: Run with ruby
-    Given the file test/spec_and_test_together.rb
-
-    When I run it with the ruby interpreter -fs
-
-    Then the exit code should be 256
-    And the stdout should match "ATest"
-    And the stdout should match "Test::Unit::AssertionFailedError in 'An Example should fail with assert'"
-    And the stdout should match "'An Example should fail with should' FAILED"
-    And the stdout should match "10 examples, 6 failures"
-    And the stdout should match /expected: 40,\s*got: 4/m
-    And the stdout should match /expected: 50,\s*got: 5/m
-  Scenario: Run with spec
-    Given the file test/spec_and_test_together.rb
-
-    When I run it with the spec script -fs
-
-    Then the exit code should be 256
-    Ands the stdout should match "ATest"
-    And the stdout should match "Test::Unit::AssertionFailedError in 'An Example should fail with assert'"
-    And the stdout should match "'An Example should fail with should' FAILED"
-    And the stdout should match "10 examples, 6 failures"
-    And the stdout should match /expected: 40,\s*got: 4/m
-    And the stdout should match /expected: 50,\s*got: 5/m
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/stories.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/stories.rb
deleted file mode 100644
index e45882a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/stories.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[.. helper])
-
-with_steps_for :running_rspec do
-  Dir["#{File.dirname(__FILE__)}/*"].each do |file|
-    run file if File.file?(file) && !(file =~ /\.rb$/)
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/test_case_with_should_methods b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/test_case_with_should_methods
deleted file mode 100644
index d618c50..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/interop/test_case_with_should_methods
+++ /dev/null
@@ -1,17 +0,0 @@
-Story: Test::Unit::TestCase extended by rspec with should methods
-
-  As an RSpec adopter with existing Test::Unit tests
-  I want to use should_* methods in a Test::Unit::TestCase
-  So that I use RSpec with classes and methods that look more like RSpec examples
-
-  Scenario: Run with ruby
-    Given the file test/test_case_with_should_methods.rb
-    When I run it with the ruby interpreter
-    Then the exit code should be 256
-    And the stdout should match "5 examples, 3 failures"
-
-  Scenario: Run with spec
-    Given the file test/test_case_with_should_methods.rb
-    When I run it with the spec script
-    Then the exit code should be 256
-    And the stdout should match "5 examples, 3 failures"
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/mock_framework_integration/stories.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/mock_framework_integration/stories.rb
deleted file mode 100644
index e45882a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/mock_framework_integration/stories.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[.. helper])
-
-with_steps_for :running_rspec do
-  Dir["#{File.dirname(__FILE__)}/*"].each do |file|
-    run file if File.file?(file) && !(file =~ /\.rb$/)
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/mock_framework_integration/use_flexmock.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/mock_framework_integration/use_flexmock.story
deleted file mode 100644
index ba38001..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/mock_framework_integration/use_flexmock.story
+++ /dev/null
@@ -1,9 +0,0 @@
-Story: Getting correct output with flexmock
-
-  As an RSpec user who prefers flexmock
-  I want to be able to use flexmock without rspec mocks interfering
-
-  Scenario: Mock with flexmock
-    Given the file spec/spec_with_flexmock.rb
-    When I run it with the ruby interpreter
-    Then the exit code should be 0
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/pending_stories/README b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/pending_stories/README
deleted file mode 100644
index 2f9b443..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/pending_stories/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory contains stories that are currently not passing
-because they are new or they represent regressions.
-
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/helpers/cmdline.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/helpers/cmdline.rb
deleted file mode 100644
index ab86bd3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/helpers/cmdline.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-
-# Uncommenting next line will break the output story (no output!!)
-# rspec_options
-options = Spec::Runner::OptionParser.parse(
-  ARGV, $stderr, $stdout
-)
-Spec::Runner::CommandLine.run(options)
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/helpers/story_helper.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/helpers/story_helper.rb
deleted file mode 100644
index e0aef5b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/helpers/story_helper.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require 'spec/story'
-require File.dirname(__FILE__) + '/../../../spec/ruby_forker'
-
-module StoryHelper
-  include RubyForker
-
-  def spec(args, stderr)
-    ruby("#{File.dirname(__FILE__) + '/../../../bin/spec'} #{args}", stderr)
-  end
-
-  def cmdline(args, stderr)
-    ruby("#{File.dirname(__FILE__) + '/../../resources/helpers/cmdline.rb'} #{args}", stderr)
-  end
-  
-  Spec::Story::World.send :include, self
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/matchers/smart_match.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/matchers/smart_match.rb
deleted file mode 100644
index 7b1672b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/matchers/smart_match.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Spec
-  module Matchers
-    class SmartMatch
-      def initialize(expected)
-        @expected = expected
-      end
-
-      def matches?(actual)
-        @actual = actual
-        # Satisfy expectation here. Return false or raise an error if it's not met.
-
-        if @expected =~ /^\/.*\/?$/ || @expected =~ /^".*"$/
-          regex_or_string = eval(@expected)
-          if Regexp === regex_or_string
-            (@actual =~ regex_or_string) ? true : false
-          else
-            @actual.index(regex_or_string) != nil
-          end
-        else
-          false
-        end
-      end
-
-      def failure_message
-        "expected #{@actual.inspect} to smart_match #{@expected.inspect}, but it didn't"
-      end
-
-      def negative_failure_message
-        "expected #{@actual.inspect} not to smart_match #{@expected.inspect}, but it did"
-      end
-    end
-
-    def smart_match(expected)
-      SmartMatch.new(expected)
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/before_blocks_example.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/before_blocks_example.rb
deleted file mode 100644
index aa73e85..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/before_blocks_example.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-$:.unshift File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-
-Spec::Runner.configure do |config|
-  config.before(:suite) do
-    $before_suite = "before suite"
-  end
-  config.before(:each) do
-    @before_each = "before each"
-  end
-  config.before(:all) do
-    @before_all = "before all"
-  end
-end
-
-describe "stuff in before blocks" do
-  describe "with :suite" do
-    it "should be available in the example" do
-      $before_suite.should == "before suite"
-    end
-  end
-  describe "with :all" do
-    it "should be available in the example" do
-      @before_all.should == "before all"
-    end
-  end
-  describe "with :each" do
-    it "should be available in the example" do
-      @before_each.should == "before each"
-    end
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/example_group_with_should_methods.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/example_group_with_should_methods.rb
deleted file mode 100644
index 4c0505d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/example_group_with_should_methods.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-
-class MySpec < Spec::ExampleGroup
-  def should_pass_with_should
-    1.should == 1
-  end
-
-  def should_fail_with_should
-    1.should == 2
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/simple_spec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/simple_spec.rb
deleted file mode 100644
index 2fb67ba..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/simple_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-
-describe "Running an Example" do
-  it "should not output twice" do
-    true.should be_true
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/spec_with_flexmock.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/spec_with_flexmock.rb
deleted file mode 100644
index 629bef2..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/spec/spec_with_flexmock.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require "rubygems"
-require 'spec'
-
-Spec::Runner.configure do |config|
-  config.mock_with :flexmock
-end
-
-# This is to ensure that requiring spec/mocks/framework doesn't interfere w/ flexmock
-require 'spec/mocks/framework'
-
-describe "something" do
-  it "should receive some message" do
-    target = Object.new
-    flexmock(target).should_receive(:foo).once
-    lambda {flexmock_verify}.should raise_error
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/steps/running_rspec.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/steps/running_rspec.rb
deleted file mode 100644
index 496847f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/steps/running_rspec.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-steps_for :running_rspec do
-
-  Given("the file $relative_path") do |relative_path|
-    @path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "resources", relative_path))
-    unless File.exist?(@path)
-      raise "could not find file at #{@path}"
-    end
-  end
-  
-  When("I run it with the $interpreter") do |interpreter|
-    stderr_file = Tempfile.new('rspec')
-    stderr_file.close
-    @stdout = case(interpreter)
-      when /^ruby interpreter/
-        args = interpreter.gsub('ruby interpreter','')
-        ruby("#{@path}#{args}", stderr_file.path)
-      when /^spec script/
-        args = interpreter.gsub('spec script','')
-        spec("#{@path}#{args}", stderr_file.path)
-      when 'CommandLine object' then cmdline(@path, stderr_file.path)
-      else raise "Unknown interpreter: #{interpreter}"
-    end
-    @stderr = IO.read(stderr_file.path)
-    @exit_code = $?.to_i
-  end
-  
-  Then("the exit code should be $exit_code") do |exit_code|
-    if @exit_code != exit_code.to_i
-      raise "Did not exit with #{exit_code}, but with #{@exit_code}. Standard error:\n#{@stderr}"
-    end
-  end
-  
-  Then("the $stream should match $regex") do |stream, string_or_regex|
-    written = case(stream)
-      when 'stdout' then @stdout
-      when 'stderr' then @stderr
-      else raise "Unknown stream: #{stream}"
-    end
-    written.should smart_match(string_or_regex)
-  end
-  
-  Then("the $stream should not match $regex") do |stream, string_or_regex|
-    written = case(stream)
-      when 'stdout' then @stdout
-      when 'stderr' then @stderr
-      else raise "Unknown stream: #{stream}"
-    end
-    written.should_not smart_match(string_or_regex)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/stories/failing_story.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/stories/failing_story.rb
deleted file mode 100644
index cc9506c..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/stories/failing_story.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-
-require 'spec/story'
-
-Story "Failing story",
-%(As an RSpec user
-  I want a failing test
-  So that I can observe the output) do
-
-  Scenario "Failing scenario" do
-    Then "true should be false" do
-      true.should == false
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/test/spec_and_test_together.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/test/spec_and_test_together.rb
deleted file mode 100644
index eb2b4e0..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/test/spec_and_test_together.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-# TODO - this should not be necessary, ay?
-require 'spec/interop/test'
-
-describe "An Example" do
-  it "should pass with assert" do
-    assert true
-  end
-
-  it "should fail with assert" do
-    assert false
-  end
-
-  it "should pass with should" do
-    1.should == 1
-  end
-
-  it "should fail with should" do
-    1.should == 2
-  end
-end
-
-class ATest < Test::Unit::TestCase
-  def test_should_pass_with_assert
-    assert true
-  end
-  
-  def test_should_fail_with_assert
-    assert false
-  end
-
-  def test_should_pass_with_should
-    1.should == 1
-  end
-  
-  def test_should_fail_with_should
-    1.should == 2
-  end
-
-  def setup
-    @from_setup ||= 3
-    @from_setup += 1
-  end
-
-  def test_should_fail_with_setup_method_variable
-    @from_setup.should == 40
-  end
-
-  before do
-    @from_before = @from_setup + 1
-  end
-
-  def test_should_fail_with_before_block_variable
-    @from_before.should == 50
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/test/test_case_with_should_methods.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/test/test_case_with_should_methods.rb
deleted file mode 100644
index 3912429..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/resources/test/test_case_with_should_methods.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'test/unit'
-require 'spec'
-require 'spec/interop/test'
-
-class MySpec < Test::Unit::TestCase
-  def should_pass_with_should
-    1.should == 1
-  end
-
-  def should_fail_with_should
-    1.should == 2
-  end
-
-  def should_pass_with_assert
-    assert true
-  end
-  
-  def should_fail_with_assert
-    assert false
-  end
-
-  def test
-    raise "This is not a real test"
-  end
-
-  def test_ify
-    raise "This is a real test"
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/multiline_steps.story b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/multiline_steps.story
deleted file mode 100644
index fa804d1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/multiline_steps.story
+++ /dev/null
@@ -1,23 +0,0 @@
-Story: multiline steps in plain text stories
-
-	As a plain text story writer
-	I want to write steps with multiline arguments
-	
-	Scenario: two lines
-	
-		Given I have a two line step with this text:
-		  This is the first line
-			# This, by the way, is just a comment
-			plus this is the second line
-
-			# This, by the way, is just a comment
-			
-		When I have a When with the same two lines:
-		  This is the first line
-			plus this is the second line
-			
-		Then it should match:
- 	  	This is the first line
-			plus this is the second line
-			
-			# And here is another comment
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/steps/multiline_steps.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/steps/multiline_steps.rb
deleted file mode 100644
index b68ad47..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/steps/multiline_steps.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-steps_for :multiline_steps do
-  Given "I have a two line step with this text:$text" do |text|
-    @text = text
-  end
-
-  When "I have a When with the same two lines:$text" do |text|
-    text.should == @text
-  end
-
-  Then "it should match:$text" do |text|
-    text.should == @text
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/stories.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/stories.rb
deleted file mode 100644
index 7a08316..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/stories/stories/stories.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[.. helper])
-require File.join(File.dirname(__FILE__), *%w[steps multiline_steps])
-
-with_steps_for :multiline_steps do
-  run File.dirname(__FILE__) + "/multiline_steps.story"
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/builder.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/builder.js
deleted file mode 100644
index 301087d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/builder.js
+++ /dev/null
@@ -1,136 +0,0 @@
-// script.aculo.us builder.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Builder = {
-  NODEMAP: {
-    AREA: 'map',
-    CAPTION: 'table',
-    COL: 'table',
-    COLGROUP: 'table',
-    LEGEND: 'fieldset',
-    OPTGROUP: 'select',
-    OPTION: 'select',
-    PARAM: 'object',
-    TBODY: 'table',
-    TD: 'table',
-    TFOOT: 'table',
-    TH: 'table',
-    THEAD: 'table',
-    TR: 'table'
-  },
-  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
-  //       due to a Firefox bug
-  node: function(elementName) {
-    elementName = elementName.toUpperCase();
-    
-    // try innerHTML approach
-    var parentTag = this.NODEMAP[elementName] || 'div';
-    var parentElement = document.createElement(parentTag);
-    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
-      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
-    } catch(e) {}
-    var element = parentElement.firstChild || null;
-      
-    // see if browser added wrapping tags
-    if(element && (element.tagName.toUpperCase() != elementName))
-      element = element.getElementsByTagName(elementName)[0];
-    
-    // fallback to createElement approach
-    if(!element) element = document.createElement(elementName);
-    
-    // abort if nothing could be created
-    if(!element) return;
-
-    // attributes (or text)
-    if(arguments[1])
-      if(this._isStringOrNumber(arguments[1]) ||
-        (arguments[1] instanceof Array) ||
-        arguments[1].tagName) {
-          this._children(element, arguments[1]);
-        } else {
-          var attrs = this._attributes(arguments[1]);
-          if(attrs.length) {
-            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
-              parentElement.innerHTML = "<" +elementName + " " +
-                attrs + "></" + elementName + ">";
-            } catch(e) {}
-            element = parentElement.firstChild || null;
-            // workaround firefox 1.0.X bug
-            if(!element) {
-              element = document.createElement(elementName);
-              for(attr in arguments[1]) 
-                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
-            }
-            if(element.tagName.toUpperCase() != elementName)
-              element = parentElement.getElementsByTagName(elementName)[0];
-          }
-        } 
-
-    // text, or array of children
-    if(arguments[2])
-      this._children(element, arguments[2]);
-
-     return element;
-  },
-  _text: function(text) {
-     return document.createTextNode(text);
-  },
-
-  ATTR_MAP: {
-    'className': 'class',
-    'htmlFor': 'for'
-  },
-
-  _attributes: function(attributes) {
-    var attrs = [];
-    for(attribute in attributes)
-      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
-          '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'"') + '"');
-    return attrs.join(" ");
-  },
-  _children: function(element, children) {
-    if(children.tagName) {
-      element.appendChild(children);
-      return;
-    }
-    if(typeof children=='object') { // array can hold nodes and text
-      children.flatten().each( function(e) {
-        if(typeof e=='object')
-          element.appendChild(e)
-        else
-          if(Builder._isStringOrNumber(e))
-            element.appendChild(Builder._text(e));
-      });
-    } else
-      if(Builder._isStringOrNumber(children))
-        element.appendChild(Builder._text(children));
-  },
-  _isStringOrNumber: function(param) {
-    return(typeof param=='string' || typeof param=='number');
-  },
-  build: function(html) {
-    var element = this.node('div');
-    $(element).update(html.strip());
-    return element.down();
-  },
-  dump: function(scope) { 
-    if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope 
-  
-    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
-      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
-      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
-      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
-      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
-      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
-  
-    tags.each( function(tag){ 
-      scope[tag] = function() { 
-        return Builder.node.apply(Builder, [tag].concat($A(arguments)));  
-      } 
-    });
-  }
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/controls.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/controls.js
deleted file mode 100644
index 9cbeae9..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/controls.js
+++ /dev/null
@@ -1,972 +0,0 @@
-// script.aculo.us controls.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
-// Contributors:
-//  Richard Livsey
-//  Rahul Bhargava
-//  Rob Wills
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// Autocompleter.Base handles all the autocompletion functionality 
-// that's independent of the data source for autocompletion. This
-// includes drawing the autocompletion menu, observing keyboard
-// and mouse events, and similar.
-//
-// Specific autocompleters need to provide, at the very least, 
-// a getUpdatedChoices function that will be invoked every time
-// the text inside the monitored textbox changes. This method 
-// should get the text for which to provide autocompletion by
-// invoking this.getToken(), NOT by directly accessing
-// this.element.value. This is to allow incremental tokenized
-// autocompletion. Specific auto-completion logic (AJAX, etc)
-// belongs in getUpdatedChoices.
-//
-// Tokenized incremental autocompletion is enabled automatically
-// when an autocompleter is instantiated with the 'tokens' option
-// in the options parameter, e.g.:
-// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
-// will incrementally autocomplete with a comma as the token.
-// Additionally, ',' in the above example can be replaced with
-// a token array, e.g. { tokens: [',', '\n'] } which
-// enables autocompletion on multiple tokens. This is most 
-// useful when one of the tokens is \n (a newline), as it 
-// allows smart autocompletion after linebreaks.
-//
-// vim:expandtab ts=8 sw=2
-
-if(typeof Effect == 'undefined')
-  throw("controls.js requires including script.aculo.us' effects.js library");
-
-var Autocompleter = { }
-Autocompleter.Base = function() { };
-Autocompleter.Base.prototype = {
-  baseInitialize: function(element, update, options) {
-    element          = $(element)
-    this.element     = element; 
-    this.update      = $(update);  
-    this.hasFocus    = false; 
-    this.changed     = false; 
-    this.active      = false; 
-    this.index       = 0;     
-    this.entryCount  = 0;
-    this.oldElementValue = this.element.value;
-
-    if(this.setOptions)
-      this.setOptions(options);
-    else
-      this.options = options || { };
-
-    this.options.paramName    = this.options.paramName || this.element.name;
-    this.options.tokens       = this.options.tokens || [];
-    this.options.frequency    = this.options.frequency || 0.4;
-    this.options.minChars     = this.options.minChars || 1;
-    this.options.onShow       = this.options.onShow || 
-      function(element, update){ 
-        if(!update.style.position || update.style.position=='absolute') {
-          update.style.position = 'absolute';
-          Position.clone(element, update, {
-            setHeight: false, 
-            offsetTop: element.offsetHeight
-          });
-        }
-        Effect.Appear(update,{duration:0.15});
-      };
-    this.options.onHide = this.options.onHide || 
-      function(element, update){ new Effect.Fade(update,{duration:0.15}) };
-
-    if(typeof(this.options.tokens) == 'string') 
-      this.options.tokens = new Array(this.options.tokens);
-    // Force carriage returns as token delimiters anyway
-    if (!this.options.tokens.include('\n'))
-      this.options.tokens.push('\n');
-
-    this.observer = null;
-    
-    this.element.setAttribute('autocomplete','off');
-
-    Element.hide(this.update);
-
-    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
-    Event.observe(this.element, 'keypress', this.onKeyPress.bindAsEventListener(this));
-  },
-
-  show: function() {
-    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
-    if(!this.iefix && 
-      (Prototype.Browser.IE) &&
-      (Element.getStyle(this.update, 'position')=='absolute')) {
-      new Insertion.After(this.update, 
-       '<iframe id="' + this.update.id + '_iefix" '+
-       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
-       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
-      this.iefix = $(this.update.id+'_iefix');
-    }
-    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
-  },
-  
-  fixIEOverlapping: function() {
-    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
-    this.iefix.style.zIndex = 1;
-    this.update.style.zIndex = 2;
-    Element.show(this.iefix);
-  },
-
-  hide: function() {
-    this.stopIndicator();
-    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
-    if(this.iefix) Element.hide(this.iefix);
-  },
-
-  startIndicator: function() {
-    if(this.options.indicator) Element.show(this.options.indicator);
-  },
-
-  stopIndicator: function() {
-    if(this.options.indicator) Element.hide(this.options.indicator);
-  },
-
-  onKeyPress: function(event) {
-    if(this.active)
-      switch(event.keyCode) {
-       case Event.KEY_TAB:
-       case Event.KEY_RETURN:
-         this.selectEntry();
-         Event.stop(event);
-       case Event.KEY_ESC:
-         this.hide();
-         this.active = false;
-         Event.stop(event);
-         return;
-       case Event.KEY_LEFT:
-       case Event.KEY_RIGHT:
-         return;
-       case Event.KEY_UP:
-         this.markPrevious();
-         this.render();
-         if(Prototype.Browser.WebKit) Event.stop(event);
-         return;
-       case Event.KEY_DOWN:
-         this.markNext();
-         this.render();
-         if(Prototype.Browser.WebKit) Event.stop(event);
-         return;
-      }
-     else 
-       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || 
-         (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
-
-    this.changed = true;
-    this.hasFocus = true;
-
-    if(this.observer) clearTimeout(this.observer);
-      this.observer = 
-        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
-  },
-
-  activate: function() {
-    this.changed = false;
-    this.hasFocus = true;
-    this.getUpdatedChoices();
-  },
-
-  onHover: function(event) {
-    var element = Event.findElement(event, 'LI');
-    if(this.index != element.autocompleteIndex) 
-    {
-        this.index = element.autocompleteIndex;
-        this.render();
-    }
-    Event.stop(event);
-  },
-  
-  onClick: function(event) {
-    var element = Event.findElement(event, 'LI');
-    this.index = element.autocompleteIndex;
-    this.selectEntry();
-    this.hide();
-  },
-  
-  onBlur: function(event) {
-    // needed to make click events working
-    setTimeout(this.hide.bind(this), 250);
-    this.hasFocus = false;
-    this.active = false;     
-  }, 
-  
-  render: function() {
-    if(this.entryCount > 0) {
-      for (var i = 0; i < this.entryCount; i++)
-        this.index==i ? 
-          Element.addClassName(this.getEntry(i),"selected") : 
-          Element.removeClassName(this.getEntry(i),"selected");
-      if(this.hasFocus) { 
-        this.show();
-        this.active = true;
-      }
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-  
-  markPrevious: function() {
-    if(this.index > 0) this.index--
-      else this.index = this.entryCount-1;
-    this.getEntry(this.index).scrollIntoView(true);
-  },
-  
-  markNext: function() {
-    if(this.index < this.entryCount-1) this.index++
-      else this.index = 0;
-    this.getEntry(this.index).scrollIntoView(false);
-  },
-  
-  getEntry: function(index) {
-    return this.update.firstChild.childNodes[index];
-  },
-  
-  getCurrentEntry: function() {
-    return this.getEntry(this.index);
-  },
-  
-  selectEntry: function() {
-    this.active = false;
-    this.updateElement(this.getCurrentEntry());
-  },
-
-  updateElement: function(selectedElement) {
-    if (this.options.updateElement) {
-      this.options.updateElement(selectedElement);
-      return;
-    }
-    var value = '';
-    if (this.options.select) {
-      var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
-      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
-    } else
-      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
-    
-    var bounds = this.getTokenBounds();
-    if (bounds[0] != -1) {
-      var newValue = this.element.value.substr(0, bounds[0]);
-      var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
-      if (whitespace)
-        newValue += whitespace[0];
-      this.element.value = newValue + value + this.element.value.substr(bounds[1]);
-    } else {
-      this.element.value = value;
-    }
-    this.oldElementValue = this.element.value;
-    this.element.focus();
-    
-    if (this.options.afterUpdateElement)
-      this.options.afterUpdateElement(this.element, selectedElement);
-  },
-
-  updateChoices: function(choices) {
-    if(!this.changed && this.hasFocus) {
-      this.update.innerHTML = choices;
-      Element.cleanWhitespace(this.update);
-      Element.cleanWhitespace(this.update.down());
-
-      if(this.update.firstChild && this.update.down().childNodes) {
-        this.entryCount = 
-          this.update.down().childNodes.length;
-        for (var i = 0; i < this.entryCount; i++) {
-          var entry = this.getEntry(i);
-          entry.autocompleteIndex = i;
-          this.addObservers(entry);
-        }
-      } else { 
-        this.entryCount = 0;
-      }
-
-      this.stopIndicator();
-      this.index = 0;
-      
-      if(this.entryCount==1 && this.options.autoSelect) {
-        this.selectEntry();
-        this.hide();
-      } else {
-        this.render();
-      }
-    }
-  },
-
-  addObservers: function(element) {
-    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
-    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
-  },
-
-  onObserverEvent: function() {
-    this.changed = false;   
-    this.tokenBounds = null;
-    if(this.getToken().length>=this.options.minChars) {
-      this.getUpdatedChoices();
-    } else {
-      this.active = false;
-      this.hide();
-    }
-    this.oldElementValue = this.element.value;
-  },
-
-  getToken: function() {
-    var bounds = this.getTokenBounds();
-    return this.element.value.substring(bounds[0], bounds[1]).strip();
-  },
-
-  getTokenBounds: function() {
-    if (null != this.tokenBounds) return this.tokenBounds;
-    var value = this.element.value;
-    if (value.strip().empty()) return [-1, 0];
-    var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
-    var offset = (diff == this.oldElementValue.length ? 1 : 0);
-    var prevTokenPos = -1, nextTokenPos = value.length;
-    var tp;
-    for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
-      tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
-      if (tp > prevTokenPos) prevTokenPos = tp;
-      tp = value.indexOf(this.options.tokens[index], diff + offset);
-      if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
-    }
-    return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
-  }
-}
-
-Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
-  var boundary = Math.min(newS.length, oldS.length);
-  for (var index = 0; index < boundary; ++index)
-    if (newS[index] != oldS[index])
-      return index;
-  return boundary;
-};
-
-Ajax.Autocompleter = Class.create();
-Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
-  initialize: function(element, update, url, options) {
-    this.baseInitialize(element, update, options);
-    this.options.asynchronous  = true;
-    this.options.onComplete    = this.onComplete.bind(this);
-    this.options.defaultParams = this.options.parameters || null;
-    this.url                   = url;
-  },
-
-  getUpdatedChoices: function() {
-    this.startIndicator();
-    
-    var entry = encodeURIComponent(this.options.paramName) + '=' + 
-      encodeURIComponent(this.getToken());
-
-    this.options.parameters = this.options.callback ?
-      this.options.callback(this.element, entry) : entry;
-
-    if(this.options.defaultParams) 
-      this.options.parameters += '&' + this.options.defaultParams;
-    
-    new Ajax.Request(this.url, this.options);
-  },
-
-  onComplete: function(request) {
-    this.updateChoices(request.responseText);
-  }
-
-});
-
-// The local array autocompleter. Used when you'd prefer to
-// inject an array of autocompletion options into the page, rather
-// than sending out Ajax queries, which can be quite slow sometimes.
-//
-// The constructor takes four parameters. The first two are, as usual,
-// the id of the monitored textbox, and id of the autocompletion menu.
-// The third is the array you want to autocomplete from, and the fourth
-// is the options block.
-//
-// Extra local autocompletion options:
-// - choices - How many autocompletion choices to offer
-//
-// - partialSearch - If false, the autocompleter will match entered
-//                    text only at the beginning of strings in the 
-//                    autocomplete array. Defaults to true, which will
-//                    match text at the beginning of any *word* in the
-//                    strings in the autocomplete array. If you want to
-//                    search anywhere in the string, additionally set
-//                    the option fullSearch to true (default: off).
-//
-// - fullSsearch - Search anywhere in autocomplete array strings.
-//
-// - partialChars - How many characters to enter before triggering
-//                   a partial match (unlike minChars, which defines
-//                   how many characters are required to do any match
-//                   at all). Defaults to 2.
-//
-// - ignoreCase - Whether to ignore case when autocompleting.
-//                 Defaults to true.
-//
-// It's possible to pass in a custom function as the 'selector' 
-// option, if you prefer to write your own autocompletion logic.
-// In that case, the other options above will not apply unless
-// you support them.
-
-Autocompleter.Local = Class.create();
-Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
-  initialize: function(element, update, array, options) {
-    this.baseInitialize(element, update, options);
-    this.options.array = array;
-  },
-
-  getUpdatedChoices: function() {
-    this.updateChoices(this.options.selector(this));
-  },
-
-  setOptions: function(options) {
-    this.options = Object.extend({
-      choices: 10,
-      partialSearch: true,
-      partialChars: 2,
-      ignoreCase: true,
-      fullSearch: false,
-      selector: function(instance) {
-        var ret       = []; // Beginning matches
-        var partial   = []; // Inside matches
-        var entry     = instance.getToken();
-        var count     = 0;
-
-        for (var i = 0; i < instance.options.array.length &&  
-          ret.length < instance.options.choices ; i++) { 
-
-          var elem = instance.options.array[i];
-          var foundPos = instance.options.ignoreCase ? 
-            elem.toLowerCase().indexOf(entry.toLowerCase()) : 
-            elem.indexOf(entry);
-
-          while (foundPos != -1) {
-            if (foundPos == 0 && elem.length != entry.length) { 
-              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + 
-                elem.substr(entry.length) + "</li>");
-              break;
-            } else if (entry.length >= instance.options.partialChars && 
-              instance.options.partialSearch && foundPos != -1) {
-              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
-                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
-                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
-                  foundPos + entry.length) + "</li>");
-                break;
-              }
-            }
-
-            foundPos = instance.options.ignoreCase ? 
-              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
-              elem.indexOf(entry, foundPos + 1);
-
-          }
-        }
-        if (partial.length)
-          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
-        return "<ul>" + ret.join('') + "</ul>";
-      }
-    }, options || { });
-  }
-});
-
-// AJAX in-place editor and collection editor
-// Full rewrite by Christophe Porteneuve <tdd at tddsworld.com> (April 2007).
-
-// Use this if you notice weird scrolling problems on some browsers,
-// the DOM might be a bit confused when this gets called so do this
-// waits 1 ms (with setTimeout) until it does the activation
-Field.scrollFreeActivate = function(field) {
-  setTimeout(function() {
-    Field.activate(field);
-  }, 1);
-}
-
-Ajax.InPlaceEditor = Class.create();
-Object.extend(Ajax.InPlaceEditor, {
-  DefaultOptions: {
-    ajaxOptions: { },
-    autoRows: 3,                                // Use when multi-line w/ rows == 1
-    cancelControl: 'link',                      // 'link'|'button'|false
-    cancelText: 'cancel',
-    clickToEditText: 'Click to edit',
-    externalControl: null,                      // id|elt
-    externalControlOnly: false,
-    fieldPostCreation: 'activate',              // 'activate'|'focus'|false
-    formClassName: 'inplaceeditor-form',
-    formId: null,                               // id|elt
-    highlightColor: '#ffff99',
-    highlightEndColor: '#ffffff',
-    hoverClassName: '',
-    htmlResponse: true,
-    loadingClassName: 'inplaceeditor-loading',
-    loadingText: 'Loading...',
-    okControl: 'button',                        // 'link'|'button'|false
-    okText: 'ok',
-    paramName: 'value',
-    rows: 1,                                    // If 1 and multi-line, uses autoRows
-    savingClassName: 'inplaceeditor-saving',
-    savingText: 'Saving...',
-    size: 0,
-    stripLoadedTextTags: false,
-    submitOnBlur: false,
-    textAfterControls: '',
-    textBeforeControls: '',
-    textBetweenControls: ''
-  },
-  DefaultCallbacks: {
-    callback: function(form) {
-      return Form.serialize(form);
-    },
-    onComplete: function(transport, element) {
-      // For backward compatibility, this one is bound to the IPE, and passes
-      // the element directly.  It was too often customized, so we don't break it.
-      new Effect.Highlight(element, {
-        startcolor: this.options.highlightColor, keepBackgroundImage: true });
-    },
-    onEnterEditMode: null,
-    onEnterHover: function(ipe) {
-      ipe.element.style.backgroundColor = ipe.options.highlightColor;
-      if (ipe._effect)
-        ipe._effect.cancel();
-    },
-    onFailure: function(transport, ipe) {
-      alert('Error communication with the server: ' + transport.responseText.stripTags());
-    },
-    onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
-    onLeaveEditMode: null,
-    onLeaveHover: function(ipe) {
-      ipe._effect = new Effect.Highlight(ipe.element, {
-        startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
-        restorecolor: ipe._originalBackground, keepBackgroundImage: true
-      });
-    }
-  },
-  Listeners: {
-    click: 'enterEditMode',
-    keydown: 'checkForEscapeOrReturn',
-    mouseover: 'enterHover',
-    mouseout: 'leaveHover'
-  }
-});
-Ajax.InPlaceEditor.prototype = {
-  initialize: function(element, url, options) {
-    this.url = url;
-    this.element = element = $(element);
-    this.prepareOptions();
-    this._controls = { };
-    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
-    Object.extend(this.options, options || { });
-    if (!this.options.formId && this.element.id) {
-      this.options.formId = this.element.id + '-inplaceeditor';
-      if ($(this.options.formId))
-        this.options.formId = '';
-    }
-    if (this.options.externalControl)
-      this.options.externalControl = $(this.options.externalControl);
-    if (!this.options.externalControl)
-      this.options.externalControlOnly = false;
-    this._originalBackground = this.element.getStyle('background-color') || 'transparent';
-    this.element.title = this.options.clickToEditText;
-    this._boundCancelHandler = this.handleFormCancellation.bind(this);
-    this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
-    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
-    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
-    this._boundWrapperHandler = this.wrapUp.bind(this);
-    this.registerListeners();
-  },
-  checkForEscapeOrReturn: function(e) {
-    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
-    if (Event.KEY_ESC == e.keyCode)
-      this.handleFormCancellation(e);
-    else if (Event.KEY_RETURN == e.keyCode)
-      this.handleFormSubmission(e);
-  },
-  createControl: function(mode, handler, extraClasses) {
-    var control = this.options[mode + 'Control'];
-    var text = this.options[mode + 'Text'];
-    if ('button' == control) {
-      var btn = document.createElement('input');
-      btn.type = 'submit';
-      btn.value = text;
-      btn.className = 'editor_' + mode + '_button';
-      if ('cancel' == mode)
-        btn.onclick = this._boundCancelHandler;
-      this._form.appendChild(btn);
-      this._controls[mode] = btn;
-    } else if ('link' == control) {
-      var link = document.createElement('a');
-      link.href = '#';
-      link.appendChild(document.createTextNode(text));
-      link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
-      link.className = 'editor_' + mode + '_link';
-      if (extraClasses)
-        link.className += ' ' + extraClasses;
-      this._form.appendChild(link);
-      this._controls[mode] = link;
-    }
-  },
-  createEditField: function() {
-    var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
-    var fld;
-    if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
-      fld = document.createElement('input');
-      fld.type = 'text';
-      var size = this.options.size || this.options.cols || 0;
-      if (0 < size) fld.size = size;
-    } else {
-      fld = document.createElement('textarea');
-      fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
-      fld.cols = this.options.cols || 40;
-    }
-    fld.name = this.options.paramName;
-    fld.value = text; // No HTML breaks conversion anymore
-    fld.className = 'editor_field';
-    if (this.options.submitOnBlur)
-      fld.onblur = this._boundSubmitHandler;
-    this._controls.editor = fld;
-    if (this.options.loadTextURL)
-      this.loadExternalText();
-    this._form.appendChild(this._controls.editor);
-  },
-  createForm: function() {
-    var ipe = this;
-    function addText(mode, condition) {
-      var text = ipe.options['text' + mode + 'Controls'];
-      if (!text || condition === false) return;
-      ipe._form.appendChild(document.createTextNode(text));
-    };
-    this._form = $(document.createElement('form'));
-    this._form.id = this.options.formId;
-    this._form.addClassName(this.options.formClassName);
-    this._form.onsubmit = this._boundSubmitHandler;
-    this.createEditField();
-    if ('textarea' == this._controls.editor.tagName.toLowerCase())
-      this._form.appendChild(document.createElement('br'));
-    if (this.options.onFormCustomization)
-      this.options.onFormCustomization(this, this._form);
-    addText('Before', this.options.okControl || this.options.cancelControl);
-    this.createControl('ok', this._boundSubmitHandler);
-    addText('Between', this.options.okControl && this.options.cancelControl);
-    this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
-    addText('After', this.options.okControl || this.options.cancelControl);
-  },
-  destroy: function() {
-    if (this._oldInnerHTML)
-      this.element.innerHTML = this._oldInnerHTML;
-    this.leaveEditMode();
-    this.unregisterListeners();
-  },
-  enterEditMode: function(e) {
-    if (this._saving || this._editing) return;
-    this._editing = true;
-    this.triggerCallback('onEnterEditMode');
-    if (this.options.externalControl)
-      this.options.externalControl.hide();
-    this.element.hide();
-    this.createForm();
-    this.element.parentNode.insertBefore(this._form, this.element);
-    if (!this.options.loadTextURL)
-      this.postProcessEditField();
-    if (e) Event.stop(e);
-  },
-  enterHover: function(e) {
-    if (this.options.hoverClassName)
-      this.element.addClassName(this.options.hoverClassName);
-    if (this._saving) return;
-    this.triggerCallback('onEnterHover');
-  },
-  getText: function() {
-    return this.element.innerHTML;
-  },
-  handleAJAXFailure: function(transport) {
-    this.triggerCallback('onFailure', transport);
-    if (this._oldInnerHTML) {
-      this.element.innerHTML = this._oldInnerHTML;
-      this._oldInnerHTML = null;
-    }
-  },
-  handleFormCancellation: function(e) {
-    this.wrapUp();
-    if (e) Event.stop(e);
-  },
-  handleFormSubmission: function(e) {
-    var form = this._form;
-    var value = $F(this._controls.editor);
-    this.prepareSubmission();
-    var params = this.options.callback(form, value);
-    params = (params ? params + '&' : '?') + 'editorId=' + this.element.id;
-    if (this.options.htmlResponse) {
-      var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
-      Object.extend(options, {
-        parameters: params,
-        onComplete: this._boundWrapperHandler,
-        onFailure: this._boundFailureHandler
-      });
-      new Ajax.Updater({ success: this.element }, this.url, options);
-    } else {
-      var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
-      Object.extend(options, {
-        parameters: params,
-        onComplete: this._boundWrapperHandler,
-        onFailure: this._boundFailureHandler
-      });
-      new Ajax.Request(this.url, options);
-    }
-    if (e) Event.stop(e);
-  },
-  leaveEditMode: function() {
-    this.element.removeClassName(this.options.savingClassName);
-    this.removeForm();
-    this.leaveHover();
-    this.element.style.backgroundColor = this._originalBackground;
-    this.element.show();
-    if (this.options.externalControl)
-      this.options.externalControl.show();
-    this._saving = false;
-    this._editing = false;
-    this._oldInnerHTML = null;
-    this.triggerCallback('onLeaveEditMode');
-  },
-  leaveHover: function(e) {
-    if (this.options.hoverClassName)
-      this.element.removeClassName(this.options.hoverClassName);
-    if (this._saving) return;
-    this.triggerCallback('onLeaveHover');
-  },
-  loadExternalText: function() {
-    this._form.addClassName(this.options.loadingClassName);
-    this._controls.editor.disabled = true;
-    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
-    Object.extend(options, {
-      parameters: 'editorId=' + encodeURIComponent(this.element.id),
-      onComplete: Prototype.emptyFunction,
-      onSuccess: function(transport) {
-        this._form.removeClassName(this.options.loadingClassName);
-        var text = transport.responseText;
-        if (this.options.stripLoadedTextTags)
-          text = text.stripTags();
-        this._controls.editor.value = text;
-        this._controls.editor.disabled = false;
-        this.postProcessEditField();
-      }.bind(this),
-      onFailure: this._boundFailureHandler
-    });
-    new Ajax.Request(this.options.loadTextURL, options);
-  },
-  postProcessEditField: function() {
-    var fpc = this.options.fieldPostCreation;
-    if (fpc)
-      $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
-  },
-  prepareOptions: function() {
-    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
-    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
-    [this._extraDefaultOptions].flatten().compact().each(function(defs) {
-      Object.extend(this.options, defs);
-    }.bind(this));
-  },
-  prepareSubmission: function() {
-    this._saving = true;
-    this.removeForm();
-    this.leaveHover();
-    this.showSaving();
-  },
-  registerListeners: function() {
-    this._listeners = { };
-    var listener;
-    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
-      listener = this[pair.value].bind(this);
-      this._listeners[pair.key] = listener;
-      if (!this.options.externalControlOnly)
-        this.element.observe(pair.key, listener);
-      if (this.options.externalControl)
-        this.options.externalControl.observe(pair.key, listener);
-    }.bind(this));
-  },
-  removeForm: function() {
-    if (!this._form) return;
-    this._form.remove();
-    this._form = null;
-    this._controls = { };
-  },
-  showSaving: function() {
-    this._oldInnerHTML = this.element.innerHTML;
-    this.element.innerHTML = this.options.savingText;
-    this.element.addClassName(this.options.savingClassName);
-    this.element.style.backgroundColor = this._originalBackground;
-    this.element.show();
-  },
-  triggerCallback: function(cbName, arg) {
-    if ('function' == typeof this.options[cbName]) {
-      this.options[cbName](this, arg);
-    }
-  },
-  unregisterListeners: function() {
-    $H(this._listeners).each(function(pair) {
-      if (!this.options.externalControlOnly)
-        this.element.stopObserving(pair.key, pair.value);
-      if (this.options.externalControl)
-        this.options.externalControl.stopObserving(pair.key, pair.value);
-    }.bind(this));
-  },
-  wrapUp: function(transport) {
-    this.leaveEditMode();
-    // Can't use triggerCallback due to backward compatibility: requires
-    // binding + direct element
-    this._boundComplete(transport, this.element);
-  }
-};
-Object.extend(Ajax.InPlaceEditor.prototype, {
-  dispose: Ajax.InPlaceEditor.prototype.destroy
-});
-
-
-Ajax.InPlaceCollectionEditor = Class.create();
-Ajax.InPlaceCollectionEditor.DefaultOptions = {
-  loadingCollectionText: 'Loading options...'
-};
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
-  initialize: function(element, url, options) {
-    this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
-    Ajax.InPlaceEditor.prototype.initialize.call(this, element, url, options);
-  },
-
-  createEditField: function() {
-    var list = document.createElement('select');
-    list.name = this.options.paramName;
-    list.size = 1;
-    this._controls.editor = list;
-    this._collection = this.options.collection || [];
-    if (this.options.loadCollectionURL)
-      this.loadCollection();
-    else
-      this.checkForExternalText();
-    this._form.appendChild(this._controls.editor);
-  },
-
-  loadCollection: function() {
-    this._form.addClassName(this.options.loadingClassName);
-    this.showLoadingText(this.options.loadingCollectionText);
-    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
-    Object.extend(options, {
-      parameters: 'editorId=' + encodeURIComponent(this.element.id),
-      onComplete: Prototype.emptyFunction,
-      onSuccess: function(transport) {
-        var js = transport.responseText.strip();
-        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
-          throw 'Server returned an invalid collection representation.';
-        this._collection = eval(js);
-        this.checkForExternalText();
-      }.bind(this),
-      onFailure: this.onFailure
-    });
-    new Ajax.Request(this.options.loadCollectionURL, options);
-  },
-
-  showLoadingText: function(text) {
-    this._controls.editor.disabled = true;
-    var tempOption = this._controls.editor.firstChild;
-    if (!tempOption) {
-      tempOption = document.createElement('option');
-      tempOption.value = '';
-      this._controls.editor.appendChild(tempOption);
-      tempOption.selected = true;
-    }
-    tempOption.update((text || '').stripScripts().stripTags());
-  },
-
-  checkForExternalText: function() {
-    this._text = this.getText();
-    if (this.options.loadTextURL)
-      this.loadExternalText();
-    else
-      this.buildOptionList();
-  },
-
-  loadExternalText: function() {
-    this.showLoadingText(this.options.loadingText);
-    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
-    Object.extend(options, {
-      parameters: 'editorId=' + encodeURIComponent(this.element.id),
-      onComplete: Prototype.emptyFunction,
-      onSuccess: function(transport) {
-        this._text = transport.responseText.strip();
-        this.buildOptionList();
-      }.bind(this),
-      onFailure: this.onFailure
-    });
-    new Ajax.Request(this.options.loadTextURL, options);
-  },
-
-  buildOptionList: function() {
-    this._form.removeClassName(this.options.loadingClassName);
-    this._collection = this._collection.map(function(entry) {
-      return 2 === entry.length ? entry : [entry, entry].flatten();
-    });
-    var marker = ('value' in this.options) ? this.options.value : this._text;
-    var textFound = this._collection.any(function(entry) {
-      return entry[0] == marker;
-    }.bind(this));
-    this._controls.editor.update('');
-    var option;
-    this._collection.each(function(entry, index) {
-      option = document.createElement('option');
-      option.value = entry[0];
-      option.selected = textFound ? entry[0] == marker : 0 == index;
-      option.appendChild(document.createTextNode(entry[1]));
-      this._controls.editor.appendChild(option);
-    }.bind(this));
-    this._controls.editor.disabled = false;
-    Field.scrollFreeActivate(this._controls.editor);
-  }
-});
-
-//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
-//**** This only  exists for a while,  in order to  let ****
-//**** users adapt to  the new API.  Read up on the new ****
-//**** API and convert your code to it ASAP!            ****
-
-Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
-  if (!options) return;
-  function fallback(name, expr) {
-    if (name in options || expr === undefined) return;
-    options[name] = expr;
-  };
-  fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
-    options.cancelLink == options.cancelButton == false ? false : undefined)));
-  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
-    options.okLink == options.okButton == false ? false : undefined)));
-  fallback('highlightColor', options.highlightcolor);
-  fallback('highlightEndColor', options.highlightendcolor);
-};
-
-
-// Delayed observer, like Form.Element.Observer, 
-// but waits for delay after last key input
-// Ideal for live-search fields
-
-Form.Element.DelayedObserver = Class.create();
-Form.Element.DelayedObserver.prototype = {
-  initialize: function(element, delay, callback) {
-    this.delay     = delay || 0.5;
-    this.element   = $(element);
-    this.callback  = callback;
-    this.timer     = null;
-    this.lastValue = $F(this.element); 
-    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
-  },
-  delayedListener: function(event) {
-    if(this.lastValue == $F(this.element)) return;
-    if(this.timer) clearTimeout(this.timer);
-    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
-    this.lastValue = $F(this.element);
-  },
-  onTimerEvent: function() {
-    this.timer = null;
-    this.callback(this.element, $F(this.element));
-  }
-};
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/dragdrop.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/dragdrop.js
deleted file mode 100644
index 96eba90..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/dragdrop.js
+++ /dev/null
@@ -1,976 +0,0 @@
-// script.aculo.us dragdrop.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi at oriontransfer.co.nz)
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if(Object.isUndefined(Effect))
-  throw("dragdrop.js requires including script.aculo.us' effects.js library");
-
-var Droppables = {
-  drops: [],
-
-  remove: function(element) {
-    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
-  },
-
-  add: function(element) {
-    element = $(element);
-    var options = Object.extend({
-      greedy:     true,
-      hoverclass: null,
-      tree:       false
-    }, arguments[1] || { });
-
-    // cache containers
-    if(options.containment) {
-      options._containers = [];
-      var containment = options.containment;
-      if(Object.isArray(containment)) {
-        containment.each( function(c) { options._containers.push($(c)) });
-      } else {
-        options._containers.push($(containment));
-      }
-    }
-    
-    if(options.accept) options.accept = [options.accept].flatten();
-
-    Element.makePositioned(element); // fix IE
-    options.element = element;
-
-    this.drops.push(options);
-  },
-  
-  findDeepestChild: function(drops) {
-    deepest = drops[0];
-      
-    for (i = 1; i < drops.length; ++i)
-      if (Element.isParent(drops[i].element, deepest.element))
-        deepest = drops[i];
-    
-    return deepest;
-  },
-
-  isContained: function(element, drop) {
-    var containmentNode;
-    if(drop.tree) {
-      containmentNode = element.treeNode; 
-    } else {
-      containmentNode = element.parentNode;
-    }
-    return drop._containers.detect(function(c) { return containmentNode == c });
-  },
-  
-  isAffected: function(point, element, drop) {
-    return (
-      (drop.element!=element) &&
-      ((!drop._containers) ||
-        this.isContained(element, drop)) &&
-      ((!drop.accept) ||
-        (Element.classNames(element).detect( 
-          function(v) { return drop.accept.include(v) } ) )) &&
-      Position.within(drop.element, point[0], point[1]) );
-  },
-
-  deactivate: function(drop) {
-    if(drop.hoverclass)
-      Element.removeClassName(drop.element, drop.hoverclass);
-    this.last_active = null;
-  },
-
-  activate: function(drop) {
-    if(drop.hoverclass)
-      Element.addClassName(drop.element, drop.hoverclass);
-    this.last_active = drop;
-  },
-
-  show: function(point, element) {
-    if(!this.drops.length) return;
-    var drop, affected = [];
-    
-    this.drops.each( function(drop) {
-      if(Droppables.isAffected(point, element, drop))
-        affected.push(drop);
-    });
-        
-    if(affected.length>0)
-      drop = Droppables.findDeepestChild(affected);
-
-    if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
-    if (drop) {
-      Position.within(drop.element, point[0], point[1]);
-      if(drop.onHover)
-        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
-      
-      if (drop != this.last_active) Droppables.activate(drop);
-    }
-  },
-
-  fire: function(event, element) {
-    if(!this.last_active) return;
-    Position.prepare();
-
-    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
-      if (this.last_active.onDrop) {
-        this.last_active.onDrop(element, this.last_active.element, event); 
-        return true; 
-      }
-  },
-
-  reset: function() {
-    if(this.last_active)
-      this.deactivate(this.last_active);
-  }
-}
-
-var Draggables = {
-  drags: [],
-  observers: [],
-  
-  register: function(draggable) {
-    if(this.drags.length == 0) {
-      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
-      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
-      
-      Event.observe(document, "mouseup", this.eventMouseUp);
-      Event.observe(document, "mousemove", this.eventMouseMove);
-      Event.observe(document, "keypress", this.eventKeypress);
-    }
-    this.drags.push(draggable);
-  },
-  
-  unregister: function(draggable) {
-    this.drags = this.drags.reject(function(d) { return d==draggable });
-    if(this.drags.length == 0) {
-      Event.stopObserving(document, "mouseup", this.eventMouseUp);
-      Event.stopObserving(document, "mousemove", this.eventMouseMove);
-      Event.stopObserving(document, "keypress", this.eventKeypress);
-    }
-  },
-  
-  activate: function(draggable) {
-    if(draggable.options.delay) { 
-      this._timeout = setTimeout(function() { 
-        Draggables._timeout = null; 
-        window.focus(); 
-        Draggables.activeDraggable = draggable; 
-      }.bind(this), draggable.options.delay); 
-    } else {
-      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
-      this.activeDraggable = draggable;
-    }
-  },
-  
-  deactivate: function() {
-    this.activeDraggable = null;
-  },
-  
-  updateDrag: function(event) {
-    if(!this.activeDraggable) return;
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    // Mozilla-based browsers fire successive mousemove events with
-    // the same coordinates, prevent needless redrawing (moz bug?)
-    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
-    this._lastPointer = pointer;
-    
-    this.activeDraggable.updateDrag(event, pointer);
-  },
-  
-  endDrag: function(event) {
-    if(this._timeout) { 
-      clearTimeout(this._timeout); 
-      this._timeout = null; 
-    }
-    if(!this.activeDraggable) return;
-    this._lastPointer = null;
-    this.activeDraggable.endDrag(event);
-    this.activeDraggable = null;
-  },
-  
-  keyPress: function(event) {
-    if(this.activeDraggable)
-      this.activeDraggable.keyPress(event);
-  },
-  
-  addObserver: function(observer) {
-    this.observers.push(observer);
-    this._cacheObserverCallbacks();
-  },
-  
-  removeObserver: function(element) {  // element instead of observer fixes mem leaks
-    this.observers = this.observers.reject( function(o) { return o.element==element });
-    this._cacheObserverCallbacks();
-  },
-  
-  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
-    if(this[eventName+'Count'] > 0)
-      this.observers.each( function(o) {
-        if(o[eventName]) o[eventName](eventName, draggable, event);
-      });
-    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
-  },
-  
-  _cacheObserverCallbacks: function() {
-    ['onStart','onEnd','onDrag'].each( function(eventName) {
-      Draggables[eventName+'Count'] = Draggables.observers.select(
-        function(o) { return o[eventName]; }
-      ).length;
-    });
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create();
-Draggable._dragging    = { };
-
-Draggable.prototype = {
-  initialize: function(element) {
-    var defaults = {
-      handle: false,
-      reverteffect: function(element, top_offset, left_offset) {
-        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
-        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
-          queue: {scope:'_draggable', position:'end'}
-        });
-      },
-      endeffect: function(element) {
-        var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
-        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, 
-          queue: {scope:'_draggable', position:'end'},
-          afterFinish: function(){ 
-            Draggable._dragging[element] = false 
-          }
-        }); 
-      },
-      zindex: 1000,
-      revert: false,
-      quiet: false,
-      scroll: false,
-      scrollSensitivity: 20,
-      scrollSpeed: 15,
-      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
-      delay: 0
-    };
-    
-    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
-      Object.extend(defaults, {
-        starteffect: function(element) {
-          element._opacity = Element.getOpacity(element);
-          Draggable._dragging[element] = true;
-          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 
-        }
-      });
-    
-    var options = Object.extend(defaults, arguments[1] || { });
-
-    this.element = $(element);
-    
-    if(options.handle && Object.isString(options.handle))
-      this.handle = this.element.down('.'+options.handle, 0);
-    
-    if(!this.handle) this.handle = $(options.handle);
-    if(!this.handle) this.handle = this.element;
-    
-    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
-      options.scroll = $(options.scroll);
-      this._isScrollChild = Element.childOf(this.element, options.scroll);
-    }
-
-    Element.makePositioned(this.element); // fix IE    
-
-    this.options  = options;
-    this.dragging = false;   
-
-    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
-    Event.observe(this.handle, "mousedown", this.eventMouseDown);
-    
-    Draggables.register(this);
-  },
-  
-  destroy: function() {
-    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
-    Draggables.unregister(this);
-  },
-  
-  currentDelta: function() {
-    return([
-      parseInt(Element.getStyle(this.element,'left') || '0'),
-      parseInt(Element.getStyle(this.element,'top') || '0')]);
-  },
-  
-  initDrag: function(event) {
-    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
-      Draggable._dragging[this.element]) return;
-    if(Event.isLeftClick(event)) {    
-      // abort on form elements, fixes a Firefox issue
-      var src = Event.element(event);
-      if((tag_name = src.tagName.toUpperCase()) && (
-        tag_name=='INPUT' ||
-        tag_name=='SELECT' ||
-        tag_name=='OPTION' ||
-        tag_name=='BUTTON' ||
-        tag_name=='TEXTAREA')) return;
-        
-      var pointer = [Event.pointerX(event), Event.pointerY(event)];
-      var pos     = Position.cumulativeOffset(this.element);
-      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
-      
-      Draggables.activate(this);
-      Event.stop(event);
-    }
-  },
-  
-  startDrag: function(event) {
-    this.dragging = true;
-    if(!this.delta)
-      this.delta = this.currentDelta();
-    
-    if(this.options.zindex) {
-      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
-      this.element.style.zIndex = this.options.zindex;
-    }
-    
-    if(this.options.ghosting) {
-      this._clone = this.element.cloneNode(true);
-      this.element._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
-      if (!this.element._originallyAbsolute)
-        Position.absolutize(this.element);
-      this.element.parentNode.insertBefore(this._clone, this.element);
-    }
-    
-    if(this.options.scroll) {
-      if (this.options.scroll == window) {
-        var where = this._getWindowScroll(this.options.scroll);
-        this.originalScrollLeft = where.left;
-        this.originalScrollTop = where.top;
-      } else {
-        this.originalScrollLeft = this.options.scroll.scrollLeft;
-        this.originalScrollTop = this.options.scroll.scrollTop;
-      }
-    }
-    
-    Draggables.notify('onStart', this, event);
-        
-    if(this.options.starteffect) this.options.starteffect(this.element);
-  },
-  
-  updateDrag: function(event, pointer) {
-    if(!this.dragging) this.startDrag(event);
-    
-    if(!this.options.quiet){
-      Position.prepare();
-      Droppables.show(pointer, this.element);
-    }
-    
-    Draggables.notify('onDrag', this, event);
-    
-    this.draw(pointer);
-    if(this.options.change) this.options.change(this);
-    
-    if(this.options.scroll) {
-      this.stopScrolling();
-      
-      var p;
-      if (this.options.scroll == window) {
-        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
-      } else {
-        p = Position.page(this.options.scroll);
-        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
-        p[1] += this.options.scroll.scrollTop + Position.deltaY;
-        p.push(p[0]+this.options.scroll.offsetWidth);
-        p.push(p[1]+this.options.scroll.offsetHeight);
-      }
-      var speed = [0,0];
-      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
-      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
-      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
-      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
-      this.startScrolling(speed);
-    }
-    
-    // fix AppleWebKit rendering
-    if(Prototype.Browser.WebKit) window.scrollBy(0,0);
-    
-    Event.stop(event);
-  },
-  
-  finishDrag: function(event, success) {
-    this.dragging = false;
-    
-    if(this.options.quiet){
-      Position.prepare();
-      var pointer = [Event.pointerX(event), Event.pointerY(event)];
-      Droppables.show(pointer, this.element);
-    }
-
-    if(this.options.ghosting) {
-      if (!this.element._originallyAbsolute)
-        Position.relativize(this.element);
-      delete this.element._originallyAbsolute;
-      Element.remove(this._clone);
-      this._clone = null;
-    }
-
-    var dropped = false; 
-    if(success) { 
-      dropped = Droppables.fire(event, this.element); 
-      if (!dropped) dropped = false; 
-    }
-    if(dropped && this.options.onDropped) this.options.onDropped(this.element);
-    Draggables.notify('onEnd', this, event);
-
-    var revert = this.options.revert;
-    if(revert && Object.isFunction(revert)) revert = revert(this.element);
-    
-    var d = this.currentDelta();
-    if(revert && this.options.reverteffect) {
-      if (dropped == 0 || revert != 'failure')
-        this.options.reverteffect(this.element,
-          d[1]-this.delta[1], d[0]-this.delta[0]);
-    } else {
-      this.delta = d;
-    }
-
-    if(this.options.zindex)
-      this.element.style.zIndex = this.originalZ;
-
-    if(this.options.endeffect) 
-      this.options.endeffect(this.element);
-      
-    Draggables.deactivate(this);
-    Droppables.reset();
-  },
-  
-  keyPress: function(event) {
-    if(event.keyCode!=Event.KEY_ESC) return;
-    this.finishDrag(event, false);
-    Event.stop(event);
-  },
-  
-  endDrag: function(event) {
-    if(!this.dragging) return;
-    this.stopScrolling();
-    this.finishDrag(event, true);
-    Event.stop(event);
-  },
-  
-  draw: function(point) {
-    var pos = Position.cumulativeOffset(this.element);
-    if(this.options.ghosting) {
-      var r   = Position.realOffset(this.element);
-      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
-    }
-    
-    var d = this.currentDelta();
-    pos[0] -= d[0]; pos[1] -= d[1];
-    
-    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
-      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
-      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
-    }
-    
-    var p = [0,1].map(function(i){ 
-      return (point[i]-pos[i]-this.offset[i]) 
-    }.bind(this));
-    
-    if(this.options.snap) {
-      if(Object.isFunction(this.options.snap)) {
-        p = this.options.snap(p[0],p[1],this);
-      } else {
-      if(Object.isArray(this.options.snap)) {
-        p = p.map( function(v, i) {
-          return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this))
-      } else {
-        p = p.map( function(v) {
-          return (v/this.options.snap).round()*this.options.snap }.bind(this))
-      }
-    }}
-    
-    var style = this.element.style;
-    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
-      style.left = p[0] + "px";
-    if((!this.options.constraint) || (this.options.constraint=='vertical'))
-      style.top  = p[1] + "px";
-    
-    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
-  },
-  
-  stopScrolling: function() {
-    if(this.scrollInterval) {
-      clearInterval(this.scrollInterval);
-      this.scrollInterval = null;
-      Draggables._lastScrollPointer = null;
-    }
-  },
-  
-  startScrolling: function(speed) {
-    if(!(speed[0] || speed[1])) return;
-    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
-    this.lastScrolled = new Date();
-    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
-  },
-  
-  scroll: function() {
-    var current = new Date();
-    var delta = current - this.lastScrolled;
-    this.lastScrolled = current;
-    if(this.options.scroll == window) {
-      with (this._getWindowScroll(this.options.scroll)) {
-        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
-          var d = delta / 1000;
-          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
-        }
-      }
-    } else {
-      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
-      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
-    }
-    
-    Position.prepare();
-    Droppables.show(Draggables._lastPointer, this.element);
-    Draggables.notify('onDrag', this);
-    if (this._isScrollChild) {
-      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
-      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
-      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
-      if (Draggables._lastScrollPointer[0] < 0)
-        Draggables._lastScrollPointer[0] = 0;
-      if (Draggables._lastScrollPointer[1] < 0)
-        Draggables._lastScrollPointer[1] = 0;
-      this.draw(Draggables._lastScrollPointer);
-    }
-    
-    if(this.options.change) this.options.change(this);
-  },
-  
-  _getWindowScroll: function(w) {
-    var T, L, W, H;
-    with (w.document) {
-      if (w.document.documentElement && documentElement.scrollTop) {
-        T = documentElement.scrollTop;
-        L = documentElement.scrollLeft;
-      } else if (w.document.body) {
-        T = body.scrollTop;
-        L = body.scrollLeft;
-      }
-      if (w.innerWidth) {
-        W = w.innerWidth;
-        H = w.innerHeight;
-      } else if (w.document.documentElement && documentElement.clientWidth) {
-        W = documentElement.clientWidth;
-        H = documentElement.clientHeight;
-      } else {
-        W = body.offsetWidth;
-        H = body.offsetHeight
-      }
-    }
-    return { top: T, left: L, width: W, height: H };
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create();
-SortableObserver.prototype = {
-  initialize: function(element, observer) {
-    this.element   = $(element);
-    this.observer  = observer;
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onStart: function() {
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onEnd: function() {
-    Sortable.unmark();
-    if(this.lastValue != Sortable.serialize(this.element))
-      this.observer(this.element)
-  }
-}
-
-var Sortable = {
-  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
-  
-  sortables: { },
-  
-  _findRootElement: function(element) {
-    while (element.tagName.toUpperCase() != "BODY") {  
-      if(element.id && Sortable.sortables[element.id]) return element;
-      element = element.parentNode;
-    }
-  },
-
-  options: function(element) {
-    element = Sortable._findRootElement($(element));
-    if(!element) return;
-    return Sortable.sortables[element.id];
-  },
-  
-  destroy: function(element){
-    var s = Sortable.options(element);
-    
-    if(s) {
-      Draggables.removeObserver(s.element);
-      s.droppables.each(function(d){ Droppables.remove(d) });
-      s.draggables.invoke('destroy');
-      
-      delete Sortable.sortables[s.element.id];
-    }
-  },
-
-  create: function(element) {
-    element = $(element);
-    var options = Object.extend({ 
-      element:     element,
-      tag:         'li',       // assumes li children, override with tag: 'tagname'
-      dropOnEmpty: false,
-      tree:        false,
-      treeTag:     'ul',
-      overlap:     'vertical', // one of 'vertical', 'horizontal'
-      constraint:  'vertical', // one of 'vertical', 'horizontal', false
-      containment: element,    // also takes array of elements (or id's); or false
-      handle:      false,      // or a CSS class
-      only:        false,
-      delay:       0,
-      hoverclass:  null,
-      ghosting:    false,
-      quiet:       false, 
-      scroll:      false,
-      scrollSensitivity: 20,
-      scrollSpeed: 15,
-      format:      this.SERIALIZE_RULE,
-      
-      // these take arrays of elements or ids and can be 
-      // used for better initialization performance
-      elements:    false,
-      handles:     false,
-      
-      onChange:    Prototype.emptyFunction,
-      onUpdate:    Prototype.emptyFunction
-    }, arguments[1] || { });
-
-    // clear any old sortable with same element
-    this.destroy(element);
-
-    // build options for the draggables
-    var options_for_draggable = {
-      revert:      true,
-      quiet:       options.quiet,
-      scroll:      options.scroll,
-      scrollSpeed: options.scrollSpeed,
-      scrollSensitivity: options.scrollSensitivity,
-      delay:       options.delay,
-      ghosting:    options.ghosting,
-      constraint:  options.constraint,
-      handle:      options.handle };
-
-    if(options.starteffect)
-      options_for_draggable.starteffect = options.starteffect;
-
-    if(options.reverteffect)
-      options_for_draggable.reverteffect = options.reverteffect;
-    else
-      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
-        element.style.top  = 0;
-        element.style.left = 0;
-      };
-
-    if(options.endeffect)
-      options_for_draggable.endeffect = options.endeffect;
-
-    if(options.zindex)
-      options_for_draggable.zindex = options.zindex;
-
-    // build options for the droppables  
-    var options_for_droppable = {
-      overlap:     options.overlap,
-      containment: options.containment,
-      tree:        options.tree,
-      hoverclass:  options.hoverclass,
-      onHover:     Sortable.onHover
-    }
-    
-    var options_for_tree = {
-      onHover:      Sortable.onEmptyHover,
-      overlap:      options.overlap,
-      containment:  options.containment,
-      hoverclass:   options.hoverclass
-    }
-
-    // fix for gecko engine
-    Element.cleanWhitespace(element); 
-
-    options.draggables = [];
-    options.droppables = [];
-
-    // drop on empty handling
-    if(options.dropOnEmpty || options.tree) {
-      Droppables.add(element, options_for_tree);
-      options.droppables.push(element);
-    }
-
-    (options.elements || this.findElements(element, options) || []).each( function(e,i) {
-      var handle = options.handles ? $(options.handles[i]) :
-        (options.handle ? $(e).getElementsByClassName(options.handle)[0] : e); 
-      options.draggables.push(
-        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
-      Droppables.add(e, options_for_droppable);
-      if(options.tree) e.treeNode = element;
-      options.droppables.push(e);      
-    });
-    
-    if(options.tree) {
-      (Sortable.findTreeElements(element, options) || []).each( function(e) {
-        Droppables.add(e, options_for_tree);
-        e.treeNode = element;
-        options.droppables.push(e);
-      });
-    }
-
-    // keep reference
-    this.sortables[element.id] = options;
-
-    // for onupdate
-    Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
-  },
-
-  // return all suitable-for-sortable elements in a guaranteed order
-  findElements: function(element, options) {
-    return Element.findChildren(
-      element, options.only, options.tree ? true : false, options.tag);
-  },
-  
-  findTreeElements: function(element, options) {
-    return Element.findChildren(
-      element, options.only, options.tree ? true : false, options.treeTag);
-  },
-
-  onHover: function(element, dropon, overlap) {
-    if(Element.isParent(dropon, element)) return;
-
-    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
-      return;
-    } else if(overlap>0.5) {
-      Sortable.mark(dropon, 'before');
-      if(dropon.previousSibling != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, dropon);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    } else {
-      Sortable.mark(dropon, 'after');
-      var nextElement = dropon.nextSibling || null;
-      if(nextElement != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, nextElement);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    }
-  },
-  
-  onEmptyHover: function(element, dropon, overlap) {
-    var oldParentNode = element.parentNode;
-    var droponOptions = Sortable.options(dropon);
-        
-    if(!Element.isParent(dropon, element)) {
-      var index;
-      
-      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
-      var child = null;
-            
-      if(children) {
-        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
-        
-        for (index = 0; index < children.length; index += 1) {
-          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
-            offset -= Element.offsetSize (children[index], droponOptions.overlap);
-          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
-            child = index + 1 < children.length ? children[index + 1] : null;
-            break;
-          } else {
-            child = children[index];
-            break;
-          }
-        }
-      }
-      
-      dropon.insertBefore(element, child);
-      
-      Sortable.options(oldParentNode).onChange(element);
-      droponOptions.onChange(element);
-    }
-  },
-
-  unmark: function() {
-    if(Sortable._marker) Sortable._marker.hide();
-  },
-
-  mark: function(dropon, position) {
-    // mark on ghosting only
-    var sortable = Sortable.options(dropon.parentNode);
-    if(sortable && !sortable.ghosting) return; 
-
-    if(!Sortable._marker) {
-      Sortable._marker = 
-        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
-          hide().addClassName('dropmarker').setStyle({position:'absolute'});
-      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
-    }    
-    var offsets = Position.cumulativeOffset(dropon);
-    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
-    
-    if(position=='after')
-      if(sortable.overlap == 'horizontal') 
-        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
-      else
-        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
-    
-    Sortable._marker.show();
-  },
-  
-  _tree: function(element, options, parent) {
-    var children = Sortable.findElements(element, options) || [];
-  
-    for (var i = 0; i < children.length; ++i) {
-      var match = children[i].id.match(options.format);
-
-      if (!match) continue;
-      
-      var child = {
-        id: encodeURIComponent(match ? match[1] : null),
-        element: element,
-        parent: parent,
-        children: [],
-        position: parent.children.length,
-        container: $(children[i]).down(options.treeTag)
-      }
-      
-      /* Get the element containing the children and recurse over it */
-      if (child.container)
-        this._tree(child.container, options, child)
-      
-      parent.children.push (child);
-    }
-
-    return parent; 
-  },
-
-  tree: function(element) {
-    element = $(element);
-    var sortableOptions = this.options(element);
-    var options = Object.extend({
-      tag: sortableOptions.tag,
-      treeTag: sortableOptions.treeTag,
-      only: sortableOptions.only,
-      name: element.id,
-      format: sortableOptions.format
-    }, arguments[1] || { });
-    
-    var root = {
-      id: null,
-      parent: null,
-      children: [],
-      container: element,
-      position: 0
-    }
-    
-    return Sortable._tree(element, options, root);
-  },
-
-  /* Construct a [i] index for a particular node */
-  _constructIndex: function(node) {
-    var index = '';
-    do {
-      if (node.id) index = '[' + node.position + ']' + index;
-    } while ((node = node.parent) != null);
-    return index;
-  },
-
-  sequence: function(element) {
-    element = $(element);
-    var options = Object.extend(this.options(element), arguments[1] || { });
-    
-    return $(this.findElements(element, options) || []).map( function(item) {
-      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
-    });
-  },
-
-  setSequence: function(element, new_sequence) {
-    element = $(element);
-    var options = Object.extend(this.options(element), arguments[2] || { });
-    
-    var nodeMap = { };
-    this.findElements(element, options).each( function(n) {
-        if (n.id.match(options.format))
-            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
-        n.parentNode.removeChild(n);
-    });
-   
-    new_sequence.each(function(ident) {
-      var n = nodeMap[ident];
-      if (n) {
-        n[1].appendChild(n[0]);
-        delete nodeMap[ident];
-      }
-    });
-  },
-  
-  serialize: function(element) {
-    element = $(element);
-    var options = Object.extend(Sortable.options(element), arguments[1] || { });
-    var name = encodeURIComponent(
-      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
-    
-    if (options.tree) {
-      return Sortable.tree(element, arguments[1]).children.map( function (item) {
-        return [name + Sortable._constructIndex(item) + "[id]=" + 
-                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
-      }).flatten().join('&');
-    } else {
-      return Sortable.sequence(element, arguments[1]).map( function(item) {
-        return name + "[]=" + encodeURIComponent(item);
-      }).join('&');
-    }
-  }
-}
-
-// Returns true if child is contained within element
-Element.isParent = function(child, element) {
-  if (!child.parentNode || child == element) return false;
-  if (child.parentNode == element) return true;
-  return Element.isParent(child.parentNode, element);
-}
-
-Element.findChildren = function(element, only, recursive, tagName) {   
-  if(!element.hasChildNodes()) return null;
-  tagName = tagName.toUpperCase();
-  if(only) only = [only].flatten();
-  var elements = [];
-  $A(element.childNodes).each( function(e) {
-    if(e.tagName && e.tagName.toUpperCase()==tagName &&
-      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
-        elements.push(e);
-    if(recursive) {
-      var grandchildren = Element.findChildren(e, only, recursive, tagName);
-      if(grandchildren) elements.push(grandchildren);
-    }
-  });
-
-  return (elements.length>0 ? elements.flatten() : []);
-}
-
-Element.offsetSize = function (element, type) {
-  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/effects.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/effects.js
deleted file mode 100644
index 2862f6f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/effects.js
+++ /dev/null
@@ -1,1117 +0,0 @@
-// script.aculo.us effects.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-//  Justin Palmer (http://encytemedia.com/)
-//  Mark Pilgrim (http://diveintomark.org/)
-//  Martin Bialasinki
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/ 
-
-// converts rgb() and #xxx to #xxxxxx format,  
-// returns self (or first argument) if not convertable  
-String.prototype.parseColor = function() {  
-  var color = '#';
-  if (this.slice(0,4) == 'rgb(') {  
-    var cols = this.slice(4,this.length-1).split(',');  
-    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
-  } else {  
-    if (this.slice(0,1) == '#') {  
-      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
-      if (this.length==7) color = this.toLowerCase();  
-    }  
-  }  
-  return (color.length==7 ? color : (arguments[0] || this));  
-};
-
-/*--------------------------------------------------------------------------*/
-
-Element.collectTextNodes = function(element) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
-  }).flatten().join('');
-};
-
-Element.collectTextNodesIgnoreClass = function(element, className) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
-        Element.collectTextNodesIgnoreClass(node, className) : ''));
-  }).flatten().join('');
-};
-
-Element.setContentZoom = function(element, percent) {
-  element = $(element);  
-  element.setStyle({fontSize: (percent/100) + 'em'});   
-  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
-  return element;
-};
-
-Element.getInlineOpacity = function(element){
-  return $(element).style.opacity || '';
-};
-
-Element.forceRerendering = function(element) {
-  try {
-    element = $(element);
-    var n = document.createTextNode(' ');
-    element.appendChild(n);
-    element.removeChild(n);
-  } catch(e) { }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
-  _elementDoesNotExistError: {
-    name: 'ElementDoesNotExistError',
-    message: 'The specified DOM element does not exist, but is required for this effect to operate'
-  },
-  Transitions: {
-    linear: Prototype.K,
-    sinoidal: function(pos) {
-      return (-Math.cos(pos*Math.PI)/2) + 0.5;
-    },
-    reverse: function(pos) {
-      return 1-pos;
-    },
-    flicker: function(pos) {
-      var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
-      return pos > 1 ? 1 : pos;
-    },
-    wobble: function(pos) {
-      return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
-    },
-    pulse: function(pos, pulses) { 
-      pulses = pulses || 5; 
-      return (
-        ((pos % (1/pulses)) * pulses).round() == 0 ? 
-              ((pos * pulses * 2) - (pos * pulses * 2).floor()) : 
-          1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())
-        );
-    },
-    spring: function(pos) { 
-      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); 
-    },
-    none: function(pos) {
-      return 0;
-    },
-    full: function(pos) {
-      return 1;
-    }
-  },
-  DefaultOptions: {
-    duration:   1.0,   // seconds
-    fps:        100,   // 100= assume 66fps max.
-    sync:       false, // true for combining
-    from:       0.0,
-    to:         1.0,
-    delay:      0.0,
-    queue:      'parallel'
-  },
-  tagifyText: function(element) {
-    var tagifyStyle = 'position:relative';
-    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
-    
-    element = $(element);
-    $A(element.childNodes).each( function(child) {
-      if (child.nodeType==3) {
-        child.nodeValue.toArray().each( function(character) {
-          element.insertBefore(
-            new Element('span', {style: tagifyStyle}).update(
-              character == ' ' ? String.fromCharCode(160) : character), 
-              child);
-        });
-        Element.remove(child);
-      }
-    });
-  },
-  multiple: function(element, effect) {
-    var elements;
-    if (((typeof element == 'object') || 
-        Object.isFunction(element)) && 
-       (element.length))
-      elements = element;
-    else
-      elements = $(element).childNodes;
-      
-    var options = Object.extend({
-      speed: 0.1,
-      delay: 0.0
-    }, arguments[2] || { });
-    var masterDelay = options.delay;
-
-    $A(elements).each( function(element, index) {
-      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
-    });
-  },
-  PAIRS: {
-    'slide':  ['SlideDown','SlideUp'],
-    'blind':  ['BlindDown','BlindUp'],
-    'appear': ['Appear','Fade']
-  },
-  toggle: function(element, effect) {
-    element = $(element);
-    effect = (effect || 'appear').toLowerCase();
-    var options = Object.extend({
-      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
-    }, arguments[2] || { });
-    Effect[element.visible() ? 
-      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
-  }
-};
-
-Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create(Enumerable, {
-  initialize: function() {
-    this.effects  = [];
-    this.interval = null;    
-  },
-  _each: function(iterator) {
-    this.effects._each(iterator);
-  },
-  add: function(effect) {
-    var timestamp = new Date().getTime();
-    
-    var position = Object.isString(effect.options.queue) ? 
-      effect.options.queue : effect.options.queue.position;
-    
-    switch(position) {
-      case 'front':
-        // move unstarted effects after this effect  
-        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
-            e.startOn  += effect.finishOn;
-            e.finishOn += effect.finishOn;
-          });
-        break;
-      case 'with-last':
-        timestamp = this.effects.pluck('startOn').max() || timestamp;
-        break;
-      case 'end':
-        // start effect after last queued effect has finished
-        timestamp = this.effects.pluck('finishOn').max() || timestamp;
-        break;
-    }
-    
-    effect.startOn  += timestamp;
-    effect.finishOn += timestamp;
-
-    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
-      this.effects.push(effect);
-    
-    if (!this.interval)
-      this.interval = setInterval(this.loop.bind(this), 15);
-  },
-  remove: function(effect) {
-    this.effects = this.effects.reject(function(e) { return e==effect });
-    if (this.effects.length == 0) {
-      clearInterval(this.interval);
-      this.interval = null;
-    }
-  },
-  loop: function() {
-    var timePos = new Date().getTime();
-    for(var i=0, len=this.effects.length;i<len;i++) 
-      this.effects[i] && this.effects[i].loop(timePos);
-  }
-});
-
-Effect.Queues = {
-  instances: $H(),
-  get: function(queueName) {
-    if (!Object.isString(queueName)) return queueName;
-    
-    if (!this.instances[queueName])
-      this.instances[queueName] = new Effect.ScopedQueue();
-      
-    return this.instances[queueName];
-  }
-};
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.Base = Class.create();
-Effect.Base.prototype = {
-  position: null,
-  start: function(options) {
-    function codeForEvent(options,eventName){
-      return (
-        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
-        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
-      );
-    }
-    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
-    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
-    this.currentFrame = 0;
-    this.state        = 'idle';
-    this.startOn      = this.options.delay*1000;
-    this.finishOn     = this.startOn+(this.options.duration*1000);
-    this.fromToDelta  = this.options.to-this.options.from;
-    this.totalTime    = this.finishOn-this.startOn;
-    this.totalFrames  = this.options.fps*this.options.duration;
-    
-    eval('this.render = function(pos){ '+
-      'if (this.state=="idle"){this.state="running";'+
-      codeForEvent(this.options,'beforeSetup')+
-      (this.setup ? 'this.setup();':'')+ 
-      codeForEvent(this.options,'afterSetup')+
-      '};if (this.state=="running"){'+
-      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
-      'this.position=pos;'+
-      codeForEvent(this.options,'beforeUpdate')+
-      (this.update ? 'this.update(pos);':'')+
-      codeForEvent(this.options,'afterUpdate')+
-      '}}');
-    
-    this.event('beforeStart');
-    if (!this.options.sync)
-      Effect.Queues.get(Object.isString(this.options.queue) ? 
-        'global' : this.options.queue.scope).add(this);
-  },
-  loop: function(timePos) {
-    if (timePos >= this.startOn) {
-      if (timePos >= this.finishOn) {
-        this.render(1.0);
-        this.cancel();
-        this.event('beforeFinish');
-        if (this.finish) this.finish(); 
-        this.event('afterFinish');
-        return;  
-      }
-      var pos   = (timePos - this.startOn) / this.totalTime,
-          frame = (pos * this.totalFrames).round();
-      if (frame > this.currentFrame) {
-        this.render(pos);
-        this.currentFrame = frame;
-      }
-    }
-  },
-  cancel: function() {
-    if (!this.options.sync)
-      Effect.Queues.get(Object.isString(this.options.queue) ? 
-        'global' : this.options.queue.scope).remove(this);
-    this.state = 'finished';
-  },
-  event: function(eventName) {
-    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
-    if (this.options[eventName]) this.options[eventName](this);
-  },
-  inspect: function() {
-    var data = $H();
-    for(property in this)
-      if (!Object.isFunction(this[property])) data[property] = this[property];
-    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
-  }
-};
-
-Effect.Parallel = Class.create(Effect.Base, {
-  initialize: function(effects) {
-    this.effects = effects || [];
-    this.start(arguments[1]);
-  },
-  update: function(position) {
-    this.effects.invoke('render', position);
-  },
-  finish: function(position) {
-    this.effects.each( function(effect) {
-      effect.render(1.0);
-      effect.cancel();
-      effect.event('beforeFinish');
-      if (effect.finish) effect.finish(position);
-      effect.event('afterFinish');
-    });
-  }
-});
-
-Effect.Tween = Class.create(Effect.Base, {
-  initialize: function(object, from, to) {
-    object = Object.isString(object) ? $(object) : object;
-    var args = $A(arguments), method = args.last(), 
-      options = args.length == 5 ? args[3] : null;
-    this.method = Object.isFunction(method) ? method.bind(object) :
-      Object.isFunction(object[method]) ? object[method].bind(object) : 
-      function(value) { object[method] = value };
-    this.start(Object.extend({ from: from, to: to }, options || { }));
-  },
-  update: function(position) {
-    this.method(position);
-  }
-});
-
-Effect.Event = Class.create(Effect.Base, {
-  initialize: function() {
-    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
-  },
-  update: Prototype.emptyFunction
-});
-
-Effect.Opacity = Class.create(Effect.Base, {
-  initialize: function(element) {
-    this.element = $(element);
-    if (!this.element) throw(Effect._elementDoesNotExistError);
-    // make this work on IE on elements without 'layout'
-    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
-      this.element.setStyle({zoom: 1});
-    var options = Object.extend({
-      from: this.element.getOpacity() || 0.0,
-      to:   1.0
-    }, arguments[1] || { });
-    this.start(options);
-  },
-  update: function(position) {
-    this.element.setOpacity(position);
-  }
-});
-
-Effect.Move = Class.create(Effect.Base, {
-  initialize: function(element) {
-    this.element = $(element);
-    if (!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      x:    0,
-      y:    0,
-      mode: 'relative'
-    }, arguments[1] || { });
-    this.start(options);
-  },
-  setup: function() {
-    this.element.makePositioned();
-    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
-    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
-    if (this.options.mode == 'absolute') {
-      this.options.x = this.options.x - this.originalLeft;
-      this.options.y = this.options.y - this.originalTop;
-    }
-  },
-  update: function(position) {
-    this.element.setStyle({
-      left: (this.options.x  * position + this.originalLeft).round() + 'px',
-      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
-    });
-  }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
-  return new Effect.Move(element, 
-    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
-};
-
-Effect.Scale = Class.create(Effect.Base, {
-  initialize: function(element, percent) {
-    this.element = $(element);
-    if (!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      scaleX: true,
-      scaleY: true,
-      scaleContent: true,
-      scaleFromCenter: false,
-      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
-      scaleFrom: 100.0,
-      scaleTo:   percent
-    }, arguments[2] || { });
-    this.start(options);
-  },
-  setup: function() {
-    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
-    this.elementPositioning = this.element.getStyle('position');
-    
-    this.originalStyle = { };
-    ['top','left','width','height','fontSize'].each( function(k) {
-      this.originalStyle[k] = this.element.style[k];
-    }.bind(this));
-      
-    this.originalTop  = this.element.offsetTop;
-    this.originalLeft = this.element.offsetLeft;
-    
-    var fontSize = this.element.getStyle('font-size') || '100%';
-    ['em','px','%','pt'].each( function(fontSizeType) {
-      if (fontSize.indexOf(fontSizeType)>0) {
-        this.fontSize     = parseFloat(fontSize);
-        this.fontSizeType = fontSizeType;
-      }
-    }.bind(this));
-    
-    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-    
-    this.dims = null;
-    if (this.options.scaleMode=='box')
-      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
-    if (/^content/.test(this.options.scaleMode))
-      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
-    if (!this.dims)
-      this.dims = [this.options.scaleMode.originalHeight,
-                   this.options.scaleMode.originalWidth];
-  },
-  update: function(position) {
-    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
-    if (this.options.scaleContent && this.fontSize)
-      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
-    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
-  },
-  finish: function(position) {
-    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
-  },
-  setDimensions: function(height, width) {
-    var d = { };
-    if (this.options.scaleX) d.width = width.round() + 'px';
-    if (this.options.scaleY) d.height = height.round() + 'px';
-    if (this.options.scaleFromCenter) {
-      var topd  = (height - this.dims[0])/2;
-      var leftd = (width  - this.dims[1])/2;
-      if (this.elementPositioning == 'absolute') {
-        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
-        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
-      } else {
-        if (this.options.scaleY) d.top = -topd + 'px';
-        if (this.options.scaleX) d.left = -leftd + 'px';
-      }
-    }
-    this.element.setStyle(d);
-  }
-});
-
-Effect.Highlight = Class.create(Effect.Base, {
-  initialize: function(element) {
-    this.element = $(element);
-    if (!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
-    this.start(options);
-  },
-  setup: function() {
-    // Prevent executing on elements not in the layout flow
-    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
-    // Disable background image during the effect
-    this.oldStyle = { };
-    if (!this.options.keepBackgroundImage) {
-      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
-      this.element.setStyle({backgroundImage: 'none'});
-    }
-    if (!this.options.endcolor)
-      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
-    if (!this.options.restorecolor)
-      this.options.restorecolor = this.element.getStyle('background-color');
-    // init color calculations
-    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
-    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
-  },
-  update: function(position) {
-    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
-      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
-  },
-  finish: function() {
-    this.element.setStyle(Object.extend(this.oldStyle, {
-      backgroundColor: this.options.restorecolor
-    }));
-  }
-});
-
-Effect.ScrollTo = function(element) {
-  var options = arguments[1] || { },
-    scrollOffsets = document.viewport.getScrollOffsets(),
-    elementOffsets = $(element).cumulativeOffset(),
-    max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();  
-
-  if (options.offset) elementOffsets[1] += options.offset;
-
-  return new Effect.Tween(null,
-    scrollOffsets.top,
-    elementOffsets[1] > max ? max : elementOffsets[1],
-    options,
-    function(p){ scrollTo(scrollOffsets.left, p.round()) }
-  );
-};
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  var options = Object.extend({
-    from: element.getOpacity() || 1.0,
-    to:   0.0,
-    afterFinishInternal: function(effect) { 
-      if (effect.options.to!=0) return;
-      effect.element.hide().setStyle({opacity: oldOpacity}); 
-    }
-  }, arguments[1] || { });
-  return new Effect.Opacity(element,options);
-};
-
-Effect.Appear = function(element) {
-  element = $(element);
-  var options = Object.extend({
-  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
-  to:   1.0,
-  // force Safari to render floated elements properly
-  afterFinishInternal: function(effect) {
-    effect.element.forceRerendering();
-  },
-  beforeSetup: function(effect) {
-    effect.element.setOpacity(effect.options.from).show(); 
-  }}, arguments[1] || { });
-  return new Effect.Opacity(element,options);
-};
-
-Effect.Puff = function(element) {
-  element = $(element);
-  var oldStyle = { 
-    opacity: element.getInlineOpacity(), 
-    position: element.getStyle('position'),
-    top:  element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height
-  };
-  return new Effect.Parallel(
-   [ new Effect.Scale(element, 200, 
-      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
-     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
-     Object.extend({ duration: 1.0, 
-      beforeSetupInternal: function(effect) {
-        Position.absolutize(effect.effects[0].element)
-      },
-      afterFinishInternal: function(effect) {
-         effect.effects[0].element.hide().setStyle(oldStyle); }
-     }, arguments[1] || { })
-   );
-};
-
-Effect.BlindUp = function(element) {
-  element = $(element);
-  element.makeClipping();
-  return new Effect.Scale(element, 0,
-    Object.extend({ scaleContent: false, 
-      scaleX: false, 
-      restoreAfterFinish: true,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping();
-      } 
-    }, arguments[1] || { })
-  );
-};
-
-Effect.BlindDown = function(element) {
-  element = $(element);
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false,
-    scaleFrom: 0,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping();
-    }
-  }, arguments[1] || { }));
-};
-
-Effect.SwitchOff = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  return new Effect.Appear(element, Object.extend({
-    duration: 0.4,
-    from: 0,
-    transition: Effect.Transitions.flicker,
-    afterFinishInternal: function(effect) {
-      new Effect.Scale(effect.element, 1, { 
-        duration: 0.3, scaleFromCenter: true,
-        scaleX: false, scaleContent: false, restoreAfterFinish: true,
-        beforeSetup: function(effect) { 
-          effect.element.makePositioned().makeClipping();
-        },
-        afterFinishInternal: function(effect) {
-          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
-        }
-      })
-    }
-  }, arguments[1] || { }));
-};
-
-Effect.DropOut = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left'),
-    opacity: element.getInlineOpacity() };
-  return new Effect.Parallel(
-    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
-      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
-    Object.extend(
-      { duration: 0.5,
-        beforeSetup: function(effect) {
-          effect.effects[0].element.makePositioned(); 
-        },
-        afterFinishInternal: function(effect) {
-          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
-        } 
-      }, arguments[1] || { }));
-};
-
-Effect.Shake = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left') };
-    return new Effect.Move(element, 
-      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-        effect.element.undoPositioned().setStyle(oldStyle);
-  }}) }}) }}) }}) }}) }});
-};
-
-Effect.SlideDown = function(element) {
-  element = $(element).cleanWhitespace();
-  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
-  var oldInnerBottom = element.down().getStyle('bottom');
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false, 
-    scaleFrom: window.opera ? 0 : 1,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if (window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping().undoPositioned();
-      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
-    }, arguments[1] || { })
-  );
-};
-
-Effect.SlideUp = function(element) {
-  element = $(element).cleanWhitespace();
-  var oldInnerBottom = element.down().getStyle('bottom');
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, window.opera ? 0 : 1,
-   Object.extend({ scaleContent: false, 
-    scaleX: false, 
-    scaleMode: 'box',
-    scaleFrom: 100,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if (window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().show();
-    },  
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' });
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping().undoPositioned();
-      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
-    }
-   }, arguments[1] || { })
-  );
-};
-
-// Bug in opera makes the TD containing this element expand for a instance after finish 
-Effect.Squish = function(element) {
-  return new Effect.Scale(element, window.opera ? 1 : 0, { 
-    restoreAfterFinish: true,
-    beforeSetup: function(effect) {
-      effect.element.makeClipping(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping(); 
-    }
-  });
-};
-
-Effect.Grow = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.full
-  }, arguments[1] || { });
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();    
-  var initialMoveX, initialMoveY;
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      initialMoveX = initialMoveY = moveX = moveY = 0; 
-      break;
-    case 'top-right':
-      initialMoveX = dims.width;
-      initialMoveY = moveY = 0;
-      moveX = -dims.width;
-      break;
-    case 'bottom-left':
-      initialMoveX = moveX = 0;
-      initialMoveY = dims.height;
-      moveY = -dims.height;
-      break;
-    case 'bottom-right':
-      initialMoveX = dims.width;
-      initialMoveY = dims.height;
-      moveX = -dims.width;
-      moveY = -dims.height;
-      break;
-    case 'center':
-      initialMoveX = dims.width / 2;
-      initialMoveY = dims.height / 2;
-      moveX = -dims.width / 2;
-      moveY = -dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Move(element, {
-    x: initialMoveX,
-    y: initialMoveY,
-    duration: 0.01, 
-    beforeSetup: function(effect) {
-      effect.element.hide().makeClipping().makePositioned();
-    },
-    afterFinishInternal: function(effect) {
-      new Effect.Parallel(
-        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
-          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
-          new Effect.Scale(effect.element, 100, {
-            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
-            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
-        ], Object.extend({
-             beforeSetup: function(effect) {
-               effect.effects[0].element.setStyle({height: '0px'}).show(); 
-             },
-             afterFinishInternal: function(effect) {
-               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
-             }
-           }, options)
-      )
-    }
-  });
-};
-
-Effect.Shrink = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.none
-  }, arguments[1] || { });
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      moveX = moveY = 0;
-      break;
-    case 'top-right':
-      moveX = dims.width;
-      moveY = 0;
-      break;
-    case 'bottom-left':
-      moveX = 0;
-      moveY = dims.height;
-      break;
-    case 'bottom-right':
-      moveX = dims.width;
-      moveY = dims.height;
-      break;
-    case 'center':  
-      moveX = dims.width / 2;
-      moveY = dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Parallel(
-    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
-      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
-      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
-    ], Object.extend({            
-         beforeStartInternal: function(effect) {
-           effect.effects[0].element.makePositioned().makeClipping(); 
-         },
-         afterFinishInternal: function(effect) {
-           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
-       }, options)
-  );
-};
-
-Effect.Pulsate = function(element) {
-  element = $(element);
-  var options    = arguments[1] || { };
-  var oldOpacity = element.getInlineOpacity();
-  var transition = options.transition || Effect.Transitions.sinoidal;
-  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
-  reverser.bind(transition);
-  return new Effect.Opacity(element, 
-    Object.extend(Object.extend({  duration: 2.0, from: 0,
-      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
-    }, options), {transition: reverser}));
-};
-
-Effect.Fold = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height };
-  element.makeClipping();
-  return new Effect.Scale(element, 5, Object.extend({   
-    scaleContent: false,
-    scaleX: false,
-    afterFinishInternal: function(effect) {
-    new Effect.Scale(element, 1, { 
-      scaleContent: false, 
-      scaleY: false,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping().setStyle(oldStyle);
-      } });
-  }}, arguments[1] || { }));
-};
-
-Effect.Morph = Class.create(Effect.Base, {
-  initialize: function(element) {
-    this.element = $(element);
-    if (!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      style: { }
-    }, arguments[1] || { });
-    
-    if (!Object.isString(options.style)) this.style = $H(options.style);
-    else {
-      if (options.style.include(':'))
-        this.style = options.style.parseStyle();
-      else {
-        this.element.addClassName(options.style);
-        this.style = $H(this.element.getStyles());
-        this.element.removeClassName(options.style);
-        var css = this.element.getStyles();
-        this.style = this.style.reject(function(style) {
-          return style.value == css[style.key];
-        });
-        options.afterFinishInternal = function(effect) {
-          effect.element.addClassName(effect.options.style);
-          effect.transforms.each(function(transform) {
-            effect.element.style[transform.style] = '';
-          });
-        }
-      }
-    }
-    this.start(options);
-  },
-  
-  setup: function(){
-    function parseColor(color){
-      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
-      color = color.parseColor();
-      return $R(0,2).map(function(i){
-        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
-      });
-    }
-    this.transforms = this.style.map(function(pair){
-      var property = pair[0], value = pair[1], unit = null;
-
-      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
-        value = value.parseColor();
-        unit  = 'color';
-      } else if (property == 'opacity') {
-        value = parseFloat(value);
-        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
-          this.element.setStyle({zoom: 1});
-      } else if (Element.CSS_LENGTH.test(value)) {
-          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
-          value = parseFloat(components[1]);
-          unit = (components.length == 3) ? components[2] : null;
-      }
-
-      var originalValue = this.element.getStyle(property);
-      return { 
-        style: property.camelize(), 
-        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
-        targetValue: unit=='color' ? parseColor(value) : value,
-        unit: unit
-      };
-    }.bind(this)).reject(function(transform){
-      return (
-        (transform.originalValue == transform.targetValue) ||
-        (
-          transform.unit != 'color' &&
-          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
-        )
-      )
-    });
-  },
-  update: function(position) {
-    var style = { }, transform, i = this.transforms.length;
-    while(i--)
-      style[(transform = this.transforms[i]).style] = 
-        transform.unit=='color' ? '#'+
-          (Math.round(transform.originalValue[0]+
-            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
-          (Math.round(transform.originalValue[1]+
-            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
-          (Math.round(transform.originalValue[2]+
-            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
-        (transform.originalValue +
-          (transform.targetValue - transform.originalValue) * position).toFixed(3) + 
-            (transform.unit === null ? '' : transform.unit);
-    this.element.setStyle(style, true);
-  }
-});
-
-Effect.Transform = Class.create({
-  initialize: function(tracks){
-    this.tracks  = [];
-    this.options = arguments[1] || { };
-    this.addTracks(tracks);
-  },
-  addTracks: function(tracks){
-    tracks.each(function(track){
-      var data = $H(track).values().first();
-      this.tracks.push($H({
-        ids:     $H(track).keys().first(),
-        effect:  Effect.Morph,
-        options: { style: data }
-      }));
-    }.bind(this));
-    return this;
-  },
-  play: function(){
-    return new Effect.Parallel(
-      this.tracks.map(function(track){
-        var elements = [$(track.ids) || $$(track.ids)].flatten();
-        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
-      }).flatten(),
-      this.options
-    );
-  }
-});
-
-Element.CSS_PROPERTIES = $w(
-  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
-  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
-  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
-  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
-  'fontSize fontWeight height left letterSpacing lineHeight ' +
-  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
-  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
-  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
-  'right textIndent top width wordSpacing zIndex');
-  
-Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-
-String.__parseStyleElement = document.createElement('div');
-String.prototype.parseStyle = function(){
-  var style, styleRules = $H();
-  if (Prototype.Browser.WebKit)
-    style = new Element('div',{style:this}).style;
-  else {
-    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
-    style = String.__parseStyleElement.childNodes[0].style;
-  }
-  
-  Element.CSS_PROPERTIES.each(function(property){
-    if (style[property]) styleRules[property] = style[property]; 
-  });
-  
-  if (Prototype.Browser.IE && this.include('opacity'))
-    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
-
-  return styleRules;
-};
-
-if (document.defaultView && document.defaultView.getComputedStyle) {
-  Element.getStyles = function(element) {
-    var css = document.defaultView.getComputedStyle($(element), null);
-    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
-      styles[property] = css[property];
-      return styles;
-    });
-  };
-} else {
-  Element.getStyles = function(element) {
-    element = $(element);
-    var css = element.currentStyle, styles;
-    styles = Element.CSS_PROPERTIES.inject({ }, function(hash, property) {
-      hash[property] = css[property];
-      return hash;
-    });
-    if (!styles.opacity) styles.opacity = element.getOpacity();
-    return styles;
-  };
-};
-
-Effect.Methods = {
-  morph: function(element, style) {
-    element = $(element);
-    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
-    return element;
-  },
-  visualEffect: function(element, effect, options) {
-    element = $(element)
-    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
-    new Effect[klass](element, options);
-    return element;
-  },
-  highlight: function(element, options) {
-    element = $(element);
-    new Effect.Highlight(element, options);
-    return element;
-  }
-};
-
-$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
-  'pulsate shake puff squish switchOff dropOut').each(
-  function(effect) { 
-    Effect.Methods[effect] = function(element, options){
-      element = $(element);
-      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
-      return element;
-    }
-  }
-);
-
-$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( 
-  function(f) { Effect.Methods[f] = Element[f]; }
-);
-
-Element.addMethods(Effect.Methods);
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/prototype.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/prototype.js
deleted file mode 100644
index 30115e5..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/prototype.js
+++ /dev/null
@@ -1,4140 +0,0 @@
-/*  Prototype JavaScript framework, version 1.6.0_rc0
- *  (c) 2005-2007 Sam Stephenson
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://www.prototypejs.org/
- *
- *--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.6.0_rc0',
-
-  Browser: {
-    IE:     !!(window.attachEvent && !window.opera),
-    Opera:  !!window.opera,
-    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
-    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
-    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
-  },
-
-  BrowserFeatures: {
-    XPath: !!document.evaluate,
-    ElementExtensions: !!window.HTMLElement,
-    SpecificElementExtensions:
-      document.createElement('div').__proto__ !==
-       document.createElement('form').__proto__
-  },
-
-  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
-  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
-
-  emptyFunction: function() { },
-  K: function(x) { return x }
-};
-
-if (Prototype.Browser.MobileSafari)
-  Prototype.BrowserFeatures.SpecificElementExtensions = false;
-
-/* Based on Alex Arnell's inheritance implementation. */
-var Class = {
-  create: function() {
-    var parent = null, properties = $A(arguments);
-    if (Object.isFunction(properties[0]))
-      parent = properties.shift();
-
-    function klass() {
-      this.initialize.apply(this, arguments);
-    }
-
-    Object.extend(klass, Class.Methods);
-    klass.superclass = parent;
-    klass.subclasses = [];
-
-    if (parent) {
-      var subclass = function() { };
-      subclass.prototype = parent.prototype;
-      klass.prototype = new subclass;
-      parent.subclasses.push(klass);
-    }
-
-    for (var i = 0; i < properties.length; i++)
-      klass.addMethods(properties[i]);
-
-    if (!klass.prototype.initialize)
-      klass.prototype.initialize = Prototype.emptyFunction;
-
-    klass.prototype.constructor = klass;
-
-    return klass;
-  }
-};
-
-Class.Methods = {
-  addMethods: function(source) {
-    var ancestor = this.superclass && this.superclass.prototype;
-
-    for (var property in source) {
-      var value = source[property];
-      if (ancestor && Object.isFunction(value) &&
-          value.argumentNames().first() == "$super") {
-        var method = value, value = Object.extend((function(m) {
-          return function() { return ancestor[m].apply(this, arguments) };
-        })(property).wrap(method), {
-          valueOf:  function() { return method },
-          toString: function() { return method.toString() }
-        });
-      }
-      this.prototype[property] = value;
-    }
-
-    return this;
-  }
-};
-
-var Abstract = { };
-
-Object.extend = function(destination, source) {
-  for (var property in source)
-    destination[property] = source[property];
-  return destination;
-};
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (object === undefined) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : object.toString();
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  toJSON: function(object) {
-    var type = typeof object;
-    switch (type) {
-      case 'undefined':
-      case 'function':
-      case 'unknown': return;
-      case 'boolean': return object.toString();
-    }
-
-    if (object === null) return 'null';
-    if (object.toJSON) return object.toJSON();
-    if (Object.isElement(object)) return;
-
-    var results = [];
-    for (var property in object) {
-      var value = Object.toJSON(object[property]);
-      if (value !== undefined)
-        results.push(property.toJSON() + ': ' + value);
-    }
-
-    return '{' + results.join(', ') + '}';
-  },
-
-  toHTML: function(object) {
-    return object && object.toHTML ? object.toHTML() : String.interpret(object);
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({ }, object);
-  },
-
-  isElement: function(object) {
-    return object && object.nodeType == 1;
-  },
-
-  isArray: function(object) {
-    return object && object.constructor === Array;
-  },
-
-  isFunction: function(object) {
-    return typeof object == "function";
-  },
-
-  isString: function(object) {
-    return typeof object == "string";
-  },
-
-  isNumber: function(object) {
-    return typeof object == "number";
-  },
-
-  isUndefined: function(object) {
-    return typeof object == "undefined";
-  }
-});
-
-Object.extend(Function.prototype, {
-  argumentNames: function() {
-    var names = this.toString().match(/^[\s\(]*function\s*\((.*?)\)/)[1].split(",").invoke("strip");
-    return names.length == 1 && !names[0] ? [] : names;
-  },
-
-  bind: function() {
-    if (arguments.length < 2 && arguments[0] === undefined) return this;
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function() {
-      return __method.apply(object, args.concat($A(arguments)));
-    }
-  },
-
-  bindAsEventListener: function() {
-    var __method = this, args = $A(arguments), object = args.shift();
-    return function(event) {
-      return __method.apply(object, [event || window.event].concat(args));
-    }
-  },
-
-  curry: function() {
-    if (!arguments.length) return this;
-    var __method = this, args = $A(arguments);
-    return function() {
-      return __method.apply(this, args.concat($A(arguments)));
-    }
-  },
-
-  delay: function() {
-    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
-    return window.setTimeout(function() {
-      return __method.apply(__method, args);
-    }, timeout);
-  },
-
-  wrap: function(wrapper) {
-    var __method = this;
-    return function() {
-      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
-    }
-  },
-
-  methodize: function() {
-    if (this._methodized) return this._methodized;
-    var __method = this;
-    return this._methodized = function() {
-      return __method.apply(null, [this].concat($A(arguments)));
-    };
-  }
-});
-
-Function.prototype.defer = Function.prototype.delay.curry(0.01);
-
-Date.prototype.toJSON = function() {
-  return '"' + this.getUTCFullYear() + '-' +
-    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
-    this.getUTCDate().toPaddedString(2) + 'T' +
-    this.getUTCHours().toPaddedString(2) + ':' +
-    this.getUTCMinutes().toPaddedString(2) + ':' +
-    this.getUTCSeconds().toPaddedString(2) + 'Z"';
-};
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) { }
-    }
-
-    return returnValue;
-  }
-};
-
-RegExp.prototype.match = RegExp.prototype.test;
-
-RegExp.escape = function(str) {
-  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
-};
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create({
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  execute: function() {
-    this.callback(this);
-  },
-
-  stop: function() {
-    if (!this.timer) return;
-    clearInterval(this.timer);
-    this.timer = null;
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.execute();
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-});
-Object.extend(String, {
-  interpret: function(value) {
-    return value == null ? '' : String(value);
-  },
-  specialChar: {
-    '\b': '\\b',
-    '\t': '\\t',
-    '\n': '\\n',
-    '\f': '\\f',
-    '\r': '\\r',
-    '\\': '\\\\'
-  }
-});
-
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
-    var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
-
-    while (source.length > 0) {
-      if (match = source.match(pattern)) {
-        result += source.slice(0, match.index);
-        result += String.interpret(replacement(match));
-        source  = source.slice(match.index + match[0].length);
-      } else {
-        result += source, source = '';
-      }
-    }
-    return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
-    count = count === undefined ? 1 : count;
-
-    return this.gsub(pattern, function(match) {
-      if (--count < 0) return match[0];
-      return replacement(match);
-    });
-  },
-
-  scan: function(pattern, iterator) {
-    this.gsub(pattern, iterator);
-    return String(this);
-  },
-
-  truncate: function(length, truncation) {
-    length = length || 30;
-    truncation = truncation === undefined ? '...' : truncation;
-    return this.length > length ?
-      this.slice(0, length - truncation.length) + truncation : String(this);
-  },
-
-  strip: function() {
-    return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var self = arguments.callee;
-    self.text.data = this;
-    return self.div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = new Element('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
-    var match = this.strip().match(/([^?#]*)(#.*)?$/);
-    if (!match) return { };
-
-    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
-      if ((pair = pair.split('='))[0]) {
-        var key = decodeURIComponent(pair.shift());
-        var value = pair.length > 1 ? pair.join('=') : pair[0];
-        if (value != undefined) value = decodeURIComponent(value);
-
-        if (key in hash) {
-          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
-          hash[key].push(value);
-        }
-        else hash[key] = value;
-      }
-      return hash;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  succ: function() {
-    return this.slice(0, this.length - 1) +
-      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  times: function(count) {
-    var result = '';
-    for (var i = 0; i < count; i++) result += this;
-    return result;
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function() {
-    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
-      var character = String.specialChar[match[0]];
-      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
-    });
-    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
-    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  },
-
-  toJSON: function() {
-    return this.inspect(true);
-  },
-
-  unfilterJSON: function(filter) {
-    return this.sub(filter || Prototype.JSONFilter, '#{1}');
-  },
-
-  isJSON: function() {
-    var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
-    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
-  },
-
-  evalJSON: function(sanitize) {
-    var json = this.unfilterJSON();
-    try {
-      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
-    } catch (e) { }
-    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
-  },
-
-  include: function(pattern) {
-    return this.indexOf(pattern) > -1;
-  },
-
-  startsWith: function(pattern) {
-    return this.indexOf(pattern) === 0;
-  },
-
-  endsWith: function(pattern) {
-    var d = this.length - pattern.length;
-    return d >= 0 && this.lastIndexOf(pattern) === d;
-  },
-
-  empty: function() {
-    return this == '';
-  },
-
-  blank: function() {
-    return /^\s*$/.test(this);
-  },
-
-  interpolate: function(object, pattern) {
-    return new Template(this, pattern).evaluate(object);
-  }
-});
-
-if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
-  escapeHTML: function() {
-    return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
-  },
-  unescapeHTML: function() {
-    return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (Object.isFunction(replacement)) return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-};
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-Object.extend(String.prototype.escapeHTML, {
-  div:  document.createElement('div'),
-  text: document.createTextNode('')
-});
-
-with (String.prototype.escapeHTML) div.appendChild(text);
-
-var Template = Class.create({
-  initialize: function(template, pattern) {
-    this.template = template.toString();
-    this.pattern = pattern || Template.Pattern;
-  },
-
-  evaluate: function(object) {
-    if (Object.isFunction(object.toTemplateReplacements))
-      object = object.toTemplateReplacements();
-
-    return this.template.gsub(this.pattern, function(match) {
-      if (object == null) return '';
-
-      var before = match[1] || '';
-      if (before == '\\') return match[2];
-
-      var ctx = object, expr = match[3];
-      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
-      if (match == null) return '';
-
-      while (match != null) {
-        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
-        ctx = ctx[comp];
-        if (null == ctx || '' == match[3]) break;
-        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
-        match = pattern.exec(expr);
-      }
-
-      return before + String.interpret(ctx);
-    }.bind(this));
-  }
-});
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-
-var $break = { };
-
-var Enumerable = {
-  each: function(iterator, context) {
-    var index = 0;
-    iterator = iterator.bind(context);
-    try {
-      this._each(function(value) {
-        iterator(value, index++);
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-    return this;
-  },
-
-  eachSlice: function(number, iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var index = -number, slices = [], array = this.toArray();
-    while ((index += number) < array.length)
-      slices.push(array.slice(index, index+number));
-    return slices.collect(iterator, context);
-  },
-
-  all: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!iterator(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result = false;
-    this.each(function(value, index) {
-      if (result = !!iterator(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var results = [];
-    this.each(function(value, index) {
-      results.push(iterator(value, index));
-    });
-    return results;
-  },
-
-  detect: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(filter, iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var results = [];
-
-    if (Object.isString(filter))
-      filter = new RegExp(filter);
-
-    this.each(function(value, index) {
-      if (filter.match(value))
-        results.push(iterator(value, index));
-    });
-    return results;
-  },
-
-  include: function(object) {
-    if (Object.isFunction(this.indexOf))
-      if (this.indexOf(object) != -1) return true;
-
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
-    fillWith = fillWith === undefined ? null : fillWith;
-    return this.eachSlice(number, function(slice) {
-      while(slice.length < number) slice.push(fillWith);
-      return slice;
-    });
-  },
-
-  inject: function(memo, iterator, context) {
-    iterator = iterator.bind(context);
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.map(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result;
-    this.each(function(value, index) {
-      value = iterator(value, index);
-      if (result == undefined || value >= result)
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var result;
-    this.each(function(value, index) {
-      value = iterator(value, index);
-      if (result == undefined || value < result)
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator, context) {
-    iterator = iterator ? iterator.bind(context) : Prototype.K;
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      (iterator(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator, context) {
-    iterator = iterator.bind(context);
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator, context) {
-    iterator = iterator.bind(context);
-    return this.map(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.map();
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (Object.isFunction(args.last()))
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      return iterator(collections.pluck(index));
-    });
-  },
-
-  size: function() {
-    return this.toArray().length;
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-};
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  filter:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray,
-  every:   Enumerable.all,
-  some:    Enumerable.any
-});
-function $A(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) return iterable.toArray();
-  else {
-    var results = [];
-    for (var i = 0, length = iterable.length; i < length; i++)
-      results.push(iterable[i]);
-    return results;
-  }
-}
-
-if (Prototype.Browser.WebKit) {
-  function $A(iterable) {
-    if (!iterable) return [];
-    if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
-        iterable.toArray) {
-      return iterable.toArray();
-    } else {
-      var results = [];
-      for (var i = 0, length = iterable.length; i < length; i++)
-        results.push(iterable[i]);
-      return results;
-    }
-  }
-}
-
-Array.from = $A;
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(Object.isArray(value) ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function(sorted) {
-    return this.inject([], function(array, value, index) {
-      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
-        array.push(value);
-      return array;
-    });
-  },
-
-  intersect: function(array) {
-    return this.uniq().findAll(function(item) {
-      return array.detect(function(value) { return item === value });
-    });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
-    return this.length;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  },
-
-  toJSON: function() {
-    var results = [];
-    this.each(function(object) {
-      var value = Object.toJSON(object);
-      if (value !== undefined) results.push(value);
-    });
-    return '[' + results.join(', ') + ']';
-  }
-});
-
-// use native browser JS 1.6 implementation if available
-if (Object.isFunction(Array.prototype.forEach))
-  Array.prototype._each = Array.prototype.forEach;
-
-if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
-  i || (i = 0);
-  var length = this.length;
-  if (i < 0) i = length + i;
-  for (; i < length; i++)
-    if (this[i] === item) return i;
-  return -1;
-};
-
-if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
-  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
-  var n = this.slice(0, i).reverse().indexOf(item);
-  return (n < 0) ? n : i - n - 1;
-};
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string) {
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if (Prototype.Browser.Opera){
-  Array.prototype.concat = function() {
-    var array = [];
-    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      if (Object.isArray(arguments[i])) {
-        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
-      } else {
-        array.push(arguments[i]);
-      }
-    }
-    return array;
-  };
-}
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    return this.toPaddedString(2, 16);
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  },
-
-  toPaddedString: function(length, radix) {
-    var string = this.toString(radix || 10);
-    return '0'.times(length - string.length) + string;
-  },
-
-  toJSON: function() {
-    return isFinite(this) ? this.toString() : 'null';
-  }
-});
-
-$w('abs round ceil floor').each(function(method){
-  Number.prototype[method] = Math[method].methodize();
-});
-var Hash = function(object) {
-  if (object instanceof Hash) this.merge(object);
-  else Object.extend(this, object || { });
-};
-
-Object.extend(Hash, {
-  toQueryString: function(obj) {
-    var parts = [];
-    parts.add = arguments.callee.addPair;
-
-    this.prototype._each.call(obj, function(pair) {
-      if (!pair.key) return;
-      var value = pair.value;
-
-      if (value && typeof value == 'object') {
-        if (Object.isArray(value)) value.each(function(value) {
-          parts.add(pair.key, value);
-        });
-        return;
-      }
-      parts.add(pair.key, value);
-    });
-
-    return parts.join('&');
-  },
-
-  toJSON: function(object) {
-    var results = [];
-    this.prototype._each.call(object, function(pair) {
-      var value = Object.toJSON(pair.value);
-      if (value !== undefined) results.push(pair.key.toJSON() + ': ' + value);
-    });
-    return '{' + results.join(', ') + '}';
-  }
-});
-
-Hash.toQueryString.addPair = function(key, value, prefix) {
-  key = encodeURIComponent(key);
-  if (value === undefined) this.push(key);
-  else this.push(key + '=' + (value == null ? '' : encodeURIComponent(value)));
-};
-
-Object.extend(Hash.prototype, Enumerable);
-Object.extend(Hash.prototype, {
-  _each: function(iterator) {
-    for (var key in this) {
-      var value = this[key];
-      if (value && value == Hash.prototype[key]) continue;
-
-      var pair = [key, value];
-      pair.key = key;
-      pair.value = value;
-      iterator(pair);
-    }
-  },
-
-  keys: function() {
-    return this.pluck('key');
-  },
-
-  values: function() {
-    return this.pluck('value');
-  },
-
-  index: function(value) {
-    var match = this.detect(function(pair) {
-      return pair.value === value;
-    });
-    return match && match.key;
-  },
-
-  merge: function(hash) {
-    return $H(hash).inject(this, function(mergedHash, pair) {
-      mergedHash[pair.key] = pair.value;
-      return mergedHash;
-    });
-  },
-
-  remove: function() {
-    var result;
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      var value = this[arguments[i]];
-      if (value !== undefined){
-        if (result === undefined) result = value;
-        else {
-          if (!Object.isArray(result)) result = [result];
-          result.push(value);
-        }
-      }
-      delete this[arguments[i]];
-    }
-    return result;
-  },
-
-  toQueryString: function() {
-    return Hash.toQueryString(this);
-  },
-
-  inspect: function() {
-    return '#<Hash:{' + this.map(function(pair) {
-      return pair.map(Object.inspect).join(': ');
-    }).join(', ') + '}>';
-  },
-
-  toJSON: function() {
-    return Hash.toJSON(this);
-  }
-});
-
-function $H(object) {
-  if (object instanceof Hash) return object;
-  return new Hash(object);
-};
-
-// Safari iterates over shadowed properties
-if (function() {
-  var i = 0, Test = function(value) { this.key = value };
-  Test.prototype.key = 'foo';
-  for (var property in new Test('bar')) i++;
-  return i > 1;
-}()) Hash.prototype._each = function(iterator) {
-  var cache = [];
-  for (var key in this) {
-    var value = this[key];
-    if ((value && value == Hash.prototype[key]) || cache.include(key)) continue;
-    cache.push(key);
-    var pair = [key, value];
-    pair.key = key;
-    pair.value = value;
-    iterator(pair);
-  }
-};
-ObjectRange = Class.create({
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    while (this.include(value)) {
-      iterator(value);
-      value = value.succ();
-    }
-  }
-});
-
-Object.extend(ObjectRange.prototype, Enumerable);
-
-ObjectRange.prototype.include = function(value) {
-  if (value < this.start)
-    return false;
-  if (this.exclusive)
-    return value < this.end;
-  return value <= this.end;
-};
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-};
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new XMLHttpRequest()},
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-};
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responder) {
-    if (!this.include(responder))
-      this.responders.push(responder);
-  },
-
-  unregister: function(responder) {
-    this.responders = this.responders.without(responder);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (Object.isFunction(responder[callback])) {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) { }
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate:   function() { Ajax.activeRequestCount++ },
-  onComplete: function() { Ajax.activeRequestCount-- }
-});
-
-Ajax.Base = Class.create({
-  initialize: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      contentType:  'application/x-www-form-urlencoded',
-      encoding:     'UTF-8',
-      parameters:   '',
-      evalJSON:     true,
-      evalJS:       true
-    };
-    Object.extend(this.options, options || { });
-
-    this.options.method = this.options.method.toLowerCase();
-    if (Object.isString(this.options.parameters))
-      this.options.parameters = this.options.parameters.toQueryParams();
-  }
-});
-
-Ajax.Request = Class.create(Ajax.Base, {
-  _complete: false,
-
-  initialize: function($super, url, options) {
-    $super(options);
-    this.transport = Ajax.getTransport();
-    this.request(url);
-  },
-
-  request: function(url) {
-    this.url = url;
-    this.method = this.options.method;
-    var params = Object.clone(this.options.parameters);
-
-    if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
-      this.method = 'post';
-    }
-
-    this.parameters = params;
-
-    if (params = Hash.toQueryString(params)) {
-      // when GET, append parameters to URL
-      if (this.method == 'get')
-        this.url += (this.url.include('?') ? '&' : '?') + params;
-      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-        params += '&_=';
-    }
-
-    try {
-      var response = new Ajax.Response(this);
-      if (this.options.onCreate) this.options.onCreate(response);
-      Ajax.Responders.dispatch('onCreate', this, response);
-
-      this.transport.open(this.method.toUpperCase(), this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
-
-      this.transport.onreadystatechange = this.onStateChange.bind(this);
-      this.setRequestHeaders();
-
-      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
-      this.transport.send(this.body);
-
-      /* Force Firefox to handle ready state 4 for synchronous requests */
-      if (!this.options.asynchronous && this.transport.overrideMimeType)
-        this.onStateChange();
-
-    }
-    catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState > 1 && !((readyState == 4) && this._complete))
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  setRequestHeaders: function() {
-    var headers = {
-      'X-Requested-With': 'XMLHttpRequest',
-      'X-Prototype-Version': Prototype.Version,
-      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
-    };
-
-    if (this.method == 'post') {
-      headers['Content-type'] = this.options.contentType +
-        (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
-      /* Force "Connection: close" for older Mozilla browsers to work
-       * around a bug where XMLHttpRequest sends an incorrect
-       * Content-length header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType &&
-          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
-            headers['Connection'] = 'close';
-    }
-
-    // user-defined headers
-    if (typeof this.options.requestHeaders == 'object') {
-      var extras = this.options.requestHeaders;
-
-      if (Object.isFunction(extras.push))
-        for (var i = 0, length = extras.length; i < length; i += 2)
-          headers[extras[i]] = extras[i+1];
-      else
-        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
-    }
-
-    for (var name in headers)
-      this.transport.setRequestHeader(name, headers[name]);
-  },
-
-  success: function() {
-    var status = this.getStatus();
-    return !status || (status >= 200 && status < 300);
-  },
-
-  getStatus: function() {
-    try {
-      return this.transport.status || 0;
-    } catch (e) { return 0 }
-  },
-
-  respondToReadyState: function(readyState) {
-    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
-
-    if (state == 'Complete') {
-      try {
-        this._complete = true;
-        (this.options['on' + response.status]
-         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(response, response.headerJSON);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      var contentType = response.getHeader('Content-type');
-      if (this.options.evalJS == 'force'
-          || (this.options.evalJS && contentType
-          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
-        this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
-      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-    }
-  },
-
-  getHeader: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) { return null }
-  },
-
-  evalResponse: function() {
-    try {
-      return eval((this.transport.responseText || '').unfilterJSON());
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Response = Class.create({
-  initialize: function(request){
-    this.request = request;
-    var transport  = this.transport  = request.transport,
-        readyState = this.readyState = transport.readyState;
-
-    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
-      this.status       = this.getStatus();
-      this.statusText   = this.getStatusText();
-      this.responseText = String.interpret(transport.responseText);
-      this.headerJSON   = this.getHeaderJSON();
-    }
-
-    if(readyState == 4) {
-      var xml = transport.responseXML;
-      this.responseXML  = xml === undefined ? null : xml;
-      this.responseJSON = this.getResponseJSON();
-    }
-  },
-
-  status:      0,
-  statusText: '',
-
-  getStatus: Ajax.Request.prototype.getStatus,
-
-  getStatusText: function() {
-    try {
-      return this.transport.statusText || '';
-    } catch (e) { return '' }
-  },
-
-  getHeader: Ajax.Request.prototype.getHeader,
-
-  getAllHeaders: function() {
-    try {
-      return this.getAllResponseHeaders();
-    } catch (e) { return null }
-  },
-
-  getResponseHeader: function(name) {
-    return this.transport.getResponseHeader(name);
-  },
-
-  getAllResponseHeaders: function() {
-    return this.transport.getAllResponseHeaders();
-  },
-
-  getHeaderJSON: function() {
-    var json = this.getHeader('X-JSON');
-    try {
-      return json ? json.evalJSON(this.request.options.sanitizeJSON) : null;
-    } catch (e) {
-      this.request.dispatchException(e);
-    }
-  },
-
-  getResponseJSON: function() {
-    var options = this.request.options;
-    try {
-      if (options.evalJSON == 'force' || (options.evalJSON &&
-          (this.getHeader('Content-type') || '').include('application/json')))
-        return this.transport.responseText.evalJSON(options.sanitizeJSON);
-      return null;
-    } catch (e) {
-      this.request.dispatchException(e);
-    }
-  }
-});
-
-Ajax.Updater = Class.create(Ajax.Request, {
-  initialize: function($super, container, url, options) {
-    this.container = {
-      success: (container.success || container),
-      failure: (container.failure || (container.success ? null : container))
-    };
-
-    options = options || { };
-    var onComplete = options.onComplete;
-    options.onComplete = (function(response, param) {
-      this.updateContent(response.responseText);
-      if (Object.isFunction(onComplete)) onComplete(response, param);
-    }).bind(this);
-
-    $super(url, options);
-  },
-
-  updateContent: function(responseText) {
-    var receiver = this.container[this.success() ? 'success' : 'failure'],
-        options = this.options;
-
-    if (!options.evalScripts) responseText = responseText.stripScripts();
-
-    if (receiver = $(receiver)) {
-      if (options.insertion) {
-        if (Object.isString(options.insertion)) {
-          var insertion = { }; insertion[options.insertion] = responseText;
-          receiver.insert(insertion);
-        }
-        else options.insertion(receiver, responseText);
-      }
-      else receiver.update(responseText);
-    }
-
-    if (this.success()) {
-      if (this.onComplete) this.onComplete.bind(this).defer();
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
-  initialize: function($super, container, url, options) {
-    $super(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = { };
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.options.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(response) {
-    if (this.options.decay) {
-      this.decay = (response.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = response.responseText;
-    }
-    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-function $(element) {
-  if (arguments.length > 1) {
-    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
-      elements.push($(arguments[i]));
-    return elements;
-  }
-  if (Object.isString(element))
-    element = document.getElementById(element);
-  return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
-  document._getElementsByXPath = function(expression, parentElement) {
-    var results = [];
-    var query = document.evaluate(expression, $(parentElement) || document,
-      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-    for (var i = 0, length = query.snapshotLength; i < length; i++)
-      results.push(Element.extend(query.snapshotItem(i)));
-    return results;
-  };
-}
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Node) var Node = { };
-
-if (!Node.ELEMENT_NODE) {
-  // DOM level 2 ECMAScript Language Binding
-  Object.extend(Node, {
-    ELEMENT_NODE: 1,
-    ATTRIBUTE_NODE: 2,
-    TEXT_NODE: 3,
-    CDATA_SECTION_NODE: 4,
-    ENTITY_REFERENCE_NODE: 5,
-    ENTITY_NODE: 6,
-    PROCESSING_INSTRUCTION_NODE: 7,
-    COMMENT_NODE: 8,
-    DOCUMENT_NODE: 9,
-    DOCUMENT_TYPE_NODE: 10,
-    DOCUMENT_FRAGMENT_NODE: 11,
-    NOTATION_NODE: 12
-  });
-}
-
-(function() {
-  var element = this.Element;
-  this.Element = function(tagName, attributes) {
-    attributes = attributes || { };
-    tagName = tagName.toLowerCase();
-    var cache = Element.cache;
-    if (Prototype.Browser.IE && attributes.name) {
-      tagName = '<' + tagName + ' name="' + attributes.name + '">';
-      delete attributes.name;
-      return Element.writeAttribute(document.createElement(tagName), attributes);
-    }
-    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
-    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
-  };
-  Object.extend(this.Element, element || { });
-}).call(window);
-
-Element.cache = { };
-
-Element.Methods = {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function(element) {
-    element = $(element);
-    Element[Element.visible(element) ? 'hide' : 'show'](element);
-    return element;
-  },
-
-  hide: function(element) {
-    $(element).style.display = 'none';
-    return element;
-  },
-
-  show: function(element) {
-    $(element).style.display = '';
-    return element;
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-    return element;
-  },
-
-  update: function(element, content) {
-    element = $(element);
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-    content = Object.toHTML(content);
-    element.innerHTML = content.stripScripts();
-    content.evalScripts.bind(content).defer();
-    return element;
-  },
-
-  replace: function(element, content) {
-    element = $(element);
-    if (content && content.toElement) content = content.toElement();
-    else if (!Object.isElement(content)) {
-      content = Object.toHTML(content);
-      var range = element.ownerDocument.createRange();
-      range.selectNode(element);
-      content.evalScripts.bind(content).defer();
-      content = range.createContextualFragment(content.stripScripts());
-    }
-    element.parentNode.replaceChild(content, element);
-    return element;
-  },
-
-  insert: function(element, insertions) {
-    element = $(element);
-
-    if (Object.isString(insertions) || Object.isNumber(insertions) ||
-        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
-          insertions = {bottom:insertions};
-
-    var content, t, range;
-
-    for (position in insertions) {
-      content  = insertions[position];
-      position = position.toLowerCase();
-      t = Element._insertionTranslations[position];
-
-      if (content && content.toElement) content = content.toElement();
-      if (Object.isElement(content)) {
-        t.insert(element, content);
-        continue;
-      }
-
-      content = Object.toHTML(content);
-
-      range = element.ownerDocument.createRange();
-      t.initializeRange(element, range);
-      t.insert(element, range.createContextualFragment(content.stripScripts()));
-
-      content.evalScripts.bind(content).defer();
-    }
-
-    return element;
-  },
-
-  wrap: function(element, wrapper, attributes) {
-    element = $(element);
-    if (Object.isElement(wrapper))
-      $(wrapper).writeAttribute(attributes || { });
-    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
-    else wrapper = new Element('div', wrapper);
-    if (element.parentNode)
-      element.parentNode.replaceChild(wrapper, element);
-    wrapper.appendChild(element);
-    return wrapper;
-  },
-
-  inspect: function(element) {
-    element = $(element);
-    var result = '<' + element.tagName.toLowerCase();
-    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
-      if (value) result += ' ' + attribute + '=' + value.inspect(true);
-    });
-    return result + '>';
-  },
-
-  recursivelyCollect: function(element, property) {
-    element = $(element);
-    var elements = [];
-    while (element = element[property])
-      if (element.nodeType == 1)
-        elements.push(Element.extend(element));
-    return elements;
-  },
-
-  ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
-  },
-
-  descendants: function(element) {
-    return $A($(element).getElementsByTagName('*')).each(Element.extend);
-  },
-
-  firstDescendant: function(element) {
-    element = $(element).firstChild;
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    return $(element);
-  },
-
-  immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
-  },
-
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
-  },
-
-  nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
-  },
-
-  siblings: function(element) {
-    element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
-  },
-
-  match: function(element, selector) {
-    if (Object.isString(selector))
-      selector = new Selector(selector);
-    return selector.match($(element));
-  },
-
-  up: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(element.parentNode);
-    var ancestors = element.ancestors();
-    return expression ? Selector.findElement(ancestors, expression, index) :
-      ancestors[index || 0];
-  },
-
-  down: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return element.firstDescendant();
-    var descendants = element.descendants();
-    return expression ? Selector.findElement(descendants, expression, index) :
-      descendants[index || 0];
-  },
-
-  previous: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
-    var previousSiblings = element.previousSiblings();
-    return expression ? Selector.findElement(previousSiblings, expression, index) :
-      previousSiblings[index || 0];
-  },
-
-  next: function(element, expression, index) {
-    element = $(element);
-    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
-    var nextSiblings = element.nextSiblings();
-    return expression ? Selector.findElement(nextSiblings, expression, index) :
-      nextSiblings[index || 0];
-  },
-
-  select: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
-  },
-
-  adjacent: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element.parentNode, args).without(element);
-  },
-
-  identify: function(element) {
-    element = $(element);
-    var id = element.readAttribute('id'), self = arguments.callee;
-    if (id) return id;
-    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
-    element.writeAttribute('id', id);
-    return id;
-  },
-
-  readAttribute: function(element, name) {
-    element = $(element);
-    if (Prototype.Browser.IE) {
-      var t = Element._attributeTranslations.read;
-      if (t.values[name]) return t.values[name](element, name);
-      if (t.names[name]) name = t.names[name];
-      if (name.include(':')) {
-        return (!element.attributes || !element.attributes[name]) ? null :
-         element.attributes[name].value;
-      }
-    }
-    return element.getAttribute(name);
-  },
-
-  writeAttribute: function(element, name, value) {
-    element = $(element);
-    var attributes = { }, t = Element._attributeTranslations.write;
-
-    if (typeof name == 'object') attributes = name;
-    else attributes[name] = value === undefined ? true : value;
-
-    for (var attr in attributes) {
-      var name = t.names[attr] || attr, value = attributes[attr];
-      if (t.values[attr]) name = t.values[attr](element, value);
-      if (value === false || value === null)
-        element.removeAttribute(name);
-      else if (value === true)
-        element.setAttribute(name, name);
-      else element.setAttribute(name, value);
-    }
-    return element;
-  },
-
-  getHeight: function(element) {
-    return $(element).getDimensions().height;
-  },
-
-  getWidth: function(element) {
-    return $(element).getDimensions().width;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    var elementClassName = element.className;
-    return (elementClassName.length > 0 && (elementClassName == className ||
-      elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))));
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    if (!element.hasClassName(className))
-      element.className += (element.className ? ' ' : '') + className;
-    return element;
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    element.className = element.className.replace(
-      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
-    return element;
-  },
-
-  toggleClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    return element[element.hasClassName(className) ?
-      'removeClassName' : 'addClassName'](className);
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    var node = element.firstChild;
-    while (node) {
-      var nextNode = node.nextSibling;
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        element.removeChild(node);
-      node = nextNode;
-    }
-    return element;
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.blank();
-  },
-
-  descendantOf: function(element, ancestor) {
-    element = $(element), ancestor = $(ancestor);
-    while (element = element.parentNode)
-      if (element == ancestor) return true;
-    return false;
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var pos = element.cumulativeOffset();
-    window.scrollTo(pos[0], pos[1]);
-    return element;
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    style = style == 'float' ? 'cssFloat' : style.camelize();
-    var value = element.style[style];
-    if (!value) {
-      var css = document.defaultView.getComputedStyle(element, null);
-      value = css ? css[style] : null;
-    }
-    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
-    return value == 'auto' ? null : value;
-  },
-
-  getOpacity: function(element) {
-    return $(element).getStyle('opacity');
-  },
-
-  setStyle: function(element, styles) {
-    element = $(element);
-    var elementStyle = element.style, match;
-    if (Object.isString(styles)) {
-      element.style.cssText += ';' + styles;
-      return styles.include('opacity') ?
-        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
-    }
-    for (var property in styles)
-      if (property == 'opacity') element.setOpacity(styles[property]);
-      else
-        elementStyle[(property == 'float' || property == 'cssFloat') ?
-          (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
-            property] = styles[property];
-
-    return element;
-  },
-
-  setOpacity: function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1 || value === '') ? '' :
-      (value < 0.00001) ? 0 : value;
-    return element;
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    var display = $(element).getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-    return element;
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-    return element;
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return element;
-    element._overflow = element.style.overflow || 'auto';
-    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
-      element.style.overflow = 'hidden';
-    return element;
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (!element._overflow) return element;
-    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
-    element._overflow = null;
-    return element;
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if (element.tagName == 'BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'absolute') return;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    var offsets = element.positionedOffset();
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-    return element;
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.getStyle('position') == 'relative') return;
-    // Position.prepare(); // To be done manually by Scripty when it needs it.
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-    return element;
-  },
-
-  cumulativeScrollOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  getOffsetParent: function(element) {
-    if (element.offsetParent) return $(element.offsetParent);
-    if (element == document.body) return $(element);
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return $(element);
-
-    return $(document.body);
-  },
-
-  viewportOffset: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent == document.body &&
-        Element.getStyle(element, 'position') == 'absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return Element._returnOffset(valueL, valueT);
-  },
-
-  clonePosition: function(element, source) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || { });
-
-    // find page position of source
-    source = $(source);
-    var p = source.viewportOffset();
-
-    // find coordinate system to use
-    element = $(element);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(element, 'position') == 'absolute') {
-      parent = element.getOffsetParent();
-      delta = parent.viewportOffset();
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
-    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
-    return element;
-  }
-};
-
-Element.Methods.identify.counter = 1;
-
-Object.extend(Element.Methods, {
-  getElementsBySelector: Element.Methods.select,
-  childElements: Element.Methods.immediateDescendants
-});
-
-Element._attributeTranslations = {
-  write: {
-    names: {
-      className: 'class',
-      htmlFor:   'for'
-    },
-    values: { }
-  }
-};
-
-
-if (!document.createRange || Prototype.Browser.Opera) {
-  Element.Methods.insert = function(element, insertions) {
-    element = $(element);
-
-    if (Object.isString(insertions) || Object.isNumber(insertions) ||
-        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
-          insertions = { bottom: insertions };
-
-    var t = Element._insertionTranslations, content, position, pos, tagName;
-
-    for (position in insertions) {
-      content  = insertions[position];
-      position = position.toLowerCase();
-      pos      = t[position];
-
-      if (content && content.toElement) content = content.toElement();
-      if (Object.isElement(content)) {
-        pos.insert(element, content);
-        continue;
-      }
-
-      content = Object.toHTML(content);
-      tagName = ((position == 'before' || position == 'after')
-        ? element.parentNode : element).tagName.toUpperCase();
-
-      if (t.tags[tagName]) {
-        var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
-        if (position == 'top' || position == 'after') fragments.reverse();
-        fragments.each(pos.insert.curry(element));
-      }
-      else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
-
-      content.evalScripts.bind(content).defer();
-    }
-
-    return element;
-  };
-}
-
-if (Prototype.Browser.Opera) {
-  Element.Methods._getStyle = Element.Methods.getStyle;
-  Element.Methods.getStyle = function(element, style) {
-    switch(style) {
-      case 'left':
-      case 'top':
-      case 'right':
-      case 'bottom':
-        if (Element._getStyle(element, 'position') == 'static') return null;
-      default: return Element._getStyle(element, style);
-    }
-  };
-  Element.Methods._readAttribute = Element.Methods.readAttribute;
-  Element.Methods.readAttribute = function(element, attribute) {
-    if (attribute == 'title') return element.title;
-    return Element._readAttribute(element, attribute);
-  };
-}
-
-else if (Prototype.Browser.IE) {
-  $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
-    Element.Methods[method] = Element.Methods[method].wrap(
-      function(proceed, element) {
-        element = $(element);
-        var position = element.getStyle('position');
-        if (position != 'static') return proceed(element);
-        element.setStyle({ position: 'relative' });
-        var value = proceed(element);
-        element.setStyle({ position: position });
-        return value;
-      }
-    );
-  });
-
-  Element.Methods.getStyle = function(element, style) {
-    element = $(element);
-    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
-    var value = element.style[style];
-    if (!value && element.currentStyle) value = element.currentStyle[style];
-
-    if (style == 'opacity') {
-      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
-        if (value[1]) return parseFloat(value[1]) / 100;
-      return 1.0;
-    }
-
-    if (value == 'auto') {
-      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
-        return element['offset' + style.capitalize()] + 'px';
-      return null;
-    }
-    return value;
-  };
-
-  Element.Methods.setOpacity = function(element, value) {
-    function stripAlpha(filter){
-      return filter.replace(/alpha\([^\)]*\)/gi,'');
-    }
-    element = $(element);
-    if (!element.currentStyle.hasLayout) element.style.zoom = 1;
-    var filter = element.getStyle('filter'), style = element.style;
-    if (value == 1 || value === '') {
-      (filter = stripAlpha(filter)) ?
-        style.filter = filter : style.removeAttribute('filter');
-      return element;
-    } else if (value < 0.00001) value = 0;
-    style.filter = stripAlpha(filter) +
-      'alpha(opacity=' + (value * 100) + ')';
-    return element;
-  };
-
-  Element._attributeTranslations = {
-    read: {
-      names: {
-        'class': 'className',
-        'for':   'htmlFor'
-      },
-      values: {
-        _getAttr: function(element, attribute) {
-          return element.getAttribute(attribute, 2);
-        },
-        _getAttrNode: function(element, attribute) {
-          var node = element.getAttributeNode(attribute);
-          return node ? node.value : "";
-        },
-        _getEv: function(element, attribute) {
-          var attribute = element.getAttribute(attribute);
-          return attribute ? attribute.toString().slice(23, -2) : null;
-        },
-        _flag: function(element, attribute) {
-          return $(element).hasAttribute(attribute) ? attribute : null;
-        },
-        style: function(element) {
-          return element.style.cssText.toLowerCase();
-        },
-        title: function(element) {
-          return element.title;
-        }
-      }
-    }
-  };
-
-  Element._attributeTranslations.write = {
-    names: Object.clone(Element._attributeTranslations.read.names),
-    values: {
-      checked: function(element, value) {
-        element.checked = !!value;
-      },
-
-      style: function(element, value) {
-        element.style.cssText = value ? value : '';
-      }
-    }
-  };
-
-  Element._attributeTranslations.has = {};
-
-  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
-      'encType maxLength readOnly longDesc').each(function(attr) {
-    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
-    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
-  });
-
-  (function(v) {
-    Object.extend(v, {
-      href:        v._getAttr,
-      src:         v._getAttr,
-      type:        v._getAttr,
-      action:      v._getAttrNode,
-      disabled:    v._flag,
-      checked:     v._flag,
-      readonly:    v._flag,
-      multiple:    v._flag,
-      onload:      v._getEv,
-      onunload:    v._getEv,
-      onclick:     v._getEv,
-      ondblclick:  v._getEv,
-      onmousedown: v._getEv,
-      onmouseup:   v._getEv,
-      onmouseover: v._getEv,
-      onmousemove: v._getEv,
-      onmouseout:  v._getEv,
-      onfocus:     v._getEv,
-      onblur:      v._getEv,
-      onkeypress:  v._getEv,
-      onkeydown:   v._getEv,
-      onkeyup:     v._getEv,
-      onsubmit:    v._getEv,
-      onreset:     v._getEv,
-      onselect:    v._getEv,
-      onchange:    v._getEv
-    });
-  })(Element._attributeTranslations.read.values);
-}
-
-else if (Prototype.Browser.Gecko) {
-  Element.Methods.setOpacity = function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1) ? 0.999999 :
-      (value === '') ? '' : (value < 0.00001) ? 0 : value;
-    return element;
-  };
-}
-
-else if (Prototype.Browser.WebKit) {
-  Element.Methods.setOpacity = function(element, value) {
-    element = $(element);
-    element.style.opacity = (value == 1 || value === '') ? '' :
-      (value < 0.00001) ? 0 : value;
-
-    if (value == 1)
-      if(element.tagName == 'IMG' && element.width) {
-        element.width++; element.width--;
-      } else try {
-        var n = document.createTextNode(' ');
-        element.appendChild(n);
-        element.removeChild(n);
-      } catch (e) { }
-
-    return element;
-  };
-
-  // Safari returns margins on body which is incorrect if the child is absolutely
-  // positioned.  For performance reasons, redefine Position.cumulativeOffset for
-  // KHTML/WebKit only.
-  Element.Methods.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return Element._returnOffset(valueL, valueT);
-  };
-}
-
-if (Prototype.Browser.IE || Prototype.Browser.Opera) {
-  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
-  Element.Methods.update = function(element, content) {
-    element = $(element);
-
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) return element.update().insert(content);
-
-    content = Object.toHTML(content);
-    var tagName = element.tagName.toUpperCase();
-
-    if (tagName in Element._insertionTranslations.tags) {
-      $A(element.childNodes).each(function(node) { element.removeChild(node) });
-      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
-        .each(function(node) { element.appendChild(node) });
-    }
-    else element.innerHTML = content.stripScripts();
-
-    content.evalScripts.bind(content).defer();
-    return element;
-  };
-}
-
-if (document.createElement('div').outerHTML) {
-  Element.Methods.replace = function(element, content) {
-    element = $(element);
-
-    if (content && content.toElement) content = content.toElement();
-    if (Object.isElement(content)) {
-      element.parentNode.replaceChild(content, element);
-      return element;
-    }
-
-    content = Object.toHTML(content);
-    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
-
-    if (Element._insertionTranslations.tags[tagName]) {
-      var nextSibling = element.next();
-      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
-      parent.removeChild(element);
-      if (nextSibling)
-        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
-      else
-        fragments.each(function(node) { parent.appendChild(node) });
-    }
-    else element.outerHTML = content.stripScripts();
-
-    content.evalScripts.bind(content).defer();
-    return element;
-  };
-}
-
-Element._returnOffset = function(l, t) {
-  var result = [l, t];
-  result.left = l;
-  result.top = t;
-  return result;
-};
-
-Element._getContentFromAnonymousElement = function(tagName, html) {
-  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
-  div.innerHTML = t[0] + html + t[1];
-  t[2].times(function() { div = div.firstChild });
-  return $A(div.childNodes);
-};
-
-Element._insertionTranslations = {
-  before: {
-    adjacency: 'beforeBegin',
-    insert: function(element, node) {
-      element.parentNode.insertBefore(node, element);
-    },
-    initializeRange: function(element, range) {
-      range.setStartBefore(element);
-    }
-  },
-  top: {
-    adjacency: 'afterBegin',
-    insert: function(element, node) {
-      element.insertBefore(node, element.firstChild);
-    },
-    initializeRange: function(element, range) {
-      range.selectNodeContents(element);
-      range.collapse(true);
-    }
-  },
-  bottom: {
-    adjacency: 'beforeEnd',
-    insert: function(element, node) {
-      element.appendChild(node);
-    }
-  },
-  after: {
-    adjacency: 'afterEnd',
-    insert: function(element, node) {
-      element.parentNode.insertBefore(node, element.nextSibling);
-    },
-    initializeRange: function(element, range) {
-      range.setStartAfter(element);
-    }
-  },
-  tags: {
-    TABLE:  ['<table>',                '</table>',                   1],
-    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
-    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
-    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
-    SELECT: ['<select>',               '</select>',                  1]
-  }
-};
-
-(function() {
-  this.bottom.initializeRange = this.top.initializeRange;
-  Object.extend(this.tags, {
-    THEAD: this.tags.TBODY,
-    TFOOT: this.tags.TBODY,
-    TH:    this.tags.TD
-  });
-}).call(Element._insertionTranslations);
-
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    attribute = Element._attributeTranslations.has[attribute] || attribute;
-    var node = $(element).getAttributeNode(attribute);
-    return node && node.specified;
-  }
-};
-
-Element.Methods.ByTag = { };
-
-Object.extend(Element, Element.Methods);
-
-if (!Prototype.BrowserFeatures.ElementExtensions &&
-    document.createElement('div').__proto__) {
-  window.HTMLElement = { };
-  window.HTMLElement.prototype = document.createElement('div').__proto__;
-  Prototype.BrowserFeatures.ElementExtensions = true;
-}
-
-Element.extend = (function() {
-  if (Prototype.BrowserFeatures.SpecificElementExtensions)
-    return Prototype.K;
-
-  var Methods = { }, ByTag = Element.Methods.ByTag;
-
-  var extend = Object.extend(function(element) {
-    if (!element || element._extendedByPrototype ||
-        element.nodeType != 1 || element == window) return element;
-
-    var methods = Object.clone(Methods),
-      tagName = element.tagName, property, value;
-
-    // extend methods for specific tags
-    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
-
-    for (property in methods) {
-      value = methods[property];
-      if (Object.isFunction(value) && !(property in element))
-        element[property] = value.methodize();
-    }
-
-    element._extendedByPrototype = Prototype.emptyFunction;
-    return element;
-
-  }, {
-    refresh: function() {
-      // extend methods for all tags (Safari doesn't need this)
-      if (!Prototype.BrowserFeatures.ElementExtensions) {
-        Object.extend(Methods, Element.Methods);
-        Object.extend(Methods, Element.Methods.Simulated);
-      }
-    }
-  });
-
-  extend.refresh();
-  return extend;
-})();
-
-Element.hasAttribute = function(element, attribute) {
-  if (element.hasAttribute) return element.hasAttribute(attribute);
-  return Element.Methods.Simulated.hasAttribute(element, attribute);
-};
-
-Element.addMethods = function(methods) {
-  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
-
-  if (!methods) {
-    Object.extend(Form, Form.Methods);
-    Object.extend(Form.Element, Form.Element.Methods);
-    Object.extend(Element.Methods.ByTag, {
-      "FORM":     Object.clone(Form.Methods),
-      "INPUT":    Object.clone(Form.Element.Methods),
-      "SELECT":   Object.clone(Form.Element.Methods),
-      "TEXTAREA": Object.clone(Form.Element.Methods)
-    });
-  }
-
-  if (arguments.length == 2) {
-    var tagName = methods;
-    methods = arguments[1];
-  }
-
-  if (!tagName) Object.extend(Element.Methods, methods || { });
-  else {
-    if (Object.isArray(tagName)) tagName.each(extend);
-    else extend(tagName);
-  }
-
-  function extend(tagName) {
-    tagName = tagName.toUpperCase();
-    if (!Element.Methods.ByTag[tagName])
-      Element.Methods.ByTag[tagName] = { };
-    Object.extend(Element.Methods.ByTag[tagName], methods);
-  }
-
-  function copy(methods, destination, onlyIfAbsent) {
-    onlyIfAbsent = onlyIfAbsent || false;
-    for (var property in methods) {
-      var value = methods[property];
-      if (!Object.isFunction(value)) continue;
-      if (!onlyIfAbsent || !(property in destination))
-        destination[property] = value.methodize();
-    }
-  }
-
-  function findDOMClass(tagName) {
-    var klass;
-    var trans = {
-      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
-      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
-      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
-      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
-      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
-      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
-      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
-      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
-      "FrameSet", "IFRAME": "IFrame"
-    };
-    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
-    if (window[klass]) return window[klass];
-    klass = 'HTML' + tagName + 'Element';
-    if (window[klass]) return window[klass];
-    klass = 'HTML' + tagName.capitalize() + 'Element';
-    if (window[klass]) return window[klass];
-
-    window[klass] = { };
-    window[klass].prototype = document.createElement(tagName).__proto__;
-    return window[klass];
-  }
-
-  if (F.ElementExtensions) {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
-  }
-
-  if (F.SpecificElementExtensions) {
-    for (var tag in Element.Methods.ByTag) {
-      var klass = findDOMClass(tag);
-      if (Object.isUndefined(klass)) continue;
-      copy(T[tag], klass.prototype);
-    }
-  }
-
-  Object.extend(Element, Element.Methods);
-  delete Element.ByTag;
-
-  if (Element.extend.refresh) Element.extend.refresh();
-  Element.cache = { };
-};
-
-document.viewport = {
-  getDimensions: function() {
-    var dimensions = { };
-    $w('width height').each(function(d) {
-      var D = d.capitalize();
-      dimensions[d] = self['inner' + D] ||
-       (document.documentElement['client' + D] || document.body['client' + D]);
-    });
-    return dimensions;
-  },
-
-  getWidth: function() {
-    return this.getDimensions().width;
-  },
-
-  getHeight: function() {
-    return this.getDimensions().height;
-  },
-
-  getScrollOffsets: function() {
-    return Element._returnOffset(
-      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
-      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
-  }
-};
-/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
- * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
- * license.  Please see http://www.yui-ext.com/ for more information. */
-
-var Selector = Class.create({
-  initialize: function(expression) {
-    this.expression = expression.strip();
-    this.compileMatcher();
-  },
-
-  compileMatcher: function() {
-    // Selectors with namespaced attributes can't use the XPath version
-    if (Prototype.BrowserFeatures.XPath && !(/\[[\w-]*?:/).test(this.expression))
-      return this.compileXPathMatcher();
-
-    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
-        c = Selector.criteria, le, p, m;
-
-    if (Selector._cache[e]) {
-      this.matcher = Selector._cache[e];
-      return;
-    }
-
-    this.matcher = ["this.matcher = function(root) {",
-                    "var r = root, h = Selector.handlers, c = false, n;"];
-
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
-    	      new Template(c[i]).evaluate(m));
-          e = e.replace(m[0], '');
-          break;
-        }
-      }
-    }
-
-    this.matcher.push("return h.unique(n);\n}");
-    eval(this.matcher.join('\n'));
-    Selector._cache[this.expression] = this.matcher;
-  },
-
-  compileXPathMatcher: function() {
-    var e = this.expression, ps = Selector.patterns,
-        x = Selector.xpath, le, m;
-
-    if (Selector._cache[e]) {
-      this.xpath = Selector._cache[e]; return;
-    }
-
-    this.matcher = ['.//*'];
-    while (e && le != e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        if (m = e.match(ps[i])) {
-          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
-            new Template(x[i]).evaluate(m));
-          e = e.replace(m[0], '');
-          break;
-        }
-      }
-    }
-
-    this.xpath = this.matcher.join('');
-    Selector._cache[this.expression] = this.xpath;
-  },
-
-  findElements: function(root) {
-    root = root || document;
-    if (this.xpath) return document._getElementsByXPath(this.xpath, root);
-    return this.matcher(root);
-  },
-
-  match: function(element) {
-    this.tokens = [];
-
-    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
-    var le, p, m;
-
-    while (e && le !== e && (/\S/).test(e)) {
-      le = e;
-      for (var i in ps) {
-        p = ps[i];
-        if (m = e.match(p)) {
-          // use the Selector.assertions methods unless the selector
-          // is too complex.
-          if (as[i]) {
-            this.tokens.push([i, Object.clone(m)]);
-            e = e.replace(m[0], '');
-          } else {
-            // reluctantly do a document-wide search
-            // and look for a match in the array
-            return this.findElements(document).include(element);
-          }
-        }
-      }
-    }
-
-    var match = true, name, matches;
-    for (var i = 0, token; token = this.tokens[i]; i++) {
-      name = token[0], matches = token[1];
-      if (!Selector.assertions[name](element, matches)) {
-        match = false; break;
-      }
-    }
-
-    return match;
-  },
-
-  toString: function() {
-    return this.expression;
-  },
-
-  inspect: function() {
-    return "#<Selector:" + this.expression.inspect() + ">";
-  }
-});
-
-Object.extend(Selector, {
-  _cache: { },
-
-  xpath: {
-    descendant:   "//*",
-    child:        "/*",
-    adjacent:     "/following-sibling::*[1]",
-    laterSibling: '/following-sibling::*',
-    tagName:      function(m) {
-      if (m[1] == '*') return '';
-      return "[local-name()='" + m[1].toLowerCase() +
-             "' or local-name()='" + m[1].toUpperCase() + "']";
-    },
-    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
-    id:           "[@id='#{1}']",
-    attrPresence: "[@#{1}]",
-    attr: function(m) {
-      m[3] = m[5] || m[6];
-      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
-    },
-    pseudo: function(m) {
-      var h = Selector.xpath.pseudos[m[1]];
-      if (!h) return '';
-      if (Object.isFunction(h)) return h(m);
-      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
-    },
-    operators: {
-      '=':  "[@#{1}='#{3}']",
-      '!=': "[@#{1}!='#{3}']",
-      '^=': "[starts-with(@#{1}, '#{3}')]",
-      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
-      '*=': "[contains(@#{1}, '#{3}')]",
-      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
-      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
-    },
-    pseudos: {
-      'first-child': '[not(preceding-sibling::*)]',
-      'last-child':  '[not(following-sibling::*)]',
-      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
-      'empty':       "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
-      'checked':     "[@checked]",
-      'disabled':    "[@disabled]",
-      'enabled':     "[not(@disabled)]",
-      'not': function(m) {
-        var e = m[6], p = Selector.patterns,
-            x = Selector.xpath, le, m, v;
-
-        var exclusion = [];
-        while (e && le != e && (/\S/).test(e)) {
-          le = e;
-          for (var i in p) {
-            if (m = e.match(p[i])) {
-              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
-              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
-              e = e.replace(m[0], '');
-              break;
-            }
-          }
-        }
-        return "[not(" + exclusion.join(" and ") + ")]";
-      },
-      'nth-child':      function(m) {
-        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
-      },
-      'nth-last-child': function(m) {
-        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
-      },
-      'nth-of-type':    function(m) {
-        return Selector.xpath.pseudos.nth("position() ", m);
-      },
-      'nth-last-of-type': function(m) {
-        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
-      },
-      'first-of-type':  function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
-      },
-      'last-of-type':   function(m) {
-        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
-      },
-      'only-of-type':   function(m) {
-        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
-      },
-      nth: function(fragment, m) {
-        var mm, formula = m[6], predicate;
-        if (formula == 'even') formula = '2n+0';
-        if (formula == 'odd')  formula = '2n+1';
-        if (mm = formula.match(/^(\d+)$/)) // digit only
-          return '[' + fragment + "= " + mm[1] + ']';
-        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-          if (mm[1] == "-") mm[1] = -1;
-          var a = mm[1] ? Number(mm[1]) : 1;
-          var b = mm[2] ? Number(mm[2]) : 0;
-          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
-          "((#{fragment} - #{b}) div #{a} >= 0)]";
-          return new Template(predicate).evaluate({
-            fragment: fragment, a: a, b: b });
-        }
-      }
-    }
-  },
-
-  criteria: {
-    tagName:      'n = h.tagName(n, r, "#{1}", c);   c = false;',
-    className:    'n = h.className(n, r, "#{1}", c); c = false;',
-    id:           'n = h.id(n, r, "#{1}", c);        c = false;',
-    attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
-    attr: function(m) {
-      m[3] = (m[5] || m[6]);
-      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
-    },
-    pseudo: function(m) {
-      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
-      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
-    },
-    descendant:   'c = "descendant";',
-    child:        'c = "child";',
-    adjacent:     'c = "adjacent";',
-    laterSibling: 'c = "laterSibling";'
-  },
-
-  patterns: {
-    // combinators must be listed first
-    // (and descendant needs to be last combinator)
-    laterSibling: /^\s*~\s*/,
-    child:        /^\s*>\s*/,
-    adjacent:     /^\s*\+\s*/,
-    descendant:   /^\s/,
-
-    // selectors follow
-    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
-    id:           /^#([\w\-\*]+)(\b|$)/,
-    className:    /^\.([\w\-\*]+)(\b|$)/,
-    pseudo:       /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,
-    attrPresence: /^\[([\w]+)\]/,
-    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
-  },
-
-  // for Selector.match and Element#match
-  assertions: {
-    tagName: function(element, matches) {
-      return matches[1].toUpperCase() == element.tagName.toUpperCase();
-    },
-
-    className: function(element, matches) {
-      return Element.hasClassName(element, matches[1]);
-    },
-
-    id: function(element, matches) {
-      return element.id === matches[1];
-    },
-
-    attrPresence: function(element, matches) {
-      return Element.hasAttribute(element, matches[1]);
-    },
-
-    attr: function(element, matches) {
-      var nodeValue = Element.readAttribute(element, matches[1]);
-      return Selector.operators[matches[2]](nodeValue, matches[3]);
-    }
-  },
-
-  handlers: {
-    // UTILITY FUNCTIONS
-    // joins two collections
-    concat: function(a, b) {
-      for (var i = 0, node; node = b[i]; i++)
-        a.push(node);
-      return a;
-    },
-
-    // marks an array of nodes for counting
-    mark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._counted = true;
-      return nodes;
-    },
-
-    unmark: function(nodes) {
-      for (var i = 0, node; node = nodes[i]; i++)
-        node._counted = undefined;
-      return nodes;
-    },
-
-    // mark each child node with its position (for nth calls)
-    // "ofType" flag indicates whether we're indexing for nth-of-type
-    // rather than nth-child
-    index: function(parentNode, reverse, ofType) {
-      parentNode._counted = true;
-      if (reverse) {
-        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
-          var node = nodes[i];
-          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
-        }
-      } else {
-        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
-          if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
-      }
-    },
-
-    // filters out duplicates and extends all nodes
-    unique: function(nodes) {
-      if (nodes.length == 0) return nodes;
-      var results = [], n;
-      for (var i = 0, l = nodes.length; i < l; i++)
-        if (!(n = nodes[i])._counted) {
-          n._counted = true;
-          results.push(Element.extend(n));
-        }
-      return Selector.handlers.unmark(results);
-    },
-
-    // COMBINATOR FUNCTIONS
-    descendant: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, node.getElementsByTagName('*'));
-      return results;
-    },
-
-    child: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
-          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
-      }
-      return results;
-    },
-
-    adjacent: function(nodes) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        var next = this.nextElementSibling(node);
-        if (next) results.push(next);
-      }
-      return results;
-    },
-
-    laterSibling: function(nodes) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        h.concat(results, Element.nextSiblings(node));
-      return results;
-    },
-
-    nextElementSibling: function(node) {
-      while (node = node.nextSibling)
-	      if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    previousElementSibling: function(node) {
-      while (node = node.previousSibling)
-        if (node.nodeType == 1) return node;
-      return null;
-    },
-
-    // TOKEN FUNCTIONS
-    tagName: function(nodes, root, tagName, combinator) {
-      tagName = tagName.toUpperCase();
-      var results = [], h = Selector.handlers;
-      if (nodes) {
-        if (combinator) {
-          // fastlane for ordinary descendant combinators
-          if (combinator == "descendant") {
-            for (var i = 0, node; node = nodes[i]; i++)
-              h.concat(results, node.getElementsByTagName(tagName));
-            return results;
-          } else nodes = this[combinator](nodes);
-          if (tagName == "*") return nodes;
-        }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.tagName.toUpperCase() == tagName) results.push(node);
-        return results;
-      } else return root.getElementsByTagName(tagName);
-    },
-
-    id: function(nodes, root, id, combinator) {
-      var targetNode = $(id), h = Selector.handlers;
-      if (!targetNode) return [];
-      if (!nodes && root == document) return [targetNode];
-      if (nodes) {
-        if (combinator) {
-          if (combinator == 'child') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (targetNode.parentNode == node) return [targetNode];
-          } else if (combinator == 'descendant') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Element.descendantOf(targetNode, node)) return [targetNode];
-          } else if (combinator == 'adjacent') {
-            for (var i = 0, node; node = nodes[i]; i++)
-              if (Selector.handlers.previousElementSibling(targetNode) == node)
-                return [targetNode];
-          } else nodes = h[combinator](nodes);
-        }
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node == targetNode) return [targetNode];
-        return [];
-      }
-      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
-    },
-
-    className: function(nodes, root, className, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      return Selector.handlers.byClassName(nodes, root, className);
-    },
-
-    byClassName: function(nodes, root, className) {
-      if (!nodes) nodes = Selector.handlers.descendant([root]);
-      var needle = ' ' + className + ' ';
-      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
-        nodeClassName = node.className;
-        if (nodeClassName.length == 0) continue;
-        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
-          results.push(node);
-      }
-      return results;
-    },
-
-    attrPresence: function(nodes, root, attr) {
-      var results = [];
-      for (var i = 0, node; node = nodes[i]; i++)
-        if (Element.hasAttribute(node, attr)) results.push(node);
-      return results;
-    },
-
-    attr: function(nodes, root, attr, value, operator) {
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      var handler = Selector.operators[operator], results = [];
-      for (var i = 0, node; node = nodes[i]; i++) {
-        var nodeValue = Element.readAttribute(node, attr);
-        if (nodeValue === null) continue;
-        if (handler(nodeValue, value)) results.push(node);
-      }
-      return results;
-    },
-
-    pseudo: function(nodes, name, value, root, combinator) {
-      if (nodes && combinator) nodes = this[combinator](nodes);
-      if (!nodes) nodes = root.getElementsByTagName("*");
-      return Selector.pseudos[name](nodes, value, root);
-    }
-  },
-
-  pseudos: {
-    'first-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.previousElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'last-child': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        if (Selector.handlers.nextElementSibling(node)) continue;
-          results.push(node);
-      }
-      return results;
-    },
-    'only-child': function(nodes, value, root) {
-      var h = Selector.handlers;
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
-          results.push(node);
-      return results;
-    },
-    'nth-child':        function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root);
-    },
-    'nth-last-child':   function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true);
-    },
-    'nth-of-type':      function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, false, true);
-    },
-    'nth-last-of-type': function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, formula, root, true, true);
-    },
-    'first-of-type':    function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, false, true);
-    },
-    'last-of-type':     function(nodes, formula, root) {
-      return Selector.pseudos.nth(nodes, "1", root, true, true);
-    },
-    'only-of-type':     function(nodes, formula, root) {
-      var p = Selector.pseudos;
-      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
-    },
-
-    // handles the an+b logic
-    getIndices: function(a, b, total) {
-      if (a == 0) return b > 0 ? [b] : [];
-      return $R(1, total).inject([], function(memo, i) {
-        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
-        return memo;
-      });
-    },
-
-    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
-    nth: function(nodes, formula, root, reverse, ofType) {
-      if (nodes.length == 0) return [];
-      if (formula == 'even') formula = '2n+0';
-      if (formula == 'odd')  formula = '2n+1';
-      var h = Selector.handlers, results = [], indexed = [], m;
-      h.mark(nodes);
-      for (var i = 0, node; node = nodes[i]; i++) {
-        if (!node.parentNode._counted) {
-          h.index(node.parentNode, reverse, ofType);
-          indexed.push(node.parentNode);
-        }
-      }
-      if (formula.match(/^\d+$/)) { // just a number
-        formula = Number(formula);
-        for (var i = 0, node; node = nodes[i]; i++)
-          if (node.nodeIndex == formula) results.push(node);
-      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
-        if (m[1] == "-") m[1] = -1;
-        var a = m[1] ? Number(m[1]) : 1;
-        var b = m[2] ? Number(m[2]) : 0;
-        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
-        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
-          for (var j = 0; j < l; j++)
-            if (node.nodeIndex == indices[j]) results.push(node);
-        }
-      }
-      h.unmark(nodes);
-      h.unmark(indexed);
-      return results;
-    },
-
-    'empty': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++) {
-        // IE treats comments as element nodes
-        if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
-        results.push(node);
-      }
-      return results;
-    },
-
-    'not': function(nodes, selector, root) {
-      var h = Selector.handlers, selectorType, m;
-      var exclusions = new Selector(selector).findElements(root);
-      h.mark(exclusions);
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node._counted) results.push(node);
-      h.unmark(exclusions);
-      return results;
-    },
-
-    'enabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (!node.disabled) results.push(node);
-      return results;
-    },
-
-    'disabled': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.disabled) results.push(node);
-      return results;
-    },
-
-    'checked': function(nodes, value, root) {
-      for (var i = 0, results = [], node; node = nodes[i]; i++)
-        if (node.checked) results.push(node);
-      return results;
-    }
-  },
-
-  operators: {
-    '=':  function(nv, v) { return nv == v; },
-    '!=': function(nv, v) { return nv != v; },
-    '^=': function(nv, v) { return nv.startsWith(v); },
-    '$=': function(nv, v) { return nv.endsWith(v); },
-    '*=': function(nv, v) { return nv.include(v); },
-    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
-    '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
-  },
-
-  matchElements: function(elements, expression) {
-    var matches = new Selector(expression).findElements(), h = Selector.handlers;
-    h.mark(matches);
-    for (var i = 0, results = [], element; element = elements[i]; i++)
-      if (element._counted) results.push(element);
-    h.unmark(matches);
-    return results;
-  },
-
-  findElement: function(elements, expression, index) {
-    if (Object.isNumber(expression)) {
-      index = expression; expression = false;
-    }
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    var exprs = expressions.join(','), expressions = [];
-    exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
-      expressions.push(m[1].strip());
-    });
-    var results = [], h = Selector.handlers;
-    for (var i = 0, l = expressions.length, selector; i < l; i++) {
-      selector = new Selector(expressions[i].strip());
-      h.concat(results, selector.findElements(element));
-    }
-    return (l > 1) ? h.unique(results) : results;
-  }
-});
-
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
-  reset: function(form) {
-    $(form).reset();
-    return form;
-  },
-
-  serializeElements: function(elements, options) {
-    if (typeof options != 'object') options = { hash: !!options };
-    else if (options.hash === undefined) options.hash = true;
-    var key, value, submitted = false, submit = options.submit;
-
-    var data = elements.inject({ }, function(result, element) {
-      if (!element.disabled && element.name) {
-        key = element.name; value = $(element).getValue();
-        if (value != null && (element.type != 'submit' || (!submitted &&
-            submit !== false && (!submit || key == submit) && (submitted = true)))) {
-          if (key in result) {
-            // a key is already present; construct an array of values
-            if (!Object.isArray(result[key])) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
-        }
-      }
-      return result;
-    });
-
-    return options.hash ? data : Hash.toQueryString(data);
-  }
-};
-
-Form.Methods = {
-  serialize: function(form, options) {
-    return Form.serializeElements(Form.getElements(form), options);
-  },
-
-  getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name) return $A(inputs).map(Element.extend);
-
-    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) || (name && input.name != name))
-        continue;
-      matchingInputs.push(Element.extend(input));
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    form = $(form);
-    Form.getElements(form).invoke('disable');
-    return form;
-  },
-
-  enable: function(form) {
-    form = $(form);
-    Form.getElements(form).invoke('enable');
-    return form;
-  },
-
-  findFirstElement: function(form) {
-    var elements = $(form).getElements().findAll(function(element) {
-      return 'hidden' != element.type && !element.disabled;
-    });
-    var firstByIndex = elements.findAll(function(element) {
-      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
-    }).sortBy(function(element) { return element.tabIndex }).first();
-
-    return firstByIndex ? firstByIndex : elements.find(function(element) {
-      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    form = $(form);
-    form.findFirstElement().activate();
-    return form;
-  },
-
-  request: function(form, options) {
-    form = $(form), options = Object.clone(options || { });
-
-    var params = options.parameters, action = form.readAttribute('action') || '';
-    if (action.blank()) action = window.location.href;
-    options.parameters = form.serialize(true);
-
-    if (params) {
-      if (Object.isString(params)) params = params.toQueryParams();
-      Object.extend(options.parameters, params);
-    }
-
-    if (form.hasAttribute('method') && !options.method)
-      options.method = form.method;
-
-    return new Ajax.Request(action, options);
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
-  focus: function(element) {
-    $(element).focus();
-    return element;
-  },
-
-  select: function(element) {
-    $(element).select();
-    return element;
-  }
-};
-
-Form.Element.Methods = {
-  serialize: function(element) {
-    element = $(element);
-    if (!element.disabled && element.name) {
-      var value = element.getValue();
-      if (value != undefined) {
-        var pair = { };
-        pair[element.name] = value;
-        return Hash.toQueryString(pair);
-      }
-    }
-    return '';
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    return Form.Element.Serializers[method](element);
-  },
-
-  setValue: function(element, value) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    Form.Element.Serializers[method](element, value);
-    return element;
-  },
-
-  clear: function(element) {
-    $(element).value = '';
-    return element;
-  },
-
-  present: function(element) {
-    return $(element).value != '';
-  },
-
-  activate: function(element) {
-    element = $(element);
-    try {
-      element.focus();
-      if (element.select && (element.tagName.toLowerCase() != 'input' ||
-          !['button', 'reset', 'submit'].include(element.type)))
-        element.select();
-    } catch (e) { }
-    return element;
-  },
-
-  disable: function(element) {
-    element = $(element);
-    element.blur();
-    element.disabled = true;
-    return element;
-  },
-
-  enable: function(element) {
-    element = $(element);
-    element.disabled = false;
-    return element;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Field = Form.Element;
-var $F = Form.Element.Methods.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
-  input: function(element, value) {
-    switch (element.type.toLowerCase()) {
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element, value);
-      default:
-        return Form.Element.Serializers.textarea(element, value);
-    }
-  },
-
-  inputSelector: function(element, value) {
-    if (value === undefined) return element.checked ? element.value : null;
-    else element.checked = !!value;
-  },
-
-  textarea: function(element, value) {
-    if (value === undefined) return element.value;
-    else element.value = value;
-  },
-
-  select: function(element, index) {
-    if (index === undefined)
-      return this[element.type == 'select-one' ?
-        'selectOne' : 'selectMany'](element);
-    else {
-      var opt, value, single = !Object.isArray(index);
-      for (var i = 0, length = element.length; i < length; i++) {
-        opt = element.options[i];
-        value = this.optionValue(opt);
-        if (single) {
-          if (value == index) {
-            opt.selected = true;
-            return;
-          }
-        }
-        else opt.selected = index.include(value);
-      }
-    }
-  },
-
-  selectOne: function(element) {
-    var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
-    var values, length = element.length;
-    if (!length) return null;
-
-    for (var i = 0, values = []; i < length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
-    }
-    return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
-  initialize: function($super, element, frequency, callback) {
-    $super(callback, frequency);
-    this.element   = $(element);
-    this.lastValue = this.getValue();
-  },
-
-  execute: function() {
-    var value = this.getValue();
-    if (Object.isString(this.lastValue) && Object.isString(value) ?
-        this.lastValue != value : String(this.lastValue) != String(value)) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-});
-
-Form.Element.Observer = Class.create(Abstract.TimedObserver, {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create(Abstract.TimedObserver, {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = Class.create({
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    Form.getElements(this.element).each(this.registerCallback, this);
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        default:
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-});
-
-Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create(Abstract.EventObserver, {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) var Event = { };
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-  KEY_INSERT:   45,
-
-  cache: { },
-
-  relatedTarget: function(event) {
-    var element;
-    switch(event.type) {
-      case 'mouseover': element = event.fromElement; break;
-      case 'mouseout':  element = event.toElement;   break;
-      default: return null;
-    }
-    return Element.extend(element);
-  }
-});
-
-Event.Methods = {
-  element: function(event) {
-    var node = event.target;
-    return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
-  },
-
-  findElement: function(event, expression) {
-    var element = Event.element(event);
-    return element.match(expression) ? element : element.up(expression);
-  },
-
-  isLeftClick: function(event) {
-    return (((event.which) && (event.which == 1)) ||
-            ((event.button) && (event.button == 1)));
-  },
-
-  pointer: function(event) {
-    return {
-      x: event.pageX || (event.clientX +
-        (document.documentElement.scrollLeft || document.body.scrollLeft)),
-      y: event.pageY || (event.clientY +
-        (document.documentElement.scrollTop || document.body.scrollTop))
-    };
-  },
-
-  pointerX: function(event) { return Event.pointer(event).x },
-  pointerY: function(event) { return Event.pointer(event).y },
-
-  stop: function(event) {
-    event.preventDefault();
-    event.stopPropagation();
-  }
-};
-
-Event.extend = (function() {
-  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
-    m[name] = Event.Methods[name].methodize();
-    return m;
-  });
-
-  if (Prototype.Browser.IE) {
-    Object.extend(methods, {
-      stopPropagation: function() { this.cancelBubble = true },
-      preventDefault:  function() { this.returnValue = false },
-      inspect: function() { return "[object Event]" }
-    });
-
-    return function(event) {
-      if (!event) return false;
-      if (event._extendedByPrototype) return event;
-
-      event._extendedByPrototype = Prototype.emptyFunction;
-      var pointer = Event.pointer(event);
-      Object.extend(event, {
-        target: event.srcElement,
-        relatedTarget: Event.relatedTarget(event),
-        pageX:  pointer.x,
-        pageY:  pointer.y
-      });
-      return Object.extend(event, methods);
-    };
-
-  } else {
-    Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
-    Object.extend(Event.prototype, methods);
-    return Prototype.K;
-  }
-})();
-
-Object.extend(Event, (function() {
-  var cache = Event.cache;
-
-  function getEventID(element) {
-    if (element._eventID) return element._eventID;
-    arguments.callee.id = arguments.callee.id || 1;
-    return element._eventID = ++arguments.callee.id;
-  }
-
-  function getDOMEventName(eventName) {
-    if (eventName && eventName.match(/:/)) return "dataavailable";
-    return { keypress: "keydown" }[eventName] || eventName;
-  }
-
-  function getCacheForID(id) {
-    return cache[id] = cache[id] || { };
-  }
-
-  function getWrappersForEventName(id, eventName) {
-    var c = getCacheForID(id);
-    return c[eventName] = c[eventName] || [];
-  }
-
-  function createWrapper(element, eventName, handler) {
-    var id = getEventID(element);
-    var c = getWrappersForEventName(id, eventName);
-    if (c.pluck("handler").include(handler)) return false;
-
-    var wrapper = function(event) {
-      if (event.eventName && event.eventName != eventName)
-        return false;
-
-      Event.extend(event);
-      handler.call(element, event)
-    };
-
-    wrapper.handler = handler;
-    c.push(wrapper);
-    return wrapper;
-  }
-
-  function findWrapper(id, eventName, handler) {
-    var c = getWrappersForEventName(id, eventName);
-    return c.find(function(wrapper) { return wrapper.handler == handler });
-  }
-
-  function destroyWrapper(id, eventName, handler) {
-    var c = getCacheForID(id);
-    if (!c[eventName]) return false;
-    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
-  }
-
-  function destroyCache() {
-    for (var id in cache)
-      for (var eventName in cache[id])
-        cache[id][eventName] = null;
-  }
-
-  if (window.attachEvent) {
-    window.attachEvent("onunload", destroyCache);
-  }
-
-  return {
-    observe: function(element, eventName, handler) {
-      element = $(element);
-      var name = getDOMEventName(eventName);
-
-      var wrapper = createWrapper(element, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.addEventListener) {
-        element.addEventListener(name, wrapper, false);
-      } else {
-        element.attachEvent("on" + name, wrapper);
-      }
-
-      return element;
-    },
-
-    stopObserving: function(element, eventName, handler) {
-      element = $(element);
-      var id = getEventID(element), name = getDOMEventName(eventName);
-
-      if (!handler && eventName) {
-        getWrappersForEventName(id, eventName).each(function(wrapper) {
-          element.stopObserving(eventName, wrapper.handler);
-        });
-        return element;
-
-      } else if (!eventName) {
-        Object.keys(getCacheForID(id)).each(function(eventName) {
-          element.stopObserving(eventName);
-        });
-        return element;
-      }
-
-      var wrapper = findWrapper(id, eventName, handler);
-      if (!wrapper) return element;
-
-      if (element.removeEventListener) {
-        element.removeEventListener(name, wrapper, false);
-      } else {
-        element.detachEvent("on" + name, wrapper);
-      }
-
-      destroyWrapper(id, eventName, handler);
-
-      return element;
-    },
-
-    fire: function(element, eventName, memo) {
-      element = $(element);
-      if (element == document && document.createEvent && !element.dispatchEvent)
-        element = document.documentElement;
-
-      if (document.createEvent) {
-        var event = document.createEvent("HTMLEvents");
-        event.initEvent("dataavailable", true, true);
-      } else {
-        var event = document.createEventObject();
-        event.eventType = "ondataavailable";
-      }
-
-      event.eventName = eventName;
-      event.memo = memo || { };
-
-      if (document.createEvent) {
-        element.dispatchEvent(event);
-      } else {
-        element.fireEvent(event.eventType, event);
-      }
-
-      return event;
-    }
-  };
-})());
-
-Object.extend(Event, Event.Methods);
-
-Element.addMethods({
-  fire:          Event.fire,
-  observe:       Event.observe,
-  stopObserving: Event.stopObserving
-});
-
-Object.extend(document, {
-  fire:          Element.Methods.fire.methodize(),
-  observe:       Element.Methods.observe.methodize(),
-  stopObserving: Element.Methods.stopObserving.methodize()
-});
-
-(function() {
-  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
-     Matthias Miller, Dean Edwards and John Resig. */
-
-  var timer, fired = false;
-
-  function fireContentLoadedEvent() {
-    if (fired) return;
-    if (timer) window.clearInterval(timer);
-    document.fire("dom:loaded");
-    fired = true;
-  }
-
-  if (document.addEventListener) {
-    if (Prototype.Browser.WebKit) {
-      timer = window.setInterval(function() {
-        if (/loaded|complete/.test(document.readyState))
-          fireContentLoadedEvent();
-      }, 0);
-
-      Event.observe(window, "load", fireContentLoadedEvent);
-
-    } else {
-      document.addEventListener("DOMContentLoaded",
-        fireContentLoadedEvent, false);
-    }
-
-  } else {
-    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
-    $("__onDOMContentLoaded").onreadystatechange = function() {
-      if (this.readyState == "complete") {
-        this.onreadystatechange = null;
-        fireContentLoadedEvent();
-      }
-    };
-  }
-})();
-/*------------------------------- DEPRECATED -------------------------------*/
-
-var Toggle = { display: Element.toggle };
-
-Element.Methods.childOf = Element.Methods.descendantOf;
-
-var Insertion = {
-  Before: function(element, content) {
-    return Element.insert(element, {before:content});
-  },
-
-  Top: function(element, content) {
-    return Element.insert(element, {top:content});
-  },
-
-  Bottom: function(element, content) {
-    return Element.insert(element, {bottom:content});
-  },
-
-  After: function(element, content) {
-    return Element.insert(element, {after:content});
-  }
-};
-
-var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
-
-// This should be moved to script.aculo.us; notice the deprecated methods
-// further below, that map to the newer Element methods.
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = Element.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = Element.cumulativeScrollOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = Element.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  // Deprecation layer -- use newer Element methods now (1.5.2).
-
-  cumulativeOffset: Element.Methods.cumulativeOffset,
-
-  positionedOffset: Element.Methods.positionedOffset,
-
-  absolutize: function(element) {
-    Position.prepare();
-    return Element.absolutize(element);
-  },
-
-  relativize: function(element) {
-    Position.prepare();
-    return Element.relativize(element);
-  },
-
-  realOffset: Element.Methods.cumulativeScrollOffset,
-
-  offsetParent: Element.Methods.getOffsetParent,
-
-  page: Element.Methods.viewportOffset,
-
-  clone: function(source, target, options) {
-    options = options || { };
-    return Element.clonePosition(target, source, options);
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
-  function iter(name) {
-    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
-  }
-
-  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
-  function(element, className) {
-    className = className.toString().strip();
-    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
-    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
-  } : function(element, className) {
-    className = className.toString().strip();
-    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
-    if (!classNames && !className) return elements;
-
-    var nodes = $(element).getElementsByTagName('*');
-    className = ' ' + className + ' ';
-
-    for (var i = 0, child, cn; child = nodes[i]; i++) {
-      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
-          (classNames && classNames.all(function(name) {
-            return !name.toString().blank() && cn.include(' ' + name + ' ');
-          }))))
-        elements.push(Element.extend(child));
-    }
-    return elements;
-  };
-
-  return function(className, parentElement) {
-    return $(parentElement || document.body).getElementsByClassName(className);
-  };
-}(Element.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set($A(this).concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set($A(this).without(classNameToRemove).join(' '));
-  },
-
-  toString: function() {
-    return $A(this).join(' ');
-  }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-
-/*--------------------------------------------------------------------------*/
-
-Element.addMethods();
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/rspec.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/rspec.js
deleted file mode 100644
index d636096..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/rspec.js
+++ /dev/null
@@ -1,149 +0,0 @@
-var InPlaceEditor = {};
-InPlaceEditor.Local = Class.create();
-Object.extend(Object.extend(InPlaceEditor.Local.prototype, Ajax.InPlaceEditor.prototype), {
-  enterHover: function() {},
-  leaveHover: function() {},
-  onComplete: function() {},
-  handleFormSubmission: function(e) {
-    var value = $F(this._controls.editor);
-    RSpec.addStockStep(value);    
-    this.element.innerHTML = value;
-    this.leaveEditMode();
-    if (e) Event.stop(e);
-  }
-});
-
-var RSpec = {
-  stockSteps: function() {
-    return $('stock_steps').childElements().map(function(li){ 
-      return li.innerHTML;
-    }).sort();
-  },
-  
-  addStockStep: function(stockStep) {
-    if(!this.stockSteps().include(stockStep)) {
-      $('stock_steps').appendChild(Builder.node('li', {}, stockStep));
-    }
-  },
-  
-  makeParamEditors: function() {
-    $$('span.param').each(function(span) {
-      span.removeClassName('param');
-      span.addClassName('param_editor');
-      new InPlaceEditor.Local(span, null, {});
-    });
-  },
-  
-  setId: function(e) {
-    if(!this.currentId) this.currentId = 0;
-    this.currentId++;
-    e.id = "id_" + this.currentId;
-  },
-  
-  applyUi: function() {
-    this.setUpTogglers();
-    this.makeParamEditors();
-
-    var currentId = 0;
-    $$('ul.steps').each(function(ul) {
-      RSpec.setId(ul);
-      var footer = document.createElement("p");
-      var addStepLink = document.createElement("a");
-      addStepLink.href = "#";
-      addStepLink.appendChild(document.createTextNode('Add step'));
-      footer.appendChild(addStepLink);      
-      ul.parentNode.appendChild(footer);
-
-      Sortable.create(ul, {
-        scroll: window
-      });
-
-/*    Disable for now - it messes with the autocomplete's visibility (zIndex galore)  
-      Droppables.add(footer, {
-        hoverclass: 'wastebin',
-        onDrop: function(li, droppable, evt) {
-          li.remove();
-        }
-      });
-*/      
-      Event.observe(addStepLink, 'click', function() {
-        var form = Builder.node('form', {});
-        
-        var li = Builder.node('li', {className: 'new'});
-        var input = Builder.node('input', {}, 'New step here');
-        var autoComplete = Builder.node('div', {className: 'auto_complete'}, '');
-
-        li.appendChild(form);
-        form.appendChild(input);
-        form.appendChild(autoComplete);
-        ul.appendChild(li);
-        Sortable.destroy(ul);
-        Sortable.create(ul);
-
-        Event.observe(form, 'submit', function(e) {
-          var value = input.value;
-          Element.remove(this);
-          li.innerHTML = value.gsub(/(\$[a-z]*)/, '<span class="param">#{1}</span>');
-          RSpec.makeParamEditors();
-          if (e) Event.stop(e);
-        });
-
-        var ac = new Autocompleter.Local(input, autoComplete, RSpec.stockSteps(), {});
-        input.focus();
-      });
-    })
-  },
-  
-  setUpTogglers: function() {
-    $$('dt').each(function(dt) {
-      var dd = dt.parentNode.getElementsByTagName('dd')[0];
-      dt.onclick = function(){
-        dd.toggle();
-      }
-    });
-  }
-};
-
-var StoryDom = {
-  narrativeText: function(s) {
-    return s.split(/\n/m).map(function(line){
-      if(line == "" || line.match(/^\s+$/) ) {
-        return null;
-      } else {
-        return "  " + (line.gsub(/^\s+/, '').gsub(/<br \/>/, "\n").gsub(/<br>/, "\n"));
-      }
-    }).compact().join("");
-  },
-  
-  stepText: function(s) {
-    return s.gsub(/<span[^>]*>([^<]*)<\/span>/, "#{1}");
-  },
-  
-  scenario: function(dl) {
-    var scenario = '  Scenario: ' + dl.getElementsByTagName('dt')[0].innerHTML + '\n';
-    scenario += $A(dl.getElementsByTagName('li')).map(function(li){
-      return '    ' + StoryDom.stepText(li.innerHTML);
-    }).join("\n") + "\n";
-    return scenario;
-  },
-  
-  story: function() {
-    var dl = $$('dl.story')[0];
-    var story = 'Story: ' + dl.getElementsByTagName('dt')[0].innerHTML + '\n\n';
-    story += this.narrativeText(dl.getElementsByTagName('p')[0].innerHTML) + '\n';
-    story += $A(dl.getElementsByTagName('dl')).map(function(scenarioDl){
-      return StoryDom.scenario(scenarioDl);
-    }).join("\n");
-    return story;
-  },
-  
-  save: function() {
-    new Ajax.Request('stories', {
-      postBody: this.story()
-    });
-  }
-};
-
-Event.observe(window, 'load', function() {
-  RSpec.applyUi();
-});
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/scriptaculous.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/scriptaculous.js
deleted file mode 100644
index 4eb84b6..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/scriptaculous.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// script.aculo.us scriptaculous.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// 
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Scriptaculous = {
-  Version: '1.8.0_pre1',
-  require: function(libraryName) {
-    // inserting via DOM fails in Safari 2.0, so brute force approach
-    document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
-  },
-  REQUIRED_PROTOTYPE: '1.6.0',
-  load: function() {
-    function convertVersionString(versionString){
-      var r = versionString.split('.');
-      return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);
-    }
- 
-    if((typeof Prototype=='undefined') || 
-       (typeof Element == 'undefined') || 
-       (typeof Element.Methods=='undefined') ||
-       (convertVersionString(Prototype.Version) < 
-        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
-       throw("script.aculo.us requires the Prototype JavaScript framework >= " +
-        Scriptaculous.REQUIRED_PROTOTYPE);
-    
-    $A(document.getElementsByTagName("script")).findAll( function(s) {
-      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
-    }).each( function(s) {
-      var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
-      var includes = s.src.match(/\?.*load=([a-z,]*)/);
-      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
-       function(include) { Scriptaculous.require(path+include+'.js') });
-    });
-  }
-}
-
-Scriptaculous.load();
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/slider.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/slider.js
deleted file mode 100644
index 46c6673..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/slider.js
+++ /dev/null
@@ -1,276 +0,0 @@
-// script.aculo.us slider.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Marty Haught, Thomas Fuchs 
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if (!Control) var Control = { };
-Control.Slider = Class.create();
-
-// options:
-//  axis: 'vertical', or 'horizontal' (default)
-//
-// callbacks:
-//  onChange(value)
-//  onSlide(value)
-Control.Slider.prototype = {
-  initialize: function(handle, track, options) {
-    var slider = this;
-    
-    if (Object.isArray(handle)) {
-      this.handles = handle.collect( function(e) { return $(e) });
-    } else {
-      this.handles = [$(handle)];
-    }
-    
-    this.track   = $(track);
-    this.options = options || { };
-
-    this.axis      = this.options.axis || 'horizontal';
-    this.increment = this.options.increment || 1;
-    this.step      = parseInt(this.options.step || '1');
-    this.range     = this.options.range || $R(0,1);
-    
-    this.value     = 0; // assure backwards compat
-    this.values    = this.handles.map( function() { return 0 });
-    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
-    this.options.startSpan = $(this.options.startSpan || null);
-    this.options.endSpan   = $(this.options.endSpan || null);
-
-    this.restricted = this.options.restricted || false;
-
-    this.maximum   = this.options.maximum || this.range.end;
-    this.minimum   = this.options.minimum || this.range.start;
-
-    // Will be used to align the handle onto the track, if necessary
-    this.alignX = parseInt(this.options.alignX || '0');
-    this.alignY = parseInt(this.options.alignY || '0');
-    
-    this.trackLength = this.maximumOffset() - this.minimumOffset();
-
-    this.handleLength = this.isVertical() ? 
-      (this.handles[0].offsetHeight != 0 ? 
-        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) : 
-      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : 
-        this.handles[0].style.width.replace(/px$/,""));
-
-    this.active   = false;
-    this.dragging = false;
-    this.disabled = false;
-
-    if (this.options.disabled) this.setDisabled();
-
-    // Allowed values array
-    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
-    if (this.allowedValues) {
-      this.minimum = this.allowedValues.min();
-      this.maximum = this.allowedValues.max();
-    }
-
-    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
-    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-    this.eventMouseMove = this.update.bindAsEventListener(this);
-
-    // Initialize handles in reverse (make sure first handle is active)
-    this.handles.each( function(h,i) {
-      i = slider.handles.length-1-i;
-      slider.setValue(parseFloat(
-        (Object.isArray(slider.options.sliderValue) ? 
-          slider.options.sliderValue[i] : slider.options.sliderValue) || 
-         slider.range.start), i);
-      h.makePositioned().observe("mousedown", slider.eventMouseDown);
-    });
-    
-    this.track.observe("mousedown", this.eventMouseDown);
-    document.observe("mouseup", this.eventMouseUp);
-    document.observe("mousemove", this.eventMouseMove);
-    
-    this.initialized = true;
-  },
-  dispose: function() {
-    var slider = this;    
-    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
-    Event.stopObserving(document, "mouseup", this.eventMouseUp);
-    Event.stopObserving(document, "mousemove", this.eventMouseMove);
-    this.handles.each( function(h) {
-      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
-    });
-  },
-  setDisabled: function(){
-    this.disabled = true;
-  },
-  setEnabled: function(){
-    this.disabled = false;
-  },  
-  getNearestValue: function(value){
-    if (this.allowedValues){
-      if (value >= this.allowedValues.max()) return(this.allowedValues.max());
-      if (value <= this.allowedValues.min()) return(this.allowedValues.min());
-      
-      var offset = Math.abs(this.allowedValues[0] - value);
-      var newValue = this.allowedValues[0];
-      this.allowedValues.each( function(v) {
-        var currentOffset = Math.abs(v - value);
-        if (currentOffset <= offset){
-          newValue = v;
-          offset = currentOffset;
-        } 
-      });
-      return newValue;
-    }
-    if (value > this.range.end) return this.range.end;
-    if (value < this.range.start) return this.range.start;
-    return value;
-  },
-  setValue: function(sliderValue, handleIdx){
-    if (!this.active) {
-      this.activeHandleIdx = handleIdx || 0;
-      this.activeHandle    = this.handles[this.activeHandleIdx];
-      this.updateStyles();
-    }
-    handleIdx = handleIdx || this.activeHandleIdx || 0;
-    if (this.initialized && this.restricted) {
-      if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
-        sliderValue = this.values[handleIdx-1];
-      if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
-        sliderValue = this.values[handleIdx+1];
-    }
-    sliderValue = this.getNearestValue(sliderValue);
-    this.values[handleIdx] = sliderValue;
-    this.value = this.values[0]; // assure backwards compat
-    
-    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = 
-      this.translateToPx(sliderValue);
-    
-    this.drawSpans();
-    if (!this.dragging || !this.event) this.updateFinished();
-  },
-  setValueBy: function(delta, handleIdx) {
-    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, 
-      handleIdx || this.activeHandleIdx || 0);
-  },
-  translateToPx: function(value) {
-    return Math.round(
-      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * 
-      (value - this.range.start)) + "px";
-  },
-  translateToValue: function(offset) {
-    return ((offset/(this.trackLength-this.handleLength) * 
-      (this.range.end-this.range.start)) + this.range.start);
-  },
-  getRange: function(range) {
-    var v = this.values.sortBy(Prototype.K); 
-    range = range || 0;
-    return $R(v[range],v[range+1]);
-  },
-  minimumOffset: function(){
-    return(this.isVertical() ? this.alignY : this.alignX);
-  },
-  maximumOffset: function(){
-    return(this.isVertical() ? 
-      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
-        this.track.style.height.replace(/px$/,"")) - this.alignY : 
-      (this.track.offsetWidth != 0 ? this.track.offsetWidth : 
-        this.track.style.width.replace(/px$/,"")) - this.alignY);
-  },  
-  isVertical:  function(){
-    return (this.axis == 'vertical');
-  },
-  drawSpans: function() {
-    var slider = this;
-    if (this.spans)
-      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
-    if (this.options.startSpan)
-      this.setSpan(this.options.startSpan,
-        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
-    if (this.options.endSpan)
-      this.setSpan(this.options.endSpan, 
-        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
-  },
-  setSpan: function(span, range) {
-    if (this.isVertical()) {
-      span.style.top = this.translateToPx(range.start);
-      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
-    } else {
-      span.style.left = this.translateToPx(range.start);
-      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
-    }
-  },
-  updateStyles: function() {
-    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
-    Element.addClassName(this.activeHandle, 'selected');
-  },
-  startDrag: function(event) {
-    if (Event.isLeftClick(event)) {
-      if (!this.disabled){
-        this.active = true;
-        
-        var handle = Event.element(event);
-        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
-        var track = handle;
-        if (track==this.track) {
-          var offsets  = Position.cumulativeOffset(this.track); 
-          this.event = event;
-          this.setValue(this.translateToValue( 
-           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
-          ));
-          var offsets  = Position.cumulativeOffset(this.activeHandle);
-          this.offsetX = (pointer[0] - offsets[0]);
-          this.offsetY = (pointer[1] - offsets[1]);
-        } else {
-          // find the handle (prevents issues with Safari)
-          while((this.handles.indexOf(handle) == -1) && handle.parentNode) 
-            handle = handle.parentNode;
-            
-          if (this.handles.indexOf(handle)!=-1) {
-            this.activeHandle    = handle;
-            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
-            this.updateStyles();
-            
-            var offsets  = Position.cumulativeOffset(this.activeHandle);
-            this.offsetX = (pointer[0] - offsets[0]);
-            this.offsetY = (pointer[1] - offsets[1]);
-          }
-        }
-      }
-      Event.stop(event);
-    }
-  },
-  update: function(event) {
-   if (this.active) {
-      if (!this.dragging) this.dragging = true;
-      this.draw(event);
-      if (Prototype.Browser.WebKit) window.scrollBy(0,0);
-      Event.stop(event);
-   }
-  },
-  draw: function(event) {
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    var offsets = Position.cumulativeOffset(this.track);
-    pointer[0] -= this.offsetX + offsets[0];
-    pointer[1] -= this.offsetY + offsets[1];
-    this.event = event;
-    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
-    if (this.initialized && this.options.onSlide)
-      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
-  },
-  endDrag: function(event) {
-    if (this.active && this.dragging) {
-      this.finishDrag(event, true);
-      Event.stop(event);
-    }
-    this.active = false;
-    this.dragging = false;
-  },  
-  finishDrag: function(event, success) {
-    this.active = false;
-    this.dragging = false;
-    this.updateFinished();
-  },
-  updateFinished: function() {
-    if (this.initialized && this.options.onChange) 
-      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
-    this.event = null;
-  }
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/sound.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/sound.js
deleted file mode 100644
index 1277b63..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/sound.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// script.aculo.us sound.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Based on code created by Jules Gravinese (http://www.webveteran.com/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-Sound = {
-  tracks: {},
-  _enabled: true,
-  template:
-    new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
-  enable: function(){
-    Sound._enabled = true;
-  },
-  disable: function(){
-    Sound._enabled = false;
-  },
-  play: function(url){
-    if(!Sound._enabled) return;
-    var options = Object.extend({
-      track: 'global', url: url, replace: false
-    }, arguments[1] || {});
-    
-    if(options.replace && this.tracks[options.track]) {
-      $R(0, this.tracks[options.track].id).each(function(id){
-        var sound = $('sound_'+options.track+'_'+id);
-        sound.Stop && sound.Stop();
-        sound.remove();
-      })
-      this.tracks[options.track] = null;
-    }
-      
-    if(!this.tracks[options.track])
-      this.tracks[options.track] = { id: 0 }
-    else
-      this.tracks[options.track].id++;
-      
-    options.id = this.tracks[options.track].id;
-    $$('body')[0].insert( 
-      Prototype.Browser.IE ? new Element('bgsound',{
-        id: 'sound_'+options.track+'_'+options.id,
-        src: options.url, loop: 1, autostart: true
-      }) : Sound.template.evaluate(options));
-  }
-};
-
-if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
-  if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
-    Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>')
-  else
-    Sound.play = function(){}
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/unittest.js b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/unittest.js
deleted file mode 100644
index b5e9005..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/javascripts/unittest.js
+++ /dev/null
@@ -1,568 +0,0 @@
-// script.aculo.us unittest.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
-//           (c) 2005-2007 Michael Schuerig (http://www.schuerig.de/michael/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// experimental, Firefox-only
-Event.simulateMouse = function(element, eventName) {
-  var options = Object.extend({
-    pointerX: 0,
-    pointerY: 0,
-    buttons:  0,
-    ctrlKey:  false,
-    altKey:   false,
-    shiftKey: false,
-    metaKey:  false
-  }, arguments[2] || {});
-  var oEvent = document.createEvent("MouseEvents");
-  oEvent.initMouseEvent(eventName, true, true, document.defaultView, 
-    options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, 
-    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
-  
-  if(this.mark) Element.remove(this.mark);
-  this.mark = document.createElement('div');
-  this.mark.appendChild(document.createTextNode(" "));
-  document.body.appendChild(this.mark);
-  this.mark.style.position = 'absolute';
-  this.mark.style.top = options.pointerY + "px";
-  this.mark.style.left = options.pointerX + "px";
-  this.mark.style.width = "5px";
-  this.mark.style.height = "5px;";
-  this.mark.style.borderTop = "1px solid red;"
-  this.mark.style.borderLeft = "1px solid red;"
-  
-  if(this.step)
-    alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
-  
-  $(element).dispatchEvent(oEvent);
-};
-
-// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
-// You need to downgrade to 1.0.4 for now to get this working
-// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
-Event.simulateKey = function(element, eventName) {
-  var options = Object.extend({
-    ctrlKey: false,
-    altKey: false,
-    shiftKey: false,
-    metaKey: false,
-    keyCode: 0,
-    charCode: 0
-  }, arguments[2] || {});
-
-  var oEvent = document.createEvent("KeyEvents");
-  oEvent.initKeyEvent(eventName, true, true, window, 
-    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
-    options.keyCode, options.charCode );
-  $(element).dispatchEvent(oEvent);
-};
-
-Event.simulateKeys = function(element, command) {
-  for(var i=0; i<command.length; i++) {
-    Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
-  }
-};
-
-var Test = {}
-Test.Unit = {};
-
-// security exception workaround
-Test.Unit.inspect = Object.inspect;
-
-Test.Unit.Logger = Class.create();
-Test.Unit.Logger.prototype = {
-  initialize: function(log) {
-    this.log = $(log);
-    if (this.log) {
-      this._createLogTable();
-    }
-  },
-  start: function(testName) {
-    if (!this.log) return;
-    this.testName = testName;
-    this.lastLogLine = document.createElement('tr');
-    this.statusCell = document.createElement('td');
-    this.nameCell = document.createElement('td');
-    this.nameCell.className = "nameCell";
-    this.nameCell.appendChild(document.createTextNode(testName));
-    this.messageCell = document.createElement('td');
-    this.lastLogLine.appendChild(this.statusCell);
-    this.lastLogLine.appendChild(this.nameCell);
-    this.lastLogLine.appendChild(this.messageCell);
-    this.loglines.appendChild(this.lastLogLine);
-  },
-  finish: function(status, summary) {
-    if (!this.log) return;
-    this.lastLogLine.className = status;
-    this.statusCell.innerHTML = status;
-    this.messageCell.innerHTML = this._toHTML(summary);
-    this.addLinksToResults();
-  },
-  message: function(message) {
-    if (!this.log) return;
-    this.messageCell.innerHTML = this._toHTML(message);
-  },
-  summary: function(summary) {
-    if (!this.log) return;
-    this.logsummary.innerHTML = this._toHTML(summary);
-  },
-  _createLogTable: function() {
-    this.log.innerHTML =
-    '<div id="logsummary"></div>' +
-    '<table id="logtable">' +
-    '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
-    '<tbody id="loglines"></tbody>' +
-    '</table>';
-    this.logsummary = $('logsummary')
-    this.loglines = $('loglines');
-  },
-  _toHTML: function(txt) {
-    return txt.escapeHTML().replace(/\n/g,"<br/>");
-  },
-  addLinksToResults: function(){ 
-    $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
-      td.title = "Run only this test"
-      Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
-    });
-    $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
-      td.title = "Run all tests"
-      Event.observe(td, 'click', function(){ window.location.search = "";});
-    });
-  }
-}
-
-Test.Unit.Runner = Class.create();
-Test.Unit.Runner.prototype = {
-  initialize: function(testcases) {
-    this.options = Object.extend({
-      testLog: 'testlog'
-    }, arguments[1] || {});
-    this.options.resultsURL = this.parseResultsURLQueryParameter();
-    this.options.tests      = this.parseTestsQueryParameter();
-    if (this.options.testLog) {
-      this.options.testLog = $(this.options.testLog) || null;
-    }
-    if(this.options.tests) {
-      this.tests = [];
-      for(var i = 0; i < this.options.tests.length; i++) {
-        if(/^test/.test(this.options.tests[i])) {
-          this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
-        }
-      }
-    } else {
-      if (this.options.test) {
-        this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
-      } else {
-        this.tests = [];
-        for(var testcase in testcases) {
-          if(/^test/.test(testcase)) {
-            this.tests.push(
-               new Test.Unit.Testcase(
-                 this.options.context ? ' -> ' + this.options.titles[testcase] : testcase, 
-                 testcases[testcase], testcases["setup"], testcases["teardown"]
-               ));
-          }
-        }
-      }
-    }
-    this.currentTest = 0;
-    this.logger = new Test.Unit.Logger(this.options.testLog);
-    setTimeout(this.runTests.bind(this), 1000);
-  },
-  parseResultsURLQueryParameter: function() {
-    return window.location.search.parseQuery()["resultsURL"];
-  },
-  parseTestsQueryParameter: function(){
-    if (window.location.search.parseQuery()["tests"]){
-        return window.location.search.parseQuery()["tests"].split(',');
-    };
-  },
-  // Returns:
-  //  "ERROR" if there was an error,
-  //  "FAILURE" if there was a failure, or
-  //  "SUCCESS" if there was neither
-  getResult: function() {
-    var hasFailure = false;
-    for(var i=0;i<this.tests.length;i++) {
-      if (this.tests[i].errors > 0) {
-        return "ERROR";
-      }
-      if (this.tests[i].failures > 0) {
-        hasFailure = true;
-      }
-    }
-    if (hasFailure) {
-      return "FAILURE";
-    } else {
-      return "SUCCESS";
-    }
-  },
-  postResults: function() {
-    if (this.options.resultsURL) {
-      new Ajax.Request(this.options.resultsURL, 
-        { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
-    }
-  },
-  runTests: function() {
-    var test = this.tests[this.currentTest];
-    if (!test) {
-      // finished!
-      this.postResults();
-      this.logger.summary(this.summary());
-      return;
-    }
-    if(!test.isWaiting) {
-      this.logger.start(test.name);
-    }
-    test.run();
-    if(test.isWaiting) {
-      this.logger.message("Waiting for " + test.timeToWait + "ms");
-      setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
-    } else {
-      this.logger.finish(test.status(), test.summary());
-      this.currentTest++;
-      // tail recursive, hopefully the browser will skip the stackframe
-      this.runTests();
-    }
-  },
-  summary: function() {
-    var assertions = 0;
-    var failures = 0;
-    var errors = 0;
-    var messages = [];
-    for(var i=0;i<this.tests.length;i++) {
-      assertions +=   this.tests[i].assertions;
-      failures   +=   this.tests[i].failures;
-      errors     +=   this.tests[i].errors;
-    }
-    return (
-      (this.options.context ? this.options.context + ': ': '') + 
-      this.tests.length + " tests, " + 
-      assertions + " assertions, " + 
-      failures   + " failures, " +
-      errors     + " errors");
-  }
-}
-
-Test.Unit.Assertions = Class.create();
-Test.Unit.Assertions.prototype = {
-  initialize: function() {
-    this.assertions = 0;
-    this.failures   = 0;
-    this.errors     = 0;
-    this.messages   = [];
-  },
-  summary: function() {
-    return (
-      this.assertions + " assertions, " + 
-      this.failures   + " failures, " +
-      this.errors     + " errors" + "\n" +
-      this.messages.join("\n"));
-  },
-  pass: function() {
-    this.assertions++;
-  },
-  fail: function(message) {
-    this.failures++;
-    this.messages.push("Failure: " + message);
-  },
-  info: function(message) {
-    this.messages.push("Info: " + message);
-  },
-  error: function(error) {
-    this.errors++;
-    this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
-  },
-  status: function() {
-    if (this.failures > 0) return 'failed';
-    if (this.errors > 0) return 'error';
-    return 'passed';
-  },
-  assert: function(expression) {
-    var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
-    try { expression ? this.pass() : 
-      this.fail(message); }
-    catch(e) { this.error(e); }
-  },
-  assertEqual: function(expected, actual) {
-    var message = arguments[2] || "assertEqual";
-    try { (expected == actual) ? this.pass() :
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
-        '", actual "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertInspect: function(expected, actual) {
-    var message = arguments[2] || "assertInspect";
-    try { (expected == actual.inspect()) ? this.pass() :
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
-        '", actual "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertEnumEqual: function(expected, actual) {
-    var message = arguments[2] || "assertEnumEqual";
-    try { $A(expected).length == $A(actual).length && 
-      expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
-        this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + 
-          ', actual ' + Test.Unit.inspect(actual)); }
-    catch(e) { this.error(e); }
-  },
-  assertNotEqual: function(expected, actual) {
-    var message = arguments[2] || "assertNotEqual";
-    try { (expected != actual) ? this.pass() : 
-      this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertIdentical: function(expected, actual) { 
-    var message = arguments[2] || "assertIdentical"; 
-    try { (expected === actual) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
-    catch(e) { this.error(e); } 
-  },
-  assertNotIdentical: function(expected, actual) { 
-    var message = arguments[2] || "assertNotIdentical"; 
-    try { !(expected === actual) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
-    catch(e) { this.error(e); } 
-  },
-  assertNull: function(obj) {
-    var message = arguments[1] || 'assertNull'
-    try { (obj==null) ? this.pass() : 
-      this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertMatch: function(expected, actual) {
-    var message = arguments[2] || 'assertMatch';
-    var regex = new RegExp(expected);
-    try { (regex.exec(actual)) ? this.pass() :
-      this.fail(message + ' : regex: "' +  Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertHidden: function(element) {
-    var message = arguments[1] || 'assertHidden';
-    this.assertEqual("none", element.style.display, message);
-  },
-  assertNotNull: function(object) {
-    var message = arguments[1] || 'assertNotNull';
-    this.assert(object != null, message);
-  },
-  assertType: function(expected, actual) {
-    var message = arguments[2] || 'assertType';
-    try { 
-      (actual.constructor == expected) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + (actual.constructor) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertNotOfType: function(expected, actual) {
-    var message = arguments[2] || 'assertNotOfType';
-    try { 
-      (actual.constructor != expected) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + (actual.constructor) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertInstanceOf: function(expected, actual) {
-    var message = arguments[2] || 'assertInstanceOf';
-    try { 
-      (actual instanceof expected) ? this.pass() : 
-      this.fail(message + ": object was not an instance of the expected type"); }
-    catch(e) { this.error(e); } 
-  },
-  assertNotInstanceOf: function(expected, actual) {
-    var message = arguments[2] || 'assertNotInstanceOf';
-    try { 
-      !(actual instanceof expected) ? this.pass() : 
-      this.fail(message + ": object was an instance of the not expected type"); }
-    catch(e) { this.error(e); } 
-  },
-  assertRespondsTo: function(method, obj) {
-    var message = arguments[2] || 'assertRespondsTo';
-    try {
-      (obj[method] && typeof obj[method] == 'function') ? this.pass() : 
-      this.fail(message + ": object doesn't respond to [" + method + "]"); }
-    catch(e) { this.error(e); }
-  },
-  assertReturnsTrue: function(method, obj) {
-    var message = arguments[2] || 'assertReturnsTrue';
-    try {
-      var m = obj[method];
-      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
-      m() ? this.pass() : 
-      this.fail(message + ": method returned false"); }
-    catch(e) { this.error(e); }
-  },
-  assertReturnsFalse: function(method, obj) {
-    var message = arguments[2] || 'assertReturnsFalse';
-    try {
-      var m = obj[method];
-      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
-      !m() ? this.pass() : 
-      this.fail(message + ": method returned true"); }
-    catch(e) { this.error(e); }
-  },
-  assertRaise: function(exceptionName, method) {
-    var message = arguments[2] || 'assertRaise';
-    try { 
-      method();
-      this.fail(message + ": exception expected but none was raised"); }
-    catch(e) {
-      ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e); 
-    }
-  },
-  assertElementsMatch: function() {
-    var expressions = $A(arguments), elements = $A(expressions.shift());
-    if (elements.length != expressions.length) {
-      this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
-      return false;
-    }
-    elements.zip(expressions).all(function(pair, index) {
-      var element = $(pair.first()), expression = pair.last();
-      if (element.match(expression)) return true;
-      this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
-    }.bind(this)) && this.pass();
-  },
-  assertElementMatches: function(element, expression) {
-    this.assertElementsMatch([element], expression);
-  },
-  benchmark: function(operation, iterations) {
-    var startAt = new Date();
-    (iterations || 1).times(operation);
-    var timeTaken = ((new Date())-startAt);
-    this.info((arguments[2] || 'Operation') + ' finished ' + 
-       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
-    return timeTaken;
-  },
-  _isVisible: function(element) {
-    element = $(element);
-    if(!element.parentNode) return true;
-    this.assertNotNull(element);
-    if(element.style && Element.getStyle(element, 'display') == 'none')
-      return false;
-    
-    return this._isVisible(element.parentNode);
-  },
-  assertNotVisible: function(element) {
-    this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
-  },
-  assertVisible: function(element) {
-    this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
-  },
-  benchmark: function(operation, iterations) {
-    var startAt = new Date();
-    (iterations || 1).times(operation);
-    var timeTaken = ((new Date())-startAt);
-    this.info((arguments[2] || 'Operation') + ' finished ' + 
-       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
-    return timeTaken;
-  }
-}
-
-Test.Unit.Testcase = Class.create();
-Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
-  initialize: function(name, test, setup, teardown) {
-    Test.Unit.Assertions.prototype.initialize.bind(this)();
-    this.name           = name;
-    
-    if(typeof test == 'string') {
-      test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
-      test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
-      this.test = function() {
-        eval('with(this){'+test+'}');
-      }
-    } else {
-      this.test = test || function() {};
-    }
-    
-    this.setup          = setup || function() {};
-    this.teardown       = teardown || function() {};
-    this.isWaiting      = false;
-    this.timeToWait     = 1000;
-  },
-  wait: function(time, nextPart) {
-    this.isWaiting = true;
-    this.test = nextPart;
-    this.timeToWait = time;
-  },
-  run: function() {
-    try {
-      try {
-        if (!this.isWaiting) this.setup.bind(this)();
-        this.isWaiting = false;
-        this.test.bind(this)();
-      } finally {
-        if(!this.isWaiting) {
-          this.teardown.bind(this)();
-        }
-      }
-    }
-    catch(e) { this.error(e); }
-  }
-});
-
-// *EXPERIMENTAL* BDD-style testing to please non-technical folk
-// This draws many ideas from RSpec http://rspec.rubyforge.org/
-
-Test.setupBDDExtensionMethods = function(){
-  var METHODMAP = {
-    shouldEqual:     'assertEqual',
-    shouldNotEqual:  'assertNotEqual',
-    shouldEqualEnum: 'assertEnumEqual',
-    shouldBeA:       'assertType',
-    shouldNotBeA:    'assertNotOfType',
-    shouldBeAn:      'assertType',
-    shouldNotBeAn:   'assertNotOfType',
-    shouldBeNull:    'assertNull',
-    shouldNotBeNull: 'assertNotNull',
-    
-    shouldBe:        'assertReturnsTrue',
-    shouldNotBe:     'assertReturnsFalse',
-    shouldRespondTo: 'assertRespondsTo'
-  };
-  var makeAssertion = function(assertion, args, object) { 
-   	this[assertion].apply(this,(args || []).concat([object]));
-  }
-  
-  Test.BDDMethods = {};   
-  $H(METHODMAP).each(function(pair) { 
-    Test.BDDMethods[pair.key] = function() { 
-       var args = $A(arguments); 
-       var scope = args.shift(); 
-       makeAssertion.apply(scope, [pair.value, args, this]); }; 
-  });
-  
-  [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
-    function(p){ Object.extend(p, Test.BDDMethods) }
-  );
-}
-
-Test.context = function(name, spec, log){
-  Test.setupBDDExtensionMethods();
-  
-  var compiledSpec = {};
-  var titles = {};
-  for(specName in spec) {
-    switch(specName){
-      case "setup":
-      case "teardown":
-        compiledSpec[specName] = spec[specName];
-        break;
-      default:
-        var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
-        var body = spec[specName].toString().split('\n').slice(1);
-        if(/^\{/.test(body[0])) body = body.slice(1);
-        body.pop();
-        body = body.map(function(statement){ 
-          return statement.strip()
-        });
-        compiledSpec[testName] = body.join('\n');
-        titles[testName] = specName;
-    }
-  }
-  new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
-};
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/lib/server.rb b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/lib/server.rb
deleted file mode 100644
index b4a58da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/lib/server.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require 'webrick'
-
-class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
-  def do_POST(request, response)
-    File.open('story', 'w') do |io|
-      io.write(request.body)
-    end
-
-    response.status = 200
-    response['Content-Type'] = 'text/html'
-    response.body = "body"
-  end
-end
-
-params = { :Port        => 4000,
-           :ServerType  => WEBrick::SimpleServer,
-           :BindAddress => "0.0.0.0",
-           :MimeTypes   => WEBrick::HTTPUtils::DefaultMimeTypes }
-server = WEBrick::HTTPServer.new(params)
-server.mount('/stories', DispatchServlet)
-server.mount('/', WEBrick::HTTPServlet::FileHandler, File.dirname(__FILE__) + '/..', { :FancyIndexing => true })
-
-trap("INT") { server.shutdown }
-server.start
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stories.html b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stories.html
deleted file mode 100644
index 9d27f32..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stories.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html 
-  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-    <title>Stories</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <meta http-equiv="Expires" content="-1" />
-    <meta http-equiv="Pragma" content="no-cache" />
-    <script src="javascripts/prototype.js" type="text/javascript"></script>
-    <script src="javascripts/scriptaculous.js" type="text/javascript"></script>
-    <script src="javascripts/rspec.js" type="text/javascript"></script>
-    <script src="javascripts/unittest.js" type="text/javascript"></script>
-    
-    <link href="stylesheets/rspec.css" rel="stylesheet" type="text/css" />
-    <link href="stylesheets/test.css" rel="stylesheet" type="text/css" />
-  </head>
-  <body>
-    <!-- 
-    Classes and ids that are only used by the Story UI, which don't have to be present in
-    the Example report:
-    
-    #nav
-    #stock_steps
-    dl.story
-    ul.steps
-    -->
-    <div id="nav">
-      <a href="#" onclick="javascript:StoryDom.save();">SAVE</a>
-    </div>
-    <div id="container">
-      <ul id="stock_steps" style="display: none;">
-        <li>Given my savings account balance is $balance dollars</li>
-        <li>Given my cash account balance is $balance dollars</li>
-        <li>Given my $which account has been blocked for $n days</li>
-        <li>When I transfer $amount dollars</li>
-        <li>Then my savings account balance should be $balance dollars</li>
-        <li>Then my cash account balance should be $balance dollars</li>
-      </ul>
-      <dl class="story failed">
-        <dt>transfer to cash account</dt>
-        <dd>
-          <p>
-            As a savings account holder<br />
-            I want to transfer money from my savings account<br />
-            So that I can get cash easily from an ATM<br />
-          </p>
-          <dl class="passed">
-            <dt>savings account is in credit</dt>
-            <dd>
-              <ul class="steps">
-                <li class="passed">Given my savings account balance is <span class="param">100</span> dollars</li>
-                <li class="passed">Given my cash account balance is <span class="param">10</span> dollars</li>
-                <li class="passed">When I transfer <span class="param">20</span> dollars</li>
-                <li class="passed">Then my savings account balance should be <span class="param">80</span> dollars</li>
-                <li class="passed">Then my cash account balance should be <span class="param">30</span> dollars</li>
-              </ul>
-            </dd>
-          </dl>
-
-          <dl class="failed">
-            <dt>savings account is overdrawn</dt>
-            <dd>
-              <ul class="steps">
-                <li class="passed">Given my savings account balance is <span class="param">-20</span> dollars</li>
-                <li class="passed">Given my cash account balance is <span class="param">10</span> dollars</li>
-                <li class="passed">When I transfer <span class="param">20</span> dollars</li>
-                <li class="failed">Then my savings account balance should be <span class="param">-20</span> dollars</li>
-                <li class="failed">Then my cash account balance should be <span class="param">10</span> dollars</li>
-                <li class="pending">Then I should still be poor</li>
-              </ul>
-            </dd>
-          </dl>
-        </dd>
-      </dl>
-      <!-- More stories here... -->
-
-      <!-- Tests follow -->
-      <div id="testlog"> </div>
-      <script type="text/javascript" language="javascript" charset="utf-8">
-      // <![CDATA[
-      Test.context("RSpec editor tests (this won't be in the final editor - it's just self tests)",{
-        'should extract story narrative': function() {
-          var narrative = StoryDom.narrativeText($$('p')[0].innerHTML);
-          narrative.shouldEqual(
-            "  As a savings account holder\n" + 
-            "  I want to transfer money from my savings account\n" +
-            "  So that I can get cash easily from an ATM\n"
-          );
-        },
-
-        'should extract step text with two spans': function() {
-          var stepText = StoryDom.stepText('Given <span class="param">this</span> and <span class="param">that</span> stuff');
-          stepText.shouldEqual("Given this and that stuff");
-        },
-
-        'should extract scenario': function() {
-          var scenario = StoryDom.scenario($$('dl')[1]);
-          scenario.shouldEqual(
-            "  Scenario: savings account is in credit\n" + 
-            "    Given my savings account balance is 100 dollars\n" +
-            "    Given my cash account balance is 10 dollars\n" +
-            "    When I transfer 20 dollars\n" +
-            "    Then my savings account balance should be 80 dollars\n" +
-            "    Then my cash account balance should be 30 dollars\n"
-          );
-        },
-
-        'should extract story from page': function() {
-          var story = StoryDom.story();
-          story.shouldEqual(
-            "Story: transfer to cash account\n" + 
-            "\n" +
-            "  As a savings account holder\n" +
-            "  I want to transfer money from my savings account\n" +
-            "  So that I can get cash easily from an ATM\n" +
-            "\n" +
-            "  Scenario: savings account is in credit\n" + 
-            "    Given my savings account balance is 100 dollars\n" +
-            "    Given my cash account balance is 10 dollars\n" +
-            "    When I transfer 20 dollars\n" +
-            "    Then my savings account balance should be 80 dollars\n" +
-            "    Then my cash account balance should be 30 dollars\n" +
-            "\n" +
-            "  Scenario: savings account is overdrawn\n" + 
-            "    Given my savings account balance is -20 dollars\n" +
-            "    Given my cash account balance is 10 dollars\n" +
-            "    When I transfer 20 dollars\n" +
-            "    Then my savings account balance should be -20 dollars\n" +
-            "    Then my cash account balance should be 10 dollars\n" +
-            "    Then I should still be poor\n"
-          );
-        },
-
-        'should extract stock steps from dom': function() {
-          var stockSteps = RSpec.stockSteps();
-          stockSteps.shouldEqualEnum([
-            'Given my $which account has been blocked for $n days',
-            'Given my cash account balance is $balance dollars',
-            'Given my savings account balance is $balance dollars',
-            'Then my cash account balance should be $balance dollars',
-            'Then my savings account balance should be $balance dollars',
-            'When I transfer $amount dollars'
-          ]);
-        },
-
-        'should add new stock steps unless they already exist': function() {
-          RSpec.addStockStep('When Godzilla chews over a cable');
-          RSpec.stockSteps().shouldEqualEnum([
-            'Given my $which account has been blocked for $n days',
-            'Given my cash account balance is $balance dollars',
-            'Given my savings account balance is $balance dollars',
-            'Then my cash account balance should be $balance dollars',
-            'Then my savings account balance should be $balance dollars',
-            'When Godzilla chews over a cable',
-            'When I transfer $amount dollars'
-          ]);
-          RSpec.addStockStep('When Godzilla chews over a cable');
-          RSpec.stockSteps().shouldEqualEnum([
-            'Given my $which account has been blocked for $n days',
-            'Given my cash account balance is $balance dollars',
-            'Given my savings account balance is $balance dollars',
-            'Then my cash account balance should be $balance dollars',
-            'Then my savings account balance should be $balance dollars',
-            'When Godzilla chews over a cable',
-            'When I transfer $amount dollars'
-          ]);
-        }
-      });
-      // ]]>
-      </script>
-
-    </div>
-  </body>
-</html>
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stylesheets/rspec.css b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stylesheets/rspec.css
deleted file mode 100644
index 90f4b9b..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stylesheets/rspec.css
+++ /dev/null
@@ -1,136 +0,0 @@
-body {
-  background: #fff;
-  font-size: 80%;
-  margin:0pt;
-  padding:0pt;
-}
-
-#nav {
-  border-bottom:1px solid #222222;
-  border-top-style:solid;
-  border-top-width:0.5em;
-  font-family:Helvetica,Arial,sans-serif;
-  font-size:1.1em;
-  padding:0.2em 0pt;
-  position:fixed;
-  text-align:center;
-  width:100%;
-  z-index:50;
-
-  background-color: #000000;
-  opacity: 0.6;
-}
-
-#container {
-  background:white none repeat scroll 0%;
-  font-family:Helvetica,Arial,sans-serif;
-  margin:0pt auto;
-  position:relative;
-  text-align:left;
-  top:4.0em;
-  width:78em;
-}
-
-dl {
-  font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
-  color: #fff;
-}
-
-dl.passed {
-  border-left: 5px solid #65C400;
-}
-
-dl.failed {
-  border-left: 5px solid #C20000;
-}
-
-dt {
-  padding: 3px;
-  font-weight: bold;
-}
-
-dd {
-  margin: 0px 0px 0px 0px;
-}
-
-dd p {
-  padding: 5px;
-  margin-top: 0;
-  margin-bottom: 5px;
-}
-
-dd > dl {
-  margin-left: 5px;
-}
-
-dl.passed > dt {
-  background: #65C400;
-}
-
-dl.failed > dt {
-  background: #C20000;
-}
-
-dl.passed > dd > p, li.passed {
-  background: #DBFFB4; color: #3D7700;
-  border-bottom: 1px solid #65C400;
-}
-
-dl.failed > dd > p, li.failed {
-  color: #C20000; background: #FFFBD3;
-  border-bottom: 1px solid #C20000;
-}
-
-dl.pending > dd > p, li.pending {
-  color: #131313; background: #FCFB98;
-  border-bottom: 1px solid #FAF834;
-}
-
-dl.new > dd > p, li.new {
-  color: #444444; background: #DDDDDD;
-  border-bottom: 1px solid #444444;
-}
-
-dl > dd > p.wastebin {
-  background-color: black;
-}
-
-span.param, span.param_editor {
-  font-weight: bold;
-}
-
-input {
-  width: 100%;
-}
-
-ul.steps {
-  padding: 0px;
-  list-style: none;
-}
-
-ul.steps > li {
-  margin: 5px 0px 5px 5px;
-  padding: 3px 3px 3px 5px;
-}
-
-div.auto_complete ul {
-  list-style-type: none;
-  border: 2px solid #F0F0F0;
-  margin: 0px;
-  padding: 0px;
-}
-
-div.auto_complete ul li {
-  background-color: white;
-  list-style-type: none;
-  display: block;
-  margin: 0;
-  padding: 2px;
-}
-
-div.auto_complete ul li.selected {
-  color: #444444; background: #DDDDDD;
-}
diff --git a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stylesheets/test.css b/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stylesheets/test.css
deleted file mode 100644
index 8c738a3..0000000
--- a/spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/story_server/prototype/stylesheets/test.css
+++ /dev/null
@@ -1,90 +0,0 @@
-body, div, p, h1, h2, h3, ul, ol, span, a, table, td, form, img, li {
-  font-family: sans-serif;
-}
-
-body {
-  font-size:0.8em;
-}
-
-.navigation {
-  background: #9DC569;
-  color: #fff;
-}
-
-.navigation h1 {
-  font-size: 20px;
-}
-
-.navigation h2 {
-  font-size: 16px;
-  font-weight: normal;
-  margin: 0;
-  border: 1px solid #e8a400;
-  border-bottom: 0;
-  background: #ffc;
-  color: #E8A400;
-  padding: 8px;
-  padding-bottom: 0;
-}
-
-.navigation ul {
-  margin-top: 0;
-  border: 1px solid #E8A400;
-  border-top: none;
-  background: #ffc;
-  padding: 8px;
-  margin-left: 0;
-}
-
-.navigation ul li {
-  font-size: 12px;
-  list-style-type: none;
-  margin-top: 1px;
-  margin-bottom: 1px;
-  color: #555;
-}
-
-.navigation a {
-  color: #ffc;
-}
-
-.navigation ul li a {
-  color: #000;
-}
-
-#log {
-  padding-bottom: 1em;
-  border-bottom: 2px solid #000;
-  margin-bottom: 2em;
-}
-
-#logsummary {
-  margin-bottom: 1em;
-  padding: 1ex;
-  border: 1px solid #000;
-  font-weight: bold;
-}
-
-#logtable {
-  width:100%;
-  border-collapse: collapse;
-  border: 1px dotted #666;
-}
-
-#logtable td, #logtable th {
-  text-align: left;
-  padding: 3px 8px;
-  border: 1px dotted #666;
-}
-
-#logtable .passed {
-  background-color: #cfc;
-}
-
-#logtable .failed, #logtable .error {
-  background-color: #fcc;
-}
-
-#logtable .nameCell {
-  cursor: pointer;
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/CHANGELOG.rdoc b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/CHANGELOG.rdoc
deleted file mode 100644
index 8869260..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/CHANGELOG.rdoc
+++ /dev/null
@@ -1,52 +0,0 @@
-== TODO
-
-* Change Thor.start to parse ARGV in a single pass
-* Improve spec coverage for Thor::Runner
-* Improve help output to list shorthand switches, too
-* Investigate and fix deep namespacing ("foo:bar:baz") issues
-
-== 0.9.8, released 2008-10-20
-
-* Fixed some tiny issues that were introduced lately.
-
-== 0.9.7, released 2008-10-13
-
-* Setting global method options on the initialize method works as expected:
-  All other tasks will accept these global options in addition to their own.
-* Added 'group' notion to Thor task sets (class Thor); by default all tasks
-  are in the 'standard' group. Running 'thor -T' will only show the standard
-  tasks - adding --all will show all tasks. You can also filter on a specific
-  group using the --group option: thor -T --group advanced
-  
-== 0.9.6, released 2008-09-13
-
-* Generic improvements
-
-== 0.9.5, released 2008-08-27
-
-* Improve Windows compatibility
-* Update (incorrect) README and task.thor sample file
-* Options hash is now frozen (once returned)
-* Allow magic predicates on options object. For instance: `options.force?`
-* Add support for :numeric type
-* BACKWARDS INCOMPATIBLE: Refactor Thor::Options. You cannot access shorthand forms in options hash anymore (for instance, options[:f])
-* Allow specifying optional args with default values: method_options(:user => "mislav")
-* Don't write options for nil or false values. This allows, for example, turning color off when running specs.
-* Exit with the status of the spec command to help CI stuff out some.
-
-== 0.9.4, released 2008-08-13
-
-* Try to add Windows compatibility.
-* BACKWARDS INCOMPATIBLE: options hash is now accessed as a property in your class and is not passed as last argument anymore
-* Allow options at the beginning of the argument list as well as the end.
-* Make options available with symbol keys in addition to string keys.
-* Allow true to be passed to Thor#method_options to denote a boolean option.
-* If loading a thor file fails, don't give up, just print a warning and keep going.
-* Make sure that we re-raise errors if they happened further down the pipe than we care about.
-* Only delete the old file on updating when the installation of the new one is a success
-* Make it Ruby 1.8.5 compatible.
-* Don't raise an error if a boolean switch is defined multiple times.
-* Thor::Options now doesn't parse through things that look like options but aren't.
-* Add URI detection to install task, and make sure we don't append ".thor" to URIs
-* Add rake2thor to the gem binfiles.
-* Make sure local Thorfiles override system-wide ones.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/LICENSE b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/LICENSE
deleted file mode 100644
index 98722da..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2008 Yehuda Katz
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/README.markdown b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/README.markdown
deleted file mode 100644
index 9711f52..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/README.markdown
+++ /dev/null
@@ -1,76 +0,0 @@
-thor
-====
-
-Map options to a class. Simply create a class with the appropriate annotations, and have options automatically map
-to functions and parameters.
-
-Example:
-
-    class MyApp < Thor                                                # [1]
-      map "-L" => :list                                               # [2]
-                                                                    
-      desc "install APP_NAME", "install one of the available apps"    # [3]
-      method_options :force => :boolean, :alias => :optional          # [4]
-      def install(name)
-        user_alias = options[:alias]
-        if options.force?
-          # do something
-        end
-        # ... other code ...
-      end
-      
-      desc "list [SEARCH]", "list all of the available apps, limited by SEARCH"
-      def list(search = "")
-        # list everything
-      end
-    end
-    
-Thor automatically maps commands as such:
-
-    app install myname --force
-    
-That gets converted to:
-
-    MyApp.new.install("myname")
-    # with {'force' => true} as options hash
-
-1.  Inherit from Thor to turn a class into an option mapper
-2.  Map additional non-valid identifiers to specific methods. In this case,
-    convert -L to :list
-3.  Describe the method immediately below. The first parameter is the usage information,
-    and the second parameter is the description.
-4.  Provide any additional options. These will be marshaled from `--` and `-` params.
-    In this case, a `--force` and a `-f` option is added.
-    
-Types for `method_options`
---------------------------
-
-<dl>
-  <dt><code>:boolean</code></dt>
-    <dd>true if the option is passed</dd>
-  <dt><code>true</code></dt>
-    <dd>same as <code>:boolean</code></dd>
-  <dt><code>:required</code></dt>
-    <dd>the value for this option MUST be provided</dd>
-  <dt><code>:optional</code></dt>
-    <dd>the value for this option MAY be provided</dd>
-  <dt><code>:numeric</code></dt>
-    <dd>the value MAY be provided, but MUST be in numeric form</dd>
-  <dt>a String or Numeric</dt>
-    <dd>same as <code>:optional</code>, but fall back to the given object as default value</dd>
-</dl>
-
-In case of unsatisfied requirements, `Thor::Options::Error` is raised.
-
-Examples of option parsing:
-
-    # let's say this is how we defined options for a method:
-    method_options(:force => :boolean, :retries => :numeric)
-    
-    # here is how the following command-line invocations would be parsed:
-    
-    command -f --retries 5    # => {'force' => true, 'retries' => 5}
-    command --force -r=5      # => {'force' => true, 'retries' => 5}
-    command -fr 5             # => {'force' => true, 'retries' => 5}
-    command --retries=5       # => {'retries' => 5}
-    command -r5               # => {'retries' => 5}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/Rakefile b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/Rakefile
deleted file mode 100644
index c21ec2a..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/Rakefile
+++ /dev/null
@@ -1,6 +0,0 @@
-task :default => :install
-
-desc "install the gem locally"
-task :install do
-  sh %{ruby "#{File.dirname(__FILE__)}/bin/thor" :install}
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/bin/rake2thor b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/bin/rake2thor
deleted file mode 100755
index 8125b78..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/bin/rake2thor
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'rubygems'
-require 'ruby2ruby'
-require 'rake'
-
-input  = ARGV[0] || 'Rakefile'
-output = ARGV[1] || 'Thorfile'
-
-$requires = []
-
-module Kernel
-  def require_with_record(file)
-    $requires << file if caller[1] =~ /rake2thor:/
-    require_without_record file
-  end
-  alias_method :require_without_record, :require
-  alias_method :require, :require_with_record
-end
-
-load input
-
- at private_methods = []
-
-def file_task_name(name)
-  "compile_" + name.gsub('/', '_slash_').gsub('.', '_dot_').gsub(/\W/, '_')
-end
-
-def method_for_task(task)
-  file_task = task.is_a?(Rake::FileTask)
-  comment = task.instance_variable_get('@comment')
-  prereqs = task.instance_variable_get('@prerequisites').select(&Rake::Task.method(:task_defined?))
-  actions = task.instance_variable_get('@actions')
-  name = task.name.gsub(/^([^:]+:)+/, '')
-  name = file_task_name(name) if file_task
-  meth = ''
-
-  meth << "desc #{name.inspect}, #{comment.inspect}\n" if comment
-  meth << "def #{name}\n"
-
-  meth << prereqs.map do |pre|
-    pre = pre.to_s
-    pre = file_task_name(pre) if Rake::Task[pre].is_a?(Rake::FileTask)
-    '  ' + pre
-  end.join("\n")
-
-  meth << "\n\n" unless prereqs.empty? || actions.empty?
-
-  meth << actions.map do |act|
-    act = act.to_ruby
-    unless act.gsub!(/^proc \{ \|(\w+)\|\n/,
-                     "  \\1 = Struct.new(:name).new(#{name.inspect}) # A crude mock Rake::Task object\n")
-      act.gsub!(/^proc \{\n/, '')
-    end
-    act.gsub(/\n\}$/, '')
-  end.join("\n")
-
-  meth << "\nend"
-
-  if file_task
-    @private_methods << meth
-    return
-  end
-
-  meth
-end
-
-body = Rake::Task.tasks.map(&method(:method_for_task)).compact.map { |meth| meth.gsub(/^/, '  ') }.join("\n\n")
-
-unless @private_methods.empty?
-  body << "\n\n  private\n\n"
-  body << @private_methods.map { |meth| meth.gsub(/^/, '  ') }.join("\n\n")
-end
-
-requires = $requires.map { |r| "require #{r.inspect}" }.join("\n")
-
-File.open(output, 'w') { |f| f.write(<<END.lstrip) }
-#{requires}
-
-class Default < Thor
-#{body}
-end
-END
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/bin/thor b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/bin/thor
deleted file mode 100755
index fa798bc..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/bin/thor
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env ruby
-# -*- mode: ruby -*-
-
-require File.dirname(__FILE__) + "/../lib/thor"
-require 'thor/runner'
-
-Thor::Runner.start
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor.rb
deleted file mode 100644
index 017102d..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor.rb
+++ /dev/null
@@ -1,146 +0,0 @@
-$:.unshift File.expand_path(File.dirname(__FILE__))
-require "thor/options"
-require "thor/util"
-require "thor/task"
-require "thor/task_hash"
-
-class Thor
-  attr_accessor :options
-  
-  def self.map(map)
-    @map ||= superclass.instance_variable_get("@map") || {}
-    map.each do |key, value|
-      if key.respond_to?(:each)
-        key.each {|subkey| @map[subkey] = value}
-      else
-        @map[key] = value
-      end
-    end
-  end
-
-  def self.desc(usage, description)
-    @usage, @desc = usage, description
-  end
-  
-  def self.group(name)
-    @group_name = name.to_s
-  end
-  
-  def self.group_name
-    @group_name || 'standard'
-  end
-  
-  def self.method_options(opts)
-    @method_options = opts
-  end
-
-  def self.subclass_files
-    @subclass_files ||= Hash.new {|h,k| h[k] = []}
-  end
-  
-  def self.subclasses
-    @subclasses ||= []
-  end
-  
-  def self.tasks
-    @tasks ||= TaskHash.new(self)
-  end
-
-  def self.opts
-    (@opts || {}).merge(self == Thor ? {} : superclass.opts)
-  end
-
-  def self.[](task)
-    namespaces = task.split(":")
-    klass = Thor::Util.constant_from_thor_path(namespaces[0...-1].join(":"))
-    raise Error, "`#{klass}' is not a Thor class" unless klass <= Thor
-    klass.tasks[namespaces.last]
-  end
-
-  def self.maxima
-    @maxima ||= begin
-      max_usage = tasks.map {|_, t| t.usage}.max {|x,y| x.to_s.size <=> y.to_s.size}.size
-      max_desc  = tasks.map {|_, t| t.description}.max {|x,y| x.to_s.size <=> y.to_s.size}.size
-      max_opts  = tasks.map {|_, t| t.opts ? t.opts.formatted_usage : ""}.max {|x,y| x.to_s.size <=> y.to_s.size}.size
-      Struct.new(:description, :usage, :opt).new(max_desc, max_usage, max_opts)
-    end
-  end
-  
-  def self.start(args = ARGV)
-    options = Thor::Options.new(self.opts)
-    opts = options.parse(args, false)
-    args = options.trailing_non_opts
-
-    meth = args.first
-    meth = @map[meth].to_s if @map && @map[meth]
-    meth ||= "help"
-    
-    tasks[meth].parse new(opts, *args), args[1..-1]
-  rescue Thor::Error => e
-    $stderr.puts e.message
-  end
-
-  class << self
-    protected
-    def inherited(klass)
-      register_klass_file klass
-    end
-
-    def method_added(meth)
-      meth = meth.to_s
-      
-      if meth == "initialize"
-        @opts = @method_options
-        @method_options = nil
-        return
-      end
-
-      return if !public_instance_methods.include?(meth) || !@usage
-      register_klass_file self
-
-      tasks[meth] = Task.new(meth, @desc, @usage, @method_options)
-
-      @usage, @desc, @method_options = nil
-    end
-
-    def register_klass_file(klass, file = caller[1].split(":")[0])
-      unless self == Thor
-        superclass.register_klass_file(klass, file)
-        return
-      end
-
-      file_subclasses = subclass_files[File.expand_path(file)]
-      file_subclasses << klass unless file_subclasses.include?(klass)
-      subclasses << klass unless subclasses.include?(klass)
-    end
-  end
-
-  def initialize(opts = {}, *args)
-  end
-  
-  map ["-h", "-?", "--help", "-D"] => :help
-  
-  desc "help [TASK]", "describe available tasks or one specific task"
-  def help(task = nil)
-    if task
-      if task.include? ?:
-        task = self.class[task]
-        namespace = true
-      else
-        task = self.class.tasks[task]
-      end
-
-      puts task.formatted_usage(namespace)
-      puts task.description
-    else
-      puts "Options"
-      puts "-------"
-      self.class.tasks.each do |_, task|
-        format = "%-" + (self.class.maxima.usage + self.class.maxima.opt + 4).to_s + "s"
-        print format % ("#{task.formatted_usage}")      
-        puts  task.description.split("\n").first
-      end
-    end
-  end
-  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/error.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/error.rb
deleted file mode 100644
index 114c7a4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/error.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class Thor
-  class Error < Exception; end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/options.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/options.rb
deleted file mode 100644
index c89c8a4..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/options.rb
+++ /dev/null
@@ -1,242 +0,0 @@
-# This is a modified version of Daniel Berger's Getopt::Long class,
-# licensed under Ruby's license.
-
-class Thor
-  class Options
-    class Error < StandardError; end
-    
-    # simple Hash with indifferent access
-    class Hash < ::Hash
-      def initialize(hash)
-        super()
-        update hash
-      end
-      
-      def [](key)
-        super convert_key(key)
-      end
-      
-      def values_at(*indices)
-        indices.collect { |key| self[convert_key(key)] }
-      end
-      
-      protected
-        def convert_key(key)
-          key.kind_of?(Symbol) ? key.to_s : key
-        end
-        
-        # Magic predicates. For instance:
-        #   options.force? # => !!options['force']
-        def method_missing(method, *args, &block)
-          method.to_s =~ /^(\w+)\?$/ ? !!self[$1] : super
-        end
-    end
-
-    NUMERIC     = /(\d*\.\d+|\d+)/
-    LONG_RE     = /^(--\w+[-\w+]*)$/
-    SHORT_RE    = /^(-[a-z])$/i
-    EQ_RE       = /^(--\w+[-\w+]*|-[a-z])=(.*)$/i
-    SHORT_SQ_RE = /^-([a-z]{2,})$/i # Allow either -x -v or -xv style for single char args
-    SHORT_NUM   = /^(-[a-z])#{NUMERIC}$/i
-    
-    attr_reader :leading_non_opts, :trailing_non_opts
-    
-    def non_opts
-      leading_non_opts + trailing_non_opts
-    end
-
-    # Takes an array of switches. Each array consists of up to three
-    # elements that indicate the name and type of switch. Returns a hash
-    # containing each switch name, minus the '-', as a key. The value
-    # for each key depends on the type of switch and/or the value provided
-    # by the user.
-    #
-    # The long switch _must_ be provided. The short switch defaults to the
-    # first letter of the short switch. The default type is :boolean.
-    #
-    # Example:
-    #
-    #   opts = Thor::Options.new(
-    #      "--debug" => true,
-    #      ["--verbose", "-v"] => true,
-    #      ["--level", "-l"] => :numeric
-    #   ).parse(args)
-    #
-    def initialize(switches)
-      @defaults = {}
-      @shorts = {}
-      
-      @leading_non_opts, @trailing_non_opts = [], []
-
-      @switches = switches.inject({}) do |mem, (name, type)|
-        if name.is_a?(Array)
-          name, *shorts = name
-        else
-          name = name.to_s
-          shorts = []
-        end
-        # we need both nice and dasherized form of switch name
-        if name.index('-') == 0
-          nice_name = undasherize name
-        else
-          nice_name = name
-          name = dasherize name
-        end
-        # if there are no shortcuts specified, generate one using the first character
-        shorts << "-" + nice_name[0,1] if shorts.empty? and nice_name.length > 1
-        shorts.each { |short| @shorts[short] = name }
-        
-        # normalize type
-        case type
-        when TrueClass then type = :boolean
-        when String
-          @defaults[nice_name] = type
-          type = :optional
-        when Numeric
-          @defaults[nice_name] = type
-          type = :numeric
-        end
-        
-        mem[name] = type
-        mem
-      end
-      
-      # remove shortcuts that happen to coincide with any of the main switches
-      @shorts.keys.each do |short|
-        @shorts.delete(short) if @switches.key?(short)
-      end
-    end
-
-    def parse(args, skip_leading_non_opts = true)
-      @args = args
-      # start with Thor::Options::Hash pre-filled with defaults
-      hash = Hash.new @defaults
-      
-      @leading_non_opts = []
-      if skip_leading_non_opts
-        @leading_non_opts << shift until current_is_option? || @args.empty?
-      end
-
-      while current_is_option?
-        case shift
-        when SHORT_SQ_RE
-          unshift $1.split('').map { |f| "-#{f}" }
-          next
-        when EQ_RE, SHORT_NUM
-          unshift $2
-          switch = $1
-        when LONG_RE, SHORT_RE
-          switch = $1
-        end
-        
-        switch    = normalize_switch(switch)
-        nice_name = undasherize(switch)
-        type      = switch_type(switch)
-        
-        case type
-        when :required
-          assert_value!(switch)
-          raise Error, "cannot pass switch '#{peek}' as an argument" if valid?(peek)
-          hash[nice_name] = shift
-        when :optional
-          hash[nice_name] = peek.nil? || valid?(peek) || shift
-        when :boolean
-          hash[nice_name] = true
-        when :numeric
-          assert_value!(switch)
-          unless peek =~ NUMERIC and $& == peek
-            raise Error, "expected numeric value for '#{switch}'; got #{peek.inspect}"
-          end
-          hash[nice_name] = $&.index('.') ? shift.to_f : shift.to_i
-        end
-      end
-      
-      @trailing_non_opts = @args
-
-      check_required! hash
-      hash.freeze
-      hash
-    end
-    
-    def formatted_usage
-      return "" if @switches.empty?
-      @switches.map do |opt, type|
-        case type
-        when :boolean
-          "[#{opt}]"
-        when :required
-          opt + "=" + opt.gsub(/\-/, "").upcase
-        else
-          sample = @defaults[undasherize(opt)]
-          sample ||= case type
-            when :optional then undasherize(opt).gsub(/\-/, "_").upcase
-            when :numeric  then "N"
-            end
-          "[" + opt + "=" + sample.to_s + "]"
-        end
-      end.join(" ")
-    end
-    
-    alias :to_s :formatted_usage
-
-    private
-    
-    def assert_value!(switch)
-      raise Error, "no value provided for argument '#{switch}'" if peek.nil?
-    end
-    
-    def undasherize(str)
-      str.sub(/^-{1,2}/, '')
-    end
-    
-    def dasherize(str)
-      (str.length > 1 ? "--" : "-") + str
-    end
-    
-    def peek
-      @args.first
-    end
-
-    def shift
-      @args.shift
-    end
-
-    def unshift(arg)
-      unless arg.kind_of?(Array)
-        @args.unshift(arg)
-      else
-        @args = arg + @args
-      end
-    end
-    
-    def valid?(arg)
-      @switches.key?(arg) or @shorts.key?(arg)
-    end
-
-    def current_is_option?
-      case peek
-      when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM
-        valid?($1)
-      when SHORT_SQ_RE
-        $1.split('').any? { |f| valid?("-#{f}") }
-      end
-    end
-    
-    def normalize_switch(switch)
-      @shorts.key?(switch) ? @shorts[switch] : switch
-    end
-    
-    def switch_type(switch)
-      @switches[switch]
-    end
-    
-    def check_required!(hash)
-      for name, type in @switches
-        if type == :required and !hash[undasherize(name)]
-          raise Error, "no value provided for required argument '#{name}'"
-        end
-      end
-    end
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/ordered_hash.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/ordered_hash.rb
deleted file mode 100644
index 4da02ac..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/ordered_hash.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-class Thor
-  # This class is based on the Ruby 1.9 ordered hashes.
-  # It keeps the semantics and most of the efficiency of normal hashes
-  # while also keeping track of the order in which elements were set.
-  class OrderedHash
-    Node = Struct.new(:key, :value, :next, :prev)
-    include Enumerable
-
-    def initialize
-      @hash = {}
-    end
-
-    def initialize_copy(other)
-      @hash = other.instance_variable_get('@hash').clone
-    end
-
-    def [](key)
-      @hash[key] && @hash[key].value
-    end
-
-    def []=(key, value)
-      node = Node.new(key, value)
-
-      if old = @hash[key]
-        if old.prev
-          old.prev.next = old.next
-        else # old is @first and @last
-          @first = @last = nil
-        end
-      end
-
-      if @first.nil?
-        @first = @last = node
-      else
-        node.prev = @last
-        @last.next = node
-        @last = node
-      end
-
-      @hash[key] = node
-      value
-    end
-
-    def each
-      return unless @first
-      yield [@first.key, @first.value]
-      node = @first
-      yield [node.key, node.value] while node = node.next
-      self
-    end
-
-    def values
-      self.map { |k, v| v }
-    end
-
-    def +(other)
-      new = clone
-      other.each do |key, value|
-        new[key] = value unless self[key]
-      end
-      new
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/runner.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/runner.rb
deleted file mode 100644
index 5eaca34..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/runner.rb
+++ /dev/null
@@ -1,286 +0,0 @@
-require 'thor'
-require "thor/util"
-require "open-uri"
-require "fileutils"
-require "yaml"
-require "digest/md5"
-require "readline"
-
-class Thor::Runner < Thor
-  
-  def self.globs_for(path)
-    ["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/*.thor"]
-  end
-
-  map "-T" => :list, "-i" => :install, "-u" => :update
-  
-  desc "install NAME", "install a Thor file into your system tasks, optionally named for future updates"
-  method_options :as => :optional, :relative => :boolean
-  def install(name)
-    initialize_thorfiles
-    begin
-      contents = open(name).read
-    rescue OpenURI::HTTPError
-      raise Error, "Error opening URI `#{name}'"
-    rescue Errno::ENOENT
-      raise Error, "Error opening file `#{name}'"
-    end
-    
-    is_uri = File.exist?(name) ? false : true
-    
-    puts "Your Thorfile contains: "
-    puts contents
-    print "Do you wish to continue [y/N]? "
-    response = Readline.readline
-    
-    return false unless response =~ /^\s*y/i
-    
-    constants = Thor::Util.constants_in_contents(contents)
-    
-    # name = name =~ /\.thor$/ || is_uri ? name : "#{name}.thor"
-    
-    as = options["as"] || begin
-      first_line = contents.split("\n")[0]
-      (match = first_line.match(/\s*#\s*module:\s*([^\n]*)/)) ? match[1].strip : nil
-    end
-        
-    if !as
-      print "Please specify a name for #{name} in the system repository [#{name}]: "
-      as = Readline.readline
-      as = name if as.empty?
-    end
-    
-    FileUtils.mkdir_p thor_root
-    
-    yaml_file = File.join(thor_root, "thor.yml")
-    FileUtils.touch(yaml_file)
-    yaml = thor_yaml
-    
-    location = (options[:relative] || is_uri) ? name : File.expand_path(name)
-    yaml[as] = {:filename => Digest::MD5.hexdigest(name + as), :location => location, :constants => constants}
-    
-    save_yaml(yaml)
-    
-    puts "Storing thor file in your system repository"
-    
-    File.open(File.join(thor_root, yaml[as][:filename]), "w") do |file|
-      file.puts contents
-    end
-    
-    yaml[as][:filename] # Indicate sucess
-  end
-  
-  desc "uninstall NAME", "uninstall a named Thor module"
-  def uninstall(name)
-    yaml = thor_yaml
-    raise Error, "Can't find module `#{name}'" unless yaml[name]
-    
-    puts "Uninstalling #{name}."
-    
-    file = File.join(thor_root, "#{yaml[name][:filename]}")
-    File.delete(file)
-    yaml.delete(name)
-    save_yaml(yaml)
-    
-    puts "Done."
-  end
-  
-  desc "update NAME", "update a Thor file from its original location"
-  def update(name)
-    yaml = thor_yaml
-    raise Error, "Can't find module `#{name}'" if !yaml[name] || !yaml[name][:location]
-
-    puts "Updating `#{name}' from #{yaml[name][:location]}"
-    old_filename = yaml[name][:filename]
-    self.options = self.options.merge("as" => name)
-    filename = install(yaml[name][:location])
-    unless filename == old_filename
-      File.delete(File.join(thor_root, old_filename))
-    end
-  end
-  
-  desc "installed", "list the installed Thor modules and tasks (--internal means list the built-in tasks as well)"
-  method_options :internal => :boolean
-  def installed
-    thor_root_glob.each do |f|
-      next if f =~ /thor\.yml$/
-      load_thorfile f unless Thor.subclass_files.keys.include?(File.expand_path(f))
-    end
-
-    klasses = Thor.subclasses
-    klasses -= [Thor, Thor::Runner] unless options['internal']
-    display_klasses(true, klasses)
-  end
-  
-  desc "list [SEARCH]", "list the available thor tasks (--substring means SEARCH can be anywhere in the module)"
-  method_options :substring => :boolean,
-                 :group => :optional,
-                 :all => :boolean
-  def list(search = "")
-    initialize_thorfiles
-    search = ".*#{search}" if options["substring"]
-    search = /^#{search}.*/i
-    group  = options[:group] || 'standard'
-    
-    classes = Thor.subclasses.select do |k| 
-      (options[:all] || k.group_name == group) && 
-      Thor::Util.constant_to_thor_path(k.name) =~ search
-    end
-    display_klasses(false, classes)
-  end
-
-  # Override Thor#help so we can give info about not-yet-loaded tasks
-  def help(task = nil)
-    initialize_thorfiles(task) if task && task.include?(?:)
-    super
-  end
-    
-  def method_missing(meth, *args)
-    meth = meth.to_s
-    super(meth.to_sym, *args) unless meth.include? ?:
-
-    initialize_thorfiles(meth)
-    task = Thor[meth]
-    task.parse task.klass.new, ARGV[1..-1]
-  end
-
-  def self.thor_root
-    File.join(ENV["HOME"] || ENV["APPDATA"], ".thor")
-  end
-
-  def self.thor_root_glob
-    # On Windows thor_root will be something like this:
-    #
-    #   C:\Documents and Settings\james\.thor
-    #
-    # If we don't #gsub the \ character, Dir.glob will fail.
-    Dir["#{thor_root.gsub(/\\/, '/')}/**/*"]
-  end
-  
-  private
-  def thor_root
-    self.class.thor_root
-  end
-
-  def thor_root_glob
-    self.class.thor_root_glob
-  end
-  
-  def thor_yaml
-    yaml_file = File.join(thor_root, "thor.yml")
-    yaml = YAML.load_file(yaml_file) if File.exists?(yaml_file)
-    yaml || {}
-  end
-  
-  def save_yaml(yaml)
-    yaml_file = File.join(thor_root, "thor.yml")
-    File.open(yaml_file, "w") {|f| f.puts yaml.to_yaml }
-  end
-  
-  def display_klasses(with_modules = false, klasses = Thor.subclasses)
-    klasses -= [Thor, Thor::Runner] unless with_modules
-    raise Error, "No Thor tasks available" if klasses.empty?
-    
-    if with_modules && !(yaml = thor_yaml).empty?
-      max_name = yaml.max {|(xk,xv),(yk,yv)| xk.to_s.size <=> yk.to_s.size }.first.size
-      modules_label = "Modules"
-      namespaces_label = "Namespaces"
-      column_width = [max_name + 4, modules_label.size + 1].max
-      
-      print "%-#{column_width}s" % modules_label
-      puts namespaces_label
-      print "%-#{column_width}s" % ("-" * modules_label.size)
-      puts "-" * namespaces_label.size
-      
-      yaml.each do |name, info|
-        print "%-#{column_width}s" % name
-        puts info[:constants].map {|c| Thor::Util.constant_to_thor_path(c)}.join(", ")
-      end
-    
-      puts
-    end
-    
-    # Calculate the largest base class name
-    max_base = klasses.max do |x,y| 
-      Thor::Util.constant_to_thor_path(x.name).size <=> Thor::Util.constant_to_thor_path(y.name).size
-    end.name.size
-    
-    # Calculate the size of the largest option description
-    max_left_item = klasses.max do |x,y| 
-      (x.maxima.usage + x.maxima.opt).to_i <=> (y.maxima.usage + y.maxima.opt).to_i
-    end
-    
-    max_left = max_left_item.maxima.usage + max_left_item.maxima.opt
-    
-    unless klasses.empty?
-      puts # add some spacing
-      klasses.each { |k| display_tasks(k, max_base, max_left); }
-    else
-      puts "\033[1;34mNo Thor tasks available\033[0m"
-    end
-  end  
-  
-  def display_tasks(klass, max_base, max_left)
-    if klass.tasks.values.length > 1
-      
-      base = Thor::Util.constant_to_thor_path(klass.name)
-      
-      if base.to_a.empty?
-        base = 'default' 
-        puts "\033[1;35m#{base}\033[0m"
-      else
-        puts "\033[1;34m#{base}\033[0m"
-      end
-      puts "-" * base.length
-      
-      klass.tasks.each true do |name, task|
-        format_string = "%-#{max_left + max_base + 5}s"
-        print format_string % task.formatted_usage(true)
-        puts task.description
-      end
-      
-      unless klass.opts.empty?
-        puts "\nglobal options: #{Options.new(klass.opts)}"
-      end
-      
-      puts # add some spacing
-    end
-  end
-
-  def initialize_thorfiles(relevant_to = nil)
-    thorfiles(relevant_to).each {|f| load_thorfile f unless Thor.subclass_files.keys.include?(File.expand_path(f))}
-  end
-  
-  def load_thorfile(path)
-    begin
-      load path
-    rescue Object => e
-      $stderr.puts "WARNING: unable to load thorfile #{path.inspect}: #{e.message}"
-    end
-  end
-  
-  def thorfiles(relevant_to = nil)
-    path = Dir.pwd
-    thorfiles = []
-    
-    # Look for Thorfile or *.thor in the current directory or a parent directory, until the root
-    while thorfiles.empty?
-      thorfiles = Thor::Runner.globs_for(path).map {|g| Dir[g]}.flatten
-      path = File.dirname(path)
-      break if path == "/"
-    end
-
-    # We want to load system-wide Thorfiles first
-    # so the local Thorfiles will override them.
-    (relevant_to ? thorfiles_relevant_to(relevant_to) :
-     thor_root_glob) + thorfiles - ["#{thor_root}/thor.yml"]
-  end
-
-  def thorfiles_relevant_to(meth)
-    klass_str = Thor::Util.to_constant(meth.split(":")[0...-1].join(":"))
-    thor_yaml.select do |k, v|
-      v[:constants] && v[:constants].include?(klass_str)
-    end.map { |k, v| File.join(thor_root, "#{v[:filename]}") }
-  end
-
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/task.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/task.rb
deleted file mode 100644
index 1f95861..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/task.rb
+++ /dev/null
@@ -1,84 +0,0 @@
-require 'thor/error'
-require 'thor/util'
-
-class Thor
-  class Task < Struct.new(:meth, :description, :usage, :opts, :klass)
-    
-    def self.dynamic(meth, klass)
-      new(meth, "A dynamically-generated task", meth.to_s, nil, klass)
-    end
-    
-    def initialize(*args)
-      # keep the original opts - we need them later on
-      @options = args[3] || {}
-      super
-    end
-
-    def parse(obj, args)
-      list, hash = parse_args(args)
-      obj.options = hash
-      run(obj, *list)
-    end
-
-    def run(obj, *params)
-      raise NoMethodError, "the `#{meth}' task of #{obj.class} is private" if
-        (obj.private_methods + obj.protected_methods).include?(meth)
-      
-      obj.send(meth, *params)
-    rescue ArgumentError => e
-      # backtrace sans anything in this file
-      backtrace = e.backtrace.reject {|frame| frame =~ /^#{Regexp.escape(__FILE__)}/}
-      # and sans anything that got us here
-      backtrace -= caller
-      raise e unless backtrace.empty?
-    
-      # okay, they really did call it wrong
-      raise Error, "`#{meth}' was called incorrectly. Call as `#{formatted_usage}'"
-    rescue NoMethodError => e
-      begin
-        raise e unless e.message =~ /^undefined method `#{meth}' for #{Regexp.escape(obj.inspect)}$/
-      rescue
-        raise e
-      end
-      raise Error, "The #{namespace false} namespace doesn't have a `#{meth}' task"
-    end
-
-    def namespace(remove_default = true)
-      Thor::Util.constant_to_thor_path(klass, remove_default)
-    end
-
-    def with_klass(klass)
-      new = self.dup
-      new.klass = klass
-      new
-    end
-    
-    def opts
-      return super unless super.kind_of? Hash
-      @_opts ||= Options.new(super)
-    end
-        
-    def full_opts
-      @_full_opts ||= Options.new((klass.opts || {}).merge(@options))
-    end
-    
-    def options?
-      @options.kind_of?(Hash) && !@options.empty?
-    end
-
-    def formatted_usage(namespace = false)
-      (namespace ? self.namespace + ':' : '') + usage +
-        (opts ? " " + opts.formatted_usage : "")
-    end
-
-    protected
-
-    def parse_args(args)
-      return [[], {}] if args.nil?
-      return [args, {}] unless options?
-      hash = full_opts.parse(args)
-      list = full_opts.non_opts
-      [list, hash]
-    end
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/task_hash.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/task_hash.rb
deleted file mode 100644
index 827857f..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/task_hash.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'thor/ordered_hash'
-require 'thor/task'
-
-class Thor::TaskHash < Thor::OrderedHash
-  def initialize(klass)
-    super()
-    @klass = klass
-  end
-
-  def each(local = false, &block)
-    super() { |k, t| yield k, t.with_klass(@klass) }
-    @klass.superclass.tasks.each { |k, t| yield k, t.with_klass(@klass) } unless local || @klass == Thor
-  end
-
-  def [](name)
-    if task = super(name) || (@klass == Thor && @klass.superclass.tasks[name])
-      return task.with_klass(@klass)
-    end
-
-    Thor::Task.dynamic(name, @klass)
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/tasks.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/tasks.rb
deleted file mode 100644
index cb215b1..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/tasks.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-require "thor"
-require "fileutils"
-
-class Thor
-  def self.package_task(spec)
-    desc "package", "package up the gem"
-    define_method :package do
-      FileUtils.mkdir_p(File.join(Dir.pwd, "pkg"))
-      Gem::Builder.new(spec).build
-      FileUtils.mv(spec.file_name, File.join(Dir.pwd, "pkg", spec.file_name))
-    end
-  end
-  
-  def self.install_task(spec)
-    package_task spec
-
-    null, sudo, gem = RUBY_PLATFORM =~ /w(in)?32$/ ? ['NUL', '', 'gem.bat'] :
-                                                     ['/dev/null', 'sudo', 'gem']
-    
-    desc "install", "install the gem"
-    define_method :install do
-      old_stderr, $stderr = $stderr.dup, File.open(null, "w")
-      package
-      $stderr = old_stderr
-      system %{#{sudo} #{gem} install pkg/#{spec.name}-#{spec.version} --no-rdoc --no-ri --no-update-sources}
-    end
-  end
-  
-  def self.spec_task(file_list, opts = {})
-    name = opts.delete(:name) || "spec"
-    rcov_dir = opts.delete(:rcov_dir) || "coverage"
-    file_list = file_list.map {|f| %["#{f}"]}.join(" ")
-    verbose = opts.delete(:verbose)
-    opts = {:format => "specdoc", :color => true}.merge(opts)
-    
-    rcov_opts = convert_task_options(opts.delete(:rcov) || {})
-    rcov = !rcov_opts.empty?
-    options = convert_task_options(opts)
-    
-    if rcov
-      FileUtils.rm_rf(File.join(Dir.pwd, rcov_dir))
-    end
-    
-    desc(name, "spec task")
-    define_method(name) do
-      cmd = "ruby "
-      if rcov
-        cmd << "-S rcov -o #{rcov_dir} #{rcov_opts} "
-      end
-      cmd << `which spec`.chomp
-      cmd << " -- " if rcov
-      cmd << " "
-      cmd << file_list
-      cmd << " "
-      cmd << options
-      puts cmd if verbose
-      system(cmd)
-      exit($?.exitstatus)
-    end
-  end
-  
-  private
-  def self.convert_task_options(opts)
-    opts.map do |key, value|
-      case value
-      when true
-        "--#{key}"
-      when Array
-        value.map {|v| "--#{key} #{v.inspect}"}.join(" ")
-      when nil, false
-        ""
-      else
-        "--#{key} #{value.inspect}"
-      end
-    end.join(" ")    
-  end  
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/tasks/package.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/tasks/package.rb
deleted file mode 100644
index e32fcfa..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/tasks/package.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require "thor/task"
-
-class Thor::PackageTask < Thor::Task
-  attr_accessor :spec
-  attr_accessor :opts
-
-  def initialize(gemspec, opts = {})
-    super(:package, "build a gem package")
-    @spec = gemspec
-    @opts = {:dir => File.join(Dir.pwd, "pkg")}.merge(opts)
-  end
-
-  def run
-    FileUtils.mkdir_p(@opts[:dir])
-    Gem::Builder.new(spec).build
-    FileUtils.mv(spec.file_name, File.join(@opts[:dir], spec.file_name))
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/util.rb b/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/util.rb
deleted file mode 100644
index ffa0a10..0000000
--- a/spec10/public/webrat/test_app/gems/gems/thor-0.9.8/lib/thor/util.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'thor/error'
-
-module ObjectSpace
-  
-  class << self
-
-    # @return <Array[Class]> All the classes in the object space.
-    def classes
-      klasses = []
-      ObjectSpace.each_object(Class) {|o| klasses << o}
-      klasses
-    end
-  end
-  
-end
-
-class Thor
-  module Util
-    
-    def self.constant_to_thor_path(str, remove_default = true)
-      str = snake_case(str.to_s).squeeze(":")
-      str.gsub!(/^default/, '') if remove_default
-      str
-    end
-
-    def self.constant_from_thor_path(str)
-      make_constant(to_constant(str))
-    rescue NameError => e
-      raise e unless e.message =~ /^uninitialized constant (.*)$/
-      raise Error, "There was no available namespace `#{str}'."
-    end
-
-    def self.to_constant(str)
-      str = 'default' if str.empty?
-      str.gsub(/:(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
-    end
-
-    def self.constants_in_contents(str)
-      klasses = ObjectSpace.classes.dup
-      Module.new.class_eval(str)
-      klasses = ObjectSpace.classes - klasses
-      klasses = klasses.select {|k| k < Thor }
-      klasses.map! {|k| k.to_s.gsub(/#<Module:\w+>::/, '')}
-    end
-
-    def self.make_constant(str)
-      list = str.split("::").inject(Object) {|obj, x| obj.const_get(x)}
-    end
-    
-    def self.snake_case(str)
-      return str.downcase if str =~ /^[A-Z_]+$/
-      str.gsub(/\B[A-Z]/, '_\&').squeeze('_') =~ /_*(.*)/
-      return $+.downcase
-    end  
-    
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/abstract-1.0.0.gemspec b/spec10/public/webrat/test_app/gems/specifications/abstract-1.0.0.gemspec
deleted file mode 100644
index b4d6fca..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/abstract-1.0.0.gemspec
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{abstract}
-  s.version = "1.0.0"
-
-  s.required_rubygems_version = nil if s.respond_to? :required_rubygems_version=
-  s.authors = ["makoto kuwata"]
-  s.cert_chain = nil
-  s.date = %q{2006-03-12}
-  s.description = %q{'abstract.rb' is a library which enable you to define abstract method in Ruby.}
-  s.files = ["lib/abstract.rb", "test/test.rb", "README.txt", "ChangeLog", "setup.rb", "abstract.gemspec"]
-  s.homepage = %q{http://rubyforge.org/projects/abstract}
-  s.require_paths = ["lib"]
-  s.required_ruby_version = Gem::Requirement.new("> 0.0.0")
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{a library which enable you to define abstract method in Ruby}
-  s.test_files = ["test/test.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 1
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/cgi_multipart_eof_fix-2.5.0.gemspec b/spec10/public/webrat/test_app/gems/specifications/cgi_multipart_eof_fix-2.5.0.gemspec
deleted file mode 100644
index ba1a398..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/cgi_multipart_eof_fix-2.5.0.gemspec
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{cgi_multipart_eof_fix}
-  s.version = "2.5.0"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Evan Weaver"]
-  s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDUDCCAjigAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n\ncmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK\nCZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzI0OVoXDTA4MDkxNTEwMzI0OVow\nTjEcMBoGA1UEAwwTbW9uZ3JlbC1kZXZlbG9wbWVudDEZMBcGCgmSJomT8ixkARkW\nCXJ1Ynlmb3JnZTETMBEGCgmSJomT8ixkARkWA29yZzCCASIwDQYJKoZIhvcNAQEB\nBQADggEPADCCAQoCggEBAMb9v3B01eOHk3FyypbQgKXzJplUE5P6dXoG+xpPm0Lv\nP7BQmeMncOwqQ7zXpVQU+lTpXtQFTsOE3vL7KnhQFJKGvUAkbh24VFyopu1I0yqF\nmGu4nRqNXGXVj8TvLSj4S1WpSRLAa0acLPNyKhGmoV9+crqQypSjM6XKjBeppifo\n4eBmWGjiJEYMIJBvJZPJ4rAVDDA8C6CM1m3gMBGNh8ELDhU8HI9AP3dMIkTI2Wx9\n9xkJwHdroAaS0IFFtYChrwee4FbCF1FHDgoTosMwa47DrLHg4hZ6ojaKwK5QVWEV\nXGb6ju5UqpktnSWF2W+Lvl/K0tI42OH2CAhebT1gEVUCAwEAAaM5MDcwCQYDVR0T\nBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGHChyMSZ16u9WOzKhgJSQ9lqDc5\nMA0GCSqGSIb3DQEBBQUAA4IBAQA/lfeN2WdB1xN+82tT7vNS4HOjRQw6MUh5yktu\nGQjaGqm0UB+aX0Z9y0B0qpfv9rj7nmIvEGiwBmDepNWYCGuW15JyqpN7QVVnG2xS\nMrame7VqgjM7A+VGDD5In5LtWbM/CHAATvvFlQ5Ph13YE1EdnVbZ65c+KQv+5sFY\nQ+zEop74d878uaC/SAHHXS46TiXneocaLSYw1CEZs/MAIy+9c4Q5ESbGpgnfg1Ad\n6lwl7k3hsNHO/+tZzx4HJtOXDI1yAl3+q6T9J0yI3z97EinwvAKhS1eyOI2Y5eeT\ntbQaNYkU127B3l/VNpd8fQm3Jkl/PqCCmDBQjUszFrJEODug\n-----END CERTIFICATE-----\n", "-----BEGIN CERTIFICATE-----\nMIIDPzCCAiegAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n\ncmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK\nCZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzMwMFoXDTA4MDkxNTEwMzMwMFow\nPTENMAsGA1UEAwwEZXZhbjEYMBYGCgmSJomT8ixkARkWCGNsb3VkYnVyMRIwEAYK\nCZImiZPyLGQBGRYCc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDk\nLQijz2fICmev4+9s0WB71WzJFYCUYFQQxqGlenbxWut9dlPSsBbskGjg+UITeOXi\ncTh3MTqAB0i1LJyNOiyvDsAivn7GjKXhVvflp2/npMhBBe83P4HOWqeQBjkk3QJI\nFFNBvqbFLeEXIP+HiqAOiyNHZEVXMepLEJLzGrg3Ly7M7A6L5fK7jDrt8jkm+c+8\nzGquVHV5ohAebGd/vpHMLjpA7lCG5+MBgYZd33rRfNtCxDJMNRgnOu9PsB05+LJn\nMpDKQq3x0SkOf5A+MVOcadNCaAkFflYk3SUcXaXWxu/eCHgqfW1m76RNSp5djpKE\nCgNPK9lGIWpB3CHzDaVNAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSw\nMB0GA1UdDgQWBBT5aonPfFBdJ5rWFG+8dZwgyB54LjANBgkqhkiG9w0BAQUFAAOC\nAQEAiKbzWgMcvZs/TPwJxr8tJ+7mSGz7+zDkWcbBl8FpQq1DtRcATh1oyTkQT7t+\nrFEBYMmb0FxbbUnojQp8hIFgFkUwFpStwWBL/okLSehntzI2iwjuEtfj4ac9Q3Y2\nuSdbmZqsQTuu+lEUc5C4qLK7YKwToaul+cx7vWxyk1YendcVwRlFLIBqA5cPrwo3\nyyGLTHlRYn2c9PSbM1B63Yg+LqSSAa4QSU3Wv9pNdffVpvwHPVEQpO7ZDo5slQFL\nGf6+gbD/eZAvhpvmn8JlXb+LxKaFVMs2Yvrk1xOuT76SsPjEGWxkr7jZCIpsYfgQ\nALN3mi/9z0Mf1YroliUgF0v5Yw==\n-----END CERTIFICATE-----\n"]
-  s.date = %q{2007-10-26}
-  s.description = %q{Fix an exploitable bug in CGI multipart parsing.}
-  s.email = %q{}
-  s.files = ["CHANGELOG", "lib/cgi_multipart_eof_fix.rb", "LICENSE", "Manifest", "README", "test/test_cgi_multipart_eof_fix.rb", "cgi_multipart_eof_fix.gemspec"]
-  s.has_rdoc = true
-  s.homepage = %q{http://blog.evanweaver.com/pages/code#cgi_multipart_eof_fix}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{mongrel}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{Fix an exploitable bug in CGI multipart parsing.}
-  s.test_files = ["test/test_cgi_multipart_eof_fix.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/daemons-1.0.10.gemspec b/spec10/public/webrat/test_app/gems/specifications/daemons-1.0.10.gemspec
deleted file mode 100644
index 3cb3a31..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/daemons-1.0.10.gemspec
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{daemons}
-  s.version = "1.0.10"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Thomas Uehlinger"]
-  s.autorequire = %q{daemons}
-  s.date = %q{2008-03-20}
-  s.description = %q{Daemons provides an easy way to wrap existing ruby scripts (for example a self-written server)  to be run as a daemon and to be controlled by simple start/stop/restart commands.  You can also call blocks as daemons and control them from the parent or just daemonize the current process.  Besides this basic functionality, daemons offers many advanced features like exception  backtracing and logging (in case your ruby script crashes) and monitoring and automatic restarting of your processes if they crash.}
-  s.email = %q{th.uehlinger at gmx.ch}
-  s.extra_rdoc_files = ["README", "Releases", "TODO"]
-  s.files = ["Rakefile", "Releases", "TODO", "README", "LICENSE", "setup.rb", "lib/daemons/application.rb", "lib/daemons/application_group.rb", "lib/daemons/cmdline.rb", "lib/daemons/controller.rb", "lib/daemons/daemonize.rb", "lib/daemons/exceptions.rb", "lib/daemons/monitor.rb", "lib/daemons/pid.rb", "lib/daemons/pidfile.rb", "lib/daemons/pidmem.rb", "lib/daemons.rb", "examples/call", "examples/call/call.rb", "examples/call/call_monitor.rb", "examples/daemonize", "examples/daemonize/daemonize.rb", "examples/run", "examples/run/ctrl_crash.rb", "examples/run/ctrl_exec.rb", "examples/run/ctrl_exit.rb", "examples/run/ctrl_keep_pid_files.rb", "examples/run/ctrl_monitor.rb", "examples/run/ctrl_multiple.rb", "examples/run/ctrl_normal.rb", "examples/run/ctrl_ontop.rb", "examples/run/ctrl_optionparser.rb", "examples/run/ctrl_proc.rb", "examples/run/ctrl_proc.rb.output", "examples/run/ctrl_proc_multiple.rb", "examples/run/ctrl_proc_multiple.rb.output", "examples/run/ctrl_proc_simple.rb", "examples/run/myserver.rb", "examples/run/myserver_crashing.rb", "examples/run/myserver_crashing.rb.output", "examples/run/myserver_exiting.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://daemons.rubyforge.org}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{daemons}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{A toolkit to create and control daemons in different ways}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/erubis-2.6.2.gemspec b/spec10/public/webrat/test_app/gems/specifications/erubis-2.6.2.gemspec
deleted file mode 100644
index 26816a4..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/erubis-2.6.2.gemspec
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{erubis}
-  s.version = "2.6.2"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["makoto kuwata"]
-  s.date = %q{2008-06-12}
-  s.default_executable = %q{erubis}
-  s.description = %q{Erubis is an implementation of eRuby and has the following features:  * Very fast, almost three times faster than ERB and about 10% faster than eruby. * Multi-language support (Ruby/PHP/C/Java/Scheme/Perl/Javascript) * Auto escaping support * Auto trimming spaces around '<% %>' * Embedded pattern changeable (default '<% %>') * Enable to handle Processing Instructions (PI) as embedded pattern (ex. '<?rb ... ?>') * Context object available and easy to combine eRuby template with YAML datafile * Print statement available * Easy to extend and customize in subclass * Ruby on Rails support}
-  s.email = %q{kwa(at)kuwata-lab.com}
-  s.executables = ["erubis"]
-  s.files = ["lib/erubis", "lib/erubis/context.rb", "lib/erubis/converter.rb", "lib/erubis/engine", "lib/erubis/engine/ec.rb", "lib/erubis/engine/ejava.rb", "lib/erubis/engine/ejavascript.rb", "lib/erubis/engine/enhanced.rb", "lib/erubis/engine/eperl.rb", "lib/erubis/engine/ephp.rb", "lib/erubis/engine/eruby.rb", "lib/erubis/engine/escheme.rb", "lib/erubis/engine/optimized.rb", "lib/erubis/engine.rb", "lib/erubis/enhancer.rb", "lib/erubis/error.rb", "lib/erubis/evaluator.rb", "lib/erubis/generator.rb", "lib/erubis/helper.rb", "lib/erubis/helpers", "lib/erubis/helpers/rails_form_helper.rb", "lib/erubis/helpers/rails_helper.rb", "lib/erubis/local-setting.rb", "lib/erubis/main.rb", "lib/erubis/preprocessing.rb", "lib/erubis/tiny.rb", "lib/erubis.rb", "bin/erubis", "examples/basic", "examples/basic/example.ec", "examples/basic/example.ejava", "examples/basic/example.ejs", "examples/basic/example.eperl", "examples/basic/example.ephp", "examples/basic/example.eruby", "examples/basic/example.escheme", "examples/basic/Makefile", "examples/pi", "examples/pi/example.ec", "examples/pi/example.ejava", "examples/pi/example.ejs", "examples/pi/example.eperl", "examples/pi/example.ephp", "examples/pi/example.eruby", "examples/pi/example.escheme", "examples/pi/Makefile", "test/assert-text-equal.rb", "test/assert-text-equal.rbc", "test/data", "test/data/users-guide", "test/data/users-guide/array_example.result", "test/data/users-guide/arraybuffer_example.result", "test/data/users-guide/bipattern-example.rhtml", "test/data/users-guide/bipattern_example.result", "test/data/users-guide/context.rb", "test/data/users-guide/context.yaml", "test/data/users-guide/def_method.rb", "test/data/users-guide/def_method.result", "test/data/users-guide/escape_example.result", "test/data/users-guide/example.ec", "test/data/users-guide/Example.ejava", "test/data/users-guide/example.ejs", "test/data/users-guide/example.eperl", "test/data/users-guide/example.ephp", "test/data/users-guide/example.eruby", "test/data/users-guide/example.escheme", "test/data/users-guide/example1.eruby", "test/data/users-guide/example1.rb", "test/data/users-guide/example1.result", "test/data/users-guide/example10.rb", "test/data/users-guide/example10.result", "test/data/users-guide/example10.xhtml", "test/data/users-guide/example10_x.result", "test/data/users-guide/example11.php", "test/data/users-guide/example11.result", "test/data/users-guide/example11.rhtml", "test/data/users-guide/example11_C.result", "test/data/users-guide/example11_N.result", "test/data/users-guide/example11_php.result", "test/data/users-guide/example11_U.result", "test/data/users-guide/example1_x.result", "test/data/users-guide/example2.eruby", "test/data/users-guide/example2.rb", "test/data/users-guide/example2.result", "test/data/users-guide/example2_trim.result", "test/data/users-guide/example2_x.result", "test/data/users-guide/example3.eruby", "test/data/users-guide/example3.rb", "test/data/users-guide/example31.result", "test/data/users-guide/example32.result", "test/data/users-guide/example3_e.result", "test/data/users-guide/example4.eruby", "test/data/users-guide/example4.rb", "test/data/users-guide/example4.result", "test/data/users-guide/example4_x.result", "test/data/users-guide/example5.eruby", "test/data/users-guide/example5.rb", "test/data/users-guide/example5.result", "test/data/users-guide/example6.rb", "test/data/users-guide/example6.result", "test/data/users-guide/example7.eruby", "test/data/users-guide/example71.result", "test/data/users-guide/example72.result", "test/data/users-guide/example8.eruby", "test/data/users-guide/example8_ruby.result", "test/data/users-guide/example8_yaml.result", "test/data/users-guide/example9.eruby", "test/data/users-guide/example9.rb", "test/data/users-guide/example9.result", "test/data/users-guide/example91.result", "test/data/users-guide/example92.result", "test/data/users-guide/example_c.result", "test/data/users-guide/example_java.result", "test/data/users-guide/example_js.result", "test/data/users-guide/example_perl.result", "test/data/users-guide/example_php.result", "test/data/users-guide/example_scheme.result", "test/data/users-guide/example_scheme_display.result", "test/data/users-guide/fasteruby.rb", "test/data/users-guide/fasteruby.result", "test/data/users-guide/fasteruby.rhtml", "test/data/users-guide/headerfooter-example.eruby", "test/data/users-guide/headerfooter-example2.rb", "test/data/users-guide/headerfooter-example2.rhtml", "test/data/users-guide/headerfooter_example.result", "test/data/users-guide/headerfooter_example2.result", "test/data/users-guide/interpolation_example.result", "test/data/users-guide/main_program1.rb", "test/data/users-guide/main_program1.result", "test/data/users-guide/main_program2.rb", "test/data/users-guide/main_program2.result", "test/data/users-guide/nocode-example.eruby", "test/data/users-guide/nocode-php.result", "test/data/users-guide/nocode_example.result", "test/data/users-guide/normal-eruby-test.eruby", "test/data/users-guide/normal_eruby_test.result", "test/data/users-guide/notext-example.eruby", "test/data/users-guide/notext-example.php", "test/data/users-guide/notext-php.result", "test/data/users-guide/notext_example.result", "test/data/users-guide/percentline-example.rhtml", "test/data/users-guide/percentline_example.result", "test/data/users-guide/printenable_example.result", "test/data/users-guide/printenabled-example.eruby", "test/data/users-guide/printenabled-example.rb", "test/data/users-guide/printstatement_example.result", "test/data/users-guide/simplify_example.result", "test/data/users-guide/stdout_exmple.result", "test/data/users-guide/stringbuffer_example.result", "test/data/users-guide/tail_260.result", "test/data/users-guide/tailnewline.rhtml", "test/data/users-guide/template1.rhtml", "test/data/users-guide/template2.rhtml", "test/hoge.rb", "test/test-engines.rb", "test/test-engines.rbc", "test/test-enhancers.rb", "test/test-erubis.rb", "test/test-erubis.rbc", "test/test-main.rb", "test/test-users-guide.rb", "test/test-users-guide.rbc", "test/test.rb", "test/test.rbc", "test/testutil.rb", "test/testutil.rbc", "doc/docstyle.css", "doc/users-guide.html", "README.txt", "CHANGES.txt", "MIT-LICENSE", "setup.rb", "contrib/erubis", "contrib/erubis-run.rb", "contrib/inline-require", "benchmark/bench.rb", "benchmark/bench_context.yaml", "benchmark/Makefile", "benchmark/templates", "benchmark/templates/_footer.html", "benchmark/templates/_header.html", "benchmark/templates/bench_erb.rhtml", "benchmark/templates/bench_erubis.rhtml", "benchmark/templates/bench_eruby.rhtml", "doc-api/classes", "doc-api/classes/ActionView", "doc-api/classes/ActionView/TemplateHandlers", "doc-api/classes/ActionView/TemplateHandlers/ErubisHandler.html", "doc-api/classes/ActionView.html", "doc-api/classes/ERB.html", "doc-api/classes/Erubis", "doc-api/classes/Erubis/ArrayBufferEnhancer.html", "doc-api/classes/Erubis/ArrayBufferEruby.html", "doc-api/classes/Erubis/ArrayEnhancer.html", "doc-api/classes/Erubis/ArrayEruby.html", "doc-api/classes/Erubis/Basic", "doc-api/classes/Erubis/Basic/Converter.html", "doc-api/classes/Erubis/Basic/Engine.html", "doc-api/classes/Erubis/Basic.html", "doc-api/classes/Erubis/BiPatternEnhancer.html", "doc-api/classes/Erubis/BiPatternEruby.html", "doc-api/classes/Erubis/CGenerator.html", "doc-api/classes/Erubis/CommandOptionError.html", "doc-api/classes/Erubis/Context.html", "doc-api/classes/Erubis/Converter.html", "doc-api/classes/Erubis/DeleteIndentEnhancer.html", "doc-api/classes/Erubis/DeleteIndentEruby.html", "doc-api/classes/Erubis/Ec.html", "doc-api/classes/Erubis/Ejava.html", "doc-api/classes/Erubis/Ejavascript.html", "doc-api/classes/Erubis/Engine.html", "doc-api/classes/Erubis/Eperl.html", "doc-api/classes/Erubis/Ephp.html", "doc-api/classes/Erubis/ErboutEnhancer.html", "doc-api/classes/Erubis/ErboutEruby.html", "doc-api/classes/Erubis/ErubisError.html", "doc-api/classes/Erubis/Eruby.html", "doc-api/classes/Erubis/EscapedEc.html", "doc-api/classes/Erubis/EscapedEjava.html", "doc-api/classes/Erubis/EscapedEjavascript.html", "doc-api/classes/Erubis/EscapedEperl.html", "doc-api/classes/Erubis/EscapedEphp.html", "doc-api/classes/Erubis/EscapedEruby.html", "doc-api/classes/Erubis/EscapedEscheme.html", "doc-api/classes/Erubis/EscapeEnhancer.html", "doc-api/classes/Erubis/Escheme.html", "doc-api/classes/Erubis/Evaluator.html", "doc-api/classes/Erubis/FastEruby.html", "doc-api/classes/Erubis/Generator.html", "doc-api/classes/Erubis/HeaderFooterEnhancer.html", "doc-api/classes/Erubis/HeaderFooterEruby.html", "doc-api/classes/Erubis/Helpers", "doc-api/classes/Erubis/Helpers/RailsFormHelper.html", "doc-api/classes/Erubis/Helpers/RailsHelper", "doc-api/classes/Erubis/Helpers/RailsHelper/TemplateConverter.html", "doc-api/classes/Erubis/Helpers/RailsHelper.html", "doc-api/classes/Erubis/Helpers.html", "doc-api/classes/Erubis/InterpolationEnhancer.html", "doc-api/classes/Erubis/InterpolationEruby.html", "doc-api/classes/Erubis/JavaGenerator.html", "doc-api/classes/Erubis/JavascriptGenerator.html", "doc-api/classes/Erubis/Main.html", "doc-api/classes/Erubis/NoCodeEnhancer.html", "doc-api/classes/Erubis/NoCodeEruby.html", "doc-api/classes/Erubis/NoTextEnhancer.html", "doc-api/classes/Erubis/NoTextEruby.html", "doc-api/classes/Erubis/NotSupportedError.html", "doc-api/classes/Erubis/OptimizedEruby.html", "doc-api/classes/Erubis/OptimizedGenerator.html", "doc-api/classes/Erubis/OptimizedXmlEruby.html", "doc-api/classes/Erubis/PercentLineEnhancer.html", "doc-api/classes/Erubis/PercentLineEruby.html", "doc-api/classes/Erubis/PerlGenerator.html", "doc-api/classes/Erubis/PhpGenerator.html", "doc-api/classes/Erubis/PI", "doc-api/classes/Erubis/PI/Converter.html", "doc-api/classes/Erubis/PI/Ec.html", "doc-api/classes/Erubis/PI/Ejava.html", "doc-api/classes/Erubis/PI/Ejavascript.html", "doc-api/classes/Erubis/PI/Engine.html", "doc-api/classes/Erubis/PI/Eperl.html", "doc-api/classes/Erubis/PI/Ephp.html", "doc-api/classes/Erubis/PI/Eruby.html", "doc-api/classes/Erubis/PI/Escheme.html", "doc-api/classes/Erubis/PI/TinyEruby.html", "doc-api/classes/Erubis/PI.html", "doc-api/classes/Erubis/PreprocessingEruby.html", "doc-api/classes/Erubis/PreprocessingHelper.html", "doc-api/classes/Erubis/PrintEnabledEnhancer.html", "doc-api/classes/Erubis/PrintEnabledEruby.html", "doc-api/classes/Erubis/PrintOutEnhancer.html", "doc-api/classes/Erubis/PrintOutEruby.html", "doc-api/classes/Erubis/PrintOutSimplifiedEruby.html", "doc-api/classes/Erubis/RubyEvaluator.html", "doc-api/classes/Erubis/RubyGenerator.html", "doc-api/classes/Erubis/SchemeGenerator.html", "doc-api/classes/Erubis/SimplifiedEruby.html", "doc-api/classes/Erubis/SimplifyEnhancer.html", "doc-api/classes/Erubis/StdoutEnhancer.html", "doc-api/classes/Erubis/StdoutEruby.html", "doc-api/classes/Erubis/StdoutSimplifiedEruby.html", "doc-api/classes/Erubis/StringBufferEnhancer.html", "doc-api/classes/Erubis/StringBufferEruby.html", "doc-api/classes/Erubis/StringIOEruby.html", "doc-api/classes/Erubis/TinyEruby.html", "doc-api/classes/Erubis/XmlEruby.html", "doc-api/classes/Erubis/XmlHelper.html", "doc-api/classes/Erubis.html", "doc-api/created.rid", "doc-api/files", "doc-api/files/erubis", "doc-api/files/erubis/context_rb.html", "doc-api/files/erubis/converter_rb.html", "doc-api/files/erubis/engine", "doc-api/files/erubis/engine/ec_rb.html", "doc-api/files/erubis/engine/ejava_rb.html", "doc-api/files/erubis/engine/ejavascript_rb.html", "doc-api/files/erubis/engine/enhanced_rb.html", "doc-api/files/erubis/engine/eperl_rb.html", "doc-api/files/erubis/engine/ephp_rb.html", "doc-api/files/erubis/engine/eruby_rb.html", "doc-api/files/erubis/engine/escheme_rb.html", "doc-api/files/erubis/engine/optimized_rb.html", "doc-api/files/erubis/engine_rb.html", "doc-api/files/erubis/enhancer_rb.html", "doc-api/files/erubis/error_rb.html", "doc-api/files/erubis/evaluator_rb.html", "doc-api/files/erubis/generator_rb.html", "doc-api/files/erubis/helper_rb.html", "doc-api/files/erubis/helpers", "doc-api/files/erubis/helpers/rails_form_helper_rb.html", "doc-api/files/erubis/helpers/rails_helper_rb.html", "doc-api/files/erubis/local-setting_rb.html", "doc-api/files/erubis/main_rb.html", "doc-api/files/erubis/preprocessing_rb.html", "doc-api/files/erubis/tiny_rb.html", "doc-api/files/erubis_rb.html", "doc-api/files/README_txt.html", "doc-api/fr_class_index.html", "doc-api/fr_file_index.html", "doc-api/fr_method_index.html", "doc-api/index.html", "doc-api/rdoc-style.css"]
-  s.homepage = %q{http://www.kuwata-lab.com/erubis/}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{erubis}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{a fast and extensible eRuby implementation which supports multi-language}
-  s.test_files = ["test/test.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-      s.add_runtime_dependency(%q<abstract>, [">= 1.0.0"])
-    else
-      s.add_dependency(%q<abstract>, [">= 1.0.0"])
-    end
-  else
-    s.add_dependency(%q<abstract>, [">= 1.0.0"])
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/extlib-0.9.8.gemspec b/spec10/public/webrat/test_app/gems/specifications/extlib-0.9.8.gemspec
deleted file mode 100644
index b1527e5..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/extlib-0.9.8.gemspec
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{extlib}
-  s.version = "0.9.8"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Sam Smoot"]
-  s.date = %q{2008-10-12}
-  s.description = %q{Support library for DataMapper and Merb.}
-  s.email = %q{ssmoot at gmail.com}
-  s.extra_rdoc_files = ["LICENSE", "README.txt"]
-  s.files = ["LICENSE", "README.txt", "Rakefile", "lib/extlib.rb", "lib/extlib", "lib/extlib/dictionary.rb", "lib/extlib/lazy_array.rb", "lib/extlib/nil.rb", "lib/extlib/class.rb", "lib/extlib/rubygems.rb", "lib/extlib/module.rb", "lib/extlib/string.rb", "lib/extlib/hook.rb", "lib/extlib/blank.rb", "lib/extlib/logger.rb", "lib/extlib/datetime.rb", "lib/extlib/assertions.rb", "lib/extlib/inflection.rb", "lib/extlib/pathname.rb", "lib/extlib/object_space.rb", "lib/extlib/mash.rb", "lib/extlib/virtual_file.rb", "lib/extlib/simple_set.rb", "lib/extlib/object.rb", "lib/extlib/hash.rb", "lib/extlib/version.rb", "lib/extlib/boolean.rb", "lib/extlib/symbol.rb", "lib/extlib/numeric.rb", "lib/extlib/struct.rb", "lib/extlib/pooling.rb", "lib/extlib/tasks", "lib/extlib/tasks/release.rb", "lib/extlib/time.rb"]
-  s.homepage = %q{http://extlib.rubyforge.org}
-  s.require_paths = ["lib"]
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{Support library for DataMapper and Merb.}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/fastthread-1.0.1.gemspec b/spec10/public/webrat/test_app/gems/specifications/fastthread-1.0.1.gemspec
deleted file mode 100644
index d40b9fc..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/fastthread-1.0.1.gemspec
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{fastthread}
-  s.version = "1.0.1"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["MenTaLguY <mental at rydia.net>"]
-  s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDUDCCAjigAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n\ncmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK\nCZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzI0OVoXDTA4MDkxNTEwMzI0OVow\nTjEcMBoGA1UEAwwTbW9uZ3JlbC1kZXZlbG9wbWVudDEZMBcGCgmSJomT8ixkARkW\nCXJ1Ynlmb3JnZTETMBEGCgmSJomT8ixkARkWA29yZzCCASIwDQYJKoZIhvcNAQEB\nBQADggEPADCCAQoCggEBAMb9v3B01eOHk3FyypbQgKXzJplUE5P6dXoG+xpPm0Lv\nP7BQmeMncOwqQ7zXpVQU+lTpXtQFTsOE3vL7KnhQFJKGvUAkbh24VFyopu1I0yqF\nmGu4nRqNXGXVj8TvLSj4S1WpSRLAa0acLPNyKhGmoV9+crqQypSjM6XKjBeppifo\n4eBmWGjiJEYMIJBvJZPJ4rAVDDA8C6CM1m3gMBGNh8ELDhU8HI9AP3dMIkTI2Wx9\n9xkJwHdroAaS0IFFtYChrwee4FbCF1FHDgoTosMwa47DrLHg4hZ6ojaKwK5QVWEV\nXGb6ju5UqpktnSWF2W+Lvl/K0tI42OH2CAhebT1gEVUCAwEAAaM5MDcwCQYDVR0T\nBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGHChyMSZ16u9WOzKhgJSQ9lqDc5\nMA0GCSqGSIb3DQEBBQUAA4IBAQA/lfeN2WdB1xN+82tT7vNS4HOjRQw6MUh5yktu\nGQjaGqm0UB+aX0Z9y0B0qpfv9rj7nmIvEGiwBmDepNWYCGuW15JyqpN7QVVnG2xS\nMrame7VqgjM7A+VGDD5In5LtWbM/CHAATvvFlQ5Ph13YE1EdnVbZ65c+KQv+5sFY\nQ+zEop74d878uaC/SAHHXS46TiXneocaLSYw1CEZs/MAIy+9c4Q5ESbGpgnfg1Ad\n6lwl7k3hsNHO/+tZzx4HJtOXDI1yAl3+q6T9J0yI3z97EinwvAKhS1eyOI2Y5eeT\ntbQaNYkU127B3l/VNpd8fQm3Jkl/PqCCmDBQjUszFrJEODug\n-----END CERTIFICATE-----\n", "-----BEGIN CERTIFICATE-----\nMIIDPzCCAiegAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n\ncmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK\nCZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzMwMFoXDTA4MDkxNTEwMzMwMFow\nPTENMAsGA1UEAwwEZXZhbjEYMBYGCgmSJomT8ixkARkWCGNsb3VkYnVyMRIwEAYK\nCZImiZPyLGQBGRYCc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDk\nLQijz2fICmev4+9s0WB71WzJFYCUYFQQxqGlenbxWut9dlPSsBbskGjg+UITeOXi\ncTh3MTqAB0i1LJyNOiyvDsAivn7GjKXhVvflp2/npMhBBe83P4HOWqeQBjkk3QJI\nFFNBvqbFLeEXIP+HiqAOiyNHZEVXMepLEJLzGrg3Ly7M7A6L5fK7jDrt8jkm+c+8\nzGquVHV5ohAebGd/vpHMLjpA7lCG5+MBgYZd33rRfNtCxDJMNRgnOu9PsB05+LJn\nMpDKQq3x0SkOf5A+MVOcadNCaAkFflYk3SUcXaXWxu/eCHgqfW1m76RNSp5djpKE\nCgNPK9lGIWpB3CHzDaVNAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSw\nMB0GA1UdDgQWBBT5aonPfFBdJ5rWFG+8dZwgyB54LjANBgkqhkiG9w0BAQUFAAOC\nAQEAiKbzWgMcvZs/TPwJxr8tJ+7mSGz7+zDkWcbBl8FpQq1DtRcATh1oyTkQT7t+\nrFEBYMmb0FxbbUnojQp8hIFgFkUwFpStwWBL/okLSehntzI2iwjuEtfj4ac9Q3Y2\nuSdbmZqsQTuu+lEUc5C4qLK7YKwToaul+cx7vWxyk1YendcVwRlFLIBqA5cPrwo3\nyyGLTHlRYn2c9PSbM1B63Yg+LqSSAa4QSU3Wv9pNdffVpvwHPVEQpO7ZDo5slQFL\nGf6+gbD/eZAvhpvmn8JlXb+LxKaFVMs2Yvrk1xOuT76SsPjEGWxkr7jZCIpsYfgQ\nALN3mi/9z0Mf1YroliUgF0v5Yw==\n-----END CERTIFICATE-----\n"]
-  s.date = %q{2007-10-26}
-  s.description = %q{Optimized replacement for thread.rb primitives}
-  s.email = %q{}
-  s.extensions = ["ext/fastthread/extconf.rb"]
-  s.files = ["test/test_queue.rb", "test/test_mutex.rb", "test/test_condvar.rb", "test/test_all.rb", "setup.rb", "Manifest", "ext/fastthread/fastthread.c", "ext/fastthread/extconf.rb", "CHANGELOG", "fastthread.gemspec"]
-  s.has_rdoc = true
-  s.homepage = %q{}
-  s.require_paths = ["lib", "ext"]
-  s.rubyforge_project = %q{mongrel}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{Optimized replacement for thread.rb primitives}
-  s.test_files = ["test/test_all.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/gem_plugin-0.2.3.gemspec b/spec10/public/webrat/test_app/gems/specifications/gem_plugin-0.2.3.gemspec
deleted file mode 100644
index fccc560..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/gem_plugin-0.2.3.gemspec
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{gem_plugin}
-  s.version = "0.2.3"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Zed A. Shaw"]
-  s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDUDCCAjigAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n\ncmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK\nCZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzI0OVoXDTA4MDkxNTEwMzI0OVow\nTjEcMBoGA1UEAwwTbW9uZ3JlbC1kZXZlbG9wbWVudDEZMBcGCgmSJomT8ixkARkW\nCXJ1Ynlmb3JnZTETMBEGCgmSJomT8ixkARkWA29yZzCCASIwDQYJKoZIhvcNAQEB\nBQADggEPADCCAQoCggEBAMb9v3B01eOHk3FyypbQgKXzJplUE5P6dXoG+xpPm0Lv\nP7BQmeMncOwqQ7zXpVQU+lTpXtQFTsOE3vL7KnhQFJKGvUAkbh24VFyopu1I0yqF\nmGu4nRqNXGXVj8TvLSj4S1WpSRLAa0acLPNyKhGmoV9+crqQypSjM6XKjBeppifo\n4eBmWGjiJEYMIJBvJZPJ4rAVDDA8C6CM1m3gMBGNh8ELDhU8HI9AP3dMIkTI2Wx9\n9xkJwHdroAaS0IFFtYChrwee4FbCF1FHDgoTosMwa47DrLHg4hZ6ojaKwK5QVWEV\nXGb6ju5UqpktnSWF2W+Lvl/K0tI42OH2CAhebT1gEVUCAwEAAaM5MDcwCQYDVR0T\nBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGHChyMSZ16u9WOzKhgJSQ9lqDc5\nMA0GCSqGSIb3DQEBBQUAA4IBAQA/lfeN2WdB1xN+82tT7vNS4HOjRQw6MUh5yktu\nGQjaGqm0UB+aX0Z9y0B0qpfv9rj7nmIvEGiwBmDepNWYCGuW15JyqpN7QVVnG2xS\nMrame7VqgjM7A+VGDD5In5LtWbM/CHAATvvFlQ5Ph13YE1EdnVbZ65c+KQv+5sFY\nQ+zEop74d878uaC/SAHHXS46TiXneocaLSYw1CEZs/MAIy+9c4Q5ESbGpgnfg1Ad\n6lwl7k3hsNHO/+tZzx4HJtOXDI1yAl3+q6T9J0yI3z97EinwvAKhS1eyOI2Y5eeT\ntbQaNYkU127B3l/VNpd8fQm3Jkl/PqCCmDBQjUszFrJEODug\n-----END CERTIFICATE-----\n", "-----BEGIN CERTIFICATE-----\nMIIDPzCCAiegAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n\ncmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK\nCZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzMwMFoXDTA4MDkxNTEwMzMwMFow\nPTENMAsGA1UEAwwEZXZhbjEYMBYGCgmSJomT8ixkARkWCGNsb3VkYnVyMRIwEAYK\nCZImiZPyLGQBGRYCc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDk\nLQijz2fICmev4+9s0WB71WzJFYCUYFQQxqGlenbxWut9dlPSsBbskGjg+UITeOXi\ncTh3MTqAB0i1LJyNOiyvDsAivn7GjKXhVvflp2/npMhBBe83P4HOWqeQBjkk3QJI\nFFNBvqbFLeEXIP+HiqAOiyNHZEVXMepLEJLzGrg3Ly7M7A6L5fK7jDrt8jkm+c+8\nzGquVHV5ohAebGd/vpHMLjpA7lCG5+MBgYZd33rRfNtCxDJMNRgnOu9PsB05+LJn\nMpDKQq3x0SkOf5A+MVOcadNCaAkFflYk3SUcXaXWxu/eCHgqfW1m76RNSp5djpKE\nCgNPK9lGIWpB3CHzDaVNAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSw\nMB0GA1UdDgQWBBT5aonPfFBdJ5rWFG+8dZwgyB54LjANBgkqhkiG9w0BAQUFAAOC\nAQEAiKbzWgMcvZs/TPwJxr8tJ+7mSGz7+zDkWcbBl8FpQq1DtRcATh1oyTkQT7t+\nrFEBYMmb0FxbbUnojQp8hIFgFkUwFpStwWBL/okLSehntzI2iwjuEtfj4ac9Q3Y2\nuSdbmZqsQTuu+lEUc5C4qLK7YKwToaul+cx7vWxyk1YendcVwRlFLIBqA5cPrwo3\nyyGLTHlRYn2c9PSbM1B63Yg+LqSSAa4QSU3Wv9pNdffVpvwHPVEQpO7ZDo5slQFL\nGf6+gbD/eZAvhpvmn8JlXb+LxKaFVMs2Yvrk1xOuT76SsPjEGWxkr7jZCIpsYfgQ\nALN3mi/9z0Mf1YroliUgF0v5Yw==\n-----END CERTIFICATE-----\n"]
-  s.date = %q{2007-10-26}
-  s.default_executable = %q{gpgen}
-  s.description = %q{A plugin system based on rubygems that uses dependencies only}
-  s.email = %q{}
-  s.executables = ["gpgen"]
-  s.files = ["test/test_plugins.rb", "setup.rb", "resources/resources/defaults.yaml", "resources/README", "resources/Rakefile", "resources/LICENSE", "resources/lib/project/init.rb", "resources/COPYING", "README", "Manifest", "LICENSE", "lib/gem_plugin.rb", "COPYING", "CHANGELOG", "bin/gpgen", "gem_plugin.gemspec"]
-  s.has_rdoc = true
-  s.homepage = %q{}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{mongrel}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{A plugin system based on rubygems that uses dependencies only}
-  s.test_files = ["test/test_plugins.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/json_pure-1.1.3.gemspec b/spec10/public/webrat/test_app/gems/specifications/json_pure-1.1.3.gemspec
deleted file mode 100644
index 37b76d7..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/json_pure-1.1.3.gemspec
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{json_pure}
-  s.version = "1.1.3"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Florian Frank"]
-  s.date = %q{2008-07-10}
-  s.default_executable = %q{edit_json.rb}
-  s.description = %q{}
-  s.email = %q{flori at ping.de}
-  s.executables = ["edit_json.rb"]
-  s.files = ["install.rb", "lib", "lib/json.rb", "lib/json", "lib/json/Array.xpm", "lib/json/FalseClass.xpm", "lib/json/json.xpm", "lib/json/editor.rb", "lib/json/Hash.xpm", "lib/json/Key.xpm", "lib/json/common.rb", "lib/json/String.xpm", "lib/json/pure", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/Numeric.xpm", "lib/json/ext.rb", "lib/json/pure.rb", "lib/json/NilClass.xpm", "lib/json/add", "lib/json/add/rails.rb", "lib/json/add/core.rb", "lib/json/TrueClass.xpm", "lib/json/version.rb", "ext", "ext/json", "ext/json/ext", "ext/json/ext/parser", "ext/json/ext/parser/unicode.h", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/unicode.c", "ext/json/ext/parser/parser.rl", "ext/json/ext/generator", "ext/json/ext/generator/unicode.h", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/unicode.c", "README", "diagrams", "CHANGES", "RUBY", "TODO", "VERSION", "tests", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/fixtures", "tests/fixtures/fail11.json", "tests/fixtures/fail5.json", "tests/fixtures/fail10.json", "tests/fixtures/fail3.json", "tests/fixtures/pass15.json", "tests/fixtures/fail9.json", "tests/fixtures/fail22.json", "tests/fixtures/fail6.json", "tests/fixtures/pass2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail19.json", "tests/fixtures/fail12.json", "tests/fixtures/fail7.json", "tests/fixtures/fail4.json", "tests/fixtures/fail1.json", "tests/fixtures/fail24.json", "tests/fixtures/fail21.json", "tests/fixtures/pass1.json", "tests/fixtures/fail2.json", "tests/fixtures/fail25.json", "tests/fixtures/pass16.json", "tests/fixtures/pass3.json", "tests/fixtures/fail18.json", "tests/fixtures/fail28.json", "tests/fixtures/fail13.json", "tests/fixtures/fail27.json", "tests/fixtures/pass17.json", "tests/fixtures/pass26.json", "tests/fixtures/fail23.json", "tests/fixtures/fail14.json", "tests/fixtures/fail8.json", "tests/runner.rb", "tests/test_json_generate.rb", "tests/test_json_rails.rb", "tests/test_json_unicode.rb", "tests/test_json_fixtures.rb", "benchmarks", "benchmarks/benchmark_parser.rb", "benchmarks/benchmark_generator.rb", "benchmarks/benchmark_rails.rb", "benchmarks/benchmark.txt", "Rakefile", "GPL", "data", "data/example.json", "data/index.html", "data/prototype.js", "bin", "bin/edit_json.rb", "bin/prettify_json.rb", "tools", "tools/fuzz.rb", "tools/server.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://json.rubyforge.org}
-  s.rdoc_options = ["--title", "JSON -- A JSON implemention", "--main", "JSON", "--line-numbers"]
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{json}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{A JSON implementation in Ruby}
-  s.test_files = ["tests/runner.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/merb-core-0.9.14.gemspec b/spec10/public/webrat/test_app/gems/specifications/merb-core-0.9.14.gemspec
deleted file mode 100644
index 378a14a..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/merb-core-0.9.14.gemspec
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{merb-core}
-  s.version = "0.9.14"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Ezra Zygmuntowicz"]
-  s.date = %q{2008-11-05}
-  s.default_executable = %q{merb}
-  s.description = %q{Merb. Pocket rocket web framework.}
-  s.email = %q{ez at engineyard.com}
-  s.executables = ["merb"]
-  s.extra_rdoc_files = ["README", "LICENSE", "TODO"]
-  s.files = ["LICENSE", "README", "Rakefile", "TODO", "CHANGELOG", "PUBLIC_CHANGELOG", "CONTRIBUTORS", "bin/merb", "bin/merb-specs", "lib/merb-core.rb", "lib/merb-core", "lib/merb-core/test.rb", "lib/merb-core/server.rb", "lib/merb-core/logger.rb", "lib/merb-core/bootloader.rb", "lib/merb-core/constants.rb", "lib/merb-core/config.rb", "lib/merb-core/core_ext", "lib/merb-core/core_ext/hash.rb", "lib/merb-core/core_ext/kernel.rb", "lib/merb-core/rack", "lib/merb-core/rack/middleware.rb", "lib/merb-core/rack/adapter", "lib/merb-core/rack/adapter/irb.rb", "lib/merb-core/rack/adapter/ebb.rb", "lib/merb-core/rack/adapter/fcgi.rb", "lib/merb-core/rack/adapter/mongrel.rb", "lib/merb-core/rack/adapter/swiftiplied_mongrel.rb", "lib/merb-core/rack/adapter/runner.rb", "lib/merb-core/rack/adapter/webrick.rb", "lib/merb-core/rack/adapter/thin.rb", "lib/merb-core/rack/adapter/evented_mongrel.rb", "lib/merb-core/rack/adapter/abstract.rb", "lib/merb-core/rack/adapter/thin_turbo.rb", "lib/merb-core/rack/application.rb", "lib/merb-core/rack/helpers.rb", "lib/merb-core/rack/handler", "lib/merb-core/rack/handler/mongrel.rb", "lib/merb-core/rack/adapter.rb", "lib/merb-core/rack/middleware", "lib/merb-core/rack/middleware/tracer.rb", "lib/merb-core/rack/middleware/content_length.rb", "lib/merb-core/rack/middleware/static.rb", "lib/merb-core/rack/middleware/profiler.rb", "lib/merb-core/rack/middleware/path_prefix.rb", "lib/merb-core/rack/middleware/conditional_get.rb", "lib/merb-core/rack/stream_wrapper.rb", "lib/merb-core/controller", "lib/merb-core/controller/template.rb", "lib/merb-core/controller/exceptions.rb", "lib/merb-core/controller/mixins", "lib/merb-core/controller/mixins/authentication.rb", "lib/merb-core/controller/mixins/responder.rb", "lib/merb-core/controller/mixins/conditional_get.rb", "lib/merb-core/controller/mixins/controller.rb", "lib/merb-core/controller/mixins/render.rb", "lib/merb-core/controller/abstract_controller.rb", "lib/merb-core/controller/mime.rb", "lib/merb-core/controller/merb_controller.rb", "lib/merb-core/tasks", "lib/merb-core/tasks/gem_management.rb", "lib/merb-core/tasks/stats.rake", "lib/merb-core/tasks/merb_rake_helper.rb", "lib/merb-core/tasks/merb.rb", "lib/merb-core/tasks/audit.rake", "lib/merb-core/version.rb", "lib/merb-core/autoload.rb", "lib/merb-core/dispatch", "lib/merb-core/dispatch/router.rb", "lib/merb-core/dispatch/request_parsers.rb", "lib/merb-core/dispatch/router", "lib/merb-core/dispatch/router/route.rb", "lib/merb-core/dispatch/router/behavior.rb", "lib/merb-core/dispatch/router/resources.rb", "lib/merb-core/dispatch/router/cached_proc.rb", "lib/merb-core/dispatch/cookies.rb", "lib/merb-core/dispatch/request.rb", "lib/merb-core/dispatch/session.rb", "lib/merb-core/dispatch/worker.rb", "lib/merb-core/dispatch/dispatcher.rb", "lib/merb-core/dispatch/session", "lib/merb-core/dispatch/session/cookie.rb", "lib/merb-core/dispatch/session/memcached.rb", "lib/merb-core/dispatch/session/container.rb", "lib/merb-core/dispatch/session/store_container.rb", "lib/merb-core/dispatch/session/memory.rb", "lib/merb-core/dispatch/default_exception", "lib/merb-core/dispatch/default_exception/views", "lib/merb-core/dispatch/default_exception/views/_css.html.erb", "lib/merb-core/dispatch/default_exception/views/_javascript.html.erb", "lib/merb-core/dispatch/default_exception/views/index.html.erb", "lib/merb-core/dispatch/default_exception/default_exception.rb", "lib/merb-core/gem_ext", "lib/merb-core/gem_ext/erubis.rb", "lib/merb-core/rack.rb", "lib/merb-core/test", "lib/merb-core/test/matchers", "lib/merb-core/test/matchers/view_matchers.rb", "lib/merb-core/test/matchers/request_matchers.rb", "lib/merb-core/test/matchers/route_matchers.rb", "lib/merb-core/test/matchers/controller_matchers.rb", "lib/merb-core/test/tasks", "lib/merb-core/test/tasks/spectasks.rb", "lib/merb-core/test/helpers.rb", "lib/merb-core/test/test_ext", "lib/merb-core/test/test_ext/object.rb", "lib/merb-core/test/test_ext/string.rb", "lib/merb-core/test/test_ext/rspec.rb", "lib/merb-core/test/test_ext/nokogiri.rb", "lib/merb-core/test/test_ext/hpricot.rb", "lib/merb-core/test/webrat.rb", "lib/merb-core/test/matchers.rb", "lib/merb-core/test/helpers", "lib/merb-core/test/helpers/controller_helper.rb", "lib/merb-core/test/helpers/mock_request_helper.rb", "lib/merb-core/test/helpers/route_helper.rb", "lib/merb-core/test/helpers/request_helper.rb", "lib/merb-core/test/helpers/multipart_request_helper.rb", "lib/merb-core/test/helpers/cookie_jar.rb", "lib/merb-core/test/run_specs.rb", "lib/merb-core/test/run_spec.rb", "lib/merb-core/core_ext.rb", "lib/merb-core/vendor", "lib/merb-core/vendor/nokogiri", "lib/merb-core/vendor/nokogiri/css.rb", "lib/merb-core/vendor/nokogiri/css", "lib/merb-core/vendor/nokogiri/css/xpath_visitor.rb", "lib/merb-core/vendor/nokogiri/css/generated_tokenizer.rb", "lib/merb-core/vendor/nokogiri/css/generated_parser.rb", "lib/merb-core/vendor/nokogiri/css/node.rb", "lib/merb-core/vendor/nokogiri/css/parser.y", "lib/merb-core/vendor/nokogiri/css/tokenizer.rb", "lib/merb-core/vendor/nokogiri/css/parser.rb", "lib/merb-core/vendor/nokogiri/css/tokenizer.rex", "lib/merb-core/plugins.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://merbivore.com}
-  s.require_paths = ["lib"]
-  s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
-  s.requirements = ["install the json gem to get faster json parsing"]
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{Merb. Pocket rocket web framework.}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-      s.add_runtime_dependency(%q<extlib>, [">= 0.9.8"])
-      s.add_runtime_dependency(%q<erubis>, [">= 2.6.2"])
-      s.add_runtime_dependency(%q<rake>, [">= 0"])
-      s.add_runtime_dependency(%q<json_pure>, [">= 0"])
-      s.add_runtime_dependency(%q<rspec>, [">= 0"])
-      s.add_runtime_dependency(%q<rack>, [">= 0"])
-      s.add_runtime_dependency(%q<mime-types>, [">= 0"])
-      s.add_runtime_dependency(%q<thor>, [">= 0.9.7"])
-    else
-      s.add_dependency(%q<extlib>, [">= 0.9.8"])
-      s.add_dependency(%q<erubis>, [">= 2.6.2"])
-      s.add_dependency(%q<rake>, [">= 0"])
-      s.add_dependency(%q<json_pure>, [">= 0"])
-      s.add_dependency(%q<rspec>, [">= 0"])
-      s.add_dependency(%q<rack>, [">= 0"])
-      s.add_dependency(%q<mime-types>, [">= 0"])
-      s.add_dependency(%q<thor>, [">= 0.9.7"])
-    end
-  else
-    s.add_dependency(%q<extlib>, [">= 0.9.8"])
-    s.add_dependency(%q<erubis>, [">= 2.6.2"])
-    s.add_dependency(%q<rake>, [">= 0"])
-    s.add_dependency(%q<json_pure>, [">= 0"])
-    s.add_dependency(%q<rspec>, [">= 0"])
-    s.add_dependency(%q<rack>, [">= 0"])
-    s.add_dependency(%q<mime-types>, [">= 0"])
-    s.add_dependency(%q<thor>, [">= 0.9.7"])
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/merb-helpers-0.9.14.gemspec b/spec10/public/webrat/test_app/gems/specifications/merb-helpers-0.9.14.gemspec
deleted file mode 100644
index 699ec01..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/merb-helpers-0.9.14.gemspec
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{merb-helpers}
-  s.version = "0.9.14"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Michael D. Ivey"]
-  s.date = %q{2008-11-04}
-  s.description = %q{Helper support for Merb}
-  s.email = %q{ivey at gweezlebur.com}
-  s.extra_rdoc_files = ["README", "LICENSE", "TODO"]
-  s.files = ["LICENSE", "README", "Rakefile", "TODO", "lib/merb-helpers", "lib/merb-helpers/time_dsl.rb", "lib/merb-helpers/core_ext", "lib/merb-helpers/core_ext/numeric.rb", "lib/merb-helpers/form", "lib/merb-helpers/form/helpers.rb", "lib/merb-helpers/form/builder.rb", "lib/merb-helpers/form_helpers.rb", "lib/merb-helpers/date_time_formatting.rb", "lib/merb-helpers/tag_helpers.rb", "lib/merb-helpers/core_ext.rb", "lib/merb-helpers/text_helpers.rb", "lib/merb-helpers/date_time_helpers.rb", "lib/merb-helpers.rb", "spec/fixture", "spec/fixture/public", "spec/fixture/public/stylesheets", "spec/fixture/public/stylesheets/master.css", "spec/fixture/public/merb.fcgi", "spec/fixture/public/images", "spec/fixture/public/images/merb.jpg", "spec/fixture/app", "spec/fixture/app/controllers", "spec/fixture/app/controllers/relative_date_span.rb", "spec/fixture/app/controllers/bound_option_tag.rb", "spec/fixture/app/controllers/radio_group.rb", "spec/fixture/app/controllers/bound_file_field.rb", "spec/fixture/app/controllers/bound_text_field.rb", "spec/fixture/app/controllers/select.rb", "spec/fixture/app/controllers/label.rb", "spec/fixture/app/controllers/application.rb", "spec/fixture/app/controllers/exceptions.rb", "spec/fixture/app/controllers/field_set.rb", "spec/fixture/app/controllers/bound_radio_group.rb", "spec/fixture/app/controllers/form_for.rb", "spec/fixture/app/controllers/bound_check_box.rb", "spec/fixture/app/controllers/form.rb", "spec/fixture/app/controllers/bound_hidden_field.rb", "spec/fixture/app/controllers/bound_radio_button.rb", "spec/fixture/app/controllers/bound_text_area.rb", "spec/fixture/app/controllers/bound_password_field.rb", "spec/fixture/app/controllers/fields_for.rb", "spec/fixture/app/controllers/text_area.rb", "spec/fixture/app/controllers/foo.rb", "spec/fixture/app/controllers/submit.rb", "spec/fixture/app/controllers/button.rb", "spec/fixture/app/controllers/check_box.rb", "spec/fixture/app/controllers/custom_builder.rb", "spec/fixture/app/controllers/password_field.rb", "spec/fixture/app/controllers/radio_button.rb", "spec/fixture/app/controllers/tag_helper.rb", "spec/fixture/app/controllers/specs_controller.rb", "spec/fixture/app/controllers/numeric_ext.rb", "spec/fixture/app/controllers/delete_button.rb", "spec/fixture/app/controllers/bound_select.rb", "spec/fixture/app/controllers/file_field.rb", "spec/fixture/app/controllers/text_field.rb", "spec/fixture/app/controllers/hidden_field.rb", "spec/fixture/app/controllers/option_tag.rb", "spec/fixture/app/controllers/relative_date.rb", "spec/fixture/app/views", "spec/fixture/app/views/check_box_specs", "spec/fixture/app/views/check_box_specs/basic.html.erb", "spec/fixture/app/views/check_box_specs/raises_error_if_on_off_and_boolean_false.html.erb", "spec/fixture/app/views/check_box_specs/raise_unless_both_on_and_off.html.erb", "spec/fixture/app/views/check_box_specs/label.html.erb", "spec/fixture/app/views/check_box_specs/disabled.html.erb", "spec/fixture/app/views/check_box_specs/to_string.html.erb", "spec/fixture/app/views/check_box_specs/simple.html.erb", "spec/fixture/app/views/check_box_specs/boolean.html.erb", "spec/fixture/app/views/check_box_specs/unchecked.html.erb", "spec/fixture/app/views/check_box_specs/on_off_is_boolean.html.erb", "spec/fixture/app/views/check_box_specs/raises_error_if_not_boolean.html.erb", "spec/fixture/app/views/bound_password_field_specs", "spec/fixture/app/views/bound_password_field_specs/attributes.html.erb", "spec/fixture/app/views/bound_password_field_specs/basic.html.erb", "spec/fixture/app/views/bound_password_field_specs/label.html.erb", "spec/fixture/app/views/relative_date_span_specs", "spec/fixture/app/views/relative_date_span_specs/date_span_on_same_day.html.erb", "spec/fixture/app/views/relative_date_span_specs/date_span_on_same_day_on_different_year.html.erb", "spec/fixture/app/views/option_tag_specs", "spec/fixture/app/views/option_tag_specs/with_blank.html.erb", "spec/fixture/app/views/option_tag_specs/with_prompt.html.erb", "spec/fixture/app/views/option_tag_specs/collection.html.erb", "spec/fixture/app/views/option_tag_specs/array.html.erb", "spec/fixture/app/views/option_tag_specs/multiple_selects.html.erb", "spec/fixture/app/views/option_tag_specs/clean.html.erb", "spec/fixture/app/views/option_tag_specs/no_extra_attributes.html.erb", "spec/fixture/app/views/option_tag_specs/optgroups.html.erb", "spec/fixture/app/views/option_tag_specs/selected.html.erb", "spec/fixture/app/views/form_for_specs", "spec/fixture/app/views/form_for_specs/basic.html.erb", "spec/fixture/app/views/layout", "spec/fixture/app/views/layout/application.html.erb", "spec/fixture/app/views/bound_radio_group_specs", "spec/fixture/app/views/bound_radio_group_specs/basic.html.erb", "spec/fixture/app/views/bound_radio_group_specs/override_id.html.erb", "spec/fixture/app/views/bound_radio_group_specs/hashes.html.erb", "spec/fixture/app/views/bound_radio_group_specs/mixed.html.erb", "spec/fixture/app/views/label_specs", "spec/fixture/app/views/label_specs/basic.html.erb", "spec/fixture/app/views/password_field_specs", "spec/fixture/app/views/password_field_specs/basic.html.erb", "spec/fixture/app/views/password_field_specs/disabled.html.erb", "spec/fixture/app/views/bound_hidden_field_specs", "spec/fixture/app/views/bound_hidden_field_specs/basic.html.erb", "spec/fixture/app/views/bound_hidden_field_specs/label.html.erb", "spec/fixture/app/views/bound_hidden_field_specs/errors.html.erb", "spec/fixture/app/views/bound_hidden_field_specs/hidden_error.html.erb", "spec/fixture/app/views/button_specs", "spec/fixture/app/views/button_specs/button_with_values.html.erb", "spec/fixture/app/views/button_specs/button_with_label.html.erb", "spec/fixture/app/views/button_specs/disabled_button.html.erb", "spec/fixture/app/views/bound_option_tag_specs", "spec/fixture/app/views/bound_option_tag_specs/grouped.html.erb", "spec/fixture/app/views/bound_option_tag_specs/nested.html.erb", "spec/fixture/app/views/bound_option_tag_specs/text_and_value.html.erb", "spec/fixture/app/views/radio_button_specs", "spec/fixture/app/views/radio_button_specs/basic.html.erb", "spec/fixture/app/views/radio_button_specs/label.html.erb", "spec/fixture/app/views/radio_button_specs/disabled.html.erb", "spec/fixture/app/views/form_specs", "spec/fixture/app/views/form_specs/fake_put_if_set.html.erb", "spec/fixture/app/views/form_specs/get_if_set.html.erb", "spec/fixture/app/views/form_specs/create_a_form.html.erb", "spec/fixture/app/views/form_specs/create_a_multipart_form.html.erb", "spec/fixture/app/views/form_specs/post_by_default.html.erb", "spec/fixture/app/views/form_specs/resourceful_form.html.erb", "spec/fixture/app/views/form_specs/fake_delete_if_set.html.erb", "spec/fixture/app/views/exeptions", "spec/fixture/app/views/exeptions/not_acceptable.html.erb", "spec/fixture/app/views/exeptions/not_found.html.erb", "spec/fixture/app/views/exeptions/client_error.html.erb", "spec/fixture/app/views/exeptions/internal_server_error.html.erb", "spec/fixture/app/views/tag_helper", "spec/fixture/app/views/tag_helper/nested_tags.html.erb", "spec/fixture/app/views/tag_helper/tag_with_attributes.html.erb", "spec/fixture/app/views/tag_helper/tag_with_content.html.erb", "spec/fixture/app/views/tag_helper/tag_with_content_in_the_block.html.erb", "spec/fixture/app/views/select_specs", "spec/fixture/app/views/select_specs/multiple.html.erb", "spec/fixture/app/views/select_specs/blank.html.erb", "spec/fixture/app/views/bound_text_area_specs", "spec/fixture/app/views/bound_text_area_specs/basic.html.erb", "spec/fixture/app/views/delete_button_specs", "spec/fixture/app/views/delete_button_specs/delete_with_extra_params.html.erb", "spec/fixture/app/views/delete_button_specs/delete_with_label.html.erb", "spec/fixture/app/views/delete_button_specs/delete_with_explicit_url.html.erb", "spec/fixture/app/views/delete_button_specs/simple_delete.html.erb", "spec/fixture/app/views/bound_radio_button_specs", "spec/fixture/app/views/bound_radio_button_specs/basic.html.erb", "spec/fixture/app/views/radio_group_specs", "spec/fixture/app/views/radio_group_specs/attributes.html.erb", "spec/fixture/app/views/radio_group_specs/basic.html.erb", "spec/fixture/app/views/radio_group_specs/hash.html.erb", "spec/fixture/app/views/radio_group_specs/specific_attributes.html.erb", "spec/fixture/app/views/hidden_field_specs", "spec/fixture/app/views/hidden_field_specs/basic.html.erb", "spec/fixture/app/views/hidden_field_specs/label.html.erb", "spec/fixture/app/views/hidden_field_specs/disabled.html.erb", "spec/fixture/app/views/bound_select_specs", "spec/fixture/app/views/bound_select_specs/basic.html.erb", "spec/fixture/app/views/bound_select_specs/multiple.html.erb", "spec/fixture/app/views/bound_select_specs/prompt.html.erb", "spec/fixture/app/views/bound_select_specs/with_options_with_blank.html.erb", "spec/fixture/app/views/bound_select_specs/blank.html.erb", "spec/fixture/app/views/bound_select_specs/with_options.html.erb", "spec/fixture/app/views/foo", "spec/fixture/app/views/foo/bar.html.erb", "spec/fixture/app/views/numeric_ext_specs", "spec/fixture/app/views/numeric_ext_specs/minutes_to_hours.html.erb", "spec/fixture/app/views/numeric_ext_specs/to_concurrency_default.html.erb", "spec/fixture/app/views/numeric_ext_specs/two_digits.html.erb", "spec/fixture/app/views/fields_for_specs", "spec/fixture/app/views/fields_for_specs/basic.html.erb", "spec/fixture/app/views/fields_for_specs/nil.html.erb", "spec/fixture/app/views/fields_for_specs/midstream.html.erb", "spec/fixture/app/views/bound_text_field_specs", "spec/fixture/app/views/bound_text_field_specs/basic.html.erb", "spec/fixture/app/views/bound_file_field_specs", "spec/fixture/app/views/bound_file_field_specs/with_label.html.erb", "spec/fixture/app/views/bound_file_field_specs/additional_attributes.html.erb", "spec/fixture/app/views/bound_file_field_specs/takes_string.html.erb", "spec/fixture/app/views/custom_builder_specs", "spec/fixture/app/views/custom_builder_specs/everything.html.erb", "spec/fixture/app/views/bound_check_box_specs", "spec/fixture/app/views/bound_check_box_specs/basic.html.erb", "spec/fixture/app/views/bound_check_box_specs/on_and_off.html.erb", "spec/fixture/app/views/bound_check_box_specs/checked.html.erb", "spec/fixture/app/views/bound_check_box_specs/label.html.erb", "spec/fixture/app/views/bound_check_box_specs/errors.html.erb", "spec/fixture/app/views/bound_check_box_specs/raise_value_error.html.erb", "spec/fixture/app/views/fieldset_specs", "spec/fixture/app/views/fieldset_specs/legend.html.erb", "spec/fixture/app/views/relative_date_specs", "spec/fixture/app/views/relative_date_specs/relative_yesterday.html.erb", "spec/fixture/app/views/relative_date_specs/relative_date_with_year.html.erb", "spec/fixture/app/views/relative_date_specs/relative_today.html.erb", "spec/fixture/app/views/relative_date_specs/relative_date_without_year.html.erb", "spec/fixture/app/views/relative_date_specs/relative_tomorrow.html.erb", "spec/fixture/app/views/text_area_specs", "spec/fixture/app/views/text_area_specs/basic.html.erb", "spec/fixture/app/views/text_area_specs/nil.html.erb", "spec/fixture/app/views/text_area_specs/label.html.erb", "spec/fixture/app/views/text_area_specs/disabled.html.erb", "spec/fixture/app/views/file_field_specs", "spec/fixture/app/views/file_field_specs/with_label.html.erb", "spec/fixture/app/views/file_field_specs/makes_multipart.html.erb", "spec/fixture/app/views/file_field_specs/disabled.html.erb", "spec/fixture/app/views/file_field_specs/with_values.html.erb", "spec/fixture/app/views/text_field_specs", "spec/fixture/app/views/text_field_specs/basic.html.erb", "spec/fixture/app/views/text_field_specs/class.html.erb", "spec/fixture/app/views/text_field_specs/label.html.erb", "spec/fixture/app/views/text_field_specs/disabled.html.erb", "spec/fixture/app/views/submit_specs", "spec/fixture/app/views/submit_specs/submit_with_label.html.erb", "spec/fixture/app/views/submit_specs/submit_with_values.html.erb", "spec/fixture/app/views/submit_specs/disabled_submit.html.erb", "spec/fixture/app/helpers", "spec/fixture/app/helpers/global_helpers.rb", "spec/fixture/app/models", "spec/fixture/app/models/third_generic_fake_model.rb", "spec/fixture/app/models/fake_dm_model.rb", "spec/fixture/app/models/first_generic_fake_model.rb", "spec/fixture/app/models/second_generic_fake_model.rb", "spec/fixture/config", "spec/fixture/config/router.rb", "spec/fixture/config/init.rb", "spec/fixture/config/rack.rb", "spec/fixture/config/environments", "spec/fixture/config/environments/test.rb", "spec/fixture/config/environments/development.rb", "spec/fixture/config/environments/production.rb", "spec/merb_helpers_form_spec.rb", "spec/merb_helpers_text_spec.rb", "spec/numeric_extlib_spec.rb", "spec/time_dsl_spec.rb", "spec/core_ext_spec.rb", "spec/merb_helpers_tag_helper_spec.rb", "spec/ordinalize_spec.rb", "spec/spec_helper.rb", "spec/merb_helpers_config_spec.rb", "spec/merb_helpers_date_time_spec.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://merbivore.com}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{merb}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{Helper support for Merb}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-      s.add_runtime_dependency(%q<merb-core>, [">= 0.9.14"])
-    else
-      s.add_dependency(%q<merb-core>, [">= 0.9.14"])
-    end
-  else
-    s.add_dependency(%q<merb-core>, [">= 0.9.14"])
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/mime-types-1.15.gemspec b/spec10/public/webrat/test_app/gems/specifications/mime-types-1.15.gemspec
deleted file mode 100644
index 57a458e..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/mime-types-1.15.gemspec
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{mime-types}
-  s.version = "1.15"
-
-  s.required_rubygems_version = nil if s.respond_to? :required_rubygems_version=
-  s.authors = ["Austin Ziegler"]
-  s.cert_chain = nil
-  s.date = %q{2006-02-12}
-  s.description = %q{This library allows for the identification of a file's likely MIME content type. This is release 1.15. The identification of MIME content type is based on a file's filename extensions.}
-  s.email = %q{austin at rubyforge.org}
-  s.extra_rdoc_files = ["README", "ChangeLog", "Install"]
-  s.files = ["lib/mime", "lib/mime/types.rb", "tests/tc_mime_type.rb", "tests/tc_mime_types.rb", "tests/testall.rb", "ChangeLog", "README", "LICENCE", "setup.rb", "Rakefile", "pre-setup.rb", "Install"]
-  s.has_rdoc = true
-  s.homepage = %q{http://mime-types.rubyforge.org/}
-  s.rdoc_options = ["--title", "MIME::Types", "--main", "README", "--line-numbers"]
-  s.require_paths = ["lib"]
-  s.required_ruby_version = Gem::Requirement.new("> 0.0.0")
-  s.rubyforge_project = %q{mime-types}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{Manages a MIME Content-Type that will return the Content-Type for a given filename.}
-  s.test_files = ["tests/testall.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 1
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/mongrel-1.1.5.gemspec b/spec10/public/webrat/test_app/gems/specifications/mongrel-1.1.5.gemspec
deleted file mode 100644
index 06dfb0b..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/mongrel-1.1.5.gemspec
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{mongrel}
-  s.version = "1.1.5"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Zed A. Shaw"]
-  s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDUDCCAjigAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n\ncmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK\nCZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzI0OVoXDTA4MDkxNTEwMzI0OVow\nTjEcMBoGA1UEAwwTbW9uZ3JlbC1kZXZlbG9wbWVudDEZMBcGCgmSJomT8ixkARkW\nCXJ1Ynlmb3JnZTETMBEGCgmSJomT8ixkARkWA29yZzCCASIwDQYJKoZIhvcNAQEB\nBQADggEPADCCAQoCggEBAMb9v3B01eOHk3FyypbQgKXzJplUE5P6dXoG+xpPm0Lv\nP7BQmeMncOwqQ7zXpVQU+lTpXtQFTsOE3vL7KnhQFJKGvUAkbh24VFyopu1I0yqF\nmGu4nRqNXGXVj8TvLSj4S1WpSRLAa0acLPNyKhGmoV9+crqQypSjM6XKjBeppifo\n4eBmWGjiJEYMIJBvJZPJ4rAVDDA8C6CM1m3gMBGNh8ELDhU8HI9AP3dMIkTI2Wx9\n9xkJwHdroAaS0IFFtYChrwee4FbCF1FHDgoTosMwa47DrLHg4hZ6ojaKwK5QVWEV\nXGb6ju5UqpktnSWF2W+Lvl/K0tI42OH2CAhebT1gEVUCAwEAAaM5MDcwCQYDVR0T\nBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFGHChyMSZ16u9WOzKhgJSQ9lqDc5\nMA0GCSqGSIb3DQEBBQUAA4IBAQA/lfeN2WdB1xN+82tT7vNS4HOjRQw6MUh5yktu\nGQjaGqm0UB+aX0Z9y0B0qpfv9rj7nmIvEGiwBmDepNWYCGuW15JyqpN7QVVnG2xS\nMrame7VqgjM7A+VGDD5In5LtWbM/CHAATvvFlQ5Ph13YE1EdnVbZ65c+KQv+5sFY\nQ+zEop74d878uaC/SAHHXS46TiXneocaLSYw1CEZs/MAIy+9c4Q5ESbGpgnfg1Ad\n6lwl7k3hsNHO/+tZzx4HJtOXDI1yAl3+q6T9J0yI3z97EinwvAKhS1eyOI2Y5eeT\ntbQaNYkU127B3l/VNpd8fQm3Jkl/PqCCmDBQjUszFrJEODug\n-----END CERTIFICATE-----\n", "-----BEGIN CERTIFICATE-----\nMIIDPzCCAiegAwIBAgIBADANBgkqhkiG9w0BAQUFADBOMRwwGgYDVQQDDBNtb25n\ncmVsLWRldmVsb3BtZW50MRkwFwYKCZImiZPyLGQBGRYJcnVieWZvcmdlMRMwEQYK\nCZImiZPyLGQBGRYDb3JnMB4XDTA3MDkxNjEwMzMwMFoXDTA4MDkxNTEwMzMwMFow\nPTENMAsGA1UEAwwEZXZhbjEYMBYGCgmSJomT8ixkARkWCGNsb3VkYnVyMRIwEAYK\nCZImiZPyLGQBGRYCc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDk\nLQijz2fICmev4+9s0WB71WzJFYCUYFQQxqGlenbxWut9dlPSsBbskGjg+UITeOXi\ncTh3MTqAB0i1LJyNOiyvDsAivn7GjKXhVvflp2/npMhBBe83P4HOWqeQBjkk3QJI\nFFNBvqbFLeEXIP+HiqAOiyNHZEVXMepLEJLzGrg3Ly7M7A6L5fK7jDrt8jkm+c+8\nzGquVHV5ohAebGd/vpHMLjpA7lCG5+MBgYZd33rRfNtCxDJMNRgnOu9PsB05+LJn\nMpDKQq3x0SkOf5A+MVOcadNCaAkFflYk3SUcXaXWxu/eCHgqfW1m76RNSp5djpKE\nCgNPK9lGIWpB3CHzDaVNAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSw\nMB0GA1UdDgQWBBT5aonPfFBdJ5rWFG+8dZwgyB54LjANBgkqhkiG9w0BAQUFAAOC\nAQEAiKbzWgMcvZs/TPwJxr8tJ+7mSGz7+zDkWcbBl8FpQq1DtRcATh1oyTkQT7t+\nrFEBYMmb0FxbbUnojQp8hIFgFkUwFpStwWBL/okLSehntzI2iwjuEtfj4ac9Q3Y2\nuSdbmZqsQTuu+lEUc5C4qLK7YKwToaul+cx7vWxyk1YendcVwRlFLIBqA5cPrwo3\nyyGLTHlRYn2c9PSbM1B63Yg+LqSSAa4QSU3Wv9pNdffVpvwHPVEQpO7ZDo5slQFL\nGf6+gbD/eZAvhpvmn8JlXb+LxKaFVMs2Yvrk1xOuT76SsPjEGWxkr7jZCIpsYfgQ\nALN3mi/9z0Mf1YroliUgF0v5Yw==\n-----END CERTIFICATE-----\n"]
-  s.date = %q{2008-05-22}
-  s.default_executable = %q{mongrel_rails}
-  s.description = %q{A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps.}
-  s.email = %q{}
-  s.executables = ["mongrel_rails"]
-  s.extensions = ["ext/http11/extconf.rb"]
-  s.extra_rdoc_files = ["CHANGELOG", "COPYING", "lib/mongrel/camping.rb", "lib/mongrel/cgi.rb", "lib/mongrel/command.rb", "lib/mongrel/configurator.rb", "lib/mongrel/const.rb", "lib/mongrel/debug.rb", "lib/mongrel/gems.rb", "lib/mongrel/handlers.rb", "lib/mongrel/header_out.rb", "lib/mongrel/http_request.rb", "lib/mongrel/http_response.rb", "lib/mongrel/init.rb", "lib/mongrel/rails.rb", "lib/mongrel/stats.rb", "lib/mongrel/tcphack.rb", "lib/mongrel/uri_classifier.rb", "lib/mongrel.rb", "LICENSE", "README"]
-  s.files = ["bin/mongrel_rails", "CHANGELOG", "COPYING", "examples/builder.rb", "examples/camping/blog.rb", "examples/camping/README", "examples/camping/tepee.rb", "examples/httpd.conf", "examples/mime.yaml", "examples/mongrel.conf", "examples/mongrel_simple_ctrl.rb", "examples/mongrel_simple_service.rb", "examples/monitrc", "examples/random_thrash.rb", "examples/simpletest.rb", "examples/webrick_compare.rb", "ext/http11/ext_help.h", "ext/http11/extconf.rb", "ext/http11/http11.c", "ext/http11/http11_parser.c", "ext/http11/http11_parser.h", "ext/http11/http11_parser.java.rl", "ext/http11/http11_parser.rl", "ext/http11/http11_parser_common.rl", "ext/http11_java/Http11Service.java", "ext/http11_java/org/jruby/mongrel/Http11.java", "ext/http11_java/org/jruby/mongrel/Http11Parser.java", "lib/mongrel/camping.rb", "lib/mongrel/cgi.rb", "lib/mongrel/command.rb", "lib/mongrel/configurator.rb", "lib/mongrel/const.rb", "lib/mongrel/debug.rb", "lib/mongrel/gems.rb", "lib/mongrel/handlers.rb", "lib/mongrel/header_out.rb", "lib/mongrel/http_request.rb", "lib/mongrel/http_response.rb", "lib/mongrel/init.rb", "lib/mongrel/mime_types.yml", "lib/mongrel/rails.rb", "lib/mongrel/stats.rb", "lib/mongrel/tcphack.rb", "lib/mongrel/uri_classifier.rb", "lib/mongrel.rb", "LICENSE", "Manifest", "mongrel-public_cert.pem", "mongrel.gemspec", "README", "setup.rb", "test/mime.yaml", "test/mongrel.conf", "test/test_cgi_wrapper.rb", "test/test_command.rb", "test/test_conditional.rb", "test/test_configurator.rb", "test/test_debug.rb", "test/test_handlers.rb", "test/test_http11.rb", "test/test_redirect_handler.rb", "test/test_request_progress.rb", "test/test_response.rb", "test/test_stats.rb", "test/test_uriclassifier.rb", "test/test_ws.rb", "test/testhelp.rb", "TODO", "tools/trickletest.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://mongrel.rubyforge.org}
-  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Mongrel", "--main", "README"]
-  s.require_paths = ["lib", "ext"]
-  s.required_ruby_version = Gem::Requirement.new(">= 1.8.4")
-  s.rubyforge_project = %q{mongrel}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps.}
-  s.test_files = ["test/test_cgi_wrapper.rb", "test/test_command.rb", "test/test_conditional.rb", "test/test_configurator.rb", "test/test_debug.rb", "test/test_handlers.rb", "test/test_http11.rb", "test/test_redirect_handler.rb", "test/test_request_progress.rb", "test/test_response.rb", "test/test_stats.rb", "test/test_uriclassifier.rb", "test/test_ws.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-      s.add_runtime_dependency(%q<gem_plugin>, [">= 0.2.3"])
-      s.add_runtime_dependency(%q<daemons>, [">= 1.0.3"])
-      s.add_runtime_dependency(%q<fastthread>, [">= 1.0.1"])
-      s.add_runtime_dependency(%q<cgi_multipart_eof_fix>, [">= 2.4"])
-    else
-      s.add_dependency(%q<gem_plugin>, [">= 0.2.3"])
-      s.add_dependency(%q<daemons>, [">= 1.0.3"])
-      s.add_dependency(%q<fastthread>, [">= 1.0.1"])
-      s.add_dependency(%q<cgi_multipart_eof_fix>, [">= 2.4"])
-    end
-  else
-    s.add_dependency(%q<gem_plugin>, [">= 0.2.3"])
-    s.add_dependency(%q<daemons>, [">= 1.0.3"])
-    s.add_dependency(%q<fastthread>, [">= 1.0.1"])
-    s.add_dependency(%q<cgi_multipart_eof_fix>, [">= 2.4"])
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/rack-0.4.0.gemspec b/spec10/public/webrat/test_app/gems/specifications/rack-0.4.0.gemspec
deleted file mode 100644
index f705e2d..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/rack-0.4.0.gemspec
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{rack}
-  s.version = "0.4.0"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Christian Neukirchen"]
-  s.date = %q{2008-08-20}
-  s.default_executable = %q{rackup}
-  s.description = %q{Rack provides minimal, modular and adaptable interface for developing web applications in Ruby.  By wrapping HTTP requests and responses in the simplest way possible, it unifies and distills the API for web servers, web frameworks, and software in between (the so-called middleware) into a single method call.  Also see http://rack.rubyforge.org.}
-  s.email = %q{chneukirchen at gmail.com}
-  s.executables = ["rackup"]
-  s.extra_rdoc_files = ["README", "SPEC", "RDOX", "KNOWN-ISSUES"]
-  s.files = ["AUTHORS", "COPYING", "KNOWN-ISSUES", "README", "Rakefile", "bin/rackup", "contrib/rack_logo.svg", "example/lobster.ru", "example/protectedlobster.rb", "example/protectedlobster.ru", "lib/rack.rb", "lib/rack/adapter/camping.rb", "lib/rack/auth/abstract/handler.rb", "lib/rack/auth/abstract/request.rb", "lib/rack/auth/basic.rb", "lib/rack/auth/digest/md5.rb", "lib/rack/auth/digest/nonce.rb", "lib/rack/auth/digest/params.rb", "lib/rack/auth/digest/request.rb", "lib/rack/auth/openid.rb", "lib/rack/builder.rb", "lib/rack/cascade.rb", "lib/rack/commonlogger.rb", "lib/rack/deflater.rb", "lib/rack/directory.rb", "lib/rack/file.rb", "lib/rack/handler.rb", "lib/rack/handler/cgi.rb", "lib/rack/handler/evented_mongrel.rb", "lib/rack/handler/fastcgi.rb", "lib/rack/handler/lsws.rb", "lib/rack/handler/mongrel.rb", "lib/rack/handler/scgi.rb", "lib/rack/handler/webrick.rb", "lib/rack/lint.rb", "lib/rack/lobster.rb", "lib/rack/mock.rb", "lib/rack/recursive.rb", "lib/rack/reloader.rb", "lib/rack/request.rb", "lib/rack/response.rb", "lib/rack/session/abstract/id.rb", "lib/rack/session/cookie.rb", "lib/rack/session/memcache.rb", "lib/rack/session/pool.rb", "lib/rack/showexceptions.rb", "lib/rack/showstatus.rb", "lib/rack/static.rb", "lib/rack/urlmap.rb", "lib/rack/utils.rb", "test/cgi/lighttpd.conf", "test/cgi/test", "test/cgi/test.fcgi", "test/cgi/test.ru", "test/spec_rack_auth_basic.rb", "test/spec_rack_auth_digest.rb", "test/spec_rack_auth_openid.rb", "test/spec_rack_builder.rb", "test/spec_rack_camping.rb", "test/spec_rack_cascade.rb", "test/spec_rack_cgi.rb", "test/spec_rack_commonlogger.rb", "test/spec_rack_deflater.rb", "test/spec_rack_directory.rb", "test/spec_rack_fastcgi.rb", "test/spec_rack_file.rb", "test/spec_rack_handler.rb", "test/spec_rack_lint.rb", "test/spec_rack_lobster.rb", "test/spec_rack_mock.rb", "test/spec_rack_mongrel.rb", "test/spec_rack_recursive.rb", "test/spec_rack_request.rb", "test/spec_rack_response.rb", "test/spec_rack_session_cookie.rb", "test/spec_rack_session_memcache.rb", "test/spec_rack_session_pool.rb", "test/spec_rack_showexceptions.rb", "test/spec_rack_showstatus.rb", "test/spec_rack_static.rb", "test/spec_rack_urlmap.rb", "test/spec_rack_utils.rb", "test/spec_rack_webrick.rb", "test/testrequest.rb", "SPEC", "RDOX"]
-  s.has_rdoc = true
-  s.homepage = %q{http://rack.rubyforge.org}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{rack}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{a modular Ruby webserver interface}
-  s.test_files = ["test/spec_rack_auth_basic.rb", "test/spec_rack_auth_digest.rb", "test/spec_rack_auth_openid.rb", "test/spec_rack_builder.rb", "test/spec_rack_camping.rb", "test/spec_rack_cascade.rb", "test/spec_rack_cgi.rb", "test/spec_rack_commonlogger.rb", "test/spec_rack_deflater.rb", "test/spec_rack_directory.rb", "test/spec_rack_fastcgi.rb", "test/spec_rack_file.rb", "test/spec_rack_handler.rb", "test/spec_rack_lint.rb", "test/spec_rack_lobster.rb", "test/spec_rack_mock.rb", "test/spec_rack_mongrel.rb", "test/spec_rack_recursive.rb", "test/spec_rack_request.rb", "test/spec_rack_response.rb", "test/spec_rack_session_cookie.rb", "test/spec_rack_session_memcache.rb", "test/spec_rack_session_pool.rb", "test/spec_rack_showexceptions.rb", "test/spec_rack_showstatus.rb", "test/spec_rack_static.rb", "test/spec_rack_urlmap.rb", "test/spec_rack_utils.rb", "test/spec_rack_webrick.rb"]
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/rake-0.8.3.gemspec b/spec10/public/webrat/test_app/gems/specifications/rake-0.8.3.gemspec
deleted file mode 100644
index 8169cc4..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/rake-0.8.3.gemspec
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{rake}
-  s.version = "0.8.3"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Jim Weirich"]
-  s.date = %q{2008-09-25}
-  s.default_executable = %q{rake}
-  s.description = %q{Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax.}
-  s.email = %q{jim at weirichhouse.org}
-  s.executables = ["rake"]
-  s.extra_rdoc_files = ["README", "MIT-LICENSE", "TODO", "CHANGES", "doc/glossary.rdoc", "doc/proto_rake.rdoc", "doc/rakefile.rdoc", "doc/rational.rdoc", "doc/release_notes/rake-0.4.14.rdoc", "doc/release_notes/rake-0.4.15.rdoc", "doc/release_notes/rake-0.5.0.rdoc", "doc/release_notes/rake-0.5.3.rdoc", "doc/release_notes/rake-0.5.4.rdoc", "doc/release_notes/rake-0.6.0.rdoc", "doc/release_notes/rake-0.7.0.rdoc", "doc/release_notes/rake-0.7.1.rdoc", "doc/release_notes/rake-0.7.2.rdoc", "doc/release_notes/rake-0.7.3.rdoc", "doc/release_notes/rake-0.8.0.rdoc", "doc/release_notes/rake-0.8.2.rdoc", "doc/release_notes/rake-0.8.3.rdoc"]
-  s.files = ["install.rb", "CHANGES", "MIT-LICENSE", "Rakefile", "README", "TODO", "bin/rake", "lib/rake/classic_namespace.rb", "lib/rake/clean.rb", "lib/rake/contrib/compositepublisher.rb", "lib/rake/contrib/ftptools.rb", "lib/rake/contrib/publisher.rb", "lib/rake/contrib/rubyforgepublisher.rb", "lib/rake/contrib/sshpublisher.rb", "lib/rake/contrib/sys.rb", "lib/rake/gempackagetask.rb", "lib/rake/loaders/makefile.rb", "lib/rake/packagetask.rb", "lib/rake/rake_test_loader.rb", "lib/rake/rdoctask.rb", "lib/rake/ruby182_test_unit_fix.rb", "lib/rake/runtest.rb", "lib/rake/tasklib.rb", "lib/rake/testtask.rb", "lib/rake/win32.rb", "lib/rake.rb", "test/capture_stdout.rb", "test/check_expansion.rb", "test/contrib/test_sys.rb", "test/data/rakelib/test1.rb", "test/data/rbext/rakefile.rb", "test/filecreation.rb", "test/functional.rb", "test/in_environment.rb", "test/rake_test_setup.rb", "test/reqfile.rb", "test/reqfile2.rb", "test/session_functional.rb", "test/shellcommand.rb", "test/test_application.rb", "test/test_clean.rb", "test/test_definitions.rb", "test/test_earlytime.rb", "test/test_extension.rb", "test/test_file_creation_task.rb", "test/test_file_task.rb", "test/test_filelist.rb", "test/test_fileutils.rb", "test/test_ftp.rb", "test/test_invocation_chain.rb", "test/test_makefile_loader.rb", "test/test_multitask.rb", "test/test_namespace.rb", "test/test_package_task.rb", "test/test_pathmap.rb", "test/test_rake.rb", "test/test_require.rb", "test/test_rules.rb", "test/test_task_arguments.rb", "test/test_task_manager.rb", "test/test_tasklib.rb", "test/test_tasks.rb", "test/test_test_task.rb", "test/test_top_level_functions.rb", "test/test_win32.rb", "test/data/imports/deps.mf", "test/data/sample.mf", "test/data/chains/Rakefile", "test/data/default/Rakefile", "test/data/dryrun/Rakefile", "test/data/file_creation_task/Rakefile", "test/data/imports/Rakefile", "test/data/multidesc/Rakefile", "test/data/namespace/Rakefile", "test/data/statusreturn/Rakefile", "test/data/unittest/Rakefile", "test/data/unittest/subdir", "doc/example", "doc/example/a.c", "doc/example/b.c", "doc/example/main.c", "doc/example/Rakefile1", "doc/example/Rakefile2", "doc/glossary.rdoc", "doc/jamis.rb", "doc/proto_rake.rdoc", "doc/rake.1.gz", "doc/rakefile.rdoc", "doc/rational.rdoc", "doc/release_notes", "doc/release_notes/rake-0.4.14.rdoc", "doc/release_notes/rake-0.4.15.rdoc", "doc/release_notes/rake-0.5.0.rdoc", "doc/release_notes/rake-0.5.3.rdoc", "doc/release_notes/rake-0.5.4.rdoc", "doc/release_notes/rake-0.6.0.rdoc", "doc/release_notes/rake-0.7.0.rdoc", "doc/release_notes/rake-0.7.1.rdoc", "doc/release_notes/rake-0.7.2.rdoc", "doc/release_notes/rake-0.7.3.rdoc", "doc/release_notes/rake-0.8.0.rdoc", "doc/release_notes/rake-0.8.2.rdoc", "doc/release_notes/rake-0.8.3.rdoc"]
-  s.has_rdoc = true
-  s.homepage = %q{http://rake.rubyforge.org}
-  s.rdoc_options = ["--line-numbers", "--inline-source", "--main", "README", "--title", "Rake -- Ruby Make"]
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{rake}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{Ruby based make-like utility.}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/rspec-1.1.11.gemspec b/spec10/public/webrat/test_app/gems/specifications/rspec-1.1.11.gemspec
deleted file mode 100644
index 4d72ead..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/rspec-1.1.11.gemspec
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{rspec}
-  s.version = "1.1.11"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["RSpec Development Team"]
-  s.date = %q{2008-10-24}
-  s.description = %q{Behaviour Driven Development for Ruby.}
-  s.email = ["rspec-devel at rubyforge.org"]
-  s.executables = ["autospec", "spec"]
-  s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "README.txt", "TODO.txt", "examples/pure/priority.txt", "examples/stories/game-of-life/README.txt", "examples/stories/game-of-life/behaviour/stories/stories.txt", "failing_examples/README.txt", "spec/spec/runner/empty_file.txt", "spec/spec/runner/examples.txt", "spec/spec/runner/failed.txt"]
-  s.files = ["History.txt", "License.txt", "Manifest.txt", "README.txt", "Rakefile", "TODO.txt", "bin/autospec", "bin/spec", "examples/pure/autogenerated_docstrings_example.rb", "examples/pure/before_and_after_example.rb", "examples/pure/behave_as_example.rb", "examples/pure/custom_expectation_matchers.rb", "examples/pure/custom_formatter.rb", "examples/pure/dynamic_spec.rb", "examples/pure/file_accessor.rb", "examples/pure/file_accessor_spec.rb", "examples/pure/greeter_spec.rb", "examples/pure/helper_method_example.rb", "examples/pure/io_processor.rb", "examples/pure/io_processor_spec.rb", "examples/pure/legacy_spec.rb", "examples/pure/mocking_example.rb", "examples/pure/multi_threaded_behaviour_runner.rb", "examples/pure/nested_classes_example.rb", "examples/pure/partial_mock_example.rb", "examples/pure/pending_example.rb", "examples/pure/predicate_example.rb", "examples/pure/priority.txt", "examples/pure/shared_example_group_example.rb", "examples/pure/shared_stack_examples.rb", "examples/pure/spec_helper.rb", "examples/pure/stack.rb", "examples/pure/stack_spec.rb", "examples/pure/stack_spec_with_nested_example_groups.rb", "examples/pure/stubbing_example.rb", "examples/pure/yielding_example.rb", "examples/stories/adder.rb", "examples/stories/addition", "examples/stories/addition.rb", "examples/stories/calculator.rb", "examples/stories/game-of-life/.loadpath", "examples/stories/game-of-life/README.txt", "examples/stories/game-of-life/behaviour/everything.rb", "examples/stories/game-of-life/behaviour/examples/examples.rb", "examples/stories/game-of-life/behaviour/examples/game_behaviour.rb", "examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb", "examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story", "examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story", "examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story", "examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story", "examples/stories/game-of-life/behaviour/stories/ICanKillACell.story", "examples/stories/game-of-life/behaviour/stories/TheGridWraps.story", "examples/stories/game-of-life/behaviour/stories/create_a_cell.rb", "examples/stories/game-of-life/behaviour/stories/helper.rb", "examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb", "examples/stories/game-of-life/behaviour/stories/steps.rb", "examples/stories/game-of-life/behaviour/stories/stories.rb", "examples/stories/game-of-life/behaviour/stories/stories.txt", "examples/stories/game-of-life/life.rb", "examples/stories/game-of-life/life/game.rb", "examples/stories/game-of-life/life/grid.rb", "examples/stories/helper.rb", "examples/stories/steps/addition_steps.rb", "failing_examples/README.txt", "failing_examples/diffing_spec.rb", "failing_examples/failing_autogenerated_docstrings_example.rb", "failing_examples/failure_in_setup.rb", "failing_examples/failure_in_teardown.rb", "failing_examples/mocking_example.rb", "failing_examples/mocking_with_flexmock.rb", "failing_examples/mocking_with_mocha.rb", "failing_examples/mocking_with_rr.rb", "failing_examples/partial_mock_example.rb", "failing_examples/predicate_example.rb", "failing_examples/raising_example.rb", "failing_examples/spec_helper.rb", "failing_examples/syntax_error_example.rb", "failing_examples/team_spec.rb", "failing_examples/timeout_behaviour.rb", "init.rb", "lib/autotest/discover.rb", "lib/autotest/rspec.rb", "lib/spec.rb", "lib/spec/adapters.rb", "lib/spec/adapters/ruby_engine.rb", "lib/spec/adapters/ruby_engine/mri.rb", "lib/spec/adapters/ruby_engine/rubinius.rb", "lib/spec/example.rb", "lib/spec/example/before_and_after_hooks.rb", "lib/spec/example/configuration.rb", "lib/spec/example/errors.rb", "lib/spec/example/example_group.rb", "lib/spec/example/example_group_factory.rb", "lib/spec/example/example_group_methods.rb", "lib/spec/example/example_matcher.rb", "lib/spec/example/example_methods.rb", "lib/spec/example/module_reopening_fix.rb", "lib/spec/example/pending.rb", "lib/spec/example/shared_example_group.rb", "lib/spec/expectations.rb", "lib/spec/expectations/differs/default.rb", "lib/spec/expectations/errors.rb", "lib/spec/expectations/extensions.rb", "lib/spec/expectations/extensions/object.rb", "lib/spec/expectations/extensions/string_and_symbol.rb", "lib/spec/expectations/handler.rb", "lib/spec/extensions.rb", "lib/spec/extensions/class.rb", "lib/spec/extensions/main.rb", "lib/spec/extensions/metaclass.rb", "lib/spec/extensions/object.rb", "lib/spec/interop/test.rb", "lib/spec/interop/test/unit/autorunner.rb", "lib/spec/interop/test/unit/testcase.rb", "lib/spec/interop/test/unit/testresult.rb", "lib/spec/interop/test/unit/testsuite_adapter.rb", "lib/spec/interop/test/unit/ui/console/testrunner.rb", "lib/spec/matchers.rb", "lib/spec/matchers/be.rb", "lib/spec/matchers/be_close.rb", "lib/spec/matchers/change.rb", "lib/spec/matchers/eql.rb", "lib/spec/matchers/equal.rb", "lib/spec/matchers/exist.rb", "lib/spec/matchers/has.rb", "lib/spec/matchers/have.rb", "lib/spec/matchers/include.rb", "lib/spec/matchers/match.rb", "lib/spec/matchers/operator_matcher.rb", "lib/spec/matchers/raise_error.rb", "lib/spec/matchers/respond_to.rb", "lib/spec/matchers/satisfy.rb", "lib/spec/matchers/simple_matcher.rb", "lib/spec/matchers/throw_symbol.rb", "lib/spec/mocks.rb", "lib/spec/mocks/argument_constraints.rb", "lib/spec/mocks/argument_expectation.rb", "lib/spec/mocks/error_generator.rb", "lib/spec/mocks/errors.rb", "lib/spec/mocks/extensions.rb", "lib/spec/mocks/extensions/object.rb", "lib/spec/mocks/framework.rb", "lib/spec/mocks/message_expectation.rb", "lib/spec/mocks/methods.rb", "lib/spec/mocks/mock.rb", "lib/spec/mocks/order_group.rb", "lib/spec/mocks/proxy.rb", "lib/spec/mocks/space.rb", "lib/spec/mocks/spec_methods.rb", "lib/spec/rake/spectask.rb", "lib/spec/rake/verify_rcov.rb", "lib/spec/runner.rb", "lib/spec/runner/backtrace_tweaker.rb", "lib/spec/runner/class_and_arguments_parser.rb", "lib/spec/runner/command_line.rb", "lib/spec/runner/drb_command_line.rb", "lib/spec/runner/example_group_runner.rb", "lib/spec/runner/formatter/base_formatter.rb", "lib/spec/runner/formatter/base_text_formatter.rb", "lib/spec/runner/formatter/failing_example_groups_formatter.rb", "lib/spec/runner/formatter/failing_examples_formatter.rb", "lib/spec/runner/formatter/html_formatter.rb", "lib/spec/runner/formatter/nested_text_formatter.rb", "lib/spec/runner/formatter/profile_formatter.rb", "lib/spec/runner/formatter/progress_bar_formatter.rb", "lib/spec/runner/formatter/snippet_extractor.rb", "lib/spec/runner/formatter/specdoc_formatter.rb", "lib/spec/runner/formatter/story/html_formatter.rb", "lib/spec/runner/formatter/story/plain_text_formatter.rb", "lib/spec/runner/formatter/story/progress_bar_formatter.rb", "lib/spec/runner/formatter/text_mate_formatter.rb", "lib/spec/runner/heckle_runner.rb", "lib/spec/runner/heckle_runner_unsupported.rb", "lib/spec/runner/option_parser.rb", "lib/spec/runner/options.rb", "lib/spec/runner/reporter.rb", "lib/spec/runner/spec_parser.rb", "lib/spec/story.rb", "lib/spec/story/extensions.rb", "lib/spec/story/extensions/main.rb", "lib/spec/story/extensions/regexp.rb", "lib/spec/story/extensions/string.rb", "lib/spec/story/given_scenario.rb", "lib/spec/story/runner.rb", "lib/spec/story/runner/plain_text_story_runner.rb", "lib/spec/story/runner/scenario_collector.rb", "lib/spec/story/runner/scenario_runner.rb", "lib/spec/story/runner/story_mediator.rb", "lib/spec/story/runner/story_parser.rb", "lib/spec/story/runner/story_runner.rb", "lib/spec/story/scenario.rb", "lib/spec/story/step.rb", "lib/spec/story/step_group.rb", "lib/spec/story/step_mother.rb", "lib/spec/story/story.rb", "lib/spec/story/world.rb", "lib/spec/version.rb", "plugins/mock_frameworks/flexmock.rb", "plugins/mock_frameworks/mocha.rb", "plugins/mock_frameworks/rr.rb", "plugins/mock_frameworks/rspec.rb", "rake_tasks/examples.rake", "rake_tasks/examples_with_rcov.rake", "rake_tasks/failing_examples_with_html.rake", "rake_tasks/verify_rcov.rake", "rspec.gemspec", "spec/README.jruby", "spec/autotest/autotest_helper.rb", "spec/autotest/autotest_matchers.rb", "spec/autotest/discover_spec.rb", "spec/autotest/rspec_spec.rb", "spec/rspec_suite.rb", "spec/ruby_forker.rb", "spec/spec.opts", "spec/spec/adapters/ruby_engine_spec.rb", "spec/spec/example/configuration_spec.rb", "spec/spec/example/example_group_class_definition_spec.rb", "spec/spec/example/example_group_factory_spec.rb", "spec/spec/example/example_group_methods_spec.rb", "spec/spec/example/example_group_spec.rb", "spec/spec/example/example_matcher_spec.rb", "spec/spec/example/example_methods_spec.rb", "spec/spec/example/example_runner_spec.rb", "spec/spec/example/nested_example_group_spec.rb", "spec/spec/example/pending_module_spec.rb", "spec/spec/example/predicate_matcher_spec.rb", "spec/spec/example/shared_example_group_spec.rb", "spec/spec/example/subclassing_example_group_spec.rb", "spec/spec/expectations/differs/default_spec.rb", "spec/spec/expectations/extensions/object_spec.rb", "spec/spec/expectations/fail_with_spec.rb", "spec/spec/extensions/main_spec.rb", "spec/spec/interop/test/unit/resources/spec_that_fails.rb", "spec/spec/interop/test/unit/resources/spec_that_passes.rb", "spec/spec/interop/test/unit/resources/spec_with_errors.rb", "spec/spec/interop/test/unit/resources/spec_with_options_hash.rb", "spec/spec/interop/test/unit/resources/test_case_that_fails.rb", "spec/spec/interop/test/unit/resources/test_case_that_passes.rb", "spec/spec/interop/test/unit/resources/test_case_with_errors.rb", "spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb", "spec/spec/interop/test/unit/spec_spec.rb", "spec/spec/interop/test/unit/test_unit_spec_helper.rb", "spec/spec/interop/test/unit/testcase_spec.rb", "spec/spec/interop/test/unit/testsuite_adapter_spec.rb", "spec/spec/matchers/be_close_spec.rb", "spec/spec/matchers/be_spec.rb", "spec/spec/matchers/change_spec.rb", "spec/spec/matchers/description_generation_spec.rb", "spec/spec/matchers/eql_spec.rb", "spec/spec/matchers/equal_spec.rb", "spec/spec/matchers/exist_spec.rb", "spec/spec/matchers/handler_spec.rb", "spec/spec/matchers/has_spec.rb", "spec/spec/matchers/have_spec.rb", "spec/spec/matchers/include_spec.rb", "spec/spec/matchers/match_spec.rb", "spec/spec/matchers/matcher_methods_spec.rb", "spec/spec/matchers/mock_constraint_matchers_spec.rb", "spec/spec/matchers/operator_matcher_spec.rb", "spec/spec/matchers/raise_error_spec.rb", "spec/spec/matchers/respond_to_spec.rb", "spec/spec/matchers/satisfy_spec.rb", "spec/spec/matchers/simple_matcher_spec.rb", "spec/spec/matchers/throw_symbol_spec.rb", "spec/spec/mocks/any_number_of_times_spec.rb", "spec/spec/mocks/argument_expectation_spec.rb", "spec/spec/mocks/at_least_spec.rb", "spec/spec/mocks/at_most_spec.rb", "spec/spec/mocks/bug_report_10260_spec.rb", "spec/spec/mocks/bug_report_10263_spec.rb", "spec/spec/mocks/bug_report_11545_spec.rb", "spec/spec/mocks/bug_report_15719_spec.rb", "spec/spec/mocks/bug_report_496.rb", "spec/spec/mocks/bug_report_7611_spec.rb", "spec/spec/mocks/bug_report_7805_spec.rb", "spec/spec/mocks/bug_report_8165_spec.rb", "spec/spec/mocks/bug_report_8302_spec.rb", "spec/spec/mocks/failing_mock_argument_constraints_spec.rb", "spec/spec/mocks/hash_including_matcher_spec.rb", "spec/spec/mocks/mock_ordering_spec.rb", "spec/spec/mocks/mock_space_spec.rb", "spec/spec/mocks/mock_spec.rb", "spec/spec/mocks/multiple_return_value_spec.rb", "spec/spec/mocks/nil_expectation_warning_spec.rb", "spec/spec/mocks/null_object_mock_spec.rb", "spec/spec/mocks/once_counts_spec.rb", "spec/spec/mocks/options_hash_spec.rb", "spec/spec/mocks/partial_mock_spec.rb", "spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb", "spec/spec/mocks/passing_mock_argument_constraints_spec.rb", "spec/spec/mocks/precise_counts_spec.rb", "spec/spec/mocks/record_messages_spec.rb", "spec/spec/mocks/stub_spec.rb", "spec/spec/mocks/twice_counts_spec.rb", "spec/spec/package/bin_spec_spec.rb", "spec/spec/runner/class_and_argument_parser_spec.rb", "spec/spec/runner/command_line_spec.rb", "spec/spec/runner/drb_command_line_spec.rb", "spec/spec/runner/empty_file.txt", "spec/spec/runner/examples.txt", "spec/spec/runner/failed.txt", "spec/spec/runner/formatter/base_formatter_spec.rb", "spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb", "spec/spec/runner/formatter/failing_examples_formatter_spec.rb", "spec/spec/runner/formatter/html_formatted-1.8.4.html", "spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html", "spec/spec/runner/formatter/html_formatted-1.8.5.html", "spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html", "spec/spec/runner/formatter/html_formatted-1.8.6.html", "spec/spec/runner/formatter/html_formatter_spec.rb", "spec/spec/runner/formatter/nested_text_formatter_spec.rb", "spec/spec/runner/formatter/profile_formatter_spec.rb", "spec/spec/runner/formatter/progress_bar_formatter_spec.rb", "spec/spec/runner/formatter/snippet_extractor_spec.rb", "spec/spec/runner/formatter/spec_mate_formatter_spec.rb", "spec/spec/runner/formatter/specdoc_formatter_spec.rb", "spec/spec/runner/formatter/story/html_formatter_spec.rb", "spec/spec/runner/formatter/story/plain_text_formatter_spec.rb", "spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb", "spec/spec/runner/formatter/text_mate_formatted-1.8.4.html", "spec/spec/runner/formatter/text_mate_formatted-1.8.6.html", "spec/spec/runner/heckle_runner_spec.rb", "spec/spec/runner/heckler_spec.rb", "spec/spec/runner/noisy_backtrace_tweaker_spec.rb", "spec/spec/runner/option_parser_spec.rb", "spec/spec/runner/options_spec.rb", "spec/spec/runner/output_one_time_fixture.rb", "spec/spec/runner/output_one_time_fixture_runner.rb", "spec/spec/runner/output_one_time_spec.rb", "spec/spec/runner/quiet_backtrace_tweaker_spec.rb", "spec/spec/runner/reporter_spec.rb", "spec/spec/runner/resources/a_bar.rb", "spec/spec/runner/resources/a_foo.rb", "spec/spec/runner/resources/a_spec.rb", "spec/spec/runner/spec.opts", "spec/spec/runner/spec_drb.opts", "spec/spec/runner/spec_parser/spec_parser_fixture.rb", "spec/spec/runner/spec_parser_spec.rb", "spec/spec/runner/spec_spaced.opts", "spec/spec/runner_spec.rb", "spec/spec/spec_classes.rb", "spec/spec/story/builders.rb", "spec/spec/story/extensions/main_spec.rb", "spec/spec/story/extensions_spec.rb", "spec/spec/story/given_scenario_spec.rb", "spec/spec/story/runner/plain_text_story_runner_spec.rb", "spec/spec/story/runner/scenario_collector_spec.rb", "spec/spec/story/runner/scenario_runner_spec.rb", "spec/spec/story/runner/story_mediator_spec.rb", "spec/spec/story/runner/story_parser_spec.rb", "spec/spec/story/runner/story_runner_spec.rb", "spec/spec/story/runner_spec.rb", "spec/spec/story/scenario_spec.rb", "spec/spec/story/step_group_spec.rb", "spec/spec/story/step_mother_spec.rb", "spec/spec/story/step_spec.rb", "spec/spec/story/story_helper.rb", "spec/spec/story/story_spec.rb", "spec/spec/story/world_spec.rb", "spec/spec_helper.rb", "stories/all.rb", "stories/configuration/before_blocks.story", "stories/configuration/stories.rb", "stories/example_groups/autogenerated_docstrings", "stories/example_groups/example_group_with_should_methods", "stories/example_groups/nested_groups", "stories/example_groups/output", "stories/example_groups/stories.rb", "stories/helper.rb", "stories/interop/examples_and_tests_together", "stories/interop/stories.rb", "stories/interop/test_case_with_should_methods", "stories/mock_framework_integration/stories.rb", "stories/mock_framework_integration/use_flexmock.story", "stories/pending_stories/README", "stories/resources/helpers/cmdline.rb", "stories/resources/helpers/story_helper.rb", "stories/resources/matchers/smart_match.rb", "stories/resources/spec/before_blocks_example.rb", "stories/resources/spec/example_group_with_should_methods.rb", "stories/resources/spec/simple_spec.rb", "stories/resources/spec/spec_with_flexmock.rb", "stories/resources/steps/running_rspec.rb", "stories/resources/stories/failing_story.rb", "stories/resources/test/spec_and_test_together.rb", "stories/resources/test/test_case_with_should_methods.rb", "stories/stories/multiline_steps.story", "stories/stories/steps/multiline_steps.rb", "stories/stories/stories.rb", "story_server/prototype/javascripts/builder.js", "story_server/prototype/javascripts/controls.js", "story_server/prototype/javascripts/dragdrop.js", "story_server/prototype/javascripts/effects.js", "story_server/prototype/javascripts/prototype.js", "story_server/prototype/javascripts/rspec.js", "story_server/prototype/javascripts/scriptaculous.js", "story_server/prototype/javascripts/slider.js", "story_server/prototype/javascripts/sound.js", "story_server/prototype/javascripts/unittest.js", "story_server/prototype/lib/server.rb", "story_server/prototype/stories.html", "story_server/prototype/stylesheets/rspec.css", "story_server/prototype/stylesheets/test.css"]
-  s.has_rdoc = true
-  s.homepage = %q{http://rspec.info/}
-  s.rdoc_options = ["--main", "README.txt"]
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{rspec}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{rspec 1.1.11}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-      s.add_development_dependency(%q<hoe>, [">= 1.8.1"])
-    else
-      s.add_dependency(%q<hoe>, [">= 1.8.1"])
-    end
-  else
-    s.add_dependency(%q<hoe>, [">= 1.8.1"])
-  end
-end
diff --git a/spec10/public/webrat/test_app/gems/specifications/thor-0.9.8.gemspec b/spec10/public/webrat/test_app/gems/specifications/thor-0.9.8.gemspec
deleted file mode 100644
index 1d0642c..0000000
--- a/spec10/public/webrat/test_app/gems/specifications/thor-0.9.8.gemspec
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
-  s.name = %q{thor}
-  s.version = "0.9.8"
-
-  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
-  s.authors = ["Yehuda Katz"]
-  s.date = %q{2008-10-20}
-  s.description = %q{A gem that maps options to a class}
-  s.email = %q{wycats at gmail.com}
-  s.executables = ["thor", "rake2thor"]
-  s.extra_rdoc_files = ["README.markdown", "LICENSE", "CHANGELOG.rdoc"]
-  s.files = ["README.markdown", "LICENSE", "CHANGELOG.rdoc", "Rakefile", "bin/rake2thor", "bin/thor", "lib/thor", "lib/thor/error.rb", "lib/thor/options.rb", "lib/thor/ordered_hash.rb", "lib/thor/runner.rb", "lib/thor/task.rb", "lib/thor/task_hash.rb", "lib/thor/tasks", "lib/thor/tasks/package.rb", "lib/thor/tasks.rb", "lib/thor/util.rb", "lib/thor.rb"]
-  s.has_rdoc = true
-  s.homepage = %q{http://yehudakatz.com}
-  s.require_paths = ["lib"]
-  s.rubyforge_project = %q{thor}
-  s.rubygems_version = %q{1.3.1}
-  s.summary = %q{A gem that maps options to a class}
-
-  if s.respond_to? :specification_version then
-    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
-    s.specification_version = 2
-
-    if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
-    else
-    end
-  else
-  end
-end
diff --git a/spec10/public/webrat/test_app/merb/merb-auth/setup.rb b/spec10/public/webrat/test_app/merb/merb-auth/setup.rb
deleted file mode 100644
index 612f01d..0000000
--- a/spec10/public/webrat/test_app/merb/merb-auth/setup.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# This file is specifically setup for use with the merb-auth plugin.
-# This file should be used to setup and configure your authentication stack.
-# It is not required and may safely be deleted.
-#
-# To change the parameter names for the password or login field you may set either of these two options
-#
-# Merb::Plugins.config[:"merb-auth"][:login_param]    = :email 
-# Merb::Plugins.config[:"merb-auth"][:password_param] = :my_password_field_name
-
-begin
-  # Sets the default class ofr authentication.  This is primarily used for 
-  # Plugins and the default strategies
-  Merb::Authentication.user_class = User 
-  
-  
-  # Mixin the salted user mixin
-  require 'merb-auth-more/mixins/salted_user'
-  Merb::Authentication.user_class.class_eval{ include Merb::Authentication::Mixins::SaltedUser }
-    
-  # Setup the session serialization
-  class Merb::Authentication
-
-    def fetch_user(session_user_id)
-      Merb::Authentication.user_class.get(session_user_id)
-    end
-
-    def store_user(user)
-      user.nil? ? user : user.id
-    end
-  end
-  
-rescue
-  Merb.logger.error <<-TEXT
-  
-    You need to setup some kind of user class with merb-auth.  
-    Merb::Authentication.user_class = User
-    
-    If you want to fully customize your authentication you should use merb-core directly.  
-    
-    See merb/merb-auth/setup.rb and strategies.rb to customize your setup
-
-    TEXT
-end
-
diff --git a/spec10/public/webrat/test_app/merb/merb-auth/strategies.rb b/spec10/public/webrat/test_app/merb/merb-auth/strategies.rb
deleted file mode 100644
index fd6f20a..0000000
--- a/spec10/public/webrat/test_app/merb/merb-auth/strategies.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# This file is specifically for you to define your strategies 
-#
-# You should declare you strategies directly and/or use 
-# Merb::Authentication.activate!(:label_of_strategy)
-#
-# To load and set the order of strategy processing
-
-Merb::Slices::config[:"merb-auth-slice-password"][:no_default_strategies] = true
-
-Merb::Authentication.activate!(:default_password_form)
-Merb::Authentication.activate!(:default_basic_auth)
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/merb/session/session.rb b/spec10/public/webrat/test_app/merb/session/session.rb
deleted file mode 100644
index 5d05316..0000000
--- a/spec10/public/webrat/test_app/merb/session/session.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module Merb
-  module Session
-    
-    # The Merb::Session module gets mixed into Merb::SessionContainer to allow 
-    # app-level functionality; it will be included and methods will be available 
-    # through request.session as instance methods.
-    
-  end
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/public/favicon.ico b/spec10/public/webrat/test_app/public/favicon.ico
deleted file mode 100644
index c908d63..0000000
Binary files a/spec10/public/webrat/test_app/public/favicon.ico and /dev/null differ
diff --git a/spec10/public/webrat/test_app/public/images/merb.jpg b/spec10/public/webrat/test_app/public/images/merb.jpg
deleted file mode 100644
index a19dcf4..0000000
Binary files a/spec10/public/webrat/test_app/public/images/merb.jpg and /dev/null differ
diff --git a/spec10/public/webrat/test_app/public/javascripts/application.js b/spec10/public/webrat/test_app/public/javascripts/application.js
deleted file mode 100644
index 246a8be..0000000
--- a/spec10/public/webrat/test_app/public/javascripts/application.js
+++ /dev/null
@@ -1 +0,0 @@
-// Common JavaScript code across your application goes here.
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/public/javascripts/jquery.js b/spec10/public/webrat/test_app/public/javascripts/jquery.js
deleted file mode 100644
index 82b98e1..0000000
--- a/spec10/public/webrat/test_app/public/javascripts/jquery.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * jQuery 1.2.6 - New Wave Javascript
- *
- * Copyright (c) 2008 John Resig (jquery.com)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
- * $Rev: 5685 $
- */
-(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
-return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
-return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
-selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
-return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
-this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
-return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
-jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
-script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
-for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
-for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
-jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
-ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
-while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
-while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
-for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
-jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
-xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
-jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
-for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
-s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
-e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/public/merb.fcgi b/spec10/public/webrat/test_app/public/merb.fcgi
deleted file mode 100755
index 9804e0f..0000000
--- a/spec10/public/webrat/test_app/public/merb.fcgi
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env ruby
-                                                               
-require 'rubygems'
-require 'merb-core'
-
-# this is Merb.root, change this if you have some funky setup.
-merb_root = File.expand_path(File.dirname(__FILE__) / '../')
-        
-# If the fcgi process runs as apache, make sure
-# we have an inlinedir set for Rubyinline action-args to work
-unless ENV["INLINEDIR"] || ENV["HOME"]
-  tmpdir = merb_root / "tmp"
-  unless File.directory?(tmpdir)
-    Dir.mkdir(tmpdir)
-  end                
-  ENV["INLINEDIR"] = tmpdir
-end
-   
-# start merb with the fcgi adapter, add options or change the log dir here
-Merb.start(:adapter => 'fcgi',
-           :merb_root => merb_root,
-           :log_file => merb_root /'log'/'merb.log')
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/public/robots.txt b/spec10/public/webrat/test_app/public/robots.txt
deleted file mode 100644
index f85a11b..0000000
--- a/spec10/public/webrat/test_app/public/robots.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
-#
-# To ban all spiders from the entire site uncomment the next two lines:
-# User-Agent: *
-# Disallow: /
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/public/stylesheets/master.css b/spec10/public/webrat/test_app/public/stylesheets/master.css
deleted file mode 100644
index c4fa676..0000000
--- a/spec10/public/webrat/test_app/public/stylesheets/master.css
+++ /dev/null
@@ -1,119 +0,0 @@
-body {
-  font-family: Arial, Verdana, sans-serif;
-  font-size: 12px;
-  background-color: #fff;
-}
-* {
-  margin: 0px;
-  padding: 0px;
-  text-decoration: none;
-}
-html {
-  height: 100%;
-  margin-bottom: 1px;
-}
-#container {
-  width: 80%;
-  text-align: left;
-  background-color: #fff;
-  margin-right: auto;
-  margin-left: auto;
-}
-#header-container {
-  width: 100%;
-  padding-top: 15px;
-}
-#header-container h1, #header-container h2 {
-  margin-left: 6px;
-  margin-bottom: 6px;
-}
-.spacer {
-  width: 100%;
-  height: 15px;
-}
-hr {
-  border: 0px;
-  color: #ccc;
-  background-color: #cdcdcd;
-  height: 1px;
-  width: 100%;
-  text-align: left;
-}
-h1 {
-  font-size: 28px;
-  color: #c55;
-  background-color: #fff;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-}
-h2 {
-  font-size: 15px;
-  color: #999;
-  font-family: Arial, Verdana, sans-serif;
-  font-weight: 300;
-  background-color: #fff;
-}
-h3 {
-  color: #4d9b12;
-  font-size: 15px;
-  text-align: left;
-  font-weight: 300;
-  padding: 5px;
-  margin-top: 5px;
-}
-
-#left-container {
-  float: left;
-  width: 250px;
-  background-color: #FFFFFF;
-  color: black;
-}
-
-#left-container h3 {
-  color: #c55;
-}
-
-#main-container {
-  margin: 5px 5px 5px 260px;
-  padding: 15px;
-  border-left: 1px solid silver;
-  min-height: 400px;
-}
-p {
-  color: #000;
-  background-color: #fff;
-  line-height: 20px;
-  padding: 5px;
-}
-a {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: none;
-}
-a:hover {
-  color: #4d9b12;
-  background-color: #fff;
-  text-decoration: underline;
-}
-#footer-container {
-  clear: both;
-  font-size: 12px;
-  font-family: Verdana, Arial, sans-serif;
-}
-.right {
-  float: right;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-.left {
-  float: left;
-  font-size: 100%;
-  margin-top: 5px;
-  color: #999;
-  background-color: #fff;
-}
-#main-container ul {
-  margin-left: 3.0em;
-}
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/tasks/doc.thor b/spec10/public/webrat/test_app/tasks/doc.thor
deleted file mode 100644
index 77e3222..0000000
--- a/spec10/public/webrat/test_app/tasks/doc.thor
+++ /dev/null
@@ -1,149 +0,0 @@
-$: << File.join("doc")
-require 'rubygems'
-require 'rdoc/rdoc'
-require 'fileutils'
-require 'erb'
-
-module Merb
-  
-  class GemNotFoundException < Exception
-  end
-  
-  module DocMethods
-    def setup_gem_path
-      if File.directory?(gems_dir = File.join(File.dirname(__FILE__), 'gems'))
-        $BUNDLE = true; Gem.clear_paths; Gem.path.unshift(gems_dir)
-      end
-    end
-    
-    def get_more
-      libs = []
-      more_library = find_library("merb-more")
-      File.open("#{more_library}/lib/merb-more.rb").read.each_line do |line|
-        if line['require']
-          libs << line.gsub("require '", '').gsub("'\n", '')
-        end
-      end
-      return libs
-    end
-    
-    def generate_documentation(file_list, destination, arguments = [])
-      output_dir = File.join("/../doc", "rdoc", destination)
-      FileUtils.rm_rf(output_dir)
-      
-      arguments += [
-        "--fmt", "merb",
-        "--op", output_dir
-      ]
-      RDoc::RDoc.new.document(arguments + file_list)
-      AdvancedDoc.new.index
-    end
-    
-    def find_library(directory_snippet)
-      gem_dir = nil
-      Gem.path.find do |path|
-        dir = Dir.glob("#{path}/gems/#{directory_snippet}*") 
-        dir.empty? ? false : gem_dir = dir.last
-      end
-      raise GemNotFoundException if gem_dir.nil?
-      return gem_dir
-    end
-    
-    def get_file_list(directory_snippet)
-      gem_dir = find_library(directory_snippet)
-      files = Dir.glob("#{gem_dir}/**/lib/**/*.rb")
-      files += ["#{gem_dir}/README"] if File.exists?("#{gem_dir}/README")
-      return  files
-    end
-  end
-  
-  class AdvancedDoc < Thor
-    
-    group 'core'
-    include DocMethods
-    
-    def initialize
-      super
-      setup_gem_path
-    end
-    
-    desc 'index', "Regenerate the index file for your framework documentation"
-    def index
-      @directories = Dir.entries(File.join(File.dirname(__FILE__) + "/../", "doc", "rdoc"))
-      @directories.delete(".")
-      @directories.delete("..")
-      @directories.delete("generators")
-      @directories.delete("index.html")
-      index_template = File.read(File.join("doc", "rdoc", "generators", "template", "merb", "index.html.erb"))
-      
-      File.open(File.join("doc", "rdoc", "index.html"), "w") do |file|
-        file.write(ERB.new(index_template).result(binding))
-      end
-    end
-    
-    desc 'plugins', 'Generate the rdoc for each merb-plugins seperatly'
-    def plugins
-      libs = ["merb_activerecord", "merb_builder", "merb_jquery", "merb_laszlo", "merb_parts", "merb_screw_unit", "merb_sequel", "merb_stories", "merb_test_unit"]
-      
-      libs.each do |lib|
-        options[:gem] = lib
-        gem
-      end
-    end
-    
-    desc 'more', 'Generate the rdoc for each merb-more gem seperatly'
-    def more
-      libs = get_more
-      libs.each do |lib|
-        options[:gem] = lib
-        gem
-      end
-    end
-    
-    desc 'core', 'Generate the rdoc for merb-core'
-    def core
-      options[:gem] = "merb-core"
-      gem
-    end
-    
-    desc 'gem', 'Generate the rdoc for a specific gem'
-    method_options "--gem" => :required
-    def gem
-      file_list = get_file_list(options[:gem])
-      readme = File.join(find_library("merb-core"), "README")
-      generate_documentation(file_list, options[:gem], ["-m", readme])
-    rescue GemNotFoundException
-      puts "Can not find the gem in the gem path #{options[:gem]}"
-    end
-    
-  end
-  
-  class Doc < Thor
-    
-    include DocMethods
-    
-    def initialize
-      super
-      setup_gem_path
-      
-    end
-    
-    desc 'stack', 'Generate the rdoc for merb-core, merb-more merged together'
-    def stack
-      libs = ["merb"]
-            
-      file_list = []
-      libs.each do |gem_name|
-        begin
-          file_list += get_file_list(gem_name)
-        rescue GemNotFoundException
-          puts "Could not find #{gem_name} in #{Gem.path}.  Continuing with out it."
-        end
-      end
-      readme = File.join(find_library("merb"), "README")
-      generate_documentation(file_list, "stack", ["-m", readme])
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/test_app/tasks/merb.thor b/spec10/public/webrat/test_app/tasks/merb.thor
deleted file mode 100644
index a52022b..0000000
--- a/spec10/public/webrat/test_app/tasks/merb.thor
+++ /dev/null
@@ -1,2012 +0,0 @@
-#!/usr/bin/env ruby
-require 'rubygems'
-require 'thor'
-require 'fileutils'
-require 'yaml'
-
-# Important - don't change this line or its position
-MERB_THOR_VERSION = '0.2.0'
-
-##############################################################################
-
-module ColorfulMessages
-  
-  # red
-  def error(*messages)
-    puts messages.map { |msg| "\033[1;31m#{msg}\033[0m" }
-  end
-  
-  # yellow
-  def warning(*messages)
-    puts messages.map { |msg| "\033[1;33m#{msg}\033[0m" }
-  end
-  
-  # green
-  def success(*messages)
-    puts messages.map { |msg| "\033[1;32m#{msg}\033[0m" }
-  end
-  
-  alias_method :message, :success
-  
-  # magenta
-  def note(*messages)
-    puts messages.map { |msg| "\033[1;35m#{msg}\033[0m" }
-  end
-  
-  # blue
-  def info(*messages)
-    puts messages.map { |msg| "\033[1;34m#{msg}\033[0m" }
-  end
-  
-end
-
-##############################################################################
-
-require 'rubygems/dependency_installer'
-require 'rubygems/uninstaller'
-require 'rubygems/dependency'
-
-module GemManagement
-  
-  include ColorfulMessages
-    
-  # Install a gem - looks remotely and local gem cache;
-  # won't process rdoc or ri options.
-  def install_gem(gem, options = {})
-    refresh = options.delete(:refresh) || []
-    from_cache = (options.key?(:cache) && options.delete(:cache))
-    if from_cache
-      install_gem_from_cache(gem, options)
-    else
-      version = options.delete(:version)
-      Gem.configuration.update_sources = false
-
-      # Limit source index to install dir
-      update_source_index(options[:install_dir]) if options[:install_dir]
-
-      installer = Gem::DependencyInstaller.new(options.merge(:user_install => false))
-      
-      # Force-refresh certain gems by excluding them from the current index
-      if !options[:ignore_dependencies] && refresh.respond_to?(:include?) && !refresh.empty?
-        source_index = installer.instance_variable_get(:@source_index)
-        source_index.gems.each do |name, spec| 
-          source_index.gems.delete(name) if refresh.include?(spec.name)
-        end
-      end
-      
-      exception = nil
-      begin
-        installer.install gem, version
-      rescue Gem::InstallError => e
-        exception = e
-      rescue Gem::GemNotFoundException => e
-        if from_cache && gem_file = find_gem_in_cache(gem, version)
-          puts "Located #{gem} in gem cache..."
-          installer.install gem_file
-        else
-          exception = e
-        end
-      rescue => e
-        exception = e
-      end
-      if installer.installed_gems.empty? && exception
-        error "Failed to install gem '#{gem} (#{version || 'any version'})' (#{exception.message})"
-      end
-      ensure_bin_wrapper_for_installed_gems(installer.installed_gems, options)
-      installer.installed_gems.each do |spec|
-        success "Successfully installed #{spec.full_name}"
-      end
-      return !installer.installed_gems.empty?
-    end
-  end
-
-  # Install a gem - looks in the system's gem cache instead of remotely;
-  # won't process rdoc or ri options.
-  def install_gem_from_cache(gem, options = {})
-    version = options.delete(:version)
-    Gem.configuration.update_sources = false
-    installer = Gem::DependencyInstaller.new(options.merge(:user_install => false))
-    exception = nil
-    begin
-      if gem_file = find_gem_in_cache(gem, version)
-        puts "Located #{gem} in gem cache..."
-        installer.install gem_file
-      else
-        raise Gem::InstallError, "Unknown gem #{gem}"
-      end
-    rescue Gem::InstallError => e
-      exception = e
-    end
-    if installer.installed_gems.empty? && exception
-      error "Failed to install gem '#{gem}' (#{e.message})"
-    end
-    ensure_bin_wrapper_for_installed_gems(installer.installed_gems, options)
-    installer.installed_gems.each do |spec|
-      success "Successfully installed #{spec.full_name}"
-    end
-  end
-
-  # Install a gem from source - builds and packages it first then installs.
-  # 
-  # Examples:
-  # install_gem_from_source(source_dir, :install_dir => ...)
-  # install_gem_from_source(source_dir, gem_name)
-  # install_gem_from_source(source_dir, :skip => [...])
-  def install_gem_from_source(source_dir, *args)
-    installed_gems = []
-    opts = args.last.is_a?(Hash) ? args.pop : {}
-    Dir.chdir(source_dir) do      
-      gem_name     = args[0] || File.basename(source_dir)
-      gem_pkg_dir  = File.join(source_dir, 'pkg')
-      gem_pkg_glob = File.join(gem_pkg_dir, "#{gem_name}-*.gem")
-      skip_gems    = opts.delete(:skip) || []
-
-      # Cleanup what's already there
-      clobber(source_dir)
-      FileUtils.mkdir_p(gem_pkg_dir) unless File.directory?(gem_pkg_dir)
-
-      # Recursively process all gem packages within the source dir
-      skip_gems << gem_name
-      packages = package_all(source_dir, skip_gems)
-      
-      if packages.length == 1
-        # The are no subpackages for the main package
-        refresh = [gem_name]
-      else
-        # Gather all packages into the top-level pkg directory
-        packages.each do |pkg|
-          FileUtils.copy_entry(pkg, File.join(gem_pkg_dir, File.basename(pkg)))
-        end
-        
-        # Finally package the main gem - without clobbering the already copied pkgs
-        package(source_dir, false)
-        
-        # Gather subgems to refresh during installation of the main gem
-        refresh = packages.map do |pkg|
-          File.basename(pkg, '.gem')[/^(.*?)-([\d\.]+)$/, 1] rescue nil
-        end.compact
-        
-        # Install subgems explicitly even if ignore_dependencies is set
-        if opts[:ignore_dependencies]
-          refresh.each do |name| 
-            gem_pkg = Dir[File.join(gem_pkg_dir, "#{name}-*.gem")][0]
-            install_pkg(gem_pkg, opts)
-          end
-        end
-      end
-      
-      ensure_bin_wrapper_for(opts[:install_dir], opts[:bin_dir], *installed_gems)
-      
-      # Finally install the main gem
-      if install_pkg(Dir[gem_pkg_glob][0], opts.merge(:refresh => refresh))
-        installed_gems = refresh
-      else
-        installed_gems = []
-      end
-    end
-    installed_gems
-  end
-  
-  def install_pkg(gem_pkg, opts = {})
-    if (gem_pkg && File.exists?(gem_pkg))
-      # Needs to be executed from the directory that contains all packages
-      Dir.chdir(File.dirname(gem_pkg)) { install_gem(gem_pkg, opts) }
-    else
-      false
-    end
-  end
-  
-  # Uninstall a gem.
-  def uninstall_gem(gem, options = {})
-    if options[:version] && !options[:version].is_a?(Gem::Requirement)
-      options[:version] = Gem::Requirement.new ["= #{options[:version]}"]
-    end
-    update_source_index(options[:install_dir]) if options[:install_dir]
-    Gem::Uninstaller.new(gem, options).uninstall rescue nil
-  end
-
-  def clobber(source_dir)
-    Dir.chdir(source_dir) do 
-      system "#{Gem.ruby} -S rake -s clobber" unless File.exists?('Thorfile')
-    end
-  end
-
-  def package(source_dir, clobber = true)
-    Dir.chdir(source_dir) do 
-      if File.exists?('Thorfile')
-        thor ":package"
-      elsif File.exists?('Rakefile')
-        rake "clobber" if clobber
-        rake "package"
-      end
-    end
-    Dir[File.join(source_dir, 'pkg/*.gem')]
-  end
-
-  def package_all(source_dir, skip = [], packages = [])
-    if Dir[File.join(source_dir, '{Rakefile,Thorfile}')][0]
-      name = File.basename(source_dir)
-      Dir[File.join(source_dir, '*', '{Rakefile,Thorfile}')].each do |taskfile|
-        package_all(File.dirname(taskfile), skip, packages)
-      end
-      packages.push(*package(source_dir)) unless skip.include?(name)
-    end
-    packages.uniq
-  end
-  
-  def rake(cmd)
-    cmd << " >/dev/null" if $SILENT && !Gem.win_platform?
-    system "#{Gem.ruby} -S #{which('rake')} -s #{cmd} >/dev/null"
-  end
-  
-  def thor(cmd)
-    cmd << " >/dev/null" if $SILENT && !Gem.win_platform?
-    system "#{Gem.ruby} -S #{which('thor')} #{cmd}"
-  end
-
-  # Use the local bin/* executables if available.
-  def which(executable)
-    if File.executable?(exec = File.join(Dir.pwd, 'bin', executable))
-      exec
-    else
-      executable
-    end
-  end
-  
-  # Partition gems into system, local and missing gems
-  def partition_dependencies(dependencies, gem_dir)
-    system_specs, local_specs, missing_deps = [], [], []
-    if gem_dir && File.directory?(gem_dir)
-      gem_dir = File.expand_path(gem_dir)
-      ::Gem.clear_paths; ::Gem.path.unshift(gem_dir)
-      ::Gem.source_index.refresh!
-      dependencies.each do |dep|
-        gemspecs = ::Gem.source_index.search(dep)
-        local = gemspecs.reverse.find { |s| s.loaded_from.index(gem_dir) == 0 }
-        if local
-          local_specs << local
-        elsif gemspecs.last
-          system_specs << gemspecs.last
-        else
-          missing_deps << dep
-        end
-      end
-      ::Gem.clear_paths
-    else
-      dependencies.each do |dep|
-        gemspecs = ::Gem.source_index.search(dep)
-        if gemspecs.last
-          system_specs << gemspecs.last
-        else
-          missing_deps << dep
-        end
-      end
-    end
-    [system_specs, local_specs, missing_deps]
-  end
-  
-  # Create a modified executable wrapper in the specified bin directory.
-  def ensure_bin_wrapper_for(gem_dir, bin_dir, *gems)
-    options = gems.last.is_a?(Hash) ? gems.last : {}
-    options[:no_minigems] ||= []
-    if bin_dir && File.directory?(bin_dir)
-      gems.each do |gem|
-        if gemspec_path = Dir[File.join(gem_dir, 'specifications', "#{gem}-*.gemspec")].last
-          spec = Gem::Specification.load(gemspec_path)
-          enable_minigems = !options[:no_minigems].include?(spec.name)
-          spec.executables.each do |exec|
-            executable = File.join(bin_dir, exec)
-            message "Writing executable wrapper #{executable}"
-            File.open(executable, 'w', 0755) do |f|
-              f.write(executable_wrapper(spec, exec, enable_minigems))
-            end
-          end
-        end
-      end
-    end
-  end
-  
-  def ensure_bin_wrapper_for_installed_gems(gemspecs, options)
-    if options[:install_dir] && options[:bin_dir]
-      gems = gemspecs.map { |spec| spec.name }
-      ensure_bin_wrapper_for(options[:install_dir], options[:bin_dir], *gems)
-    end
-  end
-  
-  private
-
-  def executable_wrapper(spec, bin_file_name, minigems = true)
-    requirements = ['minigems', 'rubygems']
-    requirements.reverse! unless minigems
-    try_req, then_req = requirements
-    <<-TEXT
-#!/usr/bin/env ruby
-#
-# This file was generated by Merb's GemManagement
-#
-# The application '#{spec.name}' is installed as part of a gem, and
-# this file is here to facilitate running it.
-
-begin 
-  require '#{try_req}'
-rescue LoadError 
-  require '#{then_req}'
-end
-
-# use gems dir if ../gems exists - eg. only for ./bin/#{bin_file_name}
-if File.directory?(gems_dir = File.join(File.dirname(__FILE__), '..', 'gems'))
-  $BUNDLE = true; Gem.clear_paths; Gem.path.replace([File.expand_path(gems_dir)])
-  ENV["PATH"] = "\#{File.dirname(__FILE__)}:\#{gems_dir}/bin:\#{ENV["PATH"]}"
-  if (local_gem = Dir[File.join(gems_dir, "specifications", "#{spec.name}-*.gemspec")].last)
-    version = File.basename(local_gem)[/-([\\.\\d]+)\\.gemspec$/, 1]
-  end
-end
-
-version ||= "#{Gem::Requirement.default}"
-
-if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
-  version = $1
-  ARGV.shift
-end
-
-gem '#{spec.name}', version
-load '#{bin_file_name}'
-TEXT
-  end
-
-  def find_gem_in_cache(gem, version)
-    spec = if version
-      version = Gem::Requirement.new ["= #{version}"] unless version.is_a?(Gem::Requirement)
-      Gem.source_index.find_name(gem, version).first
-    else
-      Gem.source_index.find_name(gem).sort_by { |g| g.version }.last
-    end
-    if spec && File.exists?(gem_file = "#{spec.installation_path}/cache/#{spec.full_name}.gem")
-      gem_file
-    end
-  end
-
-  def update_source_index(dir)
-    Gem.source_index.load_gems_in(File.join(dir, 'specifications'))
-  end
-    
-end
-
-##############################################################################
-
-class SourceManager
-  
-  include ColorfulMessages
-  
-  attr_accessor :source_dir
-  
-  def initialize(source_dir)
-    self.source_dir = source_dir
-  end
-  
-  def clone(name, url)
-    FileUtils.cd(source_dir) do
-      raise "destination directory already exists" if File.directory?(name)
-      system("git clone --depth 1 #{url} #{name}")
-    end
-  rescue => e
-    error "Unable to clone #{name} repository (#{e.message})"
-  end
-  
-  def update(name, url)
-    if File.directory?(repository_dir = File.join(source_dir, name))
-      FileUtils.cd(repository_dir) do
-        repos = existing_repos(name)
-        fork_name = url[/.com\/+?(.+)\/.+\.git/u, 1]
-        if url == repos["origin"]
-          # Pull from the original repository - no branching needed
-          info "Pulling from origin: #{url}"
-          system "git fetch; git checkout master; git rebase origin/master"
-        elsif repos.values.include?(url) && fork_name
-          # Update and switch to a remote branch for a particular github fork
-          info "Switching to remote branch: #{fork_name}"
-          system "git checkout -b #{fork_name} #{fork_name}/master"   
-          system "git rebase #{fork_name}/master"
-        elsif fork_name
-          # Create a new remote branch for a particular github fork
-          info "Adding a new remote branch: #{fork_name}"
-          system "git remote add -f #{fork_name} #{url}"
-          system "git checkout -b #{fork_name} #{fork_name}/master"
-        else
-          warning "No valid repository found for: #{name}"
-        end
-      end
-      return true
-    else
-      warning "No valid repository found at: #{repository_dir}"
-    end
-  rescue => e
-    error "Unable to update #{name} repository (#{e.message})"
-    return false
-  end
-  
-  def existing_repos(name)
-    repos = []
-    FileUtils.cd(File.join(source_dir, name)) do
-      repos = %x[git remote -v].split("\n").map { |branch| branch.split(/\s+/) }
-    end
-    Hash[*repos.flatten]
-  end
-  
-end
-
-##############################################################################
-
-module MerbThorHelper
-  
-  attr_accessor :force_gem_dir
-  
-  def self.included(base)
-    base.send(:include, ColorfulMessages)
-    base.extend ColorfulMessages
-  end
-  
-  def use_edge_gem_server
-    ::Gem.sources << 'http://edge.merbivore.com'
-  end
-  
-  def source_manager
-    @_source_manager ||= SourceManager.new(source_dir)
-  end
-  
-  def extract_repositories(names)
-    repos = []
-    names.each do |name|
-      if repo_url = Merb::Source.repo(name, options[:sources])
-        # A repository entry for this dependency exists
-        repo = [name, repo_url]
-        repos << repo unless repos.include?(repo) 
-      elsif (repo_name = Merb::Stack.lookup_repository_name(name)) &&
-        (repo_url = Merb::Source.repo(repo_name, options[:sources]))
-        # A parent repository entry for this dependency exists
-        repo = [repo_name, repo_url]
-        unless repos.include?(repo)
-          puts "Found #{repo_name}/#{name} at #{repo_url}"
-          repos << repo 
-        end
-      end
-    end
-    repos
-  end
-  
-  def update_dependency_repositories(dependencies)
-    repos = extract_repositories(dependencies.map { |d| d.name })
-    update_repositories(repos)
-  end
-  
-  def update_repositories(repos)
-    repos.each do |(name, url)|
-      if File.directory?(repository_dir = File.join(source_dir, name))
-        message "Updating or branching #{name}..."
-        source_manager.update(name, url)
-      else
-        message "Cloning #{name} repository from #{url}..."
-        source_manager.clone(name, url)
-      end
-    end
-  end
-  
-  def install_dependency(dependency, opts = {})
-    version = dependency.version_requirements.to_s
-    install_opts = default_install_options.merge(:version => version)
-    Merb::Gem.install(dependency.name, install_opts.merge(opts))
-  end
-
-  def install_dependency_from_source(dependency, opts = {})
-    matches = Dir[File.join(source_dir, "**", dependency.name, "{Rakefile,Thorfile}")]
-    matches.reject! { |m| File.basename(m) == 'Thorfile' }
-    if matches.length == 1 && matches[0]
-      if File.directory?(gem_src_dir = File.dirname(matches[0]))
-        begin
-          Merb::Gem.install_gem_from_source(gem_src_dir, default_install_options.merge(opts))
-          puts "Installed #{dependency.name}"
-          return true
-        rescue => e
-          warning "Unable to install #{dependency.name} from source (#{e.message})"
-        end
-      else
-        msg = "Unknown directory: #{gem_src_dir}"
-        warning "Unable to install #{dependency.name} from source (#{msg})"
-      end
-    elsif matches.length > 1
-      error "Ambigous source(s) for dependency: #{dependency.name}"
-      matches.each { |m| puts "- #{m}" }
-    end
-    return false
-  end
-  
-  def clobber_dependencies!
-    if options[:force] && gem_dir && File.directory?(gem_dir)
-      # Remove all existing local gems by clearing the gems directory
-      if dry_run?
-        note 'Clearing existing local gems...'
-      else
-        message 'Clearing existing local gems...'
-        FileUtils.rm_rf(gem_dir) && FileUtils.mkdir_p(default_gem_dir)
-      end
-    elsif !local.empty? 
-      # Uninstall all local versions of the gems to install
-      if dry_run?
-        note 'Uninstalling existing local gems:'
-        local.each { |gemspec| note "Uninstalled #{gemspec.name}" }
-      else
-        message 'Uninstalling existing local gems:' if local.size > 1
-        local.each do |gemspec|
-          Merb::Gem.uninstall(gemspec.name, default_uninstall_options)
-        end
-      end
-    end
-  end
-    
-  def display_gemspecs(gemspecs)
-    if gemspecs.empty?
-      puts "- none"
-    else
-      gemspecs.each do |spec| 
-        if hint = Dir[File.join(spec.full_gem_path, '*.strategy')][0]
-          strategy = File.basename(hint, '.strategy')
-          puts "- #{spec.full_name} (#{strategy})"
-        else
-          puts "~ #{spec.full_name}" # unknown strategy
-        end
-      end
-    end
-  end
-  
-  def display_dependencies(dependencies)
-    if dependencies.empty?
-      puts "- none"
-    else
-      dependencies.each { |d| puts "- #{d.name} (#{d.version_requirements})" }
-    end
-  end
-  
-  def default_install_options
-    { :install_dir => gem_dir, :bin_dir => bin_dir, :ignore_dependencies => ignore_dependencies? }
-  end
-  
-  def default_uninstall_options
-    { :install_dir => gem_dir, :bin_dir => bin_dir, :ignore => true, :all => true, :executables => true }
-  end
-  
-  def dry_run?
-    options[:"dry-run"]
-  end
-  
-  def ignore_dependencies?
-    options[:"ignore-dependencies"]
-  end
-  
-  # The current working directory, or Merb app root (--merb-root option).
-  def working_dir
-    @_working_dir ||= File.expand_path(options['merb-root'] || Dir.pwd)
-  end
-  
-  # We should have a ./src dir for local and system-wide management.
-  def source_dir
-    @_source_dir  ||= File.join(working_dir, 'src')
-    create_if_missing(@_source_dir)
-    @_source_dir
-  end
-    
-  # If a local ./gems dir is found, return it.
-  def gem_dir
-    return force_gem_dir if force_gem_dir
-    if File.directory?(dir = default_gem_dir)
-      dir
-    end
-  end
-  
-  def default_gem_dir
-    File.join(working_dir, 'gems')
-  end
-  
-  # If we're in a Merb app, we can have a ./bin directory;
-  # create it if it's not there.
-  def bin_dir
-    @_bin_dir ||= begin
-      if gem_dir
-        dir = File.join(working_dir, 'bin')
-        create_if_missing(dir)
-        dir
-      end
-    end
-  end
-  
-  # Helper to create dir unless it exists.
-  def create_if_missing(path)
-    FileUtils.mkdir(path) unless File.exists?(path)
-  end
-  
-  def sudo
-    ENV['THOR_SUDO'] ||= "sudo"
-    sudo = Gem.win_platform? ? "" : ENV['THOR_SUDO']
-  end
-    
-  def local_gemspecs(directory = gem_dir)
-    if File.directory?(specs_dir = File.join(directory, 'specifications'))
-      Dir[File.join(specs_dir, '*.gemspec')].map do |gemspec_path|
-        gemspec = Gem::Specification.load(gemspec_path)
-        gemspec.loaded_from = gemspec_path
-        gemspec
-      end
-    else
-      []
-    end
-  end
-  
-end
-
-##############################################################################
-
-$SILENT = true # don't output all the mess some rake package tasks spit out
-
-module Merb
-  
-  class Gem < Thor
-    
-    include MerbThorHelper
-    extend GemManagement
-    
-    attr_accessor :system, :local, :missing
-    
-    global_method_options = {
-      "--merb-root"            => :optional,  # the directory to operate on
-      "--version"              => :optional,  # gather specific version of gem
-      "--ignore-dependencies"  => :boolean    # don't install sub-dependencies
-    }
-    
-    method_options global_method_options
-    def initialize(*args); super; end
-    
-    # List gems that match the specified criteria.
-    #
-    # By default all local gems are listed. When the first argument is 'all' the
-    # list is partitioned into system an local gems; specify 'system' to show
-    # only system gems. A second argument can be used to filter on a set of known
-    # components, like all merb-more gems for example.
-    # 
-    # Examples:
-    #
-    # merb:gem:list                                    # list all local gems - the default
-    # merb:gem:list all                                # list system and local gems
-    # merb:gem:list system                             # list only system gems
-    # merb:gem:list all merb-more                      # list only merb-more related gems
-    # merb:gem:list --version 0.9.8                    # list gems that match the version    
-       
-    desc 'list [all|local|system] [comp]', 'Show installed gems'
-    def list(filter = 'local', comp = nil)
-      deps = comp ? Merb::Stack.select_component_dependencies(dependencies, comp) : dependencies
-      self.system, self.local, self.missing = Merb::Gem.partition_dependencies(deps, gem_dir)
-      case filter
-      when 'all'
-        message 'Installed system gems:'
-        display_gemspecs(system)
-        message 'Installed local gems:'
-        display_gemspecs(local)
-      when 'system'
-        message 'Installed system gems:'
-        display_gemspecs(system)
-      when 'local'
-        message 'Installed local gems:'
-        display_gemspecs(local)
-      else
-        warning "Invalid listing filter '#{filter}'"
-      end
-    end
-    
-    # Install the specified gems.
-    #
-    # All arguments should be names of gems to install.
-    #
-    # When :force => true then any existing versions of the gems to be installed
-    # will be uninstalled first. It's important to note that so-called meta-gems
-    # or gems that exactly match a set of Merb::Stack.components will have their
-    # sub-gems uninstalled too. For example, uninstalling merb-more will install
-    # all contained gems: merb-action-args, merb-assets, merb-gen, ...
-    # 
-    # Examples:
-    #
-    # merb:gem:install merb-core merb-slices          # install all specified gems
-    # merb:gem:install merb-core --version 0.9.8      # install a specific version of a gem
-    # merb:gem:install merb-core --force              # uninstall then subsequently install the gem
-    # merb:gem:install merb-core --cache              # try to install locally from system gems
-    # merb:gem:install merb --merb-edge               # install from edge.merbivore.com
-     
-    desc 'install GEM_NAME [GEM_NAME, ...]', 'Install a gem from rubygems'
-    method_options "--cache"        => :boolean,
-                   "--dry-run"      => :boolean,
-                   "--force"        => :boolean,
-                   "--merb-edge"    => :boolean
-    def install(*names)
-      opts = { :version => options[:version], :cache => options[:cache] }
-      use_edge_gem_server if options[:"merb-edge"]
-      current_gem = nil
-      
-      # uninstall existing gems of the ones we're going to install
-      uninstall(*names) if options[:force]
-      
-      names.each do |gem_name|
-        current_gem = gem_name      
-        if dry_run?
-          note "Installing #{current_gem}..."
-        else
-          message "Installing #{current_gem}..."
-          self.class.install(gem_name, default_install_options.merge(opts))
-        end
-      end
-    rescue => e
-      error "Failed to install #{current_gem ? current_gem : 'gem'} (#{e.message})"
-    end
-    
-    # Uninstall the specified gems.
-    #
-    # By default all specified gems are uninstalled. It's important to note that 
-    # so-called meta-gems or gems that match a set of Merb::Stack.components will 
-    # have their sub-gems uninstalled too. For example, uninstalling merb-more 
-    # will install all contained gems: merb-action-args, merb-assets, ...
-    #
-    # Existing dependencies will be clobbered; when :force => true then all gems
-    # will be cleared, otherwise only existing local dependencies of the
-    # matching component set will be removed.
-    #
-    # Examples:
-    #
-    # merb:gem:uninstall merb-core merb-slices        # uninstall all specified gems
-    # merb:gem:uninstall merb-core --version 0.9.8    # uninstall a specific version of a gem
-    
-    desc 'uninstall GEM_NAME [GEM_NAME, ...]', 'Unstall a gem'
-    method_options "--dry-run" => :boolean
-    def uninstall(*names)
-      opts = { :version => options[:version] }
-      current_gem = nil
-      if dry_run?
-        note "Uninstalling any existing gems of: #{names.join(', ')}"
-      else
-        message "Uninstalling any existing gems of: #{names.join(', ')}"
-        names.each do |gem_name|
-          current_gem = gem_name
-          Merb::Gem.uninstall(gem_name, default_uninstall_options) rescue nil
-          # if this gem is a meta-gem or a component set name, remove sub-gems
-          (Merb::Stack.components(gem_name) || []).each do |comp|
-            Merb::Gem.uninstall(comp, default_uninstall_options) rescue nil
-          end
-        end
-      end 
-    rescue => e
-      error "Failed to uninstall #{current_gem ? current_gem : 'gem'} (#{e.message})"
-    end
-    
-    # Recreate all gems from gems/cache on the current platform.
-    #
-    # This task should be executed as part of a deployment setup, where the 
-    # deployment system runs this after the app has been installed.
-    # Usually triggered by Capistrano, God...
-    #
-    # It will regenerate gems from the bundled gems cache for any gem that has 
-    # C extensions - which need to be recompiled for the target deployment platform.
-    #
-    # Note: at least gems/cache and gems/specifications should be in your SCM.
-    
-    desc 'redeploy', 'Recreate any binary gems on the target platform'
-    method_options "--dry-run" => :boolean, "--force" => :boolean
-    def redeploy
-      require 'tempfile' # for Dir::tmpdir access
-      if gem_dir && File.directory?(cache_dir = File.join(gem_dir, 'cache'))
-        local_gemspecs.each do |gemspec|
-          if File.exists?(gem_file = File.join(cache_dir, "#{gemspec.full_name}.gem"))
-            gem_file_copy = File.join(Dir::tmpdir, File.basename(gem_file))
-            if dry_run?
-              note "Recreating #{gemspec.full_name}"
-            else
-              message "Recreating #{gemspec.full_name}"       
-              if options[:force] && File.directory?(gem = File.join(gem_dir, 'gems', gemspec.full_name))
-                puts "Removing existing #{gemspec.full_name}"
-                FileUtils.rm_rf(gem) 
-              end              
-              # Copy the gem to a temporary file, because otherwise RubyGems/FileUtils
-              # will complain about copying identical files (same source/destination).
-              FileUtils.cp(gem_file, gem_file_copy)
-              Merb::Gem.install(gem_file_copy, :install_dir => gem_dir, :ignore_dependencies => true)
-              File.delete(gem_file_copy)
-            end
-          end
-        end
-      else
-        error "No application local gems directory found"
-      end
-    end
-    
-    private
-    
-    # Return dependencies for all installed gems; both system-wide and locally;
-    # optionally filters on :version requirement.
-    def dependencies
-      version_req = if options[:version]
-        ::Gem::Requirement.create(options[:version])
-      else
-        ::Gem::Requirement.default
-      end
-      if gem_dir
-        ::Gem.clear_paths; ::Gem.path.unshift(gem_dir)
-        ::Gem.source_index.refresh!
-      end
-      deps = []
-      ::Gem.source_index.each do |fullname, gemspec| 
-        if version_req.satisfied_by?(gemspec.version)
-          deps << ::Gem::Dependency.new(gemspec.name, "= #{gemspec.version}")
-        end
-      end
-      ::Gem.clear_paths if gem_dir
-      deps.sort
-    end
-    
-    public
-    
-    # Install gem with some default options.
-    def self.install(name, options = {})
-      defaults = {}
-      defaults[:cache] = false unless opts[:install_dir]
-      install_gem(name, defaults.merge(options))
-    end
-    
-    # Uninstall gem with some default options.
-    def self.uninstall(name, options = {})
-      defaults = { :ignore => true, :executables => true }
-      uninstall_gem(name, defaults.merge(options))
-    end
-    
-  end
-  
-  class Tasks < Thor
-    
-    include MerbThorHelper
-    
-    # Show merb.thor version information
-    #
-    # merb:tasks:version                                        # show the current version info
-    # merb:tasks:version --info                                 # show extended version info
-    
-    desc 'version', 'Show verion info'
-    method_options "--info" => :boolean
-    def version
-      message "Currently installed merb.thor version: #{MERB_THOR_VERSION}"
-      if options[:version]
-        self.options = { :"dry-run" => true }
-        self.update # run update task with dry-run enabled
-      end
-    end
-    
-    # Update merb.thor tasks from remotely available version
-    #
-    # merb:tasks:update                                        # update merb.thor
-    # merb:tasks:update --force                                # force-update merb.thor
-    # merb:tasks:update --dry-run                              # show version info only
-    
-    desc 'update [URL]', 'Fetch the latest merb.thor and install it locally'
-    method_options "--dry-run" => :boolean, "--force" => :boolean
-    def update(url = 'http://merbivore.com/merb.thor')
-      require 'open-uri'
-      require 'rubygems/version'
-      remote_file = open(url)
-      code = remote_file.read
-      
-      # Extract version information from the source code
-      if version = code[/^MERB_THOR_VERSION\s?=\s?('|")([\.\d]+)('|")/,2]
-        # borrow version comparison from rubygems' Version class
-        current_version = ::Gem::Version.new(MERB_THOR_VERSION)
-        remote_version  = ::Gem::Version.new(version)
-        
-        if current_version >= remote_version
-          puts "currently installed: #{current_version}"
-          if current_version != remote_version
-            puts "available version:   #{remote_version}"
-          end
-          info "No update of merb.thor necessary#{options[:force] ? ' (forced)' : ''}"
-          proceed = options[:force]
-        elsif current_version < remote_version
-          puts "currently installed: #{current_version}"
-          puts "available version:   #{remote_version}"
-          proceed = true
-        end
-          
-        if proceed && !dry_run?
-          File.open(File.join(__FILE__), 'w') do |f|
-            f.write(code)
-          end
-          success "Installed the latest merb.thor (v#{version})"
-        end
-      else
-        raise "invalid source-code data"
-      end      
-    rescue OpenURI::HTTPError
-      error "Error opening #{url}"
-    rescue => e
-      error "An error occurred (#{e.message})"
-    end
-    
-  end
-  
-  #### MORE LOW-LEVEL TASKS ####
-  
-  class Source < Thor
-    
-    group 'core'
-        
-    include MerbThorHelper
-    extend GemManagement
-    
-    attr_accessor :system, :local, :missing
-    
-    global_method_options = {
-      "--merb-root"            => :optional,  # the directory to operate on
-      "--ignore-dependencies"  => :boolean,   # don't install sub-dependencies
-      "--sources"              => :optional   # a yml config to grab sources from
-    }
-    
-    method_options global_method_options
-    def initialize(*args); super; end
-        
-    # List source repositories, of either local or known sources.
-    #
-    # Examples:
-    #
-    # merb:source:list                                   # list all local sources
-    # merb:source:list available                         # list all known sources
-    
-    desc 'list [local|available]', 'Show git source repositories'
-    def list(mode = 'local')
-      if mode == 'available'
-        message 'Available source repositories:'
-        repos = self.class.repos(options[:sources])
-        repos.keys.sort.each { |name| puts "- #{name}: #{repos[name]}" }
-      elsif mode == 'local'
-        message 'Current source repositories:'
-        Dir[File.join(source_dir, '*')].each do |src|
-          next unless File.directory?(src)
-          src_name = File.basename(src)
-          unless (repos = source_manager.existing_repos(src_name)).empty?
-            puts "#{src_name}"
-            repos.keys.sort.each { |b| puts "- #{b}: #{repos[b]}" }
-          end
-        end
-      else
-        error "Unknown listing: #{mode}"
-      end
-    end
-
-    # Install the specified gems.
-    #
-    # All arguments should be names of gems to install.
-    #
-    # When :force => true then any existing versions of the gems to be installed
-    # will be uninstalled first. It's important to note that so-called meta-gems
-    # or gems that exactly match a set of Merb::Stack.components will have their
-    # sub-gems uninstalled too. For example, uninstalling merb-more will install
-    # all contained gems: merb-action-args, merb-assets, merb-gen, ...
-    # 
-    # Examples:
-    #
-    # merb:source:install merb-core merb-slices          # install all specified gems
-    # merb:source:install merb-core --force              # uninstall then subsequently install the gem
-    # merb:source:install merb-core --wipe               # clear repo then install the gem
-
-    desc 'install GEM_NAME [GEM_NAME, ...]', 'Install a gem from git source/edge'
-    method_options "--dry-run"      => :boolean,
-                   "--force"        => :boolean,
-                   "--wipe"         => :boolean
-    def install(*names)
-      use_edge_gem_server
-      # uninstall existing gems of the ones we're going to install
-      uninstall(*names) if options[:force] || options[:wipe]
-      
-      # We want dependencies instead of just names
-      deps = names.map { |n| ::Gem::Dependency.new(n, ::Gem::Requirement.default) }
-      
-      # Selectively update repositories for the matching dependencies
-      update_dependency_repositories(deps) unless dry_run?
-      
-      current_gem = nil
-      deps.each do |dependency|
-        current_gem = dependency.name      
-        if dry_run?
-          note "Installing #{current_gem} from source..."
-        else
-          message "Installing #{current_gem} from source..."
-          unless install_dependency_from_source(dependency)
-            raise "gem source not found"
-          end
-        end
-      end
-    rescue => e
-      error "Failed to install #{current_gem ? current_gem : 'gem'} (#{e.message})"
-    end
-    
-    # Uninstall the specified gems.
-    #
-    # By default all specified gems are uninstalled. It's important to note that 
-    # so-called meta-gems or gems that match a set of Merb::Stack.components will 
-    # have their sub-gems uninstalled too. For example, uninstalling merb-more 
-    # will install all contained gems: merb-action-args, merb-assets, ...
-    #
-    # Existing dependencies will be clobbered; when :force => true then all gems
-    # will be cleared, otherwise only existing local dependencies of the
-    # matching component set will be removed. Additionally when :wipe => true, 
-    # the matching git repositories will be removed from the source directory.
-    #
-    # Examples:
-    #
-    # merb:source:uninstall merb-core merb-slices       # uninstall all specified gems
-    # merb:source:uninstall merb-core --wipe            # force-uninstall a gem and clear repo
-    
-    desc 'uninstall GEM_NAME [GEM_NAME, ...]', 'Unstall a gem (specify --force to remove the repo)'
-    method_options "--version" => :optional, "--dry-run" => :boolean, "--wipe" => :boolean
-    def uninstall(*names)
-      # Remove the repos that contain the gem
-      if options[:wipe] 
-        extract_repositories(names).each do |(name, url)|
-          if File.directory?(src = File.join(source_dir, name))
-            if dry_run?
-              note "Removing #{src}..."
-            else
-              info "Removing #{src}..."
-              FileUtils.rm_rf(src)
-            end
-          end
-        end
-      end
-      
-      # Use the Merb::Gem#uninstall task to handle this
-      gem_tasks = Merb::Gem.new
-      gem_tasks.options = options
-      gem_tasks.uninstall(*names)
-    end
-    
-    # Update the specified source repositories.
-    #
-    # The arguments can be actual repository names (from Merb::Source.repos)
-    # or names of known merb stack gems. If the repo doesn't exist already,
-    # it will be created and cloned.
-    #
-    # merb:source:pull merb-core                         # update source of specified gem
-    # merb:source:pull merb-slices                       # implicitly updates merb-more
-    
-    desc 'pull REPO_NAME [GEM_NAME, ...]', 'Update git source repository from edge'
-    def pull(*names)
-      repos = extract_repositories(names)
-      update_repositories(repos)
-      unless repos.empty?
-        message "Updated the following repositories:"
-        repos.each { |name, url| puts "- #{name}: #{url}" }
-      else
-        warning "No repositories found to update!"
-      end
-    end    
-    
-    # Clone a git repository into ./src. 
-    
-    # The repository can be a direct git url or a known -named- repository.
-    #
-    # Examples:
-    #
-    # merb:source:clone merb-core 
-    # merb:source:clone dm-core awesome-repo
-    # merb:source:clone dm-core --sources ./path/to/sources.yml
-    # merb:source:clone git://github.com/sam/dm-core.git
-    
-    desc 'clone (REPO_NAME|URL) [DIR_NAME]', 'Clone git source repository by name or url'
-    def clone(repository, name = nil)
-      if repository =~ /^git:\/\//
-        repository_url  = repository
-        repository_name = File.basename(repository_url, '.git')
-      elsif url = Merb::Source.repo(repository, options[:sources])
-        repository_url = url
-        repository_name = repository
-      end
-      source_manager.clone(name || repository_name, repository_url)
-    end
-    
-    # Git repository sources - pass source_config option to load a yaml 
-    # configuration file - defaults to ./config/git-sources.yml and
-    # ~/.merb/git-sources.yml - which you need to create yourself. 
-    #
-    # Example of contents:
-    #
-    # merb-core: git://github.com/myfork/merb-core.git
-    # merb-more: git://github.com/myfork/merb-more.git
-    
-    def self.repos(source_config = nil)
-      source_config ||= begin
-        local_config = File.join(Dir.pwd, 'config', 'git-sources.yml')
-        user_config  = File.join(ENV["HOME"] || ENV["APPDATA"], '.merb', 'git-sources.yml')
-        File.exists?(local_config) ? local_config : user_config
-      end
-      if source_config && File.exists?(source_config)
-        default_repos.merge(YAML.load(File.read(source_config)))
-      else
-        default_repos
-      end
-    end
-    
-    def self.repo(name, source_config = nil)
-      self.repos(source_config)[name]
-    end
-    
-    # Default Git repositories
-    def self.default_repos
-      @_default_repos ||= { 
-        'merb'          => "git://github.com/wycats/merb.git",
-        'merb-plugins'  => "git://github.com/wycats/merb-plugins.git",
-        'extlib'        => "git://github.com/sam/extlib.git",
-        'dm-core'       => "git://github.com/sam/dm-core.git",
-        'dm-more'       => "git://github.com/sam/dm-more.git",
-        'sequel'        => "git://github.com/wayneeseguin/sequel.git",
-        'do'            => "git://github.com/sam/do.git",
-        'thor'          => "git://github.com/wycats/thor.git",
-        'rake'          => "git://github.com/jimweirich/rake.git"
-      }
-    end
-       
-  end
-  
-  class Dependencies < Thor
-  
-    group 'core'
-    
-    # The Dependencies tasks will install dependencies based on actual application
-    # dependencies. For this, the application is queried for any dependencies.
-    # All operations will be performed within this context.
-    
-    attr_accessor :system, :local, :missing, :extract_dependencies
-    
-    include MerbThorHelper
-    
-    global_method_options = {
-      "--merb-root"            => :optional,  # the directory to operate on
-      "--ignore-dependencies"  => :boolean,   # ignore sub-dependencies
-      "--stack"                => :boolean,   # gather only stack dependencies
-      "--no-stack"             => :boolean,   # gather only non-stack dependencies
-      "--extract"              => :boolean,   # gather dependencies from the app itself
-      "--config-file"          => :optional,  # gather from the specified yaml config
-      "--version"              => :optional   # gather specific version of framework
-    }
-    
-    method_options global_method_options
-    def initialize(*args); super; end
-    
-    # List application dependencies.
-    #
-    # By default all dependencies are listed, partitioned into system, local and
-    # currently missing dependencies. The first argument allows you to filter
-    # on any of the partitionings. A second argument can be used to filter on
-    # a set of known components, like all merb-more gems for example.
-    # 
-    # Examples:
-    #
-    # merb:dependencies:list                                    # list all dependencies - the default
-    # merb:dependencies:list local                              # list only local gems
-    # merb:dependencies:list all merb-more                      # list only merb-more related dependencies
-    # merb:dependencies:list --stack                            # list framework dependencies
-    # merb:dependencies:list --no-stack                         # list 3rd party dependencies
-    # merb:dependencies:list --extract                          # list dependencies by extracting them
-    # merb:dependencies:list --config-file file.yml             # list from the specified config file
-       
-    desc 'list [all|local|system|missing] [comp]', 'Show application dependencies'
-    def list(filter = 'all', comp = nil)
-      deps = comp ? Merb::Stack.select_component_dependencies(dependencies, comp) : dependencies
-      self.system, self.local, self.missing = Merb::Gem.partition_dependencies(deps, gem_dir)
-      case filter
-      when 'all'
-        message 'Installed system gem dependencies:' 
-        display_gemspecs(system)
-        message 'Installed local gem dependencies:'
-        display_gemspecs(local)
-        unless missing.empty?
-          error 'Missing gem dependencies:'
-          display_dependencies(missing)
-        end
-      when 'system'
-        message 'Installed system gem dependencies:'
-        display_gemspecs(system)
-      when 'local'
-        message 'Installed local gem dependencies:'
-        display_gemspecs(local)
-      when 'missing'
-        error 'Missing gem dependencies:'
-        display_dependencies(missing)
-      else
-        warning "Invalid listing filter '#{filter}'"
-      end
-      if missing.size > 0
-        info "Some dependencies are currently missing!"
-      elsif local.size == deps.size
-        info "All dependencies have been bundled with the application."
-      elsif local.size > system.size
-        info "Most dependencies have been bundled with the application."
-      elsif system.size > 0 && local.size > 0
-        info "Some dependencies have been bundled with the application."  
-      elsif local.empty? && system.size == deps.size
-        info "All dependencies are available on the system."
-      end
-    end
-    
-    # Install application dependencies.
-    #
-    # By default all required dependencies are installed. The first argument 
-    # specifies which strategy to use: stable or edge. A second argument can be 
-    # used to filter on a set of known components.
-    #
-    # Existing dependencies will be clobbered; when :force => true then all gems
-    # will be cleared first, otherwise only existing local dependencies of the
-    # gems to be installed will be removed.
-    # 
-    # Examples:
-    #
-    # merb:dependencies:install                                 # install all dependencies using stable strategy
-    # merb:dependencies:install stable --version 0.9.8          # install a specific version of the framework
-    # merb:dependencies:install stable missing                  # install currently missing gems locally
-    # merb:dependencies:install stable merb-more                # install only merb-more related dependencies
-    # merb:dependencies:install stable --stack                  # install framework dependencies
-    # merb:dependencies:install stable --no-stack               # install 3rd party dependencies
-    # merb:dependencies:install stable --extract                # extract dependencies from the actual app
-    # merb:dependencies:install stable --config-file file.yml   # read from the specified config file
-    #
-    # In addition to the options above, edge install uses the following: 
-    #
-    # merb:dependencies:install edge                            # install all dependencies using edge strategy
-    # merb:dependencies:install edge --sources file.yml         # install edge from the specified git sources config
-    
-    desc 'install [stable|edge] [comp]', 'Install application dependencies'
-    method_options "--sources" => :optional, # only for edge strategy
-                   "--local"   => :boolean,  # force local install
-                   "--dry-run" => :boolean, 
-                   "--force"   => :boolean                   
-    def install(strategy = 'stable', comp = nil)
-      if strategy?(strategy)
-        # Force local dependencies by creating ./gems before proceeding
-        create_if_missing(default_gem_dir) if options[:local]
-        
-        where = gem_dir ? 'locally' : 'system-wide'
-        
-        # When comp == 'missing' then filter on missing dependencies
-        if only_missing = comp == 'missing'
-          message "Preparing to install missing gems #{where} using #{strategy} strategy..."
-          comp = nil
-          clobber = false
-        else
-          message "Preparing to install #{where} using #{strategy} strategy..."
-          clobber = true
-        end
-        
-        # If comp given, filter on known stack components
-        deps = comp ? Merb::Stack.select_component_dependencies(dependencies, comp) : dependencies
-        self.system, self.local, self.missing = Merb::Gem.partition_dependencies(deps, gem_dir)
-        
-        # Only install currently missing gems (for comp == missing)
-        if only_missing
-          deps.reject! { |dep| not missing.include?(dep) }
-        end
-        
-        if deps.empty?
-          warning "No dependencies to install..."
-        else
-          puts "#{deps.length} dependencies to install..."
-          install_dependencies(strategy, deps, clobber)
-        end
-        
-        # Show current dependency info now that we're done
-        puts # Seperate output
-        list('local', comp)
-      else
-        warning "Invalid install strategy '#{strategy}'"
-        puts
-        message "Please choose one of the following installation strategies: stable or edge:"
-        puts "$ thor merb:dependencies:install stable"
-        puts "$ thor merb:dependencies:install edge"
-      end      
-    end
-    
-    # Uninstall application dependencies.
-    #
-    # By default all required dependencies are installed. An optional argument 
-    # can be used to filter on a set of known components.
-    #
-    # Existing dependencies will be clobbered; when :force => true then all gems
-    # will be cleared, otherwise only existing local dependencies of the
-    # matching component set will be removed.
-    #
-    # Examples:
-    #
-    # merb:dependencies:uninstall                               # uninstall all dependencies - the default
-    # merb:dependencies:uninstall merb-more                     # uninstall merb-more related gems locally
-    
-    desc 'uninstall [comp]', 'Uninstall application dependencies'
-    method_options "--dry-run" => :boolean, "--force" => :boolean
-    def uninstall(comp = nil)
-      # If comp given, filter on known stack components
-      deps = comp ? Merb::Stack.select_component_dependencies(dependencies, comp) : dependencies
-      self.system, self.local, self.missing = Merb::Gem.partition_dependencies(deps, gem_dir)
-      # Clobber existing local dependencies - based on self.local
-      clobber_dependencies!
-    end
-    
-    # Recreate all gems from gems/cache on the current platform.
-    #
-    # Note: use merb:gem:redeploy instead
-    
-    desc 'redeploy', 'Recreate any binary gems on the target platform'
-    method_options "--dry-run" => :boolean, "--force" => :boolean
-    def redeploy
-      warning 'Warning: merb:dependencies:redeploy has been deprecated - use merb:gem:redeploy instead'
-      gem = Merb::Gem.new
-      gem.options = options
-      gem.redeploy
-    end
-    
-    # Create a dependencies configuration file.
-    #
-    # A configuration yaml file will be created from the extracted application
-    # dependencies. The format of the configuration is as follows:
-    #
-    # --- 
-    # - merb-core (= 0.9.8, runtime)
-    # - merb-slices (= 0.9.8, runtime)
-    # 
-    # This format is exactly the same as Gem::Dependency#to_s returns.
-    #
-    # Examples:
-    #
-    # merb:dependencies:configure --force                       # overwrite the default config file
-    # merb:dependencies:configure --version 0.9.8               # configure specific framework version
-    # merb:dependencies:configure --config-file file.yml        # write to the specified config file 
-    
-    desc 'configure [comp]', 'Create a dependencies config file'
-    method_options "--dry-run" => :boolean, "--force" => :boolean, "--versions" => :boolean
-    def configure(comp = nil)
-      self.extract_dependencies = true # of course we need to consult the app itself
-      # If comp given, filter on known stack components
-      deps = comp ? Merb::Stack.select_component_dependencies(dependencies, comp) : dependencies
-      
-      # If --versions is set, update the version_requirements with the actual version available
-      if options[:versions]
-        specs = local_gemspecs
-        deps.each do |dep|
-          if spec = specs.find { |s| s.name == dep.name }
-            dep.version_requirements = ::Gem::Requirement.create(spec.version)
-          end
-        end
-      end
-      
-      config = YAML.dump(deps.map { |d| d.to_s })
-      puts "#{config}\n"
-      if File.exists?(config_file) && !options[:force]
-        error "File already exists! Use --force to overwrite."
-      else
-        if dry_run?
-          note "Written #{config_file}"
-        else
-          FileUtils.mkdir_p(config_dir) unless File.directory?(config_dir)
-          File.open(config_file, 'w') { |f| f.write config }
-          success "Written #{config_file}"
-        end
-      end
-    rescue  
-      error "Failed to write to #{config_file}"
-    end 
-    
-    ### Helper Methods
-    
-    def strategy?(strategy)
-      if self.respond_to?(method = :"#{strategy}_strategy", true)
-        method
-      end
-    end
-    
-    def install_dependencies(strategy, deps, clobber = true)
-      if method = strategy?(strategy)
-        # Clobber existing local dependencies
-        clobber_dependencies! if clobber
-        
-        # Run the chosen strategy - collect files installed from stable gems
-        installed_from_stable = send(method, deps).map { |d| d.name }
-
-        unless dry_run?
-          # Sleep a bit otherwise the following steps won't see the new files
-          sleep(deps.length) if deps.length > 0 && deps.length <= 10
-          
-          # Leave a file to denote the strategy that has been used for this dependency
-          self.local.each do |spec|
-            next unless File.directory?(spec.full_gem_path)
-            unless installed_from_stable.include?(spec.name)
-              FileUtils.touch(File.join(spec.full_gem_path, "#{strategy}.strategy"))
-            else
-              FileUtils.touch(File.join(spec.full_gem_path, "stable.strategy"))
-            end           
-          end
-        end
-        return true
-      end
-      false
-    end
-    
-    def dependencies
-      if extract_dependencies?
-        # Extract dependencies from the current application
-        deps = Merb::Stack.core_dependencies(gem_dir, ignore_dependencies?)
-        deps += Merb::Dependencies.extract_dependencies(working_dir)        
-      else
-        # Use preconfigured dependencies from yaml file
-        deps = config_dependencies
-      end
-      
-      stack_components = Merb::Stack.components
-
-      if options[:stack]
-        # Limit to stack components only
-        deps.reject! { |dep| not stack_components.include?(dep.name) }
-      elsif options[:"no-stack"]
-        # Limit to non-stack components
-        deps.reject! { |dep| stack_components.include?(dep.name) }
-      end
-      
-      if options[:version]
-        version_req = ::Gem::Requirement.create("= #{options[:version]}")
-      elsif core = deps.find { |d| d.name == 'merb-core' }
-        version_req = core.version_requirements
-      end
-      
-      if version_req
-        # Handle specific version requirement for framework components
-        framework_components = Merb::Stack.framework_components
-        deps.each do |dep|
-          if framework_components.include?(dep.name)
-            dep.version_requirements = version_req
-          end
-        end
-      end
-      
-      deps
-    end
-    
-    def config_dependencies
-      if File.exists?(config_file)
-        self.class.parse_dependencies_yaml(File.read(config_file))
-      else
-        warning "No dependencies.yml file found at: #{config_file}"
-        []
-      end
-    end
-    
-    def extract_dependencies?
-      options[:extract] || extract_dependencies
-    end
-    
-    def config_file
-      @config_file ||= begin
-        options[:"config-file"] || File.join(working_dir, 'config', 'dependencies.yml')
-      end
-    end
-    
-    def config_dir
-      File.dirname(config_file)
-    end
-    
-    ### Strategy handlers
-    
-    private
-    
-    def stable_strategy(deps)
-      installed_from_rubygems = []
-      if core = deps.find { |d| d.name == 'merb-core' }
-        if dry_run?
-          note "Installing #{core.name}..."
-        else
-          if install_dependency(core)
-            installed_from_rubygems << core
-          else
-            msg = "Try specifying a lower version of merb-core with --version"
-            if version_no = core.version_requirements.to_s[/([\.\d]+)$/, 1]
-              num = "%03d" % (version_no.gsub('.', '').to_i - 1)
-              puts "The required version (#{version_no}) probably isn't available as a stable rubygem yet."
-              info "#{msg} #{num.split(//).join('.')}"
-            else
-              puts "The required version probably isn't available as a stable rubygem yet."
-              info msg
-            end           
-          end
-        end
-      end
-      
-      deps.each do |dependency|
-        next if dependency.name == 'merb-core'
-        if dry_run?
-          note "Installing #{dependency.name}..."
-        else
-          install_dependency(dependency)
-          installed_from_rubygems << dependency
-        end        
-      end
-      installed_from_rubygems
-    end
-    
-    def edge_strategy(deps)
-      use_edge_gem_server
-      installed_from_rubygems = []
-      
-      # Selectively update repositories for the matching dependencies
-      update_dependency_repositories(deps) unless dry_run?
-      
-      if core = deps.find { |d| d.name == 'merb-core' }
-        if dry_run?
-          note "Installing #{core.name}..."
-        else
-          if install_dependency_from_source(core)
-          elsif install_dependency(core)
-            info "Installed #{core.name} from rubygems..."
-            installed_from_rubygems << core
-          end
-        end
-      end
-      
-      deps.each do |dependency|
-        next if dependency.name == 'merb-core'
-        if dry_run?
-          note "Installing #{dependency.name}..."
-        else
-          if install_dependency_from_source(dependency)
-          elsif install_dependency(dependency)
-            info "Installed #{dependency.name} from rubygems..."
-            installed_from_rubygems << dependency
-          end
-        end        
-      end
-      
-      installed_from_rubygems
-    end
-    
-    ### Class Methods
-    
-    public
-    
-    def self.list(filter = 'all', comp = nil, options = {})
-      instance = Merb::Dependencies.new
-      instance.options = options
-      instance.list(filter, comp)
-    end
-    
-    # Extract application dependencies by querying the app directly.
-    def self.extract_dependencies(merb_root)
-      require 'merb-core'
-      if !@_merb_loaded || Merb.root != merb_root
-        Merb.start_environment(
-          :log_level => :fatal,
-          :testing => true, 
-          :adapter => 'runner', 
-          :environment => ENV['MERB_ENV'] || 'development', 
-          :merb_root => merb_root
-        )
-        @_merb_loaded = true
-      end
-      Merb::BootLoader::Dependencies.dependencies
-    rescue StandardError => e     
-      error "Couldn't extract dependencies from application!"
-      error e.message
-      puts  "Make sure you're executing the task from your app (--merb-root)"
-      return []
-    rescue SystemExit      
-      error "Couldn't extract dependencies from application!"
-      error "application failed to run"
-      puts  "Please check if your application runs using 'merb'; for example,"
-      puts  "look for any gem version mismatches in dependencies.rb"
-      return []
-    end
-        
-    # Parse the basic YAML config data, and process Gem::Dependency output.
-    # Formatting example: merb_helpers (>= 0.9.8, runtime)
-    def self.parse_dependencies_yaml(yaml)
-      dependencies = []
-      entries = YAML.load(yaml) rescue []
-      entries.each do |entry|
-        if matches = entry.match(/^(\S+) \(([^,]+)?, ([^\)]+)\)/)
-          name, version_req, type = matches.captures
-          dependencies << ::Gem::Dependency.new(name, version_req, type.to_sym)
-        else
-          error "Invalid entry: #{entry}"
-        end
-      end
-      dependencies
-    end
-    
-  end
-  
-  class Stack < Thor
-    
-    group 'core'
-    
-    # The Stack tasks will install dependencies based on known sets of gems,
-    # regardless of actual application dependency settings.
-    
-    DM_STACK = %w[
-      extlib
-      data_objects
-      dm-core
-      dm-aggregates
-      dm-migrations
-      dm-timestamps
-      dm-types
-      dm-validations
-      merb_datamapper
-    ]
-    
-    MERB_STACK = %w[
-      extlib
-      merb-core
-      merb-action-args
-      merb-assets
-      merb-cache
-      merb-helpers
-      merb-mailer
-      merb-slices
-      merb-auth
-      merb-auth-core
-      merb-auth-more 
-      merb-auth-slice-password
-      merb-param-protection
-      merb-exceptions
-    ] + DM_STACK
-    
-    MERB_BASICS = %w[
-      extlib
-      merb-core
-      merb-action-args
-      merb-assets
-      merb-cache
-      merb-helpers
-      merb-mailer
-      merb-slices
-    ]
-    
-    # The following sets are meant for repository lookup; unlike the sets above
-    # these correspond to specific git repository items.
-    
-    MERB_MORE = %w[
-      merb-action-args
-      merb-assets
-      merb-auth
-      merb-auth-core
-      merb-auth-more 
-      merb-auth-slice-password
-      merb-cache
-      merb-exceptions
-      merb-gen
-      merb-haml
-      merb-helpers
-      merb-mailer
-      merb-param-protection
-      merb-slices
-      merb_datamapper
-    ]
-    
-    MERB_PLUGINS = %w[
-      merb_activerecord
-      merb_builder
-      merb_jquery
-      merb_laszlo
-      merb_parts
-      merb_screw_unit
-      merb_sequel
-      merb_stories
-      merb_test_unit
-    ]
-    
-    DM_MORE = %w[
-      dm-adjust
-      dm-aggregates
-      dm-ar-finders
-      dm-cli
-      dm-constraints
-      dm-is-example
-      dm-is-list
-      dm-is-nested_set
-      dm-is-remixable
-      dm-is-searchable
-      dm-is-state_machine
-      dm-is-tree
-      dm-is-versioned
-      dm-migrations
-      dm-observer
-      dm-querizer
-      dm-serializer
-      dm-shorthand
-      dm-sweatshop
-      dm-tags
-      dm-timestamps
-      dm-types
-      dm-validations
-      
-      dm-couchdb-adapter
-      dm-ferret-adapter
-      dm-rest-adapter
-    ]
-    
-    DATA_OBJECTS = %w[
-      data_objects 
-      do_derby do_hsqldb 
-      do_jdbc
-      do_mysql
-      do_postgres
-      do_sqlite3
-    ]
-    
-    attr_accessor :system, :local, :missing
-    
-    include MerbThorHelper
-    
-    global_method_options = {
-      "--merb-root"            => :optional,  # the directory to operate on
-      "--ignore-dependencies"  => :boolean,   # skip sub-dependencies
-      "--version"              => :optional   # gather specific version of framework    
-    }
-    
-    method_options global_method_options
-    def initialize(*args); super; end
-    
-    # List components and their dependencies.
-    #
-    # Examples:
-    # 
-    # merb:stack:list                                           # list all standard stack components
-    # merb:stack:list all                                       # list all component sets
-    # merb:stack:list merb-more                                 # list all dependencies of merb-more
-  
-    desc 'list [all|comp]', 'List available components (optionally filtered, defaults to merb stack)'
-    def list(comp = 'stack')
-      if comp == 'all'
-        Merb::Stack.component_sets.keys.sort.each do |comp|
-          unless (components = Merb::Stack.component_sets[comp]).empty?
-            message "Dependencies for '#{comp}' set:"
-            components.each { |c| puts "- #{c}" }
-          end
-        end
-      else
-        message "Dependencies for '#{comp}' set:"
-        Merb::Stack.components(comp).each { |c| puts "- #{c}" }
-      end      
-    end
-    
-    # Install stack components or individual gems - from stable rubygems by default.
-    #
-    # See also: Merb::Dependencies#install and Merb::Dependencies#install_dependencies
-    #
-    # Examples:
-    #
-    # merb:stack:install                                        # install the default merb stack
-    # merb:stack:install basics                                 # install a basic set of dependencies
-    # merb:stack:install merb-core                              # install merb-core from stable
-    # merb:stack:install merb-more --edge                       # install merb-core from edge
-    # merb:stack:install merb-core thor merb-slices             # install the specified gems                  
-      
-    desc 'install [COMP, ...]', 'Install stack components'
-    method_options  "--edge"      => :boolean,
-                    "--sources"   => :optional,
-                    "--force"     => :boolean,
-                    "--dry-run"   => :boolean,
-                    "--strategy"  => :optional
-    def install(*comps)
-      use_edge_gem_server if options[:edge]
-      mngr = self.dependency_manager
-      deps = gather_dependencies(comps)
-      mngr.system, mngr.local, mngr.missing = Merb::Gem.partition_dependencies(deps, gem_dir)
-      mngr.install_dependencies(strategy, deps)
-    end
-        
-    # Uninstall stack components or individual gems.
-    #
-    # See also: Merb::Dependencies#uninstall
-    #
-    # Examples:
-    #
-    # merb:stack:uninstall                                      # uninstall the default merb stack
-    # merb:stack:uninstall merb-more                            # uninstall merb-more
-    # merb:stack:uninstall merb-core thor merb-slices           # uninstall the specified gems
-    
-    desc 'uninstall [COMP, ...]', 'Uninstall stack components'
-    method_options "--dry-run" => :boolean, "--force" => :boolean
-    def uninstall(*comps)
-      deps = gather_dependencies(comps)
-      self.system, self.local, self.missing = Merb::Gem.partition_dependencies(deps, gem_dir)
-      # Clobber existing local dependencies - based on self.local
-      clobber_dependencies!
-    end
-    
-    # Install or uninstall minigems from the system.
-    #
-    # Due to the specific nature of MiniGems it can only be installed system-wide.
-    #
-    # Examples:
-    #
-    # merb:stack:minigems install                               # install minigems
-    # merb:stack:minigems uninstall                             # uninstall minigems
-    
-    desc 'minigems (install|uninstall)', 'Install or uninstall minigems (needs sudo privileges)'
-    def minigems(action)
-      case action
-      when 'install'
-        Kernel.system "#{sudo} thor merb:stack:install_minigems"
-      when 'uninstall'
-        Kernel.system "#{sudo} thor merb:stack:uninstall_minigems"
-      else
-        error "Invalid command: merb:stack:minigems #{action}"
-      end
-    end    
-    
-    # hidden minigems install task
-    def install_minigems
-      message "Installing MiniGems"
-      mngr = self.dependency_manager
-      deps = gather_dependencies('minigems')
-      mngr.system, mngr.local, mngr.missing = Merb::Gem.partition_dependencies(deps, gem_dir)
-      mngr.force_gem_dir = ::Gem.dir
-      mngr.install_dependencies(strategy, deps)
-      Kernel.system "#{sudo} minigem install"
-    end
-    
-    # hidden minigems uninstall task
-    def uninstall_minigems
-      message "Uninstalling MiniGems"
-      Kernel.system "#{sudo} minigem uninstall"
-      deps = gather_dependencies('minigems')
-      self.system, self.local, self.missing = Merb::Gem.partition_dependencies(deps, gem_dir)
-      # Clobber existing local dependencies - based on self.local
-      clobber_dependencies!      
-    end
-    
-    protected
-    
-    def gather_dependencies(comps = [])
-      if comps.empty?
-        gems = MERB_STACK
-      else
-        gems = comps.map { |c| Merb::Stack.components(c) }.flatten
-      end
-      
-      version_req = if options[:version]
-        ::Gem::Requirement.create(options[:version])
-      end
-      
-      framework_components = Merb::Stack.framework_components
-      
-      gems.map do |gem|
-        if version_req && framework_components.include?(gem)
-          ::Gem::Dependency.new(gem, version_req)
-        else
-          ::Gem::Dependency.new(gem, ::Gem::Requirement.default)
-        end
-      end
-    end
-    
-    def strategy
-      options[:strategy] || (options[:edge] ? 'edge' : 'stable')
-    end
-    
-    def dependency_manager
-      @_dependency_manager ||= begin
-        instance = Merb::Dependencies.new
-        instance.options = options
-        instance
-      end
-    end
-    
-    public
-    
-    def self.repository_sets
-      @_repository_sets ||= begin
-        # the component itself as a fallback
-        comps = Hash.new { |(hsh,c)| [c] }
-        
-        # git repository based component sets
-        comps["merb"]         = ["merb-core"] + MERB_MORE
-        comps["merb-more"]    = MERB_MORE.sort
-        comps["merb-plugins"] = MERB_PLUGINS.sort
-        comps["dm-more"]      = DM_MORE.sort
-        comps["do"]           = DATA_OBJECTS.sort
-        
-        comps
-      end     
-    end
-    
-    def self.component_sets
-      @_component_sets ||= begin
-        # the component itself as a fallback
-        comps = Hash.new { |(hsh,c)| [c] }
-        comps.update(repository_sets)
-        
-        # specific set of dependencies
-        comps["stack"]        = MERB_STACK.sort
-        comps["basics"]       = MERB_BASICS.sort
-        
-        # orm dependencies
-        comps["datamapper"]   = DM_STACK.sort
-        comps["sequel"]       = ["merb_sequel", "sequel"]
-        comps["activerecord"] = ["merb_activerecord", "activerecord"]
-        
-        comps
-      end
-    end
-    
-    def self.framework_components
-      %w[merb-core merb-more].inject([]) do |all, comp| 
-        all + components(comp)
-      end
-    end
-    
-    def self.components(comp = nil)
-      if comp
-        component_sets[comp]
-      else
-        comps = %w[merb-core merb-more merb-plugins dm-core dm-more]
-        comps.inject([]) do |all, grp|
-          all + (component_sets[grp] || [])
-        end
-      end
-    end
-    
-    def self.select_component_dependencies(dependencies, comp = nil)
-      comps = components(comp) || []
-      dependencies.select { |dep| comps.include?(dep.name) }
-    end
-    
-    def self.base_components
-      %w[thor rake extlib]
-    end
-    
-    def self.all_components
-      base_components + framework_components
-    end
-    
-    # Find the latest merb-core and gather its dependencies.
-    # We check for 0.9.8 as a minimum release version.
-    def self.core_dependencies(gem_dir = nil, ignore_deps = false)
-      @_core_dependencies ||= begin
-        if gem_dir # add local gems to index
-          orig_gem_path = ::Gem.path
-          ::Gem.clear_paths; ::Gem.path.unshift(gem_dir)
-        end
-        deps = []
-        merb_core = ::Gem::Dependency.new('merb-core', '>= 0.9.8')
-        if gemspec = ::Gem.source_index.search(merb_core).last
-          deps << ::Gem::Dependency.new('merb-core', gemspec.version)
-          if ignore_deps 
-            deps += gemspec.dependencies.select do |d| 
-              base_components.include?(d.name)
-            end
-          else
-            deps += gemspec.dependencies
-          end
-        end
-        ::Gem.path.replace(orig_gem_path) if gem_dir # reset
-        deps
-      end
-    end
-    
-    def self.lookup_repository_name(item)
-      set_name = nil
-      # The merb repo contains -more as well, so it needs special attention
-      return 'merb' if self.repository_sets['merb'].include?(item)
-      
-      # Proceed with finding the item in a known component set
-      self.repository_sets.find do |set, items| 
-        next if set == 'merb'
-        items.include?(item) ? (set_name = set) : nil
-      end
-      set_name
-    end
-    
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/public/webrat/webrat_spec.rb b/spec10/public/webrat/webrat_spec.rb
deleted file mode 100644
index 35e0620..0000000
--- a/spec10/public/webrat/webrat_spec.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
-
-Merb.start(
-  :merb_root => File.dirname(__FILE__) / "test_app",
-  :fork_for_class_load => false
-)
-Merb::Config[:log_stream] = File.open("/dev/null", "w")
-Merb.reset_logger!
-
-describe "an app tested using the webrat proxies" do
-  describe("#visits") do
-    it "supports visits" do
-      visits("/testing")
-    end
-  
-    it "can use the Merb expectations with visits" do
-      visits("/testing").should be_successful
-    end
-  
-    it "supports visits intermixed with request" do
-      request("/testing")
-      resp = visits("/testing/next")
-      resp.should have_xpath("//p")
-    end
-  end
-  
-  describe("#click_link") do
-    it "supports click_link" do
-      visit "/testing"
-      click_link "Next"
-    end
-    
-    it "can use the Merb expectations with click_link" do
-      visit "/testing"
-      resp = click_link "Next"
-      resp.should have_xpath("//p[contains(., 'Got to next')]")
-    end
-    
-    it "supports click_link after a request" do
-      request("/testing")
-      resp = click_link "Next"
-      resp.should have_xpath("//p[contains(., 'Got to next')]")
-    end
-  end
-  
-  describe "filling in forms" do
-    it "lets you fill in text fields" do
-      visit "/testing/show_form"
-      fill_in "Name", :with => "Merby"
-      fill_in "Address", :with => "82 South Park"
-      click_button "Submit!"
-    end
-    
-    it "returns the response when you fill in text fields" do
-      visit "/testing/show_form"
-      fill_in "name", :with => "Merby"
-      fill_in "address", :with => "82 South Park"
-      resp = click_button "Submit!"
-      resp.should have_xpath("//p[contains(., 'Merby')]")
-    end
-    
-    it "lets you check checkboxes" do
-      visit "/testing/show_form"
-      check "Tis truez"
-    end
-    
-    it "returns the response when you check checkboxes" do
-      visit "/testing/show_form"
-      check "Tis truez"
-      resp = click_button "Submit!"
-      resp.should have_xpath("//p[contains(., 'truez: 1')]")
-    end
-  end
-  
-end
\ No newline at end of file
diff --git a/spec10/spec_helper.rb b/spec10/spec_helper.rb
deleted file mode 100644
index eb8b413..0000000
--- a/spec10/spec_helper.rb
+++ /dev/null
@@ -1,134 +0,0 @@
-require "rubygems"
-require "spec"
-require File.join(File.dirname(__FILE__), "..", "lib", "merb-core")
-
-def startup_merb(opts = {})
-  default_options = {:environment => 'test', :adapter => 'runner'}
-  options = default_options.merge(opts)
-  Merb.start_environment(options)
-end
-
-# -- Global custom matchers --
-
-# A better +be_kind_of+ with more informative error messages.
-#
-# The default +be_kind_of+ just says
-#
-#   "expected to return true but got false"
-#
-# This one says
-#
-#   "expected File but got Tempfile"
-
-module Merb
-  module Test
-    module RspecMatchers
-      class IncludeLog
-        def initialize(expected)
-          @expected = expected
-        end
-        
-        def matches?(target)
-          target.rewind
-          @text = target.read
-          @text =~ (String === @expected ? /#{Regexp.escape @expected}/ : @expected)
-        end
-        
-        def failure_message
-          "expected to find `#{@expected}' in the log but got:\n" <<
-          @text.map {|s| "  #{s}" }.join
-        end
-        
-        def negative_failure_message
-          "exected not to find `#{@expected}' in the log but got:\n" <<
-          @text.map {|s| "  #{s}" }.join
-        end
-        
-        def description
-          "include #{@text} in the log"
-        end
-      end
-      
-      class BeKindOf
-        def initialize(expected) # + args
-          @expected = expected
-        end
-
-        def matches?(target)
-          @target = target
-          @target.kind_of?(@expected)
-        end
-
-        def failure_message
-          "expected #{@expected} but got #{@target.class}"
-        end
-
-        def negative_failure_message
-          "expected #{@expected} to not be #{@target.class}"
-        end
-
-        def description
-          "be_kind_of #{@target}"
-        end
-      end
-
-      def be_kind_of(expected) # + args
-        BeKindOf.new(expected)
-      end
-      
-      def include_log(expected)
-        IncludeLog.new(expected)
-      end
-    end
-
-    module Helper
-      def running(&blk) blk; end
-
-      def executing(&blk) blk; end
-
-      def doing(&blk) blk; end
-
-      def calling(&blk) blk; end
-    end
-  end
-end
-
-Spec::Runner.configure do |config|
-  config.include Merb::Test::Helper
-  config.include Merb::Test::RspecMatchers
-  config.include ::Webrat::Matchers
-  config.include ::Webrat::HaveTagMatcher
-  config.include Merb::Test::RequestHelper
-  config.include Merb::Test::RouteHelper
-
-  def reset_dependency(name, const = nil)
-    Object.send(:remove_const, const) if const && Object.const_defined?(const)
-    Merb::BootLoader::Dependencies.dependencies.delete_if do |d|
-      d.name == name
-    end
-    $LOADED_FEATURES.delete("#{name}.rb")
-  end
-
-  def with_level(level)
-    Merb::Config[:log_stream] = StringIO.new
-    Merb::Config[:log_level] = level
-    Merb.reset_logger!
-    yield
-    Merb::Config[:log_stream]
-  end
-
-  def capture(stream)
-    begin
-      stream = stream.to_s
-      eval "$#{stream} = StringIO.new"
-      yield
-      result = eval("$#{stream}").string
-    ensure
-      eval("$#{stream} = #{stream.upcase}")
-    end
-
-    result
-  end
-
-  alias silence capture
-end

-- 
ruby-merb-core.git



More information about the Pkg-ruby-extras-commits mailing list